|
@@ -1127,9 +1127,10 @@ static void br_multicast_query_received(struct net_bridge *br,
|
|
|
struct net_bridge_port *port,
|
|
|
struct bridge_mcast_querier *querier,
|
|
|
int saddr,
|
|
|
+ bool is_general_query,
|
|
|
unsigned long max_delay)
|
|
|
{
|
|
|
- if (saddr)
|
|
|
+ if (saddr && is_general_query)
|
|
|
br_multicast_update_querier_timer(br, querier, max_delay);
|
|
|
else if (timer_pending(&querier->timer))
|
|
|
return;
|
|
@@ -1190,7 +1191,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,
|
|
|
}
|
|
|
|
|
|
br_multicast_query_received(br, port, &br->ip4_querier, !!iph->saddr,
|
|
|
- max_delay);
|
|
|
+ !group, max_delay);
|
|
|
|
|
|
if (!group)
|
|
|
goto out;
|
|
@@ -1282,7 +1283,8 @@ static int br_ip6_multicast_query(struct net_bridge *br,
|
|
|
}
|
|
|
|
|
|
br_multicast_query_received(br, port, &br->ip6_querier,
|
|
|
- !ipv6_addr_any(&ip6h->saddr), max_delay);
|
|
|
+ !ipv6_addr_any(&ip6h->saddr),
|
|
|
+ is_general_query, max_delay);
|
|
|
|
|
|
if (!group)
|
|
|
goto out;
|