diff options
author | David S. Miller <davem@davemloft.net> | 2017-10-04 21:39:34 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-04 21:39:34 -0700 |
commit | c331501c88b64dd1bf83eddcc040441dec187f7e (patch) | |
tree | 7336e8a94272855046ff07440fa0e23beba0f73d /drivers/net/vrf.c | |
parent | 6621dd29eb9b5e6774ec7a9a75161352fdea47fc (diff) | |
parent | e58376e1df2aaffbf12753959142a50f824c46ea (diff) |
Merge branch 'enslavement-extack'
David Ahern says:
====================
net: Plumb extack error reporting to enslavements
Another round of extending extack error reporting, this time for
enslavements through ndo_add_slave and notifiers.
v2
- changed how the messages are added to bonding driver per Jiri's request
- fixed spectrum message for LAG overflow per Ido's comment
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vrf.c')
-rw-r--r-- | drivers/net/vrf.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c index cc18b7b11612..0b54f553228e 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c @@ -764,18 +764,22 @@ static void cycle_netdev(struct net_device *dev) } } -static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev) +static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev, + struct netlink_ext_ack *extack) { int ret; /* do not allow loopback device to be enslaved to a VRF. * The vrf device acts as the loopback for the vrf. */ - if (port_dev == dev_net(dev)->loopback_dev) + if (port_dev == dev_net(dev)->loopback_dev) { + NL_SET_ERR_MSG(extack, + "Can not enslave loopback device to a VRF"); return -EOPNOTSUPP; + } port_dev->priv_flags |= IFF_L3MDEV_SLAVE; - ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL); + ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL, extack); if (ret < 0) goto err; @@ -788,12 +792,19 @@ err: return ret; } -static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev) +static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev, + struct netlink_ext_ack *extack) { - if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev)) + if (netif_is_l3_master(port_dev)) { + NL_SET_ERR_MSG(extack, + "Can not enslave an L3 master device to a VRF"); + return -EINVAL; + } + + if (netif_is_l3_slave(port_dev)) return -EINVAL; - return do_vrf_add_slave(dev, port_dev); + return do_vrf_add_slave(dev, port_dev, extack); } /* inverse of do_vrf_add_slave */ |