[RFC mptcp-next v3 2/8] selftests: mptcp: sockopt: enhance compatibility with TCP tests

Geliang Tang posted 8 patches 5 days, 3 hours ago
[RFC mptcp-next v3 2/8] selftests: mptcp: sockopt: enhance compatibility with TCP tests
Posted by Geliang Tang 5 days, 3 hours ago
From: Geliang Tang <tanggeliang@kylinos.cn>

Enhance compatibility with TCP tests in mptcp_sockopt.c, skip mptcp
getsockopt checks during tcp tests since MPTCP socket options are not
available for them.

Co-developed-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../selftests/net/mptcp/mptcp_sockopt.c       | 25 +++++++++++++------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
index e4752f848f08..8fb04c19af5c 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c
@@ -383,8 +383,11 @@ static void do_getsockopt_mptcp_info(struct so_state *s, int fd, size_t w)
 	olen = sizeof(i);
 	ret = getsockopt(fd, SOL_MPTCP, MPTCP_INFO, &i, &olen);
 
-	if (ret < 0)
+	if (ret < 0) {
+		if (errno == EOPNOTSUPP || errno == ENOPROTOOPT)
+			return;
 		die_perror("getsockopt MPTCP_INFO");
+	}
 
 	s->pkt_stats_avail = olen >= sizeof(i);
 
@@ -414,8 +417,11 @@ static void do_getsockopt_tcp_info(struct so_state *s, int fd, size_t r, size_t
 		olen = sizeof(ti);
 
 		ret = getsockopt(fd, SOL_MPTCP, MPTCP_TCPINFO, &ti, &olen);
-		if (ret < 0)
+		if (ret < 0) {
+			if (errno == EOPNOTSUPP || errno == ENOPROTOOPT)
+				return;
 			xerror("getsockopt MPTCP_TCPINFO (tries %d, %m)");
+		}
 
 		assert(olen <= sizeof(ti));
 		assert(ti.d.size_kernel > 0);
@@ -469,8 +475,11 @@ static void do_getsockopt_subflow_addrs(struct so_state *s, int fd)
 	olen = sizeof(addrs);
 
 	ret = getsockopt(fd, SOL_MPTCP, MPTCP_SUBFLOW_ADDRS, &addrs, &olen);
-	if (ret < 0)
+	if (ret < 0) {
+		if (errno == EOPNOTSUPP || errno == ENOPROTOOPT)
+			return;
 		die_perror("getsockopt MPTCP_SUBFLOW_ADDRS");
+	}
 
 	assert(olen <= sizeof(addrs));
 	assert(addrs.d.size_kernel > 0);
@@ -541,10 +550,8 @@ static void do_getsockopt_mptcp_full_info(struct so_state *s, int fd)
 
 	ret = getsockopt(fd, SOL_MPTCP, MPTCP_FULL_INFO, &mfi, &olen);
 	if (ret < 0) {
-		if (errno == EOPNOTSUPP) {
-			perror("MPTCP_FULL_INFO test skipped");
+		if (errno == EOPNOTSUPP || errno == ENOPROTOOPT)
 			return;
-		}
 		xerror("getsockopt MPTCP_FULL_INFO");
 	}
 
@@ -650,7 +657,8 @@ static void connect_one_server(int fd, int pipefd)
 	if (eof)
 		total += 1; /* sequence advances due to FIN */
 
-	assert(s.mptcpi_rcv_delta == (uint64_t)total);
+	if (s.mptcpi_rcv_delta)
+		assert(s.mptcpi_rcv_delta == (uint64_t)total);
 	close(fd);
 }
 
@@ -685,7 +693,8 @@ static void process_one_client(int fd, int pipefd)
 		xerror("expected EOF, got %lu", ret3);
 
 	do_getsockopts(&s, fd, ret, ret2);
-	if (s.mptcpi_rcv_delta != (uint64_t)ret + 1)
+	if (s.mptcpi_rcv_delta &&
+	    s.mptcpi_rcv_delta != (uint64_t)ret + 1)
 		xerror("mptcpi_rcv_delta %" PRIu64 ", expect %" PRIu64 ", diff %" PRId64,
 		       s.mptcpi_rcv_delta, ret + 1, s.mptcpi_rcv_delta - (ret + 1));
 
-- 
2.51.0