1 From fa6209a8834a92dc83dd31451738cb6a46c18126 Mon Sep 17 00:00:00 2001
2 From: Alexandre Derumier <aderumier@odiso.com>
3 Date: Mon, 3 Jun 2013 17:35:42 +0200
4 Subject: [PATCH 2/2] bridge: send query as soon as leave is received
6 Continue sending queries when leave is received if the user marks it as a querier.
8 Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
10 net/bridge/br_multicast.c | 25 +++++++++++++++++++++++++
11 1 file changed, 25 insertions(+)
13 diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
14 index ceb364a..cb308ff 100644
15 --- a/net/bridge/br_multicast.c
16 +++ b/net/bridge/br_multicast.c
17 @@ -1249,6 +1249,8 @@ static void br_multicast_leave_group(struct net_bridge *br,
18 struct net_bridge_mdb_htable *mdb;
19 struct net_bridge_mdb_entry *mp;
20 struct net_bridge_port_group *p;
21 + struct net_bridge_port_group **pp;
26 @@ -1263,6 +1265,29 @@ static void br_multicast_leave_group(struct net_bridge *br,
30 + if (br->multicast_querier &&
31 + !timer_pending(&br->multicast_querier_timer)) {
32 + __br_multicast_send_query(br, port, &mp->addr);
34 + time = jiffies + br->multicast_last_member_count *
35 + br->multicast_last_member_interval;
36 + mod_timer(port ? &port->multicast_query_timer :
37 + &br->multicast_query_timer, time);
39 + for (pp = &mp->ports; (p = *pp); pp = &p->next) {
40 + if (p->port != port)
43 + if (!hlist_unhashed(&p->mglist) &&
44 + (timer_pending(&p->timer) ?
45 + time_after(p->timer.expires, time) :
46 + try_to_del_timer_sync(&p->timer) >= 0)) {
47 + mod_timer(&p->timer, time);
54 time = now + br->multicast_last_member_count *
55 br->multicast_last_member_interval;