linux/drivers/net/dsa/sja1105
Vladimir Oltean b38e659de9 net: dsa: sja1105: update existing VLANs from the bridge VLAN list
When running this sequence of operations:

ip link add br0 type bridge vlan_filtering 1
ip link set swp4 master br0
bridge vlan add dev swp4 vid 1

We observe the traffic sent on swp4 is still untagged, even though the
bridge has overwritten the existing VLAN entry:

port    vlan ids
swp4     1 PVID

br0      1 PVID Egress Untagged

This happens because we didn't consider that the 'bridge vlan add'
command just overwrites VLANs like it's nothing. We treat the 'vid 1
pvid untagged' and the 'vid 1' as two separate VLANs, and the first
still has precedence when calling sja1105_build_vlan_table. Obviously
there is a disagreement regarding semantics, and we end up doing
something unexpected from the PoV of the bridge.

Let's actually consider an "existing VLAN" to be one which is on the
same port, and has the same VLAN ID, as one we already have, and update
it if it has different flags than we do.

The first blamed commit is the one introducing the bug, the second one
is the latest on top of which the bugfix still applies.

Fixes: ec5ae61076 ("net: dsa: sja1105: save/restore VLANs using a delta commit method")
Fixes: 5899ee367a ("net: dsa: tag_8021q: add a context structure")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-05-24 13:20:24 -07:00
..
Kconfig net: dsa: sja1105: support flow-based redirection via virtual links 2020-05-07 17:31:57 -07:00
Makefile net: dsa: sja1105: move devlink param code to sja1105_devlink.c 2020-09-25 16:35:27 -07:00
sja1105_clocking.c net: dsa: sja1105: enable internal pull-down for RX_DV/CRS_DV/RX_CTL and RX_ER 2020-04-20 11:00:27 -07:00
sja1105_devlink.c net: dsa: propagate extack to .port_vlan_filtering 2021-02-14 17:38:12 -08:00
sja1105_dynamic_config.c net: dsa: sja1105: fix VL lookup command packing for P/Q/R/S 2021-05-24 13:20:24 -07:00
sja1105_dynamic_config.h net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_ethtool.c dsa: sja1105: fix semicolon.cocci warnings 2020-05-10 11:05:46 -07:00
sja1105_flower.c net: dsa: sja1105: fix error return code in sja1105_cls_flower_add() 2021-03-16 11:14:59 -07:00
sja1105_main.c net: dsa: sja1105: update existing VLANs from the bridge VLAN list 2021-05-24 13:20:24 -07:00
sja1105_ptp.c net: dsa: free skb->cb usage in core driver 2021-04-27 14:10:15 -07:00
sja1105_ptp.h net: dsa: no longer clone skb in core driver 2021-04-27 14:10:15 -07:00
sja1105_sgmii.h net: dsa: sja1105: Add support for the SGMII port 2020-03-20 08:55:21 -07:00
sja1105_spi.c net: dsa: sja1105: offload bridge port flags to device 2021-02-12 17:08:05 -08:00
sja1105_static_config.c net: dsa: sja1105: Remove unneeded cast in sja1105_crc32() 2021-02-25 09:41:32 -08:00
sja1105_static_config.h net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_tas.c net: dsa: sja1105: Use struct_size() in kzalloc() 2020-06-19 13:42:08 -07:00
sja1105_tas.h net: dsa: sja1105: implement tc-gate using time-triggered virtual links 2020-05-07 17:31:57 -07:00
sja1105_vl.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-06-25 19:29:51 -07:00
sja1105_vl.h net: dsa: sja1105: suppress -Wmissing-prototypes in sja1105_vl.c 2020-06-01 12:13:47 -07:00
sja1105.h net: dsa: sja1105: fix leakage of flooded frames outside bridging domain 2021-02-16 14:02:46 -08:00