linux/net/dsa
Vladimir Oltean 2b13840672 net: dsa: convert check for 802.1Q upper when bridged into PRECHANGEUPPER
DSA tries to prevent having a VLAN added by a bridge and by an 802.1Q
upper at the same time. It does that by checking the VID in
.ndo_vlan_rx_add_vid(), since that's something that the 8021q module
calls, via vlan_vid_add(). When a VLAN matches in both subsystems, this
check returns -EBUSY.

However the vlan_vid_add() function isn't specific to the 8021q module
in any way at all. It is simply the kernel's way to tell an interface to
add a VLAN to its RX filter and not drop that VLAN. So there's no reason
to return -EBUSY when somebody tries to call vlan_vid_add() for a VLAN
that was installed by the bridge. The proper behavior is to accept that
configuration.

So what's wrong is how DSA checks that it has an 8021q upper. It should
look at the actual uppers for that, not just assume that the 8021q
module was somewhere in the call stack of .ndo_vlan_rx_add_vid().

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-20 19:01:33 -07:00
..
dsa2.c net: dsa: wire up devlink info get 2020-09-18 18:18:30 -07:00
dsa_priv.h Revert "net: dsa: Add more convenient functions for installing port VLANs" 2020-09-11 17:30:43 -07:00
dsa.c net: dsa: Add devlink regions support to DSA 2020-09-18 18:17:45 -07:00
Kconfig net: dsa: tag_rtl4_a: Implement Realtek 4 byte A tag 2020-07-08 15:36:19 -07:00
Makefile net: dsa: tag_rtl4_a: Implement Realtek 4 byte A tag 2020-07-08 15:36:19 -07:00
master.c net: dsa: stop overriding master's ndo_get_phys_port_name 2020-07-23 15:14:58 -07:00
port.c Revert "net: dsa: Add more convenient functions for installing port VLANs" 2020-09-11 17:30:43 -07:00
slave.c net: dsa: convert check for 802.1Q upper when bridged into PRECHANGEUPPER 2020-09-20 19:01:33 -07:00
switch.c net: dsa: permit cross-chip bridging between all trees in the system 2020-05-10 19:52:33 -07:00
tag_8021q.c net: dsa: tag_8021q: add a context structure 2020-09-11 17:30:43 -07:00
tag_ar9331.c net: dsa: tag_ar9331: Make sure there is headroom for tag 2020-02-14 07:34:51 -08:00
tag_brcm.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-03-25 18:58:11 -07:00
tag_dsa.c dsa: Cleanup unneeded table and make tag structures static 2019-04-28 19:41:01 -04:00
tag_edsa.c dsa: Allow forwarding of redirected IGMP traffic 2020-06-24 14:39:43 -07:00
tag_gswip.c net: dsa: tag_gswip: fix typo in tagger name 2020-01-16 13:58:26 +01:00
tag_ksz.c net: dsa: tag_ksz: Fix __be16 warnings 2020-07-05 15:31:58 -07:00
tag_lan9303.c net: dsa: tag_lan9303: Fix __be16 warnings 2020-07-05 15:31:58 -07:00
tag_mtk.c net: dsa: tag_mtk: Fix warnings for __be16 2020-07-05 15:31:58 -07:00
tag_ocelot.c net: dsa: felix: create a template for the DSA tags on xmit 2020-07-13 17:40:01 -07:00
tag_qca.c net: dsa: tag_qca.c: Fix warning for __be16 vs u16 2020-07-05 15:31:58 -07:00
tag_rtl4_a.c net: dsa: tag_rtl4_a: Implement Realtek 4 byte A tag 2020-07-08 15:36:19 -07:00
tag_sja1105.c net: dsa: tag_sja1105: appease sparse checks for ethertype accessors 2020-05-12 18:02:42 -07:00
tag_trailer.c dsa: Cleanup unneeded table and make tag structures static 2019-04-28 19:41:01 -04:00