Commit e2697330 by Tycho Andersen

c/r: add checkpoint/restore support for macvlan interfaces

parent 2f3fbc6b
......@@ -439,9 +439,6 @@ static void exec_criu(struct criu_opts *opts)
char eth[128], *veth;
struct lxc_netdev *n = it->elem;
if (n->type != LXC_NET_VETH)
continue;
if (n->name) {
if (strlen(n->name) >= sizeof(eth))
goto err;
......@@ -449,14 +446,42 @@ static void exec_criu(struct criu_opts *opts)
} else
sprintf(eth, "eth%d", netnr);
veth = n->priv.veth_attr.pair;
switch (n->type) {
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 (ret < 0 || ret >= sizeof(buf))
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 (ret < 0 || ret >= sizeof(buf))
goto err;
break;
case LXC_NET_MACVLAN:
if (n->name) {
if (strlen(n->name) >= sizeof(eth))
goto err;
strncpy(eth, n->name, sizeof(eth));
} else
sprintf(eth, "eth%d", netnr);
if (!n->link) {
ERROR("no host interface for macvlan %s\n", n->name);
goto err;
}
ret = snprintf(buf, sizeof(buf), "macvlan[%s]:%s", eth, n->link);
if (ret < 0 || ret >= sizeof(buf))
goto err;
break;
case LXC_NET_NONE:
case LXC_NET_EMPTY:
break;
default:
/* we have screened for this earlier... */
ERROR("unexpected network type %d\n", n->type);
goto err;
}
DECLARE_ARG("--external");
DECLARE_ARG(buf);
......@@ -616,9 +641,10 @@ static bool criu_ok(struct lxc_container *c, char **criu_version)
case LXC_NET_VETH:
case LXC_NET_NONE:
case LXC_NET_EMPTY:
case LXC_NET_MACVLAN:
break;
default:
ERROR("Found network that is not VETH or NONE\n");
ERROR("Found un-dumpable network: %s (%s)\n", lxc_net_type_to_str(n->type), n->name);
return false;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment