summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Eckelmann2025-10-28 07:55:38 +0000
committerHauke Mehrtens2025-11-15 15:21:16 +0000
commit2d14c1008e13da5bba9773ba19fc340207ad0a98 (patch)
treef5ae07234b8cce5cda2c6c514cdea1f02e353c82
parent280cf19cdbcf41ddaad43e0ff9a1e8ed1e92f4a5 (diff)
downloadopenwrt-2d14c1008e13da5bba9773ba19fc340207ad0a98.tar.gz
realtek: dsa: Automatically return lost VLANs to CIST
If a VLAN doesn't have any members anymore, then it is removed and implicitly returns back from any MSTI to CIST. The DSA layer will not create any call to .vlan_msti_set and the driver is required to handle this directly. Suggested-by: Jonas Gorski <jonas.gorski@gmail.com> Signed-off-by: Sven Eckelmann <se@simonwunderlich.de> Link: https://github.com/openwrt/openwrt/pull/20421 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c
index f83ac7bd26..1a950fff55 100644
--- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c
+++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c
@@ -1819,6 +1819,10 @@ static int rtl83xx_vlan_del(struct dsa_switch *ds, int port,
info.untagged_ports &= (~BIT_ULL(port));
info.member_ports &= (~BIT_ULL(port));
+ /* VLANs without members are set back (implicitly) to CIST by DSA */
+ if (!info.member_ports)
+ info.fid = 0;
+
priv->r->vlan_set_untagged(vlan->vid, info.untagged_ports);
pr_debug("Untagged ports, VLAN %d: %llx\n", vlan->vid, info.untagged_ports);