forked from grate-driver/linux
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ido Schimmel says: ==================== selftests: forwarding: Add ip6gre tests This patchset adds forwarding selftests for ip6gre. The tests can be run with veth pairs or with physical loopbacks. Patch #1 adds a new config option to determine if 'skip_sw' / 'skip_hw' flags are used when installing tc filters. By default, it is not set which means the flags are not used. 'skip_sw' is useful to ensure traffic is forwarded by the hardware data path. Patch #2 adds a new helper function. Patches #3-#4 add the forwarding selftests. Patch #5 adds a mlxsw-specific selftest to validate correct behavior of the 'decap_error' trap with IPv6 underlay. Patches #6-#8 align the corresponding IPv4 underlay test to the IPv6 one. ==================== Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
11 changed files
with
1,109 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
250 changes: 250 additions & 0 deletions
250
tools/testing/selftests/drivers/net/mlxsw/spectrum-2/devlink_trap_tunnel_ipip6.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,250 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# | ||
# Test devlink-trap tunnel exceptions functionality over mlxsw. | ||
# Check all exception traps to make sure they are triggered under the right | ||
# conditions. | ||
|
||
# +-------------------------+ | ||
# | H1 | | ||
# | $h1 + | | ||
# | 2001:db8:1::1/64 | | | ||
# +-------------------|-----+ | ||
# | | ||
# +-------------------|-----+ | ||
# | SW1 | | | ||
# | $swp1 + | | ||
# | 2001:db8:1::2/64 | | ||
# | | | ||
# | + g1 (ip6gre) | | ||
# | loc=2001:db8:3::1 | | ||
# | rem=2001:db8:3::2 | | ||
# | tos=inherit | | ||
# | | | ||
# | + $rp1 | | ||
# | | 2001:db8:10::1/64 | | ||
# +--|----------------------+ | ||
# | | ||
# +--|----------------------+ | ||
# | | VRF2 | | ||
# | + $rp2 | | ||
# | 2001:db8:10::2/64 | | ||
# +-------------------------+ | ||
|
||
lib_dir=$(dirname $0)/../../../../net/forwarding | ||
|
||
ALL_TESTS=" | ||
decap_error_test | ||
" | ||
|
||
NUM_NETIFS=4 | ||
source $lib_dir/lib.sh | ||
source $lib_dir/tc_common.sh | ||
source $lib_dir/devlink_lib.sh | ||
|
||
h1_create() | ||
{ | ||
simple_if_init $h1 2001:db8:1::1/64 | ||
} | ||
|
||
h1_destroy() | ||
{ | ||
simple_if_fini $h1 2001:db8:1::1/64 | ||
} | ||
|
||
vrf2_create() | ||
{ | ||
simple_if_init $rp2 2001:db8:10::2/64 | ||
} | ||
|
||
vrf2_destroy() | ||
{ | ||
simple_if_fini $rp2 2001:db8:10::2/64 | ||
} | ||
|
||
switch_create() | ||
{ | ||
ip link set dev $swp1 up | ||
__addr_add_del $swp1 add 2001:db8:1::2/64 | ||
tc qdisc add dev $swp1 clsact | ||
|
||
tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \ | ||
ttl inherit | ||
ip link set dev g1 up | ||
__addr_add_del g1 add 2001:db8:3::1/128 | ||
|
||
ip link set dev $rp1 up | ||
__addr_add_del $rp1 add 2001:db8:10::1/64 | ||
} | ||
|
||
switch_destroy() | ||
{ | ||
__addr_add_del $rp1 del 2001:db8:10::1/64 | ||
ip link set dev $rp1 down | ||
|
||
__addr_add_del g1 del 2001:db8:3::1/128 | ||
ip link set dev g1 down | ||
tunnel_destroy g1 | ||
|
||
tc qdisc del dev $swp1 clsact | ||
__addr_add_del $swp1 del 2001:db8:1::2/64 | ||
ip link set dev $swp1 down | ||
} | ||
|
||
setup_prepare() | ||
{ | ||
h1=${NETIFS[p1]} | ||
swp1=${NETIFS[p2]} | ||
|
||
rp1=${NETIFS[p3]} | ||
rp2=${NETIFS[p4]} | ||
|
||
forwarding_enable | ||
vrf_prepare | ||
h1_create | ||
switch_create | ||
vrf2_create | ||
} | ||
|
||
cleanup() | ||
{ | ||
pre_cleanup | ||
|
||
vrf2_destroy | ||
switch_destroy | ||
h1_destroy | ||
vrf_cleanup | ||
forwarding_restore | ||
} | ||
|
||
ipip_payload_get() | ||
{ | ||
local saddr="20:01:0d:b8:00:02:00:00:00:00:00:00:00:00:00:01" | ||
local daddr="20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01" | ||
local flags=$1; shift | ||
local key=$1; shift | ||
|
||
p=$(: | ||
)"$flags"$( : GRE flags | ||
)"0:00:"$( : Reserved + version | ||
)"86:dd:"$( : ETH protocol type | ||
)"$key"$( : Key | ||
)"6"$( : IP version | ||
)"0:0"$( : Traffic class | ||
)"0:00:00:"$( : Flow label | ||
)"00:00:"$( : Payload length | ||
)"3a:"$( : Next header | ||
)"04:"$( : Hop limit | ||
)"$saddr:"$( : IP saddr | ||
)"$daddr:"$( : IP daddr | ||
) | ||
echo $p | ||
} | ||
|
||
ecn_payload_get() | ||
{ | ||
echo $(ipip_payload_get "0") | ||
} | ||
|
||
ecn_decap_test() | ||
{ | ||
local trap_name="decap_error" | ||
local desc=$1; shift | ||
local ecn_desc=$1; shift | ||
local outer_tos=$1; shift | ||
local mz_pid | ||
|
||
RET=0 | ||
|
||
tc filter add dev $swp1 egress protocol ipv6 pref 1 handle 101 \ | ||
flower src_ip 2001:db8:2::1 dst_ip 2001:db8:1::1 skip_sw \ | ||
action pass | ||
|
||
rp1_mac=$(mac_get $rp1) | ||
rp2_mac=$(mac_get $rp2) | ||
payload=$(ecn_payload_get) | ||
|
||
ip vrf exec v$rp2 $MZ -6 $rp2 -c 0 -d 1msec -a $rp2_mac -b $rp1_mac \ | ||
-A 2001:db8:3::2 -B 2001:db8:3::1 -t ip \ | ||
tos=$outer_tos,next=47,p=$payload -q & | ||
mz_pid=$! | ||
|
||
devlink_trap_exception_test $trap_name | ||
|
||
tc_check_packets "dev $swp1 egress" 101 0 | ||
check_err $? "Packets were not dropped" | ||
|
||
log_test "$desc: Inner ECN is not ECT and outer is $ecn_desc" | ||
|
||
kill $mz_pid && wait $mz_pid &> /dev/null | ||
tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower | ||
} | ||
|
||
no_matching_tunnel_test() | ||
{ | ||
local trap_name="decap_error" | ||
local desc=$1; shift | ||
local sip=$1; shift | ||
local mz_pid | ||
|
||
RET=0 | ||
|
||
tc filter add dev $swp1 egress protocol ipv6 pref 1 handle 101 \ | ||
flower src_ip 2001:db8:2::1 dst_ip 2001:db8:1::1 action pass | ||
|
||
rp1_mac=$(mac_get $rp1) | ||
rp2_mac=$(mac_get $rp2) | ||
payload=$(ipip_payload_get "$@") | ||
|
||
ip vrf exec v$rp2 $MZ -6 $rp2 -c 0 -d 1msec -a $rp2_mac -b $rp1_mac \ | ||
-A $sip -B 2001:db8:3::1 -t ip next=47,p=$payload -q & | ||
mz_pid=$! | ||
|
||
devlink_trap_exception_test $trap_name | ||
|
||
tc_check_packets "dev $swp1 egress" 101 0 | ||
check_err $? "Packets were not dropped" | ||
|
||
log_test "$desc" | ||
|
||
kill $mz_pid && wait $mz_pid &> /dev/null | ||
tc filter del dev $swp1 egress protocol ipv6 pref 1 handle 101 flower | ||
} | ||
|
||
decap_error_test() | ||
{ | ||
# Correct source IP - the remote address | ||
local sip=2001:db8:3::2 | ||
|
||
ecn_decap_test "Decap error" "ECT(1)" 01 | ||
ecn_decap_test "Decap error" "ECT(0)" 02 | ||
ecn_decap_test "Decap error" "CE" 03 | ||
|
||
no_matching_tunnel_test "Decap error: Source IP check failed" \ | ||
2001:db8:4::2 "0" | ||
no_matching_tunnel_test \ | ||
"Decap error: Key exists but was not expected" $sip "2" \ | ||
"00:00:00:E9:" | ||
|
||
# Destroy the tunnel and create new one with key | ||
__addr_add_del g1 del 2001:db8:3::1/128 | ||
tunnel_destroy g1 | ||
|
||
tunnel_create g1 ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \ | ||
ttl inherit key 233 | ||
__addr_add_del g1 add 2001:db8:3::1/128 | ||
|
||
no_matching_tunnel_test \ | ||
"Decap error: Key does not exist but was expected" $sip "0" | ||
no_matching_tunnel_test \ | ||
"Decap error: Packet has a wrong key field" $sip "2" \ | ||
"00:00:00:E8:" | ||
} | ||
|
||
trap cleanup EXIT | ||
|
||
setup_prepare | ||
setup_wait | ||
tests_run | ||
|
||
exit $EXIT_STATUS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.