Re: [PATCH 4/4] macvlan: export macvlan mode through netlink
From: Patrick McHardy <hidden>
Date: 2009-11-24 10:53:32
Also in:
bridge, lkml
Arnd Bergmann wrote:
quoted hunk ↗ jump to hunk
@@ -600,6 +594,18 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[]) if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) return -EADDRNOTAVAIL; } + + if (data && data[IFLA_MACVLAN_MODE]) { + u32 mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); + switch (mode) { + case MACVLAN_MODE_PRIVATE: + case MACVLAN_MODE_VEPA: + case MACVLAN_MODE_BRIDGE: + break; + default: + return -EINVAL;
EINVAL is quite unspecific. In this case I think EOPNOTSUPP would be fine and provide more information.
quoted hunk ↗ jump to hunk
+ } + } return 0; }@@ -664,6 +670,13 @@ static int macvlan_newlink(struct net *src_net, struct net_device *dev, vlan->dev = dev; vlan->port = port; + vlan->mode = MACVLAN_MODE_VEPA; + if (data && data[IFLA_MACVLAN_MODE]) { + u32 mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); + + vlan->mode = mode;
This looks a bit strange, like cut-and-paste without reformatting :) I'd suggest to simply use "vlan->mode = nla_get_u32(...)".
quoted hunk ↗ jump to hunk
+ } + err = register_netdevice(dev); if (err < 0) return err;@@ -685,6 +698,39 @@ static void macvlan_dellink(struct net_device *dev, struct list_head *head) macvlan_port_destroy(port->dev); } +static int macvlan_changelink(struct net_device *dev, + struct nlattr *tb[], struct nlattr *data[]) +{ + struct macvlan_dev *vlan = netdev_priv(dev); + if (data && data[IFLA_MACVLAN_MODE]) { + u32 mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); + vlan->mode = mode;
Same here.
+ } + + return 0; +}