Path: blob/master/tools/testing/selftests/drivers/net/mlxsw/rtnetlink.sh
26292 views
#!/bin/bash1# SPDX-License-Identifier: GPL-2.02#3# Test various interface configuration scenarios. Observe that configurations4# deemed valid by mlxsw succeed, invalid configurations fail and that no traces5# are produced. To prevent the test from passing in case traces are produced,6# the user can set the 'kernel.panic_on_warn' and 'kernel.panic_on_oops'7# sysctls in its environment.89lib_dir=$(dirname $0)/../../../net/forwarding1011ALL_TESTS="12rif_vrf_set_addr_test13rif_non_inherit_bridge_addr_test14vlan_interface_deletion_test15bridge_deletion_test16bridge_vlan_flags_test17vlan_1_test18duplicate_vlans_test19vlan_rif_refcount_test20subport_rif_refcount_test21subport_rif_lag_join_test22vlan_dev_deletion_test23lag_unlink_slaves_test24lag_dev_deletion_test25vlan_interface_uppers_test26bridge_extern_learn_test27neigh_offload_test28nexthop_offload_test29nexthop_obj_invalid_test30nexthop_obj_offload_test31nexthop_obj_group_offload_test32nexthop_obj_bucket_offload_test33nexthop_obj_blackhole_offload_test34nexthop_obj_route_offload_test35bridge_locked_port_test36devlink_reload_test37"38NUM_NETIFS=239: ${TIMEOUT:=20000} # ms40source $lib_dir/lib.sh41source $lib_dir/devlink_lib.sh4243setup_prepare()44{45swp1=${NETIFS[p1]}46swp2=${NETIFS[p2]}4748ip link set dev $swp1 up49ip link set dev $swp2 up50}5152cleanup()53{54pre_cleanup5556ip link set dev $swp2 down57ip link set dev $swp1 down58}5960rif_vrf_set_addr_test()61{62# Test that it is possible to set an IP address on a VRF upper despite63# its random MAC address.64RET=06566ip link add name vrf-test type vrf table 1067ip link set dev $swp1 master vrf-test6869ip -4 address add 192.0.2.1/24 dev vrf-test70check_err $? "failed to set IPv4 address on VRF"71ip -6 address add 2001:db8:1::1/64 dev vrf-test72check_err $? "failed to set IPv6 address on VRF"7374log_test "RIF - setting IP address on VRF"7576ip link del dev vrf-test77}7879rif_non_inherit_bridge_addr_test()80{81local swp2_mac=$(mac_get $swp2)8283RET=08485# Create first RIF86ip addr add dev $swp1 192.0.2.1/2887check_err $?8889# Create a FID RIF90ip link add name br1 up type bridge vlan_filtering 091ip link set dev br1 addr $swp2_mac92ip link set dev $swp2 master br193ip addr add dev br1 192.0.2.17/2894check_err $?9596# Prepare a device with a low MAC address97ip link add name d up type dummy98ip link set dev d addr 00:11:22:33:44:5599100# Attach the device to br1. Since the bridge address was set, it should101# work.102ip link set dev d master br1 &>/dev/null103check_err $? "Could not attach a device with low MAC to a bridge with RIF"104105# Port MAC address change should be allowed for a bridge with set MAC.106ip link set dev $swp2 addr 00:11:22:33:44:55107check_err $? "Changing swp2's MAC address not permitted"108109log_test "RIF - attach port with bad MAC to bridge with set MAC"110111ip link set dev $swp2 addr $swp2_mac112ip link del dev d113ip link del dev br1114ip addr del dev $swp1 192.0.2.1/28115}116117vlan_interface_deletion_test()118{119# Test that when a VLAN interface is deleted, its associated router120# interface (RIF) is correctly deleted and not leaked. See commit121# c360867ec46a ("mlxsw: spectrum: Delete RIF when VLAN device is122# removed") for more details123RET=0124125ip link add name br0 type bridge vlan_filtering 1126ip link set dev $swp1 master br0127128ip link add link br0 name br0.10 type vlan id 10129ip -6 address add 2001:db8:1::1/64 dev br0.10130ip link del dev br0.10131132# If we leaked the previous RIF, then this should produce a trace133ip link add link br0 name br0.20 type vlan id 20134ip -6 address add 2001:db8:1::1/64 dev br0.20135ip link del dev br0.20136137log_test "vlan interface deletion"138139ip link del dev br0140}141142bridge_deletion_test()143{144# Test that when a bridge with VLAN interfaces is deleted, we correctly145# delete the associated RIFs. See commit 602b74eda813 ("mlxsw:146# spectrum_switchdev: Do not leak RIFs when removing bridge") for more147# details148RET=0149150ip link add name br0 type bridge vlan_filtering 1151ip link set dev $swp1 master br0152ip -6 address add 2001:db8::1/64 dev br0153154ip link add link br0 name br0.10 type vlan id 10155ip -6 address add 2001:db8:1::1/64 dev br0.10156157ip link add link br0 name br0.20 type vlan id 20158ip -6 address add 2001:db8:2::1/64 dev br0.20159160ip link del dev br0161162# If we leaked previous RIFs, then this should produce a trace163ip -6 address add 2001:db8:1::1/64 dev $swp1164ip -6 address del 2001:db8:1::1/64 dev $swp1165166log_test "bridge deletion"167}168169bridge_vlan_flags_test()170{171# Test that when bridge VLAN flags are toggled, we do not take172# unnecessary references on related structs. See commit 9e25826ffc94173# ("mlxsw: spectrum_switchdev: Fix port_vlan refcounting") for more174# details175RET=0176177ip link add name br0 type bridge vlan_filtering 1178ip link set dev $swp1 master br0179180bridge vlan add vid 10 dev $swp1 pvid untagged181bridge vlan add vid 10 dev $swp1 untagged182bridge vlan add vid 10 dev $swp1 pvid183bridge vlan add vid 10 dev $swp1184ip link del dev br0185186# If we did not handle references correctly, then this should produce a187# trace188devlink_reload189190log_test "bridge vlan flags"191}192193vlan_1_test()194{195# Test that VLAN 1 can be configured over mlxsw ports. In the past it196# was used internally for untagged traffic. See commit 47bf9df2e820197# ("mlxsw: spectrum: Forbid creation of VLAN 1 over port/LAG") for more198# details199RET=0200201ip link add link $swp1 name $swp1.1 type vlan id 1202check_err $? "did not manage to create vlan 1 when should"203204log_test "vlan 1"205206ip link del dev $swp1.1207}208209duplicate_vlans_test()210{211# Test that on a given port a VLAN is only used once. Either as VLAN212# in a VLAN-aware bridge or as a VLAN device213RET=0214215ip link add name br0 type bridge vlan_filtering 1216ip link set dev $swp1 master br0217bridge vlan add vid 10 dev $swp1218219ip link add link $swp1 name $swp1.10 type vlan id 10 &> /dev/null220check_fail $? "managed to create vlan device when should not"221222bridge vlan del vid 10 dev $swp1223ip link add link $swp1 name $swp1.10 type vlan id 10224check_err $? "did not manage to create vlan device when should"225bridge vlan add vid 10 dev $swp1 &> /dev/null226check_fail $? "managed to add bridge vlan when should not"227228log_test "duplicate vlans"229230ip link del dev $swp1.10231ip link del dev br0232}233234vlan_rif_refcount_test()235{236# Test that RIFs representing VLAN interfaces are not affected from237# ports member in the VLAN. We use the offload indication on routes238# configured on the RIF to understand if it was created / destroyed239RET=0240241ip link add name br0 type bridge vlan_filtering 1242ip link set dev $swp1 master br0243244ip link set dev $swp1 up245ip link set dev br0 up246247ip link add link br0 name br0.10 up type vlan id 10248ip -6 address add 2001:db8:1::1/64 dev br0.10249250busywait "$TIMEOUT" wait_for_offload \251ip -6 route get fibmatch 2001:db8:1::2 dev br0.10252check_err $? "vlan rif was not created before adding port to vlan"253254bridge vlan add vid 10 dev $swp1255busywait "$TIMEOUT" wait_for_offload \256ip -6 route get fibmatch 2001:db8:1::2 dev br0.10257check_err $? "vlan rif was destroyed after adding port to vlan"258259bridge vlan del vid 10 dev $swp1260busywait "$TIMEOUT" wait_for_offload \261ip -6 route get fibmatch 2001:db8:1::2 dev br0.10262check_err $? "vlan rif was destroyed after removing port from vlan"263264ip link set dev $swp1 nomaster265busywait "$TIMEOUT" not wait_for_offload \266ip -6 route get fibmatch 2001:db8:1::2 dev br0.10267check_err $? "vlan rif was not destroyed after unlinking port from bridge"268269log_test "vlan rif refcount"270271ip link del dev br0.10272ip link set dev $swp1 down273ip link del dev br0274}275276subport_rif_refcount_test()277{278# Test that RIFs representing upper devices of physical ports are279# reference counted correctly and destroyed when should. We use the280# offload indication on routes configured on the RIF to understand if281# it was created / destroyed282RET=0283284ip link add name bond1 type bond mode 802.3ad285ip link set dev $swp1 down286ip link set dev $swp2 down287ip link set dev $swp1 master bond1288ip link set dev $swp2 master bond1289290ip link set dev bond1 up291ip link add link bond1 name bond1.10 up type vlan id 10292ip -6 address add 2001:db8:1::1/64 dev bond1293ip -6 address add 2001:db8:2::1/64 dev bond1.10294295busywait "$TIMEOUT" wait_for_offload \296ip -6 route get fibmatch 2001:db8:1::2 dev bond1297check_err $? "subport rif was not created on lag device"298busywait "$TIMEOUT" wait_for_offload \299ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10300check_err $? "subport rif was not created on vlan device"301302ip link set dev $swp1 nomaster303busywait "$TIMEOUT" wait_for_offload \304ip -6 route get fibmatch 2001:db8:1::2 dev bond1305check_err $? "subport rif of lag device was destroyed when should not"306busywait "$TIMEOUT" wait_for_offload \307ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10308check_err $? "subport rif of vlan device was destroyed when should not"309310ip link set dev $swp2 nomaster311busywait "$TIMEOUT" not wait_for_offload \312ip -6 route get fibmatch 2001:db8:1::2 dev bond1313check_err $? "subport rif of lag device was not destroyed when should"314busywait "$TIMEOUT" not wait_for_offload \315ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10316check_err $? "subport rif of vlan device was not destroyed when should"317318log_test "subport rif refcount"319320ip link del dev bond1.10321ip link del dev bond1322}323324subport_rif_lag_join_test()325{326# Test that the reference count of a RIF configured for a LAG is327# incremented / decremented when ports join / leave the LAG. We use the328# offload indication on routes configured on the RIF to understand if329# it was created / destroyed330RET=0331332ip link add name bond1 type bond mode 802.3ad333ip link set dev $swp1 down334ip link set dev $swp2 down335ip link set dev $swp1 master bond1336ip link set dev $swp2 master bond1337338ip link set dev bond1 up339ip -6 address add 2001:db8:1::1/64 dev bond1340341busywait "$TIMEOUT" wait_for_offload \342ip -6 route get fibmatch 2001:db8:1::2 dev bond1343check_err $? "subport rif was not created on lag device"344345ip link set dev $swp1 nomaster346busywait "$TIMEOUT" wait_for_offload \347ip -6 route get fibmatch 2001:db8:1::2 dev bond1348check_err $? "subport rif of lag device was destroyed after removing one port"349350ip link set dev $swp1 master bond1351ip link set dev $swp2 nomaster352busywait "$TIMEOUT" wait_for_offload \353ip -6 route get fibmatch 2001:db8:1::2 dev bond1354check_err $? "subport rif of lag device was destroyed after re-adding a port and removing another"355356ip link set dev $swp1 nomaster357busywait "$TIMEOUT" not wait_for_offload \358ip -6 route get fibmatch 2001:db8:1::2 dev bond1359check_err $? "subport rif of lag device was not destroyed when should"360361log_test "subport rif lag join"362363ip link del dev bond1364}365366vlan_dev_deletion_test()367{368# Test that VLAN devices are correctly deleted / unlinked when enslaved369# to bridge370RET=0371372ip link add name br10 type bridge373ip link add name br20 type bridge374ip link add name br30 type bridge375ip link add link $swp1 name $swp1.10 type vlan id 10376ip link add link $swp1 name $swp1.20 type vlan id 20377ip link add link $swp1 name $swp1.30 type vlan id 30378ip link set dev $swp1.10 master br10379ip link set dev $swp1.20 master br20380ip link set dev $swp1.30 master br30381382# If we did not handle the situation correctly, then these operations383# might produce a trace384ip link set dev $swp1.30 nomaster385ip link del dev $swp1.20386# Deletion via ioctl uses different code paths from netlink387vconfig rem $swp1.10 &> /dev/null388389log_test "vlan device deletion"390391ip link del dev $swp1.30392ip link del dev br30393ip link del dev br20394ip link del dev br10395}396397lag_create()398{399ip link add name bond1 type bond mode 802.3ad400ip link set dev $swp1 down401ip link set dev $swp2 down402ip link set dev $swp1 master bond1403ip link set dev $swp2 master bond1404405ip link add link bond1 name bond1.10 type vlan id 10406ip link add link bond1 name bond1.20 type vlan id 20407408ip link add name br0 type bridge vlan_filtering 1409ip link set dev bond1 master br0410411ip link add name br10 type bridge412ip link set dev bond1.10 master br10413414ip link add name br20 type bridge415ip link set dev bond1.20 master br20416}417418lag_unlink_slaves_test()419{420# Test that ports are correctly unlinked from their LAG master, when421# the LAG and its VLAN uppers are enslaved to bridges422RET=0423424lag_create425426ip link set dev $swp1 nomaster427check_err $? "lag slave $swp1 was not unlinked from master"428ip link set dev $swp2 nomaster429check_err $? "lag slave $swp2 was not unlinked from master"430431# Try to configure corresponding VLANs as router interfaces432ip -6 address add 2001:db8:1::1/64 dev $swp1433check_err $? "failed to configure ip address on $swp1"434435ip link add link $swp1 name $swp1.10 type vlan id 10436ip -6 address add 2001:db8:10::1/64 dev $swp1.10437check_err $? "failed to configure ip address on $swp1.10"438439ip link add link $swp1 name $swp1.20 type vlan id 20440ip -6 address add 2001:db8:20::1/64 dev $swp1.20441check_err $? "failed to configure ip address on $swp1.20"442443log_test "lag slaves unlinking"444445ip link del dev $swp1.20446ip link del dev $swp1.10447ip address flush dev $swp1448449ip link del dev br20450ip link del dev br10451ip link del dev br0452ip link del dev bond1453}454455lag_dev_deletion_test()456{457# Test that LAG device is correctly deleted, when the LAG and its VLAN458# uppers are enslaved to bridges459RET=0460461lag_create462463ip link del dev bond1464465log_test "lag device deletion"466467ip link del dev br20468ip link del dev br10469ip link del dev br0470}471472vlan_interface_uppers_test()473{474# Test that uppers of a VLAN interface are correctly sanitized475RET=0476477ip link add name br0 type bridge vlan_filtering 1478ip link set dev $swp1 master br0479480ip link add link br0 name br0.10 type vlan id 10481482ip -6 address add 2001:db8:1::1/64 dev br0.10483ip link add link br0.10 name macvlan0 type macvlan mode private484check_err $? "did not manage to create a macvlan when should"485486ip link del dev macvlan0487488ip link add name vrf-test type vrf table 10489ip link set dev br0.10 master vrf-test490check_err $? "did not manage to enslave vlan interface to vrf"491ip link del dev vrf-test492493ip link add name br-test type bridge494ip link set dev br0.10 master br-test &> /dev/null495check_fail $? "managed to enslave vlan interface to bridge when should not"496ip link del dev br-test497498log_test "vlan interface uppers"499500ip link del dev br0501}502503bridge_extern_learn_test()504{505# Test that externally learned entries added from user space are506# marked as offloaded507RET=0508509ip link add name br0 type bridge510ip link set dev $swp1 master br0511512bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn513514busywait "$TIMEOUT" wait_for_offload \515bridge fdb show brport $swp1 de:ad:be:ef:13:37516check_err $? "fdb entry not marked as offloaded when should"517518log_test "externally learned fdb entry"519520ip link del dev br0521}522523neigh_offload_test()524{525# Test that IPv4 and IPv6 neighbour entries are marked as offloaded526RET=0527528ip -4 address add 192.0.2.1/24 dev $swp1529ip -6 address add 2001:db8:1::1/64 dev $swp1530531ip -4 neigh add 192.0.2.2 lladdr de:ad:be:ef:13:37 nud perm dev $swp1532ip -6 neigh add 2001:db8:1::2 lladdr de:ad:be:ef:13:37 nud perm \533dev $swp1534535busywait "$TIMEOUT" wait_for_offload \536ip -4 neigh show dev $swp1 192.0.2.2537check_err $? "ipv4 neigh entry not marked as offloaded when should"538busywait "$TIMEOUT" wait_for_offload \539ip -6 neigh show dev $swp1 2001:db8:1::2540check_err $? "ipv6 neigh entry not marked as offloaded when should"541542log_test "neighbour offload indication"543544ip -6 neigh del 2001:db8:1::2 dev $swp1545ip -4 neigh del 192.0.2.2 dev $swp1546ip -6 address del 2001:db8:1::1/64 dev $swp1547ip -4 address del 192.0.2.1/24 dev $swp1548}549550nexthop_offload_test()551{552# Test that IPv4 and IPv6 nexthops are marked as offloaded553RET=0554555sysctl_set net.ipv6.conf.$swp2.keep_addr_on_down 1556simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64557simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64558setup_wait559560ip -4 route add 198.51.100.0/24 vrf v$swp1 \561nexthop via 192.0.2.2 dev $swp1562ip -6 route add 2001:db8:2::/64 vrf v$swp1 \563nexthop via 2001:db8:1::2 dev $swp1564565busywait "$TIMEOUT" wait_for_offload \566ip -4 route show 198.51.100.0/24 vrf v$swp1567check_err $? "ipv4 nexthop not marked as offloaded when should"568busywait "$TIMEOUT" wait_for_offload \569ip -6 route show 2001:db8:2::/64 vrf v$swp1570check_err $? "ipv6 nexthop not marked as offloaded when should"571572ip link set dev $swp2 down573sleep 1574575busywait "$TIMEOUT" not wait_for_offload \576ip -4 route show 198.51.100.0/24 vrf v$swp1577check_err $? "ipv4 nexthop marked as offloaded when should not"578busywait "$TIMEOUT" not wait_for_offload \579ip -6 route show 2001:db8:2::/64 vrf v$swp1580check_err $? "ipv6 nexthop marked as offloaded when should not"581582ip link set dev $swp2 up583setup_wait584585busywait "$TIMEOUT" wait_for_offload \586ip -4 route show 198.51.100.0/24 vrf v$swp1587check_err $? "ipv4 nexthop not marked as offloaded after neigh add"588busywait "$TIMEOUT" wait_for_offload \589ip -6 route show 2001:db8:2::/64 vrf v$swp1590check_err $? "ipv6 nexthop not marked as offloaded after neigh add"591592log_test "nexthop offload indication"593594ip -6 route del 2001:db8:2::/64 vrf v$swp1595ip -4 route del 198.51.100.0/24 vrf v$swp1596597simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64598simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64599sysctl_restore net.ipv6.conf.$swp2.keep_addr_on_down600}601602nexthop_obj_invalid_test()603{604# Test that invalid nexthop object configurations are rejected605RET=0606607simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64608simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64609setup_wait610611ip nexthop add id 1 via 192.0.2.3 fdb612check_fail $? "managed to configure an FDB nexthop when should not"613614ip nexthop add id 1 encap mpls 200/300 via 192.0.2.3 dev $swp1615check_fail $? "managed to configure a nexthop with MPLS encap when should not"616617ip nexthop add id 1 dev $swp1618ip nexthop add id 2 dev $swp1619ip nexthop add id 3 via 192.0.2.3 dev $swp1620ip nexthop add id 10 group 1/2621check_fail $? "managed to configure a nexthop group with device-only nexthops when should not"622623ip nexthop add id 10 group 3 type resilient buckets 7624check_fail $? "managed to configure a too small resilient nexthop group when should not"625626ip nexthop add id 10 group 3 type resilient buckets 129627check_fail $? "managed to configure a resilient nexthop group with invalid number of buckets when should not"628629ip nexthop add id 10 group 1/2 type resilient buckets 32630check_fail $? "managed to configure a resilient nexthop group with device-only nexthops when should not"631632ip nexthop add id 10 group 3 type resilient buckets 32633check_err $? "failed to configure a valid resilient nexthop group"634ip nexthop replace id 3 dev $swp1635check_fail $? "managed to populate a nexthop bucket with a device-only nexthop when should not"636637log_test "nexthop objects - invalid configurations"638639ip nexthop del id 10640ip nexthop del id 3641ip nexthop del id 2642ip nexthop del id 1643644simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64645simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64646}647648nexthop_obj_offload_test()649{650# Test offload indication of nexthop objects651RET=0652653simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64654simple_if_init $swp2655setup_wait656657ip nexthop add id 1 via 192.0.2.2 dev $swp1658ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \659dev $swp1660661busywait "$TIMEOUT" wait_for_offload \662ip nexthop show id 1663check_err $? "nexthop not marked as offloaded when should"664665ip neigh replace 192.0.2.2 nud failed dev $swp1666busywait "$TIMEOUT" not wait_for_offload \667ip nexthop show id 1668check_err $? "nexthop marked as offloaded after setting neigh to failed state"669670ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \671dev $swp1672busywait "$TIMEOUT" wait_for_offload \673ip nexthop show id 1674check_err $? "nexthop not marked as offloaded after neigh replace"675676ip nexthop replace id 1 via 192.0.2.3 dev $swp1677busywait "$TIMEOUT" not wait_for_offload \678ip nexthop show id 1679check_err $? "nexthop marked as offloaded after replacing to use an invalid address"680681ip nexthop replace id 1 via 192.0.2.2 dev $swp1682busywait "$TIMEOUT" wait_for_offload \683ip nexthop show id 1684check_err $? "nexthop not marked as offloaded after replacing to use a valid address"685686log_test "nexthop objects offload indication"687688ip neigh del 192.0.2.2 dev $swp1689ip nexthop del id 1690691simple_if_fini $swp2692simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64693}694695nexthop_obj_group_offload_test()696{697# Test offload indication of nexthop group objects698RET=0699700simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64701simple_if_init $swp2702setup_wait703704ip nexthop add id 1 via 192.0.2.2 dev $swp1705ip nexthop add id 2 via 2001:db8:1::2 dev $swp1706ip nexthop add id 10 group 1/2707ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \708dev $swp1709ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \710dev $swp1711ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \712dev $swp1713714busywait "$TIMEOUT" wait_for_offload \715ip nexthop show id 1716check_err $? "IPv4 nexthop not marked as offloaded when should"717busywait "$TIMEOUT" wait_for_offload \718ip nexthop show id 2719check_err $? "IPv6 nexthop not marked as offloaded when should"720busywait "$TIMEOUT" wait_for_offload \721ip nexthop show id 10722check_err $? "nexthop group not marked as offloaded when should"723724# Invalidate nexthop id 1725ip neigh replace 192.0.2.2 nud failed dev $swp1726busywait "$TIMEOUT" not wait_for_offload \727ip nexthop show id 10728check_fail $? "nexthop group not marked as offloaded with one valid nexthop"729730# Invalidate nexthop id 2731ip neigh replace 2001:db8:1::2 nud failed dev $swp1732busywait "$TIMEOUT" not wait_for_offload \733ip nexthop show id 10734check_err $? "nexthop group marked as offloaded when should not"735736# Revalidate nexthop id 1737ip nexthop replace id 1 via 192.0.2.3 dev $swp1738busywait "$TIMEOUT" wait_for_offload \739ip nexthop show id 10740check_err $? "nexthop group not marked as offloaded after revalidating nexthop"741742log_test "nexthop group objects offload indication"743744ip neigh del 2001:db8:1::2 dev $swp1745ip neigh del 192.0.2.3 dev $swp1746ip neigh del 192.0.2.2 dev $swp1747ip nexthop del id 10748ip nexthop del id 2749ip nexthop del id 1750751simple_if_fini $swp2752simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64753}754755nexthop_obj_bucket_offload_test()756{757# Test offload indication of nexthop buckets758RET=0759760simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64761simple_if_init $swp2762setup_wait763764ip nexthop add id 1 via 192.0.2.2 dev $swp1765ip nexthop add id 2 via 2001:db8:1::2 dev $swp1766ip nexthop add id 10 group 1/2 type resilient buckets 32 idle_timer 0767ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \768dev $swp1769ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \770dev $swp1771ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \772dev $swp1773774busywait "$TIMEOUT" wait_for_offload \775ip nexthop bucket show nhid 1776check_err $? "IPv4 nexthop buckets not marked as offloaded when should"777busywait "$TIMEOUT" wait_for_offload \778ip nexthop bucket show nhid 2779check_err $? "IPv6 nexthop buckets not marked as offloaded when should"780781# Invalidate nexthop id 1782ip neigh replace 192.0.2.2 nud failed dev $swp1783busywait "$TIMEOUT" wait_for_trap \784ip nexthop bucket show nhid 1785check_err $? "IPv4 nexthop buckets not marked with trap when should"786787# Invalidate nexthop id 2788ip neigh replace 2001:db8:1::2 nud failed dev $swp1789busywait "$TIMEOUT" wait_for_trap \790ip nexthop bucket show nhid 2791check_err $? "IPv6 nexthop buckets not marked with trap when should"792793# Revalidate nexthop id 1 by changing its configuration794ip nexthop replace id 1 via 192.0.2.3 dev $swp1795busywait "$TIMEOUT" wait_for_offload \796ip nexthop bucket show nhid 1797check_err $? "nexthop bucket not marked as offloaded after revalidating nexthop"798799# Revalidate nexthop id 2 by changing its neighbour800ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \801dev $swp1802busywait "$TIMEOUT" wait_for_offload \803ip nexthop bucket show nhid 2804check_err $? "nexthop bucket not marked as offloaded after revalidating neighbour"805806log_test "nexthop bucket offload indication"807808ip neigh del 2001:db8:1::2 dev $swp1809ip neigh del 192.0.2.3 dev $swp1810ip neigh del 192.0.2.2 dev $swp1811ip nexthop del id 10812ip nexthop del id 2813ip nexthop del id 1814815simple_if_fini $swp2816simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64817}818819nexthop_obj_blackhole_offload_test()820{821# Test offload indication of blackhole nexthop objects822RET=0823824ip nexthop add id 1 blackhole825busywait "$TIMEOUT" wait_for_offload \826ip nexthop show id 1827check_err $? "Blackhole nexthop not marked as offloaded when should"828829ip nexthop add id 10 group 1830busywait "$TIMEOUT" wait_for_offload \831ip nexthop show id 10832check_err $? "Nexthop group not marked as offloaded when should"833834log_test "blackhole nexthop objects offload indication"835836ip nexthop del id 10837ip nexthop del id 1838}839840nexthop_obj_route_offload_test()841{842# Test offload indication of routes using nexthop objects843RET=0844845simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64846simple_if_init $swp2847setup_wait848849ip nexthop add id 1 via 192.0.2.2 dev $swp1850ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \851dev $swp1852ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \853dev $swp1854855ip route replace 198.51.100.0/24 nhid 1856busywait "$TIMEOUT" wait_for_offload \857ip route show 198.51.100.0/24858check_err $? "route not marked as offloaded when using valid nexthop"859860ip nexthop replace id 1 via 192.0.2.3 dev $swp1861busywait "$TIMEOUT" wait_for_offload \862ip route show 198.51.100.0/24863check_err $? "route not marked as offloaded after replacing valid nexthop with a valid one"864865ip nexthop replace id 1 via 192.0.2.4 dev $swp1866busywait "$TIMEOUT" not wait_for_offload \867ip route show 198.51.100.0/24868check_err $? "route marked as offloaded after replacing valid nexthop with an invalid one"869870ip nexthop replace id 1 via 192.0.2.2 dev $swp1871busywait "$TIMEOUT" wait_for_offload \872ip route show 198.51.100.0/24873check_err $? "route not marked as offloaded after replacing invalid nexthop with a valid one"874875log_test "routes using nexthop objects offload indication"876877ip route del 198.51.100.0/24878ip neigh del 192.0.2.3 dev $swp1879ip neigh del 192.0.2.2 dev $swp1880ip nexthop del id 1881882simple_if_fini $swp2883simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64884}885886bridge_locked_port_test()887{888RET=0889890ip link add name br1 up type bridge vlan_filtering 0891892ip link add link $swp1 name $swp1.10 type vlan id 10893ip link set dev $swp1.10 master br1894895bridge link set dev $swp1.10 locked on896check_fail $? "managed to set locked flag on a VLAN upper"897898ip link set dev $swp1.10 nomaster899ip link set dev $swp1 master br1900901bridge link set dev $swp1 locked on902check_fail $? "managed to set locked flag on a bridge port that has a VLAN upper"903904ip link del dev $swp1.10905bridge link set dev $swp1 locked on906907ip link add link $swp1 name $swp1.10 type vlan id 10908check_fail $? "managed to configure a VLAN upper on a locked port"909910log_test "bridge locked port"911912ip link del dev $swp1.10 &> /dev/null913ip link del dev br1914}915916devlink_reload_test()917{918# Test that after executing all the above configuration tests, a919# devlink reload can be performed without errors920RET=0921922devlink_reload923924log_test "devlink reload - last test"925}926927trap cleanup EXIT928929setup_prepare930setup_wait931932tests_run933934exit $EXIT_STATUS935936937