0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 #ifndef _LINUX_TIPC_CONFIG_H_
0039 #define _LINUX_TIPC_CONFIG_H_
0040
0041 #include <linux/types.h>
0042 #include <linux/string.h>
0043 #include <linux/tipc.h>
0044 #include <asm/byteorder.h>
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071 #define TIPC_CMD_NOOP 0x0000
0072 #define TIPC_CMD_GET_NODES 0x0001
0073 #define TIPC_CMD_GET_MEDIA_NAMES 0x0002
0074 #define TIPC_CMD_GET_BEARER_NAMES 0x0003
0075 #define TIPC_CMD_GET_LINKS 0x0004
0076 #define TIPC_CMD_SHOW_NAME_TABLE 0x0005
0077 #define TIPC_CMD_SHOW_PORTS 0x0006
0078 #define TIPC_CMD_SHOW_LINK_STATS 0x000B
0079 #define TIPC_CMD_SHOW_STATS 0x000F
0080
0081
0082
0083
0084
0085
0086
0087
0088 #define TIPC_CMD_GET_REMOTE_MNG 0x4003
0089 #define TIPC_CMD_GET_MAX_PORTS 0x4004
0090 #define TIPC_CMD_GET_MAX_PUBL 0x4005
0091 #define TIPC_CMD_GET_MAX_SUBSCR 0x4006
0092 #define TIPC_CMD_GET_MAX_ZONES 0x4007
0093 #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008
0094 #define TIPC_CMD_GET_MAX_NODES 0x4009
0095 #define TIPC_CMD_GET_MAX_SLAVES 0x400A
0096 #define TIPC_CMD_GET_NETID 0x400B
0097
0098 #define TIPC_CMD_ENABLE_BEARER 0x4101
0099 #define TIPC_CMD_DISABLE_BEARER 0x4102
0100 #define TIPC_CMD_SET_LINK_TOL 0x4107
0101 #define TIPC_CMD_SET_LINK_PRI 0x4108
0102 #define TIPC_CMD_SET_LINK_WINDOW 0x4109
0103 #define TIPC_CMD_SET_LOG_SIZE 0x410A
0104 #define TIPC_CMD_DUMP_LOG 0x410B
0105 #define TIPC_CMD_RESET_LINK_STATS 0x410C
0106
0107
0108
0109
0110
0111
0112
0113 #define TIPC_CMD_SET_NODE_ADDR 0x8001
0114 #define TIPC_CMD_SET_REMOTE_MNG 0x8003
0115 #define TIPC_CMD_SET_MAX_PORTS 0x8004
0116 #define TIPC_CMD_SET_MAX_PUBL 0x8005
0117 #define TIPC_CMD_SET_MAX_SUBSCR 0x8006
0118 #define TIPC_CMD_SET_MAX_ZONES 0x8007
0119 #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008
0120 #define TIPC_CMD_SET_MAX_NODES 0x8009
0121 #define TIPC_CMD_SET_MAX_SLAVES 0x800A
0122 #define TIPC_CMD_SET_NETID 0x800B
0123
0124
0125
0126
0127
0128
0129
0130 #define TIPC_CMD_NOT_NET_ADMIN 0xC001
0131
0132
0133
0134
0135
0136 #define TIPC_TLV_NONE 0
0137 #define TIPC_TLV_VOID 1
0138 #define TIPC_TLV_UNSIGNED 2
0139 #define TIPC_TLV_STRING 3
0140 #define TIPC_TLV_LARGE_STRING 4
0141 #define TIPC_TLV_ULTRA_STRING 5
0142
0143 #define TIPC_TLV_ERROR_STRING 16
0144 #define TIPC_TLV_NET_ADDR 17
0145 #define TIPC_TLV_MEDIA_NAME 18
0146 #define TIPC_TLV_BEARER_NAME 19
0147 #define TIPC_TLV_LINK_NAME 20
0148 #define TIPC_TLV_NODE_INFO 21
0149 #define TIPC_TLV_LINK_INFO 22
0150 #define TIPC_TLV_BEARER_CONFIG 23
0151 #define TIPC_TLV_LINK_CONFIG 24
0152 #define TIPC_TLV_NAME_TBL_QUERY 25
0153 #define TIPC_TLV_PORT_REF 26
0154
0155
0156
0157
0158
0159 #define TIPC_MIN_LINK_PRI 0
0160 #define TIPC_DEF_LINK_PRI 10
0161 #define TIPC_MAX_LINK_PRI 31
0162 #define TIPC_MEDIA_LINK_PRI (TIPC_MAX_LINK_PRI + 1)
0163
0164
0165
0166
0167
0168 #define TIPC_MIN_LINK_TOL 50
0169 #define TIPC_DEF_LINK_TOL 1500
0170 #define TIPC_MAX_LINK_TOL 30000
0171
0172 #if (TIPC_MIN_LINK_TOL < 16)
0173 #error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
0174 #endif
0175
0176
0177
0178
0179
0180 #define TIPC_MIN_LINK_WIN 16
0181 #define TIPC_DEF_LINK_WIN 50
0182 #define TIPC_MAX_LINK_WIN 8191
0183
0184
0185
0186
0187
0188 #define TIPC_DEF_LINK_UDP_MTU 14000
0189
0190 struct tipc_node_info {
0191 __be32 addr;
0192 __be32 up;
0193 };
0194
0195 struct tipc_link_info {
0196 __be32 dest;
0197 __be32 up;
0198 char str[TIPC_MAX_LINK_NAME];
0199 };
0200
0201 struct tipc_bearer_config {
0202 __be32 priority;
0203 __be32 disc_domain;
0204 char name[TIPC_MAX_BEARER_NAME];
0205 };
0206
0207 struct tipc_link_config {
0208 __be32 value;
0209 char name[TIPC_MAX_LINK_NAME];
0210 };
0211
0212 #define TIPC_NTQ_ALLTYPES 0x80000000
0213
0214 struct tipc_name_table_query {
0215 __be32 depth;
0216 __be32 type;
0217 __be32 lowbound;
0218 __be32 upbound;
0219 };
0220
0221
0222
0223
0224
0225
0226
0227
0228 #define TIPC_CFG_TLV_ERROR "\x80"
0229 #define TIPC_CFG_NOT_NET_ADMIN "\x81"
0230 #define TIPC_CFG_NOT_ZONE_MSTR "\x82"
0231 #define TIPC_CFG_NO_REMOTE "\x83"
0232 #define TIPC_CFG_NOT_SUPPORTED "\x84"
0233 #define TIPC_CFG_INVALID_VALUE "\x85"
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244 struct tlv_desc {
0245 __be16 tlv_len;
0246 __be16 tlv_type;
0247 };
0248
0249 #define TLV_ALIGNTO 4
0250
0251 #define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1))
0252 #define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))
0253 #define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))
0254 #define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))
0255
0256 static inline int TLV_OK(const void *tlv, __u16 space)
0257 {
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267 return (space >= TLV_SPACE(0)) &&
0268 (__be16_to_cpu(((struct tlv_desc *)tlv)->tlv_len) <= space);
0269 }
0270
0271 static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
0272 {
0273 return TLV_OK(tlv, space) &&
0274 (__be16_to_cpu(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
0275 }
0276
0277 static inline int TLV_GET_LEN(struct tlv_desc *tlv)
0278 {
0279 return __be16_to_cpu(tlv->tlv_len);
0280 }
0281
0282 static inline void TLV_SET_LEN(struct tlv_desc *tlv, __u16 len)
0283 {
0284 tlv->tlv_len = __cpu_to_be16(len);
0285 }
0286
0287 static inline int TLV_CHECK_TYPE(struct tlv_desc *tlv, __u16 type)
0288 {
0289 return (__be16_to_cpu(tlv->tlv_type) == type);
0290 }
0291
0292 static inline void TLV_SET_TYPE(struct tlv_desc *tlv, __u16 type)
0293 {
0294 tlv->tlv_type = __cpu_to_be16(type);
0295 }
0296
0297 static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
0298 {
0299 struct tlv_desc *tlv_ptr;
0300 int tlv_len;
0301
0302 tlv_len = TLV_LENGTH(len);
0303 tlv_ptr = (struct tlv_desc *)tlv;
0304 tlv_ptr->tlv_type = __cpu_to_be16(type);
0305 tlv_ptr->tlv_len = __cpu_to_be16(tlv_len);
0306 if (len && data) {
0307 memcpy(TLV_DATA(tlv_ptr), data, len);
0308 memset((char *)TLV_DATA(tlv_ptr) + len, 0, TLV_SPACE(len) - tlv_len);
0309 }
0310 return TLV_SPACE(len);
0311 }
0312
0313
0314
0315
0316
0317
0318 struct tlv_list_desc {
0319 struct tlv_desc *tlv_ptr;
0320 __u32 tlv_space;
0321 };
0322
0323 static inline void TLV_LIST_INIT(struct tlv_list_desc *list,
0324 void *data, __u32 space)
0325 {
0326 list->tlv_ptr = (struct tlv_desc *)data;
0327 list->tlv_space = space;
0328 }
0329
0330 static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list)
0331 {
0332 return (list->tlv_space == 0);
0333 }
0334
0335 static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type)
0336 {
0337 return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type);
0338 }
0339
0340 static inline void *TLV_LIST_DATA(struct tlv_list_desc *list)
0341 {
0342 return TLV_DATA(list->tlv_ptr);
0343 }
0344
0345 static inline void TLV_LIST_STEP(struct tlv_list_desc *list)
0346 {
0347 __u16 tlv_space = TLV_ALIGN(__be16_to_cpu(list->tlv_ptr->tlv_len));
0348
0349 list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
0350 list->tlv_space -= tlv_space;
0351 }
0352
0353
0354
0355
0356
0357 #define TIPC_GENL_NAME "TIPC"
0358 #define TIPC_GENL_VERSION 0x1
0359 #define TIPC_GENL_CMD 0x1
0360
0361
0362
0363
0364 struct tipc_genlmsghdr {
0365 __u32 dest;
0366 __u16 cmd;
0367 __u16 reserved;
0368 };
0369
0370 #define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380 struct tipc_cfg_msg_hdr {
0381 __be32 tcm_len;
0382 __be16 tcm_type;
0383 __be16 tcm_flags;
0384 char tcm_reserved[8];
0385 };
0386
0387 #define TCM_F_REQUEST 0x1
0388 #define TCM_F_MORE 0x2
0389
0390 #define TCM_ALIGN(datalen) (((datalen)+3) & ~3)
0391 #define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen)
0392 #define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen)))
0393 #define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0)))
0394
0395 static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags,
0396 void *data, __u16 data_len)
0397 {
0398 struct tipc_cfg_msg_hdr *tcm_hdr;
0399 int msg_len;
0400
0401 msg_len = TCM_LENGTH(data_len);
0402 tcm_hdr = (struct tipc_cfg_msg_hdr *)msg;
0403 tcm_hdr->tcm_len = __cpu_to_be32(msg_len);
0404 tcm_hdr->tcm_type = __cpu_to_be16(cmd);
0405 tcm_hdr->tcm_flags = __cpu_to_be16(flags);
0406 if (data_len && data) {
0407 memcpy(TCM_DATA(msg), data, data_len);
0408 memset((char *)TCM_DATA(msg) + data_len, 0, TCM_SPACE(data_len) - msg_len);
0409 }
0410 return TCM_SPACE(data_len);
0411 }
0412
0413 #endif