[CRIU] [PATCH 2/2] zdtm: check a reseted tcp connect

Andrei Vagin avagin at virtuozzo.com
Tue Oct 10 04:00:11 MSK 2017


Applied

On Sat, Oct 07, 2017 at 12:31:55AM +0300, Andrei Vagin wrote:
> From: Andrei Vagin <avagin at virtuozzo.com>
> 
> This test create a closed socket with a non-empty sent queue.
> 
> Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
> ---
>  test/zdtm/static/Makefile                |  1 +
>  test/zdtm/static/socket-tcp-reseted.c    | 90 ++++++++++++++++++++++++++++++++
>  test/zdtm/static/socket-tcp-reseted.desc | 10 ++++
>  test/zdtm/static/socket-tcp-reseted.hook |  1 +
>  4 files changed, 102 insertions(+)
>  create mode 100644 test/zdtm/static/socket-tcp-reseted.c
>  create mode 100644 test/zdtm/static/socket-tcp-reseted.desc
>  create mode 120000 test/zdtm/static/socket-tcp-reseted.hook
> 
> diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile
> index 373c6c507..a9ee927d0 100644
> --- a/test/zdtm/static/Makefile
> +++ b/test/zdtm/static/Makefile
> @@ -63,6 +63,7 @@ TST_NOFILE	:=				\
>  		sockets_spair			\
>  		socket_queues			\
>  		socket-tcp			\
> +		socket-tcp-reseted		\
>  		socket-tcp6			\
>  		socket-tcp-local		\
>  		socket-tcp-nfconntrack		\
> diff --git a/test/zdtm/static/socket-tcp-reseted.c b/test/zdtm/static/socket-tcp-reseted.c
> new file mode 100644
> index 000000000..f5d1bfb92
> --- /dev/null
> +++ b/test/zdtm/static/socket-tcp-reseted.c
> @@ -0,0 +1,90 @@
> +
> +#include "zdtmtst.h"
> +#include <string.h>
> +#include <sys/socket.h>
> +#include <arpa/inet.h>  /* for sockaddr_in and inet_ntoa() */
> +#include <stdlib.h>
> +#include <sys/wait.h>
> +
> +
> +#ifdef ZDTM_IPV6
> +#define ZDTM_FAMILY AF_INET6
> +#else
> +#define ZDTM_FAMILY AF_INET
> +#endif
> +
> +const char *test_doc = "Check, that a reseted TCP connection can be restored\n";
> +const char *test_author = "Andrey Vagin <avagin at parallels.com";
> +
> +#include <stdio.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <string.h>
> +#include <errno.h>
> +#include <stdlib.h>
> +#include <signal.h>
> +#include <sched.h>
> +#include <netinet/tcp.h>
> +
> +static int port = 8880;
> +
> +int main(int argc, char **argv)
> +{
> +	int fd, fd_s, clt;
> +	char cmd[4096], buf[10];
> +
> +	test_init(argc, argv);
> +
> +	if ((fd_s = tcp_init_server(ZDTM_FAMILY, &port)) < 0) {
> +		pr_err("initializing server failed\n");
> +		return 1;
> +	}
> +
> +
> +	clt = tcp_init_client(ZDTM_FAMILY, "localhost", port);
> +	if (clt < 0) {
> +		pr_perror("Unable to create a client socket");
> +	        return 1;
> +	}
> +
> +	/*
> +	* parent is server of TCP connection
> +	*/
> +	fd = tcp_accept_server(fd_s);
> +	if (fd < 0) {
> +		pr_err("can't accept client connection\n");
> +		return 1;
> +	}
> +	if (write(clt, "asd", 3) != 3) {
> +		pr_perror("Unable to write into a socket");
> +		return 1;
> +	}
> +	snprintf(cmd, sizeof(cmd), "iptables -w -t filter --protocol tcp -A INPUT --dport %d -j REJECT --reject-with tcp-reset", port);
> +	if (system(cmd))
> +		return 1;
> +
> +	if (write(fd, "asdas", 5) == -1) {
> +		pr_perror("Unable to write into a socket");
> +		return 1;
> +	}
> +
> +	snprintf(cmd, sizeof(cmd), "iptables -w -t filter --protocol tcp -D INPUT --dport %d -j REJECT --reject-with tcp-reset", port);
> +	if (system(cmd))
> +		return 1;
> +
> +	test_daemon();
> +	test_waitsig();
> +
> +	if (read(fd, buf, sizeof(buf)) != 3) {
> +		fail("Unable to read data from a socket");
> +		return 1;
> +	}
> +
> +	if (write(fd, buf, 3) != -1) {
> +		fail("Can write into a closed socket");
> +		return 1;
> +	}
> +
> +	pass();
> +	return 0;
> +}
> diff --git a/test/zdtm/static/socket-tcp-reseted.desc b/test/zdtm/static/socket-tcp-reseted.desc
> new file mode 100644
> index 000000000..c026d9d61
> --- /dev/null
> +++ b/test/zdtm/static/socket-tcp-reseted.desc
> @@ -0,0 +1,10 @@
> +{   'deps': [   '/bin/sh',
> +                '/sbin/iptables',
> +                '/usr/lib64/xtables/libxt_tcp.so|/lib/xtables/libxt_tcp.so|/usr/lib/powerpc64le-linux-gnu/xtables/libxt_tcp.so|/usr/lib/x86_64-linux-gnu/xtables/libxt_tcp.so',
> +                '/usr/lib64/xtables/libxt_standard.so|/lib/xtables/libxt_standard.so|/usr/lib/powerpc64le-linux-gnu/xtables/libxt_standard.so|/usr/lib/x86_64-linux-gnu/xtables/libxt_standard.so',
> +		'/usr/lib64/xtables/libipt_REJECT.so|/lib/xtables/libipt_REJECT.so|/usr/lib/powerpc64le-linux-gnu/xtables/libipt_REJECT.so|/usr/lib/x86_64-linux-gnu/xtables/libipt_REJECT.so',
> +       ],
> +       'opts': '--tcp-established',
> +       'flags': 'suid nouser samens',
> +       'feature' : 'tcp_half_closed'
> +}
> diff --git a/test/zdtm/static/socket-tcp-reseted.hook b/test/zdtm/static/socket-tcp-reseted.hook
> new file mode 120000
> index 000000000..73d7da1c4
> --- /dev/null
> +++ b/test/zdtm/static/socket-tcp-reseted.hook
> @@ -0,0 +1 @@
> +socket-tcp-fin-wait1.hook
> \ No newline at end of file
> -- 
> 2.13.3
> 


More information about the CRIU mailing list