1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef MCA_BTL_TCP_PROC_H
21 #define MCA_BTL_TCP_PROC_H
22
23 #include "opal/class/opal_object.h"
24 #include "opal/util/proc.h"
25 #include "btl_tcp.h"
26 #include "btl_tcp_addr.h"
27 #include "btl_tcp_endpoint.h"
28
29 BEGIN_C_DECLS
30
31
32
33
34
35
36
37 struct mca_btl_tcp_proc_t {
38 opal_list_item_t super;
39
40
41 opal_proc_t *proc_opal;
42
43
44 struct mca_btl_tcp_addr_t* proc_addrs;
45
46
47 size_t proc_addr_count;
48
49
50 struct mca_btl_base_endpoint_t **proc_endpoints;
51
52
53 size_t proc_endpoint_count;
54
55
56 opal_mutex_t proc_lock;
57
58 };
59 typedef struct mca_btl_tcp_proc_t mca_btl_tcp_proc_t;
60 OBJ_CLASS_DECLARATION(mca_btl_tcp_proc_t);
61
62
63 #define MAX_KERNEL_INTERFACE_INDEX 65536
64
65
66 #define MAX_KERNEL_INTERFACES 8
67
68
69
70
71
72 #define MAX_PERMUTATION_INTERFACES 8
73
74
75
76
77
78
79 struct mca_btl_tcp_interface_t {
80 struct sockaddr_storage* ipv4_address;
81 struct sockaddr_storage* ipv6_address;
82 mca_btl_tcp_addr_t* ipv4_endpoint_addr;
83 mca_btl_tcp_addr_t* ipv6_endpoint_addr;
84 uint32_t ipv4_netmask;
85 uint32_t ipv6_netmask;
86 int kernel_index;
87 int peer_interface;
88 int index;
89 int inuse;
90 };
91
92 typedef struct mca_btl_tcp_interface_t mca_btl_tcp_interface_t;
93
94
95
96
97
98 enum mca_btl_tcp_connection_quality {
99 CQ_NO_CONNECTION,
100 CQ_PRIVATE_DIFFERENT_NETWORK,
101 CQ_PRIVATE_SAME_NETWORK,
102 CQ_PUBLIC_DIFFERENT_NETWORK,
103 CQ_PUBLIC_SAME_NETWORK
104 };
105
106
107 mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(opal_proc_t* proc);
108 mca_btl_tcp_proc_t* mca_btl_tcp_proc_lookup(const opal_process_name_t* name);
109 int mca_btl_tcp_proc_insert(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*);
110 int mca_btl_tcp_proc_remove(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*);
111 void mca_btl_tcp_proc_accept(mca_btl_tcp_proc_t*, struct sockaddr*, int);
112 bool mca_btl_tcp_proc_tosocks(mca_btl_tcp_addr_t*, struct sockaddr_storage*);
113
114 END_C_DECLS
115 #endif