Skip to content

Commit e4a4d0c

Browse files
Geliang Tangintel-lab-lkp
authored andcommitted
selftests: mptcp: sockopt: add IP_FREEBIND tests
Add tests for IP_FREEBIND (IPv4) and IPV6_FREEBIND (IPv6): - Setsockopt helpers to enable FREEBIND - Getsockopt validation of the enabled state - Test integration for both address families - Script result reporting Signed-off-by: Geliang Tang <[email protected]>
1 parent 45c4183 commit e4a4d0c

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-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
@@ -233,12 +233,23 @@ static void do_setsockopt_bindtoifindex(int fd)
233233
perror("setsockopt(SO_BINDTOIFINDEX)");
234234
}
235235

236+
static void do_setsockopt_freebind(int fd)
237+
{
238+
int optname = (pf == AF_INET ? IP_FREEBIND : IPV6_FREEBIND);
239+
int level = (pf == AF_INET ? SOL_IP : SOL_IPV6);
240+
int enable = 1;
241+
242+
if (setsockopt(fd, level, optname, &enable, sizeof(enable)))
243+
perror("setsockopt(IP(V6)_FREEBIND)");
244+
}
245+
236246
static void do_setsockopts(int fd)
237247
{
238248
do_setsockopt_reuseaddr(fd);
239249
do_setsockopt_reuseport(fd);
240250
do_setsockopt_bindtodevice(fd);
241251
do_setsockopt_bindtoifindex(fd);
252+
do_setsockopt_freebind(fd);
242253
}
243254

244255
static int sock_listen_mptcp(const char * const listenaddr,
@@ -661,6 +672,20 @@ static void do_getsockopt_bindtoifindex(int fd)
661672
assert(ifindex == get_ifindex(fd, "lo"));
662673
}
663674

675+
static void do_getsockopt_freebind(int fd)
676+
{
677+
int optname = (pf == AF_INET ? IP_FREEBIND : IPV6_FREEBIND);
678+
int level = (pf == AF_INET ? SOL_IP : SOL_IPV6);
679+
socklen_t len;
680+
int enable;
681+
682+
len = sizeof(enable);
683+
if (getsockopt(fd, level, optname, &enable, &len))
684+
die_perror("getsockopt(IP(V6)_FREEBIND)");
685+
686+
assert(enable == 1);
687+
}
688+
664689
static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w)
665690
{
666691
do_getsockopt_mptcp_info(s, fd, w);
@@ -679,6 +704,8 @@ static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w)
679704
do_getsockopt_bindtodevice(fd);
680705

681706
do_getsockopt_bindtoifindex(fd);
707+
708+
do_getsockopt_freebind(fd);
682709
}
683710

684711
static void connect_one_server(int fd, int pipefd)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,8 @@ do_mptcp_sockopt_tests()
271271

272272
for opt in "SOL_MPTCP" \
273273
"SO_REUSEADDR" "SO_REUSEPORT" \
274-
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX"; do
274+
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX" \
275+
"IP_FREEBIND"; do
275276
print_title "$opt sockopt v4"
276277
mptcp_lib_pr_ok
277278
mptcp_lib_result_pass "$opt sockopt v4"
@@ -290,7 +291,8 @@ do_mptcp_sockopt_tests()
290291

291292
for opt in "SOL_MPTCP" \
292293
"SO_REUSEADDR" "SO_REUSEPORT" \
293-
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX"; do
294+
"SO_BINDTODEVICE" "SO_BINDTOIFINDEX" \
295+
"IPV6_FREEBIND"; do
294296
print_title "$opt sockopt v6"
295297
mptcp_lib_pr_ok
296298
mptcp_lib_result_pass "$opt sockopt v6"

0 commit comments

Comments
 (0)