* [PATCH RESEND mptcp-next v7 1/7] Squash to "mptcp: infinite mapping receiving"
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 2/7] Squash to "selftests: mptcp: add infinite map mibs check" Geliang Tang
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Print out the infinite map received info.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/subflow.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index b53b392dd280..250ec414df92 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -961,6 +961,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk,
data_len = mpext->data_len;
if (data_len == 0) {
+ pr_debug("infinite mapping received");
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX);
subflow->map_data_len = 0;
return MAPPING_INVALID;
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 2/7] Squash to "selftests: mptcp: add infinite map mibs check"
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 1/7] Squash to "mptcp: infinite mapping receiving" Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 3/7] mptcp: add the mibs for MP_RST Geliang Tang
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Rename mp_infi_nr_tx, mp_infi_nr_rx and irx.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 0b4bd2df2538..9b75569e423a 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -784,27 +784,27 @@ chk_fail_nr()
chk_infi_nr()
{
- local mp_infi_nr_tx=$1
- local mp_infi_nr_rx=$2
+ local infi_tx=$1
+ local infi_rx=$2
local count
local dump_stats
printf "%-${nr_blank}s %s" " " "itx"
count=`ip netns exec $ns2 nstat -as | grep InfiniteMapTx | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != "$mp_infi_nr_tx" ]; then
- echo "[fail] got $count infinite map[s] TX expected $mp_infi_nr_tx"
+ if [ "$count" != "$infi_tx" ]; then
+ echo "[fail] got $count infinite map[s] TX expected $infi_tx"
ret=1
dump_stats=1
else
echo -n "[ ok ]"
fi
- echo -n " - irx "
+ echo -n " - infirx"
count=`ip netns exec $ns1 nstat -as | grep InfiniteMapRx | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != "$mp_infi_nr_rx" ]; then
- echo "[fail] got $count infinite map[s] RX expected $mp_infi_nr_rx"
+ if [ "$count" != "$infi_rx" ]; then
+ echo "[fail] got $count infinite map[s] RX expected $infi_rx"
ret=1
dump_stats=1
else
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 3/7] mptcp: add the mibs for MP_RST
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 1/7] Squash to "mptcp: infinite mapping receiving" Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 2/7] Squash to "selftests: mptcp: add infinite map mibs check" Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 4/7] selftests: mptcp: add the MP_RST mibs check Geliang Tang
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added two more mibs for MP_RST, MPTCP_MIB_MPRSTTX for
the MP_RST sending and MPTCP_MIB_MPRSTRX for the MP_RST receiving.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/mib.c | 2 ++
net/mptcp/mib.h | 2 ++
net/mptcp/options.c | 2 ++
3 files changed, 6 insertions(+)
diff --git a/net/mptcp/mib.c b/net/mptcp/mib.c
index 7cef7409e300..5ed9a7da3550 100644
--- a/net/mptcp/mib.c
+++ b/net/mptcp/mib.c
@@ -49,6 +49,8 @@ static const struct snmp_mib mptcp_snmp_list[] = {
SNMP_MIB_ITEM("MPPrioRx", MPTCP_MIB_MPPRIORX),
SNMP_MIB_ITEM("MPFailTx", MPTCP_MIB_MPFAILTX),
SNMP_MIB_ITEM("MPFailRx", MPTCP_MIB_MPFAILRX),
+ SNMP_MIB_ITEM("MPRstTx", MPTCP_MIB_MPRSTTX),
+ SNMP_MIB_ITEM("MPRstRx", MPTCP_MIB_MPRSTRX),
SNMP_MIB_ITEM("RcvPruned", MPTCP_MIB_RCVPRUNED),
SNMP_MIB_ITEM("SubflowStale", MPTCP_MIB_SUBFLOWSTALE),
SNMP_MIB_ITEM("SubflowRecover", MPTCP_MIB_SUBFLOWRECOVER),
diff --git a/net/mptcp/mib.h b/net/mptcp/mib.h
index 785cf751e5c0..2f3a07567730 100644
--- a/net/mptcp/mib.h
+++ b/net/mptcp/mib.h
@@ -42,6 +42,8 @@ enum linux_mptcp_mib_field {
MPTCP_MIB_MPPRIORX, /* Received a MP_PRIO */
MPTCP_MIB_MPFAILTX, /* Transmit a MP_FAIL */
MPTCP_MIB_MPFAILRX, /* Received a MP_FAIL */
+ MPTCP_MIB_MPRSTTX, /* Transmit a MP_RST */
+ MPTCP_MIB_MPRSTRX, /* Received a MP_RST */
MPTCP_MIB_RCVPRUNED, /* Incoming packet dropped due to memory limit */
MPTCP_MIB_SUBFLOWSTALE, /* Subflows entered 'stale' status */
MPTCP_MIB_SUBFLOWRECOVER, /* Subflows returned to active status after being stale */
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 0401b22128c4..935a48cb40d4 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -837,6 +837,7 @@ bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) {
*size += opt_size;
remaining -= opt_size;
+ MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPRSTTX);
}
return true;
}
@@ -1158,6 +1159,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
subflow->reset_seen = 1;
subflow->reset_reason = mp_opt.reset_reason;
subflow->reset_transient = mp_opt.reset_transient;
+ MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPRSTRX);
}
if (!(mp_opt.suboptions & OPTION_MPTCP_DSS))
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 4/7] selftests: mptcp: add the MP_RST mibs check
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
` (2 preceding siblings ...)
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 3/7] mptcp: add the mibs for MP_RST Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 5/7] selftests: mptcp: add more arguments for chk_join_nr Geliang Tang
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added a new function chk_rst_nr() to check the numbers
of the MP_RST sending and receiving mibs.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 9b75569e423a..7537f4fe8078 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -782,6 +782,38 @@ chk_fail_nr()
[ "${dump_stats}" = 1 ] && dump_stats
}
+chk_rst_nr()
+{
+ local rst_tx=$1
+ local rst_rx=$2
+ local count
+ local dump_stats
+
+ printf "%-${nr_blank}s %s" " " "rtx"
+ count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPRstTx | awk '{print $2}'`
+ [ -z "$count" ] && count=0
+ if [ "$count" != "$rst_tx" ]; then
+ echo "[fail] got $count MP_RST[s] TX expected $rst_tx"
+ ret=1
+ dump_stats=1
+ else
+ echo -n "[ ok ]"
+ fi
+
+ echo -n " - rstrx "
+ count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPRstRx | awk '{print $2}'`
+ [ -z "$count" ] && count=0
+ if [ "$count" != "$rst_rx" ]; then
+ echo "[fail] got $count MP_RST[s] RX expected $rst_rx"
+ ret=1
+ dump_stats=1
+ else
+ echo "[ ok ]"
+ fi
+
+ [ "${dump_stats}" = 1 ] && dump_stats
+}
+
chk_infi_nr()
{
local infi_tx=$1
@@ -868,6 +900,7 @@ chk_join_nr()
if [ $checksum -eq 1 ]; then
chk_csum_nr
chk_fail_nr 0 0
+ chk_rst_nr 0 0
chk_infi_nr 0 0
fi
}
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 5/7] selftests: mptcp: add more arguments for chk_join_nr
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
` (3 preceding siblings ...)
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 4/7] selftests: mptcp: add the MP_RST mibs check Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-12 0:11 ` Mat Martineau
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 6/7] selftests: mptcp: reuse linkfail to make given size files Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 7/7] selftests: mptcp: add the MP_FAIL testcases Geliang Tang
6 siblings, 1 reply; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added three more arguments for the function chk_join_nr,
named fail_nr, rst_nr and infi_nr, for the input numbers of MP_FAIL,
MP_RST and the infinite map, which are needed to check. The default
values of them are all zero.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 35 +++++++++++--------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 7537f4fe8078..f0d0d540ee0c 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -719,6 +719,8 @@ dump_stats()
chk_csum_nr()
{
local msg=${1:-""}
+ local csum_ns1=${2:-0}
+ local csum_ns2=${3:-0}
local count
local dump_stats
@@ -730,8 +732,8 @@ chk_csum_nr()
printf " %-36s %s" "$msg" "sum"
count=`ip netns exec $ns1 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != 0 ]; then
- echo "[fail] got $count data checksum error[s] expected 0"
+ if [ "$count" != $csum_ns1 ]; then
+ echo "[fail] got $count data checksum error[s] expected $csum_ns1"
ret=1
dump_stats=1
else
@@ -740,8 +742,8 @@ chk_csum_nr()
echo -n " - csum "
count=`ip netns exec $ns2 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != 0 ]; then
- echo "[fail] got $count data checksum error[s] expected 0"
+ if [ "$count" != $csum_ns2 ]; then
+ echo "[fail] got $count data checksum error[s] expected $csum_ns2"
ret=1
dump_stats=1
else
@@ -752,27 +754,27 @@ chk_csum_nr()
chk_fail_nr()
{
- local mp_fail_nr_tx=$1
- local mp_fail_nr_rx=$2
+ local fail_tx=$1
+ local fail_rx=$2
local count
local dump_stats
printf "%-${nr_blank}s %s" " " "ftx"
count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPFailTx | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != "$mp_fail_nr_tx" ]; then
- echo "[fail] got $count MP_FAIL[s] TX expected $mp_fail_nr_tx"
+ if [ "$count" != "$fail_tx" ]; then
+ echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx"
ret=1
dump_stats=1
else
echo -n "[ ok ]"
fi
- echo -n " - frx "
+ echo -n " - failrx"
count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPFailRx | awk '{print $2}'`
[ -z "$count" ] && count=0
- if [ "$count" != "$mp_fail_nr_rx" ]; then
- echo "[fail] got $count MP_FAIL[s] RX expected $mp_fail_nr_rx"
+ if [ "$count" != "$fail_rx" ]; then
+ echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx"
ret=1
dump_stats=1
else
@@ -852,6 +854,9 @@ chk_join_nr()
local syn_nr=$2
local syn_ack_nr=$3
local ack_nr=$4
+ local fail_nr=${5:-0}
+ local rst_nr=${6:-0}
+ local infi_nr=${7:-0}
local count
local dump_stats
local with_cookie
@@ -898,10 +903,10 @@ chk_join_nr()
fi
[ "${dump_stats}" = 1 ] && dump_stats
if [ $checksum -eq 1 ]; then
- chk_csum_nr
- chk_fail_nr 0 0
- chk_rst_nr 0 0
- chk_infi_nr 0 0
+ chk_csum_nr "" $fail_nr
+ chk_fail_nr $fail_nr $fail_nr
+ chk_rst_nr $rst_nr $rst_nr
+ chk_infi_nr $infi_nr $infi_nr
fi
}
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND mptcp-next v7 5/7] selftests: mptcp: add more arguments for chk_join_nr
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 5/7] selftests: mptcp: add more arguments for chk_join_nr Geliang Tang
@ 2022-02-12 0:11 ` Mat Martineau
0 siblings, 0 replies; 9+ messages in thread
From: Mat Martineau @ 2022-02-12 0:11 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
On Sat, 12 Feb 2022, Geliang Tang wrote:
> This patch added three more arguments for the function chk_join_nr,
> named fail_nr, rst_nr and infi_nr, for the input numbers of MP_FAIL,
> MP_RST and the infinite map, which are needed to check. The default
> values of them are all zero.
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> .../testing/selftests/net/mptcp/mptcp_join.sh | 35 +++++++++++--------
> 1 file changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> index 7537f4fe8078..f0d0d540ee0c 100755
> --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> @@ -719,6 +719,8 @@ dump_stats()
> chk_csum_nr()
> {
> local msg=${1:-""}
> + local csum_ns1=${2:-0}
> + local csum_ns2=${3:-0}
> local count
> local dump_stats
>
> @@ -730,8 +732,8 @@ chk_csum_nr()
> printf " %-36s %s" "$msg" "sum"
> count=`ip netns exec $ns1 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
> [ -z "$count" ] && count=0
> - if [ "$count" != 0 ]; then
> - echo "[fail] got $count data checksum error[s] expected 0"
> + if [ "$count" != $csum_ns1 ]; then
> + echo "[fail] got $count data checksum error[s] expected $csum_ns1"
I ran the 'mptcp_join.sh -F' tests a few times, and on the second attempt
I saw:
001 MP_FAIL MP_RST: 5 corrupted pkts syn[ ok ] - synack[ ok ] - ack[ ok ]
sum[fail] got 2 data checksum error[s] expected 1 - csum [ ok ]
(followed by "2 MP_FAIL[s]" and "2 MP_RST[s]")
That seems to match the output you posted from the one failure in 500
runs. Given the way the packets are corrupted for the test, should it
allow multiple checksum errors but report the failures for multiple
MP_FAIL/MP_RST?
I think the "2 data checksum errors" may be the only issue to fix in the
test itself, and the 2 MP_FAIL / 2 MP_RST problem is something to fix in
the kernel. What do you think?
-Mat
> ret=1
> dump_stats=1
> else
> @@ -740,8 +742,8 @@ chk_csum_nr()
> echo -n " - csum "
> count=`ip netns exec $ns2 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
> [ -z "$count" ] && count=0
> - if [ "$count" != 0 ]; then
> - echo "[fail] got $count data checksum error[s] expected 0"
> + if [ "$count" != $csum_ns2 ]; then
> + echo "[fail] got $count data checksum error[s] expected $csum_ns2"
> ret=1
> dump_stats=1
> else
> @@ -752,27 +754,27 @@ chk_csum_nr()
>
> chk_fail_nr()
> {
> - local mp_fail_nr_tx=$1
> - local mp_fail_nr_rx=$2
> + local fail_tx=$1
> + local fail_rx=$2
> local count
> local dump_stats
>
> printf "%-${nr_blank}s %s" " " "ftx"
> count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPFailTx | awk '{print $2}'`
> [ -z "$count" ] && count=0
> - if [ "$count" != "$mp_fail_nr_tx" ]; then
> - echo "[fail] got $count MP_FAIL[s] TX expected $mp_fail_nr_tx"
> + if [ "$count" != "$fail_tx" ]; then
> + echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx"
> ret=1
> dump_stats=1
> else
> echo -n "[ ok ]"
> fi
>
> - echo -n " - frx "
> + echo -n " - failrx"
> count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPFailRx | awk '{print $2}'`
> [ -z "$count" ] && count=0
> - if [ "$count" != "$mp_fail_nr_rx" ]; then
> - echo "[fail] got $count MP_FAIL[s] RX expected $mp_fail_nr_rx"
> + if [ "$count" != "$fail_rx" ]; then
> + echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx"
> ret=1
> dump_stats=1
> else
> @@ -852,6 +854,9 @@ chk_join_nr()
> local syn_nr=$2
> local syn_ack_nr=$3
> local ack_nr=$4
> + local fail_nr=${5:-0}
> + local rst_nr=${6:-0}
> + local infi_nr=${7:-0}
> local count
> local dump_stats
> local with_cookie
> @@ -898,10 +903,10 @@ chk_join_nr()
> fi
> [ "${dump_stats}" = 1 ] && dump_stats
> if [ $checksum -eq 1 ]; then
> - chk_csum_nr
> - chk_fail_nr 0 0
> - chk_rst_nr 0 0
> - chk_infi_nr 0 0
> + chk_csum_nr "" $fail_nr
> + chk_fail_nr $fail_nr $fail_nr
> + chk_rst_nr $rst_nr $rst_nr
> + chk_infi_nr $infi_nr $infi_nr
> fi
> }
>
> --
> 2.34.1
>
>
>
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 6/7] selftests: mptcp: reuse linkfail to make given size files
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
` (4 preceding siblings ...)
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 5/7] selftests: mptcp: add more arguments for chk_join_nr Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 7/7] selftests: mptcp: add the MP_FAIL testcases Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch reused the test_linkfail values above 2 to make test files with
the given sizes (KB) for both the client side and the server side. It's
useful for the test cases using different file sizes.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 28 +++++++++++++++----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index f0d0d540ee0c..21add441c08a 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -446,7 +446,7 @@ do_transfer()
local_addr="0.0.0.0"
fi
- if [ "$test_link_fail" -eq 2 ];then
+ if [ "$test_link_fail" -gt 1 ];then
timeout ${timeout_test} \
ip netns exec ${listener_ns} \
$mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
@@ -466,13 +466,19 @@ do_transfer()
ip netns exec ${connector_ns} \
$mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
$connect_addr < "$cin" > "$cout" &
- else
+ elif [ "$test_link_fail" -eq 1 ] || [ "$test_link_fail" -eq 2 ];then
( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \
tee "$cinsent" | \
timeout ${timeout_test} \
ip netns exec ${connector_ns} \
$mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
$connect_addr > "$cout" &
+ else
+ cat "$cinfail" | 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=$!
@@ -632,7 +638,7 @@ do_transfer()
return 1
fi
- if [ "$test_link_fail" -eq 2 ];then
+ if [ "$test_link_fail" -gt 1 ];then
check_transfer $sinfail $cout "file received by client"
else
check_transfer $sin $cout "file received by client"
@@ -679,9 +685,16 @@ run_tests()
lret=0
oldin=""
+ # The values above 2 are reused to make test files
+ # with the given sizes (KB)
+ if [ "$test_linkfail" -gt 2 ]; then
+ if [ -z "$cinfail" ]; then
+ cinfail=$(mktemp)
+ fi
+ make_file "$cinfail" "client" $test_linkfail
# create the input file for the failure test when
# the first failure test run
- if [ "$test_linkfail" -ne 0 -a -z "$cinfail" ]; then
+ elif [ "$test_linkfail" -ne 0 -a -z "$cinfail" ]; then
# the client file must be considerably larger
# of the maximum expected cwin value, or the
# link utilization will be not predicable
@@ -694,7 +707,12 @@ run_tests()
make_file "$cinfail" "client" $size
fi
- if [ "$test_linkfail" -eq 2 -a -z "$sinfail" ]; then
+ if [ "$test_linkfail" -gt 2 ]; then
+ if [ -z "$sinfail" ]; then
+ sinfail=$(mktemp)
+ fi
+ make_file "$sinfail" "server" $test_linkfail
+ elif [ "$test_linkfail" -eq 2 -a -z "$sinfail" ]; then
size=$((RANDOM%16))
size=$((size+1))
size=$((size*2048))
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND mptcp-next v7 7/7] selftests: mptcp: add the MP_FAIL testcases
2022-02-11 22:45 [PATCH RESEND mptcp-next v7 0/7] add mp_fail testcases Geliang Tang
` (5 preceding siblings ...)
2022-02-11 22:45 ` [PATCH RESEND mptcp-next v7 6/7] selftests: mptcp: reuse linkfail to make given size files Geliang Tang
@ 2022-02-11 22:45 ` Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2022-02-11 22:45 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang, Davide Caratti, Matthieu Baerts
Added the test cases for MP_FAIL, the multiple subflows test for the
MP_RST case and the single subflow one for the infinite mapping case.
The former used the test_linkfail value to make 1024KB test files,
and the latter 128KB.
Added a new function reset_with_fail(), in it use 'iptables' and 'tc
action pedit' rules to produce the bit flips to trigger the checksum
failures. Added a new function pedit_action_pkts() to get the numbers
of the packets edited by the tc pedit actions.
Added a new global variable validate_checksum to enable checksums for
the MP_FAIL tests without passing the '-C' argument.
Also added the needed kernel configures in the config file.
Suggested-by: Davide Caratti <dcaratti@redhat.com>
Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/config | 8 ++
.../testing/selftests/net/mptcp/mptcp_join.sh | 86 ++++++++++++++++++-
2 files changed, 92 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selftests/net/mptcp/config
index d36b7da5082a..38021a0dd527 100644
--- a/tools/testing/selftests/net/mptcp/config
+++ b/tools/testing/selftests/net/mptcp/config
@@ -12,6 +12,9 @@ CONFIG_NF_TABLES=m
CONFIG_NFT_COMPAT=m
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NF_TABLES_INET=y
CONFIG_NFT_TPROXY=m
CONFIG_NFT_SOCKET=m
@@ -19,3 +22,8 @@ CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NET_ACT_CSUM=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_SCH_INGRESS=m
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 21add441c08a..bfe2349794fc 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -17,6 +17,7 @@ capture=0
checksum=0
ip_mptcp=0
check_invert=0
+validate_checksum=0
do_all_tests=1
TEST_COUNT=0
@@ -62,6 +63,7 @@ init()
done
check_invert=0
+ validate_checksum=$checksum
# ns1 ns2
# ns1eth1 ns2eth1
@@ -167,6 +169,58 @@ reset_with_allow_join_id0()
ip netns exec $ns2 sysctl -q net.mptcp.allow_join_initial_addr_port=$ns2_enable
}
+# Modify TCP payload without corrupting the TCP packet
+#
+# This rule inverts a 8-bit word at byte offset 148 for the 2nd TCP ACK packets
+# carrying enough data.
+# Once it is done, the TCP Checksum field is updated so the packet is still
+# considered as valid at the TCP level.
+# Because the MPTCP checksum, covering the TCP options and data, has not been
+# updated, the modification will be detected and an MP_FAIL will be emitted:
+# what we want to validate here without corrupting "random" MPTCP options.
+#
+# To avoid having tc producing this pr_info() message for each TCP ACK packets
+# not carrying enough data:
+#
+# tc action pedit offset 162 out of bounds
+#
+# Netfilter is used to mark packets with enough data.
+reset_with_fail()
+{
+ reset
+
+ ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=1
+ ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=1
+
+ check_invert=1
+ validate_checksum=1
+ local i="$1"
+ local ip="${2:-4}"
+ local tables
+
+ tables="iptables"
+ if [ $ip -eq 6 ]; then
+ tables="ip6tables"
+ fi
+
+ ip netns exec $ns2 $tables \
+ -t mangle \
+ -A OUTPUT \
+ -o ns2eth$i \
+ -p tcp \
+ -m length --length 150:9999 \
+ -m statistic --mode nth --packet 1 --every 99999 \
+ -j MARK --set-mark 42 || exit 1
+
+ tc -n $ns2 qdisc add dev ns2eth$i clsact || exit 1
+ tc -n $ns2 filter add dev ns2eth$i egress \
+ protocol ip prio 1000 \
+ handle 42 fw \
+ action pedit munge offset 148 u8 invert \
+ pipe csum tcp \
+ index 100 || exit 1
+}
+
ip -Version > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "SKIP: Could not run test without ip tool"
@@ -920,7 +974,7 @@ chk_join_nr()
echo "[ ok ]"
fi
[ "${dump_stats}" = 1 ] && dump_stats
- if [ $checksum -eq 1 ]; then
+ if [ $validate_checksum -eq 1 ]; then
chk_csum_nr "" $fail_nr
chk_fail_nr $fail_nr $fail_nr
chk_rst_nr $rst_nr $rst_nr
@@ -2239,6 +2293,29 @@ userspace_tests()
chk_rm_nr 0 0
}
+pedit_action_pkts()
+{
+ tc -n $ns2 -j -s action show action pedit index 100 | \
+ sed 's/.*"packets":\([0-9]\+\),.*/\1/'
+}
+
+fail_tests()
+{
+ # multiple subflows
+ reset_with_fail 2
+ tc -n $ns2 qdisc add dev ns2eth1 root netem rate 20mbit delay 1
+ pm_nl_set_limits $ns1 0 1
+ pm_nl_set_limits $ns2 0 1
+ pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow
+ run_tests $ns1 $ns2 10.0.1.1 1024
+ chk_join_nr "MP_FAIL MP_RST: $(pedit_action_pkts) corrupted pkts" 1 1 1 1 1
+
+ # single subflow
+ reset_with_fail 1
+ run_tests $ns1 $ns2 10.0.1.1 128
+ chk_join_nr "Infinite map: $(pedit_action_pkts) corrupted pkts" 0 0 0 1 0 1
+}
+
all_tests()
{
subflows_tests
@@ -2257,6 +2334,7 @@ all_tests()
deny_join_id0_tests
fullmesh_tests
userspace_tests
+ fail_tests
}
usage()
@@ -2278,6 +2356,7 @@ usage()
echo " -d deny_join_id0_tests"
echo " -m fullmesh_tests"
echo " -u userspace_tests"
+ echo " -F fail_tests"
echo " -c capture pcap files"
echo " -C enable data checksum"
echo " -i use ip mptcp"
@@ -2317,7 +2396,7 @@ if [ $do_all_tests -eq 1 ]; then
exit $ret
fi
-while getopts 'fesltra64bpkdmuchCSi' opt; do
+while getopts 'fesltra64bpkdmuchCSFi' opt; do
case $opt in
f)
subflows_tests
@@ -2367,6 +2446,9 @@ while getopts 'fesltra64bpkdmuchCSi' opt; do
u)
userspace_tests
;;
+ F)
+ fail_tests
+ ;;
c)
;;
C)
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread