From b7cffae5d484b986a99deb61cd3e4c4bb8838fb3 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Fri, 23 Nov 2012 16:37:39 +0400 Subject: [PATCH] zdtm: adapt all tcp tests for ipv6 Signed-off-by: Andrey Vagin Signed-off-by: Pavel Emelyanov --- test/zdtm.sh | 4 +++ test/zdtm/lib/tcp.c | 46 +++++++++++++++++++------- test/zdtm/lib/zdtmtst.h | 4 +-- test/zdtm/live/static/Makefile | 6 ++++ test/zdtm/live/static/socket-tcp.c | 11 ++++-- test/zdtm/live/static/socket-tcp6.c | 1 + test/zdtm/live/static/socket-tcpbuf.c | 13 ++++++-- test/zdtm/live/static/socket-tcpbuf6.c | 1 + test/zdtm/live/static/socket_aio.c | 5 +-- test/zdtm/live/static/socket_listen.c | 11 ++++-- test/zdtm/live/static/socket_listen6.c | 1 + test/zdtm/live/streaming/Makefile | 2 ++ test/zdtm/live/streaming/socket-tcp6.c | 1 + 13 files changed, 83 insertions(+), 23 deletions(-) create mode 120000 test/zdtm/live/static/socket-tcp6.c create mode 120000 test/zdtm/live/static/socket-tcpbuf6.c create mode 120000 test/zdtm/live/static/socket_listen6.c create mode 120000 test/zdtm/live/streaming/socket-tcp6.c diff --git a/test/zdtm.sh b/test/zdtm.sh index 56f1d5391..20d726738 100644 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -46,6 +46,7 @@ static/pstree static/caps00 static/cmdlinenv00 static/socket_listen +static/socket_listen6 static/packet_sock static/socket_udp static/sock_filter @@ -80,8 +81,11 @@ TEST_LIST="$TEST_LIST static/file_fown static/socket-ext static/socket-tcp +static/socket-tcp6 streaming/socket-tcp +streaming/socket-tcp6 static/socket-tcpbuf +static/socket-tcpbuf6 static/pty03 " diff --git a/test/zdtm/lib/tcp.c b/test/zdtm/lib/tcp.c index eb88de8fb..cbdc52a83 100644 --- a/test/zdtm/lib/tcp.c +++ b/test/zdtm/lib/tcp.c @@ -4,16 +4,28 @@ #include "zdtmtst.h" -int tcp_init_server(int *port) +union sockaddr_inet { + struct sockaddr_in v4; + struct sockaddr_in6 v6; +}; + +int tcp_init_server(int family, int *port) { - struct sockaddr_in addr; + union sockaddr_inet addr; int sock; int yes = 1, ret; memset(&addr,0,sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr("0.0.0.0"); - sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (family == AF_INET) { + addr.v4.sin_family = family; + inet_pton(family, "0.0.0.0", &(addr.v4.sin_addr)); + } else if (family == AF_INET6){ + addr.v6.sin6_family = family; + inet_pton(family, "::0", &(addr.v6.sin6_addr)); + } else + return -1; + + sock = socket(family, SOCK_STREAM, IPPROTO_TCP); if (sock == -1) { err ("socket() failed %m"); return -1; @@ -25,7 +37,11 @@ int tcp_init_server(int *port) } while (1) { - addr.sin_port = htons(*port); + if (family == AF_INET) + addr.v4.sin_port = htons(*port); + else if (family == AF_INET6) + addr.v6.sin6_port = htons(*port); + ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr)); /* crtools doesn't restore sock opts, so we need this hack */ @@ -71,20 +87,26 @@ int tcp_accept_server(int sock) return sock2; } -int tcp_init_client(char *servIP, unsigned short servPort) +int tcp_init_client(int family, char *servIP, unsigned short servPort) { int sock; - struct sockaddr_in servAddr; + union sockaddr_inet servAddr; - if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { + if ((sock = socket(family, SOCK_STREAM, IPPROTO_TCP)) < 0) { err("can't create socket %m"); return -1; } /* Construct the server address structure */ memset(&servAddr, 0, sizeof(servAddr)); - servAddr.sin_family = AF_INET; - servAddr.sin_addr.s_addr = inet_addr(servIP); - servAddr.sin_port = htons(servPort); + if (family == AF_INET) { + servAddr.v4.sin_family = AF_INET; + servAddr.v4.sin_port = htons(servPort); + inet_pton(AF_INET, servIP, &servAddr.v4.sin_addr); + } else { + servAddr.v6.sin6_family = AF_INET6; + servAddr.v6.sin6_port = htons(servPort); + inet_pton(AF_INET6, servIP, &servAddr.v6.sin6_addr); + } if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) { err("can't connect to server %m"); return -1; diff --git a/test/zdtm/lib/zdtmtst.h b/test/zdtm/lib/zdtmtst.h index 6a2156912..323b70e63 100644 --- a/test/zdtm/lib/zdtmtst.h +++ b/test/zdtm/lib/zdtmtst.h @@ -111,8 +111,8 @@ extern void task_waiter_fini(task_waiter_t *t); extern void task_waiter_wait4(task_waiter_t *t, unsigned int lockid); extern void task_waiter_complete(task_waiter_t *t, unsigned int lockid); extern void task_waiter_complete_current(task_waiter_t *t); -extern int tcp_init_server(int *port); +extern int tcp_init_server(int family, int *port); extern int tcp_accept_server(int sock); -extern int tcp_init_client(char *servIP, unsigned short servPort); +extern int tcp_init_client(int family, char *servIP, unsigned short servPort); #endif /* _VIMITESU_H_ */ diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile index e36571397..551102d7f 100644 --- a/test/zdtm/live/static/Makefile +++ b/test/zdtm/live/static/Makefile @@ -22,6 +22,7 @@ TST_NOFILE = \ sched_prio00 \ sched_policy00 \ socket_listen \ + socket_listen6 \ socket_udp \ socket6_udp \ socket_udplite \ @@ -47,7 +48,9 @@ TST_NOFILE = \ socket_queues \ socket_queues02 \ socket-tcp \ + socket-tcp6 \ socket-tcpbuf \ + socket-tcpbuf6 \ sock_opts00 \ sock_opts01 \ sk-unix-unconn \ @@ -209,6 +212,9 @@ shm: override CFLAGS += -DNEW_IPC_NS msgque: override CFLAGS += -DNEW_IPC_NS sem: override CFLAGS += -DNEW_IPC_NS posix_timers: override LDLIBS += -lrt +socket-tcp6: override CFLAGS += -D ZDTM_IPV6 +socket-tcpbuf6: override CFLAGS += -D ZDTM_IPV6 +socket_listen6: override CFLAGS += -D ZDTM_IPV6 $(LIB): force $(MAKE) -C $(LIBDIR) diff --git a/test/zdtm/live/static/socket-tcp.c b/test/zdtm/live/static/socket-tcp.c index 747e9f03b..b37f012be 100644 --- a/test/zdtm/live/static/socket-tcp.c +++ b/test/zdtm/live/static/socket-tcp.c @@ -1,5 +1,11 @@ #include "zdtmtst.h" +#ifdef ZDTM_IPV6 +#define ZDTM_FAMILY AF_INET6 +#else +#define ZDTM_FAMILY AF_INET +#endif + const char *test_doc = "Check, that a TCP connection can be restored\n"; const char *test_author = "Andrey Vagin #include #include +#include static int port = 8880; @@ -70,7 +77,7 @@ int main(int argc, char **argv) return 1; } - fd = tcp_init_client("127.0.0.1", port); + fd = tcp_init_client(ZDTM_FAMILY, "localhost", port); if (fd < 0) return 1; @@ -108,7 +115,7 @@ int main(int argc, char **argv) test_init(argc, argv); - if ((fd_s = tcp_init_server(&port)) < 0) { + if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) { err("initializing server failed"); return 1; } diff --git a/test/zdtm/live/static/socket-tcp6.c b/test/zdtm/live/static/socket-tcp6.c new file mode 120000 index 000000000..8cb60dd03 --- /dev/null +++ b/test/zdtm/live/static/socket-tcp6.c @@ -0,0 +1 @@ +socket-tcp.c \ No newline at end of file diff --git a/test/zdtm/live/static/socket-tcpbuf.c b/test/zdtm/live/static/socket-tcpbuf.c index 461897465..57a17a1e8 100644 --- a/test/zdtm/live/static/socket-tcpbuf.c +++ b/test/zdtm/live/static/socket-tcpbuf.c @@ -1,5 +1,11 @@ #include "zdtmtst.h" +#ifdef ZDTM_IPV6 +#define ZDTM_FAMILY AF_INET6 +#else +#define ZDTM_FAMILY AF_INET +#endif + const char *test_doc = "Check full tcp buffers with custom sizes\n"; const char *test_author = "Andrey Vagin #include #include +#include static int port = 8880; @@ -110,11 +117,11 @@ int main(int argc, char **argv) return 1; } - fd = tcp_init_client("127.0.0.1", port); + fd = tcp_init_client(ZDTM_FAMILY, "127.0.0.1", port); if (fd < 0) return 1; - ctl_fd = tcp_init_client("127.0.0.1", port); + ctl_fd = tcp_init_client(ZDTM_FAMILY, "127.0.0.1", port); if (fd < 0) return 1; @@ -149,7 +156,7 @@ int main(int argc, char **argv) test_init(argc, argv); - if ((fd_s = tcp_init_server(&port)) < 0) { + if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) { err("initializing server failed"); return 1; } diff --git a/test/zdtm/live/static/socket-tcpbuf6.c b/test/zdtm/live/static/socket-tcpbuf6.c new file mode 120000 index 000000000..58c46c74a --- /dev/null +++ b/test/zdtm/live/static/socket-tcpbuf6.c @@ -0,0 +1 @@ +socket-tcpbuf.c \ No newline at end of file diff --git a/test/zdtm/live/static/socket_aio.c b/test/zdtm/live/static/socket_aio.c index 8779e8fe1..b7925f264 100644 --- a/test/zdtm/live/static/socket_aio.c +++ b/test/zdtm/live/static/socket_aio.c @@ -17,6 +17,7 @@ const char *test_author = "Andrew Vagin "; #include #include #include +#include static int port = 8880; @@ -34,7 +35,7 @@ int main(int argc, char **argv) test_init(argc, argv); - if ((fd_s = tcp_init_server(&port)) < 0) { + if ((fd_s = tcp_init_server(AF_INET, &port)) < 0) { err("initializing server failed"); return 1; } @@ -50,7 +51,7 @@ int main(int argc, char **argv) * Chiled is client of TCP connection */ close(fd_s); - fd = tcp_init_client("127.0.0.1", port); + fd = tcp_init_client(AF_INET, "127.0.0.1", port); if (fd < 0) return 1; diff --git a/test/zdtm/live/static/socket_listen.c b/test/zdtm/live/static/socket_listen.c index def309fcf..6aef4a65b 100644 --- a/test/zdtm/live/static/socket_listen.c +++ b/test/zdtm/live/static/socket_listen.c @@ -1,5 +1,11 @@ #include "zdtmtst.h" +#ifdef ZDTM_IPV6 +#define ZDTM_FAMILY AF_INET6 +#else +#define ZDTM_FAMILY AF_INET +#endif + const char *test_doc = "static test for listening socket\n"; const char *test_author = "Stanislav Kinsbursky "; @@ -14,6 +20,7 @@ const char *test_author = "Stanislav Kinsbursky "; #include #include #include +#include static int port = 8880; @@ -36,7 +43,7 @@ int main(int argc, char **argv) test_init(argc, argv); - if ((fd_s = tcp_init_server(&port)) < 0) { + if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) { err("initializing server failed"); return 1; } @@ -59,7 +66,7 @@ int main(int argc, char **argv) * Chiled is client of TCP connection */ close(fd_s); - fd = tcp_init_client("127.0.0.1", port); + fd = tcp_init_client(ZDTM_FAMILY, "localhost", port); if (fd < 0) return 1; diff --git a/test/zdtm/live/static/socket_listen6.c b/test/zdtm/live/static/socket_listen6.c new file mode 120000 index 000000000..d026b3bf8 --- /dev/null +++ b/test/zdtm/live/static/socket_listen6.c @@ -0,0 +1 @@ +socket_listen.c \ No newline at end of file diff --git a/test/zdtm/live/streaming/Makefile b/test/zdtm/live/streaming/Makefile index b9a9f847f..24b96a2c6 100644 --- a/test/zdtm/live/streaming/Makefile +++ b/test/zdtm/live/streaming/Makefile @@ -10,6 +10,7 @@ TST_NOFILE = \ netlink00 \ file_aio \ socket-tcp \ + socket-tcp6 \ TST_FILE = \ unix_sock \ @@ -60,6 +61,7 @@ $(TST): $(LIB) file_aio: override LDLIBS += -lrt -pthread socket-tcp: override CFLAGS += -D STREAM +socket-tcp6: override CFLAGS += -D ZDTM_IPV6 -D STREAM $(LIB): force $(MAKE) -C $(LIBDIR) diff --git a/test/zdtm/live/streaming/socket-tcp6.c b/test/zdtm/live/streaming/socket-tcp6.c new file mode 120000 index 000000000..772a5dd6e --- /dev/null +++ b/test/zdtm/live/streaming/socket-tcp6.c @@ -0,0 +1 @@ +../static/socket-tcp.c \ No newline at end of file