[TIPC] Moved configuration interface into tipc_config.h

Restored the old tipc_config.h to get a cleaner division between the
interfaces used by normal TIPC users and TIPC administration utilities.

Signed-off-by: Per Liden <per.liden@nospam.ericsson.com>

authored by

Per Liden and committed by
David S. Miller
ea714ccd b70e4f45

+456 -412
+23 -411
include/linux/tipc.h
··· 1 1 /* 2 - * include/linux/tipc.h: Include file for TIPC users 2 + * include/linux/tipc.h: Include file for TIPC socket interface 3 3 * 4 4 * Copyright (c) 2003-2005, Ericsson Research Canada 5 5 * Copyright (c) 2005, Wind River Systems ··· 35 35 #define _LINUX_TIPC_H_ 36 36 37 37 #include <linux/types.h> 38 - #include <linux/string.h> 39 - #include <asm/byteorder.h> 40 38 41 39 /* 42 40 * TIPC addressing primitives ··· 60 62 unsigned int cluster, 61 63 unsigned int node) 62 64 { 63 - return(zone << 24) | (cluster << 12) | node; 65 + return (zone << 24) | (cluster << 12) | node; 64 66 } 65 67 66 68 static inline unsigned int tipc_zone(__u32 addr) 67 69 { 68 - return addr >> 24; 70 + return addr >> 24; 69 71 } 70 72 71 73 static inline unsigned int tipc_cluster(__u32 addr) 72 74 { 73 - return(addr >> 12) & 0xfff; 75 + return (addr >> 12) & 0xfff; 74 76 } 75 77 76 78 static inline unsigned int tipc_node(__u32 addr) 77 79 { 78 - return addr & 0xfff; 80 + return addr & 0xfff; 79 81 } 80 82 81 83 /* 82 84 * Application-accessible port name types 83 85 */ 84 86 85 - #define TIPC_NET_EVENTS 0 /* network event subscription name type */ 86 - #define TIPC_TOP_SRV 1 /* topology service name type */ 87 + #define TIPC_CFG_SRV 0 /* configuration service name type */ 88 + #define TIPC_TOP_SRV 1 /* topology service name type */ 87 89 #define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */ 88 90 89 91 /* 90 92 * Publication scopes when binding port names and port name sequences 91 93 */ 92 94 93 - #define TIPC_ZONE_SCOPE 1 94 - #define TIPC_CLUSTER_SCOPE 2 95 - #define TIPC_NODE_SCOPE 3 95 + #define TIPC_ZONE_SCOPE 1 96 + #define TIPC_CLUSTER_SCOPE 2 97 + #define TIPC_NODE_SCOPE 3 96 98 97 99 /* 98 100 * Limiting values for messages 99 101 */ 100 102 101 - #define TIPC_MAX_USER_MSG_SIZE 66000 103 + #define TIPC_MAX_USER_MSG_SIZE 66000 102 104 103 - /* 105 + /* 104 106 * Message importance levels 105 107 */ 106 108 107 - #define TIPC_LOW_IMPORTANCE 0 /* default */ 109 + #define TIPC_LOW_IMPORTANCE 0 /* default */ 108 110 #define TIPC_MEDIUM_IMPORTANCE 1 109 111 #define TIPC_HIGH_IMPORTANCE 2 110 112 #define TIPC_CRITICAL_IMPORTANCE 3 ··· 133 135 #define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */ 134 136 #endif 135 137 136 - #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ 138 + #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ 137 139 138 140 struct tipc_subscr { 139 141 struct tipc_name_seq seq; /* name sequence of interest */ ··· 142 144 char usr_handle[8]; /* available for subscriber use */ 143 145 }; 144 146 145 - 146 - #define TIPC_PUBLISHED 1 /* publication event */ 147 - #define TIPC_WITHDRAWN 2 /* withdraw event */ 148 - #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ 147 + #define TIPC_PUBLISHED 1 /* publication event */ 148 + #define TIPC_WITHDRAWN 2 /* withdraw event */ 149 + #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ 149 150 150 151 struct tipc_event { 151 152 __u32 event; /* event type */ 152 153 __u32 found_lower; /* matching name seq instances */ 153 154 __u32 found_upper; /* " " " " */ 154 - struct tipc_portid port; /* associated port */ 155 + struct tipc_portid port; /* associated port */ 155 156 struct tipc_subscr s; /* associated subscription */ 156 157 }; 157 158 ··· 170 173 #define SOL_TIPC 271 171 174 #endif 172 175 173 - #define TIPC_ADDR_NAMESEQ 1 174 - #define TIPC_ADDR_MCAST 1 175 - #define TIPC_ADDR_NAME 2 176 - #define TIPC_ADDR_ID 3 176 + #define TIPC_ADDR_NAMESEQ 1 177 + #define TIPC_ADDR_MCAST 1 178 + #define TIPC_ADDR_NAME 2 179 + #define TIPC_ADDR_ID 3 177 180 178 181 struct sockaddr_tipc { 179 182 unsigned short family; ··· 204 207 #define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ 205 208 #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ 206 209 #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ 207 - #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ 208 - 209 - /* 210 - * Bearer 211 - */ 212 - 213 - /* Identifiers of supported TIPC media types */ 214 - 215 - #define TIPC_MEDIA_TYPE_ETH 1 216 - 217 - /* Maximum sizes of TIPC bearer-related names (including terminating NUL) */ 218 - 219 - #define TIPC_MAX_MEDIA_NAME 16 /* format = media */ 220 - #define TIPC_MAX_IF_NAME 16 /* format = interface */ 221 - #define TIPC_MAX_BEARER_NAME 32 /* format = media:interface */ 222 - #define TIPC_MAX_LINK_NAME 60 /* format = Z.C.N:interface-Z.C.N:interface */ 223 - 224 - struct tipc_media_addr { 225 - __u32 type; 226 - union { 227 - __u8 eth_addr[6]; /* Ethernet bearer */ 228 - #if 0 229 - /* Prototypes for other possible bearer types */ 230 - 231 - struct { 232 - __u16 sin_family; 233 - __u16 sin_port; 234 - struct { 235 - __u32 s_addr; 236 - } sin_addr; 237 - char pad[4]; 238 - } addr_in; /* IP-based bearer */ 239 - __u16 sock_descr; /* generic socket bearer */ 240 - #endif 241 - } dev_addr; 242 - }; 243 - 244 - 245 - /* Link priority limits (range from 0 to # priorities - 1) */ 246 - 247 - #define TIPC_NUM_LINK_PRI 32 248 - 249 - /* Link tolerance limits (min, default, max), in ms */ 250 - 251 - #define TIPC_MIN_LINK_TOL 50 252 - #define TIPC_DEF_LINK_TOL 1500 253 - #define TIPC_MAX_LINK_TOL 30000 254 - 255 - /* Link window limits (min, default, max), in packets */ 256 - 257 - #define TIPC_MIN_LINK_WIN 16 258 - #define TIPC_DEF_LINK_WIN 50 259 - #define TIPC_MAX_LINK_WIN 150 260 - 261 - /* 262 - * Configuration 263 - * 264 - * All configuration management messaging involves sending a request message 265 - * to the TIPC configuration service on a node, which sends a reply message 266 - * back. (In the future multi-message replies may be supported.) 267 - * 268 - * Both request and reply messages consist of a transport header and payload. 269 - * The transport header contains info about the desired operation; 270 - * the payload consists of zero or more type/length/value (TLV) items 271 - * which specify parameters or results for the operation. 272 - * 273 - * For many operations, the request and reply messages have a fixed number 274 - * of TLVs (usually zero or one); however, some reply messages may return 275 - * a variable number of TLVs. A failed request is denoted by the presence 276 - * of an "error string" TLV in the reply message instead of the TLV(s) the 277 - * reply should contain if the request succeeds. 278 - */ 279 - 280 - #define TIPC_CFG_SRV 0 /* configuration service name type */ 281 - 282 - /* 283 - * Public commands: 284 - * May be issued by any process. 285 - * Accepted by own node, or by remote node only if remote management enabled. 286 - */ 287 - 288 - #define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */ 289 - #define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */ 290 - #define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */ 291 - #define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */ 292 - #define TIPC_CMD_GET_LINKS 0x0004 /* tx net_addr, rx link_info(s) */ 293 - #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ 294 - #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ 295 - #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ 296 - 297 - #if 0 298 - #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ 299 - #define TIPC_CMD_RESET_PORT_STATS 0x0009 /* tx port_ref, rx none */ 300 - #define TIPC_CMD_GET_ROUTES 0x000A /* tx ?, rx ? */ 301 - #define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */ 302 - #endif 303 - 304 - /* 305 - * Protected commands: 306 - * May only be issued by "network administration capable" process. 307 - * Accepted by own node, or by remote node only if remote management enabled 308 - * and this node is zone manager. 309 - */ 310 - 311 - #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ 312 - #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ 313 - #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ 314 - #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ 315 - #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */ 316 - #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ 317 - #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ 318 - #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ 319 - #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ 320 - 321 - #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ 322 - #define TIPC_CMD_DISABLE_BEARER 0x4102 /* tx bearer_name, rx none */ 323 - #define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */ 324 - #define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */ 325 - #define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */ 326 - #define TIPC_CMD_SET_LOG_SIZE 0x410A /* tx unsigned, rx none */ 327 - #define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */ 328 - #define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */ 329 - 330 - #if 0 331 - #define TIPC_CMD_CREATE_LINK 0x4103 /* tx link_create, rx none */ 332 - #define TIPC_CMD_REMOVE_LINK 0x4104 /* tx link_name, rx none */ 333 - #define TIPC_CMD_BLOCK_LINK 0x4105 /* tx link_name, rx none */ 334 - #define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */ 335 - #endif 336 - 337 - /* 338 - * Private commands: 339 - * May only be issued by "network administration capable" process. 340 - * Accepted by own node only; cannot be used on a remote node. 341 - */ 342 - 343 - #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ 344 - #if 0 345 - #define TIPC_CMD_SET_ZONE_MASTER 0x8002 /* tx none, rx none */ 346 - #endif 347 - #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ 348 - #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ 349 - #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ 350 - #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ 351 - #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */ 352 - #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ 353 - #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ 354 - #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ 355 - #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ 356 - 357 - /* 358 - * TLV types defined for TIPC 359 - */ 360 - 361 - #define TIPC_TLV_NONE 0 /* no TLV present */ 362 - #define TIPC_TLV_VOID 1 /* empty TLV (0 data bytes)*/ 363 - #define TIPC_TLV_UNSIGNED 2 /* 32-bit integer */ 364 - #define TIPC_TLV_STRING 3 /* char[128] (max) */ 365 - #define TIPC_TLV_LARGE_STRING 4 /* char[2048] (max) */ 366 - #define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */ 367 - 368 - #define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */ 369 - #define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */ 370 - #define TIPC_TLV_MEDIA_NAME 18 /* char[MAX_MEDIA_NAME] */ 371 - #define TIPC_TLV_BEARER_NAME 19 /* char[MAX_BEARER_NAME] */ 372 - #define TIPC_TLV_LINK_NAME 20 /* char[MAX_LINK_NAME] */ 373 - #define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */ 374 - #define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */ 375 - #define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */ 376 - #define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */ 377 - #define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */ 378 - #define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */ 379 - 380 - struct tipc_node_info { 381 - __u32 addr; /* network address of node */ 382 - __u32 up; /* 0=down, 1= up */ 383 - }; 384 - 385 - struct tipc_link_info { 386 - __u32 dest; /* network address of peer node */ 387 - __u32 up; /* 0=down, 1=up */ 388 - char str[TIPC_MAX_LINK_NAME]; /* link name */ 389 - }; 390 - 391 - struct tipc_bearer_config { 392 - __u32 priority; /* Range [1,31]. Override per link */ 393 - __u32 detect_scope; 394 - char name[TIPC_MAX_BEARER_NAME]; 395 - }; 396 - 397 - struct tipc_link_config { 398 - __u32 value; 399 - char name[TIPC_MAX_LINK_NAME]; 400 - }; 401 - 402 - #define TIPC_NTQ_ALLTYPES 0x80000000 403 - 404 - struct tipc_name_table_query { 405 - __u32 depth; /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */ 406 - __u32 type; /* {t,l,u} info ignored if high bit of "depth" is set */ 407 - __u32 lowbound; /* (i.e. displays all entries of name table) */ 408 - __u32 upbound; 409 - }; 410 - 411 - /* 412 - * The error string TLV is a null-terminated string describing the cause 413 - * of the request failure. To simplify error processing (and to save space) 414 - * the first character of the string can be a special error code character 415 - * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. 416 - */ 417 - 418 - #define TIPC_CFG_TLV_ERROR "\x80" /* request contains incorrect TLV(s) */ 419 - #define TIPC_CFG_NOT_NET_ADMIN "\x81" /* must be network administrator */ 420 - #define TIPC_CFG_NOT_ZONE_MSTR "\x82" /* must be zone master */ 421 - #define TIPC_CFG_NO_REMOTE "\x83" /* remote management not enabled */ 422 - #define TIPC_CFG_NOT_SUPPORTED "\x84" /* request is not supported by TIPC */ 423 - #define TIPC_CFG_INVALID_VALUE "\x85" /* request has invalid argument value */ 424 - 425 - #if 0 426 - /* prototypes TLV structures for proposed commands */ 427 - struct tipc_link_create { 428 - __u32 domain; 429 - struct tipc_media_addr peer_addr; 430 - char bearer_name[MAX_BEARER_NAME]; 431 - }; 432 - 433 - struct tipc_route_info { 434 - __u32 dest; 435 - __u32 router; 436 - }; 437 - #endif 438 - 439 - /* 440 - * A TLV consists of a descriptor, followed by the TLV value. 441 - * TLV descriptor fields are stored in network byte order; 442 - * TLV values must also be stored in network byte order (where applicable). 443 - * TLV descriptors must be aligned to addresses which are multiple of 4, 444 - * so up to 3 bytes of padding may exist at the end of the TLV value area. 445 - * There must not be any padding between the TLV descriptor and its value. 446 - */ 447 - 448 - struct tlv_desc { 449 - __u16 tlv_len; /* TLV length (descriptor + value) */ 450 - __u16 tlv_type; /* TLV identifier */ 451 - }; 452 - 453 - #define TLV_ALIGNTO 4 454 - 455 - #define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1)) 456 - #define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen)) 457 - #define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen))) 458 - #define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0))) 459 - 460 - static inline int TLV_OK(const void *tlv, __u16 space) 461 - { 462 - /* 463 - * Would also like to check that "tlv" is a multiple of 4, 464 - * but don't know how to do this in a portable way. 465 - * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler 466 - * won't allow binary "&" with a pointer. 467 - * - Tried casting "tlv" to integer type, but causes warning about size 468 - * mismatch when pointer is bigger than chosen type (int, long, ...). 469 - */ 470 - 471 - return (space >= TLV_SPACE(0)) && 472 - (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space); 473 - } 474 - 475 - static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) 476 - { 477 - return TLV_OK(tlv, space) && 478 - (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); 479 - } 480 - 481 - static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len) 482 - { 483 - struct tlv_desc *tlv_ptr; 484 - int tlv_len; 485 - 486 - tlv_len = TLV_LENGTH(len); 487 - tlv_ptr = (struct tlv_desc *)tlv; 488 - tlv_ptr->tlv_type = htons(type); 489 - tlv_ptr->tlv_len = htons(tlv_len); 490 - if (len && data) 491 - memcpy(TLV_DATA(tlv_ptr), data, tlv_len); 492 - return TLV_SPACE(len); 493 - } 494 - 495 - /* 496 - * A TLV list descriptor simplifies processing of messages 497 - * containing multiple TLVs. 498 - */ 499 - 500 - struct tlv_list_desc { 501 - struct tlv_desc *tlv_ptr; /* ptr to current TLV */ 502 - __u32 tlv_space; /* # bytes from curr TLV to list end */ 503 - }; 504 - 505 - static inline void TLV_LIST_INIT(struct tlv_list_desc *list, 506 - void *data, __u32 space) 507 - { 508 - list->tlv_ptr = (struct tlv_desc *)data; 509 - list->tlv_space = space; 510 - } 511 - 512 - static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) 513 - { 514 - return (list->tlv_space == 0); 515 - } 516 - 517 - static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type) 518 - { 519 - return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type); 520 - } 521 - 522 - static inline void *TLV_LIST_DATA(struct tlv_list_desc *list) 523 - { 524 - return TLV_DATA(list->tlv_ptr); 525 - } 526 - 527 - static inline void TLV_LIST_STEP(struct tlv_list_desc *list) 528 - { 529 - __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); 530 - 531 - list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); 532 - list->tlv_space -= tlv_space; 533 - } 534 - 535 - /* 536 - * Configuration messages exchanged via NETLINK_GENERIC use the following 537 - * family id, name, version and command. 538 - */ 539 - #define TIPC_GENL_NAME "TIPC" 540 - #define TIPC_GENL_VERSION 0x1 541 - #define TIPC_GENL_CMD 0x1 542 - 543 - /* 544 - * TIPC specific header used in NETLINK_GENERIC requests. 545 - */ 546 - struct tipc_genlmsghdr { 547 - __u32 dest; /* Destination address */ 548 - __u16 cmd; /* Command */ 549 - __u16 reserved; /* Unused */ 550 - }; 551 - 552 - #define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) 553 - 554 - /* 555 - * Configuration messages exchanged via TIPC sockets use the TIPC configuration 556 - * message header, which is defined below. This structure is analogous 557 - * to the Netlink message header, but fields are stored in network byte order 558 - * and no padding is permitted between the header and the message data 559 - * that follows. 560 - */ 561 - 562 - struct tipc_cfg_msg_hdr 563 - { 564 - __u32 tcm_len; /* Message length (including header) */ 565 - __u16 tcm_type; /* Command type */ 566 - __u16 tcm_flags; /* Additional flags */ 567 - char tcm_reserved[8]; /* Unused */ 568 - }; 569 - 570 - #define TCM_F_REQUEST 0x1 /* Flag: Request message */ 571 - #define TCM_F_MORE 0x2 /* Flag: Message to be continued */ 572 - 573 - #define TCM_ALIGN(datalen) (((datalen)+3) & ~3) 574 - #define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen) 575 - #define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen))) 576 - #define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0))) 577 - 578 - static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags, 579 - void *data, __u16 data_len) 580 - { 581 - struct tipc_cfg_msg_hdr *tcm_hdr; 582 - int msg_len; 583 - 584 - msg_len = TCM_LENGTH(data_len); 585 - tcm_hdr = (struct tipc_cfg_msg_hdr *)msg; 586 - tcm_hdr->tcm_len = htonl(msg_len); 587 - tcm_hdr->tcm_type = htons(cmd); 588 - tcm_hdr->tcm_flags = htons(flags); 589 - if (data_len && data) 590 - memcpy(TCM_DATA(msg), data, data_len); 591 - return TCM_SPACE(data_len); 592 - } 210 + #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ 593 211 594 212 #endif
+404
include/linux/tipc_config.h
··· 1 + /* 2 + * include/linux/tipc_config.h: Include file for TIPC configuration interface 3 + * 4 + * Copyright (c) 2003-2005, Ericsson Research Canada 5 + * Copyright (c) 2005, Wind River Systems 6 + * Copyright (c) 2005-2006, Ericsson AB 7 + * All rights reserved. 8 + * 9 + * Redistribution and use in source and binary forms, with or without 10 + * modification, are permitted provided that the following conditions are met: 11 + * 12 + * Redistributions of source code must retain the above copyright notice, this 13 + * list of conditions and the following disclaimer. 14 + * Redistributions in binary form must reproduce the above copyright notice, 15 + * this list of conditions and the following disclaimer in the documentation 16 + * and/or other materials provided with the distribution. 17 + * Neither the names of the copyright holders nor the names of its 18 + * contributors may be used to endorse or promote products derived from this 19 + * software without specific prior written permission. 20 + * 21 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 + * POSSIBILITY OF SUCH DAMAGE. 32 + */ 33 + 34 + #ifndef _LINUX_TIPC_CONFIG_H_ 35 + #define _LINUX_TIPC_CONFIG_H_ 36 + 37 + #include <linux/types.h> 38 + #include <linux/string.h> 39 + #include <asm/byteorder.h> 40 + 41 + /* 42 + * Configuration 43 + * 44 + * All configuration management messaging involves sending a request message 45 + * to the TIPC configuration service on a node, which sends a reply message 46 + * back. (In the future multi-message replies may be supported.) 47 + * 48 + * Both request and reply messages consist of a transport header and payload. 49 + * The transport header contains info about the desired operation; 50 + * the payload consists of zero or more type/length/value (TLV) items 51 + * which specify parameters or results for the operation. 52 + * 53 + * For many operations, the request and reply messages have a fixed number 54 + * of TLVs (usually zero or one); however, some reply messages may return 55 + * a variable number of TLVs. A failed request is denoted by the presence 56 + * of an "error string" TLV in the reply message instead of the TLV(s) the 57 + * reply should contain if the request succeeds. 58 + */ 59 + 60 + /* 61 + * Public commands: 62 + * May be issued by any process. 63 + * Accepted by own node, or by remote node only if remote management enabled. 64 + */ 65 + 66 + #define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */ 67 + #define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */ 68 + #define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */ 69 + #define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */ 70 + #define TIPC_CMD_GET_LINKS 0x0004 /* tx net_addr, rx link_info(s) */ 71 + #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ 72 + #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ 73 + #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ 74 + 75 + #if 0 76 + #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ 77 + #define TIPC_CMD_RESET_PORT_STATS 0x0009 /* tx port_ref, rx none */ 78 + #define TIPC_CMD_GET_ROUTES 0x000A /* tx ?, rx ? */ 79 + #define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */ 80 + #endif 81 + 82 + /* 83 + * Protected commands: 84 + * May only be issued by "network administration capable" process. 85 + * Accepted by own node, or by remote node only if remote management enabled 86 + * and this node is zone manager. 87 + */ 88 + 89 + #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ 90 + #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ 91 + #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ 92 + #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ 93 + #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */ 94 + #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ 95 + #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ 96 + #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ 97 + #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ 98 + 99 + #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ 100 + #define TIPC_CMD_DISABLE_BEARER 0x4102 /* tx bearer_name, rx none */ 101 + #define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */ 102 + #define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */ 103 + #define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */ 104 + #define TIPC_CMD_SET_LOG_SIZE 0x410A /* tx unsigned, rx none */ 105 + #define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */ 106 + #define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */ 107 + 108 + #if 0 109 + #define TIPC_CMD_CREATE_LINK 0x4103 /* tx link_create, rx none */ 110 + #define TIPC_CMD_REMOVE_LINK 0x4104 /* tx link_name, rx none */ 111 + #define TIPC_CMD_BLOCK_LINK 0x4105 /* tx link_name, rx none */ 112 + #define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */ 113 + #endif 114 + 115 + /* 116 + * Private commands: 117 + * May only be issued by "network administration capable" process. 118 + * Accepted by own node only; cannot be used on a remote node. 119 + */ 120 + 121 + #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ 122 + #if 0 123 + #define TIPC_CMD_SET_ZONE_MASTER 0x8002 /* tx none, rx none */ 124 + #endif 125 + #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ 126 + #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ 127 + #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ 128 + #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ 129 + #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */ 130 + #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ 131 + #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ 132 + #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ 133 + #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ 134 + 135 + /* 136 + * TLV types defined for TIPC 137 + */ 138 + 139 + #define TIPC_TLV_NONE 0 /* no TLV present */ 140 + #define TIPC_TLV_VOID 1 /* empty TLV (0 data bytes)*/ 141 + #define TIPC_TLV_UNSIGNED 2 /* 32-bit integer */ 142 + #define TIPC_TLV_STRING 3 /* char[128] (max) */ 143 + #define TIPC_TLV_LARGE_STRING 4 /* char[2048] (max) */ 144 + #define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */ 145 + 146 + #define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */ 147 + #define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */ 148 + #define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */ 149 + #define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */ 150 + #define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */ 151 + #define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */ 152 + #define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */ 153 + #define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */ 154 + #define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */ 155 + #define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */ 156 + #define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */ 157 + 158 + /* 159 + * Maximum sizes of TIPC bearer-related names (including terminating NUL) 160 + */ 161 + 162 + #define TIPC_MAX_MEDIA_NAME 16 /* format = media */ 163 + #define TIPC_MAX_IF_NAME 16 /* format = interface */ 164 + #define TIPC_MAX_BEARER_NAME 32 /* format = media:interface */ 165 + #define TIPC_MAX_LINK_NAME 60 /* format = Z.C.N:interface-Z.C.N:interface */ 166 + 167 + /* 168 + * Link priority limits (range from 0 to # priorities - 1) 169 + */ 170 + 171 + #define TIPC_NUM_LINK_PRI 32 172 + 173 + /* 174 + * Link tolerance limits (min, default, max), in ms 175 + */ 176 + 177 + #define TIPC_MIN_LINK_TOL 50 178 + #define TIPC_DEF_LINK_TOL 1500 179 + #define TIPC_MAX_LINK_TOL 30000 180 + 181 + /* 182 + * Link window limits (min, default, max), in packets 183 + */ 184 + 185 + #define TIPC_MIN_LINK_WIN 16 186 + #define TIPC_DEF_LINK_WIN 50 187 + #define TIPC_MAX_LINK_WIN 150 188 + 189 + 190 + struct tipc_node_info { 191 + __u32 addr; /* network address of node */ 192 + __u32 up; /* 0=down, 1= up */ 193 + }; 194 + 195 + struct tipc_link_info { 196 + __u32 dest; /* network address of peer node */ 197 + __u32 up; /* 0=down, 1=up */ 198 + char str[TIPC_MAX_LINK_NAME]; /* link name */ 199 + }; 200 + 201 + struct tipc_bearer_config { 202 + __u32 priority; /* Range [1,31]. Override per link */ 203 + __u32 detect_scope; 204 + char name[TIPC_MAX_BEARER_NAME]; 205 + }; 206 + 207 + struct tipc_link_config { 208 + __u32 value; 209 + char name[TIPC_MAX_LINK_NAME]; 210 + }; 211 + 212 + #define TIPC_NTQ_ALLTYPES 0x80000000 213 + 214 + struct tipc_name_table_query { 215 + __u32 depth; /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */ 216 + __u32 type; /* {t,l,u} info ignored if high bit of "depth" is set */ 217 + __u32 lowbound; /* (i.e. displays all entries of name table) */ 218 + __u32 upbound; 219 + }; 220 + 221 + /* 222 + * The error string TLV is a null-terminated string describing the cause 223 + * of the request failure. To simplify error processing (and to save space) 224 + * the first character of the string can be a special error code character 225 + * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. 226 + */ 227 + 228 + #define TIPC_CFG_TLV_ERROR "\x80" /* request contains incorrect TLV(s) */ 229 + #define TIPC_CFG_NOT_NET_ADMIN "\x81" /* must be network administrator */ 230 + #define TIPC_CFG_NOT_ZONE_MSTR "\x82" /* must be zone master */ 231 + #define TIPC_CFG_NO_REMOTE "\x83" /* remote management not enabled */ 232 + #define TIPC_CFG_NOT_SUPPORTED "\x84" /* request is not supported by TIPC */ 233 + #define TIPC_CFG_INVALID_VALUE "\x85" /* request has invalid argument value */ 234 + 235 + #if 0 236 + /* prototypes TLV structures for proposed commands */ 237 + struct tipc_link_create { 238 + __u32 domain; 239 + struct tipc_media_addr peer_addr; 240 + char bearer_name[TIPC_MAX_BEARER_NAME]; 241 + }; 242 + 243 + struct tipc_route_info { 244 + __u32 dest; 245 + __u32 router; 246 + }; 247 + #endif 248 + 249 + /* 250 + * A TLV consists of a descriptor, followed by the TLV value. 251 + * TLV descriptor fields are stored in network byte order; 252 + * TLV values must also be stored in network byte order (where applicable). 253 + * TLV descriptors must be aligned to addresses which are multiple of 4, 254 + * so up to 3 bytes of padding may exist at the end of the TLV value area. 255 + * There must not be any padding between the TLV descriptor and its value. 256 + */ 257 + 258 + struct tlv_desc { 259 + __u16 tlv_len; /* TLV length (descriptor + value) */ 260 + __u16 tlv_type; /* TLV identifier */ 261 + }; 262 + 263 + #define TLV_ALIGNTO 4 264 + 265 + #define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1)) 266 + #define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen)) 267 + #define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen))) 268 + #define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0))) 269 + 270 + static inline int TLV_OK(const void *tlv, __u16 space) 271 + { 272 + /* 273 + * Would also like to check that "tlv" is a multiple of 4, 274 + * but don't know how to do this in a portable way. 275 + * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler 276 + * won't allow binary "&" with a pointer. 277 + * - Tried casting "tlv" to integer type, but causes warning about size 278 + * mismatch when pointer is bigger than chosen type (int, long, ...). 279 + */ 280 + 281 + return (space >= TLV_SPACE(0)) && 282 + (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space); 283 + } 284 + 285 + static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) 286 + { 287 + return TLV_OK(tlv, space) && 288 + (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); 289 + } 290 + 291 + static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len) 292 + { 293 + struct tlv_desc *tlv_ptr; 294 + int tlv_len; 295 + 296 + tlv_len = TLV_LENGTH(len); 297 + tlv_ptr = (struct tlv_desc *)tlv; 298 + tlv_ptr->tlv_type = htons(type); 299 + tlv_ptr->tlv_len = htons(tlv_len); 300 + if (len && data) 301 + memcpy(TLV_DATA(tlv_ptr), data, tlv_len); 302 + return TLV_SPACE(len); 303 + } 304 + 305 + /* 306 + * A TLV list descriptor simplifies processing of messages 307 + * containing multiple TLVs. 308 + */ 309 + 310 + struct tlv_list_desc { 311 + struct tlv_desc *tlv_ptr; /* ptr to current TLV */ 312 + __u32 tlv_space; /* # bytes from curr TLV to list end */ 313 + }; 314 + 315 + static inline void TLV_LIST_INIT(struct tlv_list_desc *list, 316 + void *data, __u32 space) 317 + { 318 + list->tlv_ptr = (struct tlv_desc *)data; 319 + list->tlv_space = space; 320 + } 321 + 322 + static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) 323 + { 324 + return (list->tlv_space == 0); 325 + } 326 + 327 + static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type) 328 + { 329 + return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type); 330 + } 331 + 332 + static inline void *TLV_LIST_DATA(struct tlv_list_desc *list) 333 + { 334 + return TLV_DATA(list->tlv_ptr); 335 + } 336 + 337 + static inline void TLV_LIST_STEP(struct tlv_list_desc *list) 338 + { 339 + __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); 340 + 341 + list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); 342 + list->tlv_space -= tlv_space; 343 + } 344 + 345 + /* 346 + * Configuration messages exchanged via NETLINK_GENERIC use the following 347 + * family id, name, version and command. 348 + */ 349 + #define TIPC_GENL_NAME "TIPC" 350 + #define TIPC_GENL_VERSION 0x1 351 + #define TIPC_GENL_CMD 0x1 352 + 353 + /* 354 + * TIPC specific header used in NETLINK_GENERIC requests. 355 + */ 356 + struct tipc_genlmsghdr { 357 + __u32 dest; /* Destination address */ 358 + __u16 cmd; /* Command */ 359 + __u16 reserved; /* Unused */ 360 + }; 361 + 362 + #define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) 363 + 364 + /* 365 + * Configuration messages exchanged via TIPC sockets use the TIPC configuration 366 + * message header, which is defined below. This structure is analogous 367 + * to the Netlink message header, but fields are stored in network byte order 368 + * and no padding is permitted between the header and the message data 369 + * that follows. 370 + */ 371 + 372 + struct tipc_cfg_msg_hdr 373 + { 374 + __u32 tcm_len; /* Message length (including header) */ 375 + __u16 tcm_type; /* Command type */ 376 + __u16 tcm_flags; /* Additional flags */ 377 + char tcm_reserved[8]; /* Unused */ 378 + }; 379 + 380 + #define TCM_F_REQUEST 0x1 /* Flag: Request message */ 381 + #define TCM_F_MORE 0x2 /* Flag: Message to be continued */ 382 + 383 + #define TCM_ALIGN(datalen) (((datalen)+3) & ~3) 384 + #define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen) 385 + #define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen))) 386 + #define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0))) 387 + 388 + static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags, 389 + void *data, __u16 data_len) 390 + { 391 + struct tipc_cfg_msg_hdr *tcm_hdr; 392 + int msg_len; 393 + 394 + msg_len = TCM_LENGTH(data_len); 395 + tcm_hdr = (struct tipc_cfg_msg_hdr *)msg; 396 + tcm_hdr->tcm_len = htonl(msg_len); 397 + tcm_hdr->tcm_type = htons(cmd); 398 + tcm_hdr->tcm_flags = htons(flags); 399 + if (data_len && data) 400 + memcpy(TCM_DATA(msg), data, data_len); 401 + return TCM_SPACE(data_len); 402 + } 403 + 404 + #endif
+27 -1
include/net/tipc/tipc_bearer.h
··· 36 36 37 37 #ifdef __KERNEL__ 38 38 39 - #include <linux/tipc.h> 39 + #include <linux/tipc_config.h> 40 40 #include <linux/skbuff.h> 41 41 #include <linux/spinlock.h> 42 + 43 + /* 44 + * Identifiers of supported TIPC media types 45 + */ 46 + 47 + #define TIPC_MEDIA_TYPE_ETH 1 48 + 49 + struct tipc_media_addr { 50 + __u32 type; 51 + union { 52 + __u8 eth_addr[6]; /* Ethernet bearer */ 53 + #if 0 54 + /* Prototypes for other possible bearer types */ 55 + 56 + struct { 57 + __u16 sin_family; 58 + __u16 sin_port; 59 + struct { 60 + __u32 s_addr; 61 + } sin_addr; 62 + char pad[4]; 63 + } addr_in; /* IP-based bearer */ 64 + __u16 sock_descr; /* generic socket bearer */ 65 + #endif 66 + } dev_addr; 67 + }; 42 68 43 69 /** 44 70 * struct tipc_bearer - TIPC bearer info available to privileged users
+1
net/tipc/config.h
··· 37 37 /* ---------------------------------------------------------------------- */ 38 38 39 39 #include <linux/tipc.h> 40 + #include <linux/tipc_config.h> 40 41 #include "link.h" 41 42 42 43 struct sk_buff *cfg_reply_alloc(int payload_size);
+1
net/tipc/socket.c
··· 48 48 #include <net/sock.h> 49 49 50 50 #include <linux/tipc.h> 51 + #include <linux/tipc_config.h> 51 52 #include <net/tipc/tipc_msg.h> 52 53 #include <net/tipc/tipc_port.h> 53 54