diff options
author | 2015-02-10 00:44:55 +0000 | |
---|---|---|
committer | 2015-02-10 00:44:55 +0000 | |
commit | 2fe8d5bd1781c009776f5687c63fd89f723091d3 (patch) | |
tree | 7e429df4d73d6051ba806bb863d5913a13e62cb4 | |
parent | add definitions for linux style locks (diff) | |
download | wireguard-openbsd-2fe8d5bd1781c009776f5687c63fd89f723091d3.tar.xz wireguard-openbsd-2fe8d5bd1781c009776f5687c63fd89f723091d3.zip |
Test that bind works the way it should. This fails at the moment because
of the garbage in sin_zero.
-rw-r--r-- | regress/sys/kern/bind/Makefile | 5 | ||||
-rw-r--r-- | regress/sys/kern/bind/bind.c | 46 |
2 files changed, 51 insertions, 0 deletions
diff --git a/regress/sys/kern/bind/Makefile b/regress/sys/kern/bind/Makefile new file mode 100644 index 00000000000..5a150163e50 --- /dev/null +++ b/regress/sys/kern/bind/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2015/02/10 00:44:55 claudio Exp $ + +PROG= bind + +.include <bsd.regress.mk> diff --git a/regress/sys/kern/bind/bind.c b/regress/sys/kern/bind/bind.c new file mode 100644 index 00000000000..3d235063d27 --- /dev/null +++ b/regress/sys/kern/bind/bind.c @@ -0,0 +1,46 @@ +#include <sys/socket.h> +#include <netinet/in.h> +#include <strings.h> +#include <err.h> + +int +main(int argc, char **argv) +{ + struct sockaddr_in addr1, addr2; + int fd1, fd2, enable = 1; + + addr1.sin_family = AF_INET; + addr1.sin_port = htons(6666); + addr1.sin_addr.s_addr = INADDR_ANY; + /* fill sin_zero explicitly with garbage */ + memset(addr1.sin_zero, 0xd0, sizeof(addr1.sin_zero)); + + addr2.sin_family = AF_INET; + addr2.sin_port = htons(6666); + addr2.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + /* fill sin_zero explicitly with garbage */ + memset(addr2.sin_zero, 0xd0, sizeof(addr2.sin_zero)); + + + if ((fd1 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) + err(1, "socket1"); + + if (setsockopt(fd1, SOL_SOCKET, SO_REUSEPORT, &enable, + sizeof(int)) < 0) + err(1, "setsockopt1"); + + if (bind(fd1, (struct sockaddr *)&addr1, sizeof(addr1)) == -1) + err(1, "bind1"); + + if ((fd2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) + err(1, "socket1"); + + if (setsockopt(fd2, SOL_SOCKET, SO_REUSEPORT, &enable, + sizeof(int)) < 0) + err(1, "setsockopt2"); + + if (bind(fd2, (struct sockaddr *)&addr2, sizeof(addr2)) == -1) + err(1, "bind2"); + + return 0; +} |