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
