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