[CRIU] [PATCH v4 6/8] restore netns ipv4 conf all/default

Pavel Emelyanov xemul at parallels.com
Wed Oct 8 08:30:06 PDT 2014


On 10/08/2014 05:21 PM, Pavel Tikhomirov wrote:
> restore order:
> 1. default
> 2. all
> 3. devices
> 
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at parallels.com>
> ---
>  net.c | 36 +++++++++++++++++++++++++++++++++++-
>  1 file changed, 35 insertions(+), 1 deletion(-)
> 
> diff --git a/net.c b/net.c
> index c385363..30b9e4c 100644
> --- a/net.c
> +++ b/net.c
> @@ -603,6 +603,38 @@ static inline int restore_iptables(int pid)
>  	return ret;
>  }
>  
> +static int restore_netns_conf(int pid)
> +{
> +	int ret;
> +	int fd;
> +	NetnsEntry *netns;
> +
> +	fd = open_image(CR_FD_NETNS, O_RSTR, pid);

There can be no image by this name if they came from older CRIU.
Check your patch with -b option for zdtm.sh.

> +	if (fd < 0) {
> +		pr_err("Can not open netns image\n");
> +		return -1;
> +	}
> +
> +	ret = pb_read_one(fd, &netns, PB_NETNS);
> +	if (ret < 0) {
> +		pr_err("Can not read netns object\n");
> +		close(fd);
> +		return -1;
> +	}
> +
> +	ret = ipv4_conf_op("default", netns->def_conf, CTL_WRITE);
> +	if (ret < 0)
> +		goto err;
> +	ret = ipv4_conf_op("all", netns->all_conf, CTL_WRITE);

if (!ret)
	ret = ipv4_conf_op("all", ...)

is 2 lines shorter and doesn't use goto :)

> +err:
> +	netns_entry__free_unpacked(netns, NULL);
> +	close(fd);
> +	if (ret < 0)
> +		return -1;
> +
> +	return 0;
> +}
> +
>  static int mount_ns_sysfs(void)
>  {
>  	char sys_mount[] = "crtools-sys.XXXXXX";
> @@ -677,7 +709,9 @@ int prepare_net_ns(int pid)
>  {
>  	int ret;
>  
> -	ret = restore_links(pid);
> +	ret = restore_netns_conf(pid);
> +	if (!ret)
> +		ret = restore_links(pid);
>  	if (!ret)
>  		ret = restore_ifaddr(pid);
>  	if (!ret)
> 



More information about the CRIU mailing list