summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Eckelmann2025-11-08 07:29:27 +0000
committerRobert Marko2025-11-15 10:18:18 +0000
commitd78a2a6597e23ba897aba63006f1412e1bf485ca (patch)
treebc3f608c6bda946cd8fbaaaa8dad624efc420467
parent993a44b24c4d0b3f8a24e3a82271189e0a73c779 (diff)
downloadopenwrt-d78a2a6597e23ba897aba63006f1412e1bf485ca.tar.gz
realtek: rtl93xx: Send per port packets on physical port
If link aggregation with LACP is activated, we must send out the LACP packets on the physical port and not on a logic port. Otherwise, the per port packets might be (rebalanced) between the different ports in a link aggregation group. Such rebalancing breaks 802.3ad and will leave ports in a churned state. Fixes: 8c42e63a69f6 ("realtek: rtl93xx: fix incorrect destination port selection") Signed-off-by: Sven Eckelmann <se@simonwunderlich.de> Link: https://github.com/openwrt/openwrt/pull/20728 Signed-off-by: Robert Marko <robimarko@gmail.com>
-rw-r--r--target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
index 6d7baee317..f4e62debd8 100644
--- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
+++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
@@ -133,7 +133,7 @@ static void rtl930x_create_tx_header(struct p_hdr *h, unsigned int dest_port, in
h->cpu_tag[0] = 0x8000; /* CPU tag marker */
h->cpu_tag[1] = FIELD_PREP(RTL93XX_CPU_TAG1_FWD_MASK,
- RTL93XX_CPU_TAG1_FWD_LOGICAL);
+ RTL93XX_CPU_TAG1_FWD_PHYSICAL);
h->cpu_tag[1] |= FIELD_PREP(RTL93XX_CPU_TAG1_IGNORE_STP_MASK, 1);
h->cpu_tag[2] = 0;
h->cpu_tag[3] = 0;
@@ -152,7 +152,7 @@ static void rtl931x_create_tx_header(struct p_hdr *h, unsigned int dest_port, in
h->cpu_tag[0] = 0x8000; /* CPU tag marker */
h->cpu_tag[1] = FIELD_PREP(RTL93XX_CPU_TAG1_FWD_MASK,
- RTL93XX_CPU_TAG1_FWD_LOGICAL);
+ RTL93XX_CPU_TAG1_FWD_PHYSICAL);
h->cpu_tag[1] |= FIELD_PREP(RTL93XX_CPU_TAG1_IGNORE_STP_MASK, 1);
h->cpu_tag[2] = 0;
h->cpu_tag[3] = 0;