[CRIU] [PATCH 2/2] test: Add simple socket-raw test

Pavel Emelyanov xemul at virtuozzo.com
Thu Nov 17 01:35:20 PST 2016


On 11/16/2016 01:59 PM, Cyrill Gorcunov wrote:
> Trivial test for sockets dump support and restore.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
>  test/zdtm/static/Makefile        |  1 +
>  test/zdtm/static/socket-raw.c    | 86 ++++++++++++++++++++++++++++++++++++++++
>  test/zdtm/static/socket-raw.desc |  1 +
>  3 files changed, 88 insertions(+)
>  create mode 100644 test/zdtm/static/socket-raw.c
>  create mode 100644 test/zdtm/static/socket-raw.desc
> 
> diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile
> index f8a922b10025..f9ee5c4d449e 100644
> --- a/test/zdtm/static/Makefile
> +++ b/test/zdtm/static/Makefile
> @@ -63,6 +63,7 @@ TST_NOFILE	:=				\
>  		sockets_spair			\
>  		socket_queues			\
>  		socket_queues02			\
> +		socket-raw			\
>  		socket-tcp			\
>  		socket-tcp6			\
>  		socket-tcp-local		\
> diff --git a/test/zdtm/static/socket-raw.c b/test/zdtm/static/socket-raw.c
> new file mode 100644
> index 000000000000..598c565d4d80
> --- /dev/null
> +++ b/test/zdtm/static/socket-raw.c
> @@ -0,0 +1,86 @@
> +#define _GNU_SOURCE
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <ctype.h>
> +#include <errno.h>
> +#include <unistd.h>
> +
> +#include <sys/types.h>
> +#include <sys/socket.h>
> +#include <sys/wait.h>
> +#include <sys/un.h>
> +#include <sys/stat.h>
> +
> +#include <netinet/ip.h>
> +#include <arpa/inet.h>
> +
> +#include <limits.h>
> +#include <fcntl.h>
> +
> +#include "zdtmtst.h"
> +
> +const char *test_doc		= "Test RAW sockets (IPv4,6)\n";
> +const char *test_author		= "Cyrill Gorcunov <gorcunov at openvz.org";
> +
> +#ifndef SO_IP_SET
> +# define SO_IP_SET		83
> +#endif
> +
> +#ifndef IP_SET_OP_VERSION
> +# define IP_SET_OP_VERSION	0x00000100	/* Ask kernel version */
> +#endif
> +
> +struct ip_set_req_version {
> +	unsigned int	op;
> +	unsigned int	version;
> +};
> +
> +int main(int argc, char *argv[])
> +{
> +	struct ip_set_req_version req_version;
> +	socklen_t size = sizeof(req_version);
> +
> +	int sk_raw, sk6_raw, res;
> +	int sk_tcp, sk_udp;
> +
> +	test_init(argc, argv);
> +
> +	sk_raw = socket(PF_INET, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_RAW);
> +	if (sk_raw < 0) {
> +		pr_perror("Can't create IPv4 raw socket");
> +		exit(1);
> +	}
> +
> +	/* Simply to make sure it can be recreated on restore */
> +	sk6_raw = socket(PF_INET6, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_RAW);
> +	if (sk6_raw < 0) {
> +		pr_perror("Can't create IPv6 raw socket");
> +		exit(1);
> +	}
> +
> +	sk_tcp = socket(PF_INET, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_TCP);
> +	if (sk_tcp < 0) {
> +		pr_perror("Can't create IPv4 raw-tcp socket");
> +		exit(1);
> +	}
> +
> +	sk_udp = socket(PF_INET, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_UDP);
> +	if (sk_udp < 0) {
> +		pr_perror("Can't create IPv4 raw-udp socket");
> +		exit(1);
> +	}
> +
> +	test_daemon();
> +	test_waitsig();
> +
> +	req_version.op = IP_SET_OP_VERSION;
> +	res = getsockopt(sk_raw, SOL_IP, SO_IP_SET, &req_version, &size);

That's not a test. Since raw sockets are used by ping, add a test
that checks how ping works ;)

> +	if (res) {
> +		pr_perror("xt_set getsockopt");
> +	} else
> +		test_msg("SO_IP_SET version = %d\n", req_version.version);
> +
> +	pass();
> +	return 0;
> +}
> diff --git a/test/zdtm/static/socket-raw.desc b/test/zdtm/static/socket-raw.desc
> new file mode 100644
> index 000000000000..2eac7e654bf2
> --- /dev/null
> +++ b/test/zdtm/static/socket-raw.desc
> @@ -0,0 +1 @@
> +{'flags': 'suid'}
> 



More information about the CRIU mailing list