]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: mptcp: launch mptcp_connect with timeout
authorMatthieu Baerts <matthieu.baerts@tessares.net>
Thu, 1 Apr 2021 23:19:45 +0000 (16:19 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 May 2021 08:29:30 +0000 (10:29 +0200)
[ Upstream commit 5888a61cb4e00695075bbacfd86f3fa73af00413 ]

'mptcp_connect' already has a timeout for poll() but in some cases, it
is not enough.

With "timeout" tool, we will force the command to fail if it doesn't
finish on time. Thanks to that, the script will continue and display
details about the current state before marking the test as failed.
Displaying this state is very important to be able to understand the
issue. Best to have our CI reporting the issue than just "the test
hanged".

Note that in mptcp_connect.sh, we were using a long timeout to validate
the fact we cannot create a socket if a sysctl is set. We don't need
this timeout.

In diag.sh, we want to send signals to mptcp_connect instances that have
been started in the netns. But we cannot send this signal to 'timeout'
otherwise that will stop the timeout and messages telling us SIGUSR1 has
been received will be printed. Instead of trying to find the right PID
and storing them in an array, we can simply use the output of
'ip netns pids' which is all the PIDs we want to send signal to.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/160
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/net/mptcp/diag.sh
tools/testing/selftests/net/mptcp/mptcp_connect.sh
tools/testing/selftests/net/mptcp/mptcp_join.sh
tools/testing/selftests/net/mptcp/simult_flows.sh

index 39edce4f541c2dd4cda356a09d72b6af54358deb..2674ba20d52490b6309bd47607d67827675b9826 100755 (executable)
@@ -5,8 +5,9 @@ rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
 ns="ns1-$rndh"
 ksft_skip=4
 test_cnt=1
+timeout_poll=100
+timeout_test=$((timeout_poll * 2 + 1))
 ret=0
-pids=()
 
 flush_pids()
 {
@@ -14,18 +15,14 @@ flush_pids()
        # give it some time
        sleep 1.1
 
-       for pid in ${pids[@]}; do
-               [ -d /proc/$pid ] && kill -SIGUSR1 $pid >/dev/null 2>&1
-       done
-       pids=()
+       ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGUSR1 &>/dev/null
 }
 
 cleanup()
 {
+       ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGKILL &>/dev/null
+
        ip netns del $ns
-       for pid in ${pids[@]}; do
-               [ -d /proc/$pid ] && kill -9 $pid >/dev/null 2>&1
-       done
 }
 
 ip -Version > /dev/null 2>&1
@@ -79,39 +76,57 @@ trap cleanup EXIT
 ip netns add $ns
 ip -n $ns link set dev lo up
 
-echo "a" | ip netns exec $ns ./mptcp_connect -p 10000 -l 0.0.0.0 -t 100 >/dev/null &
+echo "a" | \
+       timeout ${timeout_test} \
+               ip netns exec $ns \
+                       ./mptcp_connect -p 10000 -l -t ${timeout_poll} \
+                               0.0.0.0 >/dev/null &
 sleep 0.1
-pids[0]=$!
 chk_msk_nr 0 "no msk on netns creation"
 
-echo "b" | ip netns exec $ns ./mptcp_connect -p 10000 127.0.0.1 -j -t 100 >/dev/null &
+echo "b" | \
+       timeout ${timeout_test} \
+               ip netns exec $ns \
+                       ./mptcp_connect -p 10000 -j -t ${timeout_poll} \
+                               127.0.0.1 >/dev/null &
 sleep 0.1
-pids[1]=$!
 chk_msk_nr 2 "after MPC handshake "
 chk_msk_remote_key_nr 2 "....chk remote_key"
 chk_msk_fallback_nr 0 "....chk no fallback"
 flush_pids
 
 
-echo "a" | ip netns exec $ns ./mptcp_connect -p 10001 -s TCP -l 0.0.0.0 -t 100 >/dev/null &
-pids[0]=$!
+echo "a" | \
+       timeout ${timeout_test} \
+               ip netns exec $ns \
+                       ./mptcp_connect -p 10001 -l -s TCP -t ${timeout_poll} \
+                               0.0.0.0 >/dev/null &
 sleep 0.1
-echo "b" | ip netns exec $ns ./mptcp_connect -p 10001 127.0.0.1 -j -t 100 >/dev/null &
-pids[1]=$!
+echo "b" | \
+       timeout ${timeout_test} \
+               ip netns exec $ns \
+                       ./mptcp_connect -p 10001 -j -t ${timeout_poll} \
+                               127.0.0.1 >/dev/null &
 sleep 0.1
 chk_msk_fallback_nr 1 "check fallback"
 flush_pids
 
 NR_CLIENTS=100
 for I in `seq 1 $NR_CLIENTS`; do
-       echo "a" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) -l 0.0.0.0 -t 100 -w 10 >/dev/null  &
-       pids[$((I*2))]=$!
+       echo "a" | \
+               timeout ${timeout_test} \
+                       ip netns exec $ns \
+                               ./mptcp_connect -p $((I+10001)) -l -w 10 \
+                                       -t ${timeout_poll} 0.0.0.0 >/dev/null &
 done
 sleep 0.1
 
 for I in `seq 1 $NR_CLIENTS`; do
-       echo "b" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) 127.0.0.1 -t 100 -w 10 >/dev/null &
-       pids[$((I*2 + 1))]=$!
+       echo "b" | \
+               timeout ${timeout_test} \
+                       ip netns exec $ns \
+                               ./mptcp_connect -p $((I+10001)) -w 10 \
+                                       -t ${timeout_poll} 127.0.0.1 >/dev/null &
 done
 sleep 1.5
 
index e927df83efb91bf54d78937f9df085b222d4eb53..c37acb790bd665c2499a4acae70096bcd4781621 100755 (executable)
@@ -11,7 +11,8 @@ cin=""
 cout=""
 ksft_skip=4
 capture=false
-timeout=30
+timeout_poll=30
+timeout_test=$((timeout_poll * 2 + 1))
 ipv6=true
 ethtool_random_on=true
 tc_delay="$((RANDOM%50))"
@@ -272,7 +273,7 @@ check_mptcp_disabled()
        ip netns exec ${disabled_ns} sysctl -q net.mptcp.enabled=0
 
        local err=0
-       LANG=C ip netns exec ${disabled_ns} ./mptcp_connect -t $timeout -p 10000 -s MPTCP 127.0.0.1 < "$cin" 2>&1 | \
+       LANG=C ip netns exec ${disabled_ns} ./mptcp_connect -p 10000 -s MPTCP 127.0.0.1 < "$cin" 2>&1 | \
                grep -q "^socket: Protocol not available$" && err=1
        ip netns delete ${disabled_ns}
 
@@ -414,14 +415,20 @@ do_transfer()
        local stat_cookietx_last=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesSent | while read a count c rest ;do  echo $count;done)
        local stat_cookierx_last=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesRecv | while read a count c rest ;do  echo $count;done)
 
-       ip netns exec ${listener_ns} ./mptcp_connect -t $timeout -l -p $port -s ${srv_proto} $extra_args $local_addr < "$sin" > "$sout" &
+       timeout ${timeout_test} \
+               ip netns exec ${listener_ns} \
+                       ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
+                               $extra_args $local_addr < "$sin" > "$sout" &
        local spid=$!
 
        wait_local_port_listen "${listener_ns}" "${port}"
 
        local start
        start=$(date +%s%3N)
-       ip netns exec ${connector_ns} ./mptcp_connect -t $timeout -p $port -s ${cl_proto} $extra_args $connect_addr < "$cin" > "$cout" &
+       timeout ${timeout_test} \
+               ip netns exec ${connector_ns} \
+                       ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+                               $extra_args $connect_addr < "$cin" > "$cout" &
        local cpid=$!
 
        wait $cpid
index 9aa9624cff972a48a3c193a75eb2160449ee1ef1..99c5dc0eeb2654ec31b26a1a03ab8eba0fab0d7e 100755 (executable)
@@ -8,7 +8,8 @@ cin=""
 cinsent=""
 cout=""
 ksft_skip=4
-timeout=30
+timeout_poll=30
+timeout_test=$((timeout_poll * 2 + 1))
 mptcp_connect=""
 capture=0
 
@@ -249,17 +250,26 @@ do_transfer()
                local_addr="0.0.0.0"
        fi
 
-       ip netns exec ${listener_ns} $mptcp_connect -t $timeout -l -p $port \
-               -s ${srv_proto} ${local_addr} < "$sin" > "$sout" &
+       timeout ${timeout_test} \
+               ip netns exec ${listener_ns} \
+                       $mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
+                               ${local_addr} < "$sin" > "$sout" &
        spid=$!
 
        sleep 1
 
        if [ "$test_link_fail" -eq 0 ];then
-               ip netns exec ${connector_ns} $mptcp_connect -t $timeout -p $port -s ${cl_proto} $connect_addr < "$cin" > "$cout" &
+               timeout ${timeout_test} \
+                       ip netns exec ${connector_ns} \
+                               $mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+                                       $connect_addr < "$cin" > "$cout" &
        else
-               ( cat "$cin" ; sleep 2; link_failure $listener_ns ; cat "$cin" ) | tee "$cinsent" | \
-               ip netns exec ${connector_ns} $mptcp_connect -t $timeout -p $port -s ${cl_proto} $connect_addr > "$cout" &
+               ( cat "$cin" ; sleep 2; link_failure $listener_ns ; cat "$cin" ) | \
+                       tee "$cinsent" | \
+                       timeout ${timeout_test} \
+                               ip netns exec ${connector_ns} \
+                                       $mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+                                               $connect_addr > "$cout" &
        fi
        cpid=$!
 
index f039ee57eb3c79b4d6c08ba07e8c1b8f2b9e6228..3aeef3bcb10183297f58f20befebcda23233b163 100755 (executable)
@@ -7,7 +7,8 @@ ns2="ns2-$rndh"
 ns3="ns3-$rndh"
 capture=false
 ksft_skip=4
-timeout=30
+timeout_poll=30
+timeout_test=$((timeout_poll * 2 + 1))
 test_cnt=1
 ret=0
 bail=0
@@ -157,14 +158,20 @@ do_transfer()
                sleep 1
        fi
 
-       ip netns exec ${ns3} ./mptcp_connect -jt $timeout -l -p $port 0.0.0.0 < "$sin" > "$sout" &
+       timeout ${timeout_test} \
+               ip netns exec ${ns3} \
+                       ./mptcp_connect -jt ${timeout_poll} -l -p $port \
+                               0.0.0.0 < "$sin" > "$sout" &
        local spid=$!
 
        wait_local_port_listen "${ns3}" "${port}"
 
        local start
        start=$(date +%s%3N)
-       ip netns exec ${ns1} ./mptcp_connect -jt $timeout -p $port 10.0.3.3 < "$cin" > "$cout" &
+       timeout ${timeout_test} \
+               ip netns exec ${ns1} \
+                       ./mptcp_connect -jt ${timeout_poll} -p $port \
+                               10.0.3.3 < "$cin" > "$cout" &
        local cpid=$!
 
        wait $cpid