brintos

brintos / linux-shallow public Read only

0
0
Text · 30.2 KiB · 4687b0a Raw
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