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

Andrey Vagin avagin at openvz.org
Mon May 27 17:12:16 EDT 2013


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="
+"
+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\
+		$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)
 {
-	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=");;
+	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);
-- 
1.8.2



More information about the CRIU mailing list