Skip to content

Commit

Permalink
selftest: mptcp: add test for mptcp socket in use
Browse files Browse the repository at this point in the history
Add the function chk_msk_inuse() to diag.sh, which is used to check the
statistics of mptcp socket in use. As mptcp socket in listen state will
be closed randomly after 'accept', we need to get the count of listening
mptcp socket through 'ss' command.

All tests pass.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Menglong Dong <imagedong@tencent.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Menglong Dong authored and David S. Miller committed Jan 9, 2023
1 parent 4a753ca commit e04a30f
Showing 1 changed file with 51 additions and 5 deletions.
56 changes: 51 additions & 5 deletions tools/testing/selftests/net/mptcp/diag.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ flush_pids()
sleep 1.1

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

for _ in $(seq 10); do
[ -z "$(ip netns pids "${ns}")" ] && break
sleep 0.1
done
}

cleanup()
Expand All @@ -37,15 +42,20 @@ if [ $? -ne 0 ];then
exit $ksft_skip
fi

get_msk_inuse()
{
ip netns exec $ns cat /proc/net/protocols | awk '$1~/^MPTCP$/{print $3}'
}

__chk_nr()
{
local condition="$1"
local command="$1"
local expected=$2
local msg nr

shift 2
msg=$*
nr=$(ss -inmHMN $ns | $condition)
nr=$(eval $command)

printf "%-50s" "$msg"
if [ $nr != $expected ]; then
Expand All @@ -57,9 +67,17 @@ __chk_nr()
test_cnt=$((test_cnt+1))
}

__chk_msk_nr()
{
local condition=$1
shift 1

__chk_nr "ss -inmHMN $ns | $condition" $*
}

chk_msk_nr()
{
__chk_nr "grep -c token:" $*
__chk_msk_nr "grep -c token:" $*
}

wait_msk_nr()
Expand Down Expand Up @@ -97,12 +115,12 @@ wait_msk_nr()

chk_msk_fallback_nr()
{
__chk_nr "grep -c fallback" $*
__chk_msk_nr "grep -c fallback" $*
}

chk_msk_remote_key_nr()
{
__chk_nr "grep -c remote_key" $*
__chk_msk_nr "grep -c remote_key" $*
}

__chk_listen()
Expand Down Expand Up @@ -142,6 +160,26 @@ chk_msk_listen()
nr=$(ss -Ml $filter | wc -l)
}

chk_msk_inuse()
{
local expected=$1
local listen_nr

shift 1

listen_nr=$(ss -N "${ns}" -Ml | grep -c LISTEN)
expected=$((expected + listen_nr))

for _ in $(seq 10); do
if [ $(get_msk_inuse) -eq $expected ];then
break
fi
sleep 0.1
done

__chk_nr get_msk_inuse $expected $*
}

# $1: ns, $2: port
wait_local_port_listen()
{
Expand Down Expand Up @@ -195,8 +233,10 @@ wait_connected $ns 10000
chk_msk_nr 2 "after MPC handshake "
chk_msk_remote_key_nr 2 "....chk remote_key"
chk_msk_fallback_nr 0 "....chk no fallback"
chk_msk_inuse 2 "....chk 2 msk in use"
flush_pids

chk_msk_inuse 0 "....chk 0 msk in use after flush"

echo "a" | \
timeout ${timeout_test} \
Expand All @@ -211,8 +251,11 @@ echo "b" | \
127.0.0.1 >/dev/null &
wait_connected $ns 10001
chk_msk_fallback_nr 1 "check fallback"
chk_msk_inuse 1 "....chk 1 msk in use"
flush_pids

chk_msk_inuse 0 "....chk 0 msk in use after flush"

NR_CLIENTS=100
for I in `seq 1 $NR_CLIENTS`; do
echo "a" | \
Expand All @@ -232,6 +275,9 @@ for I in `seq 1 $NR_CLIENTS`; do
done

wait_msk_nr $((NR_CLIENTS*2)) "many msk socket present"
chk_msk_inuse $((NR_CLIENTS*2)) "....chk many msk in use"
flush_pids

chk_msk_inuse 0 "....chk 0 msk in use after flush"

exit $ret

0 comments on commit e04a30f

Please sign in to comment.