mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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>
			
			
This commit is contained in:
		
							parent
							
								
									fb692ec411
								
							
						
					
					
						commit
						5a2de63fd1
					
				
					 1 changed files with 9 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1422,6 +1422,14 @@ static void br_multicast_query_received(struct net_bridge *br,
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	br_multicast_update_query_timer(br, query, max_delay);
 | 
			
		||||
 | 
			
		||||
	/* 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue