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