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