]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: microchip: implement multi-bridge support
authorOleksij Rempel <o.rempel@pengutronix.de>
Fri, 26 Nov 2021 12:39:26 +0000 (13:39 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 26 Nov 2021 20:46:38 +0000 (12:46 -0800)
commitae0f85a22d6840abf91d9450a8084f3075e968ca
treed9e1a211f02e1bd5dbb620453c42558ac4333813
parenta6e9bd8a22aaa7222450e0838164d80570762086
net: dsa: microchip: implement multi-bridge support

Current driver version is able to handle only one bridge at time.
Configuring two bridges on two different ports would end up shorting this
bridges by HW. To reproduce it:

ip l a name br0 type bridge
ip l a name br1 type bridge
ip l s dev br0 up
ip l s dev br1 up
ip l s lan1 master br0
ip l s dev lan1 up
ip l s lan2 master br1
ip l s dev lan2 up

Ping on lan1 and get response on lan2, which should not happen.

This happened, because current driver version is storing one global "Port VLAN
Membership" and applying it to all ports which are members of any
bridge.
To solve this issue, we need to handle each port separately.

This patch is dropping the global port member storage and calculating
membership dynamically depending on STP state and bridge participation.

Note: STP support was broken before this patch and should be fixed
separately.

Fixes: b3ff1b75d524 ("net: dsa: microchip: break KSZ9477 DSA driver into two files")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://lore.kernel.org/r/20211126123926.2981028-1-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz8795.c
drivers/net/dsa/microchip/ksz9477.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/ksz_common.h