In recent months we fixed several bugs in the driver that could have been avoided by re-evaluating some of the involved code paths and by introducing relevant and comprehensive test cases.
This patchset tries to do that by introducing a set of small and mostly non-functional changes in addition to a new test. I have further improvements in mind, but they can be done in a different set. Patch #1 makes sure we correctly sanitize upper devices of a VLAN interface. Patch #2 removes an unexpected behavior from the driver, in which routes configured on a VLAN interface will cease being offloaded after certain operations. Patch #3 is a small cleanup. Patch #4 simplifies the driver by removing reference counting from VLAN entries configured on a port. Patches #5-#6 simplify linking/unlinking from a bridge, especially when LAG and VLAN devices are involved. They make both operations symmetric even when ports are unlinked from a bridged LAG device. Patch #7-#9 make router interface (RIF) deletion more robust by removing reliance on device chain to indicate whether a NETDEV_DOWN event in the inet{,6}addr notification chains should be processed. This is due to the fact that IP addresses can be flushed from a netdev after it was unlinked from its lower device. Patch #10 adds a new test to for valid and invalid configurations over mlxsw ports. Some of the test cases are derived from recent fixes. I expect that more test cases will be added over time. Ido Schimmel (10): mlxsw: spectrum: Sanitize VLAN interface's uppers mlxsw: spectrum_router: Do not destroy RIFs based on FID's reference count mlxsw: spectrum_fid: Remove unused function mlxsw: spectrum: Handle VLAN device unlinking mlxsw: spectrum: Remove reference count from VLAN entries mlxsw: spectrum: Properly cleanup LAG uppers when removing port from LAG mlxsw: spectrum_router: Propagate 'struct mlxsw_sp' further mlxsw: spectrum_router: Make RIF deletion more robust mlxsw: spectrum_router: Hold a reference on RIF's netdev selftests: mlxsw: Add rtnetlink tests .../net/ethernet/mellanox/mlxsw/spectrum.c | 150 ++++--- .../net/ethernet/mellanox/mlxsw/spectrum.h | 12 +- .../ethernet/mellanox/mlxsw/spectrum_fid.c | 34 +- .../ethernet/mellanox/mlxsw/spectrum_router.c | 166 +++++--- .../mellanox/mlxsw/spectrum_switchdev.c | 68 ++- .../selftests/drivers/net/mlxsw/rtnetlink.sh | 392 ++++++++++++++++++ 6 files changed, 639 insertions(+), 183 deletions(-) -- 2.20.0