net: dsa: qca8k: fix mdb add/del case with 0 VID
authorChristian Marangi <ansuelsmth@gmail.com>
Mon, 24 Jul 2023 03:25:31 +0000 (05:25 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 26 Jul 2023 07:50:10 +0000 (08:50 +0100)
The qca8k switch doesn't support using 0 as VID and require a default
VID to be always set. MDB add/del function doesn't currently handle
this and are currently setting the default VID.

Fix this by correctly handling this corner case and internally use the
default VID for VID 0 case.

Fixes: ba8f870dfa63 ("net: dsa: qca8k: add support for mdb_add/del")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/qca/qca8k-common.c

index b644c05337c5139678be868a3c2dbc12916e9572..13b8452ce5b2bc94cea345ec508b1bab234dd466 100644 (file)
@@ -816,6 +816,9 @@ int qca8k_port_mdb_add(struct dsa_switch *ds, int port,
        const u8 *addr = mdb->addr;
        u16 vid = mdb->vid;
 
+       if (!vid)
+               vid = QCA8K_PORT_VID_DEF;
+
        return qca8k_fdb_search_and_insert(priv, BIT(port), addr, vid,
                                           QCA8K_ATU_STATUS_STATIC);
 }
@@ -828,6 +831,9 @@ int qca8k_port_mdb_del(struct dsa_switch *ds, int port,
        const u8 *addr = mdb->addr;
        u16 vid = mdb->vid;
 
+       if (!vid)
+               vid = QCA8K_PORT_VID_DEF;
+
        return qca8k_fdb_search_and_del(priv, BIT(port), addr, vid);
 }