diff options
| author | David S. Miller <davem@davemloft.net> | 2014-12-27 10:20:30 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-12-27 10:20:30 +0300 |
| commit | 24f626d3439f61d87fca0c0c07f614fba41a4e92 (patch) | |
| tree | adc927b4f3fb05268c6ca808aee5d0109351fec1 /include | |
| parent | eb46e2215fc6bdaaf8eda3a6c7c0dd033d171cad (diff) | |
| parent | c380d9a7afff0e4c2e5f3c1c2dc7d2f4214dd962 (diff) | |
| download | linux-24f626d3439f61d87fca0c0c07f614fba41a4e92.tar.xz | |
Merge branch 'netlink_multicast'
Johannes Berg says:
====================
netlink/genetlink cleanups & multicast improvements
I'm looking at using the multicast group functionality in a way that would
benefit from knowing when there are subscribers to avoid collecting the
required data when there aren't any. During this I noticed that the unbind
for multicast groups doesn't actually work - it's never called when sockets
are closed. Luckily, nobody actually uses the functionality.
While looking at the code trying to find why it's not called and where the
multicast listeners are actually removed, I found the potential cleanup in
patch 3. Patch 2 also has a cleanup for a generic netlink API in this area.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/genetlink.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index af10c2cf8a1d..3ed31e5a445b 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h @@ -31,6 +31,9 @@ struct genl_info; * do additional, common, filtering and return an error * @post_doit: called after an operation's doit callback, it may * undo operations done by pre_doit, for example release locks + * @mcast_bind: a socket bound to the given multicast group (which + * is given as the offset into the groups array) + * @mcast_unbind: a socket was unbound from the given multicast group * @attrbuf: buffer to store parsed attributes * @family_list: family list * @mcgrps: multicast groups used by this family (private) @@ -53,6 +56,8 @@ struct genl_family { void (*post_doit)(const struct genl_ops *ops, struct sk_buff *skb, struct genl_info *info); + int (*mcast_bind)(int group); + void (*mcast_unbind)(int group); struct nlattr ** attrbuf; /* private */ const struct genl_ops * ops; /* private */ const struct genl_multicast_group *mcgrps; /* private */ @@ -395,11 +400,11 @@ static inline int genl_set_err(struct genl_family *family, struct net *net, } static inline int genl_has_listeners(struct genl_family *family, - struct sock *sk, unsigned int group) + struct net *net, unsigned int group) { if (WARN_ON_ONCE(group >= family->n_mcgrps)) return -EINVAL; group = family->mcgrp_offset + group; - return netlink_has_listeners(sk, group); + return netlink_has_listeners(net->genl_sock, group); } #endif /* __NET_GENERIC_NETLINK_H */ |
