Commit 46daab0b authored by Andrew Vagin's avatar Andrew Vagin Committed by Pavel Emelyanov

zdtm: check that the IP_FREEBIND is restored correctly

Signed-off-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent e6859679
......@@ -31,6 +31,8 @@ TST_NOFILE = \
socket_listen6 \
socket_udp \
socket6_udp \
sk-freebind \
sk-freebind-false \
socket_udplite \
socket_aio \
socket_close_data \
......@@ -354,6 +356,7 @@ maps02: get_smaps_bits.o
mlock_setuid: get_smaps_bits.o
inotify01: override CFLAGS += -DINOTIFY01
unlink_fstat01+: override CFLAGS += -DUNLINK_OVER
sk-freebind-false: override CFLAGS += -DZDTM_FREEBIND_FALSE
$(LIB): force
$(Q) $(MAKE) -C $(LIBDIR)
......
sk-freebind.c
\ No newline at end of file
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
#include "zdtmtst.h"
const char *test_doc = "Check that IP_FREEBIND is restored";
const char *test_author = "Andrew Vagin <avagin@virtuozzo.com>";
union sockaddr_inet {
struct sockaddr_in v4;
struct sockaddr_in6 v6;
};
int main(int argc, char **argv)
{
union sockaddr_inet addr;
socklen_t len;
int val, sock;
test_init(argc, argv);
addr.v6.sin6_family = AF_INET6;
inet_pton(AF_INET6, "2001:db8::ff00:42:8329", &(addr.v6.sin6_addr));
addr.v6.sin6_port = htons(56789);
sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
if (sock == -1) {
pr_perror("socket() failed");
return -1;
}
val = 1;
if (setsockopt(sock, SOL_IP, IP_FREEBIND, &val, sizeof(int)) == -1 ) {
pr_perror("setsockopt() error");
return -1;
}
if (bind(sock, (struct sockaddr *) &addr, sizeof(addr))) {
pr_perror("bind()");
return -1;
}
#ifdef ZDTM_FREEBIND_FALSE
val = 0;
if (setsockopt(sock, SOL_IP, IP_FREEBIND, &val, sizeof(int)) == -1 ) {
pr_perror("setsockopt() error");
return -1;
}
#endif
test_daemon();
test_waitsig();
len = sizeof(int);
if (getsockopt(sock, SOL_IP, IP_FREEBIND, &val, &len) == -1 ) {
pr_perror("setsockopt() error");
return -1;
}
#ifdef ZDTM_FREEBIND_FALSE
if (val) {
#else
if (val == 0) {
#endif
fail("Unexpected value: %d", val);
return -1;
}
pass();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment