selftests: mptcp: userspace pm subflow tests
authorGeliang Tang <geliang.tang@suse.com>
Fri, 8 Jul 2022 17:14:11 +0000 (10:14 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 9 Jul 2022 11:19:24 +0000 (12:19 +0100)
This patch adds userspace pm subflow tests support for mptcp_join.sh
script. Add userspace pm create subflow and destroy test cases in
userspace_tests().

Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/mptcp/mptcp_join.sh

index d889e75..55efe2a 100755 (executable)
@@ -663,6 +663,8 @@ do_transfer()
        local userspace_pm=0
        local evts_ns1
        local evts_ns1_pid
+       local evts_ns2
+       local evts_ns2_pid
 
        :> "$cout"
        :> "$sout"
@@ -708,13 +710,20 @@ do_transfer()
                # disconnect
                extra_args="$extra_args -I ${addr_nr_ns2:10}"
                addr_nr_ns2=0
+       elif [[ "${addr_nr_ns2}" = "userspace_"* ]]; then
+               userspace_pm=1
+               addr_nr_ns2=${addr_nr_ns2:10}
        fi
 
        if [ $userspace_pm -eq 1 ]; then
                evts_ns1=$(mktemp)
+               evts_ns2=$(mktemp)
                :> "$evts_ns1"
+               :> "$evts_ns2"
                ip netns exec ${listener_ns} ./pm_nl_ctl events >> "$evts_ns1" 2>&1 &
                evts_ns1_pid=$!
+               ip netns exec ${connector_ns} ./pm_nl_ctl events >> "$evts_ns2" 2>&1 &
+               evts_ns2_pid=$!
        fi
 
        local local_addr
@@ -836,6 +845,8 @@ do_transfer()
        if [ $addr_nr_ns2 -gt 0 ]; then
                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
@@ -843,9 +854,23 @@ do_transfer()
                        else
                                addr="10.0.$counter.2"
                        fi
-                       pm_nl_add_endpoint $ns2 $addr flags $flags
+                       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 dsf lip $addr lport $sp \
+                                                                       rip $da rport $dp token $tk
+                       fi
                        counter=$((counter + 1))
                        add_nr_ns2=$((add_nr_ns2 - 1))
+                       id=$((id + 1))
                done
        elif [ $addr_nr_ns2 -lt 0 ]; then
                local rm_nr_ns2=$((-addr_nr_ns2))
@@ -924,7 +949,8 @@ do_transfer()
 
        if [ $userspace_pm -eq 1 ]; then
                kill_wait $evts_ns1_pid
-               rm -rf $evts_ns1
+               kill_wait $evts_ns2_pid
+               rm -rf $evts_ns1 $evts_ns2
        fi
 
        NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
@@ -2857,6 +2883,15 @@ userspace_tests()
                chk_add_nr 1 1
                chk_rm_nr 1 1 invert
        fi
+
+       # userspace pm create destroy subflow
+       if reset "userspace pm create destroy subflow"; 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
+               chk_join_nr 1 1 1
+               chk_rm_nr 0 1
+       fi
 }
 
 endpoint_tests()