When BROPT_FDB_LOCAL_VLAN_0 is enabled, the local FDB entries for the
bridge itself should not be created per-VLAN, but instead only on VLAN 0.
When the bridge address changes, the local FDB entries need to be updated,
which is done in br_fdb_change_mac_address().

Bail out early when in VLAN-0 mode, so that the per-VLAN FDB entries are
not created. The per-VLAN walk is only done afterwards.

Reviewed-by: Ido Schimmel <[email protected]>
Signed-off-by: Petr Machata <[email protected]>
---
 net/bridge/br_fdb.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 918c37554638..4a20578517a5 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -503,6 +503,9 @@ void br_fdb_change_mac_address(struct net_bridge *br, const 
u8 *newaddr)
        struct net_bridge_vlan_group *vg;
        struct net_bridge_fdb_entry *f;
        struct net_bridge_vlan *v;
+       bool local_vlan_0;
+
+       local_vlan_0 = br_opt_get(br, BROPT_FDB_LOCAL_VLAN_0);
 
        spin_lock_bh(&br->hash_lock);
 
@@ -514,7 +517,7 @@ void br_fdb_change_mac_address(struct net_bridge *br, const 
u8 *newaddr)
 
        fdb_add_local(br, NULL, newaddr, 0);
        vg = br_vlan_group(br);
-       if (!vg || !vg->num_vlans)
+       if (!vg || !vg->num_vlans || local_vlan_0)
                goto out;
        /* Now remove and add entries for every VLAN configured on the
         * bridge.  This function runs under RTNL so the bitmap will not
-- 
2.49.0


Reply via email to