linux/drivers/net/ethernet/mscc
Vladimir Oltean c1930148a3 net: mscc: ocelot: allow forwarding from bridge ports to the tag_8021q CPU port
Currently we are unable to ping a bridge on top of a felix switch which
uses the ocelot-8021q tagger. The packets are dropped on the ingress of
the user port and the 'drop_local' counter increments (the counter which
denotes drops due to no valid destinations).

Dumping the PGID tables, it becomes clear that the PGID_SRC of the user
port is zero, so it has no valid destinations.

But looking at the code, the cpu_fwd_mask (the bit mask of DSA tag_8021q
ports) is clearly missing from the forwarding mask of ports that are
under a bridge. So this has always been broken.

Looking at the version history of the patch, in v7
https://patchwork.kernel.org/project/netdevbpf/patch/20210125220333.1004365-12-olteanv@gmail.com/
the code looked like this:

	/* Standalone ports forward only to DSA tag_8021q CPU ports */
	unsigned long mask = cpu_fwd_mask;

(...)
	} else if (ocelot->bridge_fwd_mask & BIT(port)) {
		mask |= ocelot->bridge_fwd_mask & ~BIT(port);

while in v8 (the merged version)
https://patchwork.kernel.org/project/netdevbpf/patch/20210129010009.3959398-12-olteanv@gmail.com/
it looked like this:

	unsigned long mask;

(...)
	} else if (ocelot->bridge_fwd_mask & BIT(port)) {
		mask = ocelot->bridge_fwd_mask & ~BIT(port);

So the breakage was introduced between v7 and v8 of the patch.

Fixes: e21268efbe ("net: dsa: felix: perform switch setup for tag_8021q")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20210817160425.3702809-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2021-08-18 15:34:52 -07:00
..
Kconfig net: ocelot: replay switchdev events when joining bridge 2021-03-23 14:49:06 -07:00
Makefile net: mscc: ocelot: Add support for MRP 2021-02-16 14:47:46 -08:00
ocelot_devlink.c net: mscc: ocelot: configure watermarks using devlink-sb 2021-01-15 20:02:35 -08:00
ocelot_flower.c flow_offload: reject configuration of packet-per-second policing in offload drivers 2021-03-13 14:18:09 -08:00
ocelot_io.c net: mscc: Fix non-GPL export of regmap APIs 2021-08-12 09:44:31 +01:00
ocelot_mrp.c net: ocelot: Simplify MRP deletion 2021-03-24 12:14:08 -07:00
ocelot_net.c net: ocelot: fix switchdev objects synced for wrong netdev with LAG offload 2021-07-13 09:30:46 -07:00
ocelot_police.c net: mscc: ocelot: move net_device related functions to ocelot_net.c 2020-06-20 17:25:23 -07:00
ocelot_police.h net: mscc: ocelot: unexpose ocelot_vcap_policer_{add,del} 2020-06-20 17:25:23 -07:00
ocelot_ptp.c time64.h: Consolidated PSEC_PER_SEC definition 2021-04-06 16:32:17 -07:00
ocelot_qs.h
ocelot_rew.h
ocelot_vcap.c net: mscc: ocelot: Fix fall-through warnings for Clang 2021-03-10 12:45:15 -08:00
ocelot_vcap.h net: dsa: felix: perform switch setup for tag_8021q 2021-01-29 21:25:27 -08:00
ocelot_vsc7514.c net: dsa: tag_ocelot_8021q: add support for PTP timestamping 2021-02-14 17:31:44 -08:00
ocelot.c net: mscc: ocelot: allow forwarding from bridge ports to the tag_8021q CPU port 2021-08-18 15:34:52 -07:00
ocelot.h net: mscc: ocelot: use common tag parsing code with DSA 2021-02-14 17:31:44 -08:00