macvlan: play well with ipvlan device
authorMahesh Bandewar <maheshb@google.com>
Sat, 6 Dec 2014 23:53:46 +0000 (15:53 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 21:10:06 +0000 (16:10 -0500)
If device is already used as an ipvlan port then refuse to
use it as a macvlan port at early stage of port creation.

thost1:~# ip link add link eth0 ipvl0 type ipvlan
thost1:~# echo $?
0
thost1:~# ip link add link eth0 mvl0 type macvlan
RTNETLINK answers: Device or resource busy
thost1:~# echo $?
2
thost1:~#

Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvlan.c

index 10604db2a3a0595ff2113127f47b64e43076a1be..612e0731142d29aef8cca9e882ef66e237fb4960 100644 (file)
@@ -1057,6 +1057,9 @@ static int macvlan_port_create(struct net_device *dev)
        if (dev->type != ARPHRD_ETHER || dev->flags & IFF_LOOPBACK)
                return -EINVAL;
 
+       if (netif_is_ipvlan_port(dev))
+               return -EBUSY;
+
        port = kzalloc(sizeof(*port), GFP_KERNEL);
        if (port == NULL)
                return -ENOMEM;