* [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes
@ 2021-02-12 23:20 Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 1/4] selftests: mptcp: dump more info on errors Mat Martineau
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Mat Martineau @ 2021-02-12 23:20 UTC (permalink / raw)
To: netdev; +Cc: Mat Martineau, davem, kuba, mptcp, matthieu.baerts
This is a collection of selftest updates from the MPTCP tree.
Patch 1 uses additional 'ss' command line parameters and 'nstat' to
improve output when certain MPTCP tests fail.
Patches 2 & 3 fix a copy/paste error and some output formatting.
Patch 4 makes sure tests still pass if certain connection-related
packets are retransmitted.
Matthieu Baerts (3):
selftests: mptcp: fix ACKRX debug message
selftests: mptcp: display warnings on one line
selftests: mptcp: fail if not enough SYN/3rd ACK
Paolo Abeni (1):
selftests: mptcp: dump more info on errors
.../selftests/net/mptcp/mptcp_connect.sh | 94 +++++++++++++------
1 file changed, 66 insertions(+), 28 deletions(-)
base-commit: c3ff3b02e99c691197a05556ef45f5c3dd2ed3d6
--
2.30.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net-next 1/4] selftests: mptcp: dump more info on errors
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
@ 2021-02-12 23:20 ` Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 2/4] selftests: mptcp: fix ACKRX debug message Mat Martineau
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2021-02-12 23:20 UTC (permalink / raw)
To: netdev; +Cc: Paolo Abeni, davem, kuba, mptcp, matthieu.baerts, Mat Martineau
From: Paolo Abeni <pabeni@redhat.com>
Even if that may sound completely unlikely, the mptcp implementation
is not perfect, yet.
When the self-tests report an error we usually need more information
of what the scripts currently report. iproute allow provides
some additional goodies since a few releases, let's dump them.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
.../testing/selftests/net/mptcp/mptcp_connect.sh | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 2cfd87d94db8..0c6b9d3c03c0 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -128,6 +128,7 @@ cleanup()
local netns
for netns in "$ns1" "$ns2" "$ns3" "$ns4";do
ip netns del $netns
+ rm -f /tmp/$netns.{nstat,out}
done
}
@@ -438,16 +439,24 @@ do_transfer()
kill ${cappid_connector}
fi
+ NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
+ nstat | grep Tcp > /tmp/${listener_ns}.out
+ if [ ${listener_ns} != ${connector_ns} ]; then
+ NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \
+ nstat | grep Tcp > /tmp/${connector_ns}.out
+ fi
+
local duration
duration=$((stop-start))
duration=$(printf "(duration %05sms)" $duration)
if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then
echo "$duration [ FAIL ] client exit code $retc, server $rets" 1>&2
echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2
- ip netns exec ${listener_ns} ss -nita 1>&2 -o "sport = :$port"
+ ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port"
+ cat /tmp/${listener_ns}.out
echo -e "\nnetns ${connector_ns} socket stat for ${port}:" 1>&2
- ip netns exec ${connector_ns} ss -nita 1>&2 -o "dport = :$port"
-
+ ip netns exec ${connector_ns} ss -Menita 1>&2 -o "dport = :$port"
+ [ ${listener_ns} != ${connector_ns} ] && cat /tmp/${connector_ns}.out
cat "$capout"
return 1
fi
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 2/4] selftests: mptcp: fix ACKRX debug message
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 1/4] selftests: mptcp: dump more info on errors Mat Martineau
@ 2021-02-12 23:20 ` Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 3/4] selftests: mptcp: display warnings on one line Mat Martineau
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2021-02-12 23:20 UTC (permalink / raw)
To: netdev; +Cc: Matthieu Baerts, davem, kuba, mptcp, Mat Martineau
From: Matthieu Baerts <matthieu.baerts@tessares.net>
Info from received MPCapable SYN were printed instead of the ones from
received MPCapable 3rd ACK.
Fixes: fed61c4b584c ("selftests: mptcp: make 2nd net namespace use tcp syn cookies unconditionally")
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
tools/testing/selftests/net/mptcp/mptcp_connect.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 0c6b9d3c03c0..9ab35ae41628 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -502,7 +502,7 @@ do_transfer()
echo "${listener_ns} SYNRX: ${cl_proto} -> ${srv_proto}: expect ${expect_synrx}, got ${stat_synrx_now_l}"
fi
if [ $expect_ackrx -ne $stat_ackrx_now_l ] ;then
- echo "${listener_ns} ACKRX: ${cl_proto} -> ${srv_proto}: expect ${expect_synrx}, got ${stat_synrx_now_l}"
+ echo "${listener_ns} ACKRX: ${cl_proto} -> ${srv_proto}: expect ${expect_ackrx}, got ${stat_ackrx_now_l} "
fi
if [ $retc -eq 0 ] && [ $rets -eq 0 ];then
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 3/4] selftests: mptcp: display warnings on one line
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 1/4] selftests: mptcp: dump more info on errors Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 2/4] selftests: mptcp: fix ACKRX debug message Mat Martineau
@ 2021-02-12 23:20 ` Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 4/4] selftests: mptcp: fail if not enough SYN/3rd ACK Mat Martineau
2021-02-13 0:40 ` [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2021-02-12 23:20 UTC (permalink / raw)
To: netdev; +Cc: Matthieu Baerts, davem, kuba, mptcp, Mat Martineau
From: Matthieu Baerts <matthieu.baerts@tessares.net>
Before we had this in case of SYN retransmissions:
(...)
# ns4 MPTCP -> ns2 (10.0.1.2:10034 ) MPTCP (duration 1201ms) [ OK ]
# ns4 MPTCP -> ns2 (dead:beef:1::2:10035) MPTCP (duration 1242ms) [ OK ]
# ns4 MPTCP -> ns2 (10.0.2.1:10036 ) MPTCP ns2-60143c00-cDZWo4 SYNRX: MPTCP -> MPTCP: expect 11, got
# 13
# (duration 6221ms) [ OK ]
# ns4 MPTCP -> ns2 (dead:beef:2::1:10037) MPTCP (duration 1427ms) [ OK ]
# ns4 MPTCP -> ns3 (10.0.2.2:10038 ) MPTCP (duration 881ms) [ OK ]
(...)
Now we have:
(...)
# ns4 MPTCP -> ns2 (10.0.1.2:10034 ) MPTCP (duration 1201ms) [ OK ]
# ns4 MPTCP -> ns2 (dead:beef:1::2:10035) MPTCP (duration 1242ms) [ OK ]
# ns4 MPTCP -> ns2 (10.0.2.1:10036 ) MPTCP (duration 6221ms) [ OK ] WARN: SYNRX: expect 11, got 13
# ns4 MPTCP -> ns2 (dead:beef:2::1:10037) MPTCP (duration 1427ms) [ OK ]
# ns4 MPTCP -> ns3 (10.0.2.2:10038 ) MPTCP (duration 881ms) [ OK ]
(...)
So we put everything on one line, keep the durations and "OK" aligned
and removed duplicated info to short the warning.
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
.../selftests/net/mptcp/mptcp_connect.sh | 63 ++++++++++++-------
1 file changed, 40 insertions(+), 23 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 9ab35ae41628..362e891f89cf 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -334,6 +334,21 @@ do_ping()
return 0
}
+# $1: ns, $2: MIB counter
+get_mib_counter()
+{
+ local listener_ns="${1}"
+ local mib="${2}"
+
+ # strip the header
+ ip netns exec "${listener_ns}" \
+ nstat -z -a "${mib}" | \
+ tail -n+2 | \
+ while read a count c rest; do
+ echo $count
+ done
+}
+
# $1: ns, $2: port
wait_local_port_listen()
{
@@ -410,10 +425,10 @@ do_transfer()
sleep 1
fi
- local stat_synrx_last_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableSYNRX | while read a count c rest ;do echo $count;done)
- local stat_ackrx_last_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableACKRX | while read a count c rest ;do echo $count;done)
- 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)
+ local stat_synrx_last_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
+ local stat_ackrx_last_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
+ local stat_cookietx_last=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesSent")
+ local stat_cookierx_last=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesRecv")
ip netns exec ${listener_ns} ./mptcp_connect -t $timeout -l -p $port -s ${srv_proto} $extra_args $local_addr < "$sin" > "$sout" &
local spid=$!
@@ -448,15 +463,17 @@ do_transfer()
local duration
duration=$((stop-start))
- duration=$(printf "(duration %05sms)" $duration)
+ printf "(duration %05sms) " "${duration}"
if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then
- echo "$duration [ FAIL ] client exit code $retc, server $rets" 1>&2
+ echo "[ FAIL ] client exit code $retc, server $rets" 1>&2
echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2
ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port"
cat /tmp/${listener_ns}.out
echo -e "\nnetns ${connector_ns} socket stat for ${port}:" 1>&2
ip netns exec ${connector_ns} ss -Menita 1>&2 -o "dport = :$port"
[ ${listener_ns} != ${connector_ns} ] && cat /tmp/${connector_ns}.out
+
+ echo
cat "$capout"
return 1
fi
@@ -466,11 +483,14 @@ do_transfer()
check_transfer $cin $sout "file received by server"
rets=$?
- local stat_synrx_now_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableSYNRX | while read a count c rest ;do echo $count;done)
- local stat_ackrx_now_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableACKRX | while read a count c rest ;do echo $count;done)
+ if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then
+ printf "[ OK ]"
+ fi
- local stat_cookietx_now=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesSent | while read a count c rest ;do echo $count;done)
- local stat_cookierx_now=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesRecv | while read a count c rest ;do echo $count;done)
+ local stat_synrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
+ local stat_ackrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
+ local stat_cookietx_now=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesSent")
+ local stat_cookierx_now=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesRecv")
expect_synrx=$((stat_synrx_last_l))
expect_ackrx=$((stat_ackrx_last_l))
@@ -484,35 +504,32 @@ do_transfer()
fi
if [ $cookies -eq 2 ];then
if [ $stat_cookietx_last -ge $stat_cookietx_now ] ;then
- echo "${listener_ns} CookieSent: ${cl_proto} -> ${srv_proto}: did not advance"
+ printf " WARN: CookieSent: did not advance"
fi
if [ $stat_cookierx_last -ge $stat_cookierx_now ] ;then
- echo "${listener_ns} CookieRecv: ${cl_proto} -> ${srv_proto}: did not advance"
+ printf " WARN: CookieRecv: did not advance"
fi
else
if [ $stat_cookietx_last -ne $stat_cookietx_now ] ;then
- echo "${listener_ns} CookieSent: ${cl_proto} -> ${srv_proto}: changed"
+ printf " WARN: CookieSent: changed"
fi
if [ $stat_cookierx_last -ne $stat_cookierx_now ] ;then
- echo "${listener_ns} CookieRecv: ${cl_proto} -> ${srv_proto}: changed"
+ printf " WARN: CookieRecv: changed"
fi
fi
if [ $expect_synrx -ne $stat_synrx_now_l ] ;then
- echo "${listener_ns} SYNRX: ${cl_proto} -> ${srv_proto}: expect ${expect_synrx}, got ${stat_synrx_now_l}"
+ printf " WARN: SYNRX: expect %d, got %d" \
+ "${expect_synrx}" "${stat_synrx_now_l}"
fi
if [ $expect_ackrx -ne $stat_ackrx_now_l ] ;then
- echo "${listener_ns} ACKRX: ${cl_proto} -> ${srv_proto}: expect ${expect_ackrx}, got ${stat_ackrx_now_l} "
- fi
-
- if [ $retc -eq 0 ] && [ $rets -eq 0 ];then
- echo "$duration [ OK ]"
- cat "$capout"
- return 0
+ printf " WARN: ACKRX: expect %d, got %d" \
+ "${expect_ackrx}" "${stat_ackrx_now_l}"
fi
+ echo
cat "$capout"
- return 1
+ [ $retc -eq 0 ] && [ $rets -eq 0 ]
}
make_file()
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 4/4] selftests: mptcp: fail if not enough SYN/3rd ACK
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
` (2 preceding siblings ...)
2021-02-12 23:20 ` [PATCH net-next 3/4] selftests: mptcp: display warnings on one line Mat Martineau
@ 2021-02-12 23:20 ` Mat Martineau
2021-02-13 0:40 ` [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2021-02-12 23:20 UTC (permalink / raw)
To: netdev; +Cc: Matthieu Baerts, davem, kuba, mptcp, Mat Martineau
From: Matthieu Baerts <matthieu.baerts@tessares.net>
If we receive less MPCapable SYN or 3rd ACK than expected, we now mark
the test as failed.
On the other hand, if we receive more, we keep the warning but we add a
hint that it is probably due to retransmissions and that's why we don't
mark the test as failed.
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/148
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
.../selftests/net/mptcp/mptcp_connect.sh | 28 +++++++++++++------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 362e891f89cf..10a030b53b23 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -483,10 +483,6 @@ do_transfer()
check_transfer $cin $sout "file received by server"
rets=$?
- if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then
- printf "[ OK ]"
- fi
-
local stat_synrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
local stat_ackrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
local stat_cookietx_now=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesSent")
@@ -502,6 +498,22 @@ do_transfer()
expect_synrx=$((stat_synrx_last_l+1))
expect_ackrx=$((stat_ackrx_last_l+1))
fi
+
+ if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then
+ printf "[ FAIL ] lower MPC SYN rx (%d) than expected (%d)\n" \
+ "${stat_synrx_now_l}" "${expect_synrx}" 1>&2
+ retc=1
+ fi
+ if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ]; then
+ printf "[ FAIL ] lower MPC ACK rx (%d) than expected (%d)\n" \
+ "${stat_ackrx_now_l}" "${expect_ackrx}" 1>&2
+ rets=1
+ fi
+
+ if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then
+ printf "[ OK ]"
+ fi
+
if [ $cookies -eq 2 ];then
if [ $stat_cookietx_last -ge $stat_cookietx_now ] ;then
printf " WARN: CookieSent: did not advance"
@@ -518,12 +530,12 @@ do_transfer()
fi
fi
- if [ $expect_synrx -ne $stat_synrx_now_l ] ;then
- printf " WARN: SYNRX: expect %d, got %d" \
+ if [ ${stat_synrx_now_l} -gt ${expect_synrx} ]; then
+ printf " WARN: SYNRX: expect %d, got %d (probably retransmissions)" \
"${expect_synrx}" "${stat_synrx_now_l}"
fi
- if [ $expect_ackrx -ne $stat_ackrx_now_l ] ;then
- printf " WARN: ACKRX: expect %d, got %d" \
+ if [ ${stat_ackrx_now_l} -gt ${expect_ackrx} ]; then
+ printf " WARN: ACKRX: expect %d, got %d (probably retransmissions)" \
"${expect_ackrx}" "${stat_ackrx_now_l}"
fi
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
` (3 preceding siblings ...)
2021-02-12 23:20 ` [PATCH net-next 4/4] selftests: mptcp: fail if not enough SYN/3rd ACK Mat Martineau
@ 2021-02-13 0:40 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-02-13 0:40 UTC (permalink / raw)
To: Mat Martineau; +Cc: netdev, davem, kuba, mptcp, matthieu.baerts
Hello:
This series was applied to netdev/net-next.git (refs/heads/master):
On Fri, 12 Feb 2021 15:20:26 -0800 you wrote:
> This is a collection of selftest updates from the MPTCP tree.
>
> Patch 1 uses additional 'ss' command line parameters and 'nstat' to
> improve output when certain MPTCP tests fail.
>
> Patches 2 & 3 fix a copy/paste error and some output formatting.
>
> [...]
Here is the summary with links:
- [net-next,1/4] selftests: mptcp: dump more info on errors
https://git.kernel.org/netdev/net-next/c/767389c8dd55
- [net-next,2/4] selftests: mptcp: fix ACKRX debug message
https://git.kernel.org/netdev/net-next/c/f384221a3817
- [net-next,3/4] selftests: mptcp: display warnings on one line
https://git.kernel.org/netdev/net-next/c/45759a871593
- [net-next,4/4] selftests: mptcp: fail if not enough SYN/3rd ACK
https://git.kernel.org/netdev/net-next/c/5f88117f2565
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-02-13 0:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-12 23:20 [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 1/4] selftests: mptcp: dump more info on errors Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 2/4] selftests: mptcp: fix ACKRX debug message Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 3/4] selftests: mptcp: display warnings on one line Mat Martineau
2021-02-12 23:20 ` [PATCH net-next 4/4] selftests: mptcp: fail if not enough SYN/3rd ACK Mat Martineau
2021-02-13 0:40 ` [PATCH net-next 0/4] mptcp: Selftest enhancement and fixes patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).