aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r--net/tipc/node.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c
index c29915688230..29cc85319327 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * net/tipc/node.c: TIPC node management routines 2 * net/tipc/node.c: TIPC node management routines
3 * 3 *
4 * Copyright (c) 2000-2006, 2012-2015, Ericsson AB 4 * Copyright (c) 2000-2006, 2012-2016, Ericsson AB
5 * Copyright (c) 2005-2006, 2010-2014, Wind River Systems 5 * Copyright (c) 2005-2006, 2010-2014, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -191,6 +191,20 @@ int tipc_node_get_mtu(struct net *net, u32 addr, u32 sel)
191 tipc_node_put(n); 191 tipc_node_put(n);
192 return mtu; 192 return mtu;
193} 193}
194
195u16 tipc_node_get_capabilities(struct net *net, u32 addr)
196{
197 struct tipc_node *n;
198 u16 caps;
199
200 n = tipc_node_find(net, addr);
201 if (unlikely(!n))
202 return TIPC_NODE_CAPABILITIES;
203 caps = n->capabilities;
204 tipc_node_put(n);
205 return caps;
206}
207
194/* 208/*
195 * A trivial power-of-two bitmask technique is used for speed, since this 209 * A trivial power-of-two bitmask technique is used for speed, since this
196 * operation is done for every incoming TIPC packet. The number of hash table 210 * operation is done for every incoming TIPC packet. The number of hash table
@@ -304,8 +318,11 @@ struct tipc_node *tipc_node_create(struct net *net, u32 addr, u16 capabilities)
304 318
305 spin_lock_bh(&tn->node_list_lock); 319 spin_lock_bh(&tn->node_list_lock);
306 n = tipc_node_find(net, addr); 320 n = tipc_node_find(net, addr);
307 if (n) 321 if (n) {
322 /* Same node may come back with new capabilities */
323 n->capabilities = capabilities;
308 goto exit; 324 goto exit;
325 }
309 n = kzalloc(sizeof(*n), GFP_ATOMIC); 326 n = kzalloc(sizeof(*n), GFP_ATOMIC);
310 if (!n) { 327 if (!n) {
311 pr_warn("Node creation failed, no memory\n"); 328 pr_warn("Node creation failed, no memory\n");