Skip to content

Commit

Permalink
Merge branch 'selftests-preparations-for-out-of-order-operations-patc…
Browse files Browse the repository at this point in the history
…hes-in-mlxsw'

Petr Machata says:

====================
selftests: Preparations for out-of-order-operations patches in mlxsw

The mlxsw driver currently makes the assumption that the user applies
configuration in a bottom-up manner. Thus netdevices need to be added to
the bridge before IP addresses are configured on that bridge or SVI added
on top of it. Enslaving a netdevice to another netdevice that already has
uppers is in fact forbidden by mlxsw for this reason. Despite this safety,
it is rather easy to get into situations where the offloaded configuration
is just plain wrong.

Over the course of the following several patchsets, mlxsw code is going to
be adjusted to diminish the space of wrongly offloaded configurations.
Ideally the offload state will reflect the actual state, regardless of the
sequence of operation used to construct that state.

Several selftests build configurations that will not be offloadable in the
future on some systems. The reason is that what will get offloaded is the
actual configuration, not the configuration steps.

For example, when a port is added to a bridge that has an IP address, that
bridge will get a RIF, which it would not have with the current code. But
on Nvidia Spectrum-1 machines, MAC addresses of all RIFs need to have the
same prefix, which the bridge will violate. The RIF thus couldn't be
created, and the enslavement is therefore canceled, because it would lead
to an unoffloadable configuration. This breaks some selftests.

In this patchset, adjust selftests to avoid the configurations that mlxsw
would be incapable of offloading, while maintaining relevance with regards
to the feature that is being tested. There are generally two cases of
fixes:

- Disabling IPv6 autogen on bridges that do not participate in routing,
  either because of the abovementioned requirement to keep the same MAC
  prefix on all in-HW router interfaces, or, on 802.1ad bridges, because
  in-HW router interfaces are not supported at all.

- Setting the bridge MAC address to what it will become after the first
  member port is attached, so that the in-HW router interface is created
  with a supported MAC address.

The patchset is then split thus:

- Patches #1-#7 adjust generic selftests
- Patches #8-#16 adjust mlxsw-specific selftests
====================

Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
kuba-moo committed Jun 21, 2023
2 parents cc75549 + 664bc72 commit f31b6c6
Show file tree
Hide file tree
Showing 19 changed files with 88 additions and 25 deletions.
24 changes: 18 additions & 6 deletions tools/testing/selftests/drivers/net/mlxsw/extack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ netdev_pre_up_test()
{
RET=0

ip link add name br1 up type bridge vlan_filtering 0 mcast_snooping 0
ip link add name br1 type bridge vlan_filtering 0 mcast_snooping 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link add name vx1 up type vxlan id 1000 \
local 192.0.2.17 remote 192.0.2.18 \
dstport 4789 nolearning noudpcsum tos inherit ttl 100
Expand All @@ -46,7 +48,9 @@ netdev_pre_up_test()
ip link set dev $swp1 master br1
check_err $?

ip link add name br2 up type bridge vlan_filtering 0 mcast_snooping 0
ip link add name br2 type bridge vlan_filtering 0 mcast_snooping 0
ip link set dev br2 addrgenmode none
ip link set dev br2 up
ip link add name vx2 up type vxlan id 2000 \
local 192.0.2.17 remote 192.0.2.18 \
dstport 4789 nolearning noudpcsum tos inherit ttl 100
Expand Down Expand Up @@ -81,7 +85,9 @@ vxlan_vlan_add_test()
{
RET=0

ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0
ip link add name br1 type bridge vlan_filtering 1 mcast_snooping 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up

# Unsupported configuration: mlxsw demands VXLAN with "noudpcsum".
ip link add name vx1 up type vxlan id 1000 \
Expand Down Expand Up @@ -117,7 +123,9 @@ vxlan_bridge_create_test()
dstport 4789 tos inherit ttl 100

# Test with VLAN-aware bridge.
ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0
ip link add name br1 type bridge vlan_filtering 1 mcast_snooping 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up

ip link set dev vx1 master br1

Expand All @@ -142,8 +150,12 @@ bridge_create_test()
{
RET=0

ip link add name br1 up type bridge vlan_filtering 1
ip link add name br2 up type bridge vlan_filtering 1
ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link add name br2 type bridge vlan_filtering 1
ip link set dev br2 addrgenmode none
ip link set dev br2 up

ip link set dev $swp1 master br1
check_err $?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ mirror_gre_setup_prepare()
simple_if_init $h3

ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up

ip link set dev $swp1 master br1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ h2_destroy()

switch_create()
{
ip link add name br0 type bridge mcast_snooping 0
ip link add name br0 address $(mac_get $swp1) \
type bridge mcast_snooping 0
ip link set dev br0 up

ip link set dev $swp1 master br0
Expand Down
8 changes: 8 additions & 0 deletions tools/testing/selftests/drivers/net/mlxsw/q_in_q_veto.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ create_vlan_upper_on_top_of_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol $bridge_proto vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none

ip link set dev br0 up
ip link set dev $swp1 master br0
Expand Down Expand Up @@ -88,6 +89,7 @@ create_8021ad_vlan_upper_on_top_bridge_port()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none

ip link set dev $swp1 master br0
ip link set dev br0 up
Expand Down Expand Up @@ -155,6 +157,7 @@ create_vlan_upper_on_top_front_panel_enslaved_to_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link set dev $swp1 master br0
Expand All @@ -177,6 +180,7 @@ create_vlan_upper_on_top_lag_enslaved_to_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link add name bond1 type bond mode 802.3ad
Expand All @@ -203,6 +207,7 @@ enslave_front_panel_with_vlan_upper_to_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link add name $swp1.100 link $swp1 type vlan id 100
Expand All @@ -225,6 +230,7 @@ enslave_lag_with_vlan_upper_to_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link add name bond1 type bond mode 802.3ad
Expand Down Expand Up @@ -252,6 +258,7 @@ add_ip_address_to_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none

ip link set dev br0 up
ip link set dev $swp1 master br0
Expand All @@ -273,6 +280,7 @@ switch_bridge_protocol_from_8021q_to_8021ad()

ip link add dev br0 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none

ip link set dev br0 up
ip link set dev $swp1 master br0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ h2_destroy()
switch_create()
{
ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link set dev $swp1 master br1
ip link set dev $swp1 up
Expand Down
8 changes: 6 additions & 2 deletions tools/testing/selftests/drivers/net/mlxsw/qos_ets_strict.sh
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,15 @@ switch_create()
vlan_create $swp3 111
vlan_create $swp3 222

ip link add name br111 up type bridge vlan_filtering 0
ip link add name br111 type bridge vlan_filtering 0
ip link set dev br111 addrgenmode none
ip link set dev br111 up
ip link set dev $swp1.111 master br111
ip link set dev $swp3.111 master br111

ip link add name br222 up type bridge vlan_filtering 0
ip link add name br222 type bridge vlan_filtering 0
ip link set dev br222 addrgenmode none
ip link set dev br222 up
ip link set dev $swp2.222 master br222
ip link set dev $swp3.222 master br222

Expand Down
2 changes: 2 additions & 0 deletions tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,13 @@ switch_create()
prio bands 8 priomap 7 7 7 7 7 7 7 7

ip link add name br1 type bridge vlan_filtering 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link set dev $swp1 master br1
ip link set dev $swp3 master br1

ip link add name br111 type bridge vlan_filtering 0
ip link set dev br111 addrgenmode none
ip link set dev br111 up
ip link set dev $swp2.111 master br111
ip link set dev $swp3.111 master br111
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ create_vxlan_on_top_of_8021ad_bridge()

ip link add dev br0 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
vlan_default_pvid 0 mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link add name vx100 type vxlan id 1000 local 192.0.2.17 dstport \
Expand Down
41 changes: 31 additions & 10 deletions tools/testing/selftests/drivers/net/mlxsw/vxlan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -444,8 +444,12 @@ offload_indication_setup_create()
{
# Create a simple setup with two bridges, each with a VxLAN device
# and one local port
ip link add name br0 up type bridge mcast_snooping 0
ip link add name br1 up type bridge mcast_snooping 0
ip link add name br0 type bridge mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name br1 type bridge mcast_snooping 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up

ip link set dev $swp1 master br0
ip link set dev $swp2 master br1
Expand Down Expand Up @@ -646,8 +650,12 @@ offload_indication_decap_route_test()

RET=0

ip link add name br0 up type bridge mcast_snooping 0
ip link add name br1 up type bridge mcast_snooping 0
ip link add name br0 type bridge mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name br1 type bridge mcast_snooping 0
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link set dev $swp1 master br0
ip link set dev $swp2 master br1
ip link set dev vxlan0 master br0
Expand Down Expand Up @@ -780,7 +788,9 @@ __offload_indication_join_vxlan_first()

offload_indication_join_vxlan_first()
{
ip link add dev br0 up type bridge mcast_snooping 0
ip link add dev br0 type bridge mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789

Expand Down Expand Up @@ -815,7 +825,9 @@ __offload_indication_join_vxlan_last()

offload_indication_join_vxlan_last()
{
ip link add dev br0 up type bridge mcast_snooping 0
ip link add dev br0 type bridge mcast_snooping 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789

Expand All @@ -842,6 +854,7 @@ sanitization_vlan_aware_test()
RET=0

ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
ip link set dev br0 addrgenmode none

ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
Expand Down Expand Up @@ -915,8 +928,10 @@ offload_indication_vlan_aware_setup_create()
{
# Create a simple setup with two VxLAN devices and a single VLAN-aware
# bridge
ip link add name br0 up type bridge mcast_snooping 0 vlan_filtering 1 \
ip link add name br0 type bridge mcast_snooping 0 vlan_filtering 1 \
vlan_default_pvid 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up

ip link set dev $swp1 master br0

Expand Down Expand Up @@ -1060,8 +1075,10 @@ offload_indication_vlan_aware_decap_route_test()

offload_indication_vlan_aware_join_vxlan_first()
{
ip link add dev br0 up type bridge mcast_snooping 0 \
ip link add dev br0 type bridge mcast_snooping 0 \
vlan_filtering 1 vlan_default_pvid 1
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789

Expand All @@ -1073,8 +1090,10 @@ offload_indication_vlan_aware_join_vxlan_first()

offload_indication_vlan_aware_join_vxlan_last()
{
ip link add dev br0 up type bridge mcast_snooping 0 \
ip link add dev br0 type bridge mcast_snooping 0 \
vlan_filtering 1 vlan_default_pvid 1
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789

Expand All @@ -1091,8 +1110,10 @@ offload_indication_vlan_aware_l3vni_test()
RET=0

sysctl_set net.ipv6.conf.default.disable_ipv6 1
ip link add dev br0 up type bridge mcast_snooping 0 \
ip link add dev br0 type bridge mcast_snooping 0 \
vlan_filtering 1 vlan_default_pvid 0
ip link set dev br0 addrgenmode none
ip link set dev br0 up
ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ switch_create()
#### BR1 ####
ip link add name br1 type bridge vlan_filtering 1 \
vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
ip link set dev br1 addrgenmode none
# Make sure the bridge uses the MAC address of the local port and not
# that of the VxLAN's device.
ip link set dev br1 address $(mac_get $swp1)
Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/net/forwarding/mirror_gre_bound.sh
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ switch_create()
# Bridge between H1 and H2.

ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up

ip link set dev $swp1 master br1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ setup_prepare()
vrf_prepare
mirror_gre_topo_create

ip link add name br2 type bridge vlan_filtering 0
ip link add name br2 address $(mac_get $swp3) \
type bridge vlan_filtering 0
ip link set dev br2 up

ip link set dev $swp3 master br2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ setup_prepare()
vrf_prepare
mirror_gre_topo_create

ip link add name br2 type bridge vlan_filtering 0
ip link add name br2 address $(mac_get $swp3) \
type bridge vlan_filtering 0
ip link set dev br2 up

vlan_create $swp3 555
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ switch_create()
ip link set dev $swp3 up
ip link set dev $swp4 up

ip link add name br1 type bridge vlan_filtering 1
ip link add name br1 address $(mac_get $swp3) \
type bridge vlan_filtering 1

team_create lag loadbalance $swp3 $swp4
ip link set dev lag master br1
Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/net/forwarding/mirror_topo_lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ mirror_topo_switch_create()
ip link set dev $swp3 up

ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up

ip link set dev $swp1 master br1
Expand Down
4 changes: 3 additions & 1 deletion tools/testing/selftests/net/forwarding/pedit_dsfield.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ h2_destroy()

switch_create()
{
ip link add name br1 up type bridge vlan_filtering 1
ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link set dev $swp1 master br1
ip link set dev $swp1 up
ip link set dev $swp2 master br1
Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/net/forwarding/q_in_vni.sh
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ switch_create()
{
ip link add name br1 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
vlan_default_pvid 0 mcast_snooping 0
ip link set dev br1 addrgenmode none
# Make sure the bridge uses the MAC address of the local port and not
# that of the VxLAN's device.
ip link set dev br1 address $(mac_get $swp1)
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/net/forwarding/router_bridge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ h2_destroy()

router_create()
{
ip link add name br1 type bridge vlan_filtering 1
ip link add name br1 address $(mac_get $swp1) \
type bridge vlan_filtering 1
ip link set dev br1 up

ip link set dev $swp1 master br1
Expand Down
4 changes: 3 additions & 1 deletion tools/testing/selftests/net/forwarding/skbedit_priority.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ h2_destroy()

switch_create()
{
ip link add name br1 up type bridge vlan_filtering 1
ip link add name br1 type bridge vlan_filtering 1
ip link set dev br1 addrgenmode none
ip link set dev br1 up
ip link set dev $swp1 master br1
ip link set dev $swp1 up
ip link set dev $swp2 master br1
Expand Down

0 comments on commit f31b6c6

Please sign in to comment.