From nobody Sun Jun 14 21:06:45 2026 Received: from out-180.mta1.migadu.com (out-180.mta1.migadu.com [95.215.58.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84154397342 for ; Thu, 11 Jun 2026 17:08:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197706; cv=none; b=KzEFk7OG4PRjE3S/elnXsV2iTisFZzcFkEbHZntoN09IHJYEcEGG1vndKsbe8q567ydM85jqnGZ5ViQ4sQqoNYRkrFhFH9mIH3iO1wpVvB9+J7bp7sXTdV3w8aF2WRCgKc0uLU4hXxAXj8tS88FvgoF61XxQnRKIM1oKUeDYyL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197706; c=relaxed/simple; bh=KWb2JQk5EFkysNAREoJt8zHVoaRkclnVuU3n8IGiqaw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mk7zSBENWSaNfK6TIsYEYA2kV2H7xbTmRqdWT6sxIsTVCJg0QXFW1H0gi3qm0Jk04n/25yZyIOSpJiyZB6gzwQCZwSAPUBOpQoFnbuksPN6aijIA3O6My32QX/dBrz0GuMpPZbIIRUCvLMj4KTGb0+NUv1sKJCnfF95eaH7LMcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=pxqydYMs; arc=none smtp.client-ip=95.215.58.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="pxqydYMs" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197702; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=znAyoSmtjwInbXZhUuS96a8SBg46sFtEoPBd6T7itWk=; b=pxqydYMs7tqvxNZHIbt0xa3DW1UmhfBw7UoRfDrqXdMgcGYu2EFJe/IW+S/a7OSIeEvN+p s6aU7GGN3A82qFYHQNI0JIY+SDgJcyZCZbj3ExK1Rgd7abyTixh6s/lVy3sT9p4wMyMwVj xhUPkXBOM1qARbLMy4lNQWkeUVwzy/U= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 1/9] DO-NOT-MERGE: mptcp: test IPV6=m in docker-virtme Date: Fri, 12 Jun 2026 01:07:51 +0800 Message-ID: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan This is a helper commit for maintainer review of the preceding MPTCP selftests patches that teach the test scripts to gracefully skip IPv6 subtests when the running kernel has no CONFIG_MPTCP_IPV6. Signed-off-by: Gang Yan --- tools/testing/selftests/net/mptcp/config | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selft= ests/net/mptcp/config index 59051ee2a986..616fee329e22 100644 --- a/tools/testing/selftests/net/mptcp/config +++ b/tools/testing/selftests/net/mptcp/config @@ -7,11 +7,10 @@ CONFIG_IP_MULTIPLE_TABLES=3Dy CONFIG_IP_NF_FILTER=3Dm CONFIG_IP_NF_MANGLE=3Dm CONFIG_IP_NF_TARGET_REJECT=3Dm -CONFIG_IPV6=3Dy +CONFIG_IPV6=3Dm CONFIG_IPV6_MULTIPLE_TABLES=3Dy CONFIG_KALLSYMS=3Dy CONFIG_MPTCP=3Dy -CONFIG_MPTCP_IPV6=3Dy CONFIG_NET_ACT_CSUM=3Dm CONFIG_NET_ACT_PEDIT=3Dm CONFIG_NET_CLS_ACT=3Dy @@ -34,3 +33,5 @@ CONFIG_NFT_SOCKET=3Dm CONFIG_NFT_TPROXY=3Dm CONFIG_SYN_COOKIES=3Dy CONFIG_VETH=3Dy + +CONFIG_NF_TABLES_IPV4=3Dy --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-188.mta1.migadu.com (out-188.mta1.migadu.com [95.215.58.188]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 21857427A1B for ; Thu, 11 Jun 2026 17:08:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197707; cv=none; b=fZe6Zx7acG1KDM+uFaDzMBIy6S8IuoI2fI1SgTWVIwEezo6MdipTmlLDqMY1rlOp//2pe9grn3b21htaT77Cf9YU3ZJvEAYmBPAr83j4AoXi9VRHTaw8BcRE3mEfJ1WinqK7cji206Ri99huBSgDg+H6sCO43XYN+GrTTCwS3vI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197707; c=relaxed/simple; bh=xcd7xa6cXPpHRCYhvfMhnOrAhX8u9AvdeVaWgsCdLpk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WD/6RawsjeNr8WSVGVkTPRB0pTUvGj9oFniqPnUJNPldjqsqhAqWsCCfIYQLzvj/vR76a8YuDLgmzfL5PYbfxcgp8vcMjIiosz7cxSDnpOSz5J/al7/1UPneaTDASl45ipmDzqVOmH92X7bc5QjXfB/itqJcRiuZvY0XNyqvYOA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=QF4gDVe7; arc=none smtp.client-ip=95.215.58.188 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="QF4gDVe7" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197704; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=We+Z0rOTXq18WOq+TZON9SR93h74LHv0Nktom4go488=; b=QF4gDVe7XKLbcyfQt6OTCQtyyc3cm5nas7qfUr6fn+XW2DdLzF0OaBm3ncG70KxnesYiI0 veoOS3fqj6Oow3fju+YfxYj590lThj3PI/KD2yN5vemT/UTkmP4iB28ZH3lxzjiPRpOJsP A2f0j0Hdunq7PZsdYUD69hPpl9cAa2w= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 2/9] selftests: mptcp: mptcp_lib add runtime IPv6 availability detection helper Date: Fri, 12 Jun 2026 01:07:52 +0800 Message-ID: <76fb016879fbcb5dd834efa4b3f1233016714ec4.1781196828.git.yangang@kylinos.cn> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan This patch introduce a minimal, non-fatal detection helper that subsequent patches will use to guard the v6 paths: - MPTCP_LIB_IPV6_AVAILABLE: cached flag, default 1 (optimistic). - mptcp_lib_check_ipv6(): looks for "mptcpv6_init" in /proc/kallsyms. That symbol is registered by subsys_initcall() in net/mptcp/ctrl.c only when both CONFIG_IPV6=3Dy and CONFIG_MPTCP_IPV6=3Dy, so it is a precise runtime proxy. The check is non-fatal: it only updates the cached flag and returns 0/1, letting callers pick the right degradation (skip a subtest, drop to v4-only, etc.) without forcing an exit. - mptcp_lib_is_v6_enabled(): cheap accessor wrapping the flag. No existing caller is changed. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../testing/selftests/net/mptcp/mptcp_lib.sh | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index 5ef6033775c8..3bb1c0ac8749 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -32,6 +32,7 @@ MPTCP_LIB_SUBTESTS_LAST_TS_NS=3D MPTCP_LIB_TEST_COUNTER=3D0 MPTCP_LIB_TEST_FORMAT=3D"%02u %-50s" MPTCP_LIB_IP_MPTCP=3D0 +MPTCP_LIB_IPV6_AVAILABLE=3D1 =20 # only if supported (or forced) and not disabled, see no-color.org if { [ -t 1 ] || [ "${SELFTESTS_MPTCP_LIB_COLOR_FORCE:-}" =3D "1" ]; } && @@ -178,6 +179,32 @@ mptcp_lib_check_kallsyms() { fi } =20 +# Detect whether the MPTCP IPv6 subsystem is available in the running kern= el. +# +# This is meant to be called once at script init time. It is non-fatal by +# design: instead of exiting on a missing feature, it just sets the cached +# MPTCP_LIB_IPV6_AVAILABLE flag and returns 0/1. Callers can then decide +# whether to skip a single subtest, fall back to a v4-only mode, etc. +# +# The check looks for the "mptcpv6_init" symbol in /proc/kallsyms, which is +# only present when both CONFIG_IPV6=3Dy and CONFIG_MPTCP_IPV6=3Dy. This s= ingle +# symbol gives the most accurate runtime answer. +mptcp_lib_check_ipv6() { + if ! mptcp_lib_has_file "/proc/kallsyms"; then + MPTCP_LIB_IPV6_AVAILABLE=3D0 + return 1 + fi + + if ! grep -q " mptcpv6_init$" /proc/kallsyms; then + MPTCP_LIB_IPV6_AVAILABLE=3D0 + mptcp_lib_pr_skip "MPTCP IPv6 support is not available" + return 1 + fi + + MPTCP_LIB_IPV6_AVAILABLE=3D1 + return 0 +} + # Internal: use mptcp_lib_kallsyms_has() instead __mptcp_lib_kallsyms_has() { local sym=3D"${1}" @@ -398,6 +425,12 @@ mptcp_lib_is_v6() { [ -z "${1##*:*}" ] } =20 +# Returns 0 (true) if the kernel has MPTCP IPv6 support, 1 (false) otherwi= se. +# Cached after the first call to mptcp_lib_check_ipv6(). +mptcp_lib_is_v6_enabled() { + [ "${MPTCP_LIB_IPV6_AVAILABLE}" =3D "1" ] +} + mptcp_lib_nstat_init() { local ns=3D"${1}" =20 --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8AA943E9C4 for ; Thu, 11 Jun 2026 17:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197709; cv=none; b=TtoHQBKIEaIKU3lXMHZ3GJUWABEehNGk9206yMO0DX7ngg8u9pCrc45ThPNcKP6lTS9Fx+kPkWrZWFXPZ7FJbZmkH5mJ+0iDUhS0bjkwuaZBdwvq1n8HO4gugsbUtp6638Uf7W49LToPHR9T1y2qxm3zgyXZuoWVyNmmr3/H0IA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197709; c=relaxed/simple; bh=I9c1mfUknIX0WCm2b/fDww+oELlKfiR8RrnfRjXc1oM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gtjiGu8w7Zvhzlp4lLuez6gd9Kmx2A84UGQm5uKaJ2sMa+yZt5piQniCMLYwIkQ5L4P5HS7iwOfmf5JtUDs3cKs8zo9Yo5cajtdHVL9znLe95uIpt/mhA6zUQQ4kXowM2X+YYR3bQ5E2v9JMblHgbedErBaqgTWgwnViC5VQZJE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=cXQAebJV; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="cXQAebJV" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197705; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wkGwGkhf48ODkoYY7Is1VdayqvPpE1l5TX8BJN565+A=; b=cXQAebJV+CQUpki5jQCHlg4kZ6A3cKPAtUbAt5YvuVuh16i70vxMKzGViUCrQkMtjiOxWz zRWLtp+N6hylY4G/tLZIE2p1OTtpb6QW4/wk1ZeZdLiMiDwIRTHfKM83J8YyQQdOVjHmPo 5njONTziez05tmMIs6e9NEao0e9oGv4= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 3/9] selftests: mptcp: mptcp_connect.sh degrades to v4-only when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:53 +0800 Message-ID: <3029e2f0cc3bf5b54e405928c9f71e465ff3ca30.1781196828.git.yangang@kylinos.cn> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan Make the IPv6 path optional at runtime: - Right after the existing mptcp_lib_check_* calls, query the new mptcp_lib_check_ipv6() helper. If the kernel does not support MPTCP/IPv6 and the user did not already pass -4 on the command line, transparently flip the internal ${ipv6} flag to false and print one informational line so the user knows v4-only mode kicked in. - Guard every "ip -6 addr add", "ip -6 route add" and the v6 forwarding sysctl with "if $ipv6; then ... fi". The -4 command-line option (handled earlier in the same script) keeps priority: when the user explicitly asks for v4-only mode the new check is a no-op. In a fully featured kernel ${ipv6} stays true and the script behaves exactly as before. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../selftests/net/mptcp/mptcp_connect.sh | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index 7a2a851fa0ad..0e5690d6f68c 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -149,6 +149,14 @@ mptcp_lib_check_mptcp mptcp_lib_check_kallsyms mptcp_lib_check_tools ip tc =20 +# If MPTCP IPv6 is not available in the running kernel, transparently +# downgrade to v4-only mode (unless the user already passed -4). +# This keeps v4 tests running in IPV6=3Dm / MPTCP_IPV6=3Dn kernels. +if ! mptcp_lib_check_ipv6 && ${ipv6}; then + ipv6=3Dfalse + mptcp_lib_pr_info "MPTCP IPv6 not available, running IPv4-only tests" +fi + sin=3D$(mktemp) sout=3D$(mktemp) cin=3D$(mktemp) @@ -169,41 +177,51 @@ ip link add ns2eth3 netns "$ns2" type veth peer name = ns3eth2 netns "$ns3" ip link add ns3eth4 netns "$ns3" type veth peer name ns4eth3 netns "$ns4" =20 ip -net "$ns1" addr add 10.0.1.1/24 dev ns1eth2 -ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth2 nodad =20 ip -net "$ns1" link set ns1eth2 up ip -net "$ns1" route add default via 10.0.1.2 -ip -net "$ns1" route add default via dead:beef:1::2 =20 ip -net "$ns2" addr add 10.0.1.2/24 dev ns2eth1 -ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad ip -net "$ns2" link set ns2eth1 up =20 ip -net "$ns2" addr add 10.0.2.1/24 dev ns2eth3 -ip -net "$ns2" addr add dead:beef:2::1/64 dev ns2eth3 nodad ip -net "$ns2" link set ns2eth3 up ip -net "$ns2" route add default via 10.0.2.2 -ip -net "$ns2" route add default via dead:beef:2::2 ip netns exec "$ns2" sysctl -q net.ipv4.ip_forward=3D1 -ip netns exec "$ns2" sysctl -q net.ipv6.conf.all.forwarding=3D1 =20 ip -net "$ns3" addr add 10.0.2.2/24 dev ns3eth2 -ip -net "$ns3" addr add dead:beef:2::2/64 dev ns3eth2 nodad ip -net "$ns3" link set ns3eth2 up =20 ip -net "$ns3" addr add 10.0.3.2/24 dev ns3eth4 -ip -net "$ns3" addr add dead:beef:3::2/64 dev ns3eth4 nodad ip -net "$ns3" link set ns3eth4 up ip -net "$ns3" route add default via 10.0.2.1 -ip -net "$ns3" route add default via dead:beef:2::1 ip netns exec "$ns3" sysctl -q net.ipv4.ip_forward=3D1 -ip netns exec "$ns3" sysctl -q net.ipv6.conf.all.forwarding=3D1 =20 ip -net "$ns4" addr add 10.0.3.1/24 dev ns4eth3 -ip -net "$ns4" addr add dead:beef:3::1/64 dev ns4eth3 nodad ip -net "$ns4" link set ns4eth3 up ip -net "$ns4" route add default via 10.0.3.2 -ip -net "$ns4" route add default via dead:beef:3::2 + +# IPv6 topology: only configured if MPTCP IPv6 is supported by the +# running kernel (CONFIG_MPTCP_IPV6=3Dy). On a kernel without it, "ip -6 +# addr add" and the v6 forwarding sysctl would fail and abort the +# script, taking the v4 tests down with them. +if $ipv6; then + ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth2 nodad + ip -net "$ns1" route add default via dead:beef:1::2 + + ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad + ip -net "$ns2" addr add dead:beef:2::1/64 dev ns2eth3 nodad + ip -net "$ns2" route add default via dead:beef:2::2 + ip netns exec "$ns2" sysctl -q net.ipv6.conf.all.forwarding=3D1 + + ip -net "$ns3" addr add dead:beef:2::2/64 dev ns3eth2 nodad + ip -net "$ns3" addr add dead:beef:3::2/64 dev ns3eth4 nodad + ip -net "$ns3" route add default via dead:beef:2::1 + ip netns exec "$ns3" sysctl -q net.ipv6.conf.all.forwarding=3D1 + + ip -net "$ns4" addr add dead:beef:3::1/64 dev ns4eth3 nodad + ip -net "$ns4" route add default via dead:beef:3::2 +fi =20 if $checksum; then for i in "$ns1" "$ns2" "$ns3" "$ns4";do --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-173.mta1.migadu.com (out-173.mta1.migadu.com [95.215.58.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60BC733DEE9 for ; Thu, 11 Jun 2026 17:08:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197710; cv=none; b=ZEaGivANFGs78LxLpXYgVjmSlp7mCQZLzIzOwBxpkv07K7qk/OUoUjhlb7GkJc3Pbsz9GUAc0K2p1mYJDnpjZtMLfmDgIRHbeHGbVCkobYgoX/GcdA32EpiF0aoCfOSsy/Vva5V7yTlMiUAG+DAtPUMllfEgbBNBB9HlFu6YQGg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197710; c=relaxed/simple; bh=QYhjw/BbutWjzo0+pEM7YYnL4IWZRv52hANYJCpWPpw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iyrWQLnExOBxs/vLy44h4vX4jD+BhhIf3B0SBEpIqY7FZsPQ6/jXsBBi7+C0yiE72YGMdONzeZrCM1/0jN9FSUokUyjrwbcoB/VzCDm6UkJEOKMyNi7jQV57c9ja6uOQGf+ouNQ0fYPQnbngPfC6+SQ+kq0ViBbPWs7DQ0uzWDs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=DUO+LHsP; arc=none smtp.client-ip=95.215.58.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="DUO+LHsP" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197707; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qKdLzQbqeINFajb+iibVD6DQwWf+FO44jmisQXV3r4E=; b=DUO+LHsPoCdBWF1uh+wU239Ydx8ded4oxZwcQmyT3h6ty6OzTIi425Z9KRCOQkL4eY/f+g O4I4tQVySH4My7NS8IuQYY1YjcFovMJPGpdzzmA8gBWqBqUdr2yNOCNWsa7D21BNe0qOVg EC9g/xbeWhrVRR77svhSPoKRDovWhQQ= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 4/9] selftests: mptcp: mptcp_connect.sh don't fail because of nft rules in IPV6-less kernel Date: Fri, 12 Jun 2026 01:07:54 +0800 Message-ID: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan run_test_transparent() loads an nft "table inet mangle" ruleset to tproxy matching traffic to the listener. "table inet" requires CONFIG_NF_TABLES_IPV6, which in turn depends on CONFIG_IPV6=3Dy. In a kernel with full MPTCP IPv6 support, mptcp_lib_is_v6_enabled returns true and the original CI hard-fail behaviour is preserved (this is what makes a real "nft is broken on a full kernel" bug visible to EXPECT_ALL_FEATURES CI). In a CONFIG_IPV6=3Dm kernel the test is reported as a SKIP and mptcp_connect.sh continues with the rest of its v4 tests. Signed-off-by: Gang Yan --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index 0e5690d6f68c..9f93924c5d91 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -714,7 +714,11 @@ table inet mangle { EOF then mptcp_lib_pr_skip "$msg, could not load nft ruleset" - mptcp_lib_fail_if_expected_feature "nft rules" + if mptcp_lib_is_v6_enabled; then + mptcp_lib_fail_if_expected_feature "nft rules" + else + mptcp_lib_pr_info "nft inet table needs CONFIG_IPV6=3Dy" + fi mptcp_lib_result_skip "${TEST_GROUP}" return fi --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-186.mta1.migadu.com (out-186.mta1.migadu.com [95.215.58.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEC9B397342 for ; Thu, 11 Jun 2026 17:08:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.186 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197712; cv=none; b=QSIHSxAb6nn+kPwNNx0l6HaZcxMEvDrszHI+8UQjk3nH5hjsjahFmDexC32OUN70CBWkErM4/Uy/Ofh1gc7Ry+B9XVWuMQxBC73xLlGm92nbJUfUa1XY3q1Wx2c0XW16Le7nghMAO/xjI+JucDQQKpZ3AWdlfADaTxu3q4z5jWQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197712; c=relaxed/simple; bh=WST+T0w/BmiA+n8upGwfEYHZpuNJgt98ttaXlxltf8w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JXGZ9Kjba3rqilvrIlJ2QSLAnOnyBUKlQkMlLng105eu7K3rL/4QWwLBIVwKWLxdJa0Ry3UZhsZnQ8GBv/3YHBCdfSmuu4jvBi8UITEqRVyT3oriP2qmVqoYvLhjkSGKBfvJVC2e7MbhGVlDhRXLHEyLGZecQuqQ4M+JxjW8Kx4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=uCC3MLhQ; arc=none smtp.client-ip=95.215.58.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="uCC3MLhQ" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197709; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1hBThxotl56PXwTPbk3pHl7HOMAqMgO3V4fHa5FMhwA=; b=uCC3MLhQcItvnbddMC5w+mzsMzT5v8CHOQfZzzQopGDKRWIruTY/p8gwXTh3VkhP4NfvYk pMkfHWKp8yQHOvgZzEcp/KFLhptz3zEidT1HsivIyPW/flbQTn3BPVQliSrBIRL1iSdVzi ybIIFCaNQUoFxoYmnv1rh56qs1G4RIA= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 5/9] selftests: mptcp: mptcp_sockopt.sh skips v6 paths when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:55 +0800 Message-ID: <34b98971ae0410a819f3a9ebb996872150ac2aa3.1781196828.git.yangang@kylinos.cn> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan Confine all of ipv6-related commands to mptcp_lib_is_v6_enabled: - call mptcp_lib_check_ipv6() once after the existing init-time mptcp_lib_check_*() calls to populate the cached flag; - guard the ip6tables loop in add_mark_rules() and every v6 "ip addr add" / mptcp_lib_pm_nl_add_endpoint() in init(); - in do_mptcp_sockopt_tests(), do_tcpinq_tests() and the top-level run_tests dispatcher, emit a SKIP TAP line for each v6 subtest instead of running it. v4 transfers, v4 mark checks and the AF_INET sockopt / TCP_INQ tests are untouched. In a full-featured kernel the new guards always take their v6 branch and the test set runs as before. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../selftests/net/mptcp/mptcp_sockopt.sh | 81 ++++++++++++++----- 1 file changed, 61 insertions(+), 20 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index e850a87429b6..63f1ec4604ce 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -50,7 +50,7 @@ add_mark_rules() local m=3D$2 =20 local t - for t in ${iptables} ${ip6tables}; do + for t in ${iptables}; do # just to debug: check we have multiple subflows connection requests ip netns exec $ns $t -A OUTPUT -p tcp --syn -m mark --mark $m -j ACCEPT =20 @@ -60,6 +60,21 @@ add_mark_rules() ip netns exec $ns $t -A OUTPUT -p tcp -m mark --mark $m -j ACCEPT ip netns exec $ns $t -A OUTPUT -p tcp -m mark --mark 0 -j DROP done + # ip6tables rules require MPTCP IPv6 support in the kernel, otherwise + # ip6tables will reject them (or, in some environments, the binary itself + # may behave oddly without IPv6 available). + if mptcp_lib_is_v6_enabled; then + for t in ${ip6tables}; do + # just to debug: check we have multiple subflows connection requests + ip netns exec $ns $t -A OUTPUT -p tcp --syn -m mark --mark $m -j ACCEPT + + # RST packets might be handled by a internal dummy socket + ip netns exec $ns $t -A OUTPUT -p tcp --tcp-flags RST RST -m mark --mar= k 0 -j ACCEPT + + ip netns exec $ns $t -A OUTPUT -p tcp -m mark --mark $m -j ACCEPT + ip netns exec $ns $t -A OUTPUT -p tcp -m mark --mark 0 -j DROP + done + fi } =20 init() @@ -70,21 +85,29 @@ init() for i in $(seq 1 4); do ip link add ns1eth$i netns "$ns1" type veth peer name ns2eth$i netns "$n= s2" ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i - ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad + if mptcp_lib_is_v6_enabled; then + ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad + fi ip -net "$ns1" link set ns1eth$i up =20 ip -net "$ns2" addr add 10.0.$i.2/24 dev ns2eth$i - ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad + if mptcp_lib_is_v6_enabled; then + ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad + fi ip -net "$ns2" link set ns2eth$i up =20 # let $ns2 reach any $ns1 address from any interface ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i =20 mptcp_lib_pm_nl_add_endpoint "${ns1}" "10.0.${i}.1" flags signal - mptcp_lib_pm_nl_add_endpoint "${ns1}" "dead:beef:${i}::1" flags signal + if mptcp_lib_is_v6_enabled; then + mptcp_lib_pm_nl_add_endpoint "${ns1}" "dead:beef:${i}::1" flags signal + fi =20 mptcp_lib_pm_nl_add_endpoint "${ns2}" "10.0.${i}.2" flags signal - mptcp_lib_pm_nl_add_endpoint "${ns2}" "dead:beef:${i}::2" flags signal + if mptcp_lib_is_v6_enabled; then + mptcp_lib_pm_nl_add_endpoint "${ns2}" "dead:beef:${i}::2" flags signal + fi done =20 mptcp_lib_pm_nl_set_limits "${ns1}" 8 8 @@ -106,6 +129,7 @@ cleanup() mptcp_lib_check_mptcp mptcp_lib_check_kallsyms mptcp_lib_check_tools ip "${iptables}" "${ip6tables}" +mptcp_lib_check_ipv6 =20 check_mark() { @@ -274,18 +298,24 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "sockopt v4" =20 - ip netns exec "$ns_sbox" ./mptcp_sockopt -6 - lret=3D$? + if ! mptcp_lib_is_v6_enabled; then + print_title "SOL_MPTCP sockopt v6" + mptcp_lib_pr_skip "MPTCP IPv6 not available" + mptcp_lib_result_skip "sockopt v6" + else + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 + lret=3D$? =20 - print_title "SOL_MPTCP sockopt v6" - if [ $lret -ne 0 ]; then - mptcp_lib_pr_fail - mptcp_lib_result_fail "sockopt v6" - ret=3D$lret - return + print_title "SOL_MPTCP sockopt v6" + if [ $lret -ne 0 ]; then + mptcp_lib_pr_fail + mptcp_lib_result_fail "sockopt v6" + ret=3D$lret + return + fi + mptcp_lib_pr_ok + mptcp_lib_result_pass "sockopt v6" fi - mptcp_lib_pr_ok - mptcp_lib_result_pass "sockopt v6" } =20 run_tests() @@ -339,10 +369,16 @@ do_tcpinq_tests() if [ $lret -ne 0 ] ; then return $lret fi - do_tcpinq_test -6 $args - lret=3D$? - if [ $lret -ne 0 ] ; then - return $lret + if mptcp_lib_is_v6_enabled; then + do_tcpinq_test -6 $args + lret=3D$? + if [ $lret -ne 0 ] ; then + return $lret + fi + else + print_title "TCP_INQ cmsg/ioctl -6 $args" + mptcp_lib_pr_skip "MPTCP IPv6 not available" + mptcp_lib_result_skip "TCP_INQ: -6 $args" fi done =20 @@ -362,7 +398,12 @@ make_file "$sin" "server" 1 mptcp_lib_subtests_last_ts_reset =20 run_tests $ns1 $ns2 10.0.1.1 -run_tests $ns1 $ns2 dead:beef:1::1 +if mptcp_lib_is_v6_enabled; then + run_tests $ns1 $ns2 dead:beef:1::1 +else + mptcp_lib_result_skip "transfer ipv6" + mptcp_lib_result_skip "mark ipv6" +fi =20 do_mptcp_sockopt_tests do_tcpinq_tests --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-180.mta1.migadu.com (out-180.mta1.migadu.com [95.215.58.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72CAA405C57 for ; Thu, 11 Jun 2026 17:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197713; cv=none; b=dPO1w7pafo7WjGAUaNfFzCi0cEeyfqFiO7CyktkrRkQRCYwG/BhIhyQ1HEAcyXFbW/BkvHJSOjyDA1R8DPEZPV0JHMSXI5zJqzNdbxrvvW5uPInlVrkRKhHnCLlbJw4GFGaOiaFLTKcqEIdIU9wmre8d/1k2fhLdB4fQ3BdEsNc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197713; c=relaxed/simple; bh=nIZOxv7aMd3GvX1Gx2noNVaHAgeuvEEqORFXAH2UkxQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pZLTHtBbdLOs4W8qZfIimryNbbmaqFvL+8YJ93sQLEy9+xt8c+5wymYqLhkZVg1EJ1imu3kDYGkcaaG+RhaJw9sPVol2NsowDWtYqWr02Cl9vsUpiuaWF/FWHT15CwPw+n3Ep2bY3IhG2woXYeDlWEDN8Unm65RUpfEPi/MEdzg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=o+7Wwvt5; arc=none smtp.client-ip=95.215.58.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="o+7Wwvt5" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197710; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mG/dysvFDBbTMV7Ke1Y8Emr+FlrohO2qrbgjTf0UELY=; b=o+7Wwvt54Ye8k50vK4zBVHE0TEFJrUum0JPRgww4pZFNS9tiNIIxevhoq+5JNi7VS+MbQP 43zNBneiCqYL89RSw/Mzp8AC3ZCEa3SMuFM1+Mq29YUED3TFS5k8QB4dxITnr2h0JkR/Z4 xwN3OaVUkefhJ0EvlPYl1KZHR2H0r4Y= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 6/9] selftests: mptcp: simult_flows.sh skips v6 setup when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:56 +0800 Message-ID: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan On a CONFIG_IPV6=3Dm kernel (which forces CONFIG_MPTCP_IPV6=3Dn) every v6 setup step errors out, setup() exits non-zero and all subtests report spurious failures. Call mptcp_lib_check_ipv6() at script init, then collect the entire v6 setup into a single "if mptcp_lib_is_v6_enabled; then ... fi" block at the end of setup(). v4 topology and run_test invocations are untouched; in a full-featured kernel the block is always taken and the script runs as before. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../selftests/net/mptcp/simult_flows.sh | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/test= ing/selftests/net/mptcp/simult_flows.sh index 3ea3d1efe32e..7f9c6a343aaa 100755 --- a/tools/testing/selftests/net/mptcp/simult_flows.sh +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh @@ -48,6 +48,7 @@ cleanup() =20 mptcp_lib_check_mptcp mptcp_lib_check_tools ip tc +mptcp_lib_check_ipv6 =20 # "$ns1" ns2 ns3 # ns1eth1 ns2eth1 ns2eth3 ns3eth1 @@ -81,39 +82,48 @@ setup() ip link add ns2eth3 netns "$ns2" type veth peer name ns3eth1 netns "$ns3" =20 ip -net "$ns1" addr add 10.0.1.1/24 dev ns1eth1 - ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth1 nodad ip -net "$ns1" link set ns1eth1 up mtu 1500 gso_max_segs 0 ip -net "$ns1" route add default via 10.0.1.2 - ip -net "$ns1" route add default via dead:beef:1::2 =20 ip -net "$ns1" addr add 10.0.2.1/24 dev ns1eth2 - ip -net "$ns1" addr add dead:beef:2::1/64 dev ns1eth2 nodad ip -net "$ns1" link set ns1eth2 up mtu 1500 gso_max_segs 0 ip -net "$ns1" route add default via 10.0.2.2 metric 101 - ip -net "$ns1" route add default via dead:beef:2::2 metric 101 =20 mptcp_lib_pm_nl_set_limits "${ns1}" 1 1 mptcp_lib_pm_nl_add_endpoint "${ns1}" 10.0.2.1 dev ns1eth2 flags subflow =20 ip -net "$ns2" addr add 10.0.1.2/24 dev ns2eth1 - ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad ip -net "$ns2" link set ns2eth1 up mtu 1500 gso_max_segs 0 =20 ip -net "$ns2" addr add 10.0.2.2/24 dev ns2eth2 - ip -net "$ns2" addr add dead:beef:2::2/64 dev ns2eth2 nodad ip -net "$ns2" link set ns2eth2 up mtu 1500 gso_max_segs 0 =20 ip -net "$ns2" addr add 10.0.3.2/24 dev ns2eth3 - ip -net "$ns2" addr add dead:beef:3::2/64 dev ns2eth3 nodad ip -net "$ns2" link set ns2eth3 up mtu 1500 gso_max_segs 0 ip netns exec "$ns2" sysctl -q net.ipv4.ip_forward=3D1 - ip netns exec "$ns2" sysctl -q net.ipv6.conf.all.forwarding=3D1 =20 ip -net "$ns3" addr add 10.0.3.3/24 dev ns3eth1 - ip -net "$ns3" addr add dead:beef:3::3/64 dev ns3eth1 nodad ip -net "$ns3" link set ns3eth1 up mtu 1500 gso_max_segs 0 ip -net "$ns3" route add default via 10.0.3.2 - ip -net "$ns3" route add default via dead:beef:3::2 + + # IPv6 topology: only configured if MPTCP IPv6 is supported by the + # running kernel (CONFIG_MPTCP_IPV6=3Dy). On a kernel without it, + # "ip -6 addr add", "ip -6 route add" and the v6 forwarding sysctl + # would fail and abort setup(), taking the v4 tests down with them. + if mptcp_lib_is_v6_enabled; then + ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth1 nodad + ip -net "$ns1" route add default via dead:beef:1::2 + ip -net "$ns1" addr add dead:beef:2::1/64 dev ns1eth2 nodad + ip -net "$ns1" route add default via dead:beef:2::2 metric 101 + + ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad + ip -net "$ns2" addr add dead:beef:2::2/64 dev ns2eth2 nodad + ip -net "$ns2" addr add dead:beef:3::2/64 dev ns2eth3 nodad + ip netns exec "$ns2" sysctl -q net.ipv6.conf.all.forwarding=3D1 + + ip -net "$ns3" addr add dead:beef:3::3/64 dev ns3eth1 nodad + ip -net "$ns3" route add default via dead:beef:3::2 + fi =20 mptcp_lib_pm_nl_set_limits "${ns3}" 1 1 =20 --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96063397342 for ; Thu, 11 Jun 2026 17:08:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197716; cv=none; b=KWjzw+/Gg0acuwYElswlS7Y2Ie1ihAtkKglmY747zOn010qNRP7uppNsveHieVQNbliuLhdZ9WaBerI2471nhJ+Zi4wY/PTytKm+5g9B5Eb5qMcvnwbrPv7JAdLC+LslA6gDYXZxR3NZBLkiKybdq6hUxTBQJ8K6Y7SXjByY91c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197716; c=relaxed/simple; bh=aQoKz+CskS08sa9eYpWRhiJYleQKVb6RQ4Lcvlv7DBU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jd1Duypy3C7b1yfbpACLLk88q1ud8hrci9rLixT/ys60L8SgjdWIRANtIPIR+oNdE6qYlvSAux6CtFWWIn1diUXf78LIbmw3b9ypcH993jjHrMCP5ZqmTOX67wp0xVnWAZG27X2t/CMQvxqL7tU42v3XIJ4Vt71YFw5NhC5lnjI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=sso+5Z2J; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="sso+5Z2J" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197714; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4pZLxsmq+aJt6EP95KFc25HA6t9bAu1d+8Dpc+32FMY=; b=sso+5Z2JQFn0zYlZJkKf0FGrXu5+R2zfDpAOqxHpUacZxVzwC1OAf77g9dVNwE1HzzvX6h 1LiWGQRIp5uHu0PhvmuCffdhOIYLuaF069JdpN6CU4qVMGV+67k2lce218tuW1Tl9kfp8N eHjafPQIywEDLX89TMXi7NwyQwUfg6o= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 7/9] selftests: mptcp: mptcp_join.sh: pick v4 bind default when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:57 +0800 Message-ID: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT From: Gang Yan do_transfer() defaults bind_addr to "::", and mptcp_connect.c auto-selects the protocol family from the bind string (a ':' forces AF_INET6). On a kernel without CONFIG_MPTCP_IPV6 the listener becomes socket(AF_INET6, SOCK_STREAM, IPPROTO_MPTCP), which the kernel rejects with -EAFNOSUPPORT and every subtest that does not override bind_addr reports "client exit code 2, server 1" =E2=80=94 starting with "001 no JOIN= " =E2=80=94 even though nothing v6-specific is being tested. Pick the default from the mptcp_lib_is_v6_enabled flag when v6 is available, "0.0.0.0" otherwise. Callers that explicitly set bind_addr are unaffected. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 550a6b6117a9..26fb5e433384 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1004,7 +1004,14 @@ do_transfer() local FAILING_LINKS=3D${FAILING_LINKS:-""} local fastclose=3D${fastclose:-""} local speed=3D${speed:-"fast"} - local bind_addr=3D${bind_addr:-"::"} + local bind_addr=3D${bind_addr:-} + if [ -z "${bind_addr}" ]; then + if mptcp_lib_is_v6_enabled; then + bind_addr=3D"::" + else + bind_addr=3D"0.0.0.0" + fi + fi local listener_in=3D"${sin}" local connector_in=3D"${cin}" port=3D$(get_port) --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-187.mta1.migadu.com (out-187.mta1.migadu.com [95.215.58.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 598C0397342 for ; Thu, 11 Jun 2026 17:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197719; cv=none; b=C90S7MflEknXB3iL9LyBC0B7R2bh3IEXuvwCyBv3aej/pzuB84PdfwpncwSHEmIezN5ptkOXKDGk0Qfs+Sr//V6xEtObqp0ulfbs03lAycMwB4C25ZGjHCqBRWhgBG15E6QPbCvXNsKs+K/TB5x+X7xFxz782FyV5PjMah1HqOs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197719; c=relaxed/simple; bh=DAMauKCq5b81K/zXH87/OQvhge/FiXxf/VTW8eQUGgI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AZR2MBEOo77OujiIEAhowh+G5liTOZRghtYXxEQEyBQl5GiZtaJmr3tYGk4mvKUmVeQ+Zvur/QYgT4bplEu9PzLgc406z0ASX/YP7EUwMcGVq16Hz6g7G05VdIivQosqT8nq1iVp/nUX6qRVUSiTmlZexw31TFQkinKscrpPA2A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=lDm4lXrf; arc=none smtp.client-ip=95.215.58.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="lDm4lXrf" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197715; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9q26wjDI4vdyqBu0P3Xn7D2phYnQgabzW5Vbg++5twk=; b=lDm4lXrfMFzoF2IzscCFmWdHaGXFGbYH7NjFa5tOgCbCKAPo7sCIhuP+EDvcZsTkRBeN3y /YCbG8XClNFU9LteWRBjqgkvbSpNlwYDw89SJxbI2YWfPzDaJYPaCdlAaJm3e4axNeGxVy GO5ArfY+9wbBf+Q1a7sgpEoAFm5Pq3k= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 8/9] selftests: mptcp: mptcp_join.sh skips v6 subtests when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:58 +0800 Message-ID: <80c52b274dfe802a1031eabce6ce9bbc32ee0765.1781196828.git.yangang@kylinos.cn> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan mptcp_join.sh pre-stages dead:beef:*::1/2 and v6 default routes in init_partial(), and dozens of v6 subtests under ipv6_tests, v4mapped_tests, mixed_tests, add_addr_timeout_tests, signal_address_tests, link_failure_tests, laminar_endp_tests and one userspace_tests case drive dead:beef:* or ::ffff:* endpoints. On a CONFIG_IPV6=3Dm kernel (which forces CONFIG_MPTCP_IPV6=3Dn) all of this fails. The fix is mechanical: call mptcp_lib_check_ipv6() from init(), guard the v6 bits in init_partial(), and prepend the standard "if ! mptcp_lib_is_v6_enabled; then mptcp_lib_result_skip ...; elif reset ...; then ...; fi" guard to every v6 subtest. v4 subtests and the pass/fail behaviour on a full-featured kernel are unchanged. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../testing/selftests/net/mptcp/mptcp_join.sh | 145 +++++++++++++----- 1 file changed, 106 insertions(+), 39 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 26fb5e433384..d3adef18b3c7 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -154,16 +154,22 @@ init_partial() for i in $(seq 1 "${ifaces_nr:-4}"); do ip link add ns1eth$i netns "$ns1" type veth peer name ns2eth$i netns "$n= s2" ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i - ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad + if mptcp_lib_is_v6_enabled; then + ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad + fi ip -net "$ns1" link set ns1eth$i up =20 ip -net "$ns2" addr add 10.0.$i.2/24 dev ns2eth$i - ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad + if mptcp_lib_is_v6_enabled; then + ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad + fi ip -net "$ns2" link set ns2eth$i up =20 # let $ns2 reach any $ns1 address from any interface ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i - ip -net "$ns2" route add default via dead:beef:$i::1 dev ns2eth$i metric= 10$i + if mptcp_lib_is_v6_enabled; then + ip -net "$ns2" route add default via dead:beef:$i::1 dev ns2eth$i metri= c 10$i + fi done } =20 @@ -189,6 +195,7 @@ init() { mptcp_lib_check_mptcp mptcp_lib_check_kallsyms mptcp_lib_check_tools ip tc ss "${iptables}" "${ip6tables}" + mptcp_lib_check_ipv6 =20 sin=3D$(mktemp) sout=3D$(mktemp) @@ -2395,8 +2402,10 @@ laminar_endp_tests() fi =20 # laminar endpoints: these endpoints are used - if reset_with_tcp_filter "with multiple laminar endpoints" ns1 10.0.2.2 R= EJECT && - continue_if mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; t= hen + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "with multiple laminar endpoints" + elif reset_with_tcp_filter "with multiple laminar endpoints" ns1 10.0.2.2= REJECT && + continue_if mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$";= then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 2 2 pm_nl_add_endpoint $ns1 10.0.2.1 flags signal @@ -2538,7 +2547,9 @@ add_addr_timeout_tests() fi =20 # add_addr timeout IPv6 - if reset_with_add_addr_timeout "signal address, ADD_ADDR6 timeout" 6; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal address, ADD_ADDR6 timeout" + elif reset_with_add_addr_timeout "signal address, ADD_ADDR6 timeout" 6; t= hen pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal @@ -2818,7 +2829,9 @@ add_tests() fi =20 # add multiple subflows IPv6 - if reset "add multiple subflows IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "add multiple subflows IPv6" + elif reset "add multiple subflows IPv6"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 0 2 addr_nr_ns2=3D2 speed=3Dslow cestab_ns2=3D1 \ @@ -2828,7 +2841,9 @@ add_tests() fi =20 # add multiple addresses IPv6 - if reset "add multiple addresses IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "add multiple addresses IPv6" + elif reset "add multiple addresses IPv6"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 2 2 addr_nr_ns1=3D2 speed=3Dslow cestab_ns1=3D1 \ @@ -2842,7 +2857,9 @@ add_tests() ipv6_tests() { # subflow IPv6 - if reset "single subflow IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "single subflow IPv6" + elif reset "single subflow IPv6"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow @@ -2852,7 +2869,9 @@ ipv6_tests() fi =20 # add_address, unused IPv6 - if reset "unused signal address IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "unused signal address IPv6" + elif reset "unused signal address IPv6"; then pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal speed=3Dslow \ run_tests $ns1 $ns2 dead:beef:1::1 @@ -2861,7 +2880,9 @@ ipv6_tests() fi =20 # signal address IPv6 - if reset "single address IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "single address IPv6" + elif reset "single address IPv6"; then pm_nl_set_limits $ns1 0 1 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal pm_nl_set_limits $ns2 1 1 @@ -2872,7 +2893,9 @@ ipv6_tests() fi =20 # single address IPv6, remove - if reset "remove single address IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "remove single address IPv6" + elif reset "remove single address IPv6"; then pm_nl_set_limits $ns1 0 1 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal pm_nl_set_limits $ns2 1 1 @@ -2884,7 +2907,9 @@ ipv6_tests() fi =20 # subflow and signal IPv6, remove - if reset "remove subflow and signal IPv6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "remove subflow and signal IPv6" + elif reset "remove subflow and signal IPv6"; then pm_nl_set_limits $ns1 0 2 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal pm_nl_set_limits $ns2 1 2 @@ -2900,7 +2925,9 @@ ipv6_tests() v4mapped_tests() { # subflow IPv4-mapped to IPv4-mapped - if reset "single subflow IPv4-mapped"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "single subflow IPv4-mapped" + elif reset "single subflow IPv4-mapped"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 "::ffff:10.0.3.2" flags subflow @@ -2909,7 +2936,9 @@ v4mapped_tests() fi =20 # signal address IPv4-mapped with IPv4-mapped sk - if reset "signal address IPv4-mapped"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal address IPv4-mapped" + elif reset "signal address IPv4-mapped"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 "::ffff:10.0.2.1" flags signal @@ -2919,7 +2948,9 @@ v4mapped_tests() fi =20 # subflow v4-map-v6 - if reset "single subflow v4-map-v6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "single subflow v4-map-v6" + elif reset "single subflow v4-map-v6"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow @@ -2928,7 +2959,9 @@ v4mapped_tests() fi =20 # signal address v4-map-v6 - if reset "signal address v4-map-v6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal address v4-map-v6" + elif reset "signal address v4-map-v6"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 10.0.2.1 flags signal @@ -2938,7 +2971,9 @@ v4mapped_tests() fi =20 # subflow v6-map-v4 - if reset "single subflow v6-map-v4"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "single subflow v6-map-v4" + elif reset "single subflow v6-map-v4"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 "::ffff:10.0.3.2" flags subflow @@ -2947,7 +2982,9 @@ v4mapped_tests() fi =20 # signal address v6-map-v4 - if reset "signal address v6-map-v4"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal address v6-map-v4" + elif reset "signal address v6-map-v4"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 "::ffff:10.0.2.1" flags signal @@ -2957,7 +2994,9 @@ v4mapped_tests() fi =20 # no subflow IPv6 to v4 address - if reset "no JOIN with diff families v4-v6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "no JOIN with diff families v4-v6" + elif reset "no JOIN with diff families v4-v6"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow @@ -2966,7 +3005,9 @@ v4mapped_tests() fi =20 # no subflow IPv6 to v4 address even if v6 has a valid v4 at the end - if reset "no JOIN with diff families v4-v6-2"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "no JOIN with diff families v4-v6-2" + elif reset "no JOIN with diff families v4-v6-2"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 dead:beef:2::10.0.3.2 flags subflow @@ -2975,7 +3016,9 @@ v4mapped_tests() fi =20 # no subflow IPv4 to v6 address, no need to slow down too then - if reset "no JOIN with diff families v6-v4"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "no JOIN with diff families v6-v4" + elif reset "no JOIN with diff families v6-v4"; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 0 1 pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow @@ -2986,8 +3029,10 @@ v4mapped_tests() =20 mixed_tests() { - if reset "IPv4 sockets do not use IPv6 addresses" && - continue_if mptcp_lib_kversion_ge 6.3; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "IPv4 sockets do not use IPv6 addresses" + elif reset "IPv4 sockets do not use IPv6 addresses" && + continue_if mptcp_lib_kversion_ge 6.3; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal @@ -2997,8 +3042,10 @@ mixed_tests() fi =20 # Need an IPv6 mptcp socket to allow subflows of both families - if reset "simult IPv4 and IPv6 subflows" && - continue_if mptcp_lib_kversion_ge 6.3; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "simult IPv4 and IPv6 subflows" + elif reset "simult IPv4 and IPv6 subflows" && + continue_if mptcp_lib_kversion_ge 6.3; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 10.0.1.1 flags signal @@ -3008,8 +3055,10 @@ mixed_tests() fi =20 # cross families subflows will not be created even in fullmesh mode - if reset "simult IPv4 and IPv6 subflows, fullmesh 1x1" && - continue_if mptcp_lib_kversion_ge 6.3; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "simult IPv4 and IPv6 subflows, fullmesh 1x1" + elif reset "simult IPv4 and IPv6 subflows, fullmesh 1x1" && + continue_if mptcp_lib_kversion_ge 6.3; then pm_nl_set_limits $ns1 0 4 pm_nl_set_limits $ns2 1 4 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow,fullmesh @@ -3025,8 +3074,10 @@ mixed_tests() =20 # fullmesh still tries to create all the possibly subflows with # matching family - if reset "simult IPv4 and IPv6 subflows, fullmesh 2x2" && - continue_if mptcp_lib_kversion_ge 6.3; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "simult IPv4 and IPv6 subflows, fullmesh 2x2" + elif reset "simult IPv4 and IPv6 subflows, fullmesh 2x2" && + continue_if mptcp_lib_kversion_ge 6.3; then pm_nl_set_limits $ns1 0 4 pm_nl_set_limits $ns2 2 4 pm_nl_add_endpoint $ns1 10.0.2.1 flags signal @@ -3206,8 +3257,10 @@ add_addr_ports_tests() fi =20 # signal address v6 with port - if reset "signal address v6 with port" && - continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/add_addr_v6_port_d= rop_ts'; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal address v6 with port" + elif reset "signal address v6 with port" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/add_addr_v6_port= _drop_ts'; then pm_nl_set_limits $ns1 0 1 pm_nl_set_limits $ns2 1 1 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 @@ -3312,7 +3365,9 @@ add_addr_ports_tests() fi =20 # first signal address drops, second one still progresses - if reset "signal addr list progresses after tx drop"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "signal addr list progresses after tx drop" + elif reset "signal addr list progresses after tx drop"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 1 0 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_v6_port_drop_ts=3D0 2>/d= ev/null || true @@ -3342,7 +3397,9 @@ bind_tests() fi =20 # bind to one address should not allow extra subflows to other addresses - if reset "bind main address v6, no join v6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "bind main address v6, no join v6" + elif reset "bind main address v6, no join v6"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 2 2 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal @@ -3376,7 +3433,9 @@ bind_tests() fi =20 # multiple binds to allow extra subflows to other addresses - if reset "multiple bind to allow joins v6"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "multiple bind to allow joins v6" + elif reset "multiple bind to allow joins v6"; then local extra_bind =20 pm_nl_set_limits $ns1 0 2 @@ -3398,7 +3457,9 @@ bind_tests() fi =20 # multiple binds to allow extra subflows to other addresses: v6 LL case - if reset "multiple bind to allow joins v6 link-local routing"; then + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "multiple bind to allow joins v6 link-local routin= g" + elif reset "multiple bind to allow joins v6 link-local routing"; then local extra_bind ns1ll1 ns1ll2 =20 ns1ll1=3D"$(get_ll_addr $ns1 ns1eth1)" @@ -3426,8 +3487,10 @@ bind_tests() fi =20 # multiple binds to allow extra subflows to v6 LL addresses: laminar - if reset "multiple bind to allow joins v6 link-local laminar" && - continue_if mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; t= hen + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "multiple bind to allow joins v6 link-local lamina= r" + elif reset "multiple bind to allow joins v6 link-local laminar" && + continue_if mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$";= then local extra_bind ns1ll1 ns1ll2 ns2ll2 =20 ns1ll1=3D"$(get_ll_addr $ns1 ns1eth1)" @@ -4072,7 +4135,11 @@ userspace_tests() fi =20 # userspace pm add & remove address - if reset_with_events "userspace pm add & remove address" && + # The test uses the v4-mapped address "::ffff:10.0.2.1" in + # userspace_pm_rm_sf, which requires CONFIG_MPTCP_IPV6=3Dy in the kernel. + if ! mptcp_lib_is_v6_enabled; then + mptcp_lib_result_skip "userspace pm add & remove address" + elif reset_with_events "userspace pm add & remove address" && continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then set_userspace_pm $ns1 pm_nl_set_limits $ns2 2 2 --=20 2.43.0 From nobody Sun Jun 14 21:06:45 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E58B43438B0 for ; Thu, 11 Jun 2026 17:08:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197720; cv=none; b=Zfy2DxhDcdszo/EMMf043SDu4wvXwQNP+jrKcBIbOGXKx9IX8OOn+WpABtPZbd3JC9nnOinhjYkvY1oeAi3A2eKxWapa+soQE1iEpwDo3Jx9c9JK87l5SbSHabhoEW9eJMpHDP5H9/dtjSe5Phel+3e8PgCBUzwO2aFQuBC6x84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781197720; c=relaxed/simple; bh=sIOIYbfnHU8OsBGh4S0mrg+4/jEbLqNaDqrDE2KQ8sU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tRYJaAytBW3sHf1zT0Sn4w8vKf0GemmK83MEpvWBl+rU9dzUVJl+5jq3eN2Q0U3SR8tzW6a+u0qIT3fjXNYCMgbWEyiFHlaGu6/1qv2FrTSPBDk3NjcqzN0XXHsO1+m6CebUOjSrMEnvzX8otCufbszkX7uh0BamOSV6g2Ah/EU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=qFXb+m4O; arc=none smtp.client-ip=95.215.58.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="qFXb+m4O" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1781197717; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H08o38Dqr4IqCIvuvya0WQqq1WwF/V9rHnyWC2WcSL0=; b=qFXb+m4OrWKm5DlGsfnOqG1I0YEj5XTUm/jn/Al/mQH6+4oP0rhSoOOVkB33vPKmdyMVoQ aiIzasGUuTAj1sLhVdTivC7hNsAcWfUEa0OUKS1NrRxXbxknJrgopyZnGs1DjNi7yBz09b qOo6yCHIZXv64Grdx3J2wnU9u+LuzkQ= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH, mptcp-next 9/9] selftests: mptcp: userspace_pm.sh skips v6 paths when MPTCP IPv6 is missing Date: Fri, 12 Jun 2026 01:07:59 +0800 Message-ID: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT From: Gang Yan Call mptcp_lib_check_ipv6() at script init, then guard every v6 step =E2=80=94 the init-time dead:beef:* assignments, the v6 PM sequences inside test_announce()/test_remove()/test_subflows(), and the top-level make_connection "v6" / test_subflows_v4_v6_mix() calls =E2=80=94 with mptcp_lib_is_v6_enabled. Each v6-only subtest emits a SKIP TAP line under its existing name when v6 is unavailable. v4 paths and the pass/fail behaviour on a full-featured kernel are unchanged. Assisted-by: GLM:5.1 Z.ai Signed-off-by: Gang Yan --- .../selftests/net/mptcp/userspace_pm.sh | 237 ++++++++++-------- 1 file changed, 131 insertions(+), 106 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/test= ing/selftests/net/mptcp/userspace_pm.sh index e9ae1806ab07..8a20d33b1f03 100755 --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh @@ -18,6 +18,7 @@ if ! mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; th= en exit ${KSFT_SKIP} fi mptcp_lib_check_tools ip +mptcp_lib_check_ipv6 =20 ANNOUNCED=3D${MPTCP_LIB_EVENT_ANNOUNCED} REMOVED=3D${MPTCP_LIB_EVENT_REMOVED} @@ -159,14 +160,18 @@ ip link add ns1eth2 netns "$ns1" type veth peer name = ns2eth1 netns "$ns2" # Add IPv4/v6 addresses to the namespaces ip -net "$ns1" addr add 10.0.1.1/24 dev ns1eth2 ip -net "$ns1" addr add 10.0.2.1/24 dev ns1eth2 -ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth2 nodad -ip -net "$ns1" addr add dead:beef:2::1/64 dev ns1eth2 nodad +if mptcp_lib_is_v6_enabled; then + ip -net "$ns1" addr add dead:beef:1::1/64 dev ns1eth2 nodad + ip -net "$ns1" addr add dead:beef:2::1/64 dev ns1eth2 nodad +fi ip -net "$ns1" link set ns1eth2 up =20 ip -net "$ns2" addr add 10.0.1.2/24 dev ns2eth1 ip -net "$ns2" addr add 10.0.2.2/24 dev ns2eth1 -ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad -ip -net "$ns2" addr add dead:beef:2::2/64 dev ns2eth1 nodad +if mptcp_lib_is_v6_enabled; then + ip -net "$ns2" addr add dead:beef:1::2/64 dev ns2eth1 nodad + ip -net "$ns2" addr add dead:beef:2::2/64 dev ns2eth1 nodad +fi ip -net "$ns2" link set ns2eth1 up =20 file=3D$(mktemp) @@ -344,13 +349,15 @@ test_announce() "$client4_port" =20 # ADD_ADDR6 from the client to server machine reusing the subflow port - :>"$server_evts" - ip netns exec "$ns2" ./pm_nl_ctl ann\ - dead:beef:2::2 token "$client6_token" id $client_addr_id dev ns2eth1 - print_test "ADD_ADDR6 id:client dead:beef:2::2 (ns2) =3D> ns1, reuse port" - sleep 0.5 - verify_announce_event "$server_evts" "$ANNOUNCED" "$server6_token" "dead:= beef:2::2"\ - "$client_addr_id" "$client6_port" "v6" + if mptcp_lib_is_v6_enabled; then + :>"$server_evts" + ip netns exec "$ns2" ./pm_nl_ctl ann\ + dead:beef:2::2 token "$client6_token" id $client_addr_id dev ns2eth1 + print_test "ADD_ADDR6 id:client dead:beef:2::2 (ns2) =3D> ns1, reuse por= t" + sleep 0.5 + verify_announce_event "$server_evts" "$ANNOUNCED" "$server6_token" "dead= :beef:2::2"\ + "$client_addr_id" "$client6_port" "v6" + fi =20 # ADD_ADDR from the client to server machine using a new port :>"$server_evts" @@ -374,13 +381,15 @@ test_announce() "$server_addr_id" "$app4_port" =20 # ADD_ADDR6 from the server to client machine reusing the subflow port - :>"$client_evts" - ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_token= " id\ - $server_addr_id dev ns1eth2 - print_test "ADD_ADDR6 id:server dead:beef:2::1 (ns1) =3D> ns2, reuse port" - sleep 0.5 - verify_announce_event "$client_evts" "$ANNOUNCED" "$client6_token" "dead:= beef:2::1"\ - "$server_addr_id" "$app6_port" "v6" + if mptcp_lib_is_v6_enabled; then + :>"$client_evts" + ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_toke= n" id\ + $server_addr_id dev ns1eth2 + print_test "ADD_ADDR6 id:server dead:beef:2::1 (ns1) =3D> ns2, reuse por= t" + sleep 0.5 + verify_announce_event "$client_evts" "$ANNOUNCED" "$client6_token" "dead= :beef:2::1"\ + "$server_addr_id" "$app6_port" "v6" + fi =20 # ADD_ADDR from the server to client machine using a new port :>"$client_evts" @@ -462,12 +471,14 @@ test_remove() verify_remove_event "$server_evts" "$REMOVED" "$server4_token" "$client_a= ddr_id" =20 # RM_ADDR6 from the client to server machine - :>"$server_evts" - ip netns exec "$ns2" ./pm_nl_ctl rem token "$client6_token" id\ - $client_addr_id - print_test "RM_ADDR6 id:client-1 ns2 =3D> ns1" - sleep 0.5 - verify_remove_event "$server_evts" "$REMOVED" "$server6_token" "$client_a= ddr_id" + if mptcp_lib_is_v6_enabled; then + :>"$server_evts" + ip netns exec "$ns2" ./pm_nl_ctl rem token "$client6_token" id\ + $client_addr_id + print_test "RM_ADDR6 id:client-1 ns2 =3D> ns1" + sleep 0.5 + verify_remove_event "$server_evts" "$REMOVED" "$server6_token" "$client_= addr_id" + fi =20 # Capture events on the network namespace running the client :>"$client_evts" @@ -489,12 +500,14 @@ test_remove() verify_remove_event "$client_evts" "$REMOVED" "$client4_token" "$server_a= ddr_id" =20 # RM_ADDR6 from the server to client machine - :>"$client_evts" - ip netns exec "$ns1" ./pm_nl_ctl rem token "$server6_token" id\ - $server_addr_id - print_test "RM_ADDR6 id:server-1 ns1 =3D> ns2" - sleep 0.5 - verify_remove_event "$client_evts" "$REMOVED" "$client6_token" "$server_a= ddr_id" + if mptcp_lib_is_v6_enabled; then + :>"$client_evts" + ip netns exec "$ns1" ./pm_nl_ctl rem token "$server6_token" id\ + $server_addr_id + print_test "RM_ADDR6 id:server-1 ns1 =3D> ns2" + sleep 0.5 + verify_remove_event "$client_evts" "$REMOVED" "$client6_token" "$server_= addr_id" + fi } =20 verify_subflow_events() @@ -609,43 +622,45 @@ test_subflows() sleep 0.5 =20 # Attempt to add a listener at dead:beef:2::2: - ip netns exec "$ns2" ./pm_nl_ctl listen dead:beef:2::2\ - "$client6_port" & - listener_pid=3D$! - - # ADD_ADDR6 from client to server machine reusing the subflow port - :>"$server_evts" - ip netns exec "$ns2" ./pm_nl_ctl ann dead:beef:2::2 token "$client6_token= " id\ - $client_addr_id - sleep 0.5 - - # CREATE_SUBFLOW6 from server to client machine - :>"$server_evts" - ip netns exec "$ns1" ./pm_nl_ctl csf lip dead:beef:2::1 lid 23 rip\ - dead:beef:2::2 rport "$client6_port" token "$server6_token" - sleep 0.5 - verify_subflow_events "$server_evts" "$SUB_ESTABLISHED" "$server6_token" = "$AF_INET6"\ - "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ - "$client_addr_id" "ns1" "ns2" - - # Delete the listener from the client ns, if one was created - mptcp_lib_kill_wait $listener_pid - - sport=3D$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED) - - # DESTROY_SUBFLOW6 from server to client machine - :>"$server_evts" - ip netns exec "$ns1" ./pm_nl_ctl dsf lip dead:beef:2::1 lport "$sport" ri= p\ - dead:beef:2::2 rport "$client6_port" token "$server6_token" - sleep 0.5 - verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server6_token" "$AF_= INET6"\ - "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ - "$client_addr_id" "ns1" "ns2" - - # RM_ADDR from client to server machine - ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\ - "$client6_token" - sleep 0.5 + if mptcp_lib_is_v6_enabled; then + ip netns exec "$ns2" ./pm_nl_ctl listen dead:beef:2::2\ + "$client6_port" & + listener_pid=3D$! + + # ADD_ADDR6 from client to server machine reusing the subflow port + :>"$server_evts" + ip netns exec "$ns2" ./pm_nl_ctl ann dead:beef:2::2 token "$client6_toke= n" id\ + $client_addr_id + sleep 0.5 + + # CREATE_SUBFLOW6 from server to client machine + :>"$server_evts" + ip netns exec "$ns1" ./pm_nl_ctl csf lip dead:beef:2::1 lid 23 rip\ + dead:beef:2::2 rport "$client6_port" token "$server6_token" + sleep 0.5 + verify_subflow_events "$server_evts" "$SUB_ESTABLISHED" "$server6_token"= "$AF_INET6"\ + "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ + "$client_addr_id" "ns1" "ns2" + + # Delete the listener from the client ns, if one was created + mptcp_lib_kill_wait $listener_pid + + sport=3D$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW6 from server to client machine + :>"$server_evts" + ip netns exec "$ns1" ./pm_nl_ctl dsf lip dead:beef:2::1 lport "$sport" r= ip\ + dead:beef:2::2 rport "$client6_port" token "$server6_token" + sleep 0.5 + verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server6_token" "$AF= _INET6"\ + "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ + "$client_addr_id" "ns1" "ns2" + + # RM_ADDR from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\ + "$client6_token" + sleep 0.5 + fi =20 # Attempt to add a listener at 10.0.2.2: ip netns exec "$ns2" ./pm_nl_ctl listen 10.0.2.2\ @@ -724,43 +739,45 @@ test_subflows() sleep 0.5 =20 # Attempt to add a listener at dead:beef:2::1: - ip netns exec "$ns1" ./pm_nl_ctl listen dead:beef:2::1\ - $app6_port & - listener_pid=3D$! - - # ADD_ADDR6 from server to client machine reusing the subflow port - :>"$client_evts" - ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_token= " id\ - $server_addr_id - sleep 0.5 - - # CREATE_SUBFLOW6 from client to server machine - :>"$client_evts" - ip netns exec "$ns2" ./pm_nl_ctl csf lip dead:beef:2::2 lid 23 rip\ - dead:beef:2::1 rport $app6_port token "$client6_token" - sleep 0.5 - verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client6_token"\ - "$AF_INET6" "dead:beef:2::2"\ - "dead:beef:2::1" "$app6_port" "23"\ - "$server_addr_id" "ns2" "ns1" - - # Delete the listener from the server ns, if one was created - mptcp_lib_kill_wait $listener_pid - - sport=3D$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) - - # DESTROY_SUBFLOW6 from client to server machine - :>"$client_evts" - ip netns exec "$ns2" ./pm_nl_ctl dsf lip dead:beef:2::2 lport "$sport" ri= p\ - dead:beef:2::1 rport $app6_port token "$client6_token" - sleep 0.5 - verify_subflow_events $client_evts $SUB_CLOSED $client6_token $AF_INET6 "= dead:beef:2::2"\ - "dead:beef:2::1" "$app6_port" "23" "$server_addr_id" "ns2" "ns1" - - # RM_ADDR6 from server to client machine - ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ - "$server6_token" - sleep 0.5 + if mptcp_lib_is_v6_enabled; then + ip netns exec "$ns1" ./pm_nl_ctl listen dead:beef:2::1\ + $app6_port & + listener_pid=3D$! + + # ADD_ADDR6 from server to client machine reusing the subflow port + :>"$client_evts" + ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_toke= n" id\ + $server_addr_id + sleep 0.5 + + # CREATE_SUBFLOW6 from client to server machine + :>"$client_evts" + ip netns exec "$ns2" ./pm_nl_ctl csf lip dead:beef:2::2 lid 23 rip\ + dead:beef:2::1 rport $app6_port token "$client6_token" + sleep 0.5 + verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client6_token"\ + "$AF_INET6" "dead:beef:2::2"\ + "dead:beef:2::1" "$app6_port" "23"\ + "$server_addr_id" "ns2" "ns1" + + # Delete the listener from the server ns, if one was created + mptcp_lib_kill_wait $listener_pid + + sport=3D$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW6 from client to server machine + :>"$client_evts" + ip netns exec "$ns2" ./pm_nl_ctl dsf lip dead:beef:2::2 lport "$sport" r= ip\ + dead:beef:2::1 rport $app6_port token "$client6_token" + sleep 0.5 + verify_subflow_events $client_evts $SUB_CLOSED $client6_token $AF_INET6 = "dead:beef:2::2"\ + "dead:beef:2::1" "$app6_port" "23" "$server_addr_id" "ns2" "ns1" + + # RM_ADDR6 from server to client machine + ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ + "$server6_token" + sleep 0.5 + fi =20 # Attempt to add a listener at 10.0.2.1: ip netns exec "$ns1" ./pm_nl_ctl listen 10.0.2.1\ @@ -931,13 +948,21 @@ test_listener() =20 print_title "Make connections" make_connection -make_connection "v6" +if mptcp_lib_is_v6_enabled; then + make_connection "v6" +else + # Track this as a skipped test for TAP output + test_name=3D"Established IPv6 MPTCP Connection ns2 =3D> ns1" + test_skip +fi print_title "Will be using address IDs ${client_addr_id} (client) and ${se= rver_addr_id} (server)" =20 test_announce test_remove test_subflows -test_subflows_v4_v6_mix +if mptcp_lib_is_v6_enabled; then + test_subflows_v4_v6_mix +fi test_prio test_listener =20 --=20 2.43.0