diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2008-10-07 14:13:59 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2008-10-07 14:13:59 +0000 |
commit | dba96bd99f418347a2b5a34c23d6e39a5982d875 (patch) | |
tree | 085cdb0434aaeb7efe7b150c8ed9776677181595 /tools/regression/netinet/udpzerobyte | |
parent | f252d86740d5b3cddc98d3dbb649d8df190fdfce (diff) |
Add IPv6 support to zero-size UDP transmit/receive test.
Notes
Notes:
svn path=/head/; revision=183668
Diffstat (limited to 'tools/regression/netinet/udpzerobyte')
-rw-r--r-- | tools/regression/netinet/udpzerobyte/udpzerobyte.c | 74 |
1 files changed, 47 insertions, 27 deletions
diff --git a/tools/regression/netinet/udpzerobyte/udpzerobyte.c b/tools/regression/netinet/udpzerobyte/udpzerobyte.c index 986d24c380bc..4c8221b708a6 100644 --- a/tools/regression/netinet/udpzerobyte/udpzerobyte.c +++ b/tools/regression/netinet/udpzerobyte/udpzerobyte.c @@ -54,51 +54,71 @@ usage(void) errx(-1, "no arguments allowed\n"); } -int -main(int argc, __unused char *argv[]) +static void +test(int domain, const char *domainstr, struct sockaddr *sa, socklen_t salen) { - struct sockaddr_in sin; - int sock_send, sock_receive; - if (argc != 1) - usage(); - - sock_send = socket(PF_INET, SOCK_DGRAM, 0); + sock_send = socket(domain, SOCK_DGRAM, 0); if (sock_send < 0) - err(-1, "socket(PF_INET, SOCK_DGRAM, 0)"); + err(-1, "socket(%s, SOCK_DGRAM, 0)", domainstr); - sock_receive = socket(PF_INET, SOCK_DGRAM, 0); + sock_receive = socket(domain, SOCK_DGRAM, 0); if (sock_receive < 0) - err(-1, "socket(PF_INET, SOCK_DGRAM, 0)"); + err(-1, "socket(%s, SOCK_DGRAM, 0)", domainstr); - bzero(&sin, sizeof(sin)); - sin.sin_len = sizeof(sin); - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - sin.sin_port = htons(THEPORT); - if (bind(sock_receive, (struct sockaddr *)&sin, sizeof(sin)) < 0) - err(-1, "bind(sock_receive, %s:%d)", inet_ntoa(sin.sin_addr), - ntohs(sin.sin_port)); + if (bind(sock_receive, sa, salen) < 0) + err(-1, "Protocol %s bind(sock_receive)", domainstr); if (fcntl(sock_receive, F_SETFL, O_NONBLOCK, 1) < 0) - err(-1, "fcntl(sock_receive, FL_SETFL, O_NONBLOCK)"); + err(-1, "Protocll %s fcntl(sock_receive, FL_SETFL, " + "O_NONBLOCK)", domainstr); - if (connect(sock_send, (struct sockaddr *)&sin, sizeof(sin)) < 0) - err(-1, "connect(sock_send, %s:%d)", inet_ntoa(sin.sin_addr), - htons(sin.sin_port)); + if (connect(sock_send, sa, salen) < 0) + err(-1, "Protocol %s connect(sock_send)", domainstr); if (recv(sock_receive, NULL, 0, 0) >= 0 || errno != EAGAIN) - err(-1, "recv(sock_receive, NULL, 0) before"); + err(-1, "Protocol %s recv(sock_receive, NULL, 0) before", + domainstr); if (send(sock_send, NULL, 0, 0) < 0) - err(-1, "send(sock_send, NULL, 0)"); + err(-1, "Protocol %s send(sock_send, NULL, 0)", domainstr); (void)sleep(1); if (recv(sock_receive, NULL, 0, 0) < 0) - err(-1, "recv(sock_receive, NULL, 0) test"); + err(-1, "Protocol %s recv(sock_receive, NULL, 0) test", + domainstr); if (recv(sock_receive, NULL, 0, 0) >= 0 || errno != EAGAIN) - err(-1, "recv(sock_receive, NULL, 0) after"); + err(-1, "Protocol %s recv(sock_receive, NULL, 0) after", + domainstr); + +} + +int +main(int argc, __unused char *argv[]) +{ + struct sockaddr_in6 sin6; + struct sockaddr_in sin; + struct in6_addr loopback6addr = IN6ADDR_LOOPBACK_INIT; + + if (argc != 1) + usage(); + + bzero(&sin, sizeof(sin)); + sin.sin_len = sizeof(sin); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + sin.sin_port = htons(THEPORT); + + test(PF_INET, "PF_INET", (struct sockaddr *)&sin, sizeof(sin)); + + bzero(&sin6, sizeof(sin6)); + sin6.sin6_len = sizeof(sin6); + sin6.sin6_family = AF_INET6; + sin6.sin6_addr = loopback6addr; + sin6.sin6_port = htons(THEPORT); + + test(PF_INET6, "PF_INET6", (struct sockaddr *)&sin6, sizeof(sin6)); return (0); } |