From: Patrick McHardy <kaber@trash.net>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, Patrick McHardy <kaber@trash.net>
Subject: [VLAN 10/18]: Move some device intialization code to dev->init callback
Date: Wed, 13 Jun 2007 18:50:56 +0200 (MEST) [thread overview]
Message-ID: <20070613165053.7780.21208.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20070613165039.7780.15855.sendpatchset@localhost.localdomain>
[VLAN]: Move some device intialization code to dev->init callback
Move some device initialization code to new dev->init callback to make
it shareable with netlink. Additionally this fixes a minor bug, dev->iflink
is set after registration, which causes an incorrect value in the initial
netlink message.
Signed-off-by: Patrick McHardy <kaber@trash.net>
---
commit cdca24994aa848abede6d80566fd64be997d3a20
tree 327daea07b09d7d4a41307a6fb31d6ae39c56a3b
parent 3288fa26d2f10d9c6d43a5ee3180bedc2ef1edc5
author Patrick McHardy <kaber@trash.net> Wed, 06 Jun 2007 14:46:33 +0200
committer Patrick McHardy <kaber@trash.net> Wed, 13 Jun 2007 18:10:31 +0200
net/8021q/vlan.c | 92 +++++++++++++++++++++++++++---------------------------
1 files changed, 46 insertions(+), 46 deletions(-)
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 3678f07..dc95f7c 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -291,6 +291,48 @@ static int unregister_vlan_device(struct net_device *dev)
return ret;
}
+/*
+ * vlan network devices have devices nesting below it, and are a special
+ * "super class" of normal network devices; split their locks off into a
+ * separate class since they always nest.
+ */
+static struct lock_class_key vlan_netdev_xmit_lock_key;
+
+static int vlan_dev_init(struct net_device *dev)
+{
+ struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev;
+
+ /* IFF_BROADCAST|IFF_MULTICAST; ??? */
+ dev->flags = real_dev->flags & ~IFF_UP;
+ dev->iflink = real_dev->ifindex;
+ dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
+ (1<<__LINK_STATE_DORMANT))) |
+ (1<<__LINK_STATE_PRESENT);
+
+ /* TODO: maybe just assign it to be ETHERNET? */
+ dev->type = real_dev->type;
+
+ memcpy(dev->broadcast, real_dev->broadcast, real_dev->addr_len);
+ memcpy(dev->dev_addr, real_dev->dev_addr, real_dev->addr_len);
+ dev->addr_len = real_dev->addr_len;
+
+ if (real_dev->features & NETIF_F_HW_VLAN_TX) {
+ dev->hard_header = real_dev->hard_header;
+ dev->hard_header_len = real_dev->hard_header_len;
+ dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit;
+ dev->rebuild_header = real_dev->rebuild_header;
+ } else {
+ dev->hard_header = vlan_dev_hard_header;
+ dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
+ dev->hard_start_xmit = vlan_dev_hard_start_xmit;
+ dev->rebuild_header = vlan_dev_rebuild_header;
+ }
+ dev->hard_header_parse = real_dev->hard_header_parse;
+
+ lockdep_set_class(&dev->_xmit_lock, &vlan_netdev_xmit_lock_key);
+ return 0;
+}
+
static void vlan_setup(struct net_device *new_dev)
{
SET_MODULE_OWNER(new_dev);
@@ -311,6 +353,7 @@ static void vlan_setup(struct net_device *new_dev)
/* set up method calls */
new_dev->change_mtu = vlan_dev_change_mtu;
+ new_dev->init = vlan_dev_init;
new_dev->open = vlan_dev_open;
new_dev->stop = vlan_dev_stop;
new_dev->set_mac_address = vlan_dev_set_mac_address;
@@ -339,14 +382,6 @@ static void vlan_transfer_operstate(const struct net_device *dev, struct net_dev
}
}
-/*
- * vlan network devices have devices nesting below it, and are a special
- * "super class" of normal network devices; split their locks off into a
- * separate class since they always nest.
- */
-static struct lock_class_key vlan_netdev_xmit_lock_key;
-
-
/* Attach a VLAN device to a mac address (ie Ethernet Card).
* Returns the device that was created, or NULL if there was
* an error of some kind.
@@ -435,49 +470,17 @@ static struct net_device *register_vlan_device(struct net_device *real_dev,
if (new_dev == NULL)
goto out_ret_null;
-#ifdef VLAN_DEBUG
- printk(VLAN_DBG "Allocated new name -:%s:-\n", new_dev->name);
-#endif
- /* IFF_BROADCAST|IFF_MULTICAST; ??? */
- new_dev->flags = real_dev->flags;
- new_dev->flags &= ~IFF_UP;
-
- new_dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
- (1<<__LINK_STATE_DORMANT))) |
- (1<<__LINK_STATE_PRESENT);
-
/* need 4 bytes for extra VLAN header info,
* hope the underlying device can handle it.
*/
new_dev->mtu = real_dev->mtu;
- /* TODO: maybe just assign it to be ETHERNET? */
- new_dev->type = real_dev->type;
-
- new_dev->hard_header_len = real_dev->hard_header_len;
- if (!(real_dev->features & NETIF_F_HW_VLAN_TX)) {
- /* Regular ethernet + 4 bytes (18 total). */
- new_dev->hard_header_len += VLAN_HLEN;
- }
-
+#ifdef VLAN_DEBUG
+ printk(VLAN_DBG "Allocated new name -:%s:-\n", new_dev->name);
VLAN_MEM_DBG("new_dev->priv malloc, addr: %p size: %i\n",
new_dev->priv,
sizeof(struct vlan_dev_info));
-
- memcpy(new_dev->broadcast, real_dev->broadcast, real_dev->addr_len);
- memcpy(new_dev->dev_addr, real_dev->dev_addr, real_dev->addr_len);
- new_dev->addr_len = real_dev->addr_len;
-
- if (real_dev->features & NETIF_F_HW_VLAN_TX) {
- new_dev->hard_header = real_dev->hard_header;
- new_dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit;
- new_dev->rebuild_header = real_dev->rebuild_header;
- } else {
- new_dev->hard_header = vlan_dev_hard_header;
- new_dev->hard_start_xmit = vlan_dev_hard_start_xmit;
- new_dev->rebuild_header = vlan_dev_rebuild_header;
- }
- new_dev->hard_header_parse = real_dev->hard_header_parse;
+#endif
VLAN_DEV_INFO(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */
VLAN_DEV_INFO(new_dev)->real_dev = real_dev;
@@ -492,9 +495,6 @@ static struct net_device *register_vlan_device(struct net_device *real_dev,
if (register_netdevice(new_dev))
goto out_free_newdev;
- lockdep_set_class(&new_dev->_xmit_lock, &vlan_netdev_xmit_lock_key);
-
- new_dev->iflink = real_dev->ifindex;
vlan_transfer_operstate(real_dev, new_dev);
linkwatch_fire_event(new_dev); /* _MUST_ call rfc2863_policy() */
next prev parent reply other threads:[~2007-06-13 16:50 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-13 16:50 [NET 00/18]: Netlink link creation API + driver conversions Patrick McHardy
2007-06-13 16:50 ` [NET 01/18]: Mark struct net_device * argument to netdev_priv const Patrick McHardy
2007-06-13 16:50 ` [RTNETLINK 02/18]: Split up rtnl_setlink Patrick McHardy
2007-06-13 16:50 ` [RTNETLINK 03/18]: Link creation API Patrick McHardy
2007-06-13 16:50 ` [DUMMY 04/18]: Use dev->stats Patrick McHardy
2007-06-13 16:50 ` [DUMMY 05/18]: Keep dummy devices on list Patrick McHardy
2007-06-13 16:50 ` [DUMMY 06/18]: Use rtnl_link API Patrick McHardy
2007-06-13 16:50 ` [IFB 07/18]: Keep ifb devices on list Patrick McHardy
2007-06-13 16:50 ` [IFB 08/18]: Use rtnl_link API Patrick McHardy
2007-06-13 16:50 ` [VLAN 09/18]: Convert name-based configuration functions to struct netdevice * Patrick McHardy
2007-06-13 16:50 ` Patrick McHardy [this message]
2007-06-13 16:50 ` [VLAN 11/18]: Move vlan_group allocation to seperate function Patrick McHardy
2007-06-13 16:50 ` [VLAN 12/18]: Split up device checks Patrick McHardy
2007-06-13 16:51 ` [VLAN 13/18]: Move device registation to seperate function Patrick McHardy
2007-06-13 16:51 ` [VLAN 14/18]: Return proper error codes in register_vlan_device Patrick McHardy
2007-06-13 16:51 ` [VLAN 15/18]: Use 32 bit value for skb->priority mapping Patrick McHardy
2007-06-13 16:51 ` [VLAN 16/18]: Keep track of number of QoS mappings Patrick McHardy
2007-06-13 16:51 ` [VLAN 17/18]: Introduce symbolic constants for flag values Patrick McHardy
2007-06-13 16:51 ` [VLAN 18/18]: Use rtnl_link API Patrick McHardy
2007-06-13 19:51 ` [NET 00/18]: Netlink link creation API + driver conversions David Miller
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=20070613165053.7780.21208.sendpatchset@localhost.localdomain \
--to=kaber@trash.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/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.