aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHangbin Liu <liuhangbin@gmail.com>2018-10-25 22:28:43 -0400
committerDavid S. Miller <davem@davemloft.net>2018-10-26 19:01:23 -0400
commit5a2de63fd1a59c30c02526d427bc014b98adf508 (patch)
tree88b7a5fb81aada4bba94c68ff8d82bc40e2d598f
parentfb692ec4117f6fd25044cfb5720d6b79d400dc65 (diff)
bridge: do not add port to router list when receives query with source 0.0.0.0
Based on RFC 4541, 2.1.1. IGMP Forwarding Rules The switch supporting IGMP snooping must maintain a list of multicast routers and the ports on which they are attached. This list can be constructed in any combination of the following ways: a) This list should be built by the snooping switch sending Multicast Router Solicitation messages as described in IGMP Multicast Router Discovery [MRDISC]. It may also snoop Multicast Router Advertisement messages sent by and to other nodes. b) The arrival port for IGMP Queries (sent by multicast routers) where the source address is not 0.0.0.0. We should not add the port to router list when receives query with source 0.0.0.0. Reported-by: Ying Xu <yinxu@redhat.com> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/bridge/br_multicast.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 024139b51d3a..41cdafbf2ebe 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1422,7 +1422,15 @@ static void br_multicast_query_received(struct net_bridge *br,
1422 return; 1422 return;
1423 1423
1424 br_multicast_update_query_timer(br, query, max_delay); 1424 br_multicast_update_query_timer(br, query, max_delay);
1425 br_multicast_mark_router(br, port); 1425
1426 /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
1427 * the arrival port for IGMP Queries where the source address
1428 * is 0.0.0.0 should not be added to router port list.
1429 */
1430 if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
1431 (saddr->proto == htons(ETH_P_IPV6) &&
1432 !ipv6_addr_any(&saddr->u.ip6)))
1433 br_multicast_mark_router(br, port);
1426} 1434}
1427 1435
1428static void br_ip4_multicast_query(struct net_bridge *br, 1436static void br_ip4_multicast_query(struct net_bridge *br,