linux/net/8021q
David S. Miller 2205369a31 vlan: Fix header ops passthru when doing TX VLAN offload.
When the vlan code detects that the real device can do TX VLAN offloads
in hardware, it tries to arrange for the real device's header_ops to
be invoked directly.

But it does so illegally, by simply hooking the real device's
header_ops up to the VLAN device.

This doesn't work because we will end up invoking a set of header_ops
routines which expect a device type which matches the real device, but
will see a VLAN device instead.

Fix this by providing a pass-thru set of header_ops which will arrange
to pass the proper real device instead.

To facilitate this add a dev_rebuild_header().  There are
implementations which provide a ->cache and ->create but not a
->rebuild (f.e. PLIP).  So we need a helper function just like
dev_hard_header() to avoid crashes.

Use this helper in the one existing place where the
header_ops->rebuild was being invoked, the neighbour code.

With lots of help from Florian Westphal.

Signed-off-by: David S. Miller <davem@davemloft.net>
2013-12-31 16:23:35 -05:00
..
Kconfig net: vlan: add 802.1ad support 2013-04-19 14:46:06 -04:00
Makefile net/8021q: Implement Multiple VLAN Registration Protocol (MVRP) 2013-02-10 20:37:22 -05:00
vlan_core.c vlan: make vlan_dev_real_dev work over stacked vlans 2013-08-05 12:17:42 -07:00
vlan_dev.c vlan: Fix header ops passthru when doing TX VLAN offload. 2013-12-31 16:23:35 -05:00
vlan_gvrp.c net: vlan: prepare for 802.1ad support 2013-04-19 14:45:27 -04:00
vlan_mvrp.c net: vlan: prepare for 802.1ad support 2013-04-19 14:45:27 -04:00
vlan_netlink.c net: vlan: fix nlmsg size calculation in vlan_get_size() 2013-10-08 16:32:41 -04:00
vlan.c vlan: unlink the upper neighbour before unregistering 2013-09-26 16:02:07 -04:00
vlan.h vlan: Implement vlan_dev_get_egress_qos_mask as an inline. 2013-11-11 00:42:07 -05:00
vlanproc.c proc: Supply a function to remove a proc entry by PDE 2013-05-01 17:29:46 -04:00
vlanproc.h