From: Jon M. <jm...@re...> - 2020-12-02 20:14:30
|
On 12/1/20 4:01 AM, Hoang Huu Le wrote: > From: Hoang Le <hoa...@de...> > > 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> > > Signed-off-by: Hoang Le <hoa...@de...> > --- > net/tipc/node.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/net/tipc/node.c b/net/tipc/node.c > index cd67b7d5169f..a7479f68a146 100644 > --- a/net/tipc/node.c > +++ b/net/tipc/node.c > @@ -2195,6 +2195,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; > > @@ -2208,10 +2211,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 case s/case/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; Acked-by: Jon Maloy <jm...@re...> |