In order to unify what is printed in case of error, similar to what is
done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do the
following modifications in simult_flows.sh:
- Print the rc errors at the end of the line.
- Print the MIB counters.
- Use the same ss options: add -M (MPTCP sockets) and -e (detailed
socket information).
While at it, also print of the 'max' time only in case of success,
because 'mptcp_connect.c' will already print this info in case of error,
e.g.:
transfer slower than expected! runtime 11948 ms, expected 11921 ms
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/simult_flows.sh | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/testing/selftests/net/mptcp/simult_flows.sh
index 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda82176861905cf1 100755
--- a/tools/testing/selftests/net/mptcp/simult_flows.sh
+++ b/tools/testing/selftests/net/mptcp/simult_flows.sh
@@ -155,6 +155,11 @@ do_transfer()
sleep 1
fi
+ NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
+ nstat -n
+ NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
+ nstat -n
+
timeout ${timeout_test} \
ip netns exec ${ns3} \
./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \
@@ -180,25 +185,31 @@ do_transfer()
kill ${cappid_connector}
fi
+ NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
+ nstat | grep Tcp > /tmp/${ns3}.out
+ NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
+ nstat | grep Tcp > /tmp/${ns1}.out
+
cmp $sin $cout > /dev/null 2>&1
local cmps=$?
cmp $cin $sout > /dev/null 2>&1
local cmpc=$?
- printf "%-16s" " max $max_time "
if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \
[ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then
+ printf "%-16s" " max $max_time "
mptcp_lib_pr_ok
cat "$capout"
return 0
fi
- mptcp_lib_pr_fail
- echo "client exit code $retc, server $rets" 1>&2
+ mptcp_lib_pr_fail "client exit code $retc, server $rets"
echo -e "\nnetns ${ns3} socket stat for $port:" 1>&2
- ip netns exec ${ns3} ss -nita 1>&2 -o "sport = :$port"
+ ip netns exec ${ns3} ss -Menita 1>&2 -o "sport = :$port"
+ cat /tmp/${ns3}.out
echo -e "\nnetns ${ns1} socket stat for $port:" 1>&2
- ip netns exec ${ns1} ss -nita 1>&2 -o "dport = :$port"
+ ip netns exec ${ns1} ss -Menita 1>&2 -o "dport = :$port"
+ cat /tmp/${ns1}.out
ls -l $sin $cout
ls -l $cin $sout
--
2.47.1
Hi Matt,
On Wed, 2025-01-08 at 19:40 +0100, Matthieu Baerts (NGI0) wrote:
> In order to unify what is printed in case of error, similar to what
> is
> done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do
> the
> following modifications in simult_flows.sh:
>
> - Print the rc errors at the end of the line.
>
> - Print the MIB counters.
>
> - Use the same ss options: add -M (MPTCP sockets) and -e (detailed
> socket information).
>
> While at it, also print of the 'max' time only in case of success,
> because 'mptcp_connect.c' will already print this info in case of
> error,
> e.g.:
>
> transfer slower than expected! runtime 11948 ms, expected 11921 ms
>
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
> ---
> tools/testing/selftests/net/mptcp/simult_flows.sh | 21
> ++++++++++++++++-----
> 1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh
> b/tools/testing/selftests/net/mptcp/simult_flows.sh
> index
> 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda8
> 2176861905cf1 100755
> --- a/tools/testing/selftests/net/mptcp/simult_flows.sh
> +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh
> @@ -155,6 +155,11 @@ do_transfer()
> sleep 1
> fi
>
> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
> + nstat -n
> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
> + nstat -n
> +
> timeout ${timeout_test} \
> ip netns exec ${ns3} \
> ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \
> @@ -180,25 +185,31 @@ do_transfer()
> kill ${cappid_connector}
> fi
>
> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
> + nstat | grep Tcp > /tmp/${ns3}.out
> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
> + nstat | grep Tcp > /tmp/${ns1}.out
Here I got "nstat: history is aged out, resetting" warnings, and I
don't know how to fix it:
Selftest Test: ./simult_flows.sh
TAP version 13
1..1
[ 1.022664] ip (155) used greatest stack depth: 12280 bytes left
[ 1.316990] netem: version 1.3
# 01 balanced bwidth
7401nstat: history is aged out, resetting
# nstat: history is aged out, resetting
# max 7906 [ OK ]
# 02 balanced bwidth - reverse direction 7394
max 7906 [ OK ]
> +
> cmp $sin $cout > /dev/null 2>&1
> local cmps=$?
> cmp $cin $sout > /dev/null 2>&1
> local cmpc=$?
>
> - printf "%-16s" " max $max_time "
> if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \
> [ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then
> + printf "%-16s" " max $max_time "
> mptcp_lib_pr_ok
> cat "$capout"
> return 0
> fi
>
> - mptcp_lib_pr_fail
> - echo "client exit code $retc, server $rets" 1>&2
> + mptcp_lib_pr_fail "client exit code $retc, server $rets"
> echo -e "\nnetns ${ns3} socket stat for $port:" 1>&2
> - ip netns exec ${ns3} ss -nita 1>&2 -o "sport = :$port"
> + ip netns exec ${ns3} ss -Menita 1>&2 -o "sport = :$port"
> + cat /tmp/${ns3}.out
> echo -e "\nnetns ${ns1} socket stat for $port:" 1>&2
> - ip netns exec ${ns1} ss -nita 1>&2 -o "dport = :$port"
> + ip netns exec ${ns1} ss -Menita 1>&2 -o "dport = :$port"
> + cat /tmp/${ns1}.out
> ls -l $sin $cout
> ls -l $cin $sout
>
>
Hi Geliang,
On 10/01/2025 09:16, Geliang Tang wrote:
> Hi Matt,
>
> On Wed, 2025-01-08 at 19:40 +0100, Matthieu Baerts (NGI0) wrote:
>> In order to unify what is printed in case of error, similar to what
>> is
>> done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do
>> the
>> following modifications in simult_flows.sh:
>>
>> - Print the rc errors at the end of the line.
>>
>> - Print the MIB counters.
>>
>> - Use the same ss options: add -M (MPTCP sockets) and -e (detailed
>> socket information).
>>
>> While at it, also print of the 'max' time only in case of success,
>> because 'mptcp_connect.c' will already print this info in case of
>> error,
>> e.g.:
>>
>> transfer slower than expected! runtime 11948 ms, expected 11921 ms
>>
>> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
>> ---
>> tools/testing/selftests/net/mptcp/simult_flows.sh | 21
>> ++++++++++++++++-----
>> 1 file changed, 16 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh
>> b/tools/testing/selftests/net/mptcp/simult_flows.sh
>> index
>> 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda8
>> 2176861905cf1 100755
>> --- a/tools/testing/selftests/net/mptcp/simult_flows.sh
>> +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh
>> @@ -155,6 +155,11 @@ do_transfer()
>> sleep 1
>> fi
>>
>> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
>> + nstat -n
>> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
>> + nstat -n
>> +
>> timeout ${timeout_test} \
>> ip netns exec ${ns3} \
>> ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \
>> @@ -180,25 +185,31 @@ do_transfer()
>> kill ${cappid_connector}
>> fi
>>
>> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
>> + nstat | grep Tcp > /tmp/${ns3}.out
>> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
>> + nstat | grep Tcp > /tmp/${ns1}.out
>
> Here I got "nstat: history is aged out, resetting" warnings, and I
> don't know how to fix it:
>
> Selftest Test: ./simult_flows.sh
> TAP version 13
> 1..1
> [ 1.022664] ip (155) used greatest stack depth: 12280 bytes left
> [ 1.316990] netem: version 1.3
> # 01 balanced bwidth
> 7401nstat: history is aged out, resetting
> # nstat: history is aged out, resetting
> # max 7906 [ OK ]
> # 02 balanced bwidth - reverse direction 7394
> max 7906 [ OK ]
Interesting: I already saw this message on NIPA, but I could not
reproduce it on my side.
Could you eventually try to find out what it is? Maybe the stats from
files in /tmp are wrong inside your VM?
The code of nstat is in the iproute2 repo:
https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/tree/misc/nstat.c#n691
if (!ignore_history) {
FILE *tfp;
long uptime = -1;
if ((tfp = fopen("/proc/uptime", "r")) != NULL) {
if (fscanf(tfp, "%ld", &uptime) != 1)
uptime = -1;
fclose(tfp);
}
if (uptime >= 0 && time(NULL) >= stb.st_mtime+uptime) {
fprintf(stderr, "nstat: history is aged out, resetting\n");
if (ftruncate(fileno(hist_fp), 0) < 0)
perror("nstat: ftruncate");
}
}
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
© 2016 - 2026 Red Hat, Inc.