mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
net: dsa: tag_rtl8_4: set KEEP flag
KEEP=1 is needed because we should respect the format of the packet as the kernel sends it to us. Unless tx forward offloading is used, the kernel is giving us the packet exactly as it should leave the specified port on the wire. Until now this was not needed because the ports were always functioning in a standalone mode in a VLAN-unaware way, so the switch would not tag or untag frames anyway. But arguably it should have been KEEP=1 all along. Co-developed-by: Alvin Šipraga <alsi@bang-olufsen.dk> Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk> Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20260408-realtek_fixes-v1-2-915ff1404d56@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
297e1f411e
commit
82f37bd9a4
@@ -99,6 +99,7 @@
|
||||
#define RTL8_4_REASON_TRAP 80
|
||||
|
||||
#define RTL8_4_LEARN_DIS BIT(5)
|
||||
#define RTL8_4_KEEP BIT(7)
|
||||
|
||||
#define RTL8_4_TX GENMASK(3, 0)
|
||||
#define RTL8_4_RX GENMASK(10, 0)
|
||||
@@ -114,8 +115,9 @@ static void rtl8_4_write_tag(struct sk_buff *skb, struct net_device *dev,
|
||||
/* Set Protocol; zero REASON */
|
||||
tag16[1] = htons(FIELD_PREP(RTL8_4_PROTOCOL, RTL8_4_PROTOCOL_RTL8365MB));
|
||||
|
||||
/* Zero EFID_EN, EFID, PRI_EN, PRI, VSEL, VIDX, KEEP; set LEARN_DIS */
|
||||
tag16[2] = htons(FIELD_PREP(RTL8_4_LEARN_DIS, 1));
|
||||
/* Zero EFID_EN, EFID, PRI_EN, PRI, VSEL, VIDX; set KEEP, LEARN_DIS */
|
||||
tag16[2] = htons(FIELD_PREP(RTL8_4_LEARN_DIS, 1) |
|
||||
FIELD_PREP(RTL8_4_KEEP, 1));
|
||||
|
||||
/* Zero ALLOW; set RX (CPU->switch) forwarding port mask */
|
||||
tag16[3] = htons(FIELD_PREP(RTL8_4_RX, dsa_xmit_port_mask(skb, dev)));
|
||||
|
||||
Reference in New Issue
Block a user