selftests: mptcp: join: skip check if MIB counter not supported

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the MPTCP MIB counters introduced in commit fc518953bc
("mptcp: add and use MIB counter infrastructure") and more later. The
MPTCP Join selftest heavily relies on these counters.

If a counter is not supported by the kernel, it is not displayed when
using 'nstat -z'. We can then detect that and skip the verification. A
new helper (get_counter()) has been added to do the required checks and
return an error if the counter is not available.

Note that if we expect to have these features available and if
SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var is set to 1, the tests
will be marked as failed instead of skipped.

This new helper also makes sure we get the exact counter we want to
avoid issues we had in the past, e.g. with MPTcpExtRmAddr and
MPTcpExtRmAddrDrop sharing the same prefix. While at it, we uniform the
way we fetch a MIB counter.

Note for the backports: we rarely change these modified blocks so if
there is are conflicts, it is very likely because a counter is not used
in the older kernels and we don't need that chunk.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: b08fbf2410 ("selftests: add test-cases for MPTCP MP_JOIN")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Matthieu Baerts 2023-06-10 18:11:39 +02:00 committed by Jakub Kicinski
parent cdb5052534
commit 47867f0a7e
1 changed files with 130 additions and 100 deletions

View File

@ -500,11 +500,25 @@ wait_local_port_listen()
done done
} }
# $1: ns ; $2: counter
get_counter()
{
local ns="${1}"
local counter="${2}"
local count
count=$(ip netns exec ${ns} nstat -asz "${counter}" | awk 'NR==1 {next} {print $2}')
if [ -z "${count}" ]; then
mptcp_lib_fail_if_expected_feature "${counter} counter"
return 1
fi
echo "${count}"
}
rm_addr_count() rm_addr_count()
{ {
local ns=${1} get_counter "${1}" "MPTcpExtRmAddr"
ip netns exec ${ns} nstat -as | grep MPTcpExtRmAddr | awk '{print $2}'
} }
# $1: ns, $2: old rm_addr counter in $ns # $1: ns, $2: old rm_addr counter in $ns
@ -527,11 +541,11 @@ wait_mpj()
local ns="${1}" local ns="${1}"
local cnt old_cnt local cnt old_cnt
old_cnt=$(ip netns exec ${ns} nstat -as | grep MPJoinAckRx | awk '{print $2}') old_cnt=$(get_counter ${ns} "MPTcpExtMPJoinAckRx")
local i local i
for i in $(seq 10); do for i in $(seq 10); do
cnt=$(ip netns exec ${ns} nstat -as | grep MPJoinAckRx | awk '{print $2}') cnt=$(get_counter ${ns} "MPTcpExtMPJoinAckRx")
[ "$cnt" = "${old_cnt}" ] || break [ "$cnt" = "${old_cnt}" ] || break
sleep 0.1 sleep 0.1
done done
@ -1190,12 +1204,13 @@ chk_csum_nr()
fi fi
printf "%-${nr_blank}s %s" " " "sum" printf "%-${nr_blank}s %s" " " "sum"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtDataCsumErr")
[ -z "$count" ] && count=0
if [ "$count" != "$csum_ns1" ]; then if [ "$count" != "$csum_ns1" ]; then
extra_msg="$extra_msg ns1=$count" extra_msg="$extra_msg ns1=$count"
fi fi
if { [ "$count" != $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 0 ]; } || if [ -z "$count" ]; then
echo -n "[skip]"
elif { [ "$count" != $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 0 ]; } ||
{ [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then { [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then
echo "[fail] got $count data checksum error[s] expected $csum_ns1" echo "[fail] got $count data checksum error[s] expected $csum_ns1"
fail_test fail_test
@ -1204,12 +1219,13 @@ chk_csum_nr()
echo -n "[ ok ]" echo -n "[ ok ]"
fi fi
echo -n " - csum " echo -n " - csum "
count=$(ip netns exec $ns2 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}') count=$(get_counter ${ns2} "MPTcpExtDataCsumErr")
[ -z "$count" ] && count=0
if [ "$count" != "$csum_ns2" ]; then if [ "$count" != "$csum_ns2" ]; then
extra_msg="$extra_msg ns2=$count" extra_msg="$extra_msg ns2=$count"
fi fi
if { [ "$count" != $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 0 ]; } || if [ -z "$count" ]; then
echo -n "[skip]"
elif { [ "$count" != $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 0 ]; } ||
{ [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then { [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then
echo "[fail] got $count data checksum error[s] expected $csum_ns2" echo "[fail] got $count data checksum error[s] expected $csum_ns2"
fail_test fail_test
@ -1251,12 +1267,13 @@ chk_fail_nr()
fi fi
printf "%-${nr_blank}s %s" " " "ftx" printf "%-${nr_blank}s %s" " " "ftx"
count=$(ip netns exec $ns_tx nstat -as | grep MPTcpExtMPFailTx | awk '{print $2}') count=$(get_counter ${ns_tx} "MPTcpExtMPFailTx")
[ -z "$count" ] && count=0
if [ "$count" != "$fail_tx" ]; then if [ "$count" != "$fail_tx" ]; then
extra_msg="$extra_msg,tx=$count" extra_msg="$extra_msg,tx=$count"
fi fi
if { [ "$count" != "$fail_tx" ] && [ $allow_tx_lost -eq 0 ]; } || if [ -z "$count" ]; then
echo -n "[skip]"
elif { [ "$count" != "$fail_tx" ] && [ $allow_tx_lost -eq 0 ]; } ||
{ [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then { [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then
echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx" echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx"
fail_test fail_test
@ -1266,12 +1283,13 @@ chk_fail_nr()
fi fi
echo -n " - failrx" echo -n " - failrx"
count=$(ip netns exec $ns_rx nstat -as | grep MPTcpExtMPFailRx | awk '{print $2}') count=$(get_counter ${ns_rx} "MPTcpExtMPFailRx")
[ -z "$count" ] && count=0
if [ "$count" != "$fail_rx" ]; then if [ "$count" != "$fail_rx" ]; then
extra_msg="$extra_msg,rx=$count" extra_msg="$extra_msg,rx=$count"
fi fi
if { [ "$count" != "$fail_rx" ] && [ $allow_rx_lost -eq 0 ]; } || if [ -z "$count" ]; then
echo -n "[skip]"
elif { [ "$count" != "$fail_rx" ] && [ $allow_rx_lost -eq 0 ]; } ||
{ [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then { [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then
echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx" echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx"
fail_test fail_test
@ -1303,10 +1321,11 @@ chk_fclose_nr()
fi fi
printf "%-${nr_blank}s %s" " " "ctx" printf "%-${nr_blank}s %s" " " "ctx"
count=$(ip netns exec $ns_tx nstat -as | grep MPTcpExtMPFastcloseTx | awk '{print $2}') count=$(get_counter ${ns_tx} "MPTcpExtMPFastcloseTx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
[ "$count" != "$fclose_tx" ] && extra_msg="$extra_msg,tx=$count" echo -n "[skip]"
if [ "$count" != "$fclose_tx" ]; then elif [ "$count" != "$fclose_tx" ]; then
extra_msg="$extra_msg,tx=$count"
echo "[fail] got $count MP_FASTCLOSE[s] TX expected $fclose_tx" echo "[fail] got $count MP_FASTCLOSE[s] TX expected $fclose_tx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1315,10 +1334,11 @@ chk_fclose_nr()
fi fi
echo -n " - fclzrx" echo -n " - fclzrx"
count=$(ip netns exec $ns_rx nstat -as | grep MPTcpExtMPFastcloseRx | awk '{print $2}') count=$(get_counter ${ns_rx} "MPTcpExtMPFastcloseRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
[ "$count" != "$fclose_rx" ] && extra_msg="$extra_msg,rx=$count" echo -n "[skip]"
if [ "$count" != "$fclose_rx" ]; then elif [ "$count" != "$fclose_rx" ]; then
extra_msg="$extra_msg,rx=$count"
echo "[fail] got $count MP_FASTCLOSE[s] RX expected $fclose_rx" echo "[fail] got $count MP_FASTCLOSE[s] RX expected $fclose_rx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1349,9 +1369,10 @@ chk_rst_nr()
fi fi
printf "%-${nr_blank}s %s" " " "rtx" printf "%-${nr_blank}s %s" " " "rtx"
count=$(ip netns exec $ns_tx nstat -as | grep MPTcpExtMPRstTx | awk '{print $2}') count=$(get_counter ${ns_tx} "MPTcpExtMPRstTx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ $count -lt $rst_tx ]; then echo -n "[skip]"
elif [ $count -lt $rst_tx ]; then
echo "[fail] got $count MP_RST[s] TX expected $rst_tx" echo "[fail] got $count MP_RST[s] TX expected $rst_tx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1360,9 +1381,10 @@ chk_rst_nr()
fi fi
echo -n " - rstrx " echo -n " - rstrx "
count=$(ip netns exec $ns_rx nstat -as | grep MPTcpExtMPRstRx | awk '{print $2}') count=$(get_counter ${ns_rx} "MPTcpExtMPRstRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" -lt "$rst_rx" ]; then echo -n "[skip]"
elif [ "$count" -lt "$rst_rx" ]; then
echo "[fail] got $count MP_RST[s] RX expected $rst_rx" echo "[fail] got $count MP_RST[s] RX expected $rst_rx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1383,9 +1405,10 @@ chk_infi_nr()
local dump_stats local dump_stats
printf "%-${nr_blank}s %s" " " "itx" printf "%-${nr_blank}s %s" " " "itx"
count=$(ip netns exec $ns2 nstat -as | grep InfiniteMapTx | awk '{print $2}') count=$(get_counter ${ns2} "MPTcpExtInfiniteMapTx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$infi_tx" ]; then echo -n "[skip]"
elif [ "$count" != "$infi_tx" ]; then
echo "[fail] got $count infinite map[s] TX expected $infi_tx" echo "[fail] got $count infinite map[s] TX expected $infi_tx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1394,9 +1417,10 @@ chk_infi_nr()
fi fi
echo -n " - infirx" echo -n " - infirx"
count=$(ip netns exec $ns1 nstat -as | grep InfiniteMapRx | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtInfiniteMapRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$infi_rx" ]; then echo "[skip]"
elif [ "$count" != "$infi_rx" ]; then
echo "[fail] got $count infinite map[s] RX expected $infi_rx" echo "[fail] got $count infinite map[s] RX expected $infi_rx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1428,9 +1452,10 @@ chk_join_nr()
fi fi
printf "%03u %-36s %s" "${TEST_COUNT}" "${title}" "syn" printf "%03u %-36s %s" "${TEST_COUNT}" "${title}" "syn"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinSynRx | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtMPJoinSynRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$syn_nr" ]; then echo -n "[skip]"
elif [ "$count" != "$syn_nr" ]; then
echo "[fail] got $count JOIN[s] syn expected $syn_nr" echo "[fail] got $count JOIN[s] syn expected $syn_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1440,9 +1465,10 @@ chk_join_nr()
echo -n " - synack" echo -n " - synack"
with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies) with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
count=$(ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinSynAckRx | awk '{print $2}') count=$(get_counter ${ns2} "MPTcpExtMPJoinSynAckRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$syn_ack_nr" ]; then echo -n "[skip]"
elif [ "$count" != "$syn_ack_nr" ]; then
# simult connections exceeding the limit with cookie enabled could go up to # simult connections exceeding the limit with cookie enabled could go up to
# synack validation as the conn limit can be enforced reliably only after # synack validation as the conn limit can be enforced reliably only after
# the subflow creation # the subflow creation
@ -1458,9 +1484,10 @@ chk_join_nr()
fi fi
echo -n " - ack" echo -n " - ack"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinAckRx | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtMPJoinAckRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$ack_nr" ]; then echo "[skip]"
elif [ "$count" != "$ack_nr" ]; then
echo "[fail] got $count JOIN[s] ack expected $ack_nr" echo "[fail] got $count JOIN[s] ack expected $ack_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1492,12 +1519,12 @@ chk_stale_nr()
local recover_nr local recover_nr
printf "%-${nr_blank}s %-18s" " " "stale" printf "%-${nr_blank}s %-18s" " " "stale"
stale_nr=$(ip netns exec $ns nstat -as | grep MPTcpExtSubflowStale | awk '{print $2}')
[ -z "$stale_nr" ] && stale_nr=0
recover_nr=$(ip netns exec $ns nstat -as | grep MPTcpExtSubflowRecover | awk '{print $2}')
[ -z "$recover_nr" ] && recover_nr=0
if [ $stale_nr -lt $stale_min ] || stale_nr=$(get_counter ${ns} "MPTcpExtSubflowStale")
recover_nr=$(get_counter ${ns} "MPTcpExtSubflowRecover")
if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
echo "[skip]"
elif [ $stale_nr -lt $stale_min ] ||
{ [ $stale_max -gt 0 ] && [ $stale_nr -gt $stale_max ]; } || { [ $stale_max -gt 0 ] && [ $stale_nr -gt $stale_max ]; } ||
[ $((stale_nr - recover_nr)) -ne $stale_delta ]; then [ $((stale_nr - recover_nr)) -ne $stale_delta ]; then
echo "[fail] got $stale_nr stale[s] $recover_nr recover[s], " \ echo "[fail] got $stale_nr stale[s] $recover_nr recover[s], " \
@ -1533,12 +1560,12 @@ chk_add_nr()
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout) timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
printf "%-${nr_blank}s %s" " " "add" printf "%-${nr_blank}s %s" " " "add"
count=$(ip netns exec $ns2 nstat -as MPTcpExtAddAddr | grep MPTcpExtAddAddr | awk '{print $2}') count=$(get_counter ${ns2} "MPTcpExtAddAddr")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
echo -n "[skip]"
# if the test configured a short timeout tolerate greater then expected # if the test configured a short timeout tolerate greater then expected
# add addrs options, due to retransmissions # add addrs options, due to retransmissions
if [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then elif [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then
echo "[fail] got $count ADD_ADDR[s] expected $add_nr" echo "[fail] got $count ADD_ADDR[s] expected $add_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1547,9 +1574,10 @@ chk_add_nr()
fi fi
echo -n " - echo " echo -n " - echo "
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtEchoAdd | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtEchoAdd")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$echo_nr" ]; then echo -n "[skip]"
elif [ "$count" != "$echo_nr" ]; then
echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr" echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1559,9 +1587,10 @@ chk_add_nr()
if [ $port_nr -gt 0 ]; then if [ $port_nr -gt 0 ]; then
echo -n " - pt " echo -n " - pt "
count=$(ip netns exec $ns2 nstat -as | grep MPTcpExtPortAdd | awk '{print $2}') count=$(get_counter ${ns2} "MPTcpExtPortAdd")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$port_nr" ]; then echo "[skip]"
elif [ "$count" != "$port_nr" ]; then
echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr" echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1570,10 +1599,10 @@ chk_add_nr()
fi fi
printf "%-${nr_blank}s %s" " " "syn" printf "%-${nr_blank}s %s" " " "syn"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortSynRx | count=$(get_counter ${ns1} "MPTcpExtMPJoinPortSynRx")
awk '{print $2}') if [ -z "$count" ]; then
[ -z "$count" ] && count=0 echo -n "[skip]"
if [ "$count" != "$syn_nr" ]; then elif [ "$count" != "$syn_nr" ]; then
echo "[fail] got $count JOIN[s] syn with a different \ echo "[fail] got $count JOIN[s] syn with a different \
port-number expected $syn_nr" port-number expected $syn_nr"
fail_test fail_test
@ -1583,10 +1612,10 @@ chk_add_nr()
fi fi
echo -n " - synack" echo -n " - synack"
count=$(ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinPortSynAckRx | count=$(get_counter ${ns2} "MPTcpExtMPJoinPortSynAckRx")
awk '{print $2}') if [ -z "$count" ]; then
[ -z "$count" ] && count=0 echo -n "[skip]"
if [ "$count" != "$syn_ack_nr" ]; then elif [ "$count" != "$syn_ack_nr" ]; then
echo "[fail] got $count JOIN[s] synack with a different \ echo "[fail] got $count JOIN[s] synack with a different \
port-number expected $syn_ack_nr" port-number expected $syn_ack_nr"
fail_test fail_test
@ -1596,10 +1625,10 @@ chk_add_nr()
fi fi
echo -n " - ack" echo -n " - ack"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortAckRx | count=$(get_counter ${ns1} "MPTcpExtMPJoinPortAckRx")
awk '{print $2}') if [ -z "$count" ]; then
[ -z "$count" ] && count=0 echo "[skip]"
if [ "$count" != "$ack_nr" ]; then elif [ "$count" != "$ack_nr" ]; then
echo "[fail] got $count JOIN[s] ack with a different \ echo "[fail] got $count JOIN[s] ack with a different \
port-number expected $ack_nr" port-number expected $ack_nr"
fail_test fail_test
@ -1609,10 +1638,10 @@ chk_add_nr()
fi fi
printf "%-${nr_blank}s %s" " " "syn" printf "%-${nr_blank}s %s" " " "syn"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortSynRx | count=$(get_counter ${ns1} "MPTcpExtMismatchPortSynRx")
awk '{print $2}') if [ -z "$count" ]; then
[ -z "$count" ] && count=0 echo -n "[skip]"
if [ "$count" != "$mis_syn_nr" ]; then elif [ "$count" != "$mis_syn_nr" ]; then
echo "[fail] got $count JOIN[s] syn with a mismatched \ echo "[fail] got $count JOIN[s] syn with a mismatched \
port-number expected $mis_syn_nr" port-number expected $mis_syn_nr"
fail_test fail_test
@ -1622,10 +1651,10 @@ chk_add_nr()
fi fi
echo -n " - ack " echo -n " - ack "
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortAckRx | count=$(get_counter ${ns1} "MPTcpExtMismatchPortAckRx")
awk '{print $2}') if [ -z "$count" ]; then
[ -z "$count" ] && count=0 echo "[skip]"
if [ "$count" != "$mis_ack_nr" ]; then elif [ "$count" != "$mis_ack_nr" ]; then
echo "[fail] got $count JOIN[s] ack with a mismatched \ echo "[fail] got $count JOIN[s] ack with a mismatched \
port-number expected $mis_ack_nr" port-number expected $mis_ack_nr"
fail_test fail_test
@ -1669,9 +1698,10 @@ chk_rm_nr()
fi fi
printf "%-${nr_blank}s %s" " " "rm " printf "%-${nr_blank}s %s" " " "rm "
count=$(ip netns exec $addr_ns nstat -as | grep MPTcpExtRmAddr | awk '{print $2}') count=$(get_counter ${addr_ns} "MPTcpExtRmAddr")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$rm_addr_nr" ]; then echo -n "[skip]"
elif [ "$count" != "$rm_addr_nr" ]; then
echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr" echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1680,29 +1710,27 @@ chk_rm_nr()
fi fi
echo -n " - rmsf " echo -n " - rmsf "
count=$(ip netns exec $subflow_ns nstat -as | grep MPTcpExtRmSubflow | awk '{print $2}') count=$(get_counter ${subflow_ns} "MPTcpExtRmSubflow")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ -n "$simult" ]; then echo -n "[skip]"
elif [ -n "$simult" ]; then
local cnt suffix local cnt suffix
cnt=$(ip netns exec $addr_ns nstat -as | grep MPTcpExtRmSubflow | awk '{print $2}') cnt=$(get_counter ${addr_ns} "MPTcpExtRmSubflow")
# in case of simult flush, the subflow removal count on each side is # in case of simult flush, the subflow removal count on each side is
# unreliable # unreliable
[ -z "$cnt" ] && cnt=0
count=$((count + cnt)) count=$((count + cnt))
[ "$count" != "$rm_subflow_nr" ] && suffix="$count in [$rm_subflow_nr:$((rm_subflow_nr*2))]" [ "$count" != "$rm_subflow_nr" ] && suffix="$count in [$rm_subflow_nr:$((rm_subflow_nr*2))]"
if [ $count -ge "$rm_subflow_nr" ] && \ if [ $count -ge "$rm_subflow_nr" ] && \
[ "$count" -le "$((rm_subflow_nr *2 ))" ]; then [ "$count" -le "$((rm_subflow_nr *2 ))" ]; then
echo "[ ok ] $suffix" echo -n "[ ok ] $suffix"
else else
echo "[fail] got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]" echo "[fail] got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
fail_test fail_test
dump_stats=1 dump_stats=1
fi fi
return elif [ "$count" != "$rm_subflow_nr" ]; then
fi
if [ "$count" != "$rm_subflow_nr" ]; then
echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr" echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1723,9 +1751,10 @@ chk_prio_nr()
local dump_stats local dump_stats
printf "%-${nr_blank}s %s" " " "ptx" printf "%-${nr_blank}s %s" " " "ptx"
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioTx | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtMPPrioTx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$mp_prio_nr_tx" ]; then echo -n "[skip]"
elif [ "$count" != "$mp_prio_nr_tx" ]; then
echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx" echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1734,9 +1763,10 @@ chk_prio_nr()
fi fi
echo -n " - prx " echo -n " - prx "
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioRx | awk '{print $2}') count=$(get_counter ${ns1} "MPTcpExtMPPrioRx")
[ -z "$count" ] && count=0 if [ -z "$count" ]; then
if [ "$count" != "$mp_prio_nr_rx" ]; then echo "[skip]"
elif [ "$count" != "$mp_prio_nr_rx" ]; then
echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx" echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx"
fail_test fail_test
dump_stats=1 dump_stats=1
@ -1852,7 +1882,7 @@ wait_attempt_fail()
while [ $time -lt $timeout_ms ]; do while [ $time -lt $timeout_ms ]; do
local cnt local cnt
cnt=$(ip netns exec $ns nstat -as TcpAttemptFails | grep TcpAttemptFails | awk '{print $2}') cnt=$(get_counter ${ns} "TcpAttemptFails")
[ "$cnt" = 1 ] && return 1 [ "$cnt" = 1 ] && return 1
time=$((time + 100)) time=$((time + 100))