net: dsa: b53: fix untagged traffic sent via cpu tagged with VID 0
authorJonas Gorski <jonas.gorski@gmail.com>
Mon, 2 Jun 2025 19:49:14 +0000 (21:49 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 6 Jun 2025 00:42:37 +0000 (17:42 -0700)
commit692eb9f8a5b71d852e873375d20cf5da7a046ea6
treed77c6cbba45e79984e60e4b5d5cb6d997ecdea3b
parent2c7e4a2663a1ab5a740c59c31991579b6b865a26
net: dsa: b53: fix untagged traffic sent via cpu tagged with VID 0

When Linux sends out untagged traffic from a port, it will enter the CPU
port without any VLAN tag, even if the port is a member of a vlan
filtering bridge with a PVID egress untagged VLAN.

This makes the CPU port's PVID take effect, and the PVID's VLAN
table entry controls if the packet will be tagged on egress.

Since commit 45e9d59d3950 ("net: dsa: b53: do not allow to configure
VLAN 0") we remove bridged ports from VLAN 0 when joining or leaving a
VLAN aware bridge. But we also clear the untagged bit, causing untagged
traffic from the controller to become tagged with VID 0 (and priority
0).

Fix this by not touching the untagged map of VLAN 0. Additionally,
always keep the CPU port as a member, as the untag map is only effective
as long as there is at least one member, and we would remove it when
bridging all ports and leaving no standalone ports.

Since Linux (and the switch) treats VLAN 0 tagged traffic like untagged,
the actual impact of this is rather low, but this also prevented earlier
detection of the issue.

Fixes: 45e9d59d3950 ("net: dsa: b53: do not allow to configure VLAN 0")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://patch.msgid.link/20250602194914.1011890-1-jonas.gorski@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/b53/b53_common.c