realtek: rtl93xx: Send per port packets on physical port
authorSven Eckelmann <[email protected]>
Sat, 8 Nov 2025 07:29:27 +0000 (08:29 +0100)
committerRobert Marko <[email protected]>
Sat, 15 Nov 2025 10:18:18 +0000 (11:18 +0100)
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 <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20728
Signed-off-by: Robert Marko <[email protected]>
target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c

index 6d7baee3176d1d401b3e59358e7cca82cf1e5ffa..f4e62debd88926507f4afd45eaf5e450581dfd02 100644 (file)
@@ -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;