Skip to content

Commit

Permalink
tipc: support 128bit node identity for peer removing
Browse files Browse the repository at this point in the history
We add the support to remove a specific node down with 128bit
node identifier, as an alternative to legacy 32-bit node address.

example:
$tipc peer remove identiy <1001002|16777777>

Acked-by: Jon Maloy <jmaloy@redhat.com>
Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
Link: https://lore.kernel.org/r/20201203035045.4564-1-hoang.h.le@dektech.com.au
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Hoang Le authored and Jakub Kicinski committed Dec 5, 2020
1 parent 7f35616 commit 43fcd90
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions net/tipc/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -2222,6 +2222,9 @@ int tipc_nl_peer_rm(struct sk_buff *skb, struct genl_info *info)
struct tipc_net *tn = net_generic(net, tipc_net_id);
struct nlattr *attrs[TIPC_NLA_NET_MAX + 1];
struct tipc_node *peer, *temp_node;
u8 node_id[NODE_ID_LEN];
u64 *w0 = (u64 *)&node_id[0];
u64 *w1 = (u64 *)&node_id[8];
u32 addr;
int err;

Expand All @@ -2235,10 +2238,22 @@ int tipc_nl_peer_rm(struct sk_buff *skb, struct genl_info *info)
if (err)
return err;

if (!attrs[TIPC_NLA_NET_ADDR])
return -EINVAL;
/* attrs[TIPC_NLA_NET_NODEID] and attrs[TIPC_NLA_NET_ADDR] are
* mutually exclusive cases
*/
if (attrs[TIPC_NLA_NET_ADDR]) {
addr = nla_get_u32(attrs[TIPC_NLA_NET_ADDR]);
if (!addr)
return -EINVAL;
}

addr = nla_get_u32(attrs[TIPC_NLA_NET_ADDR]);
if (attrs[TIPC_NLA_NET_NODEID]) {
if (!attrs[TIPC_NLA_NET_NODEID_W1])
return -EINVAL;
*w0 = nla_get_u64(attrs[TIPC_NLA_NET_NODEID]);
*w1 = nla_get_u64(attrs[TIPC_NLA_NET_NODEID_W1]);
addr = hash128to32(node_id);
}

if (in_own_node(net, addr))
return -ENOTSUPP;
Expand Down

0 comments on commit 43fcd90

Please sign in to comment.