Commit a1be5a20 authored by GhantaKrishnamurthy MohanKrishna's avatar GhantaKrishnamurthy MohanKrishna Committed by David S. Miller

tipc: extend sock diag for group communication

This commit extends the existing TIPC socket diagnostics framework
for information related to TIPC group communication.
Acked-by: default avatarYing Xue <ying.xue@windriver.com>
Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
Signed-off-by: default avatarGhantaKrishnamurthy MohanKrishna <mohan.krishna.ghanta.krishnamurthy@ericsson.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6a939f36
...@@ -121,6 +121,7 @@ enum { ...@@ -121,6 +121,7 @@ enum {
TIPC_NLA_SOCK_TIPC_STATE, /* u32 */ TIPC_NLA_SOCK_TIPC_STATE, /* u32 */
TIPC_NLA_SOCK_COOKIE, /* u64 */ TIPC_NLA_SOCK_COOKIE, /* u64 */
TIPC_NLA_SOCK_PAD, /* flag */ TIPC_NLA_SOCK_PAD, /* flag */
TIPC_NLA_SOCK_GROUP, /* nest */
__TIPC_NLA_SOCK_MAX, __TIPC_NLA_SOCK_MAX,
TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1 TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
...@@ -233,6 +234,19 @@ enum { ...@@ -233,6 +234,19 @@ enum {
TIPC_NLA_MON_PEER_MAX = __TIPC_NLA_MON_PEER_MAX - 1 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 */ /* Nest, connection info */
enum { enum {
TIPC_NLA_CON_UNSPEC, TIPC_NLA_CON_UNSPEC,
......
...@@ -918,3 +918,35 @@ void tipc_group_member_evt(struct tipc_group *grp, ...@@ -918,3 +918,35 @@ void tipc_group_member_evt(struct tipc_group *grp,
} }
*sk_rcvbuf = tipc_group_rcvbuf_limit(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;
}
...@@ -72,4 +72,5 @@ void tipc_group_update_rcv_win(struct tipc_group *grp, int blks, u32 node, ...@@ -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); u32 port, struct sk_buff_head *xmitq);
u16 tipc_group_bc_snd_nxt(struct tipc_group *grp); u16 tipc_group_bc_snd_nxt(struct tipc_group *grp);
void tipc_group_update_member(struct tipc_member *m, int len); 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 #endif
...@@ -3316,6 +3316,11 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct netlink_callback *cb, ...@@ -3316,6 +3316,11 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct netlink_callback *cb,
goto stat_msg_cancel; goto stat_msg_cancel;
nla_nest_end(skb, stat); 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); nla_nest_end(skb, attrs);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment