aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/discover.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/discover.c')
-rw-r--r--net/tipc/discover.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index feef3753615d..967e292f53c8 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -86,9 +86,10 @@ static void tipc_disc_init_msg(struct net *net, struct sk_buff *buf, u32 type,
86 86
87 msg = buf_msg(buf); 87 msg = buf_msg(buf);
88 tipc_msg_init(tn->own_addr, msg, LINK_CONFIG, type, 88 tipc_msg_init(tn->own_addr, msg, LINK_CONFIG, type,
89 INT_H_SIZE, dest_domain); 89 MAX_H_SIZE, dest_domain);
90 msg_set_non_seq(msg, 1); 90 msg_set_non_seq(msg, 1);
91 msg_set_node_sig(msg, tn->random); 91 msg_set_node_sig(msg, tn->random);
92 msg_set_node_capabilities(msg, 0);
92 msg_set_dest_domain(msg, dest_domain); 93 msg_set_dest_domain(msg, dest_domain);
93 msg_set_bc_netid(msg, tn->net_id); 94 msg_set_bc_netid(msg, tn->net_id);
94 b_ptr->media->addr2msg(msg_media_addr(msg), &b_ptr->addr); 95 b_ptr->media->addr2msg(msg_media_addr(msg), &b_ptr->addr);
@@ -133,6 +134,7 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
133 u32 net_id = msg_bc_netid(msg); 134 u32 net_id = msg_bc_netid(msg);
134 u32 mtyp = msg_type(msg); 135 u32 mtyp = msg_type(msg);
135 u32 signature = msg_node_sig(msg); 136 u32 signature = msg_node_sig(msg);
137 u16 caps = msg_node_capabilities(msg);
136 bool addr_match = false; 138 bool addr_match = false;
137 bool sign_match = false; 139 bool sign_match = false;
138 bool link_up = false; 140 bool link_up = false;
@@ -167,6 +169,7 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
167 if (!node) 169 if (!node)
168 return; 170 return;
169 tipc_node_lock(node); 171 tipc_node_lock(node);
172 node->capabilities = caps;
170 link = node->links[bearer->identity]; 173 link = node->links[bearer->identity];
171 174
172 /* Prepare to validate requesting node's signature and media address */ 175 /* Prepare to validate requesting node's signature and media address */
@@ -249,7 +252,7 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
249 252
250 /* Send response, if necessary */ 253 /* Send response, if necessary */
251 if (respond && (mtyp == DSC_REQ_MSG)) { 254 if (respond && (mtyp == DSC_REQ_MSG)) {
252 rbuf = tipc_buf_acquire(INT_H_SIZE); 255 rbuf = tipc_buf_acquire(MAX_H_SIZE);
253 if (rbuf) { 256 if (rbuf) {
254 tipc_disc_init_msg(net, rbuf, DSC_RESP_MSG, bearer); 257 tipc_disc_init_msg(net, rbuf, DSC_RESP_MSG, bearer);
255 tipc_bearer_send(net, bearer->identity, rbuf, &maddr); 258 tipc_bearer_send(net, bearer->identity, rbuf, &maddr);
@@ -257,6 +260,7 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
257 } 260 }
258 } 261 }
259 tipc_node_unlock(node); 262 tipc_node_unlock(node);
263 tipc_node_put(node);
260} 264}
261 265
262/** 266/**
@@ -359,8 +363,7 @@ int tipc_disc_create(struct net *net, struct tipc_bearer *b_ptr,
359 req = kmalloc(sizeof(*req), GFP_ATOMIC); 363 req = kmalloc(sizeof(*req), GFP_ATOMIC);
360 if (!req) 364 if (!req)
361 return -ENOMEM; 365 return -ENOMEM;
362 366 req->buf = tipc_buf_acquire(MAX_H_SIZE);
363 req->buf = tipc_buf_acquire(INT_H_SIZE);
364 if (!req->buf) { 367 if (!req->buf) {
365 kfree(req); 368 kfree(req);
366 return -ENOMEM; 369 return -ENOMEM;