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) ...@@ -439,9 +439,6 @@ static void exec_criu(struct criu_opts *opts)
char eth[128], *veth; char eth[128], *veth;
struct lxc_netdev *n = it->elem; struct lxc_netdev *n = it->elem;
if (n->type != LXC_NET_VETH)
continue;
if (n->name) { if (n->name) {
if (strlen(n->name) >= sizeof(eth)) if (strlen(n->name) >= sizeof(eth))
goto err; goto err;
...@@ -449,14 +446,42 @@ static void exec_criu(struct criu_opts *opts) ...@@ -449,14 +446,42 @@ static void exec_criu(struct criu_opts *opts)
} else } else
sprintf(eth, "eth%d", netnr); 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) if (n->link)
ret = snprintf(buf, sizeof(buf), "veth[%s]:%s@%s", eth, veth, n->link); ret = snprintf(buf, sizeof(buf), "veth[%s]:%s@%s", eth, veth, n->link);
else else
ret = snprintf(buf, sizeof(buf), "veth[%s]:%s", eth, veth); ret = snprintf(buf, sizeof(buf), "veth[%s]:%s", eth, veth);
if (ret < 0 || ret >= sizeof(buf)) 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; goto err;
}
DECLARE_ARG("--external"); DECLARE_ARG("--external");
DECLARE_ARG(buf); DECLARE_ARG(buf);
...@@ -616,9 +641,10 @@ static bool criu_ok(struct lxc_container *c, char **criu_version) ...@@ -616,9 +641,10 @@ static bool criu_ok(struct lxc_container *c, char **criu_version)
case LXC_NET_VETH: case LXC_NET_VETH:
case LXC_NET_NONE: case LXC_NET_NONE:
case LXC_NET_EMPTY: case LXC_NET_EMPTY:
case LXC_NET_MACVLAN:
break; break;
default: 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; 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