aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q/vlan.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/8021q/vlan.c')
-rw-r--r--net/8021q/vlan.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 4d003e391754..f2bee234d361 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -314,6 +314,12 @@ int unregister_vlan_device(struct net_device *dev)
314 */ 314 */
315static struct lock_class_key vlan_netdev_xmit_lock_key; 315static struct lock_class_key vlan_netdev_xmit_lock_key;
316 316
317static const struct header_ops vlan_header_ops = {
318 .create = vlan_dev_hard_header,
319 .rebuild = vlan_dev_rebuild_header,
320 .parse = eth_header_parse,
321};
322
317static int vlan_dev_init(struct net_device *dev) 323static int vlan_dev_init(struct net_device *dev)
318{ 324{
319 struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; 325 struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev;
@@ -331,18 +337,14 @@ static int vlan_dev_init(struct net_device *dev)
331 memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len); 337 memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
332 338
333 if (real_dev->features & NETIF_F_HW_VLAN_TX) { 339 if (real_dev->features & NETIF_F_HW_VLAN_TX) {
334 dev->hard_header = real_dev->hard_header; 340 dev->header_ops = real_dev->header_ops;
335 dev->hard_header_len = real_dev->hard_header_len; 341 dev->hard_header_len = real_dev->hard_header_len;
336 dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit; 342 dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit;
337 dev->rebuild_header = real_dev->rebuild_header;
338 } else { 343 } else {
339 dev->hard_header = vlan_dev_hard_header; 344 dev->header_ops = &vlan_header_ops;
340 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; 345 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
341 dev->hard_start_xmit = vlan_dev_hard_start_xmit; 346 dev->hard_start_xmit = vlan_dev_hard_start_xmit;
342 dev->rebuild_header = vlan_dev_rebuild_header;
343 } 347 }
344 dev->hard_header_parse = real_dev->hard_header_parse;
345 dev->hard_header_cache = NULL;
346 348
347 lockdep_set_class(&dev->_xmit_lock, &vlan_netdev_xmit_lock_key); 349 lockdep_set_class(&dev->_xmit_lock, &vlan_netdev_xmit_lock_key);
348 return 0; 350 return 0;