0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 lib_dir=$(dirname $0)/../../../net/forwarding
0011
0012 ALL_TESTS="
0013 rif_vrf_set_addr_test
0014 rif_non_inherit_bridge_addr_test
0015 vlan_interface_deletion_test
0016 bridge_deletion_test
0017 bridge_vlan_flags_test
0018 vlan_1_test
0019 lag_bridge_upper_test
0020 duplicate_vlans_test
0021 vlan_rif_refcount_test
0022 subport_rif_refcount_test
0023 subport_rif_lag_join_test
0024 vlan_dev_deletion_test
0025 lag_unlink_slaves_test
0026 lag_dev_deletion_test
0027 vlan_interface_uppers_test
0028 bridge_extern_learn_test
0029 neigh_offload_test
0030 nexthop_offload_test
0031 nexthop_obj_invalid_test
0032 nexthop_obj_offload_test
0033 nexthop_obj_group_offload_test
0034 nexthop_obj_bucket_offload_test
0035 nexthop_obj_blackhole_offload_test
0036 nexthop_obj_route_offload_test
0037 devlink_reload_test
0038 "
0039 NUM_NETIFS=2
0040 : ${TIMEOUT:=20000}
0041 source $lib_dir/lib.sh
0042 source $lib_dir/devlink_lib.sh
0043
0044 setup_prepare()
0045 {
0046 swp1=${NETIFS[p1]}
0047 swp2=${NETIFS[p2]}
0048
0049 ip link set dev $swp1 up
0050 ip link set dev $swp2 up
0051 }
0052
0053 cleanup()
0054 {
0055 pre_cleanup
0056
0057 ip link set dev $swp2 down
0058 ip link set dev $swp1 down
0059 }
0060
0061 rif_vrf_set_addr_test()
0062 {
0063
0064
0065 RET=0
0066
0067 ip link add name vrf-test type vrf table 10
0068 ip link set dev $swp1 master vrf-test
0069
0070 ip -4 address add 192.0.2.1/24 dev vrf-test
0071 check_err $? "failed to set IPv4 address on VRF"
0072 ip -6 address add 2001:db8:1::1/64 dev vrf-test
0073 check_err $? "failed to set IPv6 address on VRF"
0074
0075 log_test "RIF - setting IP address on VRF"
0076
0077 ip link del dev vrf-test
0078 }
0079
0080 rif_non_inherit_bridge_addr_test()
0081 {
0082 local swp2_mac=$(mac_get $swp2)
0083
0084 RET=0
0085
0086
0087 ip addr add dev $swp1 192.0.2.1/28
0088 check_err $?
0089
0090
0091 ip link add name br1 up type bridge vlan_filtering 0
0092 ip link set dev br1 addr $swp2_mac
0093 ip link set dev $swp2 master br1
0094 ip addr add dev br1 192.0.2.17/28
0095 check_err $?
0096
0097
0098 ip link add name d up type dummy
0099 ip link set dev d addr 00:11:22:33:44:55
0100
0101
0102
0103 ip link set dev d master br1 &>/dev/null
0104 check_err $? "Could not attach a device with low MAC to a bridge with RIF"
0105
0106
0107 ip link set dev $swp2 addr 00:11:22:33:44:55
0108 check_err $? "Changing swp2's MAC address not permitted"
0109
0110 log_test "RIF - attach port with bad MAC to bridge with set MAC"
0111
0112 ip link set dev $swp2 addr $swp2_mac
0113 ip link del dev d
0114 ip link del dev br1
0115 ip addr del dev $swp1 192.0.2.1/28
0116 }
0117
0118 vlan_interface_deletion_test()
0119 {
0120
0121
0122
0123
0124 RET=0
0125
0126 ip link add name br0 type bridge vlan_filtering 1
0127 ip link set dev $swp1 master br0
0128
0129 ip link add link br0 name br0.10 type vlan id 10
0130 ip -6 address add 2001:db8:1::1/64 dev br0.10
0131 ip link del dev br0.10
0132
0133
0134 ip link add link br0 name br0.20 type vlan id 20
0135 ip -6 address add 2001:db8:1::1/64 dev br0.20
0136 ip link del dev br0.20
0137
0138 log_test "vlan interface deletion"
0139
0140 ip link del dev br0
0141 }
0142
0143 bridge_deletion_test()
0144 {
0145
0146
0147
0148
0149 RET=0
0150
0151 ip link add name br0 type bridge vlan_filtering 1
0152 ip link set dev $swp1 master br0
0153 ip -6 address add 2001:db8::1/64 dev br0
0154
0155 ip link add link br0 name br0.10 type vlan id 10
0156 ip -6 address add 2001:db8:1::1/64 dev br0.10
0157
0158 ip link add link br0 name br0.20 type vlan id 20
0159 ip -6 address add 2001:db8:2::1/64 dev br0.20
0160
0161 ip link del dev br0
0162
0163
0164 ip -6 address add 2001:db8:1::1/64 dev $swp1
0165 ip -6 address del 2001:db8:1::1/64 dev $swp1
0166
0167 log_test "bridge deletion"
0168 }
0169
0170 bridge_vlan_flags_test()
0171 {
0172
0173
0174
0175
0176 RET=0
0177
0178 ip link add name br0 type bridge vlan_filtering 1
0179 ip link set dev $swp1 master br0
0180
0181 bridge vlan add vid 10 dev $swp1 pvid untagged
0182 bridge vlan add vid 10 dev $swp1 untagged
0183 bridge vlan add vid 10 dev $swp1 pvid
0184 bridge vlan add vid 10 dev $swp1
0185 ip link del dev br0
0186
0187
0188
0189 devlink dev reload "$DEVLINK_DEV"
0190
0191
0192 sleep 20
0193
0194 log_test "bridge vlan flags"
0195 }
0196
0197 vlan_1_test()
0198 {
0199
0200
0201
0202
0203 RET=0
0204
0205 ip link add link $swp1 name $swp1.1 type vlan id 1
0206 check_err $? "did not manage to create vlan 1 when should"
0207
0208 log_test "vlan 1"
0209
0210 ip link del dev $swp1.1
0211 }
0212
0213 lag_bridge_upper_test()
0214 {
0215
0216
0217
0218 RET=0
0219
0220 ip link add name bond1 type bond mode 802.3ad
0221
0222 ip link add name br0 type bridge vlan_filtering 1
0223 ip link set dev bond1 master br0
0224
0225 ip link set dev $swp1 down
0226 ip link set dev $swp1 master bond1 &> /dev/null
0227 check_fail $? "managed to enslave port to lag when should not"
0228
0229
0230
0231 ip -6 address add 2001:db8:1::1/64 dev $swp1
0232 ip -6 address del 2001:db8:1::1/64 dev $swp1
0233
0234 log_test "lag with bridge upper"
0235
0236 ip link del dev br0
0237 ip link del dev bond1
0238 }
0239
0240 duplicate_vlans_test()
0241 {
0242
0243
0244 RET=0
0245
0246 ip link add name br0 type bridge vlan_filtering 1
0247 ip link set dev $swp1 master br0
0248 bridge vlan add vid 10 dev $swp1
0249
0250 ip link add link $swp1 name $swp1.10 type vlan id 10 &> /dev/null
0251 check_fail $? "managed to create vlan device when should not"
0252
0253 bridge vlan del vid 10 dev $swp1
0254 ip link add link $swp1 name $swp1.10 type vlan id 10
0255 check_err $? "did not manage to create vlan device when should"
0256 bridge vlan add vid 10 dev $swp1 &> /dev/null
0257 check_fail $? "managed to add bridge vlan when should not"
0258
0259 log_test "duplicate vlans"
0260
0261 ip link del dev $swp1.10
0262 ip link del dev br0
0263 }
0264
0265 vlan_rif_refcount_test()
0266 {
0267
0268
0269
0270 RET=0
0271
0272 ip link add name br0 type bridge vlan_filtering 1
0273 ip link set dev $swp1 master br0
0274
0275 ip link set dev $swp1 up
0276 ip link set dev br0 up
0277
0278 ip link add link br0 name br0.10 up type vlan id 10
0279 ip -6 address add 2001:db8:1::1/64 dev br0.10
0280
0281 busywait "$TIMEOUT" wait_for_offload \
0282 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
0283 check_err $? "vlan rif was not created before adding port to vlan"
0284
0285 bridge vlan add vid 10 dev $swp1
0286 busywait "$TIMEOUT" wait_for_offload \
0287 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
0288 check_err $? "vlan rif was destroyed after adding port to vlan"
0289
0290 bridge vlan del vid 10 dev $swp1
0291 busywait "$TIMEOUT" wait_for_offload \
0292 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
0293 check_err $? "vlan rif was destroyed after removing port from vlan"
0294
0295 ip link set dev $swp1 nomaster
0296 busywait "$TIMEOUT" not wait_for_offload \
0297 ip -6 route get fibmatch 2001:db8:1::2 dev br0.10
0298 check_err $? "vlan rif was not destroyed after unlinking port from bridge"
0299
0300 log_test "vlan rif refcount"
0301
0302 ip link del dev br0.10
0303 ip link set dev $swp1 down
0304 ip link del dev br0
0305 }
0306
0307 subport_rif_refcount_test()
0308 {
0309
0310
0311
0312
0313 RET=0
0314
0315 ip link add name bond1 type bond mode 802.3ad
0316 ip link set dev $swp1 down
0317 ip link set dev $swp2 down
0318 ip link set dev $swp1 master bond1
0319 ip link set dev $swp2 master bond1
0320
0321 ip link set dev bond1 up
0322 ip link add link bond1 name bond1.10 up type vlan id 10
0323 ip -6 address add 2001:db8:1::1/64 dev bond1
0324 ip -6 address add 2001:db8:2::1/64 dev bond1.10
0325
0326 busywait "$TIMEOUT" wait_for_offload \
0327 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0328 check_err $? "subport rif was not created on lag device"
0329 busywait "$TIMEOUT" wait_for_offload \
0330 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10
0331 check_err $? "subport rif was not created on vlan device"
0332
0333 ip link set dev $swp1 nomaster
0334 busywait "$TIMEOUT" wait_for_offload \
0335 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0336 check_err $? "subport rif of lag device was destroyed when should not"
0337 busywait "$TIMEOUT" wait_for_offload \
0338 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10
0339 check_err $? "subport rif of vlan device was destroyed when should not"
0340
0341 ip link set dev $swp2 nomaster
0342 busywait "$TIMEOUT" not wait_for_offload \
0343 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0344 check_err $? "subport rif of lag device was not destroyed when should"
0345 busywait "$TIMEOUT" not wait_for_offload \
0346 ip -6 route get fibmatch 2001:db8:2::2 dev bond1.10
0347 check_err $? "subport rif of vlan device was not destroyed when should"
0348
0349 log_test "subport rif refcount"
0350
0351 ip link del dev bond1.10
0352 ip link del dev bond1
0353 }
0354
0355 subport_rif_lag_join_test()
0356 {
0357
0358
0359
0360
0361 RET=0
0362
0363 ip link add name bond1 type bond mode 802.3ad
0364 ip link set dev $swp1 down
0365 ip link set dev $swp2 down
0366 ip link set dev $swp1 master bond1
0367 ip link set dev $swp2 master bond1
0368
0369 ip link set dev bond1 up
0370 ip -6 address add 2001:db8:1::1/64 dev bond1
0371
0372 busywait "$TIMEOUT" wait_for_offload \
0373 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0374 check_err $? "subport rif was not created on lag device"
0375
0376 ip link set dev $swp1 nomaster
0377 busywait "$TIMEOUT" wait_for_offload \
0378 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0379 check_err $? "subport rif of lag device was destroyed after removing one port"
0380
0381 ip link set dev $swp1 master bond1
0382 ip link set dev $swp2 nomaster
0383 busywait "$TIMEOUT" wait_for_offload \
0384 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0385 check_err $? "subport rif of lag device was destroyed after re-adding a port and removing another"
0386
0387 ip link set dev $swp1 nomaster
0388 busywait "$TIMEOUT" not wait_for_offload \
0389 ip -6 route get fibmatch 2001:db8:1::2 dev bond1
0390 check_err $? "subport rif of lag device was not destroyed when should"
0391
0392 log_test "subport rif lag join"
0393
0394 ip link del dev bond1
0395 }
0396
0397 vlan_dev_deletion_test()
0398 {
0399
0400
0401 RET=0
0402
0403 ip link add name br10 type bridge
0404 ip link add name br20 type bridge
0405 ip link add name br30 type bridge
0406 ip link add link $swp1 name $swp1.10 type vlan id 10
0407 ip link add link $swp1 name $swp1.20 type vlan id 20
0408 ip link add link $swp1 name $swp1.30 type vlan id 30
0409 ip link set dev $swp1.10 master br10
0410 ip link set dev $swp1.20 master br20
0411 ip link set dev $swp1.30 master br30
0412
0413
0414
0415 ip link set dev $swp1.30 nomaster
0416 ip link del dev $swp1.20
0417
0418 vconfig rem $swp1.10 &> /dev/null
0419
0420 log_test "vlan device deletion"
0421
0422 ip link del dev $swp1.30
0423 ip link del dev br30
0424 ip link del dev br20
0425 ip link del dev br10
0426 }
0427
0428 lag_create()
0429 {
0430 ip link add name bond1 type bond mode 802.3ad
0431 ip link set dev $swp1 down
0432 ip link set dev $swp2 down
0433 ip link set dev $swp1 master bond1
0434 ip link set dev $swp2 master bond1
0435
0436 ip link add link bond1 name bond1.10 type vlan id 10
0437 ip link add link bond1 name bond1.20 type vlan id 20
0438
0439 ip link add name br0 type bridge vlan_filtering 1
0440 ip link set dev bond1 master br0
0441
0442 ip link add name br10 type bridge
0443 ip link set dev bond1.10 master br10
0444
0445 ip link add name br20 type bridge
0446 ip link set dev bond1.20 master br20
0447 }
0448
0449 lag_unlink_slaves_test()
0450 {
0451
0452
0453 RET=0
0454
0455 lag_create
0456
0457 ip link set dev $swp1 nomaster
0458 check_err $? "lag slave $swp1 was not unlinked from master"
0459 ip link set dev $swp2 nomaster
0460 check_err $? "lag slave $swp2 was not unlinked from master"
0461
0462
0463 ip -6 address add 2001:db8:1::1/64 dev $swp1
0464 check_err $? "failed to configure ip address on $swp1"
0465
0466 ip link add link $swp1 name $swp1.10 type vlan id 10
0467 ip -6 address add 2001:db8:10::1/64 dev $swp1.10
0468 check_err $? "failed to configure ip address on $swp1.10"
0469
0470 ip link add link $swp1 name $swp1.20 type vlan id 20
0471 ip -6 address add 2001:db8:20::1/64 dev $swp1.20
0472 check_err $? "failed to configure ip address on $swp1.20"
0473
0474 log_test "lag slaves unlinking"
0475
0476 ip link del dev $swp1.20
0477 ip link del dev $swp1.10
0478 ip address flush dev $swp1
0479
0480 ip link del dev br20
0481 ip link del dev br10
0482 ip link del dev br0
0483 ip link del dev bond1
0484 }
0485
0486 lag_dev_deletion_test()
0487 {
0488
0489
0490 RET=0
0491
0492 lag_create
0493
0494 ip link del dev bond1
0495
0496 log_test "lag device deletion"
0497
0498 ip link del dev br20
0499 ip link del dev br10
0500 ip link del dev br0
0501 }
0502
0503 vlan_interface_uppers_test()
0504 {
0505
0506 RET=0
0507
0508 ip link add name br0 type bridge vlan_filtering 1
0509 ip link set dev $swp1 master br0
0510
0511 ip link add link br0 name br0.10 type vlan id 10
0512 ip link add link br0.10 name macvlan0 \
0513 type macvlan mode private &> /dev/null
0514 check_fail $? "managed to create a macvlan when should not"
0515
0516 ip -6 address add 2001:db8:1::1/64 dev br0.10
0517 ip link add link br0.10 name macvlan0 type macvlan mode private
0518 check_err $? "did not manage to create a macvlan when should"
0519
0520 ip link del dev macvlan0
0521
0522 ip link add name vrf-test type vrf table 10
0523 ip link set dev br0.10 master vrf-test
0524 check_err $? "did not manage to enslave vlan interface to vrf"
0525 ip link del dev vrf-test
0526
0527 ip link add name br-test type bridge
0528 ip link set dev br0.10 master br-test &> /dev/null
0529 check_fail $? "managed to enslave vlan interface to bridge when should not"
0530 ip link del dev br-test
0531
0532 log_test "vlan interface uppers"
0533
0534 ip link del dev br0
0535 }
0536
0537 bridge_extern_learn_test()
0538 {
0539
0540
0541 RET=0
0542
0543 ip link add name br0 type bridge
0544 ip link set dev $swp1 master br0
0545
0546 bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn
0547
0548 busywait "$TIMEOUT" wait_for_offload \
0549 bridge fdb show brport $swp1 de:ad:be:ef:13:37
0550 check_err $? "fdb entry not marked as offloaded when should"
0551
0552 log_test "externally learned fdb entry"
0553
0554 ip link del dev br0
0555 }
0556
0557 neigh_offload_test()
0558 {
0559
0560 RET=0
0561
0562 ip -4 address add 192.0.2.1/24 dev $swp1
0563 ip -6 address add 2001:db8:1::1/64 dev $swp1
0564
0565 ip -4 neigh add 192.0.2.2 lladdr de:ad:be:ef:13:37 nud perm dev $swp1
0566 ip -6 neigh add 2001:db8:1::2 lladdr de:ad:be:ef:13:37 nud perm \
0567 dev $swp1
0568
0569 busywait "$TIMEOUT" wait_for_offload \
0570 ip -4 neigh show dev $swp1 192.0.2.2
0571 check_err $? "ipv4 neigh entry not marked as offloaded when should"
0572 busywait "$TIMEOUT" wait_for_offload \
0573 ip -6 neigh show dev $swp1 2001:db8:1::2
0574 check_err $? "ipv6 neigh entry not marked as offloaded when should"
0575
0576 log_test "neighbour offload indication"
0577
0578 ip -6 neigh del 2001:db8:1::2 dev $swp1
0579 ip -4 neigh del 192.0.2.2 dev $swp1
0580 ip -6 address del 2001:db8:1::1/64 dev $swp1
0581 ip -4 address del 192.0.2.1/24 dev $swp1
0582 }
0583
0584 nexthop_offload_test()
0585 {
0586
0587 RET=0
0588
0589 sysctl_set net.ipv6.conf.$swp2.keep_addr_on_down 1
0590 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0591 simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64
0592 setup_wait
0593
0594 ip -4 route add 198.51.100.0/24 vrf v$swp1 \
0595 nexthop via 192.0.2.2 dev $swp1
0596 ip -6 route add 2001:db8:2::/64 vrf v$swp1 \
0597 nexthop via 2001:db8:1::2 dev $swp1
0598
0599 busywait "$TIMEOUT" wait_for_offload \
0600 ip -4 route show 198.51.100.0/24 vrf v$swp1
0601 check_err $? "ipv4 nexthop not marked as offloaded when should"
0602 busywait "$TIMEOUT" wait_for_offload \
0603 ip -6 route show 2001:db8:2::/64 vrf v$swp1
0604 check_err $? "ipv6 nexthop not marked as offloaded when should"
0605
0606 ip link set dev $swp2 down
0607 sleep 1
0608
0609 busywait "$TIMEOUT" not wait_for_offload \
0610 ip -4 route show 198.51.100.0/24 vrf v$swp1
0611 check_err $? "ipv4 nexthop marked as offloaded when should not"
0612 busywait "$TIMEOUT" not wait_for_offload \
0613 ip -6 route show 2001:db8:2::/64 vrf v$swp1
0614 check_err $? "ipv6 nexthop marked as offloaded when should not"
0615
0616 ip link set dev $swp2 up
0617 setup_wait
0618
0619 busywait "$TIMEOUT" wait_for_offload \
0620 ip -4 route show 198.51.100.0/24 vrf v$swp1
0621 check_err $? "ipv4 nexthop not marked as offloaded after neigh add"
0622 busywait "$TIMEOUT" wait_for_offload \
0623 ip -6 route show 2001:db8:2::/64 vrf v$swp1
0624 check_err $? "ipv6 nexthop not marked as offloaded after neigh add"
0625
0626 log_test "nexthop offload indication"
0627
0628 ip -6 route del 2001:db8:2::/64 vrf v$swp1
0629 ip -4 route del 198.51.100.0/24 vrf v$swp1
0630
0631 simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64
0632 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0633 sysctl_restore net.ipv6.conf.$swp2.keep_addr_on_down
0634 }
0635
0636 nexthop_obj_invalid_test()
0637 {
0638
0639 RET=0
0640
0641 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0642 simple_if_init $swp2 192.0.2.2/24 2001:db8:1::2/64
0643 setup_wait
0644
0645 ip nexthop add id 1 via 192.0.2.3 fdb
0646 check_fail $? "managed to configure an FDB nexthop when should not"
0647
0648 ip nexthop add id 1 encap mpls 200/300 via 192.0.2.3 dev $swp1
0649 check_fail $? "managed to configure a nexthop with MPLS encap when should not"
0650
0651 ip nexthop add id 1 dev $swp1
0652 ip nexthop add id 2 dev $swp1
0653 ip nexthop add id 3 via 192.0.2.3 dev $swp1
0654 ip nexthop add id 10 group 1/2
0655 check_fail $? "managed to configure a nexthop group with device-only nexthops when should not"
0656
0657 ip nexthop add id 10 group 3 type resilient buckets 7
0658 check_fail $? "managed to configure a too small resilient nexthop group when should not"
0659
0660 ip nexthop add id 10 group 3 type resilient buckets 129
0661 check_fail $? "managed to configure a resilient nexthop group with invalid number of buckets when should not"
0662
0663 ip nexthop add id 10 group 1/2 type resilient buckets 32
0664 check_fail $? "managed to configure a resilient nexthop group with device-only nexthops when should not"
0665
0666 ip nexthop add id 10 group 3 type resilient buckets 32
0667 check_err $? "failed to configure a valid resilient nexthop group"
0668 ip nexthop replace id 3 dev $swp1
0669 check_fail $? "managed to populate a nexthop bucket with a device-only nexthop when should not"
0670
0671 log_test "nexthop objects - invalid configurations"
0672
0673 ip nexthop del id 10
0674 ip nexthop del id 3
0675 ip nexthop del id 2
0676 ip nexthop del id 1
0677
0678 simple_if_fini $swp2 192.0.2.2/24 2001:db8:1::2/64
0679 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0680 }
0681
0682 nexthop_obj_offload_test()
0683 {
0684
0685 RET=0
0686
0687 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0688 simple_if_init $swp2
0689 setup_wait
0690
0691 ip nexthop add id 1 via 192.0.2.2 dev $swp1
0692 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
0693 dev $swp1
0694
0695 busywait "$TIMEOUT" wait_for_offload \
0696 ip nexthop show id 1
0697 check_err $? "nexthop not marked as offloaded when should"
0698
0699 ip neigh replace 192.0.2.2 nud failed dev $swp1
0700 busywait "$TIMEOUT" not wait_for_offload \
0701 ip nexthop show id 1
0702 check_err $? "nexthop marked as offloaded after setting neigh to failed state"
0703
0704 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
0705 dev $swp1
0706 busywait "$TIMEOUT" wait_for_offload \
0707 ip nexthop show id 1
0708 check_err $? "nexthop not marked as offloaded after neigh replace"
0709
0710 ip nexthop replace id 1 via 192.0.2.3 dev $swp1
0711 busywait "$TIMEOUT" not wait_for_offload \
0712 ip nexthop show id 1
0713 check_err $? "nexthop marked as offloaded after replacing to use an invalid address"
0714
0715 ip nexthop replace id 1 via 192.0.2.2 dev $swp1
0716 busywait "$TIMEOUT" wait_for_offload \
0717 ip nexthop show id 1
0718 check_err $? "nexthop not marked as offloaded after replacing to use a valid address"
0719
0720 log_test "nexthop objects offload indication"
0721
0722 ip neigh del 192.0.2.2 dev $swp1
0723 ip nexthop del id 1
0724
0725 simple_if_fini $swp2
0726 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0727 }
0728
0729 nexthop_obj_group_offload_test()
0730 {
0731
0732 RET=0
0733
0734 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0735 simple_if_init $swp2
0736 setup_wait
0737
0738 ip nexthop add id 1 via 192.0.2.2 dev $swp1
0739 ip nexthop add id 2 via 2001:db8:1::2 dev $swp1
0740 ip nexthop add id 10 group 1/2
0741 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
0742 dev $swp1
0743 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
0744 dev $swp1
0745 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
0746 dev $swp1
0747
0748 busywait "$TIMEOUT" wait_for_offload \
0749 ip nexthop show id 1
0750 check_err $? "IPv4 nexthop not marked as offloaded when should"
0751 busywait "$TIMEOUT" wait_for_offload \
0752 ip nexthop show id 2
0753 check_err $? "IPv6 nexthop not marked as offloaded when should"
0754 busywait "$TIMEOUT" wait_for_offload \
0755 ip nexthop show id 10
0756 check_err $? "nexthop group not marked as offloaded when should"
0757
0758
0759 ip neigh replace 192.0.2.2 nud failed dev $swp1
0760 busywait "$TIMEOUT" not wait_for_offload \
0761 ip nexthop show id 10
0762 check_fail $? "nexthop group not marked as offloaded with one valid nexthop"
0763
0764
0765 ip neigh replace 2001:db8:1::2 nud failed dev $swp1
0766 busywait "$TIMEOUT" not wait_for_offload \
0767 ip nexthop show id 10
0768 check_err $? "nexthop group marked as offloaded when should not"
0769
0770
0771 ip nexthop replace id 1 via 192.0.2.3 dev $swp1
0772 busywait "$TIMEOUT" wait_for_offload \
0773 ip nexthop show id 10
0774 check_err $? "nexthop group not marked as offloaded after revalidating nexthop"
0775
0776 log_test "nexthop group objects offload indication"
0777
0778 ip neigh del 2001:db8:1::2 dev $swp1
0779 ip neigh del 192.0.2.3 dev $swp1
0780 ip neigh del 192.0.2.2 dev $swp1
0781 ip nexthop del id 10
0782 ip nexthop del id 2
0783 ip nexthop del id 1
0784
0785 simple_if_fini $swp2
0786 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0787 }
0788
0789 nexthop_obj_bucket_offload_test()
0790 {
0791
0792 RET=0
0793
0794 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0795 simple_if_init $swp2
0796 setup_wait
0797
0798 ip nexthop add id 1 via 192.0.2.2 dev $swp1
0799 ip nexthop add id 2 via 2001:db8:1::2 dev $swp1
0800 ip nexthop add id 10 group 1/2 type resilient buckets 32 idle_timer 0
0801 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
0802 dev $swp1
0803 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
0804 dev $swp1
0805 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
0806 dev $swp1
0807
0808 busywait "$TIMEOUT" wait_for_offload \
0809 ip nexthop bucket show nhid 1
0810 check_err $? "IPv4 nexthop buckets not marked as offloaded when should"
0811 busywait "$TIMEOUT" wait_for_offload \
0812 ip nexthop bucket show nhid 2
0813 check_err $? "IPv6 nexthop buckets not marked as offloaded when should"
0814
0815
0816 ip neigh replace 192.0.2.2 nud failed dev $swp1
0817 busywait "$TIMEOUT" wait_for_trap \
0818 ip nexthop bucket show nhid 1
0819 check_err $? "IPv4 nexthop buckets not marked with trap when should"
0820
0821
0822 ip neigh replace 2001:db8:1::2 nud failed dev $swp1
0823 busywait "$TIMEOUT" wait_for_trap \
0824 ip nexthop bucket show nhid 2
0825 check_err $? "IPv6 nexthop buckets not marked with trap when should"
0826
0827
0828 ip nexthop replace id 1 via 192.0.2.3 dev $swp1
0829 busywait "$TIMEOUT" wait_for_offload \
0830 ip nexthop bucket show nhid 1
0831 check_err $? "nexthop bucket not marked as offloaded after revalidating nexthop"
0832
0833
0834 ip neigh replace 2001:db8:1::2 lladdr 00:11:22:33:44:55 nud perm \
0835 dev $swp1
0836 busywait "$TIMEOUT" wait_for_offload \
0837 ip nexthop bucket show nhid 2
0838 check_err $? "nexthop bucket not marked as offloaded after revalidating neighbour"
0839
0840 log_test "nexthop bucket offload indication"
0841
0842 ip neigh del 2001:db8:1::2 dev $swp1
0843 ip neigh del 192.0.2.3 dev $swp1
0844 ip neigh del 192.0.2.2 dev $swp1
0845 ip nexthop del id 10
0846 ip nexthop del id 2
0847 ip nexthop del id 1
0848
0849 simple_if_fini $swp2
0850 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0851 }
0852
0853 nexthop_obj_blackhole_offload_test()
0854 {
0855
0856 RET=0
0857
0858 ip nexthop add id 1 blackhole
0859 busywait "$TIMEOUT" wait_for_offload \
0860 ip nexthop show id 1
0861 check_err $? "Blackhole nexthop not marked as offloaded when should"
0862
0863 ip nexthop add id 10 group 1
0864 busywait "$TIMEOUT" wait_for_offload \
0865 ip nexthop show id 10
0866 check_err $? "Nexthop group not marked as offloaded when should"
0867
0868 log_test "blackhole nexthop objects offload indication"
0869
0870 ip nexthop del id 10
0871 ip nexthop del id 1
0872 }
0873
0874 nexthop_obj_route_offload_test()
0875 {
0876
0877 RET=0
0878
0879 simple_if_init $swp1 192.0.2.1/24 2001:db8:1::1/64
0880 simple_if_init $swp2
0881 setup_wait
0882
0883 ip nexthop add id 1 via 192.0.2.2 dev $swp1
0884 ip neigh replace 192.0.2.2 lladdr 00:11:22:33:44:55 nud perm \
0885 dev $swp1
0886 ip neigh replace 192.0.2.3 lladdr 00:11:22:33:44:55 nud perm \
0887 dev $swp1
0888
0889 ip route replace 198.51.100.0/24 nhid 1
0890 busywait "$TIMEOUT" wait_for_offload \
0891 ip route show 198.51.100.0/24
0892 check_err $? "route not marked as offloaded when using valid nexthop"
0893
0894 ip nexthop replace id 1 via 192.0.2.3 dev $swp1
0895 busywait "$TIMEOUT" wait_for_offload \
0896 ip route show 198.51.100.0/24
0897 check_err $? "route not marked as offloaded after replacing valid nexthop with a valid one"
0898
0899 ip nexthop replace id 1 via 192.0.2.4 dev $swp1
0900 busywait "$TIMEOUT" not wait_for_offload \
0901 ip route show 198.51.100.0/24
0902 check_err $? "route marked as offloaded after replacing valid nexthop with an invalid one"
0903
0904 ip nexthop replace id 1 via 192.0.2.2 dev $swp1
0905 busywait "$TIMEOUT" wait_for_offload \
0906 ip route show 198.51.100.0/24
0907 check_err $? "route not marked as offloaded after replacing invalid nexthop with a valid one"
0908
0909 log_test "routes using nexthop objects offload indication"
0910
0911 ip route del 198.51.100.0/24
0912 ip neigh del 192.0.2.3 dev $swp1
0913 ip neigh del 192.0.2.2 dev $swp1
0914 ip nexthop del id 1
0915
0916 simple_if_fini $swp2
0917 simple_if_fini $swp1 192.0.2.1/24 2001:db8:1::1/64
0918 }
0919
0920 devlink_reload_test()
0921 {
0922
0923
0924 RET=0
0925
0926 devlink dev reload "$DEVLINK_DEV"
0927 check_err $? "devlink reload failed"
0928
0929 log_test "devlink reload - last test"
0930
0931 sleep 20
0932 }
0933
0934 trap cleanup EXIT
0935
0936 setup_prepare
0937 setup_wait
0938
0939 tests_run
0940
0941 exit $EXIT_STATUS