Skip to content

Commit 61eeeb3

Browse files
Geliang Tangintel-lab-lkp
authored andcommitted
selftests: mptcp: sockopt: add IP_TRANSPARENT tests
Implement tests for transparent socket options: - IP_TRANSPARENT (IPv4) and IPV6_TRANSPARENT (IPv6) - Setsockopt and getsockopt helpers - State verification after setting - IPv4/IPv6 coverage in test script Signed-off-by: Geliang Tang <[email protected]>
1 parent e4a4d0c commit 61eeeb3

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

tools/testing/selftests/net/mptcp/mptcp_sockopt.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,24 @@ static void do_setsockopt_freebind(int fd)
243243
perror("setsockopt(IP(V6)_FREEBIND)");
244244
}
245245

246+
static void do_setsockopt_transparent(int fd)
247+
{
248+
int optname = (pf == AF_INET ? IP_TRANSPARENT : IPV6_TRANSPARENT);
249+
int level = (pf == AF_INET ? SOL_IP : SOL_IPV6);
250+
int enable = 1;
251+
252+
if (setsockopt(fd, level, optname, &enable, sizeof(enable)))
253+
perror("setsockopt(IP(V6)_TRANSPARENT)");
254+
}
255+
246256
static void do_setsockopts(int fd)
247257
{
248258
do_setsockopt_reuseaddr(fd);
249259
do_setsockopt_reuseport(fd);
250260
do_setsockopt_bindtodevice(fd);
251261
do_setsockopt_bindtoifindex(fd);
252262
do_setsockopt_freebind(fd);
263+
do_setsockopt_transparent(fd);
253264
}
254265

255266
static int sock_listen_mptcp(const char * const listenaddr,
@@ -686,6 +697,20 @@ static void do_getsockopt_freebind(int fd)
686697
assert(enable == 1);
687698
}
688699

700+
static void do_getsockopt_transparent(int fd)
701+
{
702+
int optname = (pf == AF_INET ? IP_TRANSPARENT : IPV6_TRANSPARENT);
703+
int level = (pf == AF_INET ? SOL_IP : SOL_IPV6);
704+
socklen_t len;
705+
int enable;
706+
707+
len = sizeof(enable);
708+
if (getsockopt(fd, level, optname, &enable, &len))
709+
die_perror("getsockopt(IP(V6)_TRANSPARENT)");
710+
711+
assert(enable == 1);
712+
}
713+
689714
static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w)
690715
{
691716
do_getsockopt_mptcp_info(s, fd, w);
@@ -706,6 +731,8 @@ static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w)
706731
do_getsockopt_bindtoifindex(fd);
707732

708733
do_getsockopt_freebind(fd);
734+
735+
do_getsockopt_transparent(fd);
709736
}
710737

711738
static void connect_one_server(int fd, int pipefd)

tools/testing/selftests/net/mptcp/mptcp_sockopt.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ do_mptcp_sockopt_tests()
272272
for opt in "SOL_MPTCP" \
273273
"SO_REUSEADDR" "SO_REUSEPORT" \
274274
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX" \
275-
"IP_FREEBIND"; do
275+
"IP_FREEBIND" "IP_TRANSPARENT"; do
276276
print_title "$opt sockopt v4"
277277
mptcp_lib_pr_ok
278278
mptcp_lib_result_pass "$opt sockopt v4"
@@ -292,7 +292,7 @@ do_mptcp_sockopt_tests()
292292
for opt in "SOL_MPTCP" \
293293
"SO_REUSEADDR" "SO_REUSEPORT" \
294294
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX" \
295-
"IPV6_FREEBIND"; do
295+
"IPV6_FREEBIND" "IPV6_TRANSPARENT"; do
296296
print_title "$opt sockopt v6"
297297
mptcp_lib_pr_ok
298298
mptcp_lib_result_pass "$opt sockopt v6"

0 commit comments

Comments
 (0)