From mboxrd@z Thu Jan 1 00:00:00 1970 From: Patrick McHardy Subject: Re: [PATCH 4/4] macvlan: export macvlan mode through netlink Date: Tue, 24 Nov 2009 11:53:34 +0100 Message-ID: <4B0BBB2E.8020502@trash.net> References: <1259024166-28158-1-git-send-email-arnd@arndb.de> <1259024166-28158-5-git-send-email-arnd@arndb.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Cc: Eric Dumazet , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, David Miller , Stephen Hemminger , Herbert Xu , Patrick Mullaney , "Eric W. Biederman" , Edge Virtual Bridging , Anna Fischer , bridge@lists.linux-foundation.org, virtualization@lists.linux-foundation.org, Jens Osterkamp , Gerhard Stenzel , Mark Smith To: Arnd Bergmann Return-path: In-Reply-To: <1259024166-28158-5-git-send-email-arnd@arndb.de> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org Arnd Bergmann wrote: > @@ -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. > + } > + } > 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(...)". > + } > + > 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; > +}