diff options
| author | Sven Eckelmann | 2025-11-08 07:29:27 +0000 |
|---|---|---|
| committer | Robert Marko | 2025-11-15 10:18:18 +0000 |
| commit | d78a2a6597e23ba897aba63006f1412e1bf485ca (patch) | |
| tree | bc3f608c6bda946cd8fbaaaa8dad624efc420467 | |
| parent | 993a44b24c4d0b3f8a24e3a82271189e0a73c779 (diff) | |
| download | openwrt-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.c | 4 |
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; |