aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_multicast.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_multicast.c')
-rw-r--r--net/bridge/br_multicast.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 9ce2af187709..1207a5a0688a 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -37,10 +37,9 @@
37 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock)) 37 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
38 38
39#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) 39#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
40static inline int ipv6_is_local_multicast(const struct in6_addr *addr) 40static inline int ipv6_is_transient_multicast(const struct in6_addr *addr)
41{ 41{
42 if (ipv6_addr_is_multicast(addr) && 42 if (ipv6_addr_is_multicast(addr) && IPV6_ADDR_MC_FLAG_TRANSIENT(addr))
43 IPV6_ADDR_MC_SCOPE(addr) <= IPV6_ADDR_SCOPE_LINKLOCAL)
44 return 1; 43 return 1;
45 return 0; 44 return 0;
46} 45}
@@ -780,7 +779,7 @@ static int br_ip6_multicast_add_group(struct net_bridge *br,
780{ 779{
781 struct br_ip br_group; 780 struct br_ip br_group;
782 781
783 if (ipv6_is_local_multicast(group)) 782 if (!ipv6_is_transient_multicast(group))
784 return 0; 783 return 0;
785 784
786 ipv6_addr_copy(&br_group.u.ip6, group); 785 ipv6_addr_copy(&br_group.u.ip6, group);
@@ -1341,7 +1340,7 @@ static void br_ip6_multicast_leave_group(struct net_bridge *br,
1341{ 1340{
1342 struct br_ip br_group; 1341 struct br_ip br_group;
1343 1342
1344 if (ipv6_is_local_multicast(group)) 1343 if (!ipv6_is_transient_multicast(group))
1345 return; 1344 return;
1346 1345
1347 ipv6_addr_copy(&br_group.u.ip6, group); 1346 ipv6_addr_copy(&br_group.u.ip6, group);