Message ID | 20200928153002.1697183-1-razor@blackwall.org |
---|---|
State | New |
Headers | show |
Series | [net] net: bridge: fdb: don't flush ext_learn entries | expand |
From: Nikolay Aleksandrov <razor@blackwall.org> Date: Mon, 28 Sep 2020 18:30:02 +0300 > From: Nikolay Aleksandrov <nikolay@nvidia.com> > > When a user-space software manages fdb entries externally it should > set the ext_learn flag which marks the fdb entry as externally managed > and avoids expiring it (they're treated as static fdbs). Unfortunately > on events where fdb entries are flushed (STP down, netlink fdb flush > etc) these fdbs are also deleted automatically by the bridge. That in turn > causes trouble for the managing user-space software (e.g. in MLAG setups > we lose remote fdb entries on port flaps). > These entries are completely externally managed so we should avoid > automatically deleting them, the only exception are offloaded entries > (i.e. BR_FDB_ADDED_BY_EXT_LEARN + BR_FDB_OFFLOADED). They are flushed as > before. > > Fixes: eb100e0e24a2 ("net: bridge: allow to add externally learned entries from user-space") > Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Applied and queued up for -stable, thank you.
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 9db504baa094..32ac8343b0ba 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -413,6 +413,8 @@ void br_fdb_delete_by_port(struct net_bridge *br, if (!do_all) if (test_bit(BR_FDB_STATIC, &f->flags) || + (test_bit(BR_FDB_ADDED_BY_EXT_LEARN, &f->flags) && + !test_bit(BR_FDB_OFFLOADED, &f->flags)) || (vid && f->key.vlan_id != vid)) continue;