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

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
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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,
+32 −0
Original line number Diff line number Diff line
@@ -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;
}
+1 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -3316,6 +3316,11 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct netlink_callback *cb,
		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;