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

thost1:~# ip link add link eth0 mvl0 type macvlan
thost1:~# echo $?
0
thost1:~# ip link add link eth0 ipvl0 type ipvlan
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/ipvlan/ipvlan_main.c

index feb185389a87ed03cf24449dcf3b3121d72e5108..a66ff81970087b852d3c275d97a90826182ab866 100644 (file)
@@ -38,6 +38,12 @@ static int ipvlan_port_create(struct net_device *dev)
                netdev_err(dev, "Master is either lo or non-ether device\n");
                return -EINVAL;
        }
+
+       if (netif_is_macvlan_port(dev)) {
+               netdev_err(dev, "Master is a macvlan port.\n");
+               return -EBUSY;
+       }
+
        port = kzalloc(sizeof(struct ipvl_port), GFP_KERNEL);
        if (!port)
                return -ENOMEM;