[CRIU] [PATCH 1/2] vzctl: add ability to skip creation of veth devices (v2)
Andrey Vagin
avagin at openvz.org
Thu May 30 00:47:08 EDT 2013
It will be used for resuming CT with help CRIU.
CRIU restores veth devices and configures them inside CT,
so vzctl should configures them on the host side.
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
include/types.h | 2 ++
scripts/vps-netns_dev_add.in | 5 ++++-
src/lib/hooks_ct.c | 12 +++++++++---
src/lib/veth.c | 8 +++++---
4 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/include/types.h b/include/types.h
index a715a5a..63919b9 100644
--- a/include/types.h
+++ b/include/types.h
@@ -49,6 +49,7 @@ typedef unsigned envid_t;
#define YES 1
#define NO 2
+#define CFG 2
#define ADD 0
#define DEL 1
@@ -99,6 +100,7 @@ typedef enum {
SKIP_ACTION_SCRIPT = (1<<2),
SKIP_UMOUNT = (1<<3),
SKIP_REMOUNT = (1<<4),
+ SKIP_VETH_CREATE = (1<<5),
} skipFlags;
/** CT handler.
diff --git a/scripts/vps-netns_dev_add.in b/scripts/vps-netns_dev_add.in
index 60461e4..12e0eaa 100755
--- a/scripts/vps-netns_dev_add.in
+++ b/scripts/vps-netns_dev_add.in
@@ -40,11 +40,14 @@
vzcheckvar VEID
vzcheckvar VNAME
vzcheckvar HNAME
+vzcheckvar ACTION
if [ "x$HNAME" = "x$VNAME" ]; then
vzmoveif
else
- vzcreatepair
+ if [ "$ACTION" = "add" ]; then
+ vzcreatepair
+ fi
vzadjustmacs
vzconfbridge
fi
diff --git a/src/lib/hooks_ct.c b/src/lib/hooks_ct.c
index d8909b1..4011142 100644
--- a/src/lib/hooks_ct.c
+++ b/src/lib/hooks_ct.c
@@ -815,7 +815,7 @@ static int ct_ip_ctl(vps_handler *h, envid_t veid, int op, const char *ipstr)
static int ct_veth_ctl(vps_handler *h, envid_t veid, int op, veth_dev *dev)
{
int ret = -1;
- char *envp[10];
+ char *envp[11];
char buf[STR_SIZE];
int i = 0;
@@ -847,6 +847,12 @@ static int ct_veth_ctl(vps_handler *h, envid_t veid, int op, veth_dev *dev)
envp[i++] = strdup(buf);
}
+ if (op == ADD)
+ snprintf(buf, sizeof(buf), "ACTION=add");
+ else
+ snprintf(buf, sizeof(buf), "ACTION=cfg");
+ envp[i++] = strdup(buf);
+
envp[i] = NULL;
if (op == ADD) {
@@ -915,7 +921,7 @@ 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];
@@ -970,7 +976,7 @@ static int ct_restore(vps_handler *h, envid_t veid, vps_param *vps_p, int cmd,
cpt_param *param, skipFlags skip)
{
return vps_start_custom(h, veid, vps_p,
- SKIP_CONFIGURE | SKIP_ACTION_SCRIPT | skip,
+ SKIP_CONFIGURE | SKIP_ACTION_SCRIPT | SKIP_VETH_CREATE | skip,
NULL, ct_restore_fn, param);
}
diff --git a/src/lib/veth.c b/src/lib/veth.c
index 2b63774..b1956fa 100644
--- a/src/lib/veth.c
+++ b/src/lib/veth.c
@@ -111,9 +111,9 @@ static int veth_ctl(vps_handler *h, envid_t veid, int op, veth_param *list,
break;
}
logger(0, 0, "%s veth devices: %s",
- op == ADD ? "Configure" : "Deleting", buf);
+ (op == ADD || op == CFG) ? "Configure" : "Deleting", buf);
list_for_each(tmp, dev_h, list) {
- if (op == ADD) {
+ if (op == ADD || op == CFG) {
if ((ret = h->veth_ctl(h, veid, ADD, tmp)))
break;
if ((ret = run_vznetcfg(veid, tmp)))
@@ -407,8 +407,10 @@ int vps_setup_veth(vps_handler *h, envid_t veid, dist_actions *actions,
veth_ctl(h, veid, DEL, veth_del, 0);
}
if (!list_empty(&veth_add->dev)) {
+ int op = (skip & SKIP_VETH_CREATE) ? CFG : ADD;
+
fill_veth_dev_name(&veth_old, veth_add);
- ret = veth_ctl(h, veid, ADD, veth_add, 1);
+ ret = veth_ctl(h, veid, op, veth_add, 1);
}
if (!list_empty(&veth_old.dev))
free_veth_param(&veth_old);
--
1.8.2
More information about the CRIU
mailing list