On 05/30/2018 09:58 PM, GhantaKrishnamurthy MohanKrishna wrote:
> This commit extends the existing TIPC socket diagnostics framework
> for information related to TIPC group communication. Related iproute2
> patch for sock stat would be sent separately.
> 
> Signed-off-by: GhantaKrishnamurthy MohanKrishna 
> <[email protected]>

Acked-by: Ying Xue <[email protected]>

> ---
>  include/uapi/linux/tipc_netlink.h | 14 ++++++++++++++
>  net/tipc/group.c                  | 32 ++++++++++++++++++++++++++++++++
>  net/tipc/group.h                  |  1 +
>  net/tipc/socket.c                 |  5 +++++
>  4 files changed, 52 insertions(+)
> 
> diff --git a/include/uapi/linux/tipc_netlink.h 
> b/include/uapi/linux/tipc_netlink.h
> index 85c11982c89b..0ebe02ef1a86 100644
> --- a/include/uapi/linux/tipc_netlink.h
> +++ b/include/uapi/linux/tipc_netlink.h
> @@ -121,6 +121,7 @@ enum {
>       TIPC_NLA_SOCK_TIPC_STATE,       /* u32 */
>       TIPC_NLA_SOCK_COOKIE,           /* u64 */
>       TIPC_NLA_SOCK_PAD,              /* flag */
> +     TIPC_NLA_SOCK_GROUP,            /* nest */
>  
>       __TIPC_NLA_SOCK_MAX,
>       TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
> @@ -233,6 +234,19 @@ enum {
>       TIPC_NLA_MON_PEER_MAX = __TIPC_NLA_MON_PEER_MAX - 1
>  };
>  
> +/* Nest, socket group info */
> +enum {
> +     TIPC_NLA_SOCK_GROUP_ID,                 /* u32 */
> +     TIPC_NLA_SOCK_GROUP_OPEN,               /* flag */
> +     TIPC_NLA_SOCK_GROUP_NODE_SCOPE,         /* flag */
> +     TIPC_NLA_SOCK_GROUP_CLUSTER_SCOPE,      /* flag */
> +     TIPC_NLA_SOCK_GROUP_INSTANCE,           /* u32 */
> +     TIPC_NLA_SOCK_GROUP_BC_SEND_NEXT,       /* u32 */
> +
> +     __TIPC_NLA_SOCK_GROUP_MAX,
> +     TIPC_NLA_SOCK_GROUP_MAX = __TIPC_NLA_SOCK_GROUP_MAX - 1
> +};
> +
>  /* Nest, connection info */
>  enum {
>       TIPC_NLA_CON_UNSPEC,
> diff --git a/net/tipc/group.c b/net/tipc/group.c
> index d7a7befeddd4..cbe39e8db39c 100644
> --- a/net/tipc/group.c
> +++ b/net/tipc/group.c
> @@ -918,3 +918,35 @@ void tipc_group_member_evt(struct tipc_group *grp,
>       }
>       *sk_rcvbuf = tipc_group_rcvbuf_limit(grp);
>  }
> +
> +int tipc_group_fill_sock_diag(struct tipc_group *grp, struct sk_buff *skb)
> +{
> +     struct nlattr *group = nla_nest_start(skb, TIPC_NLA_SOCK_GROUP);
> +
> +     if (nla_put_u32(skb, TIPC_NLA_SOCK_GROUP_ID,
> +                     grp->type) ||
> +         nla_put_u32(skb, TIPC_NLA_SOCK_GROUP_INSTANCE,
> +                     grp->instance) ||
> +         nla_put_u32(skb, TIPC_NLA_SOCK_GROUP_BC_SEND_NEXT,
> +                     grp->bc_snd_nxt))
> +             goto group_msg_cancel;
> +
> +     if (grp->scope == TIPC_NODE_SCOPE)
> +             if (nla_put_flag(skb, TIPC_NLA_SOCK_GROUP_NODE_SCOPE))
> +                     goto group_msg_cancel;
> +
> +     if (grp->scope == TIPC_CLUSTER_SCOPE)
> +             if (nla_put_flag(skb, TIPC_NLA_SOCK_GROUP_CLUSTER_SCOPE))
> +                     goto group_msg_cancel;
> +
> +     if (*grp->open)
> +             if (nla_put_flag(skb, TIPC_NLA_SOCK_GROUP_OPEN))
> +                     goto group_msg_cancel;
> +
> +     nla_nest_end(skb, group);
> +     return 0;
> +
> +group_msg_cancel:
> +     nla_nest_cancel(skb, group);
> +     return -1;
> +}
> diff --git a/net/tipc/group.h b/net/tipc/group.h
> index 5996af6e9f1d..76b4e5a7b39d 100644
> --- a/net/tipc/group.h
> +++ b/net/tipc/group.h
> @@ -72,4 +72,5 @@ void tipc_group_update_rcv_win(struct tipc_group *grp, int 
> blks, u32 node,
>                              u32 port, struct sk_buff_head *xmitq);
>  u16 tipc_group_bc_snd_nxt(struct tipc_group *grp);
>  void tipc_group_update_member(struct tipc_member *m, int len);
> +int tipc_group_fill_sock_diag(struct tipc_group *grp, struct sk_buff *skb);
>  #endif
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index cee6674a3bf4..67d5b6fa9bd8 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -3308,6 +3308,11 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct 
> tipc_sock *tsk,
>               goto stat_msg_cancel;
>  
>       nla_nest_end(skb, stat);
> +
> +     if (tsk->group)
> +             if (tipc_group_fill_sock_diag(tsk->group, skb))
> +                     goto stat_msg_cancel;
> +
>       nla_nest_end(skb, attrs);
>  
>       return 0;
> 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to