xref: /openbmc/linux/tools/testing/selftests/drivers/net/mlxsw/rtnetlink.sh (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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