selftests: mptcp: test userspace pm out of transfer
authorGeliang Tang <geliang.tang@suse.com>
Fri, 23 Jun 2023 17:34:07 +0000 (10:34 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 24 Jun 2023 22:37:57 +0000 (15:37 -0700)
This patch moves userspace pm tests out of do_transfer(). Move add address
test into a new function userspace_pm_add_addr(), and remove address test
into userspace_pm_rm_sf_addr_ns1(). Move add subflow test into
userspace_pm_add_sf() and remove subflow into
userspace_pm_rm_sf_addr_ns2().

Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <martineau@kernel.org>
Link: https://lore.kernel.org/r/20230623-send-net-next-20230623-v1-1-a883213c8ba9@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/mptcp/mptcp_join.sh

index a7973d6..3baa6ac 100755 (executable)
@@ -589,6 +589,26 @@ wait_rm_addr()
        done
 }
 
+rm_sf_count()
+{
+       get_counter "${1}" "MPTcpExtRmSubflow"
+}
+
+# $1: ns, $2: old rm_sf counter in $ns
+wait_rm_sf()
+{
+       local ns="${1}"
+       local old_cnt="${2}"
+       local cnt
+
+       local i
+       for i in $(seq 10); do
+               cnt=$(rm_sf_count ${ns})
+               [ "$cnt" = "${old_cnt}" ] || break
+               sleep 0.1
+       done
+}
+
 wait_mpj()
 {
        local ns="${1}"
@@ -813,7 +833,6 @@ do_transfer()
 
        local port=$((10000 + TEST_COUNT - 1))
        local cappid
-       local userspace_pm=0
 
        :> "$cout"
        :> "$sout"
@@ -850,11 +869,6 @@ do_transfer()
                extra_args="-r ${speed:6}"
        fi
 
-       if [[ "${addr_nr_ns1}" = "userspace_"* ]]; then
-               userspace_pm=1
-               addr_nr_ns1=${addr_nr_ns1:10}
-       fi
-
        local flags="subflow"
        local extra_cl_args=""
        local extra_srv_args=""
@@ -882,9 +896,6 @@ do_transfer()
                        return 1
                fi
                addr_nr_ns2=0
-       elif [[ "${addr_nr_ns2}" = "userspace_"* ]]; then
-               userspace_pm=1
-               addr_nr_ns2=${addr_nr_ns2:10}
        elif [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
                flags="${flags},fullmesh"
                addr_nr_ns2=${addr_nr_ns2:9}
@@ -938,7 +949,6 @@ do_transfer()
                local counter=2
                local add_nr_ns1=${addr_nr_ns1}
                local id=10
-               local tk
                while [ $add_nr_ns1 -gt 0 ]; do
                        local addr
                        if is_v6 "${connect_addr}"; then
@@ -946,24 +956,7 @@ do_transfer()
                        else
                                addr="10.0.$counter.1"
                        fi
-                       if [ $userspace_pm -eq 0 ]; then
-                               pm_nl_add_endpoint $ns1 $addr flags signal
-                       else
-                               tk=$(grep "type:1," "$evts_ns1" |
-                                    sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
-                               ip netns exec ${listener_ns} ./pm_nl_ctl ann $addr token $tk id $id
-                               sleep 1
-                               sp=$(grep "type:10" "$evts_ns1" |
-                                    sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
-                               da=$(grep "type:10" "$evts_ns1" |
-                                    sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
-                               dp=$(grep "type:10" "$evts_ns1" |
-                                    sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
-                               ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
-                               ip netns exec ${listener_ns} ./pm_nl_ctl dsf lip "::ffff:$addr" \
-                                                       lport $sp rip $da rport $dp token $tk
-                       fi
-
+                       pm_nl_add_endpoint $ns1 $addr flags signal
                        counter=$((counter + 1))
                        add_nr_ns1=$((add_nr_ns1 - 1))
                        id=$((id + 1))
@@ -1008,7 +1001,6 @@ do_transfer()
                local add_nr_ns2=${addr_nr_ns2}
                local counter=3
                local id=20
-               local tk da dp sp
                while [ $add_nr_ns2 -gt 0 ]; do
                        local addr
                        if is_v6 "${connect_addr}"; then
@@ -1016,21 +1008,7 @@ do_transfer()
                        else
                                addr="10.0.$counter.2"
                        fi
-                       if [ $userspace_pm -eq 0 ]; then
-                               pm_nl_add_endpoint $ns2 $addr flags $flags
-                       else
-                               tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
-                               da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
-                               dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
-                               ip netns exec ${connector_ns} ./pm_nl_ctl csf lip $addr lid $id \
-                                                                       rip $da rport $dp token $tk
-                               sleep 1
-                               sp=$(grep "type:10" "$evts_ns2" |
-                                    sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
-                               ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
-                               ip netns exec ${connector_ns} ./pm_nl_ctl dsf lip $addr lport $sp \
-                                                                       rip $da rport $dp token $tk
-                       fi
+                       pm_nl_add_endpoint $ns2 $addr flags $flags
                        counter=$((counter + 1))
                        add_nr_ns2=$((add_nr_ns2 - 1))
                        id=$((id + 1))
@@ -3205,6 +3183,71 @@ fail_tests()
        fi
 }
 
+userspace_pm_add_addr()
+{
+       local addr=$1
+       local id=$2
+       local tk
+
+       tk=$(grep "type:1," "$evts_ns1" |
+            sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
+       ip netns exec $ns1 ./pm_nl_ctl ann $addr token $tk id $id
+       sleep 1
+}
+
+userspace_pm_rm_sf_addr_ns1()
+{
+       local addr=$1
+       local id=$2
+       local tk sp da dp
+
+       tk=$(grep "type:1," "$evts_ns1" |
+            sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
+       sp=$(grep "type:10" "$evts_ns1" |
+            sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+       da=$(grep "type:10" "$evts_ns1" |
+            sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
+       dp=$(grep "type:10" "$evts_ns1" |
+            sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
+       ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id
+       ip netns exec $ns1 ./pm_nl_ctl dsf lip "::ffff:$addr" \
+                               lport $sp rip $da rport $dp token $tk
+       wait_rm_addr $ns1 1
+       wait_rm_sf $ns1 1
+}
+
+userspace_pm_add_sf()
+{
+       local addr=$1
+       local id=$2
+       local tk da dp
+
+       tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+       da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
+       dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+       ip netns exec $ns2 ./pm_nl_ctl csf lip $addr lid $id \
+                               rip $da rport $dp token $tk
+       sleep 1
+}
+
+userspace_pm_rm_sf_addr_ns2()
+{
+       local addr=$1
+       local id=$2
+       local tk da dp sp
+
+       tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+       da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
+       dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+       sp=$(grep "type:10" "$evts_ns2" |
+            sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+       ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id
+       ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \
+                               rip $da rport $dp token $tk
+       wait_rm_addr $ns2 1
+       wait_rm_sf $ns2 1
+}
+
 userspace_tests()
 {
        # userspace pm type prevents add_addr
@@ -3283,11 +3326,16 @@ userspace_tests()
           continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
                set_userspace_pm $ns1
                pm_nl_set_limits $ns2 1 1
-               run_tests $ns1 $ns2 10.0.1.1 0 userspace_1 0 slow
+               run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10 &
+               local tests_pid=$!
+               wait_mpj $ns1
+               userspace_pm_add_addr 10.0.2.1 10
                chk_join_nr 1 1 1
                chk_add_nr 1 1
+               userspace_pm_rm_sf_addr_ns1 10.0.2.1 10
                chk_rm_nr 1 1 invert
                kill_events_pids
+               wait $tests_pid
        fi
 
        # userspace pm create destroy subflow
@@ -3295,10 +3343,15 @@ userspace_tests()
           continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
                set_userspace_pm $ns2
                pm_nl_set_limits $ns1 0 1
-               run_tests $ns1 $ns2 10.0.1.1 0 0 userspace_1 slow
+               run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10 &
+               local tests_pid=$!
+               wait_mpj $ns2
+               userspace_pm_add_sf 10.0.3.2 20
                chk_join_nr 1 1 1
+               userspace_pm_rm_sf_addr_ns2 10.0.3.2 20
                chk_rm_nr 1 1
                kill_events_pids
+               wait $tests_pid
        fi
 }