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 <ava...@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

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to