[lxc-devel] [lxc/master] lxc-checkpoint: automatically detect if --external or --veth-pair

adrianreber on Github lxc-bot at linuxcontainers.org
Tue Nov 15 16:12:42 UTC 2016


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 916 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20161115/34dcd821/attachment.bin>
-------------- next part --------------
From b202b34ebc51e6df9928f44e5f434d775644af22 Mon Sep 17 00:00:00 2001
From: Adrian Reber <areber at redhat.com>
Date: Tue, 15 Nov 2016 15:47:31 +0000
Subject: [PATCH] lxc-checkpoint: automatically detect if --external or
 --veth-pair

With the criu release 2.8 criu deprecated the --veth-pair command-line
option in favor of --external:

f2037e6 veth: Make --external support --veth-pair

git tag --contains f2037e6d3445fc400
v2.8

With this commit lxc-checkpoint will automatically switch between
the new and old command-line option dependent on the detected
criu version.

For criu version older than 2.8 something like this will be used:

  --veth-pair eth0=vethYOK6RW at lxcbr0

and starting with criu version 2.8 it will look like this:

  --external veth[eth0]:vethCRPEYL at lxcbr0

Signed-off-by: Adrian Reber <areber at redhat.com>
---
 src/lxc/criu.c | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/src/lxc/criu.c b/src/lxc/criu.c
index 9523af3..8f96014 100644
--- a/src/lxc/criu.c
+++ b/src/lxc/criu.c
@@ -58,6 +58,7 @@
 #define CRIU_GITID_PATCHLEVEL	0
 
 #define CRIU_IN_FLIGHT_SUPPORT	"2.4"
+#define CRIU_EXTERNAL_NOT_VETH	"2.8"
 
 lxc_log_define(lxc_criu, lxc);
 
@@ -482,7 +483,19 @@ static void exec_criu(struct criu_opts *opts)
 
 		lxc_list_for_each(it, &opts->c->lxc_conf->network) {
 			char eth[128], *veth;
+			char fmt[16];
 			struct lxc_netdev *n = it->elem;
+			bool external_not_veth;
+
+			if (strcmp(opts->criu_version, CRIU_EXTERNAL_NOT_VETH) >= 0) {
+				/* Since criu version 2.8 the usage of --veth-pair
+				 * has been deprecated:
+				 * git tag --contains f2037e6d3445fc400
+				 * v2.8 */
+				external_not_veth = true;
+			} else {
+				external_not_veth = false;
+			}
 
 			if (n->name) {
 				if (strlen(n->name) >= sizeof(eth))
@@ -498,10 +511,21 @@ static void exec_criu(struct criu_opts *opts)
 			case LXC_NET_VETH:
 				veth = n->priv.veth_attr.pair;
 
-				if (n->link)
-					ret = snprintf(buf, sizeof(buf), "veth[%s]:%s@%s", eth, veth, n->link);
-				else
-					ret = snprintf(buf, sizeof(buf), "veth[%s]:%s", eth, veth);
+				if (n->link) {
+					if (external_not_veth)
+						strncpy(fmt, "veth[%s]:%s@%s", sizeof(fmt));
+					else
+						strncpy(fmt, "%s=%s@%s", sizeof(fmt));
+
+					ret = snprintf(buf, sizeof(buf), fmt, eth, veth, n->link);
+				} else {
+					if (external_not_veth)
+						strncpy(fmt, "veth[%s]:%s", sizeof(fmt));
+					else
+						strncpy(fmt, "%s=%s", sizeof(fmt));
+
+					ret = snprintf(buf, sizeof(buf), fmt, eth, veth);
+				}
 				if (ret < 0 || ret >= sizeof(buf))
 					goto err;
 				break;
@@ -524,7 +548,10 @@ static void exec_criu(struct criu_opts *opts)
 				goto err;
 			}
 
-			DECLARE_ARG("--external");
+			if (external_not_veth)
+				DECLARE_ARG("--external");
+			else
+				DECLARE_ARG("--veth-pair");
 			DECLARE_ARG(buf);
 			netnr++;
 		}


More information about the lxc-devel mailing list