]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Fix instantiation of multiple vlan interfaces with same id 397/head
authorAxel Neumann <neumann@cgws.de>
Tue, 13 Jan 2015 09:48:52 +0000 (10:48 +0100)
committerAxel Neumann <neumann@cgws.de>
Tue, 13 Jan 2015 09:48:52 +0000 (10:48 +0100)
Container fail to start with configs (as shown below) where the same
vlan id is used for several type=vlan container interfaces.
Then, during the instantiation of the vlan interfaces, an error occurs
because the lxc code tries to assign the same temporary name to both
of them before it is bound into the container.

> lxc.network.type      = vlan
> lxc.network.flags     = up
> lxc.network.link      = eth1
> lxc.network.vlan.id   = 3842
> lxc.network.name      = iso0
>
> lxc.network.type      = vlan
> lxc.network.flags     = up
> lxc.network.link      = eth2
> lxc.network.vlan.id   = 3842
> lxc.network.name      = iso1

Signed-off-by: Axel Neumann <neumann@cgws.de>
src/lxc/conf.c

index 9072002791027dcc5afa33fb0a03dc2d5354c1e4..b3451a48b6ac863a27cbe9b821b8989fe27e797c 100644 (file)
@@ -2979,13 +2979,14 @@ static int instantiate_vlan(struct lxc_handler *handler, struct lxc_netdev *netd
 {
        char peer[IFNAMSIZ];
        int err;
+       static uint16_t vlan_cntr = 0;
 
        if (!netdev->link) {
                ERROR("no link specified for vlan netdev");
                return -1;
        }
 
-       err = snprintf(peer, sizeof(peer), "vlan%d", netdev->priv.vlan_attr.vid);
+       err = snprintf(peer, sizeof(peer), "vlan%d-%d", netdev->priv.vlan_attr.vid, vlan_cntr++);
        if (err >= sizeof(peer)) {
                ERROR("peer name too long");
                return -1;