1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38#ifndef _LINUX_TIPC_CONFIG_H_
39#define _LINUX_TIPC_CONFIG_H_
40
41#include <linux/types.h>
42#include <linux/string.h>
43#include <linux/tipc.h>
44#include <asm/byteorder.h>
45
46#ifndef __KERNEL__
47#include <arpa/inet.h>
48#endif
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75#define TIPC_CMD_NOOP 0x0000
76#define TIPC_CMD_GET_NODES 0x0001
77#define TIPC_CMD_GET_MEDIA_NAMES 0x0002
78#define TIPC_CMD_GET_BEARER_NAMES 0x0003
79#define TIPC_CMD_GET_LINKS 0x0004
80#define TIPC_CMD_SHOW_NAME_TABLE 0x0005
81#define TIPC_CMD_SHOW_PORTS 0x0006
82#define TIPC_CMD_SHOW_LINK_STATS 0x000B
83#define TIPC_CMD_SHOW_STATS 0x000F
84
85
86
87
88
89
90
91
92#define TIPC_CMD_GET_REMOTE_MNG 0x4003
93#define TIPC_CMD_GET_MAX_PORTS 0x4004
94#define TIPC_CMD_GET_MAX_PUBL 0x4005
95#define TIPC_CMD_GET_MAX_SUBSCR 0x4006
96#define TIPC_CMD_GET_MAX_ZONES 0x4007
97#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008
98#define TIPC_CMD_GET_MAX_NODES 0x4009
99#define TIPC_CMD_GET_MAX_SLAVES 0x400A
100#define TIPC_CMD_GET_NETID 0x400B
101
102#define TIPC_CMD_ENABLE_BEARER 0x4101
103#define TIPC_CMD_DISABLE_BEARER 0x4102
104#define TIPC_CMD_SET_LINK_TOL 0x4107
105#define TIPC_CMD_SET_LINK_PRI 0x4108
106#define TIPC_CMD_SET_LINK_WINDOW 0x4109
107#define TIPC_CMD_SET_LOG_SIZE 0x410A
108#define TIPC_CMD_DUMP_LOG 0x410B
109#define TIPC_CMD_RESET_LINK_STATS 0x410C
110
111
112
113
114
115
116
117#define TIPC_CMD_SET_NODE_ADDR 0x8001
118#define TIPC_CMD_SET_REMOTE_MNG 0x8003
119#define TIPC_CMD_SET_MAX_PORTS 0x8004
120#define TIPC_CMD_SET_MAX_PUBL 0x8005
121#define TIPC_CMD_SET_MAX_SUBSCR 0x8006
122#define TIPC_CMD_SET_MAX_ZONES 0x8007
123#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008
124#define TIPC_CMD_SET_MAX_NODES 0x8009
125#define TIPC_CMD_SET_MAX_SLAVES 0x800A
126#define TIPC_CMD_SET_NETID 0x800B
127
128
129
130
131
132
133
134#define TIPC_CMD_NOT_NET_ADMIN 0xC001
135
136
137
138
139
140#define TIPC_TLV_NONE 0
141#define TIPC_TLV_VOID 1
142#define TIPC_TLV_UNSIGNED 2
143#define TIPC_TLV_STRING 3
144#define TIPC_TLV_LARGE_STRING 4
145#define TIPC_TLV_ULTRA_STRING 5
146
147#define TIPC_TLV_ERROR_STRING 16
148#define TIPC_TLV_NET_ADDR 17
149#define TIPC_TLV_MEDIA_NAME 18
150#define TIPC_TLV_BEARER_NAME 19
151#define TIPC_TLV_LINK_NAME 20
152#define TIPC_TLV_NODE_INFO 21
153#define TIPC_TLV_LINK_INFO 22
154#define TIPC_TLV_BEARER_CONFIG 23
155#define TIPC_TLV_LINK_CONFIG 24
156#define TIPC_TLV_NAME_TBL_QUERY 25
157#define TIPC_TLV_PORT_REF 26
158
159
160
161
162
163#define TIPC_MIN_LINK_PRI 0
164#define TIPC_DEF_LINK_PRI 10
165#define TIPC_MAX_LINK_PRI 31
166#define TIPC_MEDIA_LINK_PRI (TIPC_MAX_LINK_PRI + 1)
167
168
169
170
171
172#define TIPC_MIN_LINK_TOL 50
173#define TIPC_DEF_LINK_TOL 1500
174#define TIPC_MAX_LINK_TOL 30000
175
176#if (TIPC_MIN_LINK_TOL < 16)
177#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
178#endif
179
180
181
182
183
184#define TIPC_MIN_LINK_WIN 16
185#define TIPC_DEF_LINK_WIN 50
186#define TIPC_MAX_LINK_WIN 8191
187
188
189struct tipc_node_info {
190 __be32 addr;
191 __be32 up;
192};
193
194struct tipc_link_info {
195 __be32 dest;
196 __be32 up;
197 char str[TIPC_MAX_LINK_NAME];
198};
199
200struct tipc_bearer_config {
201 __be32 priority;
202 __be32 disc_domain;
203 char name[TIPC_MAX_BEARER_NAME];
204};
205
206struct tipc_link_config {
207 __be32 value;
208 char name[TIPC_MAX_LINK_NAME];
209};
210
211#define TIPC_NTQ_ALLTYPES 0x80000000
212
213struct tipc_name_table_query {
214 __be32 depth;
215 __be32 type;
216 __be32 lowbound;
217 __be32 upbound;
218};
219
220
221
222
223
224
225
226
227#define TIPC_CFG_TLV_ERROR "\x80"
228#define TIPC_CFG_NOT_NET_ADMIN "\x81"
229#define TIPC_CFG_NOT_ZONE_MSTR "\x82"
230#define TIPC_CFG_NO_REMOTE "\x83"
231#define TIPC_CFG_NOT_SUPPORTED "\x84"
232#define TIPC_CFG_INVALID_VALUE "\x85"
233
234
235
236
237
238
239
240
241
242
243struct tlv_desc {
244 __be16 tlv_len;
245 __be16 tlv_type;
246};
247
248#define TLV_ALIGNTO 4
249
250#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1))
251#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))
252#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))
253#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))
254
255static inline int TLV_OK(const void *tlv, __u16 space)
256{
257
258
259
260
261
262
263
264
265
266 return (space >= TLV_SPACE(0)) &&
267 (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space);
268}
269
270static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
271{
272 return TLV_OK(tlv, space) &&
273 (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
274}
275
276static inline int TLV_GET_LEN(struct tlv_desc *tlv)
277{
278 return ntohs(tlv->tlv_len);
279}
280
281static inline void TLV_SET_LEN(struct tlv_desc *tlv, __u16 len)
282{
283 tlv->tlv_len = htons(len);
284}
285
286static inline int TLV_CHECK_TYPE(struct tlv_desc *tlv, __u16 type)
287{
288 return (ntohs(tlv->tlv_type) == type);
289}
290
291static inline void TLV_SET_TYPE(struct tlv_desc *tlv, __u16 type)
292{
293 tlv->tlv_type = htons(type);
294}
295
296static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
297{
298 struct tlv_desc *tlv_ptr;
299 int tlv_len;
300
301 tlv_len = TLV_LENGTH(len);
302 tlv_ptr = (struct tlv_desc *)tlv;
303 tlv_ptr->tlv_type = htons(type);
304 tlv_ptr->tlv_len = htons(tlv_len);
305 if (len && data)
306 memcpy(TLV_DATA(tlv_ptr), data, tlv_len);
307 return TLV_SPACE(len);
308}
309
310
311
312
313
314
315struct tlv_list_desc {
316 struct tlv_desc *tlv_ptr;
317 __u32 tlv_space;
318};
319
320static inline void TLV_LIST_INIT(struct tlv_list_desc *list,
321 void *data, __u32 space)
322{
323 list->tlv_ptr = (struct tlv_desc *)data;
324 list->tlv_space = space;
325}
326
327static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list)
328{
329 return (list->tlv_space == 0);
330}
331
332static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type)
333{
334 return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type);
335}
336
337static inline void *TLV_LIST_DATA(struct tlv_list_desc *list)
338{
339 return TLV_DATA(list->tlv_ptr);
340}
341
342static inline void TLV_LIST_STEP(struct tlv_list_desc *list)
343{
344 __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len));
345
346 list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
347 list->tlv_space -= tlv_space;
348}
349
350
351
352
353
354#define TIPC_GENL_NAME "TIPC"
355#define TIPC_GENL_VERSION 0x1
356#define TIPC_GENL_CMD 0x1
357
358
359
360
361struct tipc_genlmsghdr {
362 __u32 dest;
363 __u16 cmd;
364 __u16 reserved;
365};
366
367#define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
368
369
370
371
372
373
374
375
376
377struct tipc_cfg_msg_hdr {
378 __be32 tcm_len;
379 __be16 tcm_type;
380 __be16 tcm_flags;
381 char tcm_reserved[8];
382};
383
384#define TCM_F_REQUEST 0x1
385#define TCM_F_MORE 0x2
386
387#define TCM_ALIGN(datalen) (((datalen)+3) & ~3)
388#define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen)
389#define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen)))
390#define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0)))
391
392static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags,
393 void *data, __u16 data_len)
394{
395 struct tipc_cfg_msg_hdr *tcm_hdr;
396 int msg_len;
397
398 msg_len = TCM_LENGTH(data_len);
399 tcm_hdr = (struct tipc_cfg_msg_hdr *)msg;
400 tcm_hdr->tcm_len = htonl(msg_len);
401 tcm_hdr->tcm_type = htons(cmd);
402 tcm_hdr->tcm_flags = htons(flags);
403 if (data_len && data)
404 memcpy(TCM_DATA(msg), data, data_len);
405 return TCM_SPACE(data_len);
406}
407
408#endif
409