Skip to content

Commit

Permalink
selftests: mptcp: explicitly trigger the listener diag code-path
Browse files Browse the repository at this point in the history
The mptcp diag interface already experienced a few locking bugs
that lockdep and appropriate coverage have detected in advance.

Let's add a test-case triggering the relevant code path, to prevent
similar issues in the future.

Be careful to cope with very slow environments.

Note that we don't need an explicit timeout on the mptcp_connect
subprocess to cope with eventual bug/hang-up as the final cleanup
terminating the child processes will take care of that.

Signed-off-by: Paolo Abeni <[email protected]>
  • Loading branch information
Paolo Abeni authored and intel-lab-lkp committed Feb 21, 2024
1 parent 1e86c93 commit e2c8823
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion tools/testing/selftests/net/mptcp/diag.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ flush_pids()

ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGUSR1 &>/dev/null

for _ in $(seq 10); do
for _ in $(seq $((timeout_poll * 10))); do
[ -z "$(ip netns pids "${ns}")" ] && break
sleep 0.1
done
Expand Down Expand Up @@ -81,6 +81,15 @@ chk_msk_nr()
__chk_msk_nr "grep -c token:" "$@"
}

chk_listener_nr()
{
local expected=$1
local msg="$2"

__chk_nr "ss -inmlHMON $ns | wc -l" "$expected" "$msg - mptcp" 0
__chk_nr "ss -inmlHtON $ns | wc -l" "$expected" "$msg - subflows"
}

wait_msk_nr()
{
local condition="grep -c token:"
Expand Down Expand Up @@ -279,5 +288,24 @@ flush_pids
chk_msk_inuse 0 "many->0"
chk_msk_cestab 0 "many->0"

chk_listener_nr 0 "no listener sockets"
NR_SERVERS=100
for I in $(seq 1 $NR_SERVERS); do
ip netns exec $ns ./mptcp_connect -p $((I + 20001)) \
-t ${timeout_poll} -l 0.0.0.0 2>&1 >/dev/null &
done

for I in $(seq 1 $NR_SERVERS); do
mptcp_lib_wait_local_port_listen $ns $((I + 20001))
done

chk_listener_nr $NR_SERVERS "many listener sockets"

# gracefull termination
for I in $(seq 1 $NR_SERVERS); do
echo a | ip netns exec $ns ./mptcp_connect -p $((I + 20001)) 127.0.0.1 2>&1 >/dev/null &
done
flush_pids

mptcp_lib_result_print_all_tap
exit $ret

0 comments on commit e2c8823

Please sign in to comment.