Message ID | 20230319095540.239064-1-noltari@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 032a954061afd4b7426c3eb6bfd2952ef1e9a384 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2] net: dsa: tag_brcm: legacy: fix daisy-chained switches | expand |
On Sun, 19 Mar 2023 10:55:40 +0100 Álvaro Fernández Rojas wrote: > 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. Is it good to go in, Florian?
On 3/19/23 02:55, Álvaro Fernández Rojas wrote: > 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. > > Fixes: 964dbf186eaa ("net: dsa: tag_brcm: add support for legacy tags") > Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Sun, 19 Mar 2023 10:55:40 +0100 you wrote: > 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. > > [...] Here is the summary with links: - [v2] net: dsa: tag_brcm: legacy: fix daisy-chained switches https://git.kernel.org/netdev/net/c/032a954061af You are awesome, thank you!
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; }