942 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test various interface configuration scenarios. Observe that configurations5# deemed valid by mlxsw succeed, invalid configurations fail and that no traces6# are produced. To prevent the test from passing in case traces are produced,7# the user can set the 'kernel.panic_on_warn' and 'kernel.panic_on_oops'8# sysctls in its environment.9 10lib_dir=$(dirname $0)/../../../net/forwarding11 12ALL_TESTS="13 rif_vrf_set_addr_test14 rif_non_inherit_bridge_addr_test15 vlan_interface_deletion_test16 bridge_deletion_test17 bridge_vlan_flags_test18 vlan_1_test19 duplicate_vlans_test20 vlan_rif_refcount_test21 subport_rif_refcount_test22 subport_rif_lag_join_test23 vlan_dev_deletion_test24 lag_unlink_slaves_test25 lag_dev_deletion_test26 vlan_interface_uppers_test27 bridge_extern_learn_test28 neigh_offload_test29 nexthop_offload_test30 nexthop_obj_invalid_test31 nexthop_obj_offload_test32 nexthop_obj_group_offload_test33 nexthop_obj_bucket_offload_test34 nexthop_obj_blackhole_offload_test35 nexthop_obj_route_offload_test36 bridge_locked_port_test37 devlink_reload_test38"39NUM_NETIFS=240: ${TIMEOUT:=20000} # ms41source $lib_dir/lib.sh42source $lib_dir/devlink_lib.sh43 44setup_prepare()45{46 swp1=${NETIFS[p1]}47 swp2=${NETIFS[p2]}48 49 ip link set dev $swp1 up50 ip link set dev $swp2 up51}52 53cleanup()54{55 pre_cleanup56 57 ip link set dev $swp2 down58 ip link set dev $swp1 down59}60 61rif_vrf_set_addr_test()62{63 # Test that it is possible to set an IP address on a VRF upper despite64 # its random MAC address.65 RET=066 67 ip link add name vrf-test type vrf table 1068 ip link set dev $swp1 master vrf-test69 70 ip -4 address add 192.0.2.1/24 dev vrf-test71 check_err $? "failed to set IPv4 address on VRF"72 ip -6 address add 2001:db8:1::1/64 dev vrf-test73 check_err $? "failed to set IPv6 address on VRF"74 75 log_test "RIF - setting IP address on VRF"76 77 ip link del dev vrf-test78}79 80rif_non_inherit_bridge_addr_test()81{82 local swp2_mac=$(mac_get $swp2)83 84 RET=085 86 # Create first RIF87 ip addr add dev $swp1 192.0.2.1/2888 check_err $?89 90 # Create a FID RIF91 ip link add name br1 up type bridge vlan_filtering 092 ip link set dev br1 addr $swp2_mac93 ip link set dev $swp2 master br194 ip addr add dev br1 192.0.2.17/2895 check_err $?96 97 # Prepare a device with a low MAC address98 ip link add name d up type dummy99 ip link set dev d addr 00:11:22:33:44:55100 101 # Attach the device to br1. Since the bridge address was set, it should102 # work.103 ip link set dev d master br1 &>/dev/null104 check_err $? "Could not attach a device with low MAC to a bridge with RIF"105 106 # Port MAC address change should be allowed for a bridge with set MAC.107 ip link set dev $swp2 addr 00:11:22:33:44:55108 check_err $? "Changing swp2's MAC address not permitted"109 110 log_test "RIF - attach port with bad MAC to bridge with set MAC"111 112 ip link set dev $swp2 addr $swp2_mac113 ip link del dev d114 ip link del dev br1115 ip addr del dev $swp1 192.0.2.1/28116}117 118vlan_interface_deletion_test()119{120 # Test that when a VLAN interface is deleted, its associated router121 # interface (RIF) is correctly deleted and not leaked. See commit122 # c360867ec46a ("mlxsw: spectrum: Delete RIF when VLAN device is123 # removed") for more details124 RET=0125 126 ip link add name br0 type bridge vlan_filtering 1127 ip link set dev $swp1 master br0128 129 ip link add link br0 name br0.10 type vlan id 10130 ip -6 address add 2001:db8:1::1/64 dev br0.10131 ip link del dev br0.10132 133 # If we leaked the previous RIF, then this should produce a trace134 ip link add link br0 name br0.20 type vlan id 20135 ip -6 address add 2001:db8:1::1/64 dev br0.20136 ip link del dev br0.20137 138 log_test "vlan interface deletion"139 140 ip link del dev br0141}142 143bridge_deletion_test()144{145 # Test that when a bridge with VLAN interfaces is deleted, we correctly146 # delete the associated RIFs. See commit 602b74eda813 ("mlxsw:147 # spectrum_switchdev: Do not leak RIFs when removing bridge") for more148 # details149 RET=0150 151 ip link add name br0 type bridge vlan_filtering 1152 ip link set dev $swp1 master br0153 ip -6 address add 2001:db8::1/64 dev br0154 155 ip link add link br0 name br0.10 type vlan id 10156 ip -6 address add 2001:db8:1::1/64 dev br0.10157 158 ip link add link br0 name br0.20 type vlan id 20159 ip -6 address add 2001:db8:2::1/64 dev br0.20160 161 ip link del dev br0162 163 # If we leaked previous RIFs, then this should produce a trace164 ip -6 address add 2001:db8:1::1/64 dev $swp1165 ip -6 address del 2001:db8:1::1/64 dev $swp1166 167 log_test "bridge deletion"168}169 170bridge_vlan_flags_test()171{172 # Test that when bridge VLAN flags are toggled, we do not take173 # unnecessary references on related structs. See commit 9e25826ffc94174 # ("mlxsw: spectrum_switchdev: Fix port_vlan refcounting") for more175 # details176 RET=0177 178 ip link add name br0 type bridge vlan_filtering 1179 ip link set dev $swp1 master br0180 181 bridge vlan add vid 10 dev $swp1 pvid untagged182 bridge vlan add vid 10 dev $swp1 untagged183 bridge vlan add vid 10 dev $swp1 pvid184 bridge vlan add vid 10 dev $swp1185 ip link del dev br0186 187 # If we did not handle references correctly, then this should produce a188 # trace189 devlink dev reload "$DEVLINK_DEV"190 191 # Allow netdevices to be re-created following the reload192 sleep 20193 194 log_test "bridge vlan flags"195}196 197vlan_1_test()198{199 # Test that VLAN 1 can be configured over mlxsw ports. In the past it200 # was used internally for untagged traffic. See commit 47bf9df2e820201 # ("mlxsw: spectrum: Forbid creation of VLAN 1 over port/LAG") for more202 # details203 RET=0204 205 ip link add link $swp1 name $swp1.1 type vlan id 1206 check_err $? "did not manage to create vlan 1 when should"207 208 log_test "vlan 1"209 210 ip link del dev $swp1.1211}212 213duplicate_vlans_test()214{215 # Test that on a given port a VLAN is only used once. Either as VLAN216 # in a VLAN-aware bridge or as a VLAN device217 RET=0218 219 ip link add name br0 type bridge vlan_filtering 1220 ip link set dev $swp1 master br0221 bridge vlan add vid 10 dev $swp1222 223 ip link add link $swp1 name $swp1.10 type vlan id 10 &> /dev/null224 check_fail $? "managed to create vlan device when should not"225 226 bridge vlan del vid 10 dev $swp1227 ip link add link $swp1 name $swp1.10 type vlan id 10228 check_err $? "did not manage to create vlan device when should"229 bridge vlan add vid 10 dev $swp1 &> /dev/null230 check_fail $? "managed to add bridge vlan when should not"231 232 log_test "duplicate vlans"233 234 ip link del dev $swp1.10235 ip link del dev br0236}237 238vlan_rif_refcount_test()239{240 # Test that RIFs representing VLAN interfaces are not affected from241 # ports member in the VLAN. We use the offload indication on routes242 # configured on the RIF to understand if it was created / destroyed243 RET=0244 245 ip link add name br0 type bridge vlan_filtering 1246 ip link set dev $swp1 master br0247 248 ip link set dev $swp1 up249 ip link set dev br0 up250 251 ip link add link br0 name br0.10 up type vlan id 10252 ip -6 address add 2001:db8:1::1/64 dev br0.10253 254 busywait "$TIMEOUT" wait_for_offload \255 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10256 check_err $? "vlan rif was not created before adding port to vlan"257 258 bridge vlan add vid 10 dev $swp1259 busywait "$TIMEOUT" wait_for_offload \260 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10261 check_err $? "vlan rif was destroyed after adding port to vlan"262 263 bridge vlan del vid 10 dev $swp1264 busywait "$TIMEOUT" wait_for_offload \265 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10266 check_err $? "vlan rif was destroyed after removing port from vlan"267 268 ip link set dev $swp1 nomaster269 busywait "$TIMEOUT" not wait_for_offload \270 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10271 check_err $? "vlan rif was not destroyed after unlinking port from bridge"272 273 log_test "vlan rif refcount"274 275 ip link del dev br0.10276 ip link set dev $swp1 down277 ip link del dev br0278}279 280subport_rif_refcount_test()281{282 # Test that RIFs representing upper devices of physical ports are283 # reference counted correctly and destroyed when should. We use the284 # offload indication on routes configured on the RIF to understand if285 # it was created / destroyed286 RET=0287 288 ip link add name bond1 type bond mode 802.3ad289 ip link set dev $swp1 down290 ip link set dev $swp2 down291 ip link set dev $swp1 master bond1292 ip link set dev $swp2 master bond1293 294 ip link set dev bond1 up295 ip link add link bond1 name bond1.10 up type vlan id 10296 ip -6 address add 2001:db8:1::1/64 dev bond1297 ip -6 address add 2001:db8:2::1/64 dev bond1.10298 299 busywait "$TIMEOUT" wait_for_offload \300 ip -6 route get fibmatch 2001:db8:1::2 dev bond1301 check_err $? "subport rif was not created on lag device"302 busywait "$TIMEOUT" wait_for_offload \303 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10304 check_err $? "subport rif was not created on vlan device"305 306 ip link set dev $swp1 nomaster307 busywait "$TIMEOUT" wait_for_offload \308 ip -6 route get fibmatch 2001:db8:1::2 dev bond1309 check_err $? "subport rif of lag device was destroyed when should not"310 busywait "$TIMEOUT" wait_for_offload \311 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10312 check_err $? "subport rif of vlan device was destroyed when should not"313 314 ip link set dev $swp2 nomaster315 busywait "$TIMEOUT" not wait_for_offload \316 ip -6 route get fibmatch 2001:db8:1::2 dev bond1317 check_err $? "subport rif of lag device was not destroyed when should"318 busywait "$TIMEOUT" not wait_for_offload \319 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10320 check_err $? "subport rif of vlan device was not destroyed when should"321 322 log_test "subport rif refcount"323 324 ip link del dev bond1.10325 ip link del dev bond1326}327 328subport_rif_lag_join_test()329{330 # Test that the reference count of a RIF configured for a LAG is331 # incremented / decremented when ports join / leave the LAG. We use the332 # offload indication on routes configured on the RIF to understand if333 # it was created / destroyed334 RET=0335 336 ip link add name bond1 type bond mode 802.3ad337 ip link set dev $swp1 down338 ip link set dev $swp2 down339 ip link set dev $swp1 master bond1340 ip link set dev $swp2 master bond1341 342 ip link set dev bond1 up343 ip -6 address add 2001:db8:1::1/64 dev bond1344 345 busywait "$TIMEOUT" wait_for_offload \346 ip -6 route get fibmatch 2001:db8:1::2 dev bond1347 check_err $? "subport rif was not created on lag device"348 349 ip link set dev $swp1 nomaster350 busywait "$TIMEOUT" wait_for_offload \351 ip -6 route get fibmatch 2001:db8:1::2 dev bond1352 check_err $? "subport rif of lag device was destroyed after removing one port"353 354 ip link set dev $swp1 master bond1355 ip link set dev $swp2 nomaster356 busywait "$TIMEOUT" wait_for_offload \357 ip -6 route get fibmatch 2001:db8:1::2 dev bond1358 check_err $? "subport rif of lag device was destroyed after re-adding a port and removing another"359 360 ip link set dev $swp1 nomaster361 busywait "$TIMEOUT" not wait_for_offload \362 ip -6 route get fibmatch 2001:db8:1::2 dev bond1363 check_err $? "subport rif of lag device was not destroyed when should"364 365 log_test "subport rif lag join"366 367 ip link del dev bond1368}369 370vlan_dev_deletion_test()371{372 # Test that VLAN devices are correctly deleted / unlinked when enslaved373 # to bridge374 RET=0375 376 ip link add name br10 type bridge377 ip link add name br20 type bridge378 ip link add name br30 type bridge379 ip link add link $swp1 name $swp1.10 type vlan id 10380 ip link add link $swp1 name $swp1.20 type vlan id 20381 ip link add link $swp1 name $swp1.30 type vlan id 30382 ip link set dev $swp1.10 master br10383 ip link set dev $swp1.20 master br20384 ip link set dev $swp1.30 master br30385 386 # If we did not handle the situation correctly, then these operations387 # might produce a trace388 ip link set dev $swp1.30 nomaster389 ip link del dev $swp1.20390 # Deletion via ioctl uses different code paths from netlink391 vconfig rem $swp1.10 &> /dev/null392 393 log_test "vlan device deletion"394 395 ip link del dev $swp1.30396 ip link del dev br30397 ip link del dev br20398 ip link del dev br10399}400 401lag_create()402{403 ip link add name bond1 type bond mode 802.3ad404 ip link set dev $swp1 down405 ip link set dev $swp2 down406 ip link set dev $swp1 master bond1407 ip link set dev $swp2 master bond1408 409 ip link add link bond1 name bond1.10 type vlan id 10410 ip link add link bond1 name bond1.20 type vlan id 20411 412 ip link add name br0 type bridge vlan_filtering 1413 ip link set dev bond1 master br0414 415 ip link add name br10 type bridge416 ip link set dev bond1.10 master br10417 418 ip link add name br20 type bridge419 ip link set dev bond1.20 master br20420}421 422lag_unlink_slaves_test()423{424 # Test that ports are correctly unlinked from their LAG master, when425 # the LAG and its VLAN uppers are enslaved to bridges426 RET=0427 428 lag_create429 430 ip link set dev $swp1 nomaster431 check_err $? "lag slave $swp1 was not unlinked from master"432 ip link set dev $swp2 nomaster433 check_err $? "lag slave $swp2 was not unlinked from master"434 435 # Try to configure corresponding VLANs as router interfaces436 ip -6 address add 2001:db8:1::1/64 dev $swp1437 check_err $? "failed to configure ip address on $swp1"438 439 ip link add link $swp1 name $swp1.10 type vlan id 10440 ip -6 address add 2001:db8:10::1/64 dev $swp1.10441 check_err $? "failed to configure ip address on $swp1.10"442 443 ip link add link $swp1 name $swp1.20 type vlan id 20444 ip -6 address add 2001:db8:20::1/64 dev $swp1.20445 check_err $? "failed to configure ip address on $swp1.20"446 447 log_test "lag slaves unlinking"448 449 ip link del dev $swp1.20450 ip link del dev $swp1.10451 ip address flush dev $swp1452 453 ip link del dev br20454 ip link del dev br10455 ip link del dev br0456 ip link del dev bond1457}458 459lag_dev_deletion_test()460{461 # Test that LAG device is correctly deleted, when the LAG and its VLAN462 # uppers are enslaved to bridges463 RET=0464 465 lag_create466 467 ip link del dev bond1468 469 log_test "lag device deletion"470 471 ip link del dev br20472 ip link del dev br10473 ip link del dev br0474}475 476vlan_interface_uppers_test()477{478 # Test that uppers of a VLAN interface are correctly sanitized479 RET=0480 481 ip link add name br0 type bridge vlan_filtering 1482 ip link set dev $swp1 master br0483 484 ip link add link br0 name br0.10 type vlan id 10485 486 ip -6 address add 2001:db8:1::1/64 dev br0.10487 ip link add link br0.10 name macvlan0 type macvlan mode private488 check_err $? "did not manage to create a macvlan when should"489 490 ip link del dev macvlan0491 492 ip link add name vrf-test type vrf table 10493 ip link set dev br0.10 master vrf-test494 check_err $? "did not manage to enslave vlan interface to vrf"495 ip link del dev vrf-test496 497 ip link add name br-test type bridge498 ip link set dev br0.10 master br-test &> /dev/null499 check_fail $? "managed to enslave vlan interface to bridge when should not"500 ip link del dev br-test501 502 log_test "vlan interface uppers"503 504 ip link del dev br0505}506 507bridge_extern_learn_test()508{509 # Test that externally learned entries added from user space are510 # marked as offloaded511 RET=0512 513 ip link add name br0 type bridge514 ip link set dev $swp1 master br0515 516 bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn517 518 busywait "$TIMEOUT" wait_for_offload \519 bridge fdb show brport $swp1 de:ad:be:ef:13:37520 check_err $? "fdb entry not marked as offloaded when should"521 522 log_test "externally learned fdb entry"523 524 ip link del dev br0525}526 527neigh_offload_test()528{529 # Test that IPv4 and IPv6 neighbour entries are marked as offloaded530 RET=0531 532 ip -4 address add 192.0.2.1/24 dev $swp1533 ip -6 address add 2001:db8:1::1/64 dev $swp1534 535 ip -4 neigh add 192.0.2.2 lladdr de:ad:be:ef:13:37 nud perm dev $swp1536 ip -6 neigh add 2001:db8:1::2 lladdr de:ad:be:ef:13:37 nud perm \537 dev $swp1538 539 busywait "$TIMEOUT" wait_for_offload \540 ip -4 neigh show dev $swp1 192.0.2.2541 check_err $? "ipv4 neigh entry not marked as offloaded when should"542 busywait "$TIMEOUT" wait_for_offload \543 ip -6 neigh show dev $swp1 2001:db8:1::2544 check_err $? "ipv6 neigh entry not marked as offloaded when should"545 546 log_test "neighbour offload indication"547 548 ip -6 neigh del 2001:db8:1::2 dev $swp1549 ip -4 neigh del 192.0.2.2 dev $swp1550 ip -6 address del 2001:db8:1::1/64 dev $swp1551 ip -4 address del 192.0.2.1/24 dev $swp1552}553 554nexthop_offload_test()555{556 # Test that IPv4 and IPv6 nexthops are marked as offloaded557 RET=0558 559 sysctl_set net.ipv6.conf.$swp2.keep_addr_on_down 1560 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64561 simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64562 setup_wait563 564 ip -4 route add 198.51.100.0/24 vrf v$swp1 \565 nexthop via 192.0.2.2 dev $swp1566 ip -6 route add 2001:db8:2::/64 vrf v$swp1 \567 nexthop via 2001:db8:1::2 dev $swp1568 569 busywait "$TIMEOUT" wait_for_offload \570 ip -4 route show 198.51.100.0/24 vrf v$swp1571 check_err $? "ipv4 nexthop not marked as offloaded when should"572 busywait "$TIMEOUT" wait_for_offload \573 ip -6 route show 2001:db8:2::/64 vrf v$swp1574 check_err $? "ipv6 nexthop not marked as offloaded when should"575 576 ip link set dev $swp2 down577 sleep 1578 579 busywait "$TIMEOUT" not wait_for_offload \580 ip -4 route show 198.51.100.0/24 vrf v$swp1581 check_err $? "ipv4 nexthop marked as offloaded when should not"582 busywait "$TIMEOUT" not wait_for_offload \583 ip -6 route show 2001:db8:2::/64 vrf v$swp1584 check_err $? "ipv6 nexthop marked as offloaded when should not"585 586 ip link set dev $swp2 up587 setup_wait588 589 busywait "$TIMEOUT" wait_for_offload \590 ip -4 route show 198.51.100.0/24 vrf v$swp1591 check_err $? "ipv4 nexthop not marked as offloaded after neigh add"592 busywait "$TIMEOUT" wait_for_offload \593 ip -6 route show 2001:db8:2::/64 vrf v$swp1594 check_err $? "ipv6 nexthop not marked as offloaded after neigh add"595 596 log_test "nexthop offload indication"597 598 ip -6 route del 2001:db8:2::/64 vrf v$swp1599 ip -4 route del 198.51.100.0/24 vrf v$swp1600 601 simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64602 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64603 sysctl_restore net.ipv6.conf.$swp2.keep_addr_on_down604}605 606nexthop_obj_invalid_test()607{608 # Test that invalid nexthop object configurations are rejected609 RET=0610 611 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64612 simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64613 setup_wait614 615 ip nexthop add id 1 via 192.0.2.3 fdb616 check_fail $? "managed to configure an FDB nexthop when should not"617 618 ip nexthop add id 1 encap mpls 200/300 via 192.0.2.3 dev $swp1619 check_fail $? "managed to configure a nexthop with MPLS encap when should not"620 621 ip nexthop add id 1 dev $swp1622 ip nexthop add id 2 dev $swp1623 ip nexthop add id 3 via 192.0.2.3 dev $swp1624 ip nexthop add id 10 group 1/2625 check_fail $? "managed to configure a nexthop group with device-only nexthops when should not"626 627 ip nexthop add id 10 group 3 type resilient buckets 7628 check_fail $? "managed to configure a too small resilient nexthop group when should not"629 630 ip nexthop add id 10 group 3 type resilient buckets 129631 check_fail $? "managed to configure a resilient nexthop group with invalid number of buckets when should not"632 633 ip nexthop add id 10 group 1/2 type resilient buckets 32634 check_fail $? "managed to configure a resilient nexthop group with device-only nexthops when should not"635 636 ip nexthop add id 10 group 3 type resilient buckets 32637 check_err $? "failed to configure a valid resilient nexthop group"638 ip nexthop replace id 3 dev $swp1639 check_fail $? "managed to populate a nexthop bucket with a device-only nexthop when should not"640 641 log_test "nexthop objects - invalid configurations"642 643 ip nexthop del id 10644 ip nexthop del id 3645 ip nexthop del id 2646 ip nexthop del id 1647 648 simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64649 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64650}651 652nexthop_obj_offload_test()653{654 # Test offload indication of nexthop objects655 RET=0656 657 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64658 simple_if_init $swp2659 setup_wait660 661 ip nexthop add id 1 via 192.0.2.2 dev $swp1662 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \663 dev $swp1664 665 busywait "$TIMEOUT" wait_for_offload \666 ip nexthop show id 1667 check_err $? "nexthop not marked as offloaded when should"668 669 ip neigh replace 192.0.2.2 nud failed dev $swp1670 busywait "$TIMEOUT" not wait_for_offload \671 ip nexthop show id 1672 check_err $? "nexthop marked as offloaded after setting neigh to failed state"673 674 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \675 dev $swp1676 busywait "$TIMEOUT" wait_for_offload \677 ip nexthop show id 1678 check_err $? "nexthop not marked as offloaded after neigh replace"679 680 ip nexthop replace id 1 via 192.0.2.3 dev $swp1681 busywait "$TIMEOUT" not wait_for_offload \682 ip nexthop show id 1683 check_err $? "nexthop marked as offloaded after replacing to use an invalid address"684 685 ip nexthop replace id 1 via 192.0.2.2 dev $swp1686 busywait "$TIMEOUT" wait_for_offload \687 ip nexthop show id 1688 check_err $? "nexthop not marked as offloaded after replacing to use a valid address"689 690 log_test "nexthop objects offload indication"691 692 ip neigh del 192.0.2.2 dev $swp1693 ip nexthop del id 1694 695 simple_if_fini $swp2696 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64697}698 699nexthop_obj_group_offload_test()700{701 # Test offload indication of nexthop group objects702 RET=0703 704 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64705 simple_if_init $swp2706 setup_wait707 708 ip nexthop add id 1 via 192.0.2.2 dev $swp1709 ip nexthop add id 2 via 2001:db8:1::2 dev $swp1710 ip nexthop add id 10 group 1/2711 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \712 dev $swp1713 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \714 dev $swp1715 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \716 dev $swp1717 718 busywait "$TIMEOUT" wait_for_offload \719 ip nexthop show id 1720 check_err $? "IPv4 nexthop not marked as offloaded when should"721 busywait "$TIMEOUT" wait_for_offload \722 ip nexthop show id 2723 check_err $? "IPv6 nexthop not marked as offloaded when should"724 busywait "$TIMEOUT" wait_for_offload \725 ip nexthop show id 10726 check_err $? "nexthop group not marked as offloaded when should"727 728 # Invalidate nexthop id 1729 ip neigh replace 192.0.2.2 nud failed dev $swp1730 busywait "$TIMEOUT" not wait_for_offload \731 ip nexthop show id 10732 check_fail $? "nexthop group not marked as offloaded with one valid nexthop"733 734 # Invalidate nexthop id 2735 ip neigh replace 2001:db8:1::2 nud failed dev $swp1736 busywait "$TIMEOUT" not wait_for_offload \737 ip nexthop show id 10738 check_err $? "nexthop group marked as offloaded when should not"739 740 # Revalidate nexthop id 1741 ip nexthop replace id 1 via 192.0.2.3 dev $swp1742 busywait "$TIMEOUT" wait_for_offload \743 ip nexthop show id 10744 check_err $? "nexthop group not marked as offloaded after revalidating nexthop"745 746 log_test "nexthop group objects offload indication"747 748 ip neigh del 2001:db8:1::2 dev $swp1749 ip neigh del 192.0.2.3 dev $swp1750 ip neigh del 192.0.2.2 dev $swp1751 ip nexthop del id 10752 ip nexthop del id 2753 ip nexthop del id 1754 755 simple_if_fini $swp2756 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64757}758 759nexthop_obj_bucket_offload_test()760{761 # Test offload indication of nexthop buckets762 RET=0763 764 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64765 simple_if_init $swp2766 setup_wait767 768 ip nexthop add id 1 via 192.0.2.2 dev $swp1769 ip nexthop add id 2 via 2001:db8:1::2 dev $swp1770 ip nexthop add id 10 group 1/2 type resilient buckets 32 idle_timer 0771 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \772 dev $swp1773 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \774 dev $swp1775 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \776 dev $swp1777 778 busywait "$TIMEOUT" wait_for_offload \779 ip nexthop bucket show nhid 1780 check_err $? "IPv4 nexthop buckets not marked as offloaded when should"781 busywait "$TIMEOUT" wait_for_offload \782 ip nexthop bucket show nhid 2783 check_err $? "IPv6 nexthop buckets not marked as offloaded when should"784 785 # Invalidate nexthop id 1786 ip neigh replace 192.0.2.2 nud failed dev $swp1787 busywait "$TIMEOUT" wait_for_trap \788 ip nexthop bucket show nhid 1789 check_err $? "IPv4 nexthop buckets not marked with trap when should"790 791 # Invalidate nexthop id 2792 ip neigh replace 2001:db8:1::2 nud failed dev $swp1793 busywait "$TIMEOUT" wait_for_trap \794 ip nexthop bucket show nhid 2795 check_err $? "IPv6 nexthop buckets not marked with trap when should"796 797 # Revalidate nexthop id 1 by changing its configuration798 ip nexthop replace id 1 via 192.0.2.3 dev $swp1799 busywait "$TIMEOUT" wait_for_offload \800 ip nexthop bucket show nhid 1801 check_err $? "nexthop bucket not marked as offloaded after revalidating nexthop"802 803 # Revalidate nexthop id 2 by changing its neighbour804 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \805 dev $swp1806 busywait "$TIMEOUT" wait_for_offload \807 ip nexthop bucket show nhid 2808 check_err $? "nexthop bucket not marked as offloaded after revalidating neighbour"809 810 log_test "nexthop bucket offload indication"811 812 ip neigh del 2001:db8:1::2 dev $swp1813 ip neigh del 192.0.2.3 dev $swp1814 ip neigh del 192.0.2.2 dev $swp1815 ip nexthop del id 10816 ip nexthop del id 2817 ip nexthop del id 1818 819 simple_if_fini $swp2820 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64821}822 823nexthop_obj_blackhole_offload_test()824{825 # Test offload indication of blackhole nexthop objects826 RET=0827 828 ip nexthop add id 1 blackhole829 busywait "$TIMEOUT" wait_for_offload \830 ip nexthop show id 1831 check_err $? "Blackhole nexthop not marked as offloaded when should"832 833 ip nexthop add id 10 group 1834 busywait "$TIMEOUT" wait_for_offload \835 ip nexthop show id 10836 check_err $? "Nexthop group not marked as offloaded when should"837 838 log_test "blackhole nexthop objects offload indication"839 840 ip nexthop del id 10841 ip nexthop del id 1842}843 844nexthop_obj_route_offload_test()845{846 # Test offload indication of routes using nexthop objects847 RET=0848 849 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64850 simple_if_init $swp2851 setup_wait852 853 ip nexthop add id 1 via 192.0.2.2 dev $swp1854 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \855 dev $swp1856 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \857 dev $swp1858 859 ip route replace 198.51.100.0/24 nhid 1860 busywait "$TIMEOUT" wait_for_offload \861 ip route show 198.51.100.0/24862 check_err $? "route not marked as offloaded when using valid nexthop"863 864 ip nexthop replace id 1 via 192.0.2.3 dev $swp1865 busywait "$TIMEOUT" wait_for_offload \866 ip route show 198.51.100.0/24867 check_err $? "route not marked as offloaded after replacing valid nexthop with a valid one"868 869 ip nexthop replace id 1 via 192.0.2.4 dev $swp1870 busywait "$TIMEOUT" not wait_for_offload \871 ip route show 198.51.100.0/24872 check_err $? "route marked as offloaded after replacing valid nexthop with an invalid one"873 874 ip nexthop replace id 1 via 192.0.2.2 dev $swp1875 busywait "$TIMEOUT" wait_for_offload \876 ip route show 198.51.100.0/24877 check_err $? "route not marked as offloaded after replacing invalid nexthop with a valid one"878 879 log_test "routes using nexthop objects offload indication"880 881 ip route del 198.51.100.0/24882 ip neigh del 192.0.2.3 dev $swp1883 ip neigh del 192.0.2.2 dev $swp1884 ip nexthop del id 1885 886 simple_if_fini $swp2887 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64888}889 890bridge_locked_port_test()891{892 RET=0893 894 ip link add name br1 up type bridge vlan_filtering 0895 896 ip link add link $swp1 name $swp1.10 type vlan id 10897 ip link set dev $swp1.10 master br1898 899 bridge link set dev $swp1.10 locked on900 check_fail $? "managed to set locked flag on a VLAN upper"901 902 ip link set dev $swp1.10 nomaster903 ip link set dev $swp1 master br1904 905 bridge link set dev $swp1 locked on906 check_fail $? "managed to set locked flag on a bridge port that has a VLAN upper"907 908 ip link del dev $swp1.10909 bridge link set dev $swp1 locked on910 911 ip link add link $swp1 name $swp1.10 type vlan id 10912 check_fail $? "managed to configure a VLAN upper on a locked port"913 914 log_test "bridge locked port"915 916 ip link del dev $swp1.10 &> /dev/null917 ip link del dev br1918}919 920devlink_reload_test()921{922 # Test that after executing all the above configuration tests, a923 # devlink reload can be performed without errors924 RET=0925 926 devlink dev reload "$DEVLINK_DEV"927 check_err $? "devlink reload failed"928 929 log_test "devlink reload - last test"930 931 sleep 20932}933 934trap cleanup EXIT935 936setup_prepare937setup_wait938 939tests_run940 941exit $EXIT_STATUS942