aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/discover.c3
-rw-r--r--net/tipc/msg.h10
-rw-r--r--net/tipc/node.c1
-rw-r--r--net/tipc/node.h7
4 files changed, 21 insertions, 0 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index a00e5f811569..7ae1b4c33aeb 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -82,6 +82,7 @@ static struct sk_buff *tipc_disc_init_msg(u32 type,
82 msg = buf_msg(buf); 82 msg = buf_msg(buf);
83 tipc_msg_init(msg, LINK_CONFIG, type, INT_H_SIZE, dest_domain); 83 tipc_msg_init(msg, LINK_CONFIG, type, INT_H_SIZE, dest_domain);
84 msg_set_non_seq(msg, 1); 84 msg_set_non_seq(msg, 1);
85 msg_set_node_sig(msg, tipc_random);
85 msg_set_dest_domain(msg, dest_domain); 86 msg_set_dest_domain(msg, dest_domain);
86 msg_set_bc_netid(msg, tipc_net_id); 87 msg_set_bc_netid(msg, tipc_net_id);
87 b_ptr->media->addr2msg(&b_ptr->addr, msg_media_addr(msg)); 88 b_ptr->media->addr2msg(&b_ptr->addr, msg_media_addr(msg));
@@ -128,6 +129,7 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr)
128 u32 orig = msg_prevnode(msg); 129 u32 orig = msg_prevnode(msg);
129 u32 net_id = msg_bc_netid(msg); 130 u32 net_id = msg_bc_netid(msg);
130 u32 type = msg_type(msg); 131 u32 type = msg_type(msg);
132 u32 signature = msg_node_sig(msg);
131 int link_fully_up; 133 int link_fully_up;
132 134
133 media_addr.broadcast = 1; 135 media_addr.broadcast = 1;
@@ -197,6 +199,7 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr)
197 } 199 }
198 200
199 /* Accept discovery message & send response, if necessary */ 201 /* Accept discovery message & send response, if necessary */
202 n_ptr->signature = signature;
200 link_fully_up = link_working_working(link); 203 link_fully_up = link_working_working(link);
201 204
202 if ((type == DSC_REQ_MSG) && !link_fully_up && !b_ptr->blocked) { 205 if ((type == DSC_REQ_MSG) && !link_fully_up && !b_ptr->blocked) {
diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index 7b0cda167107..2ec13b731811 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -517,6 +517,16 @@ static inline void msg_set_seq_gap(struct tipc_msg *m, u32 n)
517 msg_set_bits(m, 1, 16, 0x1fff, n); 517 msg_set_bits(m, 1, 16, 0x1fff, n);
518} 518}
519 519
520static inline u32 msg_node_sig(struct tipc_msg *m)
521{
522 return msg_bits(m, 1, 0, 0xffff);
523}
524
525static inline void msg_set_node_sig(struct tipc_msg *m, u32 n)
526{
527 msg_set_bits(m, 1, 0, 0xffff, n);
528}
529
520 530
521/* 531/*
522 * Word 2 532 * Word 2
diff --git a/net/tipc/node.c b/net/tipc/node.c
index 7bc45e135fb4..153425997cce 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -112,6 +112,7 @@ struct tipc_node *tipc_node_create(u32 addr)
112 } 112 }
113 list_add_tail(&n_ptr->list, &temp_node->list); 113 list_add_tail(&n_ptr->list, &temp_node->list);
114 n_ptr->block_setup = WAIT_PEER_DOWN; 114 n_ptr->block_setup = WAIT_PEER_DOWN;
115 n_ptr->signature = INVALID_NODE_SIG;
115 116
116 tipc_num_nodes++; 117 tipc_num_nodes++;
117 118
diff --git a/net/tipc/node.h b/net/tipc/node.h
index e1b78a2199c2..7bf526af1dfb 100644
--- a/net/tipc/node.h
+++ b/net/tipc/node.h
@@ -42,6 +42,11 @@
42#include "net.h" 42#include "net.h"
43#include "bearer.h" 43#include "bearer.h"
44 44
45/*
46 * Out-of-range value for node signature
47 */
48#define INVALID_NODE_SIG 0x10000
49
45/* Flags used to block (re)establishment of contact with a neighboring node */ 50/* Flags used to block (re)establishment of contact with a neighboring node */
46 51
47#define WAIT_PEER_DOWN 0x0001 /* wait to see that peer's links are down */ 52#define WAIT_PEER_DOWN 0x0001 /* wait to see that peer's links are down */
@@ -61,6 +66,7 @@
61 * @block_setup: bit mask of conditions preventing link establishment to node 66 * @block_setup: bit mask of conditions preventing link establishment to node
62 * @link_cnt: number of links to node 67 * @link_cnt: number of links to node
63 * @permit_changeover: non-zero if node has redundant links to this system 68 * @permit_changeover: non-zero if node has redundant links to this system
69 * @signature: node instance identifier
64 * @bclink: broadcast-related info 70 * @bclink: broadcast-related info
65 * @supportable: non-zero if node supports TIPC b'cast link capability 71 * @supportable: non-zero if node supports TIPC b'cast link capability
66 * @supported: non-zero if node supports TIPC b'cast capability 72 * @supported: non-zero if node supports TIPC b'cast capability
@@ -86,6 +92,7 @@ struct tipc_node {
86 int working_links; 92 int working_links;
87 int block_setup; 93 int block_setup;
88 int permit_changeover; 94 int permit_changeover;
95 u32 signature;
89 struct { 96 struct {
90 u8 supportable; 97 u8 supportable;
91 u8 supported; 98 u8 supported;