1 /**
2 * Interface for Linux TIPC sockets, /usr/include/linux/tipc.h
3 *
4 * Copyright: Public Domain
5 * License: Public Domain
6 * Authors: Leandro Lucarella
7 */
8
9 module core.sys.linux.tipc;
10
11 version (linux):
12 extern (C) nothrow @nogc:
13 @system:
14
15 struct tipc_portid
16 {
17 uint ref_;
18 uint node;
19 }
20
21 struct tipc_name
22 {
23 uint type;
24 uint instance;
25 }
26
27 struct tipc_name_seq
28 {
29 uint type;
30 uint lower;
31 uint upper;
32 }
33
34 struct tipc_subscr
35 {
36 tipc_name_seq seq;
37 uint timeout;
38 uint filter;
39 ubyte[8] usr_handle;
40 }
41
42 struct tipc_event
43 {
44 uint event;
45 uint found_lower;
46 uint found_upper;
47 tipc_portid port;
48 tipc_subscr s;
49 }
50
51 struct sockaddr_tipc
52 {
53 ushort family;
54 ubyte addrtype;
55 byte scope_;
56 union Addr
57 {
58 tipc_portid id;
59 tipc_name_seq nameseq;
60 static struct Name
61 {
62 tipc_name name;
63 uint domain;
64 }
65 Name name;
66 }
67 Addr addr;
68 }
69
tipc_addr(uint zone,uint cluster,uint node)70 uint tipc_addr(uint zone, uint cluster, uint node)
71 {
72 return (zone << 24) | (cluster << 12) | node;
73 }
74
75 unittest
76 {
77 assert (tipc_addr(0, 0, 0) == 0);
78 assert (tipc_addr(1, 1, 1) == 16781313);
79 assert (tipc_addr(2, 1, 27) == 33558555);
80 assert (tipc_addr(3, 1, 63) == 50335807);
81 }
82
tipc_zone(uint addr)83 uint tipc_zone(uint addr)
84 {
85 return addr >> 24;
86 }
87
88 unittest
89 {
90 assert (tipc_zone(0u) == 0);
91 assert (tipc_zone(16781313u) == 1);
92 assert (tipc_zone(33558555u) == 2);
93 assert (tipc_zone(50335807u) == 3);
94 }
95
tipc_cluster(uint addr)96 uint tipc_cluster(uint addr)
97 {
98 return (addr >> 12) & 0xfff;
99 }
100
101 unittest
102 {
103 assert (tipc_cluster(0u) == 0);
104 assert (tipc_cluster(16781313u) == 1);
105 assert (tipc_cluster(33558555u) == 1);
106 assert (tipc_cluster(50335807u) == 1);
107 }
108
tipc_node(uint addr)109 uint tipc_node(uint addr)
110 {
111 return addr & 0xfff;
112 }
113
114 unittest
115 {
116 assert (tipc_node(0u) == 0);
117 assert (tipc_node(16781313u) == 1);
118 assert (tipc_node(33558555u) == 27);
119 assert (tipc_node(50335807u) == 63);
120 }
121
122 enum: int
123 {
124 TIPC_CFG_SRV = 0,
125 TIPC_TOP_SRV = 1,
126 TIPC_RESERVED_TYPES = 64,
127 }
128
129 enum: int
130 {
131 TIPC_ZONE_SCOPE = 1,
132 TIPC_CLUSTER_SCOPE = 2,
133 TIPC_NODE_SCOPE = 3,
134 }
135
136 enum: int
137 {
138 TIPC_MAX_USER_MSG_SIZE = 66000,
139 }
140
141 enum: int
142 {
143 TIPC_LOW_IMPORTANCE = 0,
144 TIPC_MEDIUM_IMPORTANCE = 1,
145 TIPC_HIGH_IMPORTANCE = 2,
146 TIPC_CRITICAL_IMPORTANCE = 3,
147 }
148
149 enum: int
150 {
151 TIPC_OK = 0,
152 TIPC_ERR_NO_NAME = 1,
153 TIPC_ERR_NO_PORT = 2,
154 TIPC_ERR_NO_NODE = 3,
155 TIPC_ERR_OVERLOAD = 4,
156 TIPC_CONN_SHUTDOWN = 5,
157 }
158
159 enum: int
160 {
161 TIPC_SUB_PORTS = 0x01,
162 TIPC_SUB_SERVICE = 0x02,
163 TIPC_SUB_CANCEL = 0x04,
164 }
165
166 version (none) enum: int
167 {
168 TIPC_SUB_NO_BIND_EVTS = 0x04,
169 TIPC_SUB_NO_UNBIND_EVTS = 0x08,
170 TIPC_SUB_SINGLE_EVT = 0x10,
171 }
172
173 enum: int
174 {
175 TIPC_WAIT_FOREVER = ~0,
176 }
177
178 enum: int
179 {
180
181 TIPC_PUBLISHED = 1,
182 TIPC_WITHDRAWN = 2,
183 TIPC_SUBSCR_TIMEOUT = 3,
184 }
185
186 enum: int
187 {
188 AF_TIPC = 30,
189 PF_TIPC = 30,
190 SOL_TIPC = 271,
191 TIPC_ADDR_NAMESEQ = 1,
192 TIPC_ADDR_MCAST = 1,
193 TIPC_ADDR_NAME = 2,
194 TIPC_ADDR_ID = 3,
195 }
196
197 enum: int
198 {
199 TIPC_ERRINFO = 1,
200 TIPC_RETDATA = 2,
201 TIPC_DESTNAME = 3,
202 }
203
204 enum: int
205 {
206 TIPC_IMPORTANCE = 127,
207 TIPC_SRC_DROPPABLE = 128,
208 TIPC_DEST_DROPPABLE = 129,
209 TIPC_CONN_TIMEOUT = 130,
210 }
211
212