diff options
Diffstat (limited to 'net/tipc/group.c')
| -rw-r--r-- | net/tipc/group.c | 42 | 
1 files changed, 35 insertions, 7 deletions
| diff --git a/net/tipc/group.c b/net/tipc/group.c index d7a7befeddd4..06fee142f09f 100644 --- a/net/tipc/group.c +++ b/net/tipc/group.c @@ -159,11 +159,6 @@ u32 tipc_group_exclude(struct tipc_group *grp)  	return 0;  } -int tipc_group_size(struct tipc_group *grp) -{ -	return grp->member_cnt; -} -  struct tipc_group *tipc_group_create(struct net *net, u32 portid,  				     struct tipc_group_req *mreq,  				     bool *group_is_open) @@ -232,8 +227,8 @@ void tipc_group_delete(struct net *net, struct tipc_group *grp)  	kfree(grp);  } -struct tipc_member *tipc_group_find_member(struct tipc_group *grp, -					   u32 node, u32 port) +static struct tipc_member *tipc_group_find_member(struct tipc_group *grp, +						  u32 node, u32 port)  {  	struct rb_node *n = grp->members.rb_node;  	u64 nkey, key = (u64)node << 32 | port; @@ -671,6 +666,7 @@ static void tipc_group_create_event(struct tipc_group *grp,  	struct sk_buff *skb;  	struct tipc_msg *hdr; +	memset(&evt, 0, sizeof(evt));  	evt.event = event;  	evt.found_lower = m->instance;  	evt.found_upper = m->instance; @@ -918,3 +914,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; +} | 
