Commit b7cffae5 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

zdtm: adapt all tcp tests for ipv6

Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 6b2d7f07
...@@ -46,6 +46,7 @@ static/pstree ...@@ -46,6 +46,7 @@ static/pstree
static/caps00 static/caps00
static/cmdlinenv00 static/cmdlinenv00
static/socket_listen static/socket_listen
static/socket_listen6
static/packet_sock static/packet_sock
static/socket_udp static/socket_udp
static/sock_filter static/sock_filter
...@@ -80,8 +81,11 @@ TEST_LIST="$TEST_LIST ...@@ -80,8 +81,11 @@ TEST_LIST="$TEST_LIST
static/file_fown static/file_fown
static/socket-ext static/socket-ext
static/socket-tcp static/socket-tcp
static/socket-tcp6
streaming/socket-tcp streaming/socket-tcp
streaming/socket-tcp6
static/socket-tcpbuf static/socket-tcpbuf
static/socket-tcpbuf6
static/pty03 static/pty03
" "
......
...@@ -4,16 +4,28 @@ ...@@ -4,16 +4,28 @@
#include "zdtmtst.h" #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 sock;
int yes = 1, ret; int yes = 1, ret;
memset(&addr,0,sizeof(addr)); memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET; if (family == AF_INET) {
addr.sin_addr.s_addr = inet_addr("0.0.0.0"); addr.v4.sin_family = family;
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 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) { if (sock == -1) {
err ("socket() failed %m"); err ("socket() failed %m");
return -1; return -1;
...@@ -25,7 +37,11 @@ int tcp_init_server(int *port) ...@@ -25,7 +37,11 @@ int tcp_init_server(int *port)
} }
while (1) { 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)); ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
/* crtools doesn't restore sock opts, so we need this hack */ /* crtools doesn't restore sock opts, so we need this hack */
...@@ -71,20 +87,26 @@ int tcp_accept_server(int sock) ...@@ -71,20 +87,26 @@ int tcp_accept_server(int sock)
return sock2; return sock2;
} }
int tcp_init_client(char *servIP, unsigned short servPort) int tcp_init_client(int family, char *servIP, unsigned short servPort)
{ {
int sock; 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"); err("can't create socket %m");
return -1; return -1;
} }
/* Construct the server address structure */ /* Construct the server address structure */
memset(&servAddr, 0, sizeof(servAddr)); memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET; if (family == AF_INET) {
servAddr.sin_addr.s_addr = inet_addr(servIP); servAddr.v4.sin_family = AF_INET;
servAddr.sin_port = htons(servPort); 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) { if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) {
err("can't connect to server %m"); err("can't connect to server %m");
return -1; return -1;
......
...@@ -111,8 +111,8 @@ extern void task_waiter_fini(task_waiter_t *t); ...@@ -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_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(task_waiter_t *t, unsigned int lockid);
extern void task_waiter_complete_current(task_waiter_t *t); 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_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_ */ #endif /* _VIMITESU_H_ */
...@@ -22,6 +22,7 @@ TST_NOFILE = \ ...@@ -22,6 +22,7 @@ TST_NOFILE = \
sched_prio00 \ sched_prio00 \
sched_policy00 \ sched_policy00 \
socket_listen \ socket_listen \
socket_listen6 \
socket_udp \ socket_udp \
socket6_udp \ socket6_udp \
socket_udplite \ socket_udplite \
...@@ -47,7 +48,9 @@ TST_NOFILE = \ ...@@ -47,7 +48,9 @@ TST_NOFILE = \
socket_queues \ socket_queues \
socket_queues02 \ socket_queues02 \
socket-tcp \ socket-tcp \
socket-tcp6 \
socket-tcpbuf \ socket-tcpbuf \
socket-tcpbuf6 \
sock_opts00 \ sock_opts00 \
sock_opts01 \ sock_opts01 \
sk-unix-unconn \ sk-unix-unconn \
...@@ -209,6 +212,9 @@ shm: override CFLAGS += -DNEW_IPC_NS ...@@ -209,6 +212,9 @@ shm: override CFLAGS += -DNEW_IPC_NS
msgque: override CFLAGS += -DNEW_IPC_NS msgque: override CFLAGS += -DNEW_IPC_NS
sem: override CFLAGS += -DNEW_IPC_NS sem: override CFLAGS += -DNEW_IPC_NS
posix_timers: override LDLIBS += -lrt 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 $(LIB): force
$(MAKE) -C $(LIBDIR) $(MAKE) -C $(LIBDIR)
......
#include "zdtmtst.h" #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_doc = "Check, that a TCP connection can be restored\n";
const char *test_author = "Andrey Vagin <avagin@parallels.com"; const char *test_author = "Andrey Vagin <avagin@parallels.com";
...@@ -10,6 +16,7 @@ const char *test_author = "Andrey Vagin <avagin@parallels.com"; ...@@ -10,6 +16,7 @@ const char *test_author = "Andrey Vagin <avagin@parallels.com";
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <signal.h> #include <signal.h>
#include <netinet/tcp.h>
static int port = 8880; static int port = 8880;
...@@ -70,7 +77,7 @@ int main(int argc, char **argv) ...@@ -70,7 +77,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
fd = tcp_init_client("127.0.0.1", port); fd = tcp_init_client(ZDTM_FAMILY, "localhost", port);
if (fd < 0) if (fd < 0)
return 1; return 1;
...@@ -108,7 +115,7 @@ int main(int argc, char **argv) ...@@ -108,7 +115,7 @@ int main(int argc, char **argv)
test_init(argc, 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"); err("initializing server failed");
return 1; return 1;
} }
......
socket-tcp.c
\ No newline at end of file
#include "zdtmtst.h" #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_doc = "Check full tcp buffers with custom sizes\n";
const char *test_author = "Andrey Vagin <avagin@parallels.com"; const char *test_author = "Andrey Vagin <avagin@parallels.com";
...@@ -12,6 +18,7 @@ const char *test_author = "Andrey Vagin <avagin@parallels.com"; ...@@ -12,6 +18,7 @@ const char *test_author = "Andrey Vagin <avagin@parallels.com";
#include <signal.h> #include <signal.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/tcp.h>
static int port = 8880; static int port = 8880;
...@@ -110,11 +117,11 @@ int main(int argc, char **argv) ...@@ -110,11 +117,11 @@ int main(int argc, char **argv)
return 1; 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) if (fd < 0)
return 1; 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) if (fd < 0)
return 1; return 1;
...@@ -149,7 +156,7 @@ int main(int argc, char **argv) ...@@ -149,7 +156,7 @@ int main(int argc, char **argv)
test_init(argc, 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"); err("initializing server failed");
return 1; return 1;
} }
......
socket-tcpbuf.c
\ No newline at end of file
...@@ -17,6 +17,7 @@ const char *test_author = "Andrew Vagin <avagin@parallels.com>"; ...@@ -17,6 +17,7 @@ const char *test_author = "Andrew Vagin <avagin@parallels.com>";
#include <stdlib.h> #include <stdlib.h>
#include <aio.h> #include <aio.h>
#include <wait.h> #include <wait.h>
#include <netinet/tcp.h>
static int port = 8880; static int port = 8880;
...@@ -34,7 +35,7 @@ int main(int argc, char **argv) ...@@ -34,7 +35,7 @@ int main(int argc, char **argv)
test_init(argc, 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"); err("initializing server failed");
return 1; return 1;
} }
...@@ -50,7 +51,7 @@ int main(int argc, char **argv) ...@@ -50,7 +51,7 @@ int main(int argc, char **argv)
* Chiled is client of TCP connection * Chiled is client of TCP connection
*/ */
close(fd_s); 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) if (fd < 0)
return 1; return 1;
......
#include "zdtmtst.h" #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_doc = "static test for listening socket\n";
const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>"; const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>";
...@@ -14,6 +20,7 @@ const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>"; ...@@ -14,6 +20,7 @@ const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>";
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <wait.h> #include <wait.h>
#include <netinet/tcp.h>
static int port = 8880; static int port = 8880;
...@@ -36,7 +43,7 @@ int main(int argc, char **argv) ...@@ -36,7 +43,7 @@ int main(int argc, char **argv)
test_init(argc, 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"); err("initializing server failed");
return 1; return 1;
} }
...@@ -59,7 +66,7 @@ int main(int argc, char **argv) ...@@ -59,7 +66,7 @@ int main(int argc, char **argv)
* Chiled is client of TCP connection * Chiled is client of TCP connection
*/ */
close(fd_s); close(fd_s);
fd = tcp_init_client("127.0.0.1", port); fd = tcp_init_client(ZDTM_FAMILY, "localhost", port);
if (fd < 0) if (fd < 0)
return 1; return 1;
......
socket_listen.c
\ No newline at end of file
...@@ -10,6 +10,7 @@ TST_NOFILE = \ ...@@ -10,6 +10,7 @@ TST_NOFILE = \
netlink00 \ netlink00 \
file_aio \ file_aio \
socket-tcp \ socket-tcp \
socket-tcp6 \
TST_FILE = \ TST_FILE = \
unix_sock \ unix_sock \
...@@ -60,6 +61,7 @@ $(TST): $(LIB) ...@@ -60,6 +61,7 @@ $(TST): $(LIB)
file_aio: override LDLIBS += -lrt -pthread file_aio: override LDLIBS += -lrt -pthread
socket-tcp: override CFLAGS += -D STREAM socket-tcp: override CFLAGS += -D STREAM
socket-tcp6: override CFLAGS += -D ZDTM_IPV6 -D STREAM
$(LIB): force $(LIB): force
$(MAKE) -C $(LIBDIR) $(MAKE) -C $(LIBDIR)
......
../static/socket-tcp.c
\ No newline at end of file
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