realtek: dsa: Automatically return lost VLANs to CIST
authorSven Eckelmann <[email protected]>
Tue, 28 Oct 2025 07:55:38 +0000 (08:55 +0100)
committerHauke Mehrtens <[email protected]>
Sat, 15 Nov 2025 15:21:16 +0000 (16:21 +0100)
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 <[email protected]>
Signed-off-by: Sven Eckelmann <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20421
Signed-off-by: Hauke Mehrtens <[email protected]>
target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c

index f83ac7bd262f905e3c79fb6eacd27b1436d25539..1a950fff55576852591d3fab389357359a49927b 100644 (file)
@@ -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);