brintos

brintos / linux-shallow public Read only

0
0
Text · 27.1 KiB · 893a693 Raw
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