To avoid duplicated code in different MPTCP selftests, we can add and
use helpers defined in mptcp_lib.sh.
This patch unifies "pm_nl_ctl events" related code in userspace_pm.sh
and mptcp_join.sh into four helpers: mptcp_lib_evts_init(), _start(),
_kill() and _remove(). Define them in mptcp_lib.sh and use these new
helpers in both scripts.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 66 ++++++---------
.../testing/selftests/net/mptcp/mptcp_lib.sh | 81 +++++++++++++++++++
.../selftests/net/mptcp/userspace_pm.sh | 31 ++-----
3 files changed, 112 insertions(+), 66 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index e603baa1d4a8..1ebe6e266657 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -36,10 +36,6 @@ ip_mptcp=0
check_invert=0
validate_checksum=0
init=0
-evts_ns1=""
-evts_ns2=""
-evts_ns1_pid=0
-evts_ns2_pid=0
last_test_failed=0
last_test_skipped=0
last_test_ignored=1
@@ -185,8 +181,7 @@ init() {
cin=$(mktemp)
cinsent=$(mktemp)
cout=$(mktemp)
- evts_ns1=$(mktemp)
- evts_ns2=$(mktemp)
+ mptcp_lib_evts_init
check_output_err=$(mktemp)
trap cleanup EXIT
@@ -200,7 +195,7 @@ cleanup()
rm -f "$cin" "$cout" "$sinfail"
rm -f "$sin" "$sout" "$cinsent" "$cinfail"
rm -f "$tmpfile"
- rm -rf $evts_ns1 $evts_ns2
+ mptcp_lib_evts_remove
rm -f $check_output_err
cleanup_partial
}
@@ -465,12 +460,7 @@ reset_with_events()
{
reset "${1}" || return 1
- :> "$evts_ns1"
- :> "$evts_ns2"
- ip netns exec $ns1 ./pm_nl_ctl events >> "$evts_ns1" 2>&1 &
- evts_ns1_pid=$!
- ip netns exec $ns2 ./pm_nl_ctl events >> "$evts_ns2" 2>&1 &
- evts_ns2_pid=$!
+ mptcp_lib_evts_start "${ns1}" "${ns2}"
}
reset_with_tcp_filter()
@@ -640,12 +630,6 @@ wait_mpj()
done
}
-kill_events_pids()
-{
- mptcp_lib_kill_wait $evts_ns1_pid
- mptcp_lib_kill_wait $evts_ns2_pid
-}
-
kill_tests_wait()
{
#shellcheck disable=SC2046
@@ -2922,9 +2906,9 @@ add_addr_ports_tests()
chk_add_nr 1 1 1
chk_rm_nr 1 1 invert
- verify_listener_events $evts_ns1 $LISTENER_CREATED $AF_INET 10.0.2.1 10100
- verify_listener_events $evts_ns1 $LISTENER_CLOSED $AF_INET 10.0.2.1 10100
- kill_events_pids
+ verify_listener_events $server_evts $LISTENER_CREATED $AF_INET 10.0.2.1 10100
+ verify_listener_events $server_evts $LISTENER_CLOSED $AF_INET 10.0.2.1 10100
+ mptcp_lib_evts_kill
fi
# subflow and signal with port, remove
@@ -3297,10 +3281,10 @@ fail_tests()
# $1: ns ; $2: addr ; $3: id
userspace_pm_add_addr()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local tk
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
tk=$(mptcp_lib_evts_get_info token "$evts")
ip netns exec $1 ./pm_nl_ctl ann $2 token $tk id $3
@@ -3310,11 +3294,11 @@ userspace_pm_add_addr()
# $1: ns ; $2: id
userspace_pm_rm_addr()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local tk
local cnt
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
tk=$(mptcp_lib_evts_get_info token "$evts")
cnt=$(rm_addr_count ${1})
@@ -3325,10 +3309,10 @@ userspace_pm_rm_addr()
# $1: ns ; $2: addr ; $3: id
userspace_pm_add_sf()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local tk da dp
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
tk=$(mptcp_lib_evts_get_info token "$evts")
da=$(mptcp_lib_evts_get_info daddr4 "$evts")
dp=$(mptcp_lib_evts_get_info dport "$evts")
@@ -3341,13 +3325,13 @@ userspace_pm_add_sf()
# $1: ns ; $2: addr $3: event type
userspace_pm_rm_sf()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local t=${3:-1}
local ip=4
local tk da dp sp
local cnt
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
if mptcp_lib_is_v6 $2; then ip=6; fi
tk=$(mptcp_lib_evts_get_info token "$evts")
da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t)
@@ -3363,10 +3347,10 @@ userspace_pm_rm_sf()
# $1: ns
userspace_pm_dump()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local tk
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
tk=$(mptcp_lib_evts_get_info token "$evts")
ip netns exec $1 ./pm_nl_ctl dump token $tk
@@ -3375,10 +3359,10 @@ userspace_pm_dump()
# $1: ns ; $2: id
userspace_pm_get_addr()
{
- local evts=$evts_ns1
+ local evts=$server_evts
local tk
- [ "$1" == "$ns2" ] && evts=$evts_ns2
+ [ "$1" == "$ns2" ] && evts=$client_evts
tk=$(mptcp_lib_evts_get_info token "$evts")
ip netns exec $1 ./pm_nl_ctl get $2 token $tk
@@ -3503,7 +3487,7 @@ userspace_tests()
chk_rm_nr 1 1 invert
chk_mptcp_info subflows 0 subflows 0
chk_subflows_total 1 1
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3525,7 +3509,7 @@ userspace_tests()
chk_rm_nr 1 1
chk_mptcp_info subflows 0 subflows 0
chk_subflows_total 1 1
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3544,7 +3528,7 @@ userspace_tests()
chk_join_nr 1 1 1
chk_mptcp_info subflows 1 subflows 1
chk_subflows_total 2 2
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3568,7 +3552,7 @@ userspace_tests()
chk_rst_nr 0 0 invert
chk_mptcp_info subflows 1 subflows 1
chk_subflows_total 1 1
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3594,7 +3578,7 @@ userspace_tests()
chk_rst_nr 0 0 invert
chk_mptcp_info subflows 1 subflows 1
chk_subflows_total 1 1
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3618,7 +3602,7 @@ userspace_tests()
"$dump" " get id 10 addr"
check_output "userspace_pm_dump $ns1" \
"$dump" " dump addrs signal"
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
@@ -3642,7 +3626,7 @@ userspace_tests()
"$dump" " get id 20 addr"
check_output "userspace_pm_dump $ns2" \
"$dump" " dump addrs subflow"
- kill_events_pids
+ mptcp_lib_evts_kill
wait $tests_pid
fi
}
diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
index 022262a2cfe0..927fb0c18142 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
@@ -298,3 +298,84 @@ mptcp_lib_wait_local_port_listen() {
sleep 0.1
done
}
+
+# $1: ns, $2: cestab nr
+mptcp_lib_chk_cestab_nr() {
+ local ns=$1
+ local cestab=$2
+ local count
+
+ count=$(mptcp_lib_get_counter ${ns} "MPTcpExtMPCurrEstab")
+ if [ -z "$count" ]; then
+ mptcp_lib_print_warn "[ SKIP ]"
+ elif [ "$count" != "$cestab" ]; then
+ mptcp_lib_print_err "[ FAIL ] got $count current establish[s] expected $cestab"
+ return 1
+ else
+ mptcp_lib_print_ok "[ OK ]"
+ fi
+ return 0
+}
+
+server_evts=""
+client_evts=""
+server_evts_pid=0
+client_evts_pid=0
+
+# server_evts(_pid) and client_evts(_pid) are needed
+# by mptcp_lib_evts_init, _start, _kill and _remove.
+mptcp_lib_evts_init() {
+ : "${server_evts?}"
+ : "${client_evts?}"
+
+ if [ -z "${server_evts}" ]; then
+ server_evts=$(mktemp)
+ fi
+ if [ -z "${client_evts}" ]; then
+ client_evts=$(mktemp)
+ fi
+}
+
+# $1 ns1, $2 ns2
+mptcp_lib_evts_start() {
+ : "${server_evts:?}"
+ : "${client_evts:?}"
+ : "${server_evts_pid:?}"
+ : "${client_evts_pid:?}"
+
+ local ns_1="${1}"
+ local ns_2="${2}"
+
+ :>"$server_evts"
+ :>"$client_evts"
+
+ if [ "${server_evts_pid}" -ne 0 ]; then
+ mptcp_lib_kill_wait "${server_evts_pid}"
+ fi
+ ip netns exec "${ns_1}" ./pm_nl_ctl events >> "${server_evts}" 2>&1 &
+ server_evts_pid=$!
+
+ if [ "${client_evts_pid}" -ne 0 ]; then
+ mptcp_lib_kill_wait "${client_evts_pid}"
+ fi
+ ip netns exec "${ns_2}" ./pm_nl_ctl events >> "${client_evts}" 2>&1 &
+ client_evts_pid=$!
+}
+
+mptcp_lib_evts_kill() {
+ : "${server_evts_pid:?}"
+ : "${client_evts_pid:?}"
+
+ mptcp_lib_kill_wait "${server_evts_pid}"
+ mptcp_lib_kill_wait "${client_evts_pid}"
+
+ server_evts_pid=0
+ client_evts_pid=0
+}
+
+mptcp_lib_evts_remove() {
+ : "${server_evts:?}"
+ : "${client_evts:?}"
+
+ rm -rf "${server_evts}" "${client_evts}"
+}
diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 6167837f48e1..f1dbd97c0c96 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -34,10 +34,6 @@ AF_INET=2
AF_INET6=10
file=""
-server_evts=""
-client_evts=""
-server_evts_pid=0
-client_evts_pid=0
client4_pid=0
server4_pid=0
client6_pid=0
@@ -116,18 +112,19 @@ cleanup()
# Terminate the MPTCP connection and related processes
local pid
- for pid in $client4_pid $server4_pid $client6_pid $server6_pid\
- $server_evts_pid $client_evts_pid
+ for pid in $client4_pid $server4_pid $client6_pid $server6_pid
do
mptcp_lib_kill_wait $pid
done
+ mptcp_lib_evts_kill
local netns
for netns in "$ns1" "$ns2" ;do
ip netns del "$netns"
done
- rm -rf $file $client_evts $server_evts
+ rm -rf $file
+ mptcp_lib_evts_remove
_printf "Done\n"
}
@@ -186,24 +183,8 @@ make_connection()
# Capture netlink events over the two network namespaces running
# the MPTCP client and server
- if [ -z "$client_evts" ]; then
- client_evts=$(mktemp)
- fi
- :>"$client_evts"
- if [ $client_evts_pid -ne 0 ]; then
- mptcp_lib_kill_wait $client_evts_pid
- fi
- ip netns exec "$ns2" ./pm_nl_ctl events >> "$client_evts" 2>&1 &
- client_evts_pid=$!
- if [ -z "$server_evts" ]; then
- server_evts=$(mktemp)
- fi
- :>"$server_evts"
- if [ $server_evts_pid -ne 0 ]; then
- mptcp_lib_kill_wait $server_evts_pid
- fi
- ip netns exec "$ns1" ./pm_nl_ctl events >> "$server_evts" 2>&1 &
- server_evts_pid=$!
+ mptcp_lib_evts_init
+ mptcp_lib_evts_start "${ns1}" "${ns2}"
sleep 0.5
# Run the server
--
2.35.3