From: Patrick McHardy <kaber@trash.net>
To: Patrick Mullaney <pmullaney@novell.com>
Cc: arnd@arndb.de, netdev@vger.kernel.org,
bridge@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
alacrityvm-devel@lists.sourceforge.net, evb@yahoogroups.com
Subject: Re: [Bridge] [PATCH 2/4] macvlan: allow in-kernel modules to create and manage macvlan devices
Date: Wed, 11 Nov 2009 16:29:46 +0100 [thread overview]
Message-ID: <4AFAD86A.9070506@trash.net> (raw)
In-Reply-To: <20091110222757.24100.16046.stgit@mimic.site>
Patrick Mullaney wrote:
> The macvlan driver didn't allow for creation/deletion of devices
> by other in-kernel modules. This patch provides common routines
> for both in-kernel and netlink based management. This patch
> also enables macvlan device support for gro for lower level
> devices that support gro.
> -static void macvlan_transfer_operstate(struct net_device *dev)
> +void macvlan_transfer_operstate(struct net_device *dev)
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> const struct net_device *lowerdev = vlan->lowerdev;
> @@ -458,6 +458,7 @@ static void macvlan_transfer_operstate(struct net_device *dev)
> netif_carrier_off(dev);
> }
> }
> +EXPORT_SYMBOL_GPL(macvlan_transfer_operstate);
I think this function could be moved to net/core/dev.c or
net/core/link_watch.c. The VLAN code has an identical copy.
> -int macvlan_newlink(struct net_device *dev,
> - struct nlattr *tb[], struct nlattr *data[])
> +int macvlan_link_lowerdev(struct net_device *dev,
> + struct net_device *lowerdev)
Please indent this more cleanly.
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> struct macvlan_port *port;
> + int err = 0;
> +
> + if (lowerdev->macvlan_port == NULL) {
> + err = macvlan_port_create(lowerdev);
> + if (err < 0)
> + return err;
> + }
> + port = lowerdev->macvlan_port;
> +
> + vlan->lowerdev = lowerdev;
> + vlan->dev = dev;
> + vlan->port = port;
> + vlan->receive = netif_rx;
> +
> + macvlan_init(dev);
> +
> + list_add_tail(&vlan->list, &port->vlans);
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(macvlan_link_lowerdev);
> @@ -502,23 +539,14 @@ int macvlan_newlink(struct net_device *dev,
> if (!tb[IFLA_ADDRESS])
> random_ether_addr(dev->dev_addr);
>
> - if (lowerdev->macvlan_port == NULL) {
> - err = macvlan_port_create(lowerdev);
> - if (err < 0)
> - return err;
> - }
> - port = lowerdev->macvlan_port;
> -
> - vlan->lowerdev = lowerdev;
> - vlan->dev = dev;
> - vlan->port = port;
> - vlan->receive = netif_rx;
> + err = macvlan_link_lowerdev(dev, lowerdev);
> + if (err < 0)
> + return err;
>
> err = register_netdevice(dev);
> if (err < 0)
> return err;
You've already added the device to the port->vlans list, so you
need to remove it again when register_netdevice() fails.
> - list_add_tail(&vlan->list, &port->vlans);
> macvlan_transfer_operstate(dev);
> return 0;
> }
> @@ -526,14 +554,8 @@ EXPORT_SYMBOL_GPL(macvlan_newlink);
WARNING: multiple messages have this Message-ID (diff)
From: Patrick McHardy <kaber@trash.net>
To: Patrick Mullaney <pmullaney@novell.com>
Cc: alacrityvm-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, arnd@arndb.de,
bridge@lists.linux-foundation.org, evb@yahoogroups.com,
netdev@vger.kernel.org
Subject: Re: [PATCH 2/4] macvlan: allow in-kernel modules to create and manage macvlan devices
Date: Wed, 11 Nov 2009 16:29:46 +0100 [thread overview]
Message-ID: <4AFAD86A.9070506@trash.net> (raw)
In-Reply-To: <20091110222757.24100.16046.stgit@mimic.site>
Patrick Mullaney wrote:
> The macvlan driver didn't allow for creation/deletion of devices
> by other in-kernel modules. This patch provides common routines
> for both in-kernel and netlink based management. This patch
> also enables macvlan device support for gro for lower level
> devices that support gro.
> -static void macvlan_transfer_operstate(struct net_device *dev)
> +void macvlan_transfer_operstate(struct net_device *dev)
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> const struct net_device *lowerdev = vlan->lowerdev;
> @@ -458,6 +458,7 @@ static void macvlan_transfer_operstate(struct net_device *dev)
> netif_carrier_off(dev);
> }
> }
> +EXPORT_SYMBOL_GPL(macvlan_transfer_operstate);
I think this function could be moved to net/core/dev.c or
net/core/link_watch.c. The VLAN code has an identical copy.
> -int macvlan_newlink(struct net_device *dev,
> - struct nlattr *tb[], struct nlattr *data[])
> +int macvlan_link_lowerdev(struct net_device *dev,
> + struct net_device *lowerdev)
Please indent this more cleanly.
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> struct macvlan_port *port;
> + int err = 0;
> +
> + if (lowerdev->macvlan_port == NULL) {
> + err = macvlan_port_create(lowerdev);
> + if (err < 0)
> + return err;
> + }
> + port = lowerdev->macvlan_port;
> +
> + vlan->lowerdev = lowerdev;
> + vlan->dev = dev;
> + vlan->port = port;
> + vlan->receive = netif_rx;
> +
> + macvlan_init(dev);
> +
> + list_add_tail(&vlan->list, &port->vlans);
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(macvlan_link_lowerdev);
> @@ -502,23 +539,14 @@ int macvlan_newlink(struct net_device *dev,
> if (!tb[IFLA_ADDRESS])
> random_ether_addr(dev->dev_addr);
>
> - if (lowerdev->macvlan_port == NULL) {
> - err = macvlan_port_create(lowerdev);
> - if (err < 0)
> - return err;
> - }
> - port = lowerdev->macvlan_port;
> -
> - vlan->lowerdev = lowerdev;
> - vlan->dev = dev;
> - vlan->port = port;
> - vlan->receive = netif_rx;
> + err = macvlan_link_lowerdev(dev, lowerdev);
> + if (err < 0)
> + return err;
>
> err = register_netdevice(dev);
> if (err < 0)
> return err;
You've already added the device to the port->vlans list, so you
need to remove it again when register_netdevice() fails.
> - list_add_tail(&vlan->list, &port->vlans);
> macvlan_transfer_operstate(dev);
> return 0;
> }
> @@ -526,14 +554,8 @@ EXPORT_SYMBOL_GPL(macvlan_newlink);
next prev parent reply other threads:[~2009-11-11 15:29 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-10 22:27 [Bridge] [PATCH 0/4] vbus: venet macvlan support Patrick Mullaney
2009-11-10 22:27 ` Patrick Mullaney
2009-11-10 22:27 ` [Bridge] [PATCH 1/4] macvlan: derived from Arnd Bergmann's patch for macvtap Patrick Mullaney
2009-11-10 22:27 ` Patrick Mullaney
2009-11-10 22:27 ` [Bridge] [PATCH 2/4] macvlan: allow in-kernel modules to create and manage macvlan devices Patrick Mullaney
2009-11-10 22:27 ` Patrick Mullaney
2009-11-11 15:29 ` Patrick McHardy [this message]
2009-11-11 15:29 ` Patrick McHardy
2009-11-12 18:05 ` [PATCH] netdevice: provide common routine for macvlan and vlan operstate management Patrick Mullaney
2009-11-12 18:21 ` Patrick McHardy
2009-11-13 19:55 ` [Bridge] [PATCH 0/3] macvlan: support for guest vm direct rx/tx Patrick Mullaney
2009-11-13 19:55 ` Patrick Mullaney
2009-11-13 19:55 ` [Bridge] [PATCH 1/3] netdevice: provide common routine for macvlan and vlan operstate management Patrick Mullaney
2009-11-13 19:55 ` Patrick Mullaney
2009-11-27 13:09 ` [Bridge] " Arnd Bergmann
2009-11-27 13:09 ` Arnd Bergmann
2009-11-13 19:55 ` [Bridge] [PATCH 2/3] macvlan: derived from Arnd Bergmann's patch for macvtap Patrick Mullaney
2009-11-13 19:55 ` Patrick Mullaney
2009-11-13 19:55 ` [Bridge] [PATCH 3/3] macvlan: allow in-kernel modules to create and manage macvlan devices Patrick Mullaney
2009-11-13 19:55 ` Patrick Mullaney
2009-11-27 22:14 ` [Bridge] " Arnd Bergmann
2009-11-27 22:14 ` Arnd Bergmann
2009-11-27 22:19 ` [Bridge] " Arnd Bergmann
2009-11-27 22:19 ` Arnd Bergmann
2009-11-13 21:27 ` [Bridge] [PATCH 0/3] macvlan: support for guest vm direct rx/tx Stephen Hemminger
2009-11-13 21:27 ` Stephen Hemminger
2009-11-27 23:43 ` [Bridge] " Arnd Bergmann
2009-11-27 23:43 ` Arnd Bergmann
2009-11-28 0:19 ` [Bridge] " David Miller
2009-11-28 0:19 ` David Miller
2009-11-28 5:38 ` [Bridge] " Stephen Hemminger
2009-11-28 5:38 ` Stephen Hemminger
2009-11-28 6:58 ` [Bridge] " David Miller
2009-11-28 6:58 ` David Miller
2009-11-10 22:28 ` [Bridge] [PATCH 3/4] venetdev: support common venet netdev routines Patrick Mullaney
2009-11-10 22:28 ` Patrick Mullaney
2009-11-10 22:28 ` [Bridge] [PATCH 4/4] venet-macvlan: add new driver to connect a venet to a macvlan netdevice Patrick Mullaney
2009-11-10 22:28 ` Patrick Mullaney
2009-11-11 15:36 ` [Bridge] " Patrick McHardy
2009-11-11 15:36 ` Patrick McHardy
2009-11-12 15:44 ` [Bridge] [PATCH 0/4] vbus: venet macvlan support Gregory Haskins
2009-11-12 15:44 ` Gregory Haskins
2009-11-12 15:53 ` [Bridge] " Patrick McHardy
2009-11-12 15:53 ` Patrick McHardy
2009-11-12 15:54 ` [Bridge] " Gregory Haskins
2009-11-12 15:54 ` Gregory Haskins
2009-11-12 15:59 ` [Bridge] " Patrick McHardy
2009-11-12 15:59 ` Patrick McHardy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AFAD86A.9070506@trash.net \
--to=kaber@trash.net \
--cc=alacrityvm-devel@lists.sourceforge.net \
--cc=arnd@arndb.de \
--cc=bridge@lists.linux-foundation.org \
--cc=evb@yahoogroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pmullaney@novell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.