1555afaaeSPetr Machata#!/bin/bash 2555afaaeSPetr Machata# SPDX-License-Identifier: GPL-2.0 3555afaaeSPetr Machata# 4555afaaeSPetr Machata# Test various interface configuration scenarios. Observe that configurations 5555afaaeSPetr Machata# deemed valid by mlxsw succeed, invalid configurations fail and that no traces 6555afaaeSPetr Machata# are produced. To prevent the test from passing in case traces are produced, 7555afaaeSPetr Machata# the user can set the 'kernel.panic_on_warn' and 'kernel.panic_on_oops' 8555afaaeSPetr Machata# sysctls in its environment. 9555afaaeSPetr Machata 10555afaaeSPetr Machatalib_dir=$(dirname $0)/../../../net/forwarding 11555afaaeSPetr Machata 12555afaaeSPetr MachataALL_TESTS=" 137052e243SIdo Schimmel rif_vrf_set_addr_test 149651ee10SPetr Machata rif_non_inherit_bridge_addr_test 15489c25f9SIdo Schimmel vlan_interface_deletion_test 16489c25f9SIdo Schimmel bridge_deletion_test 17489c25f9SIdo Schimmel bridge_vlan_flags_test 18489c25f9SIdo Schimmel vlan_1_test 19489c25f9SIdo Schimmel duplicate_vlans_test 20489c25f9SIdo Schimmel vlan_rif_refcount_test 21489c25f9SIdo Schimmel subport_rif_refcount_test 2223fb5552SIdo Schimmel subport_rif_lag_join_test 23489c25f9SIdo Schimmel vlan_dev_deletion_test 24489c25f9SIdo Schimmel lag_unlink_slaves_test 25489c25f9SIdo Schimmel lag_dev_deletion_test 26489c25f9SIdo Schimmel vlan_interface_uppers_test 2772159272SIdo Schimmel bridge_extern_learn_test 283321cff3SIdo Schimmel neigh_offload_test 2945a69b70SIdo Schimmel nexthop_offload_test 3020ac8f86SIdo Schimmel nexthop_obj_invalid_test 3120ac8f86SIdo Schimmel nexthop_obj_offload_test 3220ac8f86SIdo Schimmel nexthop_obj_group_offload_test 33ffd3e9b0SIdo Schimmel nexthop_obj_bucket_offload_test 3424eb2a02SIdo Schimmel nexthop_obj_blackhole_offload_test 3520ac8f86SIdo Schimmel nexthop_obj_route_offload_test 36*cdbde7edSIdo Schimmel bridge_locked_port_test 37489c25f9SIdo Schimmel devlink_reload_test 38555afaaeSPetr Machata" 39555afaaeSPetr MachataNUM_NETIFS=2 401cbe65e0SDanielle Ratson: ${TIMEOUT:=20000} # ms 41555afaaeSPetr Machatasource $lib_dir/lib.sh 42489c25f9SIdo Schimmelsource $lib_dir/devlink_lib.sh 43555afaaeSPetr Machata 44555afaaeSPetr Machatasetup_prepare() 45555afaaeSPetr Machata{ 46555afaaeSPetr Machata swp1=${NETIFS[p1]} 47555afaaeSPetr Machata swp2=${NETIFS[p2]} 48555afaaeSPetr Machata 49555afaaeSPetr Machata ip link set dev $swp1 up 50555afaaeSPetr Machata ip link set dev $swp2 up 51555afaaeSPetr Machata} 52555afaaeSPetr Machata 53555afaaeSPetr Machatacleanup() 54555afaaeSPetr Machata{ 55555afaaeSPetr Machata pre_cleanup 56555afaaeSPetr Machata 57555afaaeSPetr Machata ip link set dev $swp2 down 58555afaaeSPetr Machata ip link set dev $swp1 down 59555afaaeSPetr Machata} 60555afaaeSPetr Machata 617052e243SIdo Schimmelrif_vrf_set_addr_test() 627052e243SIdo Schimmel{ 637052e243SIdo Schimmel # Test that it is possible to set an IP address on a VRF upper despite 647052e243SIdo Schimmel # its random MAC address. 657052e243SIdo Schimmel RET=0 667052e243SIdo Schimmel 677052e243SIdo Schimmel ip link add name vrf-test type vrf table 10 687052e243SIdo Schimmel ip link set dev $swp1 master vrf-test 697052e243SIdo Schimmel 707052e243SIdo Schimmel ip -4 address add 192.0.2.1/24 dev vrf-test 717052e243SIdo Schimmel check_err $? "failed to set IPv4 address on VRF" 727052e243SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev vrf-test 737052e243SIdo Schimmel check_err $? "failed to set IPv6 address on VRF" 747052e243SIdo Schimmel 757052e243SIdo Schimmel log_test "RIF - setting IP address on VRF" 767052e243SIdo Schimmel 777052e243SIdo Schimmel ip link del dev vrf-test 787052e243SIdo Schimmel} 797052e243SIdo Schimmel 809651ee10SPetr Machatarif_non_inherit_bridge_addr_test() 819651ee10SPetr Machata{ 829651ee10SPetr Machata local swp2_mac=$(mac_get $swp2) 839651ee10SPetr Machata 849651ee10SPetr Machata RET=0 859651ee10SPetr Machata 869651ee10SPetr Machata # Create first RIF 879651ee10SPetr Machata ip addr add dev $swp1 192.0.2.1/28 889651ee10SPetr Machata check_err $? 899651ee10SPetr Machata 909651ee10SPetr Machata # Create a FID RIF 919651ee10SPetr Machata ip link add name br1 up type bridge vlan_filtering 0 929651ee10SPetr Machata ip link set dev br1 addr $swp2_mac 939651ee10SPetr Machata ip link set dev $swp2 master br1 949651ee10SPetr Machata ip addr add dev br1 192.0.2.17/28 959651ee10SPetr Machata check_err $? 969651ee10SPetr Machata 979651ee10SPetr Machata # Prepare a device with a low MAC address 989651ee10SPetr Machata ip link add name d up type dummy 999651ee10SPetr Machata ip link set dev d addr 00:11:22:33:44:55 1009651ee10SPetr Machata 1019651ee10SPetr Machata # Attach the device to br1. Since the bridge address was set, it should 1029651ee10SPetr Machata # work. 1039651ee10SPetr Machata ip link set dev d master br1 &>/dev/null 1049651ee10SPetr Machata check_err $? "Could not attach a device with low MAC to a bridge with RIF" 1059651ee10SPetr Machata 1069651ee10SPetr Machata # Port MAC address change should be allowed for a bridge with set MAC. 1079651ee10SPetr Machata ip link set dev $swp2 addr 00:11:22:33:44:55 1089651ee10SPetr Machata check_err $? "Changing swp2's MAC address not permitted" 1099651ee10SPetr Machata 1109651ee10SPetr Machata log_test "RIF - attach port with bad MAC to bridge with set MAC" 1119651ee10SPetr Machata 1129651ee10SPetr Machata ip link set dev $swp2 addr $swp2_mac 1139651ee10SPetr Machata ip link del dev d 1149651ee10SPetr Machata ip link del dev br1 1159651ee10SPetr Machata ip addr del dev $swp1 192.0.2.1/28 1169651ee10SPetr Machata} 1179651ee10SPetr Machata 118489c25f9SIdo Schimmelvlan_interface_deletion_test() 119489c25f9SIdo Schimmel{ 120489c25f9SIdo Schimmel # Test that when a VLAN interface is deleted, its associated router 121489c25f9SIdo Schimmel # interface (RIF) is correctly deleted and not leaked. See commit 122489c25f9SIdo Schimmel # c360867ec46a ("mlxsw: spectrum: Delete RIF when VLAN device is 123489c25f9SIdo Schimmel # removed") for more details 124489c25f9SIdo Schimmel RET=0 125489c25f9SIdo Schimmel 126489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 127489c25f9SIdo Schimmel ip link set dev $swp1 master br0 128489c25f9SIdo Schimmel 129489c25f9SIdo Schimmel ip link add link br0 name br0.10 type vlan id 10 130489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev br0.10 131489c25f9SIdo Schimmel ip link del dev br0.10 132489c25f9SIdo Schimmel 133489c25f9SIdo Schimmel # If we leaked the previous RIF, then this should produce a trace 134489c25f9SIdo Schimmel ip link add link br0 name br0.20 type vlan id 20 135489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev br0.20 136489c25f9SIdo Schimmel ip link del dev br0.20 137489c25f9SIdo Schimmel 138489c25f9SIdo Schimmel log_test "vlan interface deletion" 139489c25f9SIdo Schimmel 140489c25f9SIdo Schimmel ip link del dev br0 141489c25f9SIdo Schimmel} 142489c25f9SIdo Schimmel 143489c25f9SIdo Schimmelbridge_deletion_test() 144489c25f9SIdo Schimmel{ 145489c25f9SIdo Schimmel # Test that when a bridge with VLAN interfaces is deleted, we correctly 146489c25f9SIdo Schimmel # delete the associated RIFs. See commit 602b74eda813 ("mlxsw: 147489c25f9SIdo Schimmel # spectrum_switchdev: Do not leak RIFs when removing bridge") for more 148489c25f9SIdo Schimmel # details 149489c25f9SIdo Schimmel RET=0 150489c25f9SIdo Schimmel 151489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 152489c25f9SIdo Schimmel ip link set dev $swp1 master br0 153489c25f9SIdo Schimmel ip -6 address add 2001:db8::1/64 dev br0 154489c25f9SIdo Schimmel 155489c25f9SIdo Schimmel ip link add link br0 name br0.10 type vlan id 10 156489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev br0.10 157489c25f9SIdo Schimmel 158489c25f9SIdo Schimmel ip link add link br0 name br0.20 type vlan id 20 159489c25f9SIdo Schimmel ip -6 address add 2001:db8:2::1/64 dev br0.20 160489c25f9SIdo Schimmel 161489c25f9SIdo Schimmel ip link del dev br0 162489c25f9SIdo Schimmel 163489c25f9SIdo Schimmel # If we leaked previous RIFs, then this should produce a trace 164489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev $swp1 165489c25f9SIdo Schimmel ip -6 address del 2001:db8:1::1/64 dev $swp1 166489c25f9SIdo Schimmel 167489c25f9SIdo Schimmel log_test "bridge deletion" 168489c25f9SIdo Schimmel} 169489c25f9SIdo Schimmel 170489c25f9SIdo Schimmelbridge_vlan_flags_test() 171489c25f9SIdo Schimmel{ 172489c25f9SIdo Schimmel # Test that when bridge VLAN flags are toggled, we do not take 173489c25f9SIdo Schimmel # unnecessary references on related structs. See commit 9e25826ffc94 174489c25f9SIdo Schimmel # ("mlxsw: spectrum_switchdev: Fix port_vlan refcounting") for more 175489c25f9SIdo Schimmel # details 176489c25f9SIdo Schimmel RET=0 177489c25f9SIdo Schimmel 178489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 179489c25f9SIdo Schimmel ip link set dev $swp1 master br0 180489c25f9SIdo Schimmel 181489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 pvid untagged 182489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 untagged 183489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 pvid 184489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 185489c25f9SIdo Schimmel ip link del dev br0 186489c25f9SIdo Schimmel 187489c25f9SIdo Schimmel # If we did not handle references correctly, then this should produce a 188489c25f9SIdo Schimmel # trace 189489c25f9SIdo Schimmel devlink dev reload "$DEVLINK_DEV" 190489c25f9SIdo Schimmel 191489c25f9SIdo Schimmel # Allow netdevices to be re-created following the reload 192489c25f9SIdo Schimmel sleep 20 193489c25f9SIdo Schimmel 194489c25f9SIdo Schimmel log_test "bridge vlan flags" 195489c25f9SIdo Schimmel} 196489c25f9SIdo Schimmel 197489c25f9SIdo Schimmelvlan_1_test() 198489c25f9SIdo Schimmel{ 19929b1e34eSIdo Schimmel # Test that VLAN 1 can be configured over mlxsw ports. In the past it 20029b1e34eSIdo Schimmel # was used internally for untagged traffic. See commit 47bf9df2e820 20129b1e34eSIdo Schimmel # ("mlxsw: spectrum: Forbid creation of VLAN 1 over port/LAG") for more 20229b1e34eSIdo Schimmel # details 203489c25f9SIdo Schimmel RET=0 204489c25f9SIdo Schimmel 20529b1e34eSIdo Schimmel ip link add link $swp1 name $swp1.1 type vlan id 1 20629b1e34eSIdo Schimmel check_err $? "did not manage to create vlan 1 when should" 207489c25f9SIdo Schimmel 208489c25f9SIdo Schimmel log_test "vlan 1" 20929b1e34eSIdo Schimmel 21029b1e34eSIdo Schimmel ip link del dev $swp1.1 211489c25f9SIdo Schimmel} 212489c25f9SIdo Schimmel 213489c25f9SIdo Schimmelduplicate_vlans_test() 214489c25f9SIdo Schimmel{ 215489c25f9SIdo Schimmel # Test that on a given port a VLAN is only used once. Either as VLAN 216489c25f9SIdo Schimmel # in a VLAN-aware bridge or as a VLAN device 217489c25f9SIdo Schimmel RET=0 218489c25f9SIdo Schimmel 219489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 220489c25f9SIdo Schimmel ip link set dev $swp1 master br0 221489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 222489c25f9SIdo Schimmel 223489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 &> /dev/null 224489c25f9SIdo Schimmel check_fail $? "managed to create vlan device when should not" 225489c25f9SIdo Schimmel 226489c25f9SIdo Schimmel bridge vlan del vid 10 dev $swp1 227489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 228489c25f9SIdo Schimmel check_err $? "did not manage to create vlan device when should" 229489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 &> /dev/null 230489c25f9SIdo Schimmel check_fail $? "managed to add bridge vlan when should not" 231489c25f9SIdo Schimmel 232489c25f9SIdo Schimmel log_test "duplicate vlans" 233489c25f9SIdo Schimmel 234489c25f9SIdo Schimmel ip link del dev $swp1.10 235489c25f9SIdo Schimmel ip link del dev br0 236489c25f9SIdo Schimmel} 237489c25f9SIdo Schimmel 238489c25f9SIdo Schimmelvlan_rif_refcount_test() 239489c25f9SIdo Schimmel{ 240489c25f9SIdo Schimmel # Test that RIFs representing VLAN interfaces are not affected from 241489c25f9SIdo Schimmel # ports member in the VLAN. We use the offload indication on routes 242489c25f9SIdo Schimmel # configured on the RIF to understand if it was created / destroyed 243489c25f9SIdo Schimmel RET=0 244489c25f9SIdo Schimmel 245489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 246489c25f9SIdo Schimmel ip link set dev $swp1 master br0 247489c25f9SIdo Schimmel 248489c25f9SIdo Schimmel ip link set dev $swp1 up 249489c25f9SIdo Schimmel ip link set dev br0 up 250489c25f9SIdo Schimmel 251489c25f9SIdo Schimmel ip link add link br0 name br0.10 up type vlan id 10 252489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev br0.10 253489c25f9SIdo Schimmel 2541cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 2551cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev br0.10 256489c25f9SIdo Schimmel check_err $? "vlan rif was not created before adding port to vlan" 257489c25f9SIdo Schimmel 258489c25f9SIdo Schimmel bridge vlan add vid 10 dev $swp1 2591cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 2601cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev br0.10 261489c25f9SIdo Schimmel check_err $? "vlan rif was destroyed after adding port to vlan" 262489c25f9SIdo Schimmel 263489c25f9SIdo Schimmel bridge vlan del vid 10 dev $swp1 2641cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 2651cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev br0.10 266489c25f9SIdo Schimmel check_err $? "vlan rif was destroyed after removing port from vlan" 267489c25f9SIdo Schimmel 268489c25f9SIdo Schimmel ip link set dev $swp1 nomaster 2691cbe65e0SDanielle Ratson busywait "$TIMEOUT" not wait_for_offload \ 2701cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev br0.10 2711cbe65e0SDanielle Ratson check_err $? "vlan rif was not destroyed after unlinking port from bridge" 272489c25f9SIdo Schimmel 273489c25f9SIdo Schimmel log_test "vlan rif refcount" 274489c25f9SIdo Schimmel 275489c25f9SIdo Schimmel ip link del dev br0.10 276489c25f9SIdo Schimmel ip link set dev $swp1 down 277489c25f9SIdo Schimmel ip link del dev br0 278489c25f9SIdo Schimmel} 279489c25f9SIdo Schimmel 280489c25f9SIdo Schimmelsubport_rif_refcount_test() 281489c25f9SIdo Schimmel{ 282489c25f9SIdo Schimmel # Test that RIFs representing upper devices of physical ports are 283489c25f9SIdo Schimmel # reference counted correctly and destroyed when should. We use the 284489c25f9SIdo Schimmel # offload indication on routes configured on the RIF to understand if 285489c25f9SIdo Schimmel # it was created / destroyed 286489c25f9SIdo Schimmel RET=0 287489c25f9SIdo Schimmel 288489c25f9SIdo Schimmel ip link add name bond1 type bond mode 802.3ad 289489c25f9SIdo Schimmel ip link set dev $swp1 down 290489c25f9SIdo Schimmel ip link set dev $swp2 down 291489c25f9SIdo Schimmel ip link set dev $swp1 master bond1 292489c25f9SIdo Schimmel ip link set dev $swp2 master bond1 293489c25f9SIdo Schimmel 294489c25f9SIdo Schimmel ip link set dev bond1 up 295489c25f9SIdo Schimmel ip link add link bond1 name bond1.10 up type vlan id 10 296489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev bond1 297489c25f9SIdo Schimmel ip -6 address add 2001:db8:2::1/64 dev bond1.10 298489c25f9SIdo Schimmel 2991cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 3001cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev bond1 301489c25f9SIdo Schimmel check_err $? "subport rif was not created on lag device" 3021cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 3031cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10 304489c25f9SIdo Schimmel check_err $? "subport rif was not created on vlan device" 305489c25f9SIdo Schimmel 306489c25f9SIdo Schimmel ip link set dev $swp1 nomaster 3071cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 3081cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev bond1 309489c25f9SIdo Schimmel check_err $? "subport rif of lag device was destroyed when should not" 3101cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 3111cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10 312489c25f9SIdo Schimmel check_err $? "subport rif of vlan device was destroyed when should not" 313489c25f9SIdo Schimmel 314489c25f9SIdo Schimmel ip link set dev $swp2 nomaster 3151cbe65e0SDanielle Ratson busywait "$TIMEOUT" not wait_for_offload \ 3161cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:1::2 dev bond1 3171cbe65e0SDanielle Ratson check_err $? "subport rif of lag device was not destroyed when should" 3181cbe65e0SDanielle Ratson busywait "$TIMEOUT" not wait_for_offload \ 3191cbe65e0SDanielle Ratson ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10 3201cbe65e0SDanielle Ratson check_err $? "subport rif of vlan device was not destroyed when should" 321489c25f9SIdo Schimmel 322489c25f9SIdo Schimmel log_test "subport rif refcount" 323489c25f9SIdo Schimmel 324489c25f9SIdo Schimmel ip link del dev bond1.10 325489c25f9SIdo Schimmel ip link del dev bond1 326489c25f9SIdo Schimmel} 327489c25f9SIdo Schimmel 32823fb5552SIdo Schimmelsubport_rif_lag_join_test() 32923fb5552SIdo Schimmel{ 33023fb5552SIdo Schimmel # Test that the reference count of a RIF configured for a LAG is 33123fb5552SIdo Schimmel # incremented / decremented when ports join / leave the LAG. We use the 33223fb5552SIdo Schimmel # offload indication on routes configured on the RIF to understand if 33323fb5552SIdo Schimmel # it was created / destroyed 33423fb5552SIdo Schimmel RET=0 33523fb5552SIdo Schimmel 33623fb5552SIdo Schimmel ip link add name bond1 type bond mode 802.3ad 33723fb5552SIdo Schimmel ip link set dev $swp1 down 33823fb5552SIdo Schimmel ip link set dev $swp2 down 33923fb5552SIdo Schimmel ip link set dev $swp1 master bond1 34023fb5552SIdo Schimmel ip link set dev $swp2 master bond1 34123fb5552SIdo Schimmel 34223fb5552SIdo Schimmel ip link set dev bond1 up 34323fb5552SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev bond1 34423fb5552SIdo Schimmel 34523fb5552SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 34623fb5552SIdo Schimmel ip -6 route get fibmatch 2001:db8:1::2 dev bond1 34723fb5552SIdo Schimmel check_err $? "subport rif was not created on lag device" 34823fb5552SIdo Schimmel 34923fb5552SIdo Schimmel ip link set dev $swp1 nomaster 35023fb5552SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 35123fb5552SIdo Schimmel ip -6 route get fibmatch 2001:db8:1::2 dev bond1 35223fb5552SIdo Schimmel check_err $? "subport rif of lag device was destroyed after removing one port" 35323fb5552SIdo Schimmel 35423fb5552SIdo Schimmel ip link set dev $swp1 master bond1 35523fb5552SIdo Schimmel ip link set dev $swp2 nomaster 35623fb5552SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 35723fb5552SIdo Schimmel ip -6 route get fibmatch 2001:db8:1::2 dev bond1 35823fb5552SIdo Schimmel check_err $? "subport rif of lag device was destroyed after re-adding a port and removing another" 35923fb5552SIdo Schimmel 36023fb5552SIdo Schimmel ip link set dev $swp1 nomaster 36123fb5552SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 36223fb5552SIdo Schimmel ip -6 route get fibmatch 2001:db8:1::2 dev bond1 36323fb5552SIdo Schimmel check_err $? "subport rif of lag device was not destroyed when should" 36423fb5552SIdo Schimmel 36523fb5552SIdo Schimmel log_test "subport rif lag join" 36623fb5552SIdo Schimmel 36723fb5552SIdo Schimmel ip link del dev bond1 36823fb5552SIdo Schimmel} 36923fb5552SIdo Schimmel 370489c25f9SIdo Schimmelvlan_dev_deletion_test() 371489c25f9SIdo Schimmel{ 372489c25f9SIdo Schimmel # Test that VLAN devices are correctly deleted / unlinked when enslaved 373489c25f9SIdo Schimmel # to bridge 374489c25f9SIdo Schimmel RET=0 375489c25f9SIdo Schimmel 376489c25f9SIdo Schimmel ip link add name br10 type bridge 377489c25f9SIdo Schimmel ip link add name br20 type bridge 378489c25f9SIdo Schimmel ip link add name br30 type bridge 379489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 380489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.20 type vlan id 20 381489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.30 type vlan id 30 382489c25f9SIdo Schimmel ip link set dev $swp1.10 master br10 383489c25f9SIdo Schimmel ip link set dev $swp1.20 master br20 384489c25f9SIdo Schimmel ip link set dev $swp1.30 master br30 385489c25f9SIdo Schimmel 386489c25f9SIdo Schimmel # If we did not handle the situation correctly, then these operations 387489c25f9SIdo Schimmel # might produce a trace 388489c25f9SIdo Schimmel ip link set dev $swp1.30 nomaster 389489c25f9SIdo Schimmel ip link del dev $swp1.20 390489c25f9SIdo Schimmel # Deletion via ioctl uses different code paths from netlink 391489c25f9SIdo Schimmel vconfig rem $swp1.10 &> /dev/null 392489c25f9SIdo Schimmel 393489c25f9SIdo Schimmel log_test "vlan device deletion" 394489c25f9SIdo Schimmel 395489c25f9SIdo Schimmel ip link del dev $swp1.30 396489c25f9SIdo Schimmel ip link del dev br30 397489c25f9SIdo Schimmel ip link del dev br20 398489c25f9SIdo Schimmel ip link del dev br10 399489c25f9SIdo Schimmel} 400489c25f9SIdo Schimmel 401489c25f9SIdo Schimmellag_create() 402489c25f9SIdo Schimmel{ 403489c25f9SIdo Schimmel ip link add name bond1 type bond mode 802.3ad 404489c25f9SIdo Schimmel ip link set dev $swp1 down 405489c25f9SIdo Schimmel ip link set dev $swp2 down 406489c25f9SIdo Schimmel ip link set dev $swp1 master bond1 407489c25f9SIdo Schimmel ip link set dev $swp2 master bond1 408489c25f9SIdo Schimmel 409489c25f9SIdo Schimmel ip link add link bond1 name bond1.10 type vlan id 10 410489c25f9SIdo Schimmel ip link add link bond1 name bond1.20 type vlan id 20 411489c25f9SIdo Schimmel 412489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 413489c25f9SIdo Schimmel ip link set dev bond1 master br0 414489c25f9SIdo Schimmel 415489c25f9SIdo Schimmel ip link add name br10 type bridge 416489c25f9SIdo Schimmel ip link set dev bond1.10 master br10 417489c25f9SIdo Schimmel 418489c25f9SIdo Schimmel ip link add name br20 type bridge 419489c25f9SIdo Schimmel ip link set dev bond1.20 master br20 420489c25f9SIdo Schimmel} 421489c25f9SIdo Schimmel 422489c25f9SIdo Schimmellag_unlink_slaves_test() 423489c25f9SIdo Schimmel{ 424489c25f9SIdo Schimmel # Test that ports are correctly unlinked from their LAG master, when 425489c25f9SIdo Schimmel # the LAG and its VLAN uppers are enslaved to bridges 426489c25f9SIdo Schimmel RET=0 427489c25f9SIdo Schimmel 428489c25f9SIdo Schimmel lag_create 429489c25f9SIdo Schimmel 430489c25f9SIdo Schimmel ip link set dev $swp1 nomaster 431489c25f9SIdo Schimmel check_err $? "lag slave $swp1 was not unlinked from master" 432489c25f9SIdo Schimmel ip link set dev $swp2 nomaster 433489c25f9SIdo Schimmel check_err $? "lag slave $swp2 was not unlinked from master" 434489c25f9SIdo Schimmel 435489c25f9SIdo Schimmel # Try to configure corresponding VLANs as router interfaces 436489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev $swp1 437489c25f9SIdo Schimmel check_err $? "failed to configure ip address on $swp1" 438489c25f9SIdo Schimmel 439489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 440489c25f9SIdo Schimmel ip -6 address add 2001:db8:10::1/64 dev $swp1.10 441489c25f9SIdo Schimmel check_err $? "failed to configure ip address on $swp1.10" 442489c25f9SIdo Schimmel 443489c25f9SIdo Schimmel ip link add link $swp1 name $swp1.20 type vlan id 20 444489c25f9SIdo Schimmel ip -6 address add 2001:db8:20::1/64 dev $swp1.20 445489c25f9SIdo Schimmel check_err $? "failed to configure ip address on $swp1.20" 446489c25f9SIdo Schimmel 447489c25f9SIdo Schimmel log_test "lag slaves unlinking" 448489c25f9SIdo Schimmel 449489c25f9SIdo Schimmel ip link del dev $swp1.20 450489c25f9SIdo Schimmel ip link del dev $swp1.10 451489c25f9SIdo Schimmel ip address flush dev $swp1 452489c25f9SIdo Schimmel 453489c25f9SIdo Schimmel ip link del dev br20 454489c25f9SIdo Schimmel ip link del dev br10 455489c25f9SIdo Schimmel ip link del dev br0 456489c25f9SIdo Schimmel ip link del dev bond1 457489c25f9SIdo Schimmel} 458489c25f9SIdo Schimmel 459489c25f9SIdo Schimmellag_dev_deletion_test() 460489c25f9SIdo Schimmel{ 461489c25f9SIdo Schimmel # Test that LAG device is correctly deleted, when the LAG and its VLAN 462489c25f9SIdo Schimmel # uppers are enslaved to bridges 463489c25f9SIdo Schimmel RET=0 464489c25f9SIdo Schimmel 465489c25f9SIdo Schimmel lag_create 466489c25f9SIdo Schimmel 467489c25f9SIdo Schimmel ip link del dev bond1 468489c25f9SIdo Schimmel 469489c25f9SIdo Schimmel log_test "lag device deletion" 470489c25f9SIdo Schimmel 471489c25f9SIdo Schimmel ip link del dev br20 472489c25f9SIdo Schimmel ip link del dev br10 473489c25f9SIdo Schimmel ip link del dev br0 474489c25f9SIdo Schimmel} 475489c25f9SIdo Schimmel 476489c25f9SIdo Schimmelvlan_interface_uppers_test() 477489c25f9SIdo Schimmel{ 478489c25f9SIdo Schimmel # Test that uppers of a VLAN interface are correctly sanitized 479489c25f9SIdo Schimmel RET=0 480489c25f9SIdo Schimmel 481489c25f9SIdo Schimmel ip link add name br0 type bridge vlan_filtering 1 482489c25f9SIdo Schimmel ip link set dev $swp1 master br0 483489c25f9SIdo Schimmel 484489c25f9SIdo Schimmel ip link add link br0 name br0.10 type vlan id 10 485489c25f9SIdo Schimmel 486489c25f9SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev br0.10 487489c25f9SIdo Schimmel ip link add link br0.10 name macvlan0 type macvlan mode private 488489c25f9SIdo Schimmel check_err $? "did not manage to create a macvlan when should" 489489c25f9SIdo Schimmel 490489c25f9SIdo Schimmel ip link del dev macvlan0 491489c25f9SIdo Schimmel 492489c25f9SIdo Schimmel ip link add name vrf-test type vrf table 10 493489c25f9SIdo Schimmel ip link set dev br0.10 master vrf-test 494489c25f9SIdo Schimmel check_err $? "did not manage to enslave vlan interface to vrf" 495489c25f9SIdo Schimmel ip link del dev vrf-test 496489c25f9SIdo Schimmel 497489c25f9SIdo Schimmel ip link add name br-test type bridge 498489c25f9SIdo Schimmel ip link set dev br0.10 master br-test &> /dev/null 499489c25f9SIdo Schimmel check_fail $? "managed to enslave vlan interface to bridge when should not" 500489c25f9SIdo Schimmel ip link del dev br-test 501489c25f9SIdo Schimmel 502489c25f9SIdo Schimmel log_test "vlan interface uppers" 503489c25f9SIdo Schimmel 504489c25f9SIdo Schimmel ip link del dev br0 505489c25f9SIdo Schimmel} 506489c25f9SIdo Schimmel 50772159272SIdo Schimmelbridge_extern_learn_test() 50872159272SIdo Schimmel{ 50972159272SIdo Schimmel # Test that externally learned entries added from user space are 51072159272SIdo Schimmel # marked as offloaded 51172159272SIdo Schimmel RET=0 51272159272SIdo Schimmel 51372159272SIdo Schimmel ip link add name br0 type bridge 51472159272SIdo Schimmel ip link set dev $swp1 master br0 51572159272SIdo Schimmel 51672159272SIdo Schimmel bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn 51772159272SIdo Schimmel 5181cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5191cbe65e0SDanielle Ratson bridge fdb show brport $swp1 de:ad:be:ef:13:37 52072159272SIdo Schimmel check_err $? "fdb entry not marked as offloaded when should" 52172159272SIdo Schimmel 52272159272SIdo Schimmel log_test "externally learned fdb entry" 52372159272SIdo Schimmel 52472159272SIdo Schimmel ip link del dev br0 52572159272SIdo Schimmel} 52672159272SIdo Schimmel 5273321cff3SIdo Schimmelneigh_offload_test() 5283321cff3SIdo Schimmel{ 5293321cff3SIdo Schimmel # Test that IPv4 and IPv6 neighbour entries are marked as offloaded 5303321cff3SIdo Schimmel RET=0 5313321cff3SIdo Schimmel 5323321cff3SIdo Schimmel ip -4 address add 192.0.2.1/24 dev $swp1 5333321cff3SIdo Schimmel ip -6 address add 2001:db8:1::1/64 dev $swp1 5343321cff3SIdo Schimmel 5353321cff3SIdo Schimmel ip -4 neigh add 192.0.2.2 lladdr de:ad:be:ef:13:37 nud perm dev $swp1 5363321cff3SIdo Schimmel ip -6 neigh add 2001:db8:1::2 lladdr de:ad:be:ef:13:37 nud perm \ 5373321cff3SIdo Schimmel dev $swp1 5383321cff3SIdo Schimmel 5391cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5401cbe65e0SDanielle Ratson ip -4 neigh show dev $swp1 192.0.2.2 5413321cff3SIdo Schimmel check_err $? "ipv4 neigh entry not marked as offloaded when should" 5421cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5431cbe65e0SDanielle Ratson ip -6 neigh show dev $swp1 2001:db8:1::2 5443321cff3SIdo Schimmel check_err $? "ipv6 neigh entry not marked as offloaded when should" 5453321cff3SIdo Schimmel 5463321cff3SIdo Schimmel log_test "neighbour offload indication" 5473321cff3SIdo Schimmel 5483321cff3SIdo Schimmel ip -6 neigh del 2001:db8:1::2 dev $swp1 5493321cff3SIdo Schimmel ip -4 neigh del 192.0.2.2 dev $swp1 5503321cff3SIdo Schimmel ip -6 address del 2001:db8:1::1/64 dev $swp1 5513321cff3SIdo Schimmel ip -4 address del 192.0.2.1/24 dev $swp1 5523321cff3SIdo Schimmel} 5533321cff3SIdo Schimmel 55445a69b70SIdo Schimmelnexthop_offload_test() 55545a69b70SIdo Schimmel{ 55645a69b70SIdo Schimmel # Test that IPv4 and IPv6 nexthops are marked as offloaded 55745a69b70SIdo Schimmel RET=0 55845a69b70SIdo Schimmel 55945a69b70SIdo Schimmel sysctl_set net.ipv6.conf.$swp2.keep_addr_on_down 1 56045a69b70SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 56145a69b70SIdo Schimmel simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64 56245a69b70SIdo Schimmel setup_wait 56345a69b70SIdo Schimmel 56445a69b70SIdo Schimmel ip -4 route add 198.51.100.0/24 vrf v$swp1 \ 56545a69b70SIdo Schimmel nexthop via 192.0.2.2 dev $swp1 56645a69b70SIdo Schimmel ip -6 route add 2001:db8:2::/64 vrf v$swp1 \ 56745a69b70SIdo Schimmel nexthop via 2001:db8:1::2 dev $swp1 56845a69b70SIdo Schimmel 5691cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5701cbe65e0SDanielle Ratson ip -4 route show 198.51.100.0/24 vrf v$swp1 57145a69b70SIdo Schimmel check_err $? "ipv4 nexthop not marked as offloaded when should" 5721cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5731cbe65e0SDanielle Ratson ip -6 route show 2001:db8:2::/64 vrf v$swp1 57445a69b70SIdo Schimmel check_err $? "ipv6 nexthop not marked as offloaded when should" 57545a69b70SIdo Schimmel 57645a69b70SIdo Schimmel ip link set dev $swp2 down 57745a69b70SIdo Schimmel sleep 1 57845a69b70SIdo Schimmel 5791cbe65e0SDanielle Ratson busywait "$TIMEOUT" not wait_for_offload \ 5801cbe65e0SDanielle Ratson ip -4 route show 198.51.100.0/24 vrf v$swp1 5811cbe65e0SDanielle Ratson check_err $? "ipv4 nexthop marked as offloaded when should not" 5821cbe65e0SDanielle Ratson busywait "$TIMEOUT" not wait_for_offload \ 5831cbe65e0SDanielle Ratson ip -6 route show 2001:db8:2::/64 vrf v$swp1 5841cbe65e0SDanielle Ratson check_err $? "ipv6 nexthop marked as offloaded when should not" 58545a69b70SIdo Schimmel 58645a69b70SIdo Schimmel ip link set dev $swp2 up 58745a69b70SIdo Schimmel setup_wait 58845a69b70SIdo Schimmel 5891cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5901cbe65e0SDanielle Ratson ip -4 route show 198.51.100.0/24 vrf v$swp1 59145a69b70SIdo Schimmel check_err $? "ipv4 nexthop not marked as offloaded after neigh add" 5921cbe65e0SDanielle Ratson busywait "$TIMEOUT" wait_for_offload \ 5931cbe65e0SDanielle Ratson ip -6 route show 2001:db8:2::/64 vrf v$swp1 59445a69b70SIdo Schimmel check_err $? "ipv6 nexthop not marked as offloaded after neigh add" 59545a69b70SIdo Schimmel 59645a69b70SIdo Schimmel log_test "nexthop offload indication" 59745a69b70SIdo Schimmel 59845a69b70SIdo Schimmel ip -6 route del 2001:db8:2::/64 vrf v$swp1 59945a69b70SIdo Schimmel ip -4 route del 198.51.100.0/24 vrf v$swp1 60045a69b70SIdo Schimmel 60145a69b70SIdo Schimmel simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64 60245a69b70SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 60345a69b70SIdo Schimmel sysctl_restore net.ipv6.conf.$swp2.keep_addr_on_down 60445a69b70SIdo Schimmel} 60545a69b70SIdo Schimmel 60620ac8f86SIdo Schimmelnexthop_obj_invalid_test() 60720ac8f86SIdo Schimmel{ 60820ac8f86SIdo Schimmel # Test that invalid nexthop object configurations are rejected 60920ac8f86SIdo Schimmel RET=0 61020ac8f86SIdo Schimmel 61120ac8f86SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 61220ac8f86SIdo Schimmel simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64 61320ac8f86SIdo Schimmel setup_wait 61420ac8f86SIdo Schimmel 61520ac8f86SIdo Schimmel ip nexthop add id 1 via 192.0.2.3 fdb 61620ac8f86SIdo Schimmel check_fail $? "managed to configure an FDB nexthop when should not" 61720ac8f86SIdo Schimmel 61820ac8f86SIdo Schimmel ip nexthop add id 1 encap mpls 200/300 via 192.0.2.3 dev $swp1 61920ac8f86SIdo Schimmel check_fail $? "managed to configure a nexthop with MPLS encap when should not" 62020ac8f86SIdo Schimmel 62120ac8f86SIdo Schimmel ip nexthop add id 1 dev $swp1 62220ac8f86SIdo Schimmel ip nexthop add id 2 dev $swp1 623ffd3e9b0SIdo Schimmel ip nexthop add id 3 via 192.0.2.3 dev $swp1 62420ac8f86SIdo Schimmel ip nexthop add id 10 group 1/2 62520ac8f86SIdo Schimmel check_fail $? "managed to configure a nexthop group with device-only nexthops when should not" 62620ac8f86SIdo Schimmel 627ffd3e9b0SIdo Schimmel ip nexthop add id 10 group 3 type resilient buckets 7 628ffd3e9b0SIdo Schimmel check_fail $? "managed to configure a too small resilient nexthop group when should not" 629ffd3e9b0SIdo Schimmel 630ffd3e9b0SIdo Schimmel ip nexthop add id 10 group 3 type resilient buckets 129 631ffd3e9b0SIdo Schimmel check_fail $? "managed to configure a resilient nexthop group with invalid number of buckets when should not" 632ffd3e9b0SIdo Schimmel 633ffd3e9b0SIdo Schimmel ip nexthop add id 10 group 1/2 type resilient buckets 32 634ffd3e9b0SIdo Schimmel check_fail $? "managed to configure a resilient nexthop group with device-only nexthops when should not" 635ffd3e9b0SIdo Schimmel 636ffd3e9b0SIdo Schimmel ip nexthop add id 10 group 3 type resilient buckets 32 637ffd3e9b0SIdo Schimmel check_err $? "failed to configure a valid resilient nexthop group" 638ffd3e9b0SIdo Schimmel ip nexthop replace id 3 dev $swp1 639ffd3e9b0SIdo Schimmel check_fail $? "managed to populate a nexthop bucket with a device-only nexthop when should not" 640ffd3e9b0SIdo Schimmel 64120ac8f86SIdo Schimmel log_test "nexthop objects - invalid configurations" 64220ac8f86SIdo Schimmel 643ffd3e9b0SIdo Schimmel ip nexthop del id 10 644ffd3e9b0SIdo Schimmel ip nexthop del id 3 64520ac8f86SIdo Schimmel ip nexthop del id 2 64620ac8f86SIdo Schimmel ip nexthop del id 1 64720ac8f86SIdo Schimmel 64820ac8f86SIdo Schimmel simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64 64920ac8f86SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 65020ac8f86SIdo Schimmel} 65120ac8f86SIdo Schimmel 65220ac8f86SIdo Schimmelnexthop_obj_offload_test() 65320ac8f86SIdo Schimmel{ 65420ac8f86SIdo Schimmel # Test offload indication of nexthop objects 65520ac8f86SIdo Schimmel RET=0 65620ac8f86SIdo Schimmel 65720ac8f86SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 65820ac8f86SIdo Schimmel simple_if_init $swp2 65920ac8f86SIdo Schimmel setup_wait 66020ac8f86SIdo Schimmel 66120ac8f86SIdo Schimmel ip nexthop add id 1 via 192.0.2.2 dev $swp1 662535ac9a5SIdo Schimmel ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \ 66320ac8f86SIdo Schimmel dev $swp1 66420ac8f86SIdo Schimmel 66520ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 66620ac8f86SIdo Schimmel ip nexthop show id 1 66720ac8f86SIdo Schimmel check_err $? "nexthop not marked as offloaded when should" 66820ac8f86SIdo Schimmel 66920ac8f86SIdo Schimmel ip neigh replace 192.0.2.2 nud failed dev $swp1 67020ac8f86SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 67120ac8f86SIdo Schimmel ip nexthop show id 1 67220ac8f86SIdo Schimmel check_err $? "nexthop marked as offloaded after setting neigh to failed state" 67320ac8f86SIdo Schimmel 674535ac9a5SIdo Schimmel ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \ 67520ac8f86SIdo Schimmel dev $swp1 67620ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 67720ac8f86SIdo Schimmel ip nexthop show id 1 67820ac8f86SIdo Schimmel check_err $? "nexthop not marked as offloaded after neigh replace" 67920ac8f86SIdo Schimmel 68020ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.3 dev $swp1 68120ac8f86SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 68220ac8f86SIdo Schimmel ip nexthop show id 1 68320ac8f86SIdo Schimmel check_err $? "nexthop marked as offloaded after replacing to use an invalid address" 68420ac8f86SIdo Schimmel 68520ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.2 dev $swp1 68620ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 68720ac8f86SIdo Schimmel ip nexthop show id 1 68820ac8f86SIdo Schimmel check_err $? "nexthop not marked as offloaded after replacing to use a valid address" 68920ac8f86SIdo Schimmel 69020ac8f86SIdo Schimmel log_test "nexthop objects offload indication" 69120ac8f86SIdo Schimmel 69220ac8f86SIdo Schimmel ip neigh del 192.0.2.2 dev $swp1 69320ac8f86SIdo Schimmel ip nexthop del id 1 69420ac8f86SIdo Schimmel 69520ac8f86SIdo Schimmel simple_if_fini $swp2 69620ac8f86SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 69720ac8f86SIdo Schimmel} 69820ac8f86SIdo Schimmel 69920ac8f86SIdo Schimmelnexthop_obj_group_offload_test() 70020ac8f86SIdo Schimmel{ 70120ac8f86SIdo Schimmel # Test offload indication of nexthop group objects 70220ac8f86SIdo Schimmel RET=0 70320ac8f86SIdo Schimmel 70420ac8f86SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 70520ac8f86SIdo Schimmel simple_if_init $swp2 70620ac8f86SIdo Schimmel setup_wait 70720ac8f86SIdo Schimmel 70820ac8f86SIdo Schimmel ip nexthop add id 1 via 192.0.2.2 dev $swp1 70920ac8f86SIdo Schimmel ip nexthop add id 2 via 2001:db8:1::2 dev $swp1 71020ac8f86SIdo Schimmel ip nexthop add id 10 group 1/2 711535ac9a5SIdo Schimmel ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \ 71220ac8f86SIdo Schimmel dev $swp1 713535ac9a5SIdo Schimmel ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \ 71420ac8f86SIdo Schimmel dev $swp1 715535ac9a5SIdo Schimmel ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \ 71620ac8f86SIdo Schimmel dev $swp1 71720ac8f86SIdo Schimmel 71820ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 71920ac8f86SIdo Schimmel ip nexthop show id 1 72020ac8f86SIdo Schimmel check_err $? "IPv4 nexthop not marked as offloaded when should" 72120ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 72220ac8f86SIdo Schimmel ip nexthop show id 2 72320ac8f86SIdo Schimmel check_err $? "IPv6 nexthop not marked as offloaded when should" 72420ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 72520ac8f86SIdo Schimmel ip nexthop show id 10 72620ac8f86SIdo Schimmel check_err $? "nexthop group not marked as offloaded when should" 72720ac8f86SIdo Schimmel 72820ac8f86SIdo Schimmel # Invalidate nexthop id 1 72920ac8f86SIdo Schimmel ip neigh replace 192.0.2.2 nud failed dev $swp1 73020ac8f86SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 73120ac8f86SIdo Schimmel ip nexthop show id 10 73220ac8f86SIdo Schimmel check_fail $? "nexthop group not marked as offloaded with one valid nexthop" 73320ac8f86SIdo Schimmel 73420ac8f86SIdo Schimmel # Invalidate nexthop id 2 73520ac8f86SIdo Schimmel ip neigh replace 2001:db8:1::2 nud failed dev $swp1 73620ac8f86SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 73720ac8f86SIdo Schimmel ip nexthop show id 10 73820ac8f86SIdo Schimmel check_err $? "nexthop group marked as offloaded when should not" 73920ac8f86SIdo Schimmel 74020ac8f86SIdo Schimmel # Revalidate nexthop id 1 74120ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.3 dev $swp1 74220ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 74320ac8f86SIdo Schimmel ip nexthop show id 10 74420ac8f86SIdo Schimmel check_err $? "nexthop group not marked as offloaded after revalidating nexthop" 74520ac8f86SIdo Schimmel 74620ac8f86SIdo Schimmel log_test "nexthop group objects offload indication" 74720ac8f86SIdo Schimmel 74820ac8f86SIdo Schimmel ip neigh del 2001:db8:1::2 dev $swp1 74920ac8f86SIdo Schimmel ip neigh del 192.0.2.3 dev $swp1 75020ac8f86SIdo Schimmel ip neigh del 192.0.2.2 dev $swp1 75120ac8f86SIdo Schimmel ip nexthop del id 10 75220ac8f86SIdo Schimmel ip nexthop del id 2 75320ac8f86SIdo Schimmel ip nexthop del id 1 75420ac8f86SIdo Schimmel 75520ac8f86SIdo Schimmel simple_if_fini $swp2 75620ac8f86SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 75720ac8f86SIdo Schimmel} 75820ac8f86SIdo Schimmel 759ffd3e9b0SIdo Schimmelnexthop_obj_bucket_offload_test() 760ffd3e9b0SIdo Schimmel{ 761ffd3e9b0SIdo Schimmel # Test offload indication of nexthop buckets 762ffd3e9b0SIdo Schimmel RET=0 763ffd3e9b0SIdo Schimmel 764ffd3e9b0SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 765ffd3e9b0SIdo Schimmel simple_if_init $swp2 766ffd3e9b0SIdo Schimmel setup_wait 767ffd3e9b0SIdo Schimmel 768ffd3e9b0SIdo Schimmel ip nexthop add id 1 via 192.0.2.2 dev $swp1 769ffd3e9b0SIdo Schimmel ip nexthop add id 2 via 2001:db8:1::2 dev $swp1 770ffd3e9b0SIdo Schimmel ip nexthop add id 10 group 1/2 type resilient buckets 32 idle_timer 0 771535ac9a5SIdo Schimmel ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \ 772ffd3e9b0SIdo Schimmel dev $swp1 773535ac9a5SIdo Schimmel ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \ 774ffd3e9b0SIdo Schimmel dev $swp1 775535ac9a5SIdo Schimmel ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \ 776ffd3e9b0SIdo Schimmel dev $swp1 777ffd3e9b0SIdo Schimmel 778ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 779ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 1 780ffd3e9b0SIdo Schimmel check_err $? "IPv4 nexthop buckets not marked as offloaded when should" 781ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 782ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 2 783ffd3e9b0SIdo Schimmel check_err $? "IPv6 nexthop buckets not marked as offloaded when should" 784ffd3e9b0SIdo Schimmel 785ffd3e9b0SIdo Schimmel # Invalidate nexthop id 1 786ffd3e9b0SIdo Schimmel ip neigh replace 192.0.2.2 nud failed dev $swp1 787ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_trap \ 788ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 1 789ffd3e9b0SIdo Schimmel check_err $? "IPv4 nexthop buckets not marked with trap when should" 790ffd3e9b0SIdo Schimmel 791ffd3e9b0SIdo Schimmel # Invalidate nexthop id 2 792ffd3e9b0SIdo Schimmel ip neigh replace 2001:db8:1::2 nud failed dev $swp1 793ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_trap \ 794ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 2 795ffd3e9b0SIdo Schimmel check_err $? "IPv6 nexthop buckets not marked with trap when should" 796ffd3e9b0SIdo Schimmel 797ffd3e9b0SIdo Schimmel # Revalidate nexthop id 1 by changing its configuration 798ffd3e9b0SIdo Schimmel ip nexthop replace id 1 via 192.0.2.3 dev $swp1 799ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 800ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 1 801ffd3e9b0SIdo Schimmel check_err $? "nexthop bucket not marked as offloaded after revalidating nexthop" 802ffd3e9b0SIdo Schimmel 803ffd3e9b0SIdo Schimmel # Revalidate nexthop id 2 by changing its neighbour 804535ac9a5SIdo Schimmel ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \ 805ffd3e9b0SIdo Schimmel dev $swp1 806ffd3e9b0SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 807ffd3e9b0SIdo Schimmel ip nexthop bucket show nhid 2 808ffd3e9b0SIdo Schimmel check_err $? "nexthop bucket not marked as offloaded after revalidating neighbour" 809ffd3e9b0SIdo Schimmel 810ffd3e9b0SIdo Schimmel log_test "nexthop bucket offload indication" 811ffd3e9b0SIdo Schimmel 812ffd3e9b0SIdo Schimmel ip neigh del 2001:db8:1::2 dev $swp1 813ffd3e9b0SIdo Schimmel ip neigh del 192.0.2.3 dev $swp1 814ffd3e9b0SIdo Schimmel ip neigh del 192.0.2.2 dev $swp1 815ffd3e9b0SIdo Schimmel ip nexthop del id 10 816ffd3e9b0SIdo Schimmel ip nexthop del id 2 817ffd3e9b0SIdo Schimmel ip nexthop del id 1 818ffd3e9b0SIdo Schimmel 819ffd3e9b0SIdo Schimmel simple_if_fini $swp2 820ffd3e9b0SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 821ffd3e9b0SIdo Schimmel} 822ffd3e9b0SIdo Schimmel 82324eb2a02SIdo Schimmelnexthop_obj_blackhole_offload_test() 82424eb2a02SIdo Schimmel{ 82524eb2a02SIdo Schimmel # Test offload indication of blackhole nexthop objects 82624eb2a02SIdo Schimmel RET=0 82724eb2a02SIdo Schimmel 82824eb2a02SIdo Schimmel ip nexthop add id 1 blackhole 82924eb2a02SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 83024eb2a02SIdo Schimmel ip nexthop show id 1 83124eb2a02SIdo Schimmel check_err $? "Blackhole nexthop not marked as offloaded when should" 83224eb2a02SIdo Schimmel 83324eb2a02SIdo Schimmel ip nexthop add id 10 group 1 83424eb2a02SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 83524eb2a02SIdo Schimmel ip nexthop show id 10 83624eb2a02SIdo Schimmel check_err $? "Nexthop group not marked as offloaded when should" 83724eb2a02SIdo Schimmel 83824eb2a02SIdo Schimmel log_test "blackhole nexthop objects offload indication" 83924eb2a02SIdo Schimmel 84024eb2a02SIdo Schimmel ip nexthop del id 10 84124eb2a02SIdo Schimmel ip nexthop del id 1 84224eb2a02SIdo Schimmel} 84324eb2a02SIdo Schimmel 84420ac8f86SIdo Schimmelnexthop_obj_route_offload_test() 84520ac8f86SIdo Schimmel{ 84620ac8f86SIdo Schimmel # Test offload indication of routes using nexthop objects 84720ac8f86SIdo Schimmel RET=0 84820ac8f86SIdo Schimmel 84920ac8f86SIdo Schimmel simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64 85020ac8f86SIdo Schimmel simple_if_init $swp2 85120ac8f86SIdo Schimmel setup_wait 85220ac8f86SIdo Schimmel 85320ac8f86SIdo Schimmel ip nexthop add id 1 via 192.0.2.2 dev $swp1 854535ac9a5SIdo Schimmel ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \ 85520ac8f86SIdo Schimmel dev $swp1 856535ac9a5SIdo Schimmel ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \ 85720ac8f86SIdo Schimmel dev $swp1 85820ac8f86SIdo Schimmel 85920ac8f86SIdo Schimmel ip route replace 198.51.100.0/24 nhid 1 86020ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 86120ac8f86SIdo Schimmel ip route show 198.51.100.0/24 86220ac8f86SIdo Schimmel check_err $? "route not marked as offloaded when using valid nexthop" 86320ac8f86SIdo Schimmel 86420ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.3 dev $swp1 86520ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 86620ac8f86SIdo Schimmel ip route show 198.51.100.0/24 86720ac8f86SIdo Schimmel check_err $? "route not marked as offloaded after replacing valid nexthop with a valid one" 86820ac8f86SIdo Schimmel 86920ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.4 dev $swp1 87020ac8f86SIdo Schimmel busywait "$TIMEOUT" not wait_for_offload \ 87120ac8f86SIdo Schimmel ip route show 198.51.100.0/24 87220ac8f86SIdo Schimmel check_err $? "route marked as offloaded after replacing valid nexthop with an invalid one" 87320ac8f86SIdo Schimmel 87420ac8f86SIdo Schimmel ip nexthop replace id 1 via 192.0.2.2 dev $swp1 87520ac8f86SIdo Schimmel busywait "$TIMEOUT" wait_for_offload \ 87620ac8f86SIdo Schimmel ip route show 198.51.100.0/24 87720ac8f86SIdo Schimmel check_err $? "route not marked as offloaded after replacing invalid nexthop with a valid one" 87820ac8f86SIdo Schimmel 87920ac8f86SIdo Schimmel log_test "routes using nexthop objects offload indication" 88020ac8f86SIdo Schimmel 88120ac8f86SIdo Schimmel ip route del 198.51.100.0/24 88220ac8f86SIdo Schimmel ip neigh del 192.0.2.3 dev $swp1 88320ac8f86SIdo Schimmel ip neigh del 192.0.2.2 dev $swp1 88420ac8f86SIdo Schimmel ip nexthop del id 1 88520ac8f86SIdo Schimmel 88620ac8f86SIdo Schimmel simple_if_fini $swp2 88720ac8f86SIdo Schimmel simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64 88820ac8f86SIdo Schimmel} 88920ac8f86SIdo Schimmel 890*cdbde7edSIdo Schimmelbridge_locked_port_test() 891*cdbde7edSIdo Schimmel{ 892*cdbde7edSIdo Schimmel RET=0 893*cdbde7edSIdo Schimmel 894*cdbde7edSIdo Schimmel ip link add name br1 up type bridge vlan_filtering 0 895*cdbde7edSIdo Schimmel 896*cdbde7edSIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 897*cdbde7edSIdo Schimmel ip link set dev $swp1.10 master br1 898*cdbde7edSIdo Schimmel 899*cdbde7edSIdo Schimmel bridge link set dev $swp1.10 locked on 900*cdbde7edSIdo Schimmel check_fail $? "managed to set locked flag on a VLAN upper" 901*cdbde7edSIdo Schimmel 902*cdbde7edSIdo Schimmel ip link set dev $swp1.10 nomaster 903*cdbde7edSIdo Schimmel ip link set dev $swp1 master br1 904*cdbde7edSIdo Schimmel 905*cdbde7edSIdo Schimmel bridge link set dev $swp1 locked on 906*cdbde7edSIdo Schimmel check_fail $? "managed to set locked flag on a bridge port that has a VLAN upper" 907*cdbde7edSIdo Schimmel 908*cdbde7edSIdo Schimmel ip link del dev $swp1.10 909*cdbde7edSIdo Schimmel bridge link set dev $swp1 locked on 910*cdbde7edSIdo Schimmel 911*cdbde7edSIdo Schimmel ip link add link $swp1 name $swp1.10 type vlan id 10 912*cdbde7edSIdo Schimmel check_fail $? "managed to configure a VLAN upper on a locked port" 913*cdbde7edSIdo Schimmel 914*cdbde7edSIdo Schimmel log_test "bridge locked port" 915*cdbde7edSIdo Schimmel 916*cdbde7edSIdo Schimmel ip link del dev $swp1.10 &> /dev/null 917*cdbde7edSIdo Schimmel ip link del dev br1 918*cdbde7edSIdo Schimmel} 919*cdbde7edSIdo Schimmel 920489c25f9SIdo Schimmeldevlink_reload_test() 921489c25f9SIdo Schimmel{ 922489c25f9SIdo Schimmel # Test that after executing all the above configuration tests, a 923489c25f9SIdo Schimmel # devlink reload can be performed without errors 924489c25f9SIdo Schimmel RET=0 925489c25f9SIdo Schimmel 926489c25f9SIdo Schimmel devlink dev reload "$DEVLINK_DEV" 927489c25f9SIdo Schimmel check_err $? "devlink reload failed" 928489c25f9SIdo Schimmel 929489c25f9SIdo Schimmel log_test "devlink reload - last test" 930489c25f9SIdo Schimmel 931489c25f9SIdo Schimmel sleep 20 932489c25f9SIdo Schimmel} 933489c25f9SIdo Schimmel 934555afaaeSPetr Machatatrap cleanup EXIT 935555afaaeSPetr Machata 936555afaaeSPetr Machatasetup_prepare 937555afaaeSPetr Machatasetup_wait 938555afaaeSPetr Machata 939555afaaeSPetr Machatatests_run 940555afaaeSPetr Machata 941555afaaeSPetr Machataexit $EXIT_STATUS 942