netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: dsa: Treat VLAN ID 0 as PVID untagged
@ 2020-02-12 20:05 Florian Fainelli
  2020-02-12 20:47 ` Vladimir Oltean
  2020-02-14 18:25 ` Vivien Didelot
  0 siblings, 2 replies; 6+ messages in thread
From: Florian Fainelli @ 2020-02-12 20:05 UTC (permalink / raw)
  To: netdev
  Cc: olteanv, hkallweit1, michal.vokac, Florian Fainelli, Andrew Lunn,
	Vivien Didelot, David S. Miller, Jakub Kicinski, open list

VLAN ID 0 is special by all kinds and is really meant to be the default
ingress and egress untagged VLAN. We were not configuring it that way
and so we would be ingress untagged but egress tagged.

When our devices are interfaced with other link partners such as switch
devices, the results would be entirely equipment dependent. Some
switches are completely fine with accepting an egress tagged frame with
VLAN ID 0 and would send their responses untagged, so everything works,
but other devices are not so tolerant and would typically reject a VLAN
ID 0 tagged frame.

Fixes: 061f6a505ac3 ("net: dsa: Add ndo_vlan_rx_{add, kill}_vid implementation")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
Hi all,

After looking at all DSA drivers and how they implement port_vlan_add()
I think this is the right change to do, but would appreciate if you
could test this on your respective platforms to ensure this is not
problematic.

Thank you


 net/dsa/slave.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 088c886e609e..d3a2782eb94d 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1100,6 +1100,7 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
 {
 	struct dsa_port *dp = dsa_slave_to_port(dev);
 	struct bridge_vlan_info info;
+	u16 flags = 0;
 	int ret;
 
 	/* Check for a possible bridge VLAN entry now since there is no
@@ -1118,7 +1119,13 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
 			return -EBUSY;
 	}
 
-	ret = dsa_port_vid_add(dp, vid, 0);
+	/* VLAN ID 0 is special and should be the default egress and ingress
+	 * untagged VLAN, make sure it gets programmed as such.
+	 */
+	if (vid == 0)
+		flags = BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED;
+
+	ret = dsa_port_vid_add(dp, vid, flags);
 	if (ret)
 		return ret;
 
-- 
2.17.1


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

end of thread, other threads:[~2020-02-14 18:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-12 20:05 [PATCH net] net: dsa: Treat VLAN ID 0 as PVID untagged Florian Fainelli
2020-02-12 20:47 ` Vladimir Oltean
2020-02-12 21:28   ` Florian Fainelli
2020-02-12 22:38     ` Vladimir Oltean
2020-02-12 22:54       ` Florian Fainelli
2020-02-14 18:25 ` Vivien Didelot

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).