aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_private_mcast_eht.h
diff options
context:
space:
mode:
authorNikolay Aleksandrov <nikolay@nvidia.com>2021-01-20 16:51:59 +0200
committerJakub Kicinski <kuba@kernel.org>2021-01-22 19:39:57 -0800
commitddc255d993d83bc13c2c8b239fd69cb87d12d03e (patch)
tree7680b2d66b84b14e443ae21c6c1742f160bd2fab /net/bridge/br_private_mcast_eht.h
parentnet: bridge: multicast: add EHT allow/block handling (diff)
downloadlinux-dev-ddc255d993d83bc13c2c8b239fd69cb87d12d03e.tar.xz
linux-dev-ddc255d993d83bc13c2c8b239fd69cb87d12d03e.zip
net: bridge: multicast: add EHT include and exclude handling
Add support for IGMPv3/MLDv2 include and exclude EHT handling. Similar to how the reports are processed we have 2 cases when the group is in include or exclude mode, these are processed as follows: - group include - is_include: create missing entries - to_include: flush existing entries and create a new set from the report, obviously if the src set is empty then we delete the group - group exclude - is_exclude: create missing entries - to_exclude: flush existing entries and create a new set from the report, any empty source set entries are removed If the group is in a different mode then we just flush all entries reported by the host and we create a new set with the new mode entries created from the report. If the report is include type, the source list is empty and the group has empty sources' set then we remove it. Any source set entries which are empty are removed as well. If the group is in exclude mode it can exist without any S,G entries (allowing for all traffic to pass). Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/bridge/br_private_mcast_eht.h')
-rw-r--r--net/bridge/br_private_mcast_eht.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/bridge/br_private_mcast_eht.h b/net/bridge/br_private_mcast_eht.h
index 92933822301d..9daffa3ad8d5 100644
--- a/net/bridge/br_private_mcast_eht.h
+++ b/net/bridge/br_private_mcast_eht.h
@@ -55,4 +55,11 @@ bool br_multicast_eht_handle(struct net_bridge_port_group *pg,
size_t addr_size,
int grec_type);
+static inline bool
+br_multicast_eht_should_del_pg(const struct net_bridge_port_group *pg)
+{
+ return !!((pg->key.port->flags & BR_MULTICAST_FAST_LEAVE) &&
+ RB_EMPTY_ROOT(&pg->eht_host_tree));
+}
+
#endif /* _BR_PRIVATE_MCAST_EHT_H_ */