aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2026-08-10 20:44:10 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2026-08-10 20:50:22 +0000
commite70e25761fca7607dfee8b8cfbd902cb1c9806cd (patch)
tree1c93f10473f909570dbe6668b624a33ec081e211
parent8f6d8a901671164360dee8fe40414006c8e9eaef (diff)
tests/netinet/socket_afinet: multibind second socket can be different
Allows to add tests to the table where the second socket doesn't take address from the first. No functional change yet, all tests test the same conditions. Differential Revision: https://reviews.freebsd.org/D58087
-rw-r--r--tests/sys/netinet/socket_afinet.c79
1 files changed, 40 insertions, 39 deletions
diff --git a/tests/sys/netinet/socket_afinet.c b/tests/sys/netinet/socket_afinet.c
index 787c340466b0..d0c09be18a7c 100644
--- a/tests/sys/netinet/socket_afinet.c
+++ b/tests/sys/netinet/socket_afinet.c
@@ -446,27 +446,22 @@ ATF_TC_BODY(multibind, tc)
{ SOCK_STREAM, LB, o, ADDR, o, F, F },
{ SOCK_STREAM, LB, o, PORT, o, F, F },
{ SOCK_STREAM, LB, o, LB, o, R, F },
- /*
- * ATM, expected result with wildcard first bind(2) is the same
- * as the result for the specified first bind(2). Thus, the
- * below block is copy-and-paste of the above with wild1 set.
- */
- { SOCK_STREAM, 0, x, 0, o, F, F },
- { SOCK_STREAM, 0, x, ADDR, o, F, F },
- { SOCK_STREAM, 0, x, PORT, o, F, F },
- { SOCK_STREAM, 0, x, LB, o, F, F },
- { SOCK_STREAM, ADDR, x, 0, o, F, F },
- { SOCK_STREAM, ADDR, x, ADDR, o, F, F },
- { SOCK_STREAM, ADDR, x, PORT, o, F, F },
- { SOCK_STREAM, ADDR, x, LB, o, F, F },
- { SOCK_STREAM, PORT, x, 0, o, F, F },
- { SOCK_STREAM, PORT, x, ADDR, o, F, F },
- { SOCK_STREAM, PORT, x, PORT, o, R, F },
- { SOCK_STREAM, PORT, x, LB, o, F, F },
- { SOCK_STREAM, LB, x, 0, o, F, F },
- { SOCK_STREAM, LB, x, ADDR, o, F, F },
- { SOCK_STREAM, LB, x, PORT, o, F, F },
- { SOCK_STREAM, LB, x, LB, o, R, F },
+ { SOCK_STREAM, 0, x, 0, x, F, F },
+ { SOCK_STREAM, 0, x, ADDR, x, F, F },
+ { SOCK_STREAM, 0, x, PORT, x, F, F },
+ { SOCK_STREAM, 0, x, LB, x, F, F },
+ { SOCK_STREAM, ADDR, x, 0, x, F, F },
+ { SOCK_STREAM, ADDR, x, ADDR, x, F, F },
+ { SOCK_STREAM, ADDR, x, PORT, x, F, F },
+ { SOCK_STREAM, ADDR, x, LB, x, F, F },
+ { SOCK_STREAM, PORT, x, 0, x, F, F },
+ { SOCK_STREAM, PORT, x, ADDR, x, F, F },
+ { SOCK_STREAM, PORT, x, PORT, x, R, F },
+ { SOCK_STREAM, PORT, x, LB, x, F, F },
+ { SOCK_STREAM, LB, x, 0, x, F, F },
+ { SOCK_STREAM, LB, x, ADDR, x, F, F },
+ { SOCK_STREAM, LB, x, PORT, x, F, F },
+ { SOCK_STREAM, LB, x, LB, x, R, F },
/*
* ATM, expected result for SOCK_DGRAM is the same as for
* SOCK_STREAM. Thus the below is copy-and-paste of the above.
@@ -487,23 +482,22 @@ ATF_TC_BODY(multibind, tc)
{ SOCK_DGRAM, LB, o, ADDR, o, F, F },
{ SOCK_DGRAM, LB, o, PORT, o, F, F },
{ SOCK_DGRAM, LB, o, LB, o, R, F },
- /* wild1 -> true */
- { SOCK_DGRAM, 0, x, 0, o, F, F },
- { SOCK_DGRAM, 0, x, ADDR, o, F, F },
- { SOCK_DGRAM, 0, x, PORT, o, F, F },
- { SOCK_DGRAM, 0, x, LB, o, F, F },
- { SOCK_DGRAM, ADDR, x, 0, o, F, F },
- { SOCK_DGRAM, ADDR, x, ADDR, o, F, F },
- { SOCK_DGRAM, ADDR, x, PORT, o, F, F },
- { SOCK_DGRAM, ADDR, x, LB, o, F, F },
- { SOCK_DGRAM, PORT, x, 0, o, F, F },
- { SOCK_DGRAM, PORT, x, ADDR, o, F, F },
- { SOCK_DGRAM, PORT, x, PORT, o, R, F },
- { SOCK_DGRAM, PORT, x, LB, o, F, F },
- { SOCK_DGRAM, LB, x, 0, o, F, F },
- { SOCK_DGRAM, LB, x, ADDR, o, F, F },
- { SOCK_DGRAM, LB, x, PORT, o, F, F },
- { SOCK_DGRAM, LB, x, LB, o, R, F },
+ { SOCK_DGRAM, 0, x, 0, x, F, F },
+ { SOCK_DGRAM, 0, x, ADDR, x, F, F },
+ { SOCK_DGRAM, 0, x, PORT, x, F, F },
+ { SOCK_DGRAM, 0, x, LB, x, F, F },
+ { SOCK_DGRAM, ADDR, x, 0, x, F, F },
+ { SOCK_DGRAM, ADDR, x, ADDR, x, F, F },
+ { SOCK_DGRAM, ADDR, x, PORT, x, F, F },
+ { SOCK_DGRAM, ADDR, x, LB, x, F, F },
+ { SOCK_DGRAM, PORT, x, 0, x, F, F },
+ { SOCK_DGRAM, PORT, x, ADDR, x, F, F },
+ { SOCK_DGRAM, PORT, x, PORT, x, R, F },
+ { SOCK_DGRAM, PORT, x, LB, x, F, F },
+ { SOCK_DGRAM, LB, x, 0, x, F, F },
+ { SOCK_DGRAM, LB, x, ADDR, x, F, F },
+ { SOCK_DGRAM, LB, x, PORT, x, F, F },
+ { SOCK_DGRAM, LB, x, LB, x, R, F },
#undef F
#undef R
#undef x
@@ -550,6 +544,7 @@ ATF_TC_BODY(multibind, tc)
socklen_t slen;
enum bind_res res;
int s;
+ in_port_t port;
s = socket(wild[af].sa.sa_family, tests[i].type, 0);
ATF_REQUIRE(s >= 0);
@@ -561,7 +556,13 @@ ATF_TC_BODY(multibind, tc)
tests[i].opt1, &(int){1}, sizeof(int)) ==
0);
ATF_REQUIRE(getsockname(s, &su.sa, &slen) == 0);
-
+ _Static_assert(offsetof(struct sockaddr_in, sin_port)
+ == offsetof(struct sockaddr_in6, sin6_port),
+ "EDOOFUS");
+ port = su.sin.sin_port;
+ memcpy(&su, tests[i].wild2 ? &wild[af] : &loop[af],
+ sizeof(su));
+ su.sin.sin_port = port;
sa = &su.sa;
res = child_bind(tc, tests[i].type, sa, tests[i].opt2,
false);