netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: dsa: tag_brcm: legacy: fix daisy-chained switches
@ 2023-03-17 12:08 Álvaro Fernández Rojas
  2023-03-17 12:26 ` Michal Swiatkowski
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Álvaro Fernández Rojas @ 2023-03-17 12:08 UTC (permalink / raw)
  To: andrew, f.fainelli, jonas.gorski, olteanv, davem, edumazet, kuba,
	pabeni, netdev, linux-kernel
  Cc: Álvaro Fernández Rojas

When BCM63xx internal switches are connected to switches with a 4-byte
Broadcom tag, it does not identify the packet as VLAN tagged, so it adds one
based on its PVID (which is likely 0).
Right now, the packet is received by the BCM63xx internal switch and the 6-byte
tag is properly processed. The next step would to decode the corresponding
4-byte tag. However, the internal switch adds an invalid VLAN tag after the
6-byte tag and the 4-byte tag handling fails.
In order to fix this we need to remove the invalid VLAN tag after the 6-byte
tag before passing it to the 4-byte tag decoding.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 net/dsa/tag_brcm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/net/dsa/tag_brcm.c b/net/dsa/tag_brcm.c
index 10239daa5745..cacdafb41200 100644
--- a/net/dsa/tag_brcm.c
+++ b/net/dsa/tag_brcm.c
@@ -7,6 +7,7 @@
 
 #include <linux/dsa/brcm.h>
 #include <linux/etherdevice.h>
+#include <linux/if_vlan.h>
 #include <linux/list.h>
 #include <linux/slab.h>
 
@@ -252,6 +253,7 @@ static struct sk_buff *brcm_leg_tag_xmit(struct sk_buff *skb,
 static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
 					struct net_device *dev)
 {
+	int len = BRCM_LEG_TAG_LEN;
 	int source_port;
 	u8 *brcm_tag;
 
@@ -266,12 +268,16 @@ static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
 	if (!skb->dev)
 		return NULL;
 
+	/* VLAN tag is added by BCM63xx internal switch */
+	if (netdev_uses_dsa(skb->dev))
+		len += VLAN_HLEN;
+
 	/* Remove Broadcom tag and update checksum */
-	skb_pull_rcsum(skb, BRCM_LEG_TAG_LEN);
+	skb_pull_rcsum(skb, len);
 
 	dsa_default_offload_fwd_mark(skb);
 
-	dsa_strip_etype_header(skb, BRCM_LEG_TAG_LEN);
+	dsa_strip_etype_header(skb, len);
 
 	return skb;
 }
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2023-03-22  0:40 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-17 12:08 [PATCH] net: dsa: tag_brcm: legacy: fix daisy-chained switches Álvaro Fernández Rojas
2023-03-17 12:26 ` Michal Swiatkowski
2023-03-17 16:25   ` Álvaro Fernández Rojas
2023-03-17 16:32 ` Andrew Lunn
2023-03-17 16:36   ` Florian Fainelli
2023-03-17 16:40   ` Álvaro Fernández Rojas
2023-03-17 16:49   ` Jonas Gorski
2023-03-17 16:54     ` Florian Fainelli
2023-03-17 21:51       ` Álvaro Fernández Rojas
2023-03-17 22:03         ` Florian Fainelli
2023-03-19  9:55 ` [PATCH v2] " Álvaro Fernández Rojas
2023-03-21  1:58   ` Jakub Kicinski
2023-03-21 20:51   ` Florian Fainelli
2023-03-22  0:40   ` patchwork-bot+netdevbpf
2023-03-21 20:50 ` [PATCH] " Florian Fainelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).