selftests: mptcp: dump userspace addrs list
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 1 Mar 2024 18:18:34 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2024 13:07:46 +0000 (13:07 +0000)
This patch adds a new helper userspace_pm_dump() to dump addresses
for the userspace PM. Use this helper to check whether an ID 0 subflow
is listed in the output of dump command after creating an ID 0 subflow
in "userspace pm create id 0 subflow" test. Dump userspace PM addresses
list in "userspace pm add & remove address" test and in "userspace pm
create destroy subflow" test.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/mptcp/mptcp_join.sh

index 1267d5708e137f4cd8c1a9f0018289ce57fce1f4..8b64306427065c2521b700fd0652dca023aa8713 100755 (executable)
@@ -21,6 +21,7 @@ cinfail=""
 cinsent=""
 tmpfile=""
 cout=""
+err=""
 capout=""
 ns1=""
 ns2=""
@@ -189,6 +190,7 @@ init() {
        cin=$(mktemp)
        cinsent=$(mktemp)
        cout=$(mktemp)
+       err=$(mktemp)
        evts_ns1=$(mktemp)
        evts_ns2=$(mktemp)
 
@@ -204,6 +206,7 @@ cleanup()
        rm -f "$sin" "$sout" "$cinsent" "$cinfail"
        rm -f "$tmpfile"
        rm -rf $evts_ns1 $evts_ns2
+       rm -f "$err"
        cleanup_partial
 }
 
@@ -3356,6 +3359,50 @@ userspace_pm_rm_sf()
        wait_rm_sf $1 "${cnt}"
 }
 
+check_output()
+{
+       local cmd="$1"
+       local expected="$2"
+       local msg="$3"
+       local rc=0
+
+       mptcp_lib_check_output "${err}" "${cmd}" "${expected}" || rc=${?}
+       if [ ${rc} -eq 2 ]; then
+               fail_test "fail to check output # error ${rc}"
+       elif [ ${rc} -eq 0 ]; then
+               print_ok
+       elif [ ${rc} -eq 1 ]; then
+               fail_test "fail to check output # different output"
+       fi
+}
+
+# $1: ns
+userspace_pm_dump()
+{
+       local evts=$evts_ns1
+       local tk
+
+       [ "$1" == "$ns2" ] && evts=$evts_ns2
+       tk=$(mptcp_lib_evts_get_info token "$evts")
+
+       ip netns exec $1 ./pm_nl_ctl dump token $tk
+}
+
+userspace_pm_chk_dump_addr()
+{
+       local ns="${1}"
+       local exp="${2}"
+       local check="${3}"
+
+       print_check "dump addrs ${check}"
+
+       if mptcp_lib_kallsyms_has "mptcp_userspace_pm_dump_addr$"; then
+               check_output "userspace_pm_dump ${ns}" "${exp}"
+       else
+               print_skip
+       fi
+}
+
 userspace_tests()
 {
        # userspace pm type prevents add_addr
@@ -3447,10 +3494,16 @@ userspace_tests()
                chk_mptcp_info subflows 2 subflows 2
                chk_subflows_total 3 3
                chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
+               userspace_pm_chk_dump_addr "${ns1}" \
+                       $'id 10 flags signal 10.0.2.1\nid 20 flags signal 10.0.3.1' \
+                       "signal"
                userspace_pm_rm_addr $ns1 10
                userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED
+               userspace_pm_chk_dump_addr "${ns1}" \
+                       "id 20 flags signal 10.0.3.1" "after rm_addr 10"
                userspace_pm_rm_addr $ns1 20
                userspace_pm_rm_sf $ns1 10.0.3.1 $SUB_ESTABLISHED
+               userspace_pm_chk_dump_addr "${ns1}" "" "after rm_addr 20"
                chk_rm_nr 2 2 invert
                chk_mptcp_info subflows 0 subflows 0
                chk_subflows_total 1 1
@@ -3471,8 +3524,14 @@ userspace_tests()
                chk_join_nr 1 1 1
                chk_mptcp_info subflows 1 subflows 1
                chk_subflows_total 2 2
+               userspace_pm_chk_dump_addr "${ns2}" \
+                       "id 20 flags subflow 10.0.3.2" \
+                       "subflow"
                userspace_pm_rm_addr $ns2 20
                userspace_pm_rm_sf $ns2 10.0.3.2 $SUB_ESTABLISHED
+               userspace_pm_chk_dump_addr "${ns2}" \
+                       "" \
+                       "after rm_addr 20"
                chk_rm_nr 1 1
                chk_mptcp_info subflows 0 subflows 0
                chk_subflows_total 1 1
@@ -3492,6 +3551,8 @@ userspace_tests()
                chk_mptcp_info subflows 0 subflows 0
                chk_subflows_total 1 1
                userspace_pm_add_sf $ns2 10.0.3.2 0
+               userspace_pm_chk_dump_addr "${ns2}" \
+                       "id 0 flags subflow 10.0.3.2" "id 0 subflow"
                chk_join_nr 1 1 1
                chk_mptcp_info subflows 1 subflows 1
                chk_subflows_total 2 2