mptcp.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [RFC mptcp-next] selftests: mptcp: Add a test for self-conn fallback
@ 2025-08-14  6:58 Gang Yan
  2025-08-14  8:51 ` MPTCP CI
  0 siblings, 1 reply; 4+ messages in thread
From: Gang Yan @ 2025-08-14  6:58 UTC (permalink / raw)
  To: mptcp; +Cc: Gang Yan

The 'simultaneous_connect' is not coverd by selftests, so this patch
adds a test according to issue#35. When a client tries to connect to
itself, the msk should fallback to tcp due to 'SIMULTCONN'.

Signed-off-by: Gang Yan <yangang@kylinos.cn>
---
 .../selftests/net/mptcp/mptcp_connect.c       | 32 ++++++++++++++++++-
 .../selftests/net/mptcp/mptcp_connect.sh      | 29 +++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/testing/selftests/net/mptcp/mptcp_connect.c
index 4f07ac9fa207..e0caef9cbe5f 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c
@@ -44,6 +44,7 @@ extern int optind;
 #endif
 
 static int  poll_timeout = 10 * 1000;
+static bool abnormal_connection;
 static bool listen_mode;
 static bool quit;
 
@@ -1422,7 +1423,7 @@ static void parse_opts(int argc, char **argv)
 {
 	int c;
 
-	while ((c = getopt(argc, argv, "6c:f:hi:I:jlm:M:o:p:P:r:R:s:S:t:T:w:")) != -1) {
+	while ((c = getopt(argc, argv, "6c:f:hi:I:jlAm:M:o:p:P:r:R:s:S:t:T:w:")) != -1) {
 		switch (c) {
 		case 'f':
 			cfg_truncate = atoi(optarg);
@@ -1500,6 +1501,9 @@ static void parse_opts(int argc, char **argv)
 		case 'o':
 			parse_setsock_options(optarg);
 			break;
+		case 'A':
+			abnormal_connection = true;
+			break;
 		}
 	}
 
@@ -1511,6 +1515,29 @@ static void parse_opts(int argc, char **argv)
 		pf = AF_INET6;
 }
 
+int self_conn_no_listen(void)
+{
+	int fd = sock_listen_mptcp(cfg_host, cfg_port);
+	socklen_t addr_len = sizeof(struct sockaddr_in);
+	struct sockaddr_in addr;
+
+	if (fd < 0)
+		return 1;
+
+	if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) < 0) {
+		perror("getsockname() failed");
+		close(fd);
+		exit(1);
+	}
+
+	shutdown(fd, SHUT_RD);
+
+	connect(fd, (struct sockaddr *)&addr, addr_len);
+
+	close(fd);
+	return 0;
+}
+
 int main(int argc, char *argv[])
 {
 	init_rng();
@@ -1536,5 +1563,8 @@ int main(int argc, char *argv[])
 		return main_loop_s(fd);
 	}
 
+	if (abnormal_connection)
+		return self_conn_no_listen();
+
 	return main_loop();
 }
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 5e3c56253274..b0c68d83a28b 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -819,6 +819,32 @@ run_tests_disconnect()
 	connect_per_transfer=1
 }
 
+run_tests_selfconn_no_listen()
+{
+	local count
+	local msg
+
+	mptcp_lib_pr_info "${TEST_GROUP} test"
+
+	print_larger_title "Client fallback due to connecting to itself "
+	ip netns exec $1 ./mptcp_connect -p 10000 -s MPTCP -A 127.0.0.1
+	count=$(mptcp_lib_get_counter $1 "MPTcpExtSimultConnectFallback")
+
+	if [ -z "$count" ]; then
+		mptcp_lib_pr_skip "Self conn fallback counter not supported"
+		mptcp_lib_result_skip "${TEST_GROUP}"
+		msg="SKIP"
+	elif [ "$count" -le 0 ]; then
+		mptcp_lib_pr_fail "got $count self conn fallback expected 1"
+		msg="Fail"
+	else
+		mptcp_lib_pr_ok
+		msg="Pass"
+	fi
+
+	mptcp_lib_pr_info "test ${TEST_GROUP} ${msg}"
+}
+
 display_time()
 {
 	time_end=$(date +%s)
@@ -883,6 +909,9 @@ mptcp_lib_result_code "${ret}" "ping tests"
 stop_if_error "Could not even run ping tests"
 mptcp_lib_pr_ok
 
+TEST_GROUP=" test self connection"
+run_tests_selfconn_no_listen ${ns1}
+
 [ -n "$tc_loss" ] && tc -net "$ns2" qdisc add dev ns2eth3 root netem loss random $tc_loss delay ${tc_delay}ms
 tc_info="loss of $tc_loss "
 test "$tc_delay" -gt 0 && tc_info+="delay $tc_delay ms "
-- 
2.43.0


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

end of thread, other threads:[~2025-08-14 14:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14  6:58 [RFC mptcp-next] selftests: mptcp: Add a test for self-conn fallback Gang Yan
2025-08-14  8:51 ` MPTCP CI
2025-08-14  8:57   ` GangYan
2025-08-14 14:41     ` Matthieu Baerts

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).