diff options
Diffstat (limited to 'net/tipc/msg.h')
-rw-r--r-- | net/tipc/msg.h | 225 |
1 files changed, 57 insertions, 168 deletions
diff --git a/net/tipc/msg.h b/net/tipc/msg.h index 92c4c4fd7b3f..8452454731fa 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * net/tipc/msg.h: Include file for TIPC message header routines | 2 | * net/tipc/msg.h: Include file for TIPC message header routines |
3 | * | 3 | * |
4 | * Copyright (c) 2000-2007, Ericsson AB | 4 | * Copyright (c) 2000-2007, Ericsson AB |
5 | * Copyright (c) 2005-2008, Wind River Systems | 5 | * Copyright (c) 2005-2008, 2010-2011, Wind River Systems |
6 | * All rights reserved. | 6 | * All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
@@ -39,41 +39,24 @@ | |||
39 | 39 | ||
40 | #include "bearer.h" | 40 | #include "bearer.h" |
41 | 41 | ||
42 | /* | ||
43 | * Constants and routines used to read and write TIPC payload message headers | ||
44 | * | ||
45 | * Note: Some items are also used with TIPC internal message headers | ||
46 | */ | ||
47 | |||
42 | #define TIPC_VERSION 2 | 48 | #define TIPC_VERSION 2 |
43 | 49 | ||
44 | /* | 50 | /* |
45 | * TIPC user data message header format, version 2: | 51 | * Payload message users are defined in TIPC's public API: |
46 | * | 52 | * - TIPC_LOW_IMPORTANCE |
47 | * | 53 | * - TIPC_MEDIUM_IMPORTANCE |
48 | * 1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0 | 54 | * - TIPC_HIGH_IMPORTANCE |
49 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 55 | * - TIPC_CRITICAL_IMPORTANCE |
50 | * w0:|vers | user |hdr sz |n|d|s|-| message size | | 56 | */ |
51 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 57 | |
52 | * w1:|mstyp| error |rer cnt|lsc|opt p| broadcast ack no | | 58 | /* |
53 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 59 | * Payload message types |
54 | * w2:| link level ack no | broadcast/link level seq no | | ||
55 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
56 | * w3:| previous node | | ||
57 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
58 | * w4:| originating port | | ||
59 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
60 | * w5:| destination port | | ||
61 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
62 | * w6:| originating node | | ||
63 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
64 | * w7:| destination node | | ||
65 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
66 | * w8:| name type / transport sequence number | | ||
67 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
68 | * w9:| name instance/multicast lower bound | | ||
69 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
70 | * wA:| multicast upper bound | | ||
71 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
72 | * / / | ||
73 | * \ options \ | ||
74 | * / / | ||
75 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
76 | * | ||
77 | */ | 60 | */ |
78 | 61 | ||
79 | #define TIPC_CONN_MSG 0 | 62 | #define TIPC_CONN_MSG 0 |
@@ -81,6 +64,9 @@ | |||
81 | #define TIPC_NAMED_MSG 2 | 64 | #define TIPC_NAMED_MSG 2 |
82 | #define TIPC_DIRECT_MSG 3 | 65 | #define TIPC_DIRECT_MSG 3 |
83 | 66 | ||
67 | /* | ||
68 | * Message header sizes | ||
69 | */ | ||
84 | 70 | ||
85 | #define SHORT_H_SIZE 24 /* Connected, in-cluster messages */ | 71 | #define SHORT_H_SIZE 24 /* Connected, in-cluster messages */ |
86 | #define DIR_MSG_H_SIZE 32 /* Directly addressed messages */ | 72 | #define DIR_MSG_H_SIZE 32 /* Directly addressed messages */ |
@@ -421,13 +407,6 @@ static inline int msg_is_dest(struct tipc_msg *m, u32 d) | |||
421 | return msg_short(m) || (msg_destnode(m) == d); | 407 | return msg_short(m) || (msg_destnode(m) == d); |
422 | } | 408 | } |
423 | 409 | ||
424 | static inline u32 msg_routed(struct tipc_msg *m) | ||
425 | { | ||
426 | if (likely(msg_short(m))) | ||
427 | return 0; | ||
428 | return (msg_destnode(m) ^ msg_orignode(m)) >> 11; | ||
429 | } | ||
430 | |||
431 | static inline u32 msg_nametype(struct tipc_msg *m) | 410 | static inline u32 msg_nametype(struct tipc_msg *m) |
432 | { | 411 | { |
433 | return msg_word(m, 8); | 412 | return msg_word(m, 8); |
@@ -438,26 +417,6 @@ static inline void msg_set_nametype(struct tipc_msg *m, u32 n) | |||
438 | msg_set_word(m, 8, n); | 417 | msg_set_word(m, 8, n); |
439 | } | 418 | } |
440 | 419 | ||
441 | static inline u32 msg_transp_seqno(struct tipc_msg *m) | ||
442 | { | ||
443 | return msg_word(m, 8); | ||
444 | } | ||
445 | |||
446 | static inline void msg_set_timestamp(struct tipc_msg *m, u32 n) | ||
447 | { | ||
448 | msg_set_word(m, 8, n); | ||
449 | } | ||
450 | |||
451 | static inline u32 msg_timestamp(struct tipc_msg *m) | ||
452 | { | ||
453 | return msg_word(m, 8); | ||
454 | } | ||
455 | |||
456 | static inline void msg_set_transp_seqno(struct tipc_msg *m, u32 n) | ||
457 | { | ||
458 | msg_set_word(m, 8, n); | ||
459 | } | ||
460 | |||
461 | static inline u32 msg_nameinst(struct tipc_msg *m) | 420 | static inline u32 msg_nameinst(struct tipc_msg *m) |
462 | { | 421 | { |
463 | return msg_word(m, 9); | 422 | return msg_word(m, 9); |
@@ -500,40 +459,11 @@ static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m) | |||
500 | 459 | ||
501 | 460 | ||
502 | /* | 461 | /* |
503 | TIPC internal message header format, version 2 | 462 | * Constants and routines used to read and write TIPC internal message headers |
504 | 463 | */ | |
505 | 1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0 | ||
506 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
507 | w0:|vers |msg usr|hdr sz |n|resrv| packet size | | ||
508 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
509 | w1:|m typ| sequence gap | broadcast ack no | | ||
510 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
511 | w2:| link level ack no/bc_gap_from | seq no / bcast_gap_to | | ||
512 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
513 | w3:| previous node | | ||
514 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
515 | w4:| next sent broadcast/fragm no | next sent pkt/ fragm msg no | | ||
516 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
517 | w5:| session no |rsv=0|r|berid|link prio|netpl|p| | ||
518 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
519 | w6:| originating node | | ||
520 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
521 | w7:| destination node | | ||
522 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
523 | w8:| transport sequence number | | ||
524 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
525 | w9:| msg count / bcast tag | link tolerance | | ||
526 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
527 | \ \ | ||
528 | / User Specific Data / | ||
529 | \ \ | ||
530 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
531 | |||
532 | NB: CONN_MANAGER use data message format. LINK_CONFIG has own format. | ||
533 | */ | ||
534 | 464 | ||
535 | /* | 465 | /* |
536 | * Internal users | 466 | * Internal message users |
537 | */ | 467 | */ |
538 | 468 | ||
539 | #define BCAST_PROTOCOL 5 | 469 | #define BCAST_PROTOCOL 5 |
@@ -545,10 +475,9 @@ static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m) | |||
545 | #define NAME_DISTRIBUTOR 11 | 475 | #define NAME_DISTRIBUTOR 11 |
546 | #define MSG_FRAGMENTER 12 | 476 | #define MSG_FRAGMENTER 12 |
547 | #define LINK_CONFIG 13 | 477 | #define LINK_CONFIG 13 |
548 | #define DSC_H_SIZE 40 | ||
549 | 478 | ||
550 | /* | 479 | /* |
551 | * Connection management protocol messages | 480 | * Connection management protocol message types |
552 | */ | 481 | */ |
553 | 482 | ||
554 | #define CONN_PROBE 0 | 483 | #define CONN_PROBE 0 |
@@ -556,12 +485,41 @@ static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m) | |||
556 | #define CONN_ACK 2 | 485 | #define CONN_ACK 2 |
557 | 486 | ||
558 | /* | 487 | /* |
559 | * Name distributor messages | 488 | * Name distributor message types |
560 | */ | 489 | */ |
561 | 490 | ||
562 | #define PUBLICATION 0 | 491 | #define PUBLICATION 0 |
563 | #define WITHDRAWAL 1 | 492 | #define WITHDRAWAL 1 |
564 | 493 | ||
494 | /* | ||
495 | * Segmentation message types | ||
496 | */ | ||
497 | |||
498 | #define FIRST_FRAGMENT 0 | ||
499 | #define FRAGMENT 1 | ||
500 | #define LAST_FRAGMENT 2 | ||
501 | |||
502 | /* | ||
503 | * Link management protocol message types | ||
504 | */ | ||
505 | |||
506 | #define STATE_MSG 0 | ||
507 | #define RESET_MSG 1 | ||
508 | #define ACTIVATE_MSG 2 | ||
509 | |||
510 | /* | ||
511 | * Changeover tunnel message types | ||
512 | */ | ||
513 | #define DUPLICATE_MSG 0 | ||
514 | #define ORIGINAL_MSG 1 | ||
515 | |||
516 | /* | ||
517 | * Config protocol message types | ||
518 | */ | ||
519 | |||
520 | #define DSC_REQ_MSG 0 | ||
521 | #define DSC_RESP_MSG 1 | ||
522 | |||
565 | 523 | ||
566 | /* | 524 | /* |
567 | * Word 1 | 525 | * Word 1 |
@@ -577,16 +535,6 @@ static inline void msg_set_seq_gap(struct tipc_msg *m, u32 n) | |||
577 | msg_set_bits(m, 1, 16, 0x1fff, n); | 535 | msg_set_bits(m, 1, 16, 0x1fff, n); |
578 | } | 536 | } |
579 | 537 | ||
580 | static inline u32 msg_req_links(struct tipc_msg *m) | ||
581 | { | ||
582 | return msg_bits(m, 1, 16, 0xfff); | ||
583 | } | ||
584 | |||
585 | static inline void msg_set_req_links(struct tipc_msg *m, u32 n) | ||
586 | { | ||
587 | msg_set_bits(m, 1, 16, 0xfff, n); | ||
588 | } | ||
589 | |||
590 | 538 | ||
591 | /* | 539 | /* |
592 | * Word 2 | 540 | * Word 2 |
@@ -749,14 +697,9 @@ static inline u32 msg_redundant_link(struct tipc_msg *m) | |||
749 | return msg_bits(m, 5, 12, 0x1); | 697 | return msg_bits(m, 5, 12, 0x1); |
750 | } | 698 | } |
751 | 699 | ||
752 | static inline void msg_set_redundant_link(struct tipc_msg *m) | 700 | static inline void msg_set_redundant_link(struct tipc_msg *m, u32 r) |
753 | { | 701 | { |
754 | msg_set_bits(m, 5, 12, 0x1, 1); | 702 | msg_set_bits(m, 5, 12, 0x1, r); |
755 | } | ||
756 | |||
757 | static inline void msg_clear_redundant_link(struct tipc_msg *m) | ||
758 | { | ||
759 | msg_set_bits(m, 5, 12, 0x1, 0); | ||
760 | } | 703 | } |
761 | 704 | ||
762 | 705 | ||
@@ -804,65 +747,11 @@ static inline void msg_set_link_tolerance(struct tipc_msg *m, u32 n) | |||
804 | msg_set_bits(m, 9, 0, 0xffff, n); | 747 | msg_set_bits(m, 9, 0, 0xffff, n); |
805 | } | 748 | } |
806 | 749 | ||
807 | /* | ||
808 | * Routing table message data | ||
809 | */ | ||
810 | |||
811 | |||
812 | static inline u32 msg_remote_node(struct tipc_msg *m) | ||
813 | { | ||
814 | return msg_word(m, msg_hdr_sz(m)/4); | ||
815 | } | ||
816 | |||
817 | static inline void msg_set_remote_node(struct tipc_msg *m, u32 a) | ||
818 | { | ||
819 | msg_set_word(m, msg_hdr_sz(m)/4, a); | ||
820 | } | ||
821 | |||
822 | /* | ||
823 | * Segmentation message types | ||
824 | */ | ||
825 | |||
826 | #define FIRST_FRAGMENT 0 | ||
827 | #define FRAGMENT 1 | ||
828 | #define LAST_FRAGMENT 2 | ||
829 | |||
830 | /* | ||
831 | * Link management protocol message types | ||
832 | */ | ||
833 | |||
834 | #define STATE_MSG 0 | ||
835 | #define RESET_MSG 1 | ||
836 | #define ACTIVATE_MSG 2 | ||
837 | |||
838 | /* | ||
839 | * Changeover tunnel message types | ||
840 | */ | ||
841 | #define DUPLICATE_MSG 0 | ||
842 | #define ORIGINAL_MSG 1 | ||
843 | |||
844 | /* | ||
845 | * Routing table message types | ||
846 | */ | ||
847 | #define EXT_ROUTING_TABLE 0 | ||
848 | #define LOCAL_ROUTING_TABLE 1 /* obsoleted */ | ||
849 | #define SLAVE_ROUTING_TABLE 2 | ||
850 | #define ROUTE_ADDITION 3 | ||
851 | #define ROUTE_REMOVAL 4 | ||
852 | |||
853 | /* | ||
854 | * Config protocol message types | ||
855 | */ | ||
856 | |||
857 | #define DSC_REQ_MSG 0 | ||
858 | #define DSC_RESP_MSG 1 | ||
859 | |||
860 | u32 tipc_msg_tot_importance(struct tipc_msg *m); | 750 | u32 tipc_msg_tot_importance(struct tipc_msg *m); |
861 | void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type, | 751 | void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type, |
862 | u32 hsize, u32 destnode); | 752 | u32 hsize, u32 destnode); |
863 | int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect); | 753 | int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect, |
864 | int tipc_msg_build(struct tipc_msg *hdr, | 754 | u32 num_sect, unsigned int total_len, |
865 | struct iovec const *msg_sect, u32 num_sect, | ||
866 | int max_size, int usrmem, struct sk_buff **buf); | 755 | int max_size, int usrmem, struct sk_buff **buf); |
867 | 756 | ||
868 | static inline void msg_set_media_addr(struct tipc_msg *m, struct tipc_media_addr *a) | 757 | static inline void msg_set_media_addr(struct tipc_msg *m, struct tipc_media_addr *a) |