[PATCH mptcp-next v14 06/12] selftests: mptcp: sockopt: add tx/rx protocol options
Geliang Tang <[email protected]> Thu, 30 Jul 2026 11:15:17 +0800
| Newsgroups | dev.linux.lists.mptcp |
|---|---|
| Message-ID | <b241333fe471b6cb16e8ef407d624f066c552bbe.1785380422.git.tanggeliang@kylinos.cn> |
From: Geliang Tang <[email protected]> Add -t and -r options to specify tx/rx protocols (TCP/MPTCP). This increases testing flexibility by allowing explicit protocol selection for both transmission and reception paths. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang <[email protected]> --- .../selftests/net/mptcp/mptcp_sockopt.c | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c index 822cbf3de3e6..a62f6adda8a0 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -39,6 +39,9 @@ static int pf = AF_INET; #define TCP_IS_MPTCP 76 #endif +static int proto_tx = IPPROTO_MPTCP; +static int proto_rx = IPPROTO_MPTCP; + #ifndef MPTCP_INFO struct mptcp_info { __u8 mptcpi_subflows; @@ -142,6 +145,7 @@ static void __noreturn die_perror(const char *msg) static void die_usage(int r) { fprintf(stderr, "Usage: mptcp_sockopt [-6]\n"); + fprintf(stderr, " [-t tcp|mptcp] [-r tcp|mptcp]\n"); exit(r); } @@ -207,7 +211,7 @@ static int sock_listen_mptcp(const char * const listenaddr, hints.ai_family = pf; for (a = addr; a; a = a->ai_next) { - sock = socket(a->ai_family, a->ai_socktype, IPPROTO_MPTCP); + sock = socket(a->ai_family, a->ai_socktype, proto_rx); if (sock < 0) continue; @@ -265,11 +269,22 @@ static int sock_connect_mptcp(const char * const remoteaddr, return sock; } +static int protostr_to_num(const char *s) +{ + if (strcasecmp(s, "tcp") == 0) + return IPPROTO_TCP; + if (strcasecmp(s, "mptcp") == 0) + return IPPROTO_MPTCP; + + die_usage(1); + return 0; +} + static void parse_opts(int argc, char **argv) { int c; - while ((c = getopt(argc, argv, "h6")) != -1) { + while ((c = getopt(argc, argv, "h6t:r:")) != -1) { switch (c) { case 'h': die_usage(0); @@ -277,6 +292,12 @@ static void parse_opts(int argc, char **argv) case '6': pf = AF_INET6; break; + case 't': + proto_tx = protostr_to_num(optarg); + break; + case 'r': + proto_rx = protostr_to_num(optarg); + break; default: die_usage(1); break; @@ -811,10 +832,10 @@ static int client(int pipefd) switch (pf) { case AF_INET: - fd = sock_connect_mptcp("127.0.0.1", "15432", IPPROTO_MPTCP); + fd = sock_connect_mptcp("127.0.0.1", "15432", proto_tx); break; case AF_INET6: - fd = sock_connect_mptcp("::1", "15432", IPPROTO_MPTCP); + fd = sock_connect_mptcp("::1", "15432", proto_tx); break; default: xerror("Unknown pf %d\n", pf); -- 2.53.0