selftests: mptcp: add checks for fallback counters

Recently, some mib counters about fallback has been added, this patch
provides a method to check the expected behavior of these mib counters
during the test execution.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/571
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250902-net-next-mptcp-misc-feat-6-18-v2-2-fa02bb3188b1@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Gang Yan 2025-09-02 23:11:34 +02:00 committed by Jakub Kicinski
parent 2d5be5629c
commit 3fff72f827

View File

@ -74,6 +74,17 @@ unset join_create_err
unset join_bind_err
unset join_connect_err
unset fb_ns1
unset fb_ns2
unset fb_infinite_map_tx
unset fb_dss_corruption
unset fb_simult_conn
unset fb_mpc_passive
unset fb_mpc_active
unset fb_mpc_data
unset fb_md5_sig
unset fb_dss
# generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) == 0x30) ||
# (ip6 && (ip6[74] & 0xf0) == 0x30)'"
CBPF_MPTCP_SUBOPTION_ADD_ADDR="14,
@ -1399,6 +1410,115 @@ chk_join_tx_nr()
print_results "join Tx" ${rc}
}
chk_fallback_nr()
{
local infinite_map_tx=${fb_infinite_map_tx:-0}
local dss_corruption=${fb_dss_corruption:-0}
local simult_conn=${fb_simult_conn:-0}
local mpc_passive=${fb_mpc_passive:-0}
local mpc_active=${fb_mpc_active:-0}
local mpc_data=${fb_mpc_data:-0}
local md5_sig=${fb_md5_sig:-0}
local dss=${fb_dss:-0}
local rc=${KSFT_PASS}
local ns=$1
local count
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtInfiniteMapTx")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$infinite_map_tx" ]; then
rc=${KSFT_FAIL}
print_check "$ns infinite map tx fallback"
fail_test "got $count infinite map tx fallback[s] in $ns expected $infinite_map_tx"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtDSSCorruptionFallback")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$dss_corruption" ]; then
rc=${KSFT_FAIL}
print_check "$ns dss corruption fallback"
fail_test "got $count dss corruption fallback[s] in $ns expected $dss_corruption"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtSimultConnectFallback")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$simult_conn" ]; then
rc=${KSFT_FAIL}
print_check "$ns simult conn fallback"
fail_test "got $count simult conn fallback[s] in $ns expected $simult_conn"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtMPCapableFallbackACK")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$mpc_passive" ]; then
rc=${KSFT_FAIL}
print_check "$ns mpc passive fallback"
fail_test "got $count mpc passive fallback[s] in $ns expected $mpc_passive"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtMPCapableFallbackSYNACK")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$mpc_active" ]; then
rc=${KSFT_FAIL}
print_check "$ns mpc active fallback"
fail_test "got $count mpc active fallback[s] in $ns expected $mpc_active"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtMPCapableDataFallback")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$mpc_data" ]; then
rc=${KSFT_FAIL}
print_check "$ns mpc data fallback"
fail_test "got $count mpc data fallback[s] in $ns expected $mpc_data"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtMD5SigFallback")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$md5_sig" ]; then
rc=${KSFT_FAIL}
print_check "$ns MD5 Sig fallback"
fail_test "got $count MD5 Sig fallback[s] in $ns expected $md5_sig"
fi
count=$(mptcp_lib_get_counter ${!ns} "MPTcpExtDssFallback")
if [ -z "$count" ]; then
rc=${KSFT_SKIP}
elif [ "$count" != "$dss" ]; then
rc=${KSFT_FAIL}
print_check "$ns dss fallback"
fail_test "got $count dss fallback[s] in $ns expected $dss"
fi
return $rc
}
chk_fallback_nr_all()
{
local netns=("ns1" "ns2")
local fb_ns=("fb_ns1" "fb_ns2")
local rc=${KSFT_PASS}
for i in 0 1; do
if [ -n "${!fb_ns[i]}" ]; then
eval "${!fb_ns[i]}" \
chk_fallback_nr ${netns[i]} || rc=${?}
else
chk_fallback_nr ${netns[i]} || rc=${?}
fi
done
if [ "${rc}" != "${KSFT_PASS}" ]; then
print_results "fallback" ${rc}
fi
}
chk_join_nr()
{
local syn_nr=$1
@ -1484,6 +1604,8 @@ chk_join_nr()
join_syn_tx="${join_syn_tx:-${syn_nr}}" \
chk_join_tx_nr
chk_fallback_nr_all
if $validate_checksum; then
chk_csum_nr $csum_ns1 $csum_ns2
chk_fail_nr $fail_nr $fail_nr
@ -3337,6 +3459,7 @@ fail_tests()
join_csum_ns1=+1 join_csum_ns2=+0 \
join_fail_nr=1 join_rst_nr=0 join_infi_nr=1 \
join_corrupted_pkts="$(pedit_action_pkts)" \
fb_ns1="fb_dss=1" fb_ns2="fb_infinite_map_tx=1" \
chk_join_nr 0 0 0
chk_fail_nr 1 -1 invert
fi