aboutsummaryrefslogtreecommitdiff
path: root/net/bridge/br_fdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_fdb.c')
-rw-r--r--net/bridge/br_fdb.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 96ab1d1748d0..b4005f5b28f4 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -114,12 +114,20 @@ void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr)
if (op != p &&
ether_addr_equal(op->dev->dev_addr,
f->addr.addr) &&
- nbp_vlan_find(op, vid)) {
+ (!vid || nbp_vlan_find(op, vid))) {
f->dst = op;
goto skip_delete;
}
}
+ /* maybe bridge device has same hw addr? */
+ if (ether_addr_equal(br->dev->dev_addr,
+ f->addr.addr) &&
+ (!vid || br_vlan_find(br, vid))) {
+ f->dst = NULL;
+ goto skip_delete;
+ }
+
/* delete old one */
fdb_delete(br, f);
skip_delete: