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)) {
* 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
int ifindex;
char *link;
char *name;
+ char *pair;
char *hwaddr;
char *mtu;
struct lxc_list ipv4;
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 *);
{ "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 },
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)
{