brintos

brintos / linux-shallow public Read only

0
0
Text · 5.4 KiB · 8781250 Raw
251 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test devlink-trap tunnel exceptions functionality over mlxsw.5# Check all exception traps to make sure they are triggered under the right6# conditions.7 8# +-------------------------+9# | H1                      |10# |               $h1 +     |11# |  2001:db8:1::1/64 |     |12# +-------------------|-----+13#                     |14# +-------------------|-----+15# | SW1               |     |16# |             $swp1 +     |17# |  2001:db8:1::2/64       |18# |                         |19# |  + g1 (ip6gre)          |20# |    loc=2001:db8:3::1    |21# |    rem=2001:db8:3::2    |22# |    tos=inherit          |23# |                         |24# |  + $rp1                 |25# |  | 2001:db8:10::1/64    |26# +--|----------------------+27#    |28# +--|----------------------+29# |  |                 VRF2 |30# |  + $rp2                 |31# |    2001:db8:10::2/64    |32# +-------------------------+33 34lib_dir=$(dirname $0)/../../../net/forwarding35 36ALL_TESTS="37	decap_error_test38"39 40NUM_NETIFS=441source $lib_dir/lib.sh42source $lib_dir/tc_common.sh43source $lib_dir/devlink_lib.sh44 45h1_create()46{47	simple_if_init $h1 2001:db8:1::1/6448}49 50h1_destroy()51{52	simple_if_fini $h1 2001:db8:1::1/6453}54 55vrf2_create()56{57	simple_if_init $rp2 2001:db8:10::2/6458}59 60vrf2_destroy()61{62	simple_if_fini $rp2 2001:db8:10::2/6463}64 65switch_create()66{67	ip link set dev $swp1 up68	__addr_add_del $swp1 add 2001:db8:1::2/6469	tc qdisc add dev $swp1 clsact70 71	tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \72		ttl inherit73	ip link set dev g1 up74	__addr_add_del g1 add 2001:db8:3::1/12875 76	ip link set dev $rp1 up77	__addr_add_del $rp1 add 2001:db8:10::1/6478}79 80switch_destroy()81{82	__addr_add_del $rp1 del 2001:db8:10::1/6483	ip link set dev $rp1 down84 85	__addr_add_del g1 del 2001:db8:3::1/12886	ip link set dev g1 down87	tunnel_destroy g188 89	tc qdisc del dev $swp1 clsact90	__addr_add_del $swp1 del 2001:db8:1::2/6491	ip link set dev $swp1 down92}93 94setup_prepare()95{96	h1=${NETIFS[p1]}97	swp1=${NETIFS[p2]}98 99	rp1=${NETIFS[p3]}100	rp2=${NETIFS[p4]}101 102	forwarding_enable103	vrf_prepare104	h1_create105	switch_create106	vrf2_create107}108 109cleanup()110{111	pre_cleanup112 113	vrf2_destroy114	switch_destroy115	h1_destroy116	vrf_cleanup117	forwarding_restore118}119 120ipip_payload_get()121{122	local saddr="20:01:0d:b8:00:02:00:00:00:00:00:00:00:00:00:01"123	local daddr="20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01"124	local flags=$1; shift125	local key=$1; shift126 127	p=$(:128		)"$flags"$(		      : GRE flags129	        )"0:00:"$(                    : Reserved + version130		)"86:dd:"$(		      : ETH protocol type131		)"$key"$( 		      : Key132		)"6"$(	                      : IP version133		)"0:0"$(		      : Traffic class134		)"0:00:00:"$(		      : Flow label135		)"00:00:"$(                   : Payload length136		)"3a:"$(                      : Next header137		)"04:"$(                      : Hop limit138		)"$saddr:"$(                  : IP saddr139		)"$daddr:"$(                  : IP daddr140		)141	echo $p142}143 144ecn_payload_get()145{146	echo $(ipip_payload_get "0")147}148 149ecn_decap_test()150{151	local trap_name="decap_error"152	local desc=$1; shift153	local ecn_desc=$1; shift154	local outer_tos=$1; shift155	local mz_pid156 157	RET=0158 159	tc filter add dev $swp1 egress protocol ipv6 pref 1 handle 101 \160		flower src_ip 2001:db8:2::1 dst_ip 2001:db8:1::1 skip_sw \161		action pass162 163	rp1_mac=$(mac_get $rp1)164	rp2_mac=$(mac_get $rp2)165	payload=$(ecn_payload_get)166 167	ip vrf exec v$rp2 $MZ -6 $rp2 -c 0 -d 1msec -a $rp2_mac -b $rp1_mac \168		-A 2001:db8:3::2 -B 2001:db8:3::1 -t ip \169			tos=$outer_tos,next=47,p=$payload -q &170	mz_pid=$!171 172	devlink_trap_exception_test $trap_name173 174	tc_check_packets "dev $swp1 egress" 101 0175	check_err $? "Packets were not dropped"176 177	log_test "$desc: Inner ECN is not ECT and outer is $ecn_desc"178 179	kill $mz_pid && wait $mz_pid &> /dev/null180	tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower181}182 183no_matching_tunnel_test()184{185	local trap_name="decap_error"186	local desc=$1; shift187	local sip=$1; shift188	local mz_pid189 190	RET=0191 192	tc filter add dev $swp1 egress protocol ipv6 pref 1 handle 101 \193		flower src_ip 2001:db8:2::1 dst_ip 2001:db8:1::1 action pass194 195	rp1_mac=$(mac_get $rp1)196	rp2_mac=$(mac_get $rp2)197	payload=$(ipip_payload_get "$@")198 199	ip vrf exec v$rp2 $MZ -6 $rp2 -c 0 -d 1msec -a $rp2_mac -b $rp1_mac \200		-A $sip -B 2001:db8:3::1 -t ip next=47,p=$payload -q &201	mz_pid=$!202 203	devlink_trap_exception_test $trap_name204 205	tc_check_packets "dev $swp1 egress" 101 0206	check_err $? "Packets were not dropped"207 208	log_test "$desc"209 210	kill $mz_pid && wait $mz_pid &> /dev/null211	tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower212}213 214decap_error_test()215{216	# Correct source IP - the remote address217	local sip=2001:db8:3::2218 219	ecn_decap_test "Decap error" "ECT(1)" 01220	ecn_decap_test "Decap error" "ECT(0)" 02221	ecn_decap_test "Decap error" "CE" 03222 223	no_matching_tunnel_test "Decap error: Source IP check failed" \224		2001:db8:4::2 "0"225	no_matching_tunnel_test \226		"Decap error: Key exists but was not expected" $sip "2" \227		"00:00:00:E9:"228 229	# Destroy the tunnel and create new one with key230	__addr_add_del g1 del 2001:db8:3::1/128231	tunnel_destroy g1232 233	tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \234		ttl inherit key 233235	__addr_add_del g1 add 2001:db8:3::1/128236 237	no_matching_tunnel_test \238		"Decap error: Key does not exist but was expected" $sip "0"239	no_matching_tunnel_test \240		"Decap error: Packet has a wrong key field" $sip "2" \241		"00:00:00:E8:"242}243 244trap cleanup EXIT245 246setup_prepare247setup_wait248tests_run249 250exit $EXIT_STATUS251