|
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...>
|