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