1186 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test various aspects of VxLAN offloading which are specific to mlxsw, such5# as sanitization of invalid configurations and offload indication.6 7: ${ADDR_FAMILY:=ipv4}8export ADDR_FAMILY9 10: ${LOCAL_IP_1:=198.51.100.1}11export LOCAL_IP_112 13: ${LOCAL_IP_2:=198.51.100.2}14export LOCAL_IP_215 16: ${PREFIX_LEN:=32}17export PREFIX_LEN18 19: ${UDPCSUM_FLAFS:=noudpcsum}20export UDPCSUM_FLAFS21 22: ${MC_IP:=239.0.0.1}23export MC_IP24 25: ${IP_FLAG:=""}26export IP_FLAG27 28: ${ALL_TESTS:="29 sanitization_test30 offload_indication_test31 sanitization_vlan_aware_test32 offload_indication_vlan_aware_test33"}34 35lib_dir=$(dirname $0)/../../../net/forwarding36NUM_NETIFS=237: ${TIMEOUT:=20000} # ms38source $lib_dir/lib.sh39 40setup_prepare()41{42 swp1=${NETIFS[p1]}43 swp2=${NETIFS[p2]}44 45 ip link set dev $swp1 up46 ip link set dev $swp2 up47}48 49cleanup()50{51 pre_cleanup52 53 ip link set dev $swp2 down54 ip link set dev $swp1 down55}56 57sanitization_single_dev_test_pass()58{59 ip link set dev $swp1 master br060 check_err $?61 ip link set dev vxlan0 master br062 check_err $?63 64 ip link set dev $swp1 nomaster65 66 ip link set dev $swp1 master br067 check_err $?68}69 70sanitization_single_dev_test_fail()71{72 ip link set dev $swp1 master br073 check_err $?74 ip link set dev vxlan0 master br0 &> /dev/null75 check_fail $?76 77 ip link set dev $swp1 nomaster78 79 ip link set dev vxlan0 master br080 check_err $?81 ip link set dev $swp1 master br0 &> /dev/null82 check_fail $?83}84 85sanitization_single_dev_valid_test()86{87 RET=088 89 ip link add dev br0 type bridge mcast_snooping 090 91 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \92 ttl 20 tos inherit local $LOCAL_IP_1 dstport 478993 94 sanitization_single_dev_test_pass95 96 ip link del dev vxlan097 ip link del dev br098 99 log_test "vxlan device - valid configuration"100}101 102sanitization_single_dev_vlan_aware_test()103{104 RET=0105 106 ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1107 108 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \109 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789110 111 sanitization_single_dev_test_pass112 113 ip link del dev vxlan0114 ip link del dev br0115 116 log_test "vxlan device with a vlan-aware bridge"117}118 119sanitization_single_dev_mcast_enabled_test()120{121 RET=0122 123 ip link add dev br0 type bridge124 125 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \126 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789127 128 sanitization_single_dev_test_fail129 130 ip link del dev vxlan0131 ip link del dev br0132 133 log_test "vxlan device with a multicast enabled bridge"134}135 136sanitization_single_dev_mcast_group_test()137{138 RET=0139 140 ip link add dev br0 type bridge mcast_snooping 0141 ip link add name dummy1 up type dummy142 143 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \144 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \145 dev dummy1 group $MC_IP146 147 sanitization_single_dev_test_fail148 149 ip link del dev vxlan0150 ip link del dev dummy1151 ip link del dev br0152 153 log_test "vxlan device with a multicast group"154}155 156sanitization_single_dev_no_local_ip_test()157{158 RET=0159 160 ip link add dev br0 type bridge mcast_snooping 0161 162 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \163 ttl 20 tos inherit dstport 4789164 165 sanitization_single_dev_test_fail166 167 ip link del dev vxlan0168 ip link del dev br0169 170 log_test "vxlan device with no local ip"171}172 173sanitization_single_dev_learning_enabled_ipv4_test()174{175 RET=0176 177 ip link add dev br0 type bridge mcast_snooping 0178 179 ip link add name vxlan0 up type vxlan id 10 learning $UDPCSUM_FLAFS \180 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789181 182 sanitization_single_dev_test_pass183 184 ip link del dev vxlan0185 ip link del dev br0186 187 log_test "vxlan device with learning enabled"188}189 190sanitization_single_dev_local_interface_test()191{192 RET=0193 194 ip link add dev br0 type bridge mcast_snooping 0195 ip link add name dummy1 up type dummy196 197 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \198 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 dev dummy1199 200 sanitization_single_dev_test_fail201 202 ip link del dev vxlan0203 ip link del dev dummy1204 ip link del dev br0205 206 log_test "vxlan device with local interface"207}208 209sanitization_single_dev_port_range_test()210{211 RET=0212 213 ip link add dev br0 type bridge mcast_snooping 0214 215 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \216 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \217 srcport 4000 5000218 219 sanitization_single_dev_test_fail220 221 ip link del dev vxlan0222 ip link del dev br0223 224 log_test "vxlan device with udp source port range"225}226 227sanitization_single_dev_tos_static_test()228{229 RET=0230 231 ip link add dev br0 type bridge mcast_snooping 0232 233 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \234 ttl 20 tos 20 local $LOCAL_IP_1 dstport 4789235 236 sanitization_single_dev_test_fail237 238 ip link del dev vxlan0239 ip link del dev br0240 241 log_test "vxlan device with static tos"242}243 244sanitization_single_dev_ttl_inherit_test()245{246 RET=0247 248 ip link add dev br0 type bridge mcast_snooping 0249 250 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \251 ttl inherit tos inherit local $LOCAL_IP_1 dstport 4789252 253 sanitization_single_dev_test_fail254 255 ip link del dev vxlan0256 ip link del dev br0257 258 log_test "vxlan device with inherit ttl"259}260 261sanitization_single_dev_udp_checksum_ipv4_test()262{263 RET=0264 265 ip link add dev br0 type bridge mcast_snooping 0266 267 ip link add name vxlan0 up type vxlan id 10 nolearning udpcsum \268 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789269 270 sanitization_single_dev_test_fail271 272 ip link del dev vxlan0273 ip link del dev br0274 275 log_test "vxlan device with udp checksum"276}277 278sanitization_single_dev_test()279{280 # These tests make sure that we correctly sanitize VxLAN device281 # configurations we do not support282 sanitization_single_dev_valid_test283 sanitization_single_dev_vlan_aware_test284 sanitization_single_dev_mcast_enabled_test285 sanitization_single_dev_mcast_group_test286 sanitization_single_dev_no_local_ip_test287 sanitization_single_dev_learning_enabled_"$ADDR_FAMILY"_test288 sanitization_single_dev_local_interface_test289 sanitization_single_dev_port_range_test290 sanitization_single_dev_tos_static_test291 sanitization_single_dev_ttl_inherit_test292 sanitization_single_dev_udp_checksum_"$ADDR_FAMILY"_test293}294 295sanitization_multi_devs_test_pass()296{297 ip link set dev $swp1 master br0298 check_err $?299 ip link set dev vxlan0 master br0300 check_err $?301 ip link set dev $swp2 master br1302 check_err $?303 ip link set dev vxlan1 master br1304 check_err $?305 306 ip link set dev $swp2 nomaster307 ip link set dev $swp1 nomaster308 309 ip link set dev $swp1 master br0310 check_err $?311 ip link set dev $swp2 master br1312 check_err $?313}314 315sanitization_multi_devs_test_fail()316{317 ip link set dev $swp1 master br0318 check_err $?319 ip link set dev vxlan0 master br0320 check_err $?321 ip link set dev $swp2 master br1322 check_err $?323 ip link set dev vxlan1 master br1 &> /dev/null324 check_fail $?325 326 ip link set dev $swp2 nomaster327 ip link set dev $swp1 nomaster328 329 ip link set dev vxlan1 master br1330 check_err $?331 ip link set dev $swp1 master br0332 check_err $?333 ip link set dev $swp2 master br1 &> /dev/null334 check_fail $?335}336 337sanitization_multi_devs_valid_test()338{339 RET=0340 341 ip link add dev br0 type bridge mcast_snooping 0342 ip link add dev br1 type bridge mcast_snooping 0343 344 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \345 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789346 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \347 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789348 349 sanitization_multi_devs_test_pass350 351 ip link del dev vxlan1352 ip link del dev vxlan0353 ip link del dev br1354 ip link del dev br0355 356 log_test "multiple vxlan devices - valid configuration"357}358 359sanitization_multi_devs_ttl_test()360{361 RET=0362 363 ip link add dev br0 type bridge mcast_snooping 0364 ip link add dev br1 type bridge mcast_snooping 0365 366 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \367 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789368 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \369 ttl 40 tos inherit local $LOCAL_IP_1 dstport 4789370 371 sanitization_multi_devs_test_fail372 373 ip link del dev vxlan1374 ip link del dev vxlan0375 ip link del dev br1376 ip link del dev br0377 378 log_test "multiple vxlan devices with different ttl"379}380 381sanitization_multi_devs_udp_dstport_test()382{383 RET=0384 385 ip link add dev br0 type bridge mcast_snooping 0386 ip link add dev br1 type bridge mcast_snooping 0387 388 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \389 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789390 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \391 ttl 20 tos inherit local $LOCAL_IP_1 dstport 5789392 393 sanitization_multi_devs_test_fail394 395 ip link del dev vxlan1396 ip link del dev vxlan0397 ip link del dev br1398 ip link del dev br0399 400 log_test "multiple vxlan devices with different udp destination port"401}402 403sanitization_multi_devs_local_ip_test()404{405 RET=0406 407 ip link add dev br0 type bridge mcast_snooping 0408 ip link add dev br1 type bridge mcast_snooping 0409 410 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \411 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789412 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \413 ttl 20 tos inherit local $LOCAL_IP_2 dstport 4789414 415 sanitization_multi_devs_test_fail416 417 ip link del dev vxlan1418 ip link del dev vxlan0419 ip link del dev br1420 ip link del dev br0421 422 log_test "multiple vxlan devices with different local ip"423}424 425sanitization_multi_devs_test()426{427 # The device has a single VTEP, which means all the VxLAN devices428 # we offload must share certain properties such as source IP and429 # UDP destination port. These tests make sure that we forbid430 # configurations that violate this limitation431 sanitization_multi_devs_valid_test432 sanitization_multi_devs_ttl_test433 sanitization_multi_devs_udp_dstport_test434 sanitization_multi_devs_local_ip_test435}436 437sanitization_test()438{439 sanitization_single_dev_test440 sanitization_multi_devs_test441}442 443offload_indication_setup_create()444{445 # Create a simple setup with two bridges, each with a VxLAN device446 # and one local port447 ip link add name br0 type bridge mcast_snooping 0448 ip link set dev br0 addrgenmode none449 ip link set dev br0 up450 ip link add name br1 type bridge mcast_snooping 0451 ip link set dev br1 addrgenmode none452 ip link set dev br1 up453 454 ip link set dev $swp1 master br0455 ip link set dev $swp2 master br1456 457 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo458 459 ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \460 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789461 ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \462 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789463}464 465offload_indication_setup_destroy()466{467 ip link del dev vxlan1468 ip link del dev vxlan0469 470 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo471 472 ip link set dev $swp2 nomaster473 ip link set dev $swp1 nomaster474 475 ip link del dev br1476 ip link del dev br0477}478 479offload_indication_fdb_flood_test()480{481 RET=0482 483 bridge fdb append 00:00:00:00:00:00 dev vxlan0 self dst $LOCAL_IP_2484 485 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb 00:00:00:00:00:00 \486 bridge fdb show brport vxlan0487 check_err $?488 489 bridge fdb del 00:00:00:00:00:00 dev vxlan0 self490 491 log_test "vxlan flood entry offload indication"492}493 494offload_indication_fdb_bridge_test()495{496 RET=0497 498 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self master static \499 dst $LOCAL_IP_2500 501 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \502 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0503 check_err $?504 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \505 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0506 check_err $?507 508 log_test "vxlan entry offload indication - initial state"509 510 # Remove FDB entry from the bridge driver and check that corresponding511 # entry in the VxLAN driver is not marked as offloaded512 RET=0513 514 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 master515 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \516 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0517 check_err $?518 519 log_test "vxlan entry offload indication - after removal from bridge"520 521 # Add the FDB entry back to the bridge driver and make sure it is522 # marked as offloaded in both drivers523 RET=0524 525 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 master static526 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \527 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0528 check_err $?529 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \530 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0531 check_err $?532 533 log_test "vxlan entry offload indication - after re-add to bridge"534 535 # Remove FDB entry from the VxLAN driver and check that corresponding536 # entry in the bridge driver is not marked as offloaded537 RET=0538 539 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self540 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \541 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0542 check_err $?543 544 log_test "vxlan entry offload indication - after removal from vxlan"545 546 # Add the FDB entry back to the VxLAN driver and make sure it is547 # marked as offloaded in both drivers548 RET=0549 550 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self dst $LOCAL_IP_2551 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \552 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0553 check_err $?554 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \555 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0556 check_err $?557 558 log_test "vxlan entry offload indication - after re-add to vxlan"559 560 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self master561}562 563offload_indication_fdb_test()564{565 offload_indication_fdb_flood_test566 offload_indication_fdb_bridge_test567}568 569offload_indication_decap_route_test()570{571 RET=0572 573 busywait "$TIMEOUT" wait_for_offload \574 ip $IP_FLAG route show table local $LOCAL_IP_1575 check_err $?576 577 ip link set dev vxlan0 down578 busywait "$TIMEOUT" wait_for_offload \579 ip $IP_FLAG route show table local $LOCAL_IP_1580 check_err $?581 582 ip link set dev vxlan1 down583 busywait "$TIMEOUT" not wait_for_offload \584 ip $IP_FLAG route show table local $LOCAL_IP_1585 check_err $?586 587 log_test "vxlan decap route - vxlan device down"588 589 RET=0590 591 ip link set dev vxlan1 up592 busywait "$TIMEOUT" wait_for_offload \593 ip $IP_FLAG route show table local $LOCAL_IP_1594 check_err $?595 596 ip link set dev vxlan0 up597 busywait "$TIMEOUT" wait_for_offload \598 ip $IP_FLAG route show table local $LOCAL_IP_1599 check_err $?600 601 log_test "vxlan decap route - vxlan device up"602 603 RET=0604 605 ip address delete $LOCAL_IP_1/$PREFIX_LEN dev lo606 busywait "$TIMEOUT" not wait_for_offload \607 ip $IP_FLAG route show table local $LOCAL_IP_1608 check_err $?609 610 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo611 busywait "$TIMEOUT" wait_for_offload \612 ip $IP_FLAG route show table local $LOCAL_IP_1613 check_err $?614 615 log_test "vxlan decap route - add local route"616 617 RET=0618 619 ip link set dev $swp1 nomaster620 busywait "$TIMEOUT" wait_for_offload \621 ip $IP_FLAG route show table local $LOCAL_IP_1622 check_err $?623 624 ip link set dev $swp2 nomaster625 busywait "$TIMEOUT" not wait_for_offload \626 ip $IP_FLAG route show table local $LOCAL_IP_1627 check_err $?628 629 ip link set dev $swp1 master br0630 ip link set dev $swp2 master br1631 busywait "$TIMEOUT" wait_for_offload \632 ip $IP_FLAG route show table local $LOCAL_IP_1633 check_err $?634 635 log_test "vxlan decap route - local ports enslavement"636 637 RET=0638 639 ip link del dev br0640 busywait "$TIMEOUT" wait_for_offload \641 ip $IP_FLAG route show table local $LOCAL_IP_1642 check_err $?643 644 ip link del dev br1645 busywait "$TIMEOUT" not wait_for_offload \646 ip $IP_FLAG route show table local $LOCAL_IP_1647 check_err $?648 649 log_test "vxlan decap route - bridge device deletion"650 651 RET=0652 653 ip link add name br0 type bridge mcast_snooping 0654 ip link set dev br0 addrgenmode none655 ip link set dev br0 up656 ip link add name br1 type bridge mcast_snooping 0657 ip link set dev br1 addrgenmode none658 ip link set dev br1 up659 ip link set dev $swp1 master br0660 ip link set dev $swp2 master br1661 ip link set dev vxlan0 master br0662 ip link set dev vxlan1 master br1663 busywait "$TIMEOUT" wait_for_offload \664 ip $IP_FLAG route show table local $LOCAL_IP_1665 check_err $?666 667 ip link del dev vxlan0668 busywait "$TIMEOUT" wait_for_offload \669 ip $IP_FLAG route show table local $LOCAL_IP_1670 check_err $?671 672 ip link del dev vxlan1673 busywait "$TIMEOUT" not wait_for_offload \674 ip $IP_FLAG route show table local $LOCAL_IP_1675 check_err $?676 677 log_test "vxlan decap route - vxlan device deletion"678 679 ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \680 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789681 ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \682 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789683}684 685check_fdb_offloaded()686{687 local mac=00:11:22:33:44:55688 local zmac=00:00:00:00:00:00689 690 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac self \691 bridge fdb show dev vxlan0692 check_err $?693 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac master \694 bridge fdb show dev vxlan0695 check_err $?696 697 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \698 bridge fdb show dev vxlan0699 check_err $?700}701 702check_vxlan_fdb_not_offloaded()703{704 local mac=00:11:22:33:44:55705 local zmac=00:00:00:00:00:00706 707 bridge fdb show dev vxlan0 | grep $mac | grep -q self708 check_err $?709 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac self \710 bridge fdb show dev vxlan0711 check_err $?712 713 bridge fdb show dev vxlan0 | grep $zmac | grep -q self714 check_err $?715 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \716 bridge fdb show dev vxlan0717 check_err $?718}719 720check_bridge_fdb_not_offloaded()721{722 local mac=00:11:22:33:44:55723 local zmac=00:00:00:00:00:00724 725 bridge fdb show dev vxlan0 | grep $mac | grep -q master726 check_err $?727 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac master \728 bridge fdb show dev vxlan0729 check_err $?730}731 732__offload_indication_join_vxlan_first()733{734 local vid=$1; shift735 736 local mac=00:11:22:33:44:55737 local zmac=00:00:00:00:00:00738 739 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2740 741 ip link set dev vxlan0 master br0742 bridge fdb add dev vxlan0 $mac self master static dst $LOCAL_IP_2743 744 RET=0745 check_vxlan_fdb_not_offloaded746 ip link set dev $swp1 master br0747 sleep .1748 check_fdb_offloaded749 log_test "offload indication - attach vxlan first"750 751 RET=0752 ip link set dev vxlan0 down753 check_vxlan_fdb_not_offloaded754 check_bridge_fdb_not_offloaded755 log_test "offload indication - set vxlan down"756 757 RET=0758 ip link set dev vxlan0 up759 sleep .1760 check_fdb_offloaded761 log_test "offload indication - set vxlan up"762 763 if [[ ! -z $vid ]]; then764 RET=0765 bridge vlan del dev vxlan0 vid $vid766 check_vxlan_fdb_not_offloaded767 check_bridge_fdb_not_offloaded768 log_test "offload indication - delete VLAN"769 770 RET=0771 bridge vlan add dev vxlan0 vid $vid772 check_vxlan_fdb_not_offloaded773 check_bridge_fdb_not_offloaded774 log_test "offload indication - add tagged VLAN"775 776 RET=0777 bridge vlan add dev vxlan0 vid $vid pvid untagged778 sleep .1779 check_fdb_offloaded780 log_test "offload indication - add pvid/untagged VLAN"781 fi782 783 RET=0784 ip link set dev $swp1 nomaster785 check_vxlan_fdb_not_offloaded786 log_test "offload indication - detach port"787}788 789offload_indication_join_vxlan_first()790{791 ip link add dev br0 type bridge mcast_snooping 0792 ip link set dev br0 addrgenmode none793 ip link set dev br0 up794 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \795 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789796 797 __offload_indication_join_vxlan_first798 799 ip link del dev vxlan0800 ip link del dev br0801}802 803__offload_indication_join_vxlan_last()804{805 local zmac=00:00:00:00:00:00806 807 RET=0808 809 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2810 811 ip link set dev $swp1 master br0812 813 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \814 bridge fdb show dev vxlan0815 check_err $?816 817 ip link set dev vxlan0 master br0818 819 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \820 bridge fdb show dev vxlan0821 check_err $?822 823 log_test "offload indication - attach vxlan last"824}825 826offload_indication_join_vxlan_last()827{828 ip link add dev br0 type bridge mcast_snooping 0829 ip link set dev br0 addrgenmode none830 ip link set dev br0 up831 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \832 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789833 834 __offload_indication_join_vxlan_last835 836 ip link del dev vxlan0837 ip link del dev br0838}839 840offload_indication_test()841{842 offload_indication_setup_create843 offload_indication_fdb_test844 offload_indication_decap_route_test845 offload_indication_setup_destroy846 847 log_info "offload indication - replay & cleanup"848 offload_indication_join_vxlan_first849 offload_indication_join_vxlan_last850}851 852sanitization_vlan_aware_test()853{854 RET=0855 856 ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1857 ip link set dev br0 addrgenmode none858 859 ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \860 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789861 862 ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \863 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789864 865 # Test that when each VNI is mapped to a different VLAN we can enslave866 # a port to the bridge867 bridge vlan add vid 10 dev vxlan10 pvid untagged868 bridge vlan add vid 20 dev vxlan20 pvid untagged869 870 ip link set dev $swp1 master br0871 check_err $?872 873 log_test "vlan-aware - enslavement to vlan-aware bridge"874 875 # Try to map both VNIs to the same VLAN and make sure configuration876 # fails877 RET=0878 879 bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null880 check_fail $?881 882 log_test "vlan-aware - two vnis mapped to the same vlan"883 884 # Test that enslavement of a port to a bridge fails when two VNIs885 # are mapped to the same VLAN886 RET=0887 888 ip link set dev $swp1 nomaster889 890 bridge vlan del vid 20 dev vxlan20 pvid untagged891 bridge vlan add vid 10 dev vxlan20 pvid untagged892 893 ip link set dev $swp1 master br0 &> /dev/null894 check_fail $?895 896 log_test "vlan-aware - failed enslavement to vlan-aware bridge"897 898 bridge vlan del vid 10 dev vxlan20899 bridge vlan add vid 20 dev vxlan20 pvid untagged900 901 # Test that when two VXLAN tunnels with conflicting configurations902 # (i.e., different TTL) are enslaved to the same VLAN-aware bridge,903 # then the enslavement of a port to the bridge is denied.904 905 # Use the offload indication of the local route to ensure the VXLAN906 # configuration was correctly rollbacked.907 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo908 909 ip link set dev vxlan10 type vxlan ttl 10910 ip link set dev $swp1 master br0 &> /dev/null911 check_fail $?912 913 busywait "$TIMEOUT" not wait_for_offload \914 ip $IP_FLAG route show table local $LOCAL_IP_1915 check_err $?916 917 log_test "vlan-aware - failed enslavement to bridge due to conflict"918 919 ip link set dev vxlan10 type vxlan ttl 20920 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo921 922 ip link del dev vxlan20923 ip link del dev vxlan10924 ip link del dev br0925}926 927offload_indication_vlan_aware_setup_create()928{929 # Create a simple setup with two VxLAN devices and a single VLAN-aware930 # bridge931 ip link add name br0 type bridge mcast_snooping 0 vlan_filtering 1 \932 vlan_default_pvid 0933 ip link set dev br0 addrgenmode none934 ip link set dev br0 up935 936 ip link set dev $swp1 master br0937 938 bridge vlan add vid 10 dev $swp1939 bridge vlan add vid 20 dev $swp1940 941 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo942 943 ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \944 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789945 ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \946 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789947 948 bridge vlan add vid 10 dev vxlan10 pvid untagged949 bridge vlan add vid 20 dev vxlan20 pvid untagged950}951 952offload_indication_vlan_aware_setup_destroy()953{954 bridge vlan del vid 20 dev vxlan20955 bridge vlan del vid 10 dev vxlan10956 957 ip link del dev vxlan20958 ip link del dev vxlan10959 960 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo961 962 bridge vlan del vid 20 dev $swp1963 bridge vlan del vid 10 dev $swp1964 965 ip link set dev $swp1 nomaster966 967 ip link del dev br0968}969 970offload_indication_vlan_aware_fdb_test()971{972 RET=0973 974 log_info "vxlan entry offload indication - vlan-aware"975 976 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \977 dst $LOCAL_IP_2 vlan 10978 979 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \980 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10981 check_err $?982 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \983 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10984 check_err $?985 986 log_test "vxlan entry offload indication - initial state"987 988 # Remove FDB entry from the bridge driver and check that corresponding989 # entry in the VxLAN driver is not marked as offloaded990 RET=0991 992 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10993 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \994 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10995 check_err $?996 997 log_test "vxlan entry offload indication - after removal from bridge"998 999 # Add the FDB entry back to the bridge driver and make sure it is1000 # marked as offloaded in both drivers1001 RET=01002 1003 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 101004 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \1005 de:ad:be:ef:13:37 self bridge fdb show brport vxlan101006 check_err $?1007 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \1008 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan101009 check_err $?1010 1011 log_test "vxlan entry offload indication - after re-add to bridge"1012 1013 # Remove FDB entry from the VxLAN driver and check that corresponding1014 # entry in the bridge driver is not marked as offloaded1015 RET=01016 1017 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self1018 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \1019 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan101020 check_err $?1021 1022 log_test "vxlan entry offload indication - after removal from vxlan"1023 1024 # Add the FDB entry back to the VxLAN driver and make sure it is1025 # marked as offloaded in both drivers1026 RET=01027 1028 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst $LOCAL_IP_21029 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \1030 de:ad:be:ef:13:37 self bridge fdb show brport vxlan101031 check_err $?1032 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \1033 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan101034 check_err $?1035 1036 log_test "vxlan entry offload indication - after re-add to vxlan"1037 1038 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 101039}1040 1041offload_indication_vlan_aware_decap_route_test()1042{1043 RET=01044 1045 busywait "$TIMEOUT" wait_for_offload \1046 ip $IP_FLAG route show table local $LOCAL_IP_11047 check_err $?1048 1049 # Toggle PVID flag on one VxLAN device and make sure route is still1050 # marked as offloaded1051 bridge vlan add vid 10 dev vxlan10 untagged1052 1053 busywait "$TIMEOUT" wait_for_offload \1054 ip $IP_FLAG route show table local $LOCAL_IP_11055 check_err $?1056 1057 # Toggle PVID flag on second VxLAN device and make sure route is no1058 # longer marked as offloaded1059 bridge vlan add vid 20 dev vxlan20 untagged1060 1061 busywait "$TIMEOUT" not wait_for_offload \1062 ip $IP_FLAG route show table local $LOCAL_IP_11063 check_err $?1064 1065 # Toggle PVID flag back and make sure route is marked as offloaded1066 bridge vlan add vid 10 dev vxlan10 pvid untagged1067 bridge vlan add vid 20 dev vxlan20 pvid untagged1068 1069 busywait "$TIMEOUT" wait_for_offload ip $IP_FLAG route show table local \1070 $LOCAL_IP_11071 check_err $?1072 1073 log_test "vxlan decap route - vni map/unmap"1074}1075 1076offload_indication_vlan_aware_join_vxlan_first()1077{1078 ip link add dev br0 type bridge mcast_snooping 0 \1079 vlan_filtering 1 vlan_default_pvid 11080 ip link set dev br0 addrgenmode none1081 ip link set dev br0 up1082 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \1083 ttl 20 tos inherit local $LOCAL_IP_1 dstport 47891084 1085 __offload_indication_join_vxlan_first 11086 1087 ip link del dev vxlan01088 ip link del dev br01089}1090 1091offload_indication_vlan_aware_join_vxlan_last()1092{1093 ip link add dev br0 type bridge mcast_snooping 0 \1094 vlan_filtering 1 vlan_default_pvid 11095 ip link set dev br0 addrgenmode none1096 ip link set dev br0 up1097 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \1098 ttl 20 tos inherit local $LOCAL_IP_1 dstport 47891099 1100 __offload_indication_join_vxlan_last1101 1102 ip link del dev vxlan01103 ip link del dev br01104}1105 1106offload_indication_vlan_aware_l3vni_test()1107{1108 local zmac=00:00:00:00:00:001109 1110 RET=01111 1112 sysctl_set net.ipv6.conf.default.disable_ipv6 11113 ip link add dev br0 type bridge mcast_snooping 0 \1114 vlan_filtering 1 vlan_default_pvid 01115 ip link set dev br0 addrgenmode none1116 ip link set dev br0 up1117 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \1118 ttl 20 tos inherit local $LOCAL_IP_1 dstport 47891119 1120 ip link set dev $swp1 master br01121 1122 # The test will use the offload indication on the FDB entry to1123 # understand if the tunnel is offloaded or not1124 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_21125 1126 ip link set dev vxlan0 master br01127 bridge vlan add dev vxlan0 vid 10 pvid untagged1128 1129 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \1130 bridge fdb show brport vxlan01131 check_err $? "vxlan tunnel not offloaded when should"1132 1133 # Configure a VLAN interface and make sure tunnel is offloaded1134 ip link add link br0 name br10 up type vlan id 101135 sysctl_set net.ipv6.conf.br10.disable_ipv6 01136 ip -6 address add 2001:db8:1::1/64 dev br101137 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \1138 bridge fdb show brport vxlan01139 check_err $? "vxlan tunnel not offloaded when should"1140 1141 # Unlink the VXLAN device, make sure tunnel is no longer offloaded,1142 # then add it back to the bridge and make sure it is offloaded1143 ip link set dev vxlan0 nomaster1144 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \1145 bridge fdb show brport vxlan01146 check_err $? "vxlan tunnel offloaded after unlinked from bridge"1147 1148 ip link set dev vxlan0 master br01149 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \1150 bridge fdb show brport vxlan01151 check_err $? "vxlan tunnel offloaded despite no matching vid"1152 1153 bridge vlan add dev vxlan0 vid 10 pvid untagged1154 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \1155 bridge fdb show brport vxlan01156 check_err $? "vxlan tunnel not offloaded after adding vid"1157 1158 log_test "vxlan - l3 vni"1159 1160 ip link del dev vxlan01161 ip link del dev br01162 sysctl_restore net.ipv6.conf.default.disable_ipv61163}1164 1165offload_indication_vlan_aware_test()1166{1167 offload_indication_vlan_aware_setup_create1168 offload_indication_vlan_aware_fdb_test1169 offload_indication_vlan_aware_decap_route_test1170 offload_indication_vlan_aware_setup_destroy1171 1172 log_info "offload indication - replay & cleanup - vlan aware"1173 offload_indication_vlan_aware_join_vxlan_first1174 offload_indication_vlan_aware_join_vxlan_last1175 offload_indication_vlan_aware_l3vni_test1176}1177 1178trap cleanup EXIT1179 1180setup_prepare1181setup_wait1182 1183tests_run1184 1185exit $EXIT_STATUS1186