netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2)
@ 2023-06-08 16:38 Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 01/14] selftests: mptcp: lib: skip if missing symbol Matthieu Baerts
                   ` (14 more replies)
  0 siblings, 15 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

After a few years of increasing test coverage in the MPTCP selftests, we
realised [1] the last version of the selftests is supposed to run on old
kernels without issues.

Supporting older versions is not that easy for this MPTCP case: these
selftests are often validating the internals by checking packets that
are exchanged, when some MIB counters are incremented after some
actions, how connections are getting opened and closed in some cases,
etc. In other words, it is not limited to the socket interface between
the userspace and the kernelspace.

In addition to that, the current MPTCP selftests run a lot of different
sub-tests but the TAP13 protocol used in the selftests don't support
sub-tests: one failure in sub-tests implies that the whole selftest is
seen as failed at the end because sub-tests are not tracked. It is then
important to skip sub-tests not supported by old kernels.

To minimise the modifications and reduce the complexity to support old
versions, the idea is to look at external signs and skip the whole
selftests or just some sub-tests before starting them. This cannot be
applied in all cases.

This second part focuses on marking different sub-tests as skipped if
some MPTCP features are not supported. A few techniques are used here:

- Before starting some tests:

  - Check if a file (sysctl knob) is present: that's what patch 13/14 is
    doing for the userspace PM feature.

  - Check if a symbol is present in /proc/kallsyms: patch 1/14 adds some
    helpers in mptcp_lib.sh to ease its use. Then these helpers are used
    in patches 2, 3, 4, 10, 11 and 14/14.

  - Set a flag and get the status to check if a feature is supported:
    patch 8/14 is doing that with the 'fullmesh' flag.

- After having launched the tests:

  - Retrieve the counters after a test and check if they are different
    than 0. Similar to the check with the flag, that's not ideal but in
    this case, the counters were already present before the introduction
    of MPTCP but they have been supported by MPTCP sockets only later.
    Patches 5 and 6/14 are using this technique.

Before skipping tests, SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var
value is checked: if it is set to 1, the test is marked as "failed"
instead of "skipped". MPTCP public CI expects to have all features
supported and it sets this env var to 1 to catch regressions in these
new checks.

Patches 7/14 and 9/14 are a bit different because they don't skip tests:

- Patch 7/14 retrieves the default values instead of using hardcoded
  ones because these default values have been modified at some points.
  Then the comparisons are done with the default values.

- patch 9/14 relaxes the expected returned size from MPTCP's getsockopt
  because the different structures gathering various info can get new
  fields and get bigger over time. We cannot expect that the userspace
  is using the same structure as the kernel.

Patch 12/14 marks the test as "skipped" instead of "failed" if the "ip"
tool is not available.

In this second part, the "mptcp_join" selftest is not modified yet. This
will come soon after in the third part with quite a few patches.

Link: https://lore.kernel.org/stable/CA+G9fYtDGpgT4dckXD-y-N92nqUxuvue_7AtDdBcHrbOMsDZLg@mail.gmail.com/ [1]
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
Matthieu Baerts (14):
      selftests: mptcp: lib: skip if missing symbol
      selftests: mptcp: connect: skip transp tests if not supported
      selftests: mptcp: connect: skip disconnect tests if not supported
      selftests: mptcp: connect: skip TFO tests if not supported
      selftests: mptcp: diag: skip listen tests if not supported
      selftests: mptcp: diag: skip inuse tests if not supported
      selftests: mptcp: pm nl: remove hardcoded default limits
      selftests: mptcp: pm nl: skip fullmesh flag checks if not supported
      selftests: mptcp: sockopt: relax expected returned size
      selftests: mptcp: sockopt: skip getsockopt checks if not supported
      selftests: mptcp: sockopt: skip TCP_INQ checks if not supported
      selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable
      selftests: mptcp: userspace pm: skip if not supported
      selftests: mptcp: userspace pm: skip PM listener events tests if unavailable

 tools/testing/selftests/net/mptcp/config           |  1 +
 tools/testing/selftests/net/mptcp/diag.sh          | 42 +++++++++-------------
 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 20 +++++++++++
 tools/testing/selftests/net/mptcp/mptcp_lib.sh     | 38 ++++++++++++++++++++
 tools/testing/selftests/net/mptcp/mptcp_sockopt.c  | 18 ++++++----
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 20 +++++++++--
 tools/testing/selftests/net/mptcp/pm_netlink.sh    | 27 ++++++++------
 tools/testing/selftests/net/mptcp/userspace_pm.sh  | 13 ++++++-
 8 files changed, 135 insertions(+), 44 deletions(-)
---
base-commit: 6c0ec7ab5aaff3706657dd4946798aed483b9471
change-id: 20230608-upstream-net-20230608-mptcp-selftests-support-old-kernels-part-2-6e337e1f047d

Best regards,
-- 
Matthieu Baerts <matthieu.baerts@tessares.net>


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH net 01/14] selftests: mptcp: lib: skip if missing symbol
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 02/14] selftests: mptcp: connect: skip transp tests if not supported Matthieu Baerts
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

New functions are now available to easily detect if a certain feature is
missing by looking at kallsyms.

These new helpers are going to be used in the following commits. In
order to ease the backport of such future patches, it would be good if
this patch is backported up to the introduction of MPTCP selftests,
hence the Fixes tag below: this type of check was supposed to be done
from the beginning.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 048d19d444be ("mptcp: add basic kselftest for mptcp")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/config       |  1 +
 tools/testing/selftests/net/mptcp/mptcp_lib.sh | 38 ++++++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selftests/net/mptcp/config
index 38021a0dd527..6032f9b23c4c 100644
--- a/tools/testing/selftests/net/mptcp/config
+++ b/tools/testing/selftests/net/mptcp/config
@@ -1,3 +1,4 @@
+CONFIG_KALLSYMS=y
 CONFIG_MPTCP=y
 CONFIG_IPV6=y
 CONFIG_MPTCP_IPV6=y
diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
index 3286536b79d5..29b65f4b73b2 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
@@ -38,3 +38,41 @@ mptcp_lib_check_mptcp() {
 		exit ${KSFT_SKIP}
 	fi
 }
+
+mptcp_lib_check_kallsyms() {
+	if ! mptcp_lib_has_file "/proc/kallsyms"; then
+		echo "SKIP: CONFIG_KALLSYMS is missing"
+		exit ${KSFT_SKIP}
+	fi
+}
+
+# Internal: use mptcp_lib_kallsyms_has() instead
+__mptcp_lib_kallsyms_has() {
+	local sym="${1}"
+
+	mptcp_lib_check_kallsyms
+
+	grep -q " ${sym}" /proc/kallsyms
+}
+
+# $1: part of a symbol to look at, add '$' at the end for full name
+mptcp_lib_kallsyms_has() {
+	local sym="${1}"
+
+	if __mptcp_lib_kallsyms_has "${sym}"; then
+		return 0
+	fi
+
+	mptcp_lib_fail_if_expected_feature "${sym} symbol not found"
+}
+
+# $1: part of a symbol to look at, add '$' at the end for full name
+mptcp_lib_kallsyms_doesnt_have() {
+	local sym="${1}"
+
+	if ! __mptcp_lib_kallsyms_has "${sym}"; then
+		return 0
+	fi
+
+	mptcp_lib_fail_if_expected_feature "${sym} symbol has been found"
+}

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 02/14] selftests: mptcp: connect: skip transp tests if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 01/14] selftests: mptcp: lib: skip if missing symbol Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 03/14] selftests: mptcp: connect: skip disconnect " Matthieu Baerts
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the support of IP(V6)_TRANSPARENT socket option with
MPTCP connections introduced by commit c9406a23c116 ("mptcp: sockopt:
add SOL_IP freebind & transparent options").

It is possible to look for "__ip_sock_set_tos" in kallsyms because
IP(V6)_TRANSPARENT socket option support has been added after TOS
support which came with the required infrastructure in MPTCP sockopt
code. To support TOS, the following function has been exported (T). Not
great but better than checking for a specific kernel version.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 5fb62e9cd3ad ("selftests: mptcp: add tproxy test case")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index c1f7bac19942..f9c36c6929cc 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -144,6 +144,7 @@ cleanup()
 }
 
 mptcp_lib_check_mptcp
+mptcp_lib_check_kallsyms
 
 ip -Version > /dev/null 2>&1
 if [ $? -ne 0 ];then
@@ -695,6 +696,15 @@ run_test_transparent()
 		return 0
 	fi
 
+	# IP(V6)_TRANSPARENT has been added after TOS support which came with
+	# the required infrastructure in MPTCP sockopt code. To support TOS, the
+	# following function has been exported (T). Not great but better than
+	# checking for a specific kernel version.
+	if ! mptcp_lib_kallsyms_has "T __ip_sock_set_tos$"; then
+		echo "INFO: ${msg} not supported by the kernel: SKIP"
+		return
+	fi
+
 ip netns exec "$listener_ns" nft -f /dev/stdin <<"EOF"
 flush ruleset
 table inet mangle {

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 03/14] selftests: mptcp: connect: skip disconnect tests if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 01/14] selftests: mptcp: lib: skip if missing symbol Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 02/14] selftests: mptcp: connect: skip transp tests if not supported Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 04/14] selftests: mptcp: connect: skip TFO " Matthieu Baerts
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the full support of disconnections from the userspace
introduced by commit b29fcfb54cd7 ("mptcp: full disconnect
implementation").

It is possible to look for "mptcp_pm_data_reset" in kallsyms because a
preparation patch added it to ease the introduction of the mentioned
feature.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 05be5e273c84 ("selftests: mptcp: add disconnect tests")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index f9c36c6929cc..895114fb6832 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -797,6 +797,11 @@ run_tests_disconnect()
 	local old_cin=$cin
 	local old_sin=$sin
 
+	if ! mptcp_lib_kallsyms_has "mptcp_pm_data_reset$"; then
+		echo "INFO: Full disconnect not supported: SKIP"
+		return
+	fi
+
 	cat $cin $cin $cin > "$cin".disconnect
 
 	# force do_transfer to cope with the multiple tranmissions

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 04/14] selftests: mptcp: connect: skip TFO tests if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (2 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 03/14] selftests: mptcp: connect: skip disconnect " Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 05/14] selftests: mptcp: diag: skip listen " Matthieu Baerts
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the support of TCP_FASTOPEN socket option with MPTCP
connections introduced by commit 4ffb0a02346c ("mptcp: add TCP_FASTOPEN
sock option").

It is possible to look for "mptcp_fastopen_" in kallsyms to know if the
feature is supported or not.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: ca7ae8916043 ("selftests: mptcp: mptfo Initiator/Listener")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 895114fb6832..773dd770a567 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -777,6 +777,11 @@ run_tests_peekmode()
 
 run_tests_mptfo()
 {
+	if ! mptcp_lib_kallsyms_has "mptcp_fastopen_"; then
+		echo "INFO: TFO not supported by the kernel: SKIP"
+		return
+	fi
+
 	echo "INFO: with MPTFO start"
 	ip netns exec "$ns1" sysctl -q net.ipv4.tcp_fastopen=2
 	ip netns exec "$ns2" sysctl -q net.ipv4.tcp_fastopen=1

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 05/14] selftests: mptcp: diag: skip listen tests if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (3 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 04/14] selftests: mptcp: connect: skip TFO " Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 06/14] selftests: mptcp: diag: skip inuse " Matthieu Baerts
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the listen diag dump support introduced by
commit 4fa39b701ce9 ("mptcp: listen diag dump support").

It looks like there is no good pre-check to do here, i.e. dedicated
function available in kallsyms. Instead, we try to get info if nothing
is returned, the test is marked as skipped.

That's not ideal because something could be wrong with the feature and
instead of reporting an error, the test could be marked as skipped. If
we know in advanced that the feature is supposed to be supported, the
tester can set SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var to 1: in
this case the test will report an error instead of marking the test as
skipped if nothing is returned.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: f2ae0fa68e28 ("selftests/mptcp: add diag listen tests")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/diag.sh | 42 +++++++++++++------------------
 1 file changed, 17 insertions(+), 25 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/diag.sh b/tools/testing/selftests/net/mptcp/diag.sh
index 4eacdb1ab962..4a6165389b74 100755
--- a/tools/testing/selftests/net/mptcp/diag.sh
+++ b/tools/testing/selftests/net/mptcp/diag.sh
@@ -55,16 +55,20 @@ __chk_nr()
 {
 	local command="$1"
 	local expected=$2
-	local msg nr
+	local msg="$3"
+	local skip="${4:-SKIP}"
+	local nr
 
-	shift 2
-	msg=$*
 	nr=$(eval $command)
 
 	printf "%-50s" "$msg"
 	if [ $nr != $expected ]; then
-		echo "[ fail ] expected $expected found $nr"
-		ret=$test_cnt
+		if [ $nr = "$skip" ] && ! mptcp_lib_expect_all_features; then
+			echo "[ skip ] Feature probably not supported"
+		else
+			echo "[ fail ] expected $expected found $nr"
+			ret=$test_cnt
+		fi
 	else
 		echo "[  ok  ]"
 	fi
@@ -76,12 +80,12 @@ __chk_msk_nr()
 	local condition=$1
 	shift 1
 
-	__chk_nr "ss -inmHMN $ns | $condition" $*
+	__chk_nr "ss -inmHMN $ns | $condition" "$@"
 }
 
 chk_msk_nr()
 {
-	__chk_msk_nr "grep -c token:" $*
+	__chk_msk_nr "grep -c token:" "$@"
 }
 
 wait_msk_nr()
@@ -119,37 +123,26 @@ wait_msk_nr()
 
 chk_msk_fallback_nr()
 {
-		__chk_msk_nr "grep -c fallback" $*
+	__chk_msk_nr "grep -c fallback" "$@"
 }
 
 chk_msk_remote_key_nr()
 {
-		__chk_msk_nr "grep -c remote_key" $*
+	__chk_msk_nr "grep -c remote_key" "$@"
 }
 
 __chk_listen()
 {
 	local filter="$1"
 	local expected=$2
+	local msg="$3"
 
-	shift 2
-	msg=$*
-
-	nr=$(ss -N $ns -Ml "$filter" | grep -c LISTEN)
-	printf "%-50s" "$msg"
-
-	if [ $nr != $expected ]; then
-		echo "[ fail ] expected $expected found $nr"
-		ret=$test_cnt
-	else
-		echo "[  ok  ]"
-	fi
+	__chk_nr "ss -N $ns -Ml '$filter' | grep -c LISTEN" "$expected" "$msg" 0
 }
 
 chk_msk_listen()
 {
 	lport=$1
-	local msg="check for listen socket"
 
 	# destination port search should always return empty list
 	__chk_listen "dport $lport" 0 "listen match for dport $lport"
@@ -167,10 +160,9 @@ chk_msk_listen()
 chk_msk_inuse()
 {
 	local expected=$1
+	local msg="$2"
 	local listen_nr
 
-	shift 1
-
 	listen_nr=$(ss -N "${ns}" -Ml | grep -c LISTEN)
 	expected=$((expected + listen_nr))
 
@@ -181,7 +173,7 @@ chk_msk_inuse()
 		sleep 0.1
 	done
 
-	__chk_nr get_msk_inuse $expected $*
+	__chk_nr get_msk_inuse $expected "$msg"
 }
 
 # $1: ns, $2: port

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 06/14] selftests: mptcp: diag: skip inuse tests if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (4 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 05/14] selftests: mptcp: diag: skip listen " Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 07/14] selftests: mptcp: pm nl: remove hardcoded default limits Matthieu Baerts
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the reporting of the MPTCP sockets being used, introduced
by commit c558246ee73e ("mptcp: add statistics for mptcp socket in use").

Similar to the parent commit, it looks like there is no good pre-check
to do here, i.e. dedicated function available in kallsyms. Instead, we
try to get info and if nothing is returned, the test is marked as
skipped.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: e04a30f78809 ("selftest: mptcp: add test for mptcp socket in use")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/diag.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/diag.sh b/tools/testing/selftests/net/mptcp/diag.sh
index 4a6165389b74..fa9e09ad97d9 100755
--- a/tools/testing/selftests/net/mptcp/diag.sh
+++ b/tools/testing/selftests/net/mptcp/diag.sh
@@ -173,7 +173,7 @@ chk_msk_inuse()
 		sleep 0.1
 	done
 
-	__chk_nr get_msk_inuse $expected "$msg"
+	__chk_nr get_msk_inuse $expected "$msg" 0
 }
 
 # $1: ns, $2: port

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 07/14] selftests: mptcp: pm nl: remove hardcoded default limits
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (5 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 06/14] selftests: mptcp: diag: skip inuse " Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 08/14] selftests: mptcp: pm nl: skip fullmesh flag checks if not supported Matthieu Baerts
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the checks of the default limits returned by the MPTCP
in-kernel path-manager. The default values have been modified by commit
72bcbc46a5c3 ("mptcp: increase default max additional subflows to 2").
Instead of comparing with hardcoded values, we can get the default one
and compare with them.

Note that if we expect to have the latest version, we continue to check
the hardcoded values to avoid unexpected behaviour changes.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: eedbc685321b ("selftests: add PM netlink functional tests")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/pm_netlink.sh | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/pm_netlink.sh b/tools/testing/selftests/net/mptcp/pm_netlink.sh
index 32f7533e0919..664cafc60705 100755
--- a/tools/testing/selftests/net/mptcp/pm_netlink.sh
+++ b/tools/testing/selftests/net/mptcp/pm_netlink.sh
@@ -73,8 +73,12 @@ check()
 }
 
 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list"
-check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
+
+default_limits="$(ip netns exec $ns1 ./pm_nl_ctl limits)"
+if mptcp_lib_expect_all_features; then
+	check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
 subflows 2" "defaults limits"
+fi
 
 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo
@@ -121,12 +125,10 @@ ip netns exec $ns1 ./pm_nl_ctl flush
 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs"
 
 ip netns exec $ns1 ./pm_nl_ctl limits 9 1
-check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
-subflows 2" "rcv addrs above hard limit"
+check "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "rcv addrs above hard limit"
 
 ip netns exec $ns1 ./pm_nl_ctl limits 1 9
-check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
-subflows 2" "subflows above hard limit"
+check "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "subflows above hard limit"
 
 ip netns exec $ns1 ./pm_nl_ctl limits 8 8
 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 08/14] selftests: mptcp: pm nl: skip fullmesh flag checks if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (6 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 07/14] selftests: mptcp: pm nl: remove hardcoded default limits Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 09/14] selftests: mptcp: sockopt: relax expected returned size Matthieu Baerts
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the fullmesh flag that can be given to the MPTCP
in-kernel path-manager and introduced in commit 2843ff6f36db ("mptcp:
remote addresses fullmesh").

If the flag is not visible in the dump after having set it, we don't
check the content. Note that if we expect to have this feature and
SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var is set to 1, we always
check the content to avoid regressions.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 6da1dfdd037e ("selftests: mptcp: add set_flags tests in pm_netlink.sh")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/pm_netlink.sh | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/pm_netlink.sh b/tools/testing/selftests/net/mptcp/pm_netlink.sh
index 664cafc60705..d02e0d63a8f9 100755
--- a/tools/testing/selftests/net/mptcp/pm_netlink.sh
+++ b/tools/testing/selftests/net/mptcp/pm_netlink.sh
@@ -178,14 +178,19 @@ subflow,backup 10.0.1.1" "set flags (backup)"
 ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup
 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
 subflow 10.0.1.1" "          (nobackup)"
+
+# fullmesh support has been added later
 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh
-check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+if ip netns exec $ns1 ./pm_nl_ctl dump | grep -q "fullmesh" ||
+   mptcp_lib_expect_all_features; then
+	check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
 subflow,fullmesh 10.0.1.1" "          (fullmesh)"
-ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh
-check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+	ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh
+	check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
 subflow 10.0.1.1" "          (nofullmesh)"
-ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh
-check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+	ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh
+	check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
 subflow,backup,fullmesh 10.0.1.1" "          (backup,fullmesh)"
+fi
 
 exit $ret

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 09/14] selftests: mptcp: sockopt: relax expected returned size
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (7 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 08/14] selftests: mptcp: pm nl: skip fullmesh flag checks if not supported Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 10/14] selftests: mptcp: sockopt: skip getsockopt checks if not supported Matthieu Baerts
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the getsockopt(SOL_MPTCP) to get info about the MPTCP
connections introduced by commit 55c42fa7fa33 ("mptcp: add MPTCP_INFO
getsockopt") and the following ones.

We cannot guess in advance which sizes the kernel will returned: older
kernel can returned smaller sizes, e.g. recently the tcp_info structure
has been modified in commit 71fc704768f6 ("tcp: add rcv_wnd and
plb_rehash to TCP_INFO") where a new field has been added.

The userspace can also expect a smaller size if it is compiled with old
uAPI kernel headers.

So for these sizes, we can only check if they are above a certain
threshold, 0 for the moment. We can also only compared sizes with the
ones set by the kernel.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: ce9979129a0b ("selftests: mptcp: add mptcp getsockopt test cases")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
index ae61f39556ca..b35148edbf02 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
@@ -87,6 +87,10 @@ struct so_state {
 	uint64_t tcpi_rcv_delta;
 };
 
+#ifndef MIN
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
 static void die_perror(const char *msg)
 {
 	perror(msg);
@@ -349,13 +353,14 @@ static void do_getsockopt_tcp_info(struct so_state *s, int fd, size_t r, size_t
 			xerror("getsockopt MPTCP_TCPINFO (tries %d, %m)");
 
 		assert(olen <= sizeof(ti));
-		assert(ti.d.size_user == ti.d.size_kernel);
-		assert(ti.d.size_user == sizeof(struct tcp_info));
+		assert(ti.d.size_kernel > 0);
+		assert(ti.d.size_user ==
+		       MIN(ti.d.size_kernel, sizeof(struct tcp_info)));
 		assert(ti.d.num_subflows == 1);
 
 		assert(olen > (socklen_t)sizeof(struct mptcp_subflow_data));
 		olen -= sizeof(struct mptcp_subflow_data);
-		assert(olen == sizeof(struct tcp_info));
+		assert(olen == ti.d.size_user);
 
 		if (ti.ti[0].tcpi_bytes_sent == w &&
 		    ti.ti[0].tcpi_bytes_received == r)
@@ -401,13 +406,14 @@ static void do_getsockopt_subflow_addrs(int fd)
 		die_perror("getsockopt MPTCP_SUBFLOW_ADDRS");
 
 	assert(olen <= sizeof(addrs));
-	assert(addrs.d.size_user == addrs.d.size_kernel);
-	assert(addrs.d.size_user == sizeof(struct mptcp_subflow_addrs));
+	assert(addrs.d.size_kernel > 0);
+	assert(addrs.d.size_user ==
+	       MIN(addrs.d.size_kernel, sizeof(struct mptcp_subflow_addrs)));
 	assert(addrs.d.num_subflows == 1);
 
 	assert(olen > (socklen_t)sizeof(struct mptcp_subflow_data));
 	olen -= sizeof(struct mptcp_subflow_data);
-	assert(olen == sizeof(struct mptcp_subflow_addrs));
+	assert(olen == addrs.d.size_user);
 
 	llen = sizeof(local);
 	ret = getsockname(fd, (struct sockaddr *)&local, &llen);

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 10/14] selftests: mptcp: sockopt: skip getsockopt checks if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (8 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 09/14] selftests: mptcp: sockopt: relax expected returned size Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 11/14] selftests: mptcp: sockopt: skip TCP_INQ " Matthieu Baerts
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the getsockopt(SOL_MPTCP) to get info about the MPTCP
connections introduced by commit 55c42fa7fa33 ("mptcp: add MPTCP_INFO
getsockopt") and the following ones.

It is possible to look for "mptcp_diag_fill_info" in kallsyms because
it is introduced by the mentioned feature. So we can know in advance if
the feature is supported and skip the sub-test if not.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: ce9979129a0b ("selftests: mptcp: add mptcp getsockopt test cases")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
index ff5adbb9c7f2..1d4ae8792227 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
@@ -87,6 +87,7 @@ cleanup()
 }
 
 mptcp_lib_check_mptcp
+mptcp_lib_check_kallsyms
 
 ip -Version > /dev/null 2>&1
 if [ $? -ne 0 ];then
@@ -253,6 +254,11 @@ do_mptcp_sockopt_tests()
 {
 	local lret=0
 
+	if ! mptcp_lib_kallsyms_has "mptcp_diag_fill_info$"; then
+		echo "INFO: MPTCP sockopt not supported: SKIP"
+		return
+	fi
+
 	ip netns exec "$ns_sbox" ./mptcp_sockopt
 	lret=$?
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 11/14] selftests: mptcp: sockopt: skip TCP_INQ checks if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (9 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 10/14] selftests: mptcp: sockopt: skip getsockopt checks if not supported Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 12/14] selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable Matthieu Baerts
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is TCP_INQ cmsg support introduced in commit 2c9e77659a0c
("mptcp: add TCP_INQ cmsg support").

It is possible to look for "mptcp_ioctl" in kallsyms because it was
needed to introduce the mentioned feature. We can skip these tests and
not set TCPINQ option if the feature is not supported.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 5cbd886ce2a9 ("selftests: mptcp: add TCP_INQ support")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
index 1d4ae8792227..f295a371ff14 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
@@ -187,9 +187,14 @@ do_transfer()
 		local_addr="0.0.0.0"
 	fi
 
+	cmsg="TIMESTAMPNS"
+	if mptcp_lib_kallsyms_has "mptcp_ioctl$"; then
+		cmsg+=",TCPINQ"
+	fi
+
 	timeout ${timeout_test} \
 		ip netns exec ${listener_ns} \
-			$mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c TIMESTAMPNS,TCPINQ \
+			$mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c "${cmsg}" \
 				${local_addr} < "$sin" > "$sout" &
 	local spid=$!
 
@@ -197,7 +202,7 @@ do_transfer()
 
 	timeout ${timeout_test} \
 		ip netns exec ${connector_ns} \
-			$mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c TIMESTAMPNS,TCPINQ \
+			$mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c "${cmsg}" \
 				$connect_addr < "$cin" > "$cout" &
 
 	local cpid=$!
@@ -313,6 +318,11 @@ do_tcpinq_tests()
 {
 	local lret=0
 
+	if ! mptcp_lib_kallsyms_has "mptcp_ioctl$"; then
+		echo "INFO: TCP_INQ not supported: SKIP"
+		return
+	fi
+
 	local args
 	for args in "-t tcp" "-r tcp"; do
 		do_tcpinq_test $args

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 12/14] selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (10 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 11/14] selftests: mptcp: sockopt: skip TCP_INQ " Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 13/14] selftests: mptcp: userspace pm: skip if not supported Matthieu Baerts
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

When a required tool is missing, the return code 4 (SKIP) should be
returned instead of 1 (FAIL).

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 259a834fadda ("selftests: mptcp: functional tests for the userspace PM type")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/userspace_pm.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 8092399d911f..192ab818f292 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -8,7 +8,7 @@ mptcp_lib_check_mptcp
 ip -Version > /dev/null 2>&1
 if [ $? -ne 0 ];then
 	echo "SKIP: Cannot not run test without ip tool"
-	exit 1
+	exit ${KSFT_SKIP}
 fi
 
 ANNOUNCED=6        # MPTCP_EVENT_ANNOUNCED

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 13/14] selftests: mptcp: userspace pm: skip if not supported
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (11 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 12/14] selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-08 16:38 ` [PATCH net 14/14] selftests: mptcp: userspace pm: skip PM listener events tests if unavailable Matthieu Baerts
  2023-06-10  7:12 ` [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) patchwork-bot+netdevbpf
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the MPTCP Userspace PM introduced by commit 4638de5aefe5
("mptcp: handle local addrs announced by userspace PMs").

We can skip all these tests if the feature is not supported simply by
looking for the MPTCP pm_type's sysctl knob.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 259a834fadda ("selftests: mptcp: functional tests for the userspace PM type")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/userspace_pm.sh | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 192ab818f292..38a1d34f7b4d 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -5,6 +5,11 @@
 
 mptcp_lib_check_mptcp
 
+if ! mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
+	echo "userspace pm tests are not supported by the kernel: SKIP"
+	exit ${KSFT_SKIP}
+fi
+
 ip -Version > /dev/null 2>&1
 if [ $? -ne 0 ];then
 	echo "SKIP: Cannot not run test without ip tool"

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net 14/14] selftests: mptcp: userspace pm: skip PM listener events tests if unavailable
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (12 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 13/14] selftests: mptcp: userspace pm: skip if not supported Matthieu Baerts
@ 2023-06-08 16:38 ` Matthieu Baerts
  2023-06-10  7:12 ` [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) patchwork-bot+netdevbpf
  14 siblings, 0 replies; 16+ messages in thread
From: Matthieu Baerts @ 2023-06-08 16:38 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Davide Caratti,
	Dmytro Shytyi, Menglong Dong, Geliang Tang, Kishen Maloor
  Cc: Florian Westphal, netdev, linux-kselftest, linux-kernel,
	Matthieu Baerts, stable

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the new listener events linked to the path-manager
introduced by commit f8c9dfbd875b ("mptcp: add pm listener events").

It is possible to look for "mptcp_event_pm_listener" in kallsyms to know
in advance if the kernel supports this feature and skip these sub-tests
if the feature is not supported.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 6c73008aa301 ("selftests: mptcp: listener test for userspace PM")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/userspace_pm.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 38a1d34f7b4d..98d9e4d2d3fc 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -4,6 +4,7 @@
 . "$(dirname "${0}")/mptcp_lib.sh"
 
 mptcp_lib_check_mptcp
+mptcp_lib_check_kallsyms
 
 if ! mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
 	echo "userspace pm tests are not supported by the kernel: SKIP"
@@ -914,6 +915,11 @@ test_listener()
 {
 	print_title "Listener tests"
 
+	if ! mptcp_lib_kallsyms_has "mptcp_event_pm_listener$"; then
+		stdbuf -o0 -e0 printf "LISTENER events                                            \t[SKIP] Not supported\n"
+		return
+	fi
+
 	# Capture events on the network namespace running the client
 	:>$client_evts
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2)
  2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
                   ` (13 preceding siblings ...)
  2023-06-08 16:38 ` [PATCH net 14/14] selftests: mptcp: userspace pm: skip PM listener events tests if unavailable Matthieu Baerts
@ 2023-06-10  7:12 ` patchwork-bot+netdevbpf
  14 siblings, 0 replies; 16+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-06-10  7:12 UTC (permalink / raw)
  To: Matthieu Baerts
  Cc: mptcp, martineau, davem, edumazet, kuba, pabeni, shuah, dcaratti,
	dmytro, imagedong, geliang.tang, kishen.maloor, fw, netdev,
	linux-kselftest, linux-kernel, stable

Hello:

This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Thu, 08 Jun 2023 18:38:42 +0200 you wrote:
> After a few years of increasing test coverage in the MPTCP selftests, we
> realised [1] the last version of the selftests is supposed to run on old
> kernels without issues.
> 
> Supporting older versions is not that easy for this MPTCP case: these
> selftests are often validating the internals by checking packets that
> are exchanged, when some MIB counters are incremented after some
> actions, how connections are getting opened and closed in some cases,
> etc. In other words, it is not limited to the socket interface between
> the userspace and the kernelspace.
> 
> [...]

Here is the summary with links:
  - [net,01/14] selftests: mptcp: lib: skip if missing symbol
    https://git.kernel.org/netdev/net/c/673004821ab9
  - [net,02/14] selftests: mptcp: connect: skip transp tests if not supported
    https://git.kernel.org/netdev/net/c/07bf49401909
  - [net,03/14] selftests: mptcp: connect: skip disconnect tests if not supported
    https://git.kernel.org/netdev/net/c/4ad39a42da2e
  - [net,04/14] selftests: mptcp: connect: skip TFO tests if not supported
    https://git.kernel.org/netdev/net/c/06b03083158e
  - [net,05/14] selftests: mptcp: diag: skip listen tests if not supported
    https://git.kernel.org/netdev/net/c/dc97251bf0b7
  - [net,06/14] selftests: mptcp: diag: skip inuse tests if not supported
    https://git.kernel.org/netdev/net/c/dc93086aff04
  - [net,07/14] selftests: mptcp: pm nl: remove hardcoded default limits
    https://git.kernel.org/netdev/net/c/2177d0b08e42
  - [net,08/14] selftests: mptcp: pm nl: skip fullmesh flag checks if not supported
    https://git.kernel.org/netdev/net/c/f3761b50b8e4
  - [net,09/14] selftests: mptcp: sockopt: relax expected returned size
    https://git.kernel.org/netdev/net/c/8dee6ca2ac1e
  - [net,10/14] selftests: mptcp: sockopt: skip getsockopt checks if not supported
    https://git.kernel.org/netdev/net/c/c6f7eccc5198
  - [net,11/14] selftests: mptcp: sockopt: skip TCP_INQ checks if not supported
    https://git.kernel.org/netdev/net/c/b631e3a4e94c
  - [net,12/14] selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable
    https://git.kernel.org/netdev/net/c/723d6b9b1233
  - [net,13/14] selftests: mptcp: userspace pm: skip if not supported
    https://git.kernel.org/netdev/net/c/f90adb033891
  - [net,14/14] selftests: mptcp: userspace pm: skip PM listener events tests if unavailable
    https://git.kernel.org/netdev/net/c/626cb7a5f6b8

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] 16+ messages in thread

end of thread, other threads:[~2023-06-10  7:12 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-08 16:38 [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 01/14] selftests: mptcp: lib: skip if missing symbol Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 02/14] selftests: mptcp: connect: skip transp tests if not supported Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 03/14] selftests: mptcp: connect: skip disconnect " Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 04/14] selftests: mptcp: connect: skip TFO " Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 05/14] selftests: mptcp: diag: skip listen " Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 06/14] selftests: mptcp: diag: skip inuse " Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 07/14] selftests: mptcp: pm nl: remove hardcoded default limits Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 08/14] selftests: mptcp: pm nl: skip fullmesh flag checks if not supported Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 09/14] selftests: mptcp: sockopt: relax expected returned size Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 10/14] selftests: mptcp: sockopt: skip getsockopt checks if not supported Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 11/14] selftests: mptcp: sockopt: skip TCP_INQ " Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 12/14] selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 13/14] selftests: mptcp: userspace pm: skip if not supported Matthieu Baerts
2023-06-08 16:38 ` [PATCH net 14/14] selftests: mptcp: userspace pm: skip PM listener events tests if unavailable Matthieu Baerts
2023-06-10  7:12 ` [PATCH net 00/14] selftests: mptcp: skip tests not supported by old kernels (part 2) 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).