|
@@ -1422,7 +1422,15 @@ static void br_multicast_query_received(struct net_bridge *br,
|
|
return;
|
|
return;
|
|
|
|
|
|
br_multicast_update_query_timer(br, query, max_delay);
|
|
br_multicast_update_query_timer(br, query, max_delay);
|
|
- br_multicast_mark_router(br, port);
|
|
|
|
|
|
+
|
|
|
|
+ /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
|
|
|
|
+ * the arrival port for IGMP Queries where the source address
|
|
|
|
+ * is 0.0.0.0 should not be added to router port list.
|
|
|
|
+ */
|
|
|
|
+ if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
|
|
|
|
+ (saddr->proto == htons(ETH_P_IPV6) &&
|
|
|
|
+ !ipv6_addr_any(&saddr->u.ip6)))
|
|
|
|
+ br_multicast_mark_router(br, port);
|
|
}
|
|
}
|
|
|
|
|
|
static void br_ip4_multicast_query(struct net_bridge *br,
|
|
static void br_ip4_multicast_query(struct net_bridge *br,
|