linux/drivers/net/dsa
Vladimir Oltean 58adf9dcb1 net: dsa: let drivers state that they need VLAN filtering while standalone
As explained in commit e358bef7c3 ("net: dsa: Give drivers the chance
to veto certain upper devices"), the hellcreek driver uses some tricks
to comply with the network stack expectations: it enforces port
separation in standalone mode using VLANs. For untagged traffic,
bridging between ports is prevented by using different PVIDs, and for
VLAN-tagged traffic, it never accepts 8021q uppers with the same VID on
two ports, so packets with one VLAN cannot leak from one port to another.

That is almost fine*, and has worked because hellcreek relied on an
implicit behavior of the DSA core that was changed by the previous
patch: the standalone ports declare the 'rx-vlan-filter' feature as 'on
[fixed]'. Since most of the DSA drivers are actually VLAN-unaware in
standalone mode, that feature was actually incorrectly reflecting the
hardware/driver state, so there was a desire to fix it. This leaves the
hellcreek driver in a situation where it has to explicitly request this
behavior from the DSA framework.

We configure the ports as follows:

- Standalone: 'rx-vlan-filter' is on. An 8021q upper on top of a
  standalone hellcreek port will go through dsa_slave_vlan_rx_add_vid
  and will add a VLAN to the hardware tables, giving the driver the
  opportunity to refuse it through .port_prechangeupper.

- Bridged with vlan_filtering=0: 'rx-vlan-filter' is off. An 8021q upper
  on top of a bridged hellcreek port will not go through
  dsa_slave_vlan_rx_add_vid, because there will not be any attempt to
  offload this VLAN. The driver already disables VLAN awareness, so that
  upper should receive the traffic it needs.

- Bridged with vlan_filtering=1: 'rx-vlan-filter' is on. An 8021q upper
  on top of a bridged hellcreek port will call dsa_slave_vlan_rx_add_vid,
  and can again be vetoed through .port_prechangeupper.

*It is not actually completely fine, because if I follow through
correctly, we can have the following situation:

ip link add br0 type bridge vlan_filtering 0
ip link set lan0 master br0 # lan0 now becomes VLAN-unaware
ip link set lan0 nomaster # lan0 fails to become VLAN-aware again, therefore breaking isolation

This patch fixes that corner case by extending the DSA core logic, based
on this requested attribute, to change the VLAN awareness state of the
switch (port) when it leaves the bridge.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Acked-by: Kurt Kanzenbach <kurt@linutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-08-24 09:30:58 +01:00
..
b53 net: dsa: don't disable multicast flooding to the CPU even without an IGMP querier 2021-08-06 11:11:13 +01:00
hirschmann net: dsa: let drivers state that they need VLAN filtering while standalone 2021-08-24 09:30:58 +01:00
microchip net: dsa: microchip: ksz8795: Don't use phy_port_cnt in VLAN table lookup 2021-08-10 09:58:15 +01:00
mv88e6xxx ethernet: fix PTP_1588_CLOCK dependencies 2021-08-13 17:49:05 -07:00
ocelot net: mscc: ocelot: transmit the VLAN filtering restrictions via extack 2021-08-20 14:39:52 +01:00
qca net: dsa: qca: ar9331: make proper initial port defaults 2021-08-07 09:34:35 +01:00
sja1105 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-08-19 18:09:18 -07:00
xrs700x net: dsa: xrs700x: forward HSR supervision frames 2021-06-16 12:17:03 -07:00
bcm_sf2.c net: dsa: don't disable multicast flooding to the CPU even without an IGMP querier 2021-08-06 11:11:13 +01:00
bcm_sf2.h net: dsa: bcm_sf2: setup BCM4908 internal crossbar 2021-03-12 17:06:37 -08:00
bcm_sf2_cfp.c
bcm_sf2_regs.h net: dsa: bcm_sf2: fix BCM4908 RGMII reg(s) 2021-03-18 14:44:05 -07:00
dsa_loop.c net: dsa: propagate extack to .port_vlan_filtering 2021-02-14 17:38:12 -08:00
dsa_loop.h
dsa_loop_bdinfo.c
Kconfig dsa: simplify Kconfig symbols and dependencies 2021-03-22 12:15:37 -07:00
lan9303-core.c net: dsa: lan9303: fix broken backpressure in .port_fdb_dump 2021-08-10 13:17:22 +01:00
lan9303.h
lan9303_i2c.c
lan9303_mdio.c
lantiq_gswip.c net: dsa: lantiq: fix broken backpressure in .port_fdb_dump 2021-08-10 13:17:22 +01:00
lantiq_pce.h
Makefile
mt7530.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-08-13 06:41:22 -07:00
mt7530.h net: dsa: mt7530: drop untagged frames on VLAN-aware ports without PVID 2021-08-06 12:07:39 +01:00
mv88e6060.c
mv88e6060.h
qca8k.c net: dsa: qca8k: check the correct variable in qca8k_set_mac_eee() 2021-06-09 14:10:38 -07:00
qca8k.h net: dsa: qca8k: add support for internal phy and internal mdio 2021-05-14 15:30:22 -07:00
realtek-smi-core.c
realtek-smi-core.h net: dsa: propagate extack to .port_vlan_filtering 2021-02-14 17:38:12 -08:00
rtl8366.c net: dsa: propagate extack to .port_vlan_filtering 2021-02-14 17:38:12 -08:00
rtl8366rb.c
vitesse-vsc73xx-core.c
vitesse-vsc73xx-platform.c
vitesse-vsc73xx-spi.c
vitesse-vsc73xx.h