From nobody Sat Oct 11 08:07:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7928E2F3C23 for ; Tue, 23 Sep 2025 09:33:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758619990; cv=none; b=qJB6BRFgcB2GOsZPRZm9CamkvAJScOdVJKIycFjPmln4lisd1OGGgljW6U1dIcbQb0zG5wudb+HTgvUZH8gKpTATrlK6yXJxdut9/6Z30LnkmZzK2dNGBkmL/87/uEDcmprSDJr5Pyo4nTEIrH8WMY0QEHBq6m14G0+1khxz6Ao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758619990; c=relaxed/simple; bh=BZGVScledBPyxgT9ajdqZAv+wSsrJH7qGc+H2E0ax8A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qn3n9vLTk7Go2rSXsW36+6w/w5rEizSBJQGbpC1692g+Kery2gNVogEdhSd/uUWZ3ZLq7dJsYYDK+xSNtxKJD6foT3i3r0dFQSvNN7ZvuDg0dOF2n6KZ61yQ0SxxJ1GLIrAO/fBfRjahJ9SvLZ6CM79XznieiQViLdl8s575XP8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YIGNEAr7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YIGNEAr7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF5F5C4CEF7; Tue, 23 Sep 2025 09:33:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758619990; bh=BZGVScledBPyxgT9ajdqZAv+wSsrJH7qGc+H2E0ax8A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YIGNEAr71LuTuYlKuvHFjE67lD4BaOU2aT5LqHe6pVAuKpPOpwLZhOTfrkWHzoFx7 itHvZPQVFzBQmIKFxjX0YJLtjgJsnzTsRd4HzGh3oEO4Wk9gSGjgB1NxqLg0JznXt8 Kc0mA+HBDoDnw+yEAqJtEIqYdLA/E3g+yf83faExOZrhtA58VAd6M6L5+QgQtTuAsx rchuzvlQHj/LqLKzu2J2k2X1KlY+8lfRVNtnXUdmoSGHd0kkvFcENszc2H1+UbPJwE gP2gFrWrFpzz31VEza4YKVzDdhIDh5QWeN3Zc4P0fomxxLz1PDxbYENAceu3uncv5x cLg5L9qCiMpvg== From: "Matthieu Baerts (NGI0)" Date: Tue, 23 Sep 2025 11:32:52 +0200 Subject: [PATCH mptcp-next v2 6/6] selftests: mptcp: join: validate new 'address' endpoints 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 Message-Id: <20250923-pm-kern-endp-add_addr-new-v2-6-ee5369dad569@kernel.org> References: <20250923-pm-kern-endp-add_addr-new-v2-0-ee5369dad569@kernel.org> In-Reply-To: <20250923-pm-kern-endp-add_addr-new-v2-0-ee5369dad569@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4594; i=matttbe@kernel.org; h=from:subject:message-id; bh=BZGVScledBPyxgT9ajdqZAv+wSsrJH7qGc+H2E0ax8A=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDIuZfq36ctIiM7gOm87LcE+qORNB3PUmzedrEdKD3erX zOZumF9RykLgxgXg6yYIot0W2T+zOdVvCVefhYwc1iZQIYwcHEKwESygxkZ5j36aZDsVSbH9XzK yuWJRaWJ17aaJEfWbpL3jJc8rDjLmOGfoo+P/o4Ytq9X6z5UpgtE2UWd3mRT8dDePs/wo1zf3RI GAA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Here are a few sub-tests for mptcp_join.sh, validating the new 'address' endpoint type. In a setup where subflows created using the routing rules would be rejected by the listener, and where the latter announces one IP address, some cases are verified: - Without any 'address' endpoints: no new subflows are created. - With one 'address' endpoints: a second subflow is created. - With multiple 'address' endpoints: 2 IPv4 subflows are created. - With one 'address' endpoints, but the server announcing a second IP address, only one subflow is created. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 56 +++++++++++++++++++++= ++++ tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 9 ++++ 2 files changed, 65 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index a94b3960ad5e009dbead66b6ff2aa01f70aa3e1f..b0d935e3c8381ea34e74c3878e8= 69610b1a6fa41 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -2320,6 +2320,61 @@ signal_address_tests() fi } =20 +address_endp_tests() +{ + # no address endpoints: routing rules are used + if reset_with_tcp_filter "without address endpoint" ns1 10.0.2.2 REJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_address_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 + run_tests $ns1 $ns2 10.0.1.1 + join_syn_tx=3D1 \ + chk_join_nr 0 0 0 + chk_add_nr 1 1 + fi + + # address endpoints: this endpoint is used + if reset_with_tcp_filter "with address endpoint" ns1 10.0.2.2 REJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_address_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 + pm_nl_add_endpoint $ns2 10.0.3.2 flags address + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 + fi + + # address endpoints: these endpoints are used + if reset_with_tcp_filter "with multiple address endpoints" ns1 10.0.2.2 R= EJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_address_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 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal + pm_nl_add_endpoint $ns2 dead:beef:3::2 flags address + pm_nl_add_endpoint $ns2 10.0.3.2 flags address + pm_nl_add_endpoint $ns2 10.0.4.2 flags address + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 2 2 2 + chk_add_nr 2 2 + fi + + # address endpoints: only one endpoint is used + if reset_with_tcp_filter "single address endpoints" ns1 10.0.2.2 REJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_address_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 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal + pm_nl_add_endpoint $ns2 10.0.3.2 flags address + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 2 2 + fi +} + link_failure_tests() { # accept and use add_addr with additional subflows and link loss @@ -4109,6 +4164,7 @@ all_tests_sorted=3D( f@subflows_tests e@subflows_error_tests s@signal_address_tests + A@address_endp_tests l@link_failure_tests t@add_addr_timeout_tests r@remove_tests diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index d4981b76693bbddca74169437a540ad6294cf1d5..9164c2e797bd003d933d274a547= 91b23928748f6 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -830,6 +830,8 @@ int add_addr(int fd, int pm_family, int argc, char *arg= v[]) flags |=3D MPTCP_PM_ADDR_FLAG_SUBFLOW; else if (!strcmp(tok, "signal")) flags |=3D MPTCP_PM_ADDR_FLAG_SIGNAL; + else if (!strcmp(tok, "address")) + flags |=3D MPTCP_PM_ADDR_FLAG_ADDRESS; else if (!strcmp(tok, "backup")) flags |=3D MPTCP_PM_ADDR_FLAG_BACKUP; else if (!strcmp(tok, "fullmesh")) @@ -1018,6 +1020,13 @@ static void print_addr(struct rtattr *attrs, int len) printf(","); } =20 + if (flags & MPTCP_PM_ADDR_FLAG_ADDRESS) { + printf("address"); + flags &=3D ~MPTCP_PM_ADDR_FLAG_ADDRESS; + if (flags) + printf(","); + } + if (flags & MPTCP_PM_ADDR_FLAG_BACKUP) { printf("backup"); flags &=3D ~MPTCP_PM_ADDR_FLAG_BACKUP; --=20 2.51.0