]> git.proxmox.com Git - pve-kernel-2.6.32.git/blame - 0002-bridge-send-query-as-soon-as-leave-is-received.patch
update to vzkernel-2.6.32-042stab113.12.src.rpm
[pve-kernel-2.6.32.git] / 0002-bridge-send-query-as-soon-as-leave-is-received.patch
CommitLineData
002d6754
AD
1From fa6209a8834a92dc83dd31451738cb6a46c18126 Mon Sep 17 00:00:00 2001
2From: Alexandre Derumier <aderumier@odiso.com>
3Date: Mon, 3 Jun 2013 17:35:42 +0200
4Subject: [PATCH 2/2] bridge: send query as soon as leave is received
5
6Continue sending queries when leave is received if the user marks it as a querier.
7
8Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
9---
10 net/bridge/br_multicast.c | 25 +++++++++++++++++++++++++
11 1 file changed, 25 insertions(+)
12
13diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
14index 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--
571.7.10.4
58