diff options
Diffstat (limited to 'net/tipc/discover.c')
| -rw-r--r-- | net/tipc/discover.c | 11 |
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; |
