summaryrefslogtreecommitdiffstats
path: root/net/bridge/br_fdb.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-10-12 14:45:38 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2006-10-15 23:14:13 -0700
commit1a620698c29b5e18150ec04ace0609fb07d08d3e (patch)
treec63d5aaa4bfbed335cd7aeb594ad66c3182e086b /net/bridge/br_fdb.c
parent9ea8cfd6aa74e710f0cb0731ecb9dee53fbebfb9 (diff)
downloadlinux-1a620698c29b5e18150ec04ace0609fb07d08d3e.tar.gz
linux-1a620698c29b5e18150ec04ace0609fb07d08d3e.tar.bz2
linux-1a620698c29b5e18150ec04ace0609fb07d08d3e.zip
[BRIDGE]: flush forwarding table when device carrier off
Flush the forwarding table when carrier is lost. This helps for availability because we don't want to forward to a downed device and new packets may come in on other links. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_fdb.c')
-rw-r--r--net/bridge/br_fdb.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 3a73b8c94271..d9f04864d15d 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -128,7 +128,10 @@ void br_fdb_cleanup(unsigned long _data)
mod_timer(&br->gc_timer, jiffies + HZ/10);
}
-void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p)
+
+void br_fdb_delete_by_port(struct net_bridge *br,
+ const struct net_bridge_port *p,
+ int do_all)
{
int i;
@@ -142,6 +145,8 @@ void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p)
if (f->dst != p)
continue;
+ if (f->is_static && !do_all)
+ continue;
/*
* if multiple ports all have the same device address
* then when one port is deleted, assign