cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

devlink_trap_tunnel_ipip6.sh (5487B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3#
      4# Test devlink-trap tunnel exceptions functionality over mlxsw.
      5# Check all exception traps to make sure they are triggered under the right
      6# 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/forwarding
     35
     36ALL_TESTS="
     37	decap_error_test
     38"
     39
     40NUM_NETIFS=4
     41source $lib_dir/lib.sh
     42source $lib_dir/tc_common.sh
     43source $lib_dir/devlink_lib.sh
     44
     45h1_create()
     46{
     47	simple_if_init $h1 2001:db8:1::1/64
     48}
     49
     50h1_destroy()
     51{
     52	simple_if_fini $h1 2001:db8:1::1/64
     53}
     54
     55vrf2_create()
     56{
     57	simple_if_init $rp2 2001:db8:10::2/64
     58}
     59
     60vrf2_destroy()
     61{
     62	simple_if_fini $rp2 2001:db8:10::2/64
     63}
     64
     65switch_create()
     66{
     67	ip link set dev $swp1 up
     68	__addr_add_del $swp1 add 2001:db8:1::2/64
     69	tc qdisc add dev $swp1 clsact
     70
     71	tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \
     72		ttl inherit
     73	ip link set dev g1 up
     74	__addr_add_del g1 add 2001:db8:3::1/128
     75
     76	ip link set dev $rp1 up
     77	__addr_add_del $rp1 add 2001:db8:10::1/64
     78}
     79
     80switch_destroy()
     81{
     82	__addr_add_del $rp1 del 2001:db8:10::1/64
     83	ip link set dev $rp1 down
     84
     85	__addr_add_del g1 del 2001:db8:3::1/128
     86	ip link set dev g1 down
     87	tunnel_destroy g1
     88
     89	tc qdisc del dev $swp1 clsact
     90	__addr_add_del $swp1 del 2001:db8:1::2/64
     91	ip link set dev $swp1 down
     92}
     93
     94setup_prepare()
     95{
     96	h1=${NETIFS[p1]}
     97	swp1=${NETIFS[p2]}
     98
     99	rp1=${NETIFS[p3]}
    100	rp2=${NETIFS[p4]}
    101
    102	forwarding_enable
    103	vrf_prepare
    104	h1_create
    105	switch_create
    106	vrf2_create
    107}
    108
    109cleanup()
    110{
    111	pre_cleanup
    112
    113	vrf2_destroy
    114	switch_destroy
    115	h1_destroy
    116	vrf_cleanup
    117	forwarding_restore
    118}
    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; shift
    125	local key=$1; shift
    126
    127	p=$(:
    128		)"$flags"$(		      : GRE flags
    129	        )"0:00:"$(                    : Reserved + version
    130		)"86:dd:"$(		      : ETH protocol type
    131		)"$key"$( 		      : Key
    132		)"6"$(	                      : IP version
    133		)"0:0"$(		      : Traffic class
    134		)"0:00:00:"$(		      : Flow label
    135		)"00:00:"$(                   : Payload length
    136		)"3a:"$(                      : Next header
    137		)"04:"$(                      : Hop limit
    138		)"$saddr:"$(                  : IP saddr
    139		)"$daddr:"$(                  : IP daddr
    140		)
    141	echo $p
    142}
    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; shift
    153	local ecn_desc=$1; shift
    154	local outer_tos=$1; shift
    155	local mz_pid
    156
    157	RET=0
    158
    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 pass
    162
    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_name
    173
    174	tc_check_packets "dev $swp1 egress" 101 0
    175	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/null
    180	tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower
    181}
    182
    183no_matching_tunnel_test()
    184{
    185	local trap_name="decap_error"
    186	local desc=$1; shift
    187	local sip=$1; shift
    188	local mz_pid
    189
    190	RET=0
    191
    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 pass
    194
    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_name
    204
    205	tc_check_packets "dev $swp1 egress" 101 0
    206	check_err $? "Packets were not dropped"
    207
    208	log_test "$desc"
    209
    210	kill $mz_pid && wait $mz_pid &> /dev/null
    211	tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower
    212}
    213
    214decap_error_test()
    215{
    216	# Correct source IP - the remote address
    217	local sip=2001:db8:3::2
    218
    219	ecn_decap_test "Decap error" "ECT(1)" 01
    220	ecn_decap_test "Decap error" "ECT(0)" 02
    221	ecn_decap_test "Decap error" "CE" 03
    222
    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 key
    230	__addr_add_del g1 del 2001:db8:3::1/128
    231	tunnel_destroy g1
    232
    233	tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \
    234		ttl inherit key 233
    235	__addr_add_del g1 add 2001:db8:3::1/128
    236
    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 EXIT
    245
    246setup_prepare
    247setup_wait
    248tests_run
    249
    250exit $EXIT_STATUS