lantiq: fix broadcasts and vlans in two iface mode

The two phy operation mode where one phy is assigned to an interface
without lantiq,* device tree property and the other phy is assigned to
an interface with the lantiq,wan device property was broken with the
multicast package leaks between vlans fixes.

Move the multicast packages relevant portmap settings to the condition
which handles multicast packages for better readability.

Replace the priv->port_map based port_map only for the interface which
has the lantiq,switch device tree property set, to allow tagged
multicast packages in two phy mode where the lantiq,switch device tree
property isn't used.

Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
Mathias Kresin 2017-02-24 09:19:49 +01:00
parent cc3c50eb22
commit 715b066419
2 changed files with 12 additions and 10 deletions

View file

@ -209,7 +209,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+}; +};
--- /dev/null --- /dev/null
+++ b/drivers/net/ethernet/lantiq_xrx200.c +++ b/drivers/net/ethernet/lantiq_xrx200.c
@@ -0,0 +1,1851 @@ @@ -0,0 +1,1852 @@
+/* +/*
+ * This program is free software; you can redistribute it and/or modify it + * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published + * under the terms of the GNU General Public License version 2 as published
@ -1262,7 +1262,6 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ struct xrx200_chan *ch; + struct xrx200_chan *ch;
+ struct ltq_dma_desc *desc; + struct ltq_dma_desc *desc;
+ u32 byte_offset; + u32 byte_offset;
+ u16 port_map = 0;
+ int ret = NETDEV_TX_OK; + int ret = NETDEV_TX_OK;
+ int len; + int len;
+#ifdef SW_ROUTING +#ifdef SW_ROUTING
@ -1280,10 +1279,13 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ +
+#ifdef SW_ROUTING +#ifdef SW_ROUTING
+ if (is_multicast_ether_addr(eth_hdr(skb)->h_dest)) { + if (is_multicast_ether_addr(eth_hdr(skb)->h_dest)) {
+ if (skb->protocol == htons(ETH_P_8021Q)) { + u16 port_map = priv->port_map;
+
+ if (priv->sw && skb->protocol == htons(ETH_P_8021Q)) {
+ u16 vid; + u16 vid;
+ int i; + int i;
+ +
+ port_map = 0;
+ if (!__vlan_get_tag(skb, &vid)) { + if (!__vlan_get_tag(skb, &vid)) {
+ for (i = 0; i < XRX200_MAX_VLAN; i++) { + for (i = 0; i < XRX200_MAX_VLAN; i++) {
+ if (priv->hw->vlan_vid[i] != vid) + if (priv->hw->vlan_vid[i] != vid)
@ -1293,8 +1295,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ } + }
+ } + }
+ } + }
+ } +
+ if (port_map) {
+ special_tag |= (port_map << PORT_MAP_SHIFT) | + special_tag |= (port_map << PORT_MAP_SHIFT) |
+ PORT_MAP_SEL | PORT_MAP_EN; + PORT_MAP_SEL | PORT_MAP_EN;
+ } + }

View file

@ -209,7 +209,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+}; +};
--- /dev/null --- /dev/null
+++ b/drivers/net/ethernet/lantiq_xrx200.c +++ b/drivers/net/ethernet/lantiq_xrx200.c
@@ -0,0 +1,1850 @@ @@ -0,0 +1,1851 @@
+/* +/*
+ * This program is free software; you can redistribute it and/or modify it + * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published + * under the terms of the GNU General Public License version 2 as published
@ -1262,7 +1262,6 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ struct xrx200_chan *ch; + struct xrx200_chan *ch;
+ struct ltq_dma_desc *desc; + struct ltq_dma_desc *desc;
+ u32 byte_offset; + u32 byte_offset;
+ u16 port_map = 0;
+ int ret = NETDEV_TX_OK; + int ret = NETDEV_TX_OK;
+ int len; + int len;
+#ifdef SW_ROUTING +#ifdef SW_ROUTING
@ -1280,10 +1279,13 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ +
+#ifdef SW_ROUTING +#ifdef SW_ROUTING
+ if (is_multicast_ether_addr(eth_hdr(skb)->h_dest)) { + if (is_multicast_ether_addr(eth_hdr(skb)->h_dest)) {
+ if (skb->protocol == htons(ETH_P_8021Q)) { + u16 port_map = priv->port_map;
+
+ if (priv->sw && skb->protocol == htons(ETH_P_8021Q)) {
+ u16 vid; + u16 vid;
+ int i; + int i;
+ +
+ port_map = 0;
+ if (!__vlan_get_tag(skb, &vid)) { + if (!__vlan_get_tag(skb, &vid)) {
+ for (i = 0; i < XRX200_MAX_VLAN; i++) { + for (i = 0; i < XRX200_MAX_VLAN; i++) {
+ if (priv->hw->vlan_vid[i] != vid) + if (priv->hw->vlan_vid[i] != vid)
@ -1293,8 +1295,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
+ } + }
+ } + }
+ } + }
+ } +
+ if (port_map) {
+ special_tag |= (port_map << PORT_MAP_SHIFT) | + special_tag |= (port_map << PORT_MAP_SHIFT) |
+ PORT_MAP_SEL | PORT_MAP_EN; + PORT_MAP_SEL | PORT_MAP_EN;
+ } + }