diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/testing/selftests/net/pmtu.sh | 87 |
1 files changed, 61 insertions, 26 deletions
diff --git a/tools/testing/selftests/net/pmtu.sh b/tools/testing/selftests/net/pmtu.sh index 2d33e533ad36..733de6053b5c 100755 --- a/tools/testing/selftests/net/pmtu.sh +++ b/tools/testing/selftests/net/pmtu.sh @@ -5,13 +5,16 @@ # # Tests currently implemented: # -# - test_pmtu_vti6_exception +# - pmtu_vti6_exception # Set up vti6 tunnel on top of veth, with xfrm states and policies, in two # namespaces with matching endpoints. Check that route exception is # created by exceeding link layer MTU with ping to other endpoint. Then # decrease and increase MTU of tunnel, checking that route exception PMTU # changes accordingly +tests=" + pmtu_vti6_exception vti6: PMTU exceptions" + NS_A="ns-$(mktemp -u XXXXXX)" NS_B="ns-$(mktemp -u XXXXXX)" ns_a="ip netns exec ${NS_A}" @@ -25,6 +28,19 @@ vti6_a_addr="fd00:2::a" vti6_b_addr="fd00:2::b" vti6_mask="64" +cleanup_done=1 +err_buf= + +err() { + err_buf="${err_buf}${1} +" +} + +err_flush() { + echo -n "${err_buf}" + err_buf= +} + setup_namespaces() { ip netns add ${NS_A} || return 1 ip netns add ${NS_B} @@ -67,26 +83,19 @@ setup_xfrm() { } setup() { - tunnel_type="$1" - - [ "$(id -u)" -ne 0 ] && echo "SKIP: need to run as root" && exit 0 - - setup_namespaces || { echo "SKIP: namespaces not supported"; exit 0; } - setup_veth || { echo "SKIP: veth not supported"; exit 0; } + [ "$(id -u)" -ne 0 ] && echo " need to run as root" && return 1 - case ${tunnel_type} in - "vti6") - setup_vti6 || { echo "SKIP: vti6 not supported"; exit 0; } - setup_xfrm || { echo "SKIP: xfrm not supported"; exit 0; } - ;; - *) - ;; - esac + cleanup_done=0 + for arg do + eval setup_${arg} || { echo " ${arg} not supported"; return 1; } + done } cleanup() { + [ ${cleanup_done} -eq 1 ] && return ip netns del ${NS_A} 2 > /dev/null ip netns del ${NS_B} 2 > /dev/null + cleanup_done=1 } mtu() { @@ -122,7 +131,8 @@ route_get_dst_pmtu_from_exception() { } test_pmtu_vti6_exception() { - setup vti6 + setup namespaces veth vti6 xfrm || return 2 + fail=0 # Create route exception by exceeding link layer MTU mtu "${ns_a}" veth_a 4000 @@ -133,30 +143,55 @@ test_pmtu_vti6_exception() { # Check that exception was created if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" = "" ]; then - echo "FAIL: Tunnel exceeding link layer MTU didn't create route exception" - exit 1 + err " tunnel exceeding link layer MTU didn't create route exception" + return 1 fi # Decrease tunnel MTU, check for PMTU decrease in route exception mtu "${ns_a}" vti_a 3000 if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" -ne 3000 ]; then - echo "FAIL: Decreasing tunnel MTU didn't decrease route exception PMTU" - exit 1 + err " decreasing tunnel MTU didn't decrease route exception PMTU" + fail=1 fi # Increase tunnel MTU, check for PMTU increase in route exception mtu "${ns_a}" vti_a 9000 if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" -ne 9000 ]; then - echo "FAIL: Increasing tunnel MTU didn't increase route exception PMTU" - exit 1 + err " increasing tunnel MTU didn't increase route exception PMTU" + fail=1 fi - echo "PASS" + return ${fail} } trap cleanup EXIT -test_pmtu_vti6_exception - -exit 0 +exitcode=0 +desc=0 +IFS=" +" +for t in ${tests}; do + [ $desc -eq 0 ] && name="${t}" && desc=1 && continue || desc=0 + + ( + unset IFS + eval test_${name} + ret=$? + cleanup + + if [ $ret -eq 0 ]; then + printf "TEST: %-60s [ OK ]\n" "${t}" + elif [ $ret -eq 1 ]; then + printf "TEST: %-60s [FAIL]\n" "${t}" + err_flush + exit 1 + elif [ $ret -eq 2 ]; then + printf "TEST: %-60s [SKIP]\n" "${t}" + err_flush + fi + ) + [ $? -ne 0 ] && exitcode=1 +done + +exit ${exitcode} |