[openwrt/openwrt] realtek: rtl93xx: Send per port packets on physical port

LEDE Commits lede-commits at lists.infradead.org
Sat Nov 15 02:18:21 PST 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/d78a2a6597e23ba897aba63006f1412e1bf485ca

commit d78a2a6597e23ba897aba63006f1412e1bf485ca
Author: Sven Eckelmann <se at simonwunderlich.de>
AuthorDate: Sat Nov 8 08:29:27 2025 +0100

    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 at simonwunderlich.de>
    Link: https://github.com/openwrt/openwrt/pull/20728
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c | 4 ++--
 1 file 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;




More information about the lede-commits mailing list