summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch')
-rw-r--r--target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch173
1 files changed, 0 insertions, 173 deletions
diff --git a/target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch b/target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch
deleted file mode 100644
index 0cc6bf7525..0000000000
--- a/target/linux/generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-From f1fa919ea59655f73cb3972264e157b8831ba546 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <arinc.unal@arinc9.com>
-Date: Thu, 14 Mar 2024 12:33:41 +0300
-Subject: [PATCH 2/3] net: dsa: mt7530: fix link-local frames that ingress vlan
- filtering ports
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-[ Upstream commit e8bf353577f382c7066c661fed41b2adc0fc7c40 ]
-
-Whether VLAN-aware or not, on every VID VLAN table entry that has the CPU
-port as a member of it, frames are set to egress the CPU port with the VLAN
-tag stacked. This is so that VLAN tags can be appended after hardware
-special tag (called DSA tag in the context of Linux drivers).
-
-For user ports on a VLAN-unaware bridge, frame ingressing the user port
-egresses CPU port with only the special tag.
-
-For user ports on a VLAN-aware bridge, frame ingressing the user port
-egresses CPU port with the special tag and the VLAN tag.
-
-This causes issues with link-local frames, specifically BPDUs, because the
-software expects to receive them VLAN-untagged.
-
-There are two options to make link-local frames egress untagged. Setting
-CONSISTENT or UNTAGGED on the EG_TAG bits on the relevant register.
-CONSISTENT means frames egress exactly as they ingress. That means
-egressing with the VLAN tag they had at ingress or egressing untagged if
-they ingressed untagged. Although link-local frames are not supposed to be
-transmitted VLAN-tagged, if they are done so, when egressing through a CPU
-port, the special tag field will be broken.
-
-BPDU egresses CPU port with VLAN tag egressing stacked, received on
-software:
-
-00:01:25.104821 AF Unknown (382365846), length 106:
- | STAG | | VLAN |
- 0x0000: 0000 6c27 614d 4143 0001 0000 8100 0001 ..l'aMAC........
- 0x0010: 0026 4242 0300 0000 0000 0000 6c27 614d .&BB........l'aM
- 0x0020: 4143 0000 0000 0000 6c27 614d 4143 0000 AC......l'aMAC..
- 0x0030: 0000 1400 0200 0f00 0000 0000 0000 0000 ................
-
-BPDU egresses CPU port with VLAN tag egressing untagged, received on
-software:
-
-00:23:56.628708 AF Unknown (25215488), length 64:
- | STAG |
- 0x0000: 0000 6c27 614d 4143 0001 0000 0026 4242 ..l'aMAC.....&BB
- 0x0010: 0300 0000 0000 0000 6c27 614d 4143 0000 ........l'aMAC..
- 0x0020: 0000 0000 6c27 614d 4143 0000 0000 1400 ....l'aMAC......
- 0x0030: 0200 0f00 0000 0000 0000 0000 ............
-
-BPDU egresses CPU port with VLAN tag egressing tagged, received on
-software:
-
-00:01:34.311963 AF Unknown (25215488), length 64:
- | Mess |
- 0x0000: 0000 6c27 614d 4143 0001 0001 0026 4242 ..l'aMAC.....&BB
- 0x0010: 0300 0000 0000 0000 6c27 614d 4143 0000 ........l'aMAC..
- 0x0020: 0000 0000 6c27 614d 4143 0000 0000 1400 ....l'aMAC......
- 0x0030: 0200 0f00 0000 0000 0000 0000 ............
-
-To prevent confusing the software, force the frame to egress UNTAGGED
-instead of CONSISTENT. This way, frames can't possibly be received TAGGED
-by software which would have the special tag field broken.
-
-VLAN Tag Egress Procedure
-
- For all frames, one of these options set the earliest in this order will
- apply to the frame:
-
- - EG_TAG in certain registers for certain frames.
- This will apply to frame with matching MAC DA or EtherType.
-
- - EG_TAG in the address table.
- This will apply to frame at its incoming port.
-
- - EG_TAG in the PVC register.
- This will apply to frame at its incoming port.
-
- - EG_CON and [EG_TAG per port] in the VLAN table.
- This will apply to frame at its outgoing port.
-
- - EG_TAG in the PCR register.
- This will apply to frame at its outgoing port.
-
- EG_TAG in certain registers for certain frames:
-
- PPPoE Discovery_ARP/RARP: PPP_EG_TAG and ARP_EG_TAG in the APC register.
- IGMP_MLD: IGMP_EG_TAG and MLD_EG_TAG in the IMC register.
- BPDU and PAE: BPDU_EG_TAG and PAE_EG_TAG in the BPC register.
- REV_01 and REV_02: R01_EG_TAG and R02_EG_TAG in the RGAC1 register.
- REV_03 and REV_0E: R03_EG_TAG and R0E_EG_TAG in the RGAC2 register.
- REV_10 and REV_20: R10_EG_TAG and R20_EG_TAG in the RGAC3 register.
- REV_21 and REV_UN: R21_EG_TAG and RUN_EG_TAG in the RGAC4 register.
-
-With this change, it can be observed that a bridge interface with stp_state
-and vlan_filtering enabled will properly block ports now.
-
-Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch")
-Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
-Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/dsa/mt7530.c | 23 +++++++++++++++--------
- drivers/net/dsa/mt7530.h | 9 ++++++++-
- 2 files changed, 23 insertions(+), 9 deletions(-)
-
---- a/drivers/net/dsa/mt7530.c
-+++ b/drivers/net/dsa/mt7530.c
-@@ -1001,16 +1001,23 @@ unlock_exit:
- static void
- mt753x_trap_frames(struct mt7530_priv *priv)
- {
-- /* Trap BPDUs to the CPU port(s) */
-- mt7530_rmw(priv, MT753X_BPC, MT753X_BPDU_PORT_FW_MASK,
-+ /* Trap 802.1X PAE frames and BPDUs to the CPU port(s) and egress them
-+ * VLAN-untagged.
-+ */
-+ mt7530_rmw(priv, MT753X_BPC, MT753X_PAE_EG_TAG_MASK |
-+ MT753X_PAE_PORT_FW_MASK | MT753X_BPDU_EG_TAG_MASK |
-+ MT753X_BPDU_PORT_FW_MASK,
-+ MT753X_PAE_EG_TAG(MT7530_VLAN_EG_UNTAGGED) |
-+ MT753X_PAE_PORT_FW(MT753X_BPDU_CPU_ONLY) |
-+ MT753X_BPDU_EG_TAG(MT7530_VLAN_EG_UNTAGGED) |
- MT753X_BPDU_CPU_ONLY);
-
-- /* Trap 802.1X PAE frames to the CPU port(s) */
-- mt7530_rmw(priv, MT753X_BPC, MT753X_PAE_PORT_FW_MASK,
-- MT753X_PAE_PORT_FW(MT753X_BPDU_CPU_ONLY));
--
-- /* Trap LLDP frames with :0E MAC DA to the CPU port(s) */
-- mt7530_rmw(priv, MT753X_RGAC2, MT753X_R0E_PORT_FW_MASK,
-+ /* Trap LLDP frames with :0E MAC DA to the CPU port(s) and egress them
-+ * VLAN-untagged.
-+ */
-+ mt7530_rmw(priv, MT753X_RGAC2, MT753X_R0E_EG_TAG_MASK |
-+ MT753X_R0E_PORT_FW_MASK,
-+ MT753X_R0E_EG_TAG(MT7530_VLAN_EG_UNTAGGED) |
- MT753X_R0E_PORT_FW(MT753X_BPDU_CPU_ONLY));
- }
-
---- a/drivers/net/dsa/mt7530.h
-+++ b/drivers/net/dsa/mt7530.h
-@@ -63,12 +63,18 @@ enum mt753x_id {
-
- /* Registers for BPDU and PAE frame control*/
- #define MT753X_BPC 0x24
--#define MT753X_BPDU_PORT_FW_MASK GENMASK(2, 0)
-+#define MT753X_PAE_EG_TAG_MASK GENMASK(24, 22)
-+#define MT753X_PAE_EG_TAG(x) FIELD_PREP(MT753X_PAE_EG_TAG_MASK, x)
- #define MT753X_PAE_PORT_FW_MASK GENMASK(18, 16)
- #define MT753X_PAE_PORT_FW(x) FIELD_PREP(MT753X_PAE_PORT_FW_MASK, x)
-+#define MT753X_BPDU_EG_TAG_MASK GENMASK(8, 6)
-+#define MT753X_BPDU_EG_TAG(x) FIELD_PREP(MT753X_BPDU_EG_TAG_MASK, x)
-+#define MT753X_BPDU_PORT_FW_MASK GENMASK(2, 0)
-
- /* Register for :03 and :0E MAC DA frame control */
- #define MT753X_RGAC2 0x2c
-+#define MT753X_R0E_EG_TAG_MASK GENMASK(24, 22)
-+#define MT753X_R0E_EG_TAG(x) FIELD_PREP(MT753X_R0E_EG_TAG_MASK, x)
- #define MT753X_R0E_PORT_FW_MASK GENMASK(18, 16)
- #define MT753X_R0E_PORT_FW(x) FIELD_PREP(MT753X_R0E_PORT_FW_MASK, x)
-
-@@ -251,6 +257,7 @@ enum mt7530_port_mode {
- enum mt7530_vlan_port_eg_tag {
- MT7530_VLAN_EG_DISABLED = 0,
- MT7530_VLAN_EG_CONSISTENT = 1,
-+ MT7530_VLAN_EG_UNTAGGED = 4,
- };
-
- enum mt7530_vlan_port_attr {