]>
Commit | Line | Data |
---|---|---|
002d6754 AD |
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 | |
5 | ||
6 | Continue sending queries when leave is received if the user marks it as a querier. | |
7 | ||
8 | Signed-off-by: Alexandre Derumier <aderumier@odiso.com> | |
9 | --- | |
10 | net/bridge/br_multicast.c | 25 +++++++++++++++++++++++++ | |
11 | 1 file changed, 25 insertions(+) | |
12 | ||
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; | |
22 | + | |
23 | unsigned long now; | |
24 | unsigned long time; | |
25 | ||
26 | @@ -1263,6 +1265,29 @@ static void br_multicast_leave_group(struct net_bridge *br, | |
27 | if (!mp) | |
28 | goto out; | |
29 | ||
30 | + if (br->multicast_querier && | |
31 | + !timer_pending(&br->multicast_querier_timer)) { | |
32 | + __br_multicast_send_query(br, port, &mp->addr); | |
33 | + | |
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); | |
38 | + | |
39 | + for (pp = &mp->ports; (p = *pp); pp = &p->next) { | |
40 | + if (p->port != port) | |
41 | + continue; | |
42 | + | |
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); | |
48 | + } | |
49 | + | |
50 | + break; | |
51 | + } | |
52 | + } | |
53 | now = jiffies; | |
54 | time = now + br->multicast_last_member_count * | |
55 | br->multicast_last_member_interval; | |
56 | -- | |
57 | 1.7.10.4 | |
58 |