diff options
Diffstat (limited to 'net/bridge/br_multicast.c')
-rw-r--r-- | net/bridge/br_multicast.c | 9 |
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) |
40 | static inline int ipv6_is_local_multicast(const struct in6_addr *addr) | 40 | static 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); |