[CRIU] [PATCH 3/3] cpt: restore veth devices with correct names

Kir Kolyshkin kir at openvz.org
Wed May 29 19:55:58 EDT 2013


On 05/27/2013 02:12 PM, Andrey Vagin wrote:
> transmit pair of veth names to criu via the option --veth-pair
>
> v2: unset IFS and delete eval from vps-rst
>
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
>   scripts/vps-rst.in | 15 +++++++++++++--
>   src/lib/hooks_ct.c | 18 ++++++++++++++----
>   2 files changed, 27 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/vps-rst.in b/scripts/vps-rst.in
> index b6c2f84..629b1b3 100755
> --- a/scripts/vps-rst.in
> +++ b/scripts/vps-rst.in
> @@ -25,15 +25,24 @@
>   #   VE_ROOT       - container root directory
>   #   VE_DUMP_DIR   - directory for saving dump files
>   #   VE_STATE_FILE - file to write CT init PID to
> +#   VE_VETH_DEVS  - pair of veth names (CT=HW\n)
>   
>   exec 1>&2
>   . @SCRIPTDIR@/vps-functions
>   
> +veth_args=
> +IFS="
> +"

Why do you need to set IFS at all? Default IFS is space, tab and newline.

Are you implying that device names can contain spaces or tabs? I haven't 
see any.

> +for dev in $VE_VETH_DEVS; do
> +	veth_args="$veth_args --veth-pair $dev"
> +done
> +unset IFS
> +
>   vzcheckvar VE_ROOT
>   vzcheckvar VE_STATE_FILE
>   vzcheckvar VE_DUMP_DIR
>   
> -criu restore	--file-locks		\
> +criu restore	--file-locks	\
>   		--tcp-established	\
>   		--evasive-devices	\
>   		--link-remap		\
> @@ -42,7 +51,9 @@ criu restore	--file-locks		\
>   		-D $VE_DUMP_DIR		\
>   		-o restore.log		\
>   		-vvvv			\
> -		--pidfile $VE_STATE_FILE
> +		--pidfile $VE_STATE_FILE\

a whitespace before \ would be nice

> +		$veth_args
> +
>   if [ $? -eq 0 ]; then
>   	rm -rf $VE_DUMP_DIR
>   else
> diff --git a/src/lib/hooks_ct.c b/src/lib/hooks_ct.c
> index 21e6823..1580b8e 100644
> --- a/src/lib/hooks_ct.c
> +++ b/src/lib/hooks_ct.c
> @@ -921,14 +921,15 @@ static int ct_chkpnt(vps_handler *h, envid_t veid,
>   	return ret;
>   }
>   
> -static int ct_restore_fn(vps_handler *h, envid_t veid, const fs_param *fs,
> +static int ct_restore_fn(vps_handler *h, envid_t veid, const vps_res *res,
>   			  int wait_p, int old_wait_p, int err_p, void *data)

This belongs to the patch #1, right?
>   {
> -	char *argv[2], *env[4];
> +	char *argv[2], *env[5];
>   	const char *dumpfile = NULL;
>   	const char *statefile = NULL;
>   	cpt_param *param = data;
> -	char buf[STR_SIZE];
> +	veth_dev *veth;
> +	char buf[STR_SIZE], *pbuf;
>   	pid_t pid = -1;
>   	int ret;
>   	FILE *sfile;
> @@ -948,7 +949,16 @@ static int ct_restore_fn(vps_handler *h, envid_t veid, const fs_param *fs,
>   	env[1] = strdup(buf);
>   	snprintf(buf, sizeof(buf), "VE_STATE_FILE=%s", statefile);
>   	env[2] = strdup(buf);
> -	env[3] = NULL;
> +
> +	pbuf = buf;
> +	pbuf += snprintf(buf, sizeof(buf), "VE_VETH_DEVS=");;

double ;; detected

> +	list_for_each(veth, &res->veth.dev, list) {
> +		pbuf += snprintf(pbuf, sizeof(buf) - (pbuf - buf),
> +				"%s=%s\n", veth->dev_name_ve, veth->dev_name);
> +	}
> +	env[3] = strdup(buf);
> +
> +	env[4] = NULL;
>   
>   	ret = run_script(argv[0], argv, env, 0);
>   	free_arg(env);



More information about the CRIU mailing list