~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/drivers/net/mlxsw/rtnetlink.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 #
  4 # Test various interface configuration scenarios. Observe that configurations
  5 # deemed valid by mlxsw succeed, invalid configurations fail and that no traces
  6 # 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 
 10 lib_dir=$(dirname $0)/../../../net/forwarding
 11 
 12 ALL_TESTS="
 13         rif_vrf_set_addr_test
 14         rif_non_inherit_bridge_addr_test
 15         vlan_interface_deletion_test
 16         bridge_deletion_test
 17         bridge_vlan_flags_test
 18         vlan_1_test
 19         duplicate_vlans_test
 20         vlan_rif_refcount_test
 21         subport_rif_refcount_test
 22         subport_rif_lag_join_test
 23         vlan_dev_deletion_test
 24         lag_unlink_slaves_test
 25         lag_dev_deletion_test
 26         vlan_interface_uppers_test
 27         bridge_extern_learn_test
 28         neigh_offload_test
 29         nexthop_offload_test
 30         nexthop_obj_invalid_test
 31         nexthop_obj_offload_test
 32         nexthop_obj_group_offload_test
 33         nexthop_obj_bucket_offload_test
 34         nexthop_obj_blackhole_offload_test
 35         nexthop_obj_route_offload_test
 36         bridge_locked_port_test
 37         devlink_reload_test
 38 "
 39 NUM_NETIFS=2
 40 : ${TIMEOUT:=20000} # ms
 41 source $lib_dir/lib.sh
 42 source $lib_dir/devlink_lib.sh
 43 
 44 setup_prepare()
 45 {
 46         swp1=${NETIFS[p1]}
 47         swp2=${NETIFS[p2]}
 48 
 49         ip link set dev $swp1 up
 50         ip link set dev $swp2 up
 51 }
 52 
 53 cleanup()
 54 {
 55         pre_cleanup
 56 
 57         ip link set dev $swp2 down
 58         ip link set dev $swp1 down
 59 }
 60 
 61 rif_vrf_set_addr_test()
 62 {
 63         # Test that it is possible to set an IP address on a VRF upper despite
 64         # its random MAC address.
 65         RET=0
 66 
 67         ip link add name vrf-test type vrf table 10
 68         ip link set dev $swp1 master vrf-test
 69 
 70         ip -4 address add 192.0.2.1/24 dev vrf-test
 71         check_err $? "failed to set IPv4 address on VRF"
 72         ip -6 address add 2001:db8:1::1/64 dev vrf-test
 73         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-test
 78 }
 79 
 80 rif_non_inherit_bridge_addr_test()
 81 {
 82         local swp2_mac=$(mac_get $swp2)
 83 
 84         RET=0
 85 
 86         # Create first RIF
 87         ip addr add dev $swp1 192.0.2.1/28
 88         check_err $?
 89 
 90         # Create a FID RIF
 91         ip link add name br1 up type bridge vlan_filtering 0
 92         ip link set dev br1 addr $swp2_mac
 93         ip link set dev $swp2 master br1
 94         ip addr add dev br1 192.0.2.17/28
 95         check_err $?
 96 
 97         # Prepare a device with a low MAC address
 98         ip link add name d up type dummy
 99         ip link set dev d addr 00:11:22:33:44:55
100 
101         # Attach the device to br1. Since the bridge address was set, it should
102         # work.
103         ip link set dev d master br1 &>/dev/null
104         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:55
108         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_mac
113         ip link del dev d
114         ip link del dev br1
115         ip addr del dev $swp1 192.0.2.1/28
116 }
117 
118 vlan_interface_deletion_test()
119 {
120         # Test that when a VLAN interface is deleted, its associated router
121         # interface (RIF) is correctly deleted and not leaked. See commit
122         # c360867ec46a ("mlxsw: spectrum: Delete RIF when VLAN device is
123         # removed") for more details
124         RET=0
125 
126         ip link add name br0 type bridge vlan_filtering 1
127         ip link set dev $swp1 master br0
128 
129         ip link add link br0 name br0.10 type vlan id 10
130         ip -6 address add 2001:db8:1::1/64 dev br0.10
131         ip link del dev br0.10
132 
133         # If we leaked the previous RIF, then this should produce a trace
134         ip link add link br0 name br0.20 type vlan id 20
135         ip -6 address add 2001:db8:1::1/64 dev br0.20
136         ip link del dev br0.20
137 
138         log_test "vlan interface deletion"
139 
140         ip link del dev br0
141 }
142 
143 bridge_deletion_test()
144 {
145         # Test that when a bridge with VLAN interfaces is deleted, we correctly
146         # delete the associated RIFs. See commit 602b74eda813 ("mlxsw:
147         # spectrum_switchdev: Do not leak RIFs when removing bridge") for more
148         # details
149         RET=0
150 
151         ip link add name br0 type bridge vlan_filtering 1
152         ip link set dev $swp1 master br0
153         ip -6 address add 2001:db8::1/64 dev br0
154 
155         ip link add link br0 name br0.10 type vlan id 10
156         ip -6 address add 2001:db8:1::1/64 dev br0.10
157 
158         ip link add link br0 name br0.20 type vlan id 20
159         ip -6 address add 2001:db8:2::1/64 dev br0.20
160 
161         ip link del dev br0
162 
163         # If we leaked previous RIFs, then this should produce a trace
164         ip -6 address add 2001:db8:1::1/64 dev $swp1
165         ip -6 address del 2001:db8:1::1/64 dev $swp1
166 
167         log_test "bridge deletion"
168 }
169 
170 bridge_vlan_flags_test()
171 {
172         # Test that when bridge VLAN flags are toggled, we do not take
173         # unnecessary references on related structs. See commit 9e25826ffc94
174         # ("mlxsw: spectrum_switchdev: Fix port_vlan refcounting") for more
175         # details
176         RET=0
177 
178         ip link add name br0 type bridge vlan_filtering 1
179         ip link set dev $swp1 master br0
180 
181         bridge vlan add vid 10 dev $swp1 pvid untagged
182         bridge vlan add vid 10 dev $swp1 untagged
183         bridge vlan add vid 10 dev $swp1 pvid
184         bridge vlan add vid 10 dev $swp1
185         ip link del dev br0
186 
187         # If we did not handle references correctly, then this should produce a
188         # trace
189         devlink dev reload "$DEVLINK_DEV"
190 
191         # Allow netdevices to be re-created following the reload
192         sleep 20
193 
194         log_test "bridge vlan flags"
195 }
196 
197 vlan_1_test()
198 {
199         # Test that VLAN 1 can be configured over mlxsw ports. In the past it
200         # was used internally for untagged traffic. See commit 47bf9df2e820
201         # ("mlxsw: spectrum: Forbid creation of VLAN 1 over port/LAG") for more
202         # details
203         RET=0
204 
205         ip link add link $swp1 name $swp1.1 type vlan id 1
206         check_err $? "did not manage to create vlan 1 when should"
207 
208         log_test "vlan 1"
209 
210         ip link del dev $swp1.1
211 }
212 
213 duplicate_vlans_test()
214 {
215         # Test that on a given port a VLAN is only used once. Either as VLAN
216         # in a VLAN-aware bridge or as a VLAN device
217         RET=0
218 
219         ip link add name br0 type bridge vlan_filtering 1
220         ip link set dev $swp1 master br0
221         bridge vlan add vid 10 dev $swp1
222 
223         ip link add link $swp1 name $swp1.10 type vlan id 10 &> /dev/null
224         check_fail $? "managed to create vlan device when should not"
225 
226         bridge vlan del vid 10 dev $swp1
227         ip link add link $swp1 name $swp1.10 type vlan id 10
228         check_err $? "did not manage to create vlan device when should"
229         bridge vlan add vid 10 dev $swp1 &> /dev/null
230         check_fail $? "managed to add bridge vlan when should not"
231 
232         log_test "duplicate vlans"
233 
234         ip link del dev $swp1.10
235         ip link del dev br0
236 }
237 
238 vlan_rif_refcount_test()
239 {
240         # Test that RIFs representing VLAN interfaces are not affected from
241         # ports member in the VLAN. We use the offload indication on routes
242         # configured on the RIF to understand if it was created / destroyed
243         RET=0
244 
245         ip link add name br0 type bridge vlan_filtering 1
246         ip link set dev $swp1 master br0
247 
248         ip link set dev $swp1 up
249         ip link set dev br0 up
250 
251         ip link add link br0 name br0.10 up type vlan id 10
252         ip -6 address add 2001:db8:1::1/64 dev br0.10
253 
254         busywait "$TIMEOUT" wait_for_offload \
255                 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
256         check_err $? "vlan rif was not created before adding port to vlan"
257 
258         bridge vlan add vid 10 dev $swp1
259         busywait "$TIMEOUT" wait_for_offload \
260                 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
261         check_err $? "vlan rif was destroyed after adding port to vlan"
262 
263         bridge vlan del vid 10 dev $swp1
264         busywait "$TIMEOUT" wait_for_offload \
265                 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
266         check_err $? "vlan rif was destroyed after removing port from vlan"
267 
268         ip link set dev $swp1 nomaster
269         busywait "$TIMEOUT" not wait_for_offload \
270                 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
271         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.10
276         ip link set dev $swp1 down
277         ip link del dev br0
278 }
279 
280 subport_rif_refcount_test()
281 {
282         # Test that RIFs representing upper devices of physical ports are
283         # reference counted correctly and destroyed when should. We use the
284         # offload indication on routes configured on the RIF to understand if
285         # it was created / destroyed
286         RET=0
287 
288         ip link add name bond1 type bond mode 802.3ad
289         ip link set dev $swp1 down
290         ip link set dev $swp2 down
291         ip link set dev $swp1 master bond1
292         ip link set dev $swp2 master bond1
293 
294         ip link set dev bond1 up
295         ip link add link bond1 name bond1.10 up type vlan id 10
296         ip -6 address add 2001:db8:1::1/64 dev bond1
297         ip -6 address add 2001:db8:2::1/64 dev bond1.10
298 
299         busywait "$TIMEOUT" wait_for_offload \
300                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
301         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.10
304         check_err $? "subport rif was not created on vlan device"
305 
306         ip link set dev $swp1 nomaster
307         busywait "$TIMEOUT" wait_for_offload \
308                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
309         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.10
312         check_err $? "subport rif of vlan device was destroyed when should not"
313 
314         ip link set dev $swp2 nomaster
315         busywait "$TIMEOUT" not wait_for_offload \
316                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
317         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.10
320         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.10
325         ip link del dev bond1
326 }
327 
328 subport_rif_lag_join_test()
329 {
330         # Test that the reference count of a RIF configured for a LAG is
331         # incremented / decremented when ports join / leave the LAG. We use the
332         # offload indication on routes configured on the RIF to understand if
333         # it was created / destroyed
334         RET=0
335 
336         ip link add name bond1 type bond mode 802.3ad
337         ip link set dev $swp1 down
338         ip link set dev $swp2 down
339         ip link set dev $swp1 master bond1
340         ip link set dev $swp2 master bond1
341 
342         ip link set dev bond1 up
343         ip -6 address add 2001:db8:1::1/64 dev bond1
344 
345         busywait "$TIMEOUT" wait_for_offload \
346                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
347         check_err $? "subport rif was not created on lag device"
348 
349         ip link set dev $swp1 nomaster
350         busywait "$TIMEOUT" wait_for_offload \
351                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
352         check_err $? "subport rif of lag device was destroyed after removing one port"
353 
354         ip link set dev $swp1 master bond1
355         ip link set dev $swp2 nomaster
356         busywait "$TIMEOUT" wait_for_offload \
357                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
358         check_err $? "subport rif of lag device was destroyed after re-adding a port and removing another"
359 
360         ip link set dev $swp1 nomaster
361         busywait "$TIMEOUT" not wait_for_offload \
362                 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
363         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 bond1
368 }
369 
370 vlan_dev_deletion_test()
371 {
372         # Test that VLAN devices are correctly deleted / unlinked when enslaved
373         # to bridge
374         RET=0
375 
376         ip link add name br10 type bridge
377         ip link add name br20 type bridge
378         ip link add name br30 type bridge
379         ip link add link $swp1 name $swp1.10 type vlan id 10
380         ip link add link $swp1 name $swp1.20 type vlan id 20
381         ip link add link $swp1 name $swp1.30 type vlan id 30
382         ip link set dev $swp1.10 master br10
383         ip link set dev $swp1.20 master br20
384         ip link set dev $swp1.30 master br30
385 
386         # If we did not handle the situation correctly, then these operations
387         # might produce a trace
388         ip link set dev $swp1.30 nomaster
389         ip link del dev $swp1.20
390         # Deletion via ioctl uses different code paths from netlink
391         vconfig rem $swp1.10 &> /dev/null
392 
393         log_test "vlan device deletion"
394 
395         ip link del dev $swp1.30
396         ip link del dev br30
397         ip link del dev br20
398         ip link del dev br10
399 }
400 
401 lag_create()
402 {
403         ip link add name bond1 type bond mode 802.3ad
404         ip link set dev $swp1 down
405         ip link set dev $swp2 down
406         ip link set dev $swp1 master bond1
407         ip link set dev $swp2 master bond1
408 
409         ip link add link bond1 name bond1.10 type vlan id 10
410         ip link add link bond1 name bond1.20 type vlan id 20
411 
412         ip link add name br0 type bridge vlan_filtering 1
413         ip link set dev bond1 master br0
414 
415         ip link add name br10 type bridge
416         ip link set dev bond1.10 master br10
417 
418         ip link add name br20 type bridge
419         ip link set dev bond1.20 master br20
420 }
421 
422 lag_unlink_slaves_test()
423 {
424         # Test that ports are correctly unlinked from their LAG master, when
425         # the LAG and its VLAN uppers are enslaved to bridges
426         RET=0
427 
428         lag_create
429 
430         ip link set dev $swp1 nomaster
431         check_err $? "lag slave $swp1 was not unlinked from master"
432         ip link set dev $swp2 nomaster
433         check_err $? "lag slave $swp2 was not unlinked from master"
434 
435         # Try to configure corresponding VLANs as router interfaces
436         ip -6 address add 2001:db8:1::1/64 dev $swp1
437         check_err $? "failed to configure ip address on $swp1"
438 
439         ip link add link $swp1 name $swp1.10 type vlan id 10
440         ip -6 address add 2001:db8:10::1/64 dev $swp1.10
441         check_err $? "failed to configure ip address on $swp1.10"
442 
443         ip link add link $swp1 name $swp1.20 type vlan id 20
444         ip -6 address add 2001:db8:20::1/64 dev $swp1.20
445         check_err $? "failed to configure ip address on $swp1.20"
446 
447         log_test "lag slaves unlinking"
448 
449         ip link del dev $swp1.20
450         ip link del dev $swp1.10
451         ip address flush dev $swp1
452 
453         ip link del dev br20
454         ip link del dev br10
455         ip link del dev br0
456         ip link del dev bond1
457 }
458 
459 lag_dev_deletion_test()
460 {
461         # Test that LAG device is correctly deleted, when the LAG and its VLAN
462         # uppers are enslaved to bridges
463         RET=0
464 
465         lag_create
466 
467         ip link del dev bond1
468 
469         log_test "lag device deletion"
470 
471         ip link del dev br20
472         ip link del dev br10
473         ip link del dev br0
474 }
475 
476 vlan_interface_uppers_test()
477 {
478         # Test that uppers of a VLAN interface are correctly sanitized
479         RET=0
480 
481         ip link add name br0 type bridge vlan_filtering 1
482         ip link set dev $swp1 master br0
483 
484         ip link add link br0 name br0.10 type vlan id 10
485 
486         ip -6 address add 2001:db8:1::1/64 dev br0.10
487         ip link add link br0.10 name macvlan0 type macvlan mode private
488         check_err $? "did not manage to create a macvlan when should"
489 
490         ip link del dev macvlan0
491 
492         ip link add name vrf-test type vrf table 10
493         ip link set dev br0.10 master vrf-test
494         check_err $? "did not manage to enslave vlan interface to vrf"
495         ip link del dev vrf-test
496 
497         ip link add name br-test type bridge
498         ip link set dev br0.10 master br-test &> /dev/null
499         check_fail $? "managed to enslave vlan interface to bridge when should not"
500         ip link del dev br-test
501 
502         log_test "vlan interface uppers"
503 
504         ip link del dev br0
505 }
506 
507 bridge_extern_learn_test()
508 {
509         # Test that externally learned entries added from user space are
510         # marked as offloaded
511         RET=0
512 
513         ip link add name br0 type bridge
514         ip link set dev $swp1 master br0
515 
516         bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn
517 
518         busywait "$TIMEOUT" wait_for_offload \
519                 bridge fdb show brport $swp1 de:ad:be:ef:13:37
520         check_err $? "fdb entry not marked as offloaded when should"
521 
522         log_test "externally learned fdb entry"
523 
524         ip link del dev br0
525 }
526 
527 neigh_offload_test()
528 {
529         # Test that IPv4 and IPv6 neighbour entries are marked as offloaded
530         RET=0
531 
532         ip -4 address add 192.0.2.1/24 dev $swp1
533         ip -6 address add 2001:db8:1::1/64 dev $swp1
534 
535         ip -4 neigh add 192.0.2.2 lladdr de:ad:be:ef:13:37 nud perm dev $swp1
536         ip -6 neigh add 2001:db8:1::2 lladdr de:ad:be:ef:13:37 nud perm \
537                 dev $swp1
538 
539         busywait "$TIMEOUT" wait_for_offload \
540                 ip -4 neigh show dev $swp1 192.0.2.2
541         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::2
544         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 $swp1
549         ip -4 neigh del 192.0.2.2 dev $swp1
550         ip -6 address del 2001:db8:1::1/64 dev $swp1
551         ip -4 address del 192.0.2.1/24 dev $swp1
552 }
553 
554 nexthop_offload_test()
555 {
556         # Test that IPv4 and IPv6 nexthops are marked as offloaded
557         RET=0
558 
559         sysctl_set net.ipv6.conf.$swp2.keep_addr_on_down 1
560         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
561         simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64
562         setup_wait
563 
564         ip -4 route add 198.51.100.0/24 vrf v$swp1 \
565                 nexthop via 192.0.2.2 dev $swp1
566         ip -6 route add 2001:db8:2::/64 vrf v$swp1 \
567                 nexthop via 2001:db8:1::2 dev $swp1
568 
569         busywait "$TIMEOUT" wait_for_offload \
570                 ip -4 route show 198.51.100.0/24 vrf v$swp1
571         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$swp1
574         check_err $? "ipv6 nexthop not marked as offloaded when should"
575 
576         ip link set dev $swp2 down
577         sleep 1
578 
579         busywait "$TIMEOUT" not wait_for_offload \
580                 ip -4 route show 198.51.100.0/24 vrf v$swp1
581         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$swp1
584         check_err $? "ipv6 nexthop marked as offloaded when should not"
585 
586         ip link set dev $swp2 up
587         setup_wait
588 
589         busywait "$TIMEOUT" wait_for_offload \
590                 ip -4 route show 198.51.100.0/24 vrf v$swp1
591         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$swp1
594         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$swp1
599         ip -4 route del 198.51.100.0/24 vrf v$swp1
600 
601         simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64
602         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
603         sysctl_restore net.ipv6.conf.$swp2.keep_addr_on_down
604 }
605 
606 nexthop_obj_invalid_test()
607 {
608         # Test that invalid nexthop object configurations are rejected
609         RET=0
610 
611         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
612         simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64
613         setup_wait
614 
615         ip nexthop add id 1 via 192.0.2.3 fdb
616         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 $swp1
619         check_fail $? "managed to configure a nexthop with MPLS encap when should not"
620 
621         ip nexthop add id 1 dev $swp1
622         ip nexthop add id 2 dev $swp1
623         ip nexthop add id 3 via 192.0.2.3 dev $swp1
624         ip nexthop add id 10 group 1/2
625         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 7
628         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 129
631         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 32
634         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 32
637         check_err $? "failed to configure a valid resilient nexthop group"
638         ip nexthop replace id 3 dev $swp1
639         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 10
644         ip nexthop del id 3
645         ip nexthop del id 2
646         ip nexthop del id 1
647 
648         simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64
649         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
650 }
651 
652 nexthop_obj_offload_test()
653 {
654         # Test offload indication of nexthop objects
655         RET=0
656 
657         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
658         simple_if_init $swp2
659         setup_wait
660 
661         ip nexthop add id 1 via 192.0.2.2 dev $swp1
662         ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
663                 dev $swp1
664 
665         busywait "$TIMEOUT" wait_for_offload \
666                 ip nexthop show id 1
667         check_err $? "nexthop not marked as offloaded when should"
668 
669         ip neigh replace 192.0.2.2 nud failed dev $swp1
670         busywait "$TIMEOUT" not wait_for_offload \
671                 ip nexthop show id 1
672         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 $swp1
676         busywait "$TIMEOUT" wait_for_offload \
677                 ip nexthop show id 1
678         check_err $? "nexthop not marked as offloaded after neigh replace"
679 
680         ip nexthop replace id 1 via 192.0.2.3 dev $swp1
681         busywait "$TIMEOUT" not wait_for_offload \
682                 ip nexthop show id 1
683         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 $swp1
686         busywait "$TIMEOUT" wait_for_offload \
687                 ip nexthop show id 1
688         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 $swp1
693         ip nexthop del id 1
694 
695         simple_if_fini $swp2
696         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
697 }
698 
699 nexthop_obj_group_offload_test()
700 {
701         # Test offload indication of nexthop group objects
702         RET=0
703 
704         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
705         simple_if_init $swp2
706         setup_wait
707 
708         ip nexthop add id 1 via 192.0.2.2 dev $swp1
709         ip nexthop add id 2 via 2001:db8:1::2 dev $swp1
710         ip nexthop add id 10 group 1/2
711         ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
712                 dev $swp1
713         ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
714                 dev $swp1
715         ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
716                 dev $swp1
717 
718         busywait "$TIMEOUT" wait_for_offload \
719                 ip nexthop show id 1
720         check_err $? "IPv4 nexthop not marked as offloaded when should"
721         busywait "$TIMEOUT" wait_for_offload \
722                 ip nexthop show id 2
723         check_err $? "IPv6 nexthop not marked as offloaded when should"
724         busywait "$TIMEOUT" wait_for_offload \
725                 ip nexthop show id 10
726         check_err $? "nexthop group not marked as offloaded when should"
727 
728         # Invalidate nexthop id 1
729         ip neigh replace 192.0.2.2 nud failed dev $swp1
730         busywait "$TIMEOUT" not wait_for_offload \
731                 ip nexthop show id 10
732         check_fail $? "nexthop group not marked as offloaded with one valid nexthop"
733 
734         # Invalidate nexthop id 2
735         ip neigh replace 2001:db8:1::2 nud failed dev $swp1
736         busywait "$TIMEOUT" not wait_for_offload \
737                 ip nexthop show id 10
738         check_err $? "nexthop group marked as offloaded when should not"
739 
740         # Revalidate nexthop id 1
741         ip nexthop replace id 1 via 192.0.2.3 dev $swp1
742         busywait "$TIMEOUT" wait_for_offload \
743                 ip nexthop show id 10
744         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 $swp1
749         ip neigh del 192.0.2.3 dev $swp1
750         ip neigh del 192.0.2.2 dev $swp1
751         ip nexthop del id 10
752         ip nexthop del id 2
753         ip nexthop del id 1
754 
755         simple_if_fini $swp2
756         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
757 }
758 
759 nexthop_obj_bucket_offload_test()
760 {
761         # Test offload indication of nexthop buckets
762         RET=0
763 
764         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
765         simple_if_init $swp2
766         setup_wait
767 
768         ip nexthop add id 1 via 192.0.2.2 dev $swp1
769         ip nexthop add id 2 via 2001:db8:1::2 dev $swp1
770         ip nexthop add id 10 group 1/2 type resilient buckets 32 idle_timer 0
771         ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
772                 dev $swp1
773         ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
774                 dev $swp1
775         ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
776                 dev $swp1
777 
778         busywait "$TIMEOUT" wait_for_offload \
779                 ip nexthop bucket show nhid 1
780         check_err $? "IPv4 nexthop buckets not marked as offloaded when should"
781         busywait "$TIMEOUT" wait_for_offload \
782                 ip nexthop bucket show nhid 2
783         check_err $? "IPv6 nexthop buckets not marked as offloaded when should"
784 
785         # Invalidate nexthop id 1
786         ip neigh replace 192.0.2.2 nud failed dev $swp1
787         busywait "$TIMEOUT" wait_for_trap \
788                 ip nexthop bucket show nhid 1
789         check_err $? "IPv4 nexthop buckets not marked with trap when should"
790 
791         # Invalidate nexthop id 2
792         ip neigh replace 2001:db8:1::2 nud failed dev $swp1
793         busywait "$TIMEOUT" wait_for_trap \
794                 ip nexthop bucket show nhid 2
795         check_err $? "IPv6 nexthop buckets not marked with trap when should"
796 
797         # Revalidate nexthop id 1 by changing its configuration
798         ip nexthop replace id 1 via 192.0.2.3 dev $swp1
799         busywait "$TIMEOUT" wait_for_offload \
800                 ip nexthop bucket show nhid 1
801         check_err $? "nexthop bucket not marked as offloaded after revalidating nexthop"
802 
803         # Revalidate nexthop id 2 by changing its neighbour
804         ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
805                 dev $swp1
806         busywait "$TIMEOUT" wait_for_offload \
807                 ip nexthop bucket show nhid 2
808         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 $swp1
813         ip neigh del 192.0.2.3 dev $swp1
814         ip neigh del 192.0.2.2 dev $swp1
815         ip nexthop del id 10
816         ip nexthop del id 2
817         ip nexthop del id 1
818 
819         simple_if_fini $swp2
820         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
821 }
822 
823 nexthop_obj_blackhole_offload_test()
824 {
825         # Test offload indication of blackhole nexthop objects
826         RET=0
827 
828         ip nexthop add id 1 blackhole
829         busywait "$TIMEOUT" wait_for_offload \
830                 ip nexthop show id 1
831         check_err $? "Blackhole nexthop not marked as offloaded when should"
832 
833         ip nexthop add id 10 group 1
834         busywait "$TIMEOUT" wait_for_offload \
835                 ip nexthop show id 10
836         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 10
841         ip nexthop del id 1
842 }
843 
844 nexthop_obj_route_offload_test()
845 {
846         # Test offload indication of routes using nexthop objects
847         RET=0
848 
849         simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
850         simple_if_init $swp2
851         setup_wait
852 
853         ip nexthop add id 1 via 192.0.2.2 dev $swp1
854         ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
855                 dev $swp1
856         ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
857                 dev $swp1
858 
859         ip route replace 198.51.100.0/24 nhid 1
860         busywait "$TIMEOUT" wait_for_offload \
861                 ip route show 198.51.100.0/24
862         check_err $? "route not marked as offloaded when using valid nexthop"
863 
864         ip nexthop replace id 1 via 192.0.2.3 dev $swp1
865         busywait "$TIMEOUT" wait_for_offload \
866                 ip route show 198.51.100.0/24
867         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 $swp1
870         busywait "$TIMEOUT" not wait_for_offload \
871                 ip route show 198.51.100.0/24
872         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 $swp1
875         busywait "$TIMEOUT" wait_for_offload \
876                 ip route show 198.51.100.0/24
877         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/24
882         ip neigh del 192.0.2.3 dev $swp1
883         ip neigh del 192.0.2.2 dev $swp1
884         ip nexthop del id 1
885 
886         simple_if_fini $swp2
887         simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
888 }
889 
890 bridge_locked_port_test()
891 {
892         RET=0
893 
894         ip link add name br1 up type bridge vlan_filtering 0
895 
896         ip link add link $swp1 name $swp1.10 type vlan id 10
897         ip link set dev $swp1.10 master br1
898 
899         bridge link set dev $swp1.10 locked on
900         check_fail $? "managed to set locked flag on a VLAN upper"
901 
902         ip link set dev $swp1.10 nomaster
903         ip link set dev $swp1 master br1
904 
905         bridge link set dev $swp1 locked on
906         check_fail $? "managed to set locked flag on a bridge port that has a VLAN upper"
907 
908         ip link del dev $swp1.10
909         bridge link set dev $swp1 locked on
910 
911         ip link add link $swp1 name $swp1.10 type vlan id 10
912         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/null
917         ip link del dev br1
918 }
919 
920 devlink_reload_test()
921 {
922         # Test that after executing all the above configuration tests, a
923         # devlink reload can be performed without errors
924         RET=0
925 
926         devlink dev reload "$DEVLINK_DEV"
927         check_err $? "devlink reload failed"
928 
929         log_test "devlink reload - last test"
930 
931         sleep 20
932 }
933 
934 trap cleanup EXIT
935 
936 setup_prepare
937 setup_wait
938 
939 tests_run
940 
941 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php