brintos

brintos / linux-shallow public Read only

0
0
Text · 8.4 KiB · 9045021 Raw
312 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# Test routing after VXLAN decapsulation and verify that the order of5# configuration does not impact switch behavior. Verify that RIF is added6# correctly for existing mapping and that new mapping uses the correct RIF.7 8# +---------------------------+9# |                        H1 |10# |    + $h1                  |11# |    | 192.0.2.1/28         |12# +----|----------------------+13#      |14# +----|----------------------------------------------------------------------+15# | SW |                                                                      |16# | +--|--------------------------------------------------------------------+ |17# | |  + $swp1                         br1                                  | |18# | |     vid 10 pvid untagged                                              | |19# | |                                                                       | |20# | |                                                                       | |21# | |                                            + vx4001                   | |22# | |                                              local 192.0.2.17         | |23# | |                                              remote 192.0.2.18        | |24# | |                                              id 104001                | |25# | |                                              dstport $VXPORT          | |26# | |                                              vid 4001 pvid untagged   | |27# | |                                                                       | |28# | +----------------------------------+------------------------------------+ |29# |                                    |                                      |30# | +----------------------------------|------------------------------------+ |31# | |                                  |                                    | |32# | |  +-------------------------------+---------------------------------+  | |33# | |  |                                                                 |  | |34# | |  + vlan10                                                 vlan4001 +  | |35# | |    192.0.2.2/28                                                       | |36# | |                                                                       | |37# | |                               vrf-green                               | |38# | +-----------------------------------------------------------------------+ |39# |                                                                           |40# |    + $rp1                                       +lo                       |41# |    | 198.51.100.1/24                             192.0.2.17/32            |42# +----|----------------------------------------------------------------------+43#      |44# +----|--------------------------------------------------------+45# |    |                                             v$rp2      |46# |    + $rp2                                                   |47# |      198.51.100.2/24                                        |48# |                                                             |49# +-------------------------------------------------------------+50 51lib_dir=$(dirname $0)/../../../net/forwarding52 53ALL_TESTS="54	vni_fid_map_rif55	rif_vni_fid_map56"57 58NUM_NETIFS=459source $lib_dir/lib.sh60source $lib_dir/tc_common.sh61source $lib_dir/devlink_lib.sh62 63: ${VXPORT:=4789}64export VXPORT65 66h1_create()67{68	simple_if_init $h1 192.0.2.1/2869}70 71h1_destroy()72{73	simple_if_fini $h1 192.0.2.1/2874}75 76switch_create()77{78	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \79		mcast_snooping 080	# Make sure the bridge uses the MAC address of the local port and not81	# that of the VxLAN's device.82	ip link set dev br1 address $(mac_get $swp1)83	ip link set dev br1 up84 85	ip link set dev $rp1 up86	ip address add dev $rp1 198.51.100.1/2487 88	ip link set dev $swp1 master br189	ip link set dev $swp1 up90	bridge vlan add vid 10 dev $swp1 pvid untagged91 92	tc qdisc add dev $swp1 clsact93 94	ip link add name vx4001 type vxlan id 104001 \95		local 192.0.2.17 dstport $VXPORT \96		nolearning noudpcsum tos inherit ttl 10097	ip link set dev vx4001 up98 99	ip link set dev vx4001 master br1100 101	ip address add 192.0.2.17/32 dev lo102 103	# Create SVIs.104	vrf_create "vrf-green"105	ip link set dev vrf-green up106 107	ip link add link br1 name vlan10 up master vrf-green type vlan id 10108 109	# Replace neighbor to avoid 1 packet which is forwarded in software due110	# to "unresolved neigh".111	ip neigh replace dev vlan10 192.0.2.1 lladdr $(mac_get $h1)112 113	ip address add 192.0.2.2/28 dev vlan10114 115	bridge vlan add vid 10 dev br1 self116	bridge vlan add vid 4001 dev br1 self117 118	sysctl_set net.ipv4.conf.all.rp_filter 0119}120 121switch_destroy()122{123	sysctl_restore net.ipv4.conf.all.rp_filter124 125	bridge vlan del vid 4001 dev br1 self126	bridge vlan del vid 10 dev br1 self127 128	ip link del dev vlan10129 130	vrf_destroy "vrf-green"131 132	ip address del 192.0.2.17/32 dev lo133 134	tc qdisc del dev $swp1 clsact135 136	bridge vlan del vid 10 dev $swp1137	ip link set dev $swp1 down138	ip link set dev $swp1 nomaster139 140	ip link set dev vx4001 nomaster141 142	ip link set dev vx4001 down143	ip link del dev vx4001144 145	ip address del dev $rp1 198.51.100.1/24146	ip link set dev $rp1 down147 148	ip link set dev br1 down149	ip link del dev br1150}151 152vrp2_create()153{154	simple_if_init $rp2 198.51.100.2/24155 156	ip route add 192.0.2.17/32 vrf v$rp2 nexthop via 198.51.100.1157}158 159vrp2_destroy()160{161	ip route del 192.0.2.17/32 vrf v$rp2 nexthop via 198.51.100.1162 163	simple_if_fini $rp2 198.51.100.2/24164}165 166setup_prepare()167{168	h1=${NETIFS[p1]}169	swp1=${NETIFS[p2]}170 171	rp1=${NETIFS[p3]}172	rp2=${NETIFS[p4]}173 174	vrf_prepare175	forwarding_enable176 177	h1_create178	switch_create179 180	vrp2_create181}182 183cleanup()184{185	pre_cleanup186 187	vrp2_destroy188 189	switch_destroy190	h1_destroy191 192	forwarding_restore193	vrf_cleanup194}195 196payload_get()197{198	local dest_mac=$(mac_get vlan4001)199	local src_mac=$(mac_get $rp1)200 201	p=$(:202		)"08:"$(                      : VXLAN flags203		)"00:00:00:"$(                : VXLAN reserved204		)"01:96:41:"$(                : VXLAN VNI : 104001205		)"00:"$(                      : VXLAN reserved206		)"$dest_mac:"$(               : ETH daddr207		)"$src_mac:"$(                : ETH saddr208		)"08:00:"$(                   : ETH type209		)"45:"$(                      : IP version + IHL210		)"00:"$(                      : IP TOS211		)"00:54:"$(                   : IP total length212		)"3f:49:"$(                   : IP identification213		)"00:00:"$(                   : IP flags + frag off214		)"3f:"$(                      : IP TTL215		)"01:"$(                      : IP proto216		)"50:21:"$(                   : IP header csum217		)"c6:33:64:0a:"$(             : IP saddr: 198.51.100.10218		)"c0:00:02:01:"$(             : IP daddr: 192.0.2.1219	)220	echo $p221}222 223vlan_rif_add()224{225	rifs_occ_t0=$(devlink_resource_occ_get rifs)226 227	ip link add link br1 name vlan4001 up master vrf-green \228		type vlan id 4001229 230	rifs_occ_t1=$(devlink_resource_occ_get rifs)231	expected_rifs=$((rifs_occ_t0 + 1))232 233	[[ $expected_rifs -eq $rifs_occ_t1 ]]234	check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"235}236 237vlan_rif_del()238{239	ip link del dev vlan4001240}241 242vni_fid_map_rif()243{244	local rp1_mac=$(mac_get $rp1)245 246	RET=0247 248	# First add VNI->FID mapping to the FID of VLAN 4001249	bridge vlan add vid 4001 dev vx4001 pvid untagged250 251	# Add a RIF to the FID with VNI->FID mapping252	vlan_rif_add253 254	tc filter add dev $swp1 egress protocol ip pref 1 handle 101 \255		flower skip_sw dst_ip 192.0.2.1 action pass256 257	payload=$(payload_get)258	ip vrf exec v$rp2 $MZ $rp2 -c 10 -d 1msec -b $rp1_mac \259		-B 192.0.2.17 -A 192.0.2.18 \260		-t udp sp=12345,dp=$VXPORT,p=$payload -q261 262	tc_check_at_least_x_packets "dev $swp1 egress" 101 10263	check_err $? "Packets were not routed in hardware"264 265	log_test "Add RIF for existing VNI->FID mapping"266 267	tc filter del dev $swp1 egress268 269	bridge vlan del vid 4001 dev vx4001 pvid untagged270	vlan_rif_del271}272 273rif_vni_fid_map()274{275	local rp1_mac=$(mac_get $rp1)276 277	RET=0278 279	# First add a RIF to the FID of VLAN 4001280	vlan_rif_add281 282	# Add VNI->FID mapping to FID with a RIF283	bridge vlan add vid 4001 dev vx4001 pvid untagged284 285	tc filter add dev $swp1 egress protocol ip pref 1 handle 101 \286		flower skip_sw dst_ip 192.0.2.1 action pass287 288	payload=$(payload_get)289	ip vrf exec v$rp2 $MZ $rp2 -c 10 -d 1msec -b $rp1_mac \290		-B 192.0.2.17 -A 192.0.2.18 \291		-t udp sp=12345,dp=$VXPORT,p=$payload -q292 293	tc_check_at_least_x_packets "dev $swp1 egress" 101 10294	check_err $? "Packets were not routed in hardware"295 296	log_test "Add VNI->FID mapping for FID with a RIF"297 298	tc filter del dev $swp1 egress299 300	bridge vlan del vid 4001 dev vx4001 pvid untagged301	vlan_rif_del302}303 304trap cleanup EXIT305 306setup_prepare307setup_wait308 309tests_run310 311exit $EXIT_STATUS312