aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lxc/conf.c13
-rw-r--r--src/lxc/conf.h2
-rw-r--r--src/lxc/confile.c14
3 files changed, 25 insertions, 4 deletions
diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 9c3a558..523270e 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -829,14 +829,19 @@ int lxc_conf_init(struct lxc_conf *conf)
static int instanciate_veth(struct lxc_netdev *netdev)
{
- char veth1[IFNAMSIZ];
+ char veth1buf[IFNAMSIZ], *veth1;
char veth2[IFNAMSIZ];
int ret = -1;
- snprintf(veth1, sizeof(veth1), "vethXXXXXX");
- snprintf(veth2, sizeof(veth2), "vethXXXXXX");
+ if (netdev->pair)
+ veth1 = netdev->pair;
+ else {
+ snprintf(veth1buf, sizeof(veth1buf), "vethXXXXXX");
+ mktemp(veth1buf);
+ veth1 = veth1buf;
+ }
- mktemp(veth1);
+ snprintf(veth2, sizeof(veth2), "vethXXXXXX");
mktemp(veth2);
if (!strlen(veth1) || !strlen(veth2)) {
diff --git a/src/lxc/conf.h b/src/lxc/conf.h
index 0b8d732..bb38206 100644
--- a/src/lxc/conf.h
+++ b/src/lxc/conf.h
@@ -73,6 +73,7 @@ struct lxc_route6 {
* Defines a structure to configure a network device
* @link : lxc.network.link, name of bridge or host iface to attach if any
* @name : lxc.network.name, name of iface on the container side
+ * @pair : lxc.network.pair, name of host-side iface in case of veth etc
* @flags : flag of the network device (IFF_UP, ... )
* @ipv4 : a list of ipv4 addresses to be set on the network device
* @ipv6 : a list of ipv6 addresses to be set on the network device
@@ -83,6 +84,7 @@ struct lxc_netdev {
int ifindex;
char *link;
char *name;
+ char *pair;
char *hwaddr;
char *mtu;
struct lxc_list ipv4;
diff --git a/src/lxc/confile.c b/src/lxc/confile.c
index 39a8e2c..3a9a86d 100644
--- a/src/lxc/confile.c
+++ b/src/lxc/confile.c
@@ -49,6 +49,7 @@ static int config_network_type(const char *, char *, struct lxc_conf *);
static int config_network_flags(const char *, char *, struct lxc_conf *);
static int config_network_link(const char *, char *, struct lxc_conf *);
static int config_network_name(const char *, char *, struct lxc_conf *);
+static int config_network_pair(const char *, char *, struct lxc_conf *);
static int config_network_hwaddr(const char *, char *, struct lxc_conf *);
static int config_network_mtu(const char *, char *, struct lxc_conf *);
static int config_network_ipv4(const char *, char *, struct lxc_conf *);
@@ -73,6 +74,7 @@ static struct config config[] = {
{ "lxc.network.flags", config_network_flags },
{ "lxc.network.link", config_network_link },
{ "lxc.network.name", config_network_name },
+ { "lxc.network.pair", config_network_pair },
{ "lxc.network.hwaddr", config_network_hwaddr },
{ "lxc.network.mtu", config_network_mtu },
{ "lxc.network.ipv4", config_network_ipv4 },
@@ -221,6 +223,18 @@ static int config_network_name(const char *key, char *value,
return network_ifname(&netdev->name, value);
}
+static int config_network_pair(const char *key, char *value,
+ struct lxc_conf *lxc_conf)
+{
+ struct lxc_netdev *netdev;
+
+ netdev = network_netdev(key, value, &lxc_conf->network);
+ if (!netdev)
+ return -1;
+
+ return network_ifname(&netdev->pair, value);
+}
+
static int config_network_hwaddr(const char *key, char *value,
struct lxc_conf *lxc_conf)
{