mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
selftests: net: Test for the IOAM encapsulation with IPv6
This patch adds support for testing the encap (ip6ip6) mode of IOAM. Signed-off-by: Justin Iurman <justin.iurman@uliege.be> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8cb3bf8bff
commit
bf77b1400a
@ -6,7 +6,7 @@
|
||||
# This script evaluates the IOAM insertion for IPv6 by checking the IOAM data
|
||||
# consistency directly inside packets on the receiver side. Tests are divided
|
||||
# into three categories: OUTPUT (evaluates the IOAM processing by the sender),
|
||||
# INPUT (evaluates the IOAM processing by the receiver) and GLOBAL (evaluates
|
||||
# INPUT (evaluates the IOAM processing by a receiver) and GLOBAL (evaluates
|
||||
# wider use cases that do not fall into the other two categories). Both OUTPUT
|
||||
# and INPUT tests only use a two-node topology (alpha and beta), while GLOBAL
|
||||
# tests use the entire three-node topology (alpha, beta, gamma). Each test is
|
||||
@ -200,7 +200,7 @@ check_kernel_compatibility()
|
||||
ip -netns ioam-tmp-node link set veth0 up
|
||||
ip -netns ioam-tmp-node link set veth1 up
|
||||
|
||||
ip -netns ioam-tmp-node ioam namespace add 0 &>/dev/null
|
||||
ip -netns ioam-tmp-node ioam namespace add 0
|
||||
ns_ad=$?
|
||||
|
||||
ip -netns ioam-tmp-node ioam namespace show | grep -q "namespace 0"
|
||||
@ -214,11 +214,11 @@ check_kernel_compatibility()
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ip -netns ioam-tmp-node route add db02::/64 encap ioam6 trace prealloc \
|
||||
type 0x800000 ns 0 size 4 dev veth0 &>/dev/null
|
||||
ip -netns ioam-tmp-node route add db02::/64 encap ioam6 mode inline \
|
||||
trace prealloc type 0x800000 ns 0 size 4 dev veth0
|
||||
tr_ad=$?
|
||||
|
||||
ip -netns ioam-tmp-node -6 route | grep -q "encap ioam6 trace"
|
||||
ip -netns ioam-tmp-node -6 route | grep -q "encap ioam6"
|
||||
tr_sh=$?
|
||||
|
||||
if [[ $tr_ad != 0 || $tr_sh != 0 ]]
|
||||
@ -232,6 +232,30 @@ check_kernel_compatibility()
|
||||
|
||||
ip link del veth0 2>/dev/null || true
|
||||
ip netns del ioam-tmp-node || true
|
||||
|
||||
lsmod | grep -q "ip6_tunnel"
|
||||
ip6tnl_loaded=$?
|
||||
|
||||
if [ $ip6tnl_loaded = 0 ]
|
||||
then
|
||||
encap_tests=0
|
||||
else
|
||||
modprobe ip6_tunnel &>/dev/null
|
||||
lsmod | grep -q "ip6_tunnel"
|
||||
encap_tests=$?
|
||||
|
||||
if [ $encap_tests != 0 ]
|
||||
then
|
||||
ip a | grep -q "ip6tnl0"
|
||||
encap_tests=$?
|
||||
|
||||
if [ $encap_tests != 0 ]
|
||||
then
|
||||
echo "Note: ip6_tunnel not found neither as a module nor inside the" \
|
||||
"kernel, tests that require it (encap mode) will be omitted"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
cleanup()
|
||||
@ -242,6 +266,11 @@ cleanup()
|
||||
ip netns del ioam-node-alpha || true
|
||||
ip netns del ioam-node-beta || true
|
||||
ip netns del ioam-node-gamma || true
|
||||
|
||||
if [ $ip6tnl_loaded != 0 ]
|
||||
then
|
||||
modprobe -r ip6_tunnel 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
setup()
|
||||
@ -329,6 +358,12 @@ log_test_failed()
|
||||
printf "TEST: %-60s [FAIL]\n" "${desc}"
|
||||
}
|
||||
|
||||
log_results()
|
||||
{
|
||||
echo "- Tests passed: ${npassed}"
|
||||
echo "- Tests failed: ${nfailed}"
|
||||
}
|
||||
|
||||
run_test()
|
||||
{
|
||||
local name=$1
|
||||
@ -349,16 +384,26 @@ run_test()
|
||||
ip netns exec $node_src ping6 -t 64 -c 1 -W 1 $ip6_dst &>/dev/null
|
||||
if [ $? != 0 ]
|
||||
then
|
||||
nfailed=$((nfailed+1))
|
||||
log_test_failed "${desc}"
|
||||
kill -2 $spid &>/dev/null
|
||||
else
|
||||
wait $spid
|
||||
[ $? = 0 ] && log_test_passed "${desc}" || log_test_failed "${desc}"
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
npassed=$((npassed+1))
|
||||
log_test_passed "${desc}"
|
||||
else
|
||||
nfailed=$((nfailed+1))
|
||||
log_test_failed "${desc}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
run()
|
||||
{
|
||||
echo
|
||||
printf "%0.s-" {1..74}
|
||||
echo
|
||||
echo "OUTPUT tests"
|
||||
printf "%0.s-" {1..74}
|
||||
@ -369,7 +414,8 @@ run()
|
||||
|
||||
for t in $TESTS_OUTPUT
|
||||
do
|
||||
$t
|
||||
$t "inline"
|
||||
[ $encap_tests = 0 ] && $t "encap"
|
||||
done
|
||||
|
||||
# clean OUTPUT settings
|
||||
@ -377,6 +423,8 @@ run()
|
||||
ip -netns ioam-node-alpha route change db01::/64 dev veth0
|
||||
|
||||
|
||||
echo
|
||||
printf "%0.s-" {1..74}
|
||||
echo
|
||||
echo "INPUT tests"
|
||||
printf "%0.s-" {1..74}
|
||||
@ -387,7 +435,8 @@ run()
|
||||
|
||||
for t in $TESTS_INPUT
|
||||
do
|
||||
$t
|
||||
$t "inline"
|
||||
[ $encap_tests = 0 ] && $t "encap"
|
||||
done
|
||||
|
||||
# clean INPUT settings
|
||||
@ -396,7 +445,8 @@ run()
|
||||
ip -netns ioam-node-alpha ioam namespace set 123 schema ${ALPHA[8]}
|
||||
ip -netns ioam-node-alpha route change db01::/64 dev veth0
|
||||
|
||||
|
||||
echo
|
||||
printf "%0.s-" {1..74}
|
||||
echo
|
||||
echo "GLOBAL tests"
|
||||
printf "%0.s-" {1..74}
|
||||
@ -404,8 +454,12 @@ run()
|
||||
|
||||
for t in $TESTS_GLOBAL
|
||||
do
|
||||
$t
|
||||
$t "inline"
|
||||
[ $encap_tests = 0 ] && $t "encap"
|
||||
done
|
||||
|
||||
echo
|
||||
log_results
|
||||
}
|
||||
|
||||
bit2type=(
|
||||
@ -431,11 +485,16 @@ out_undef_ns()
|
||||
##############################################################################
|
||||
local desc="Unknown IOAM namespace"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0x800000 ns 0 size 4 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0x800000 0
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0x800000 ns 0 size 4 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0x800000 0
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
out_no_room()
|
||||
@ -446,11 +505,16 @@ out_no_room()
|
||||
##############################################################################
|
||||
local desc="Missing trace room"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0xc00000 ns 123 size 4 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0xc00000 123
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xc00000 ns 123 size 4 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0xc00000 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
out_bits()
|
||||
@ -465,15 +529,21 @@ out_bits()
|
||||
local tmp=${bit2size[22]}
|
||||
bit2size[22]=$(( $tmp + ${#ALPHA[9]} + ((4 - (${#ALPHA[9]} % 4)) % 4) ))
|
||||
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
for i in {0..22}
|
||||
do
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace \
|
||||
prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} dev veth0
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} \
|
||||
dev veth0
|
||||
|
||||
run_test "out_bit$i" "${desc/<n>/$i}" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 ${bit2type[$i]} 123
|
||||
run_test "out_bit$i" "${desc/<n>/$i} ($1 mode)" ioam-node-alpha \
|
||||
ioam-node-beta db01::2 db01::1 veth0 ${bit2type[$i]} 123
|
||||
done
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
|
||||
bit2size[22]=$tmp
|
||||
}
|
||||
|
||||
@ -485,11 +555,16 @@ out_full_supp_trace()
|
||||
##############################################################################
|
||||
local desc="Full supported trace"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0xfff002 ns 123 size 100 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0xfff002 123
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xfff002 ns 123 size 100 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0xfff002 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
|
||||
@ -510,11 +585,16 @@ in_undef_ns()
|
||||
##############################################################################
|
||||
local desc="Unknown IOAM namespace"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0x800000 ns 0 size 4 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0x800000 0
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0x800000 ns 0 size 4 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0x800000 0
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
in_no_room()
|
||||
@ -525,11 +605,16 @@ in_no_room()
|
||||
##############################################################################
|
||||
local desc="Missing trace room"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0xc00000 ns 123 size 4 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0xc00000 123
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xc00000 ns 123 size 4 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0xc00000 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
in_bits()
|
||||
@ -544,15 +629,21 @@ in_bits()
|
||||
local tmp=${bit2size[22]}
|
||||
bit2size[22]=$(( $tmp + ${#BETA[9]} + ((4 - (${#BETA[9]} % 4)) % 4) ))
|
||||
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
for i in {0..22}
|
||||
do
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace \
|
||||
prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} dev veth0
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} \
|
||||
dev veth0
|
||||
|
||||
run_test "in_bit$i" "${desc/<n>/$i}" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 ${bit2type[$i]} 123
|
||||
run_test "in_bit$i" "${desc/<n>/$i} ($1 mode)" ioam-node-alpha \
|
||||
ioam-node-beta db01::2 db01::1 veth0 ${bit2type[$i]} 123
|
||||
done
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
|
||||
bit2size[22]=$tmp
|
||||
}
|
||||
|
||||
@ -569,11 +660,16 @@ in_oflag()
|
||||
# back the IOAM namespace that was previously configured on the sender.
|
||||
ip -netns ioam-node-alpha ioam namespace add 123
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0xc00000 ns 123 size 4 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0xc00000 123
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xc00000 ns 123 size 4 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0xc00000 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
|
||||
# And we clean the exception for this test to get things back to normal for
|
||||
# other INPUT tests
|
||||
@ -588,11 +684,16 @@ in_full_supp_trace()
|
||||
##############################################################################
|
||||
local desc="Full supported trace"
|
||||
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 trace prealloc \
|
||||
type 0xfff002 ns 123 size 80 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-beta db01::2 \
|
||||
db01::1 veth0 0xfff002 123
|
||||
ip -netns ioam-node-alpha route change db01::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xfff002 ns 123 size 80 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-beta \
|
||||
db01::2 db01::1 veth0 0xfff002 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-beta link set ip6tnl0 down
|
||||
}
|
||||
|
||||
|
||||
@ -611,11 +712,16 @@ fwd_full_supp_trace()
|
||||
##############################################################################
|
||||
local desc="Forward - Full supported trace"
|
||||
|
||||
ip -netns ioam-node-alpha route change db02::/64 encap ioam6 trace prealloc \
|
||||
type 0xfff002 ns 123 size 244 via db01::1 dev veth0
|
||||
[ "$1" = "encap" ] && mode="$1 tundst db02::2" || mode="$1"
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-gamma link set ip6tnl0 up
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc}" ioam-node-alpha ioam-node-gamma db01::2 \
|
||||
db02::2 veth0 0xfff002 123
|
||||
ip -netns ioam-node-alpha route change db02::/64 encap ioam6 mode $mode \
|
||||
trace prealloc type 0xfff002 ns 123 size 244 via db01::1 dev veth0
|
||||
|
||||
run_test ${FUNCNAME[0]} "${desc} ($1 mode)" ioam-node-alpha ioam-node-gamma \
|
||||
db01::2 db02::2 veth0 0xfff002 123
|
||||
|
||||
[ "$1" = "encap" ] && ip -netns ioam-node-gamma link set ip6tnl0 down
|
||||
}
|
||||
|
||||
|
||||
@ -625,6 +731,9 @@ fwd_full_supp_trace()
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
npassed=0
|
||||
nfailed=0
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]
|
||||
then
|
||||
echo "SKIP: Need root privileges"
|
||||
|
Loading…
Reference in New Issue
Block a user