diff options
Diffstat (limited to 'net/8021q/vlan.c')
-rw-r--r-- | net/8021q/vlan.c | 14 |
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 | */ |
315 | static struct lock_class_key vlan_netdev_xmit_lock_key; | 315 | static struct lock_class_key vlan_netdev_xmit_lock_key; |
316 | 316 | ||
317 | static 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 | |||
317 | static int vlan_dev_init(struct net_device *dev) | 323 | static 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; |