bridge: Fix network header pointer for vlan tagged packets
authorToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Tue, 28 Jul 2015 10:05:37 +0000 (19:05 +0900)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Jul 2015 19:20:16 +0000 (12:20 -0700)
commitdf356d5e81b04dd51dd9f23f2bce7d73dd929899
tree4650281cf54709b5a679f3cfdee075d4371dad91
parentdbd46ab412b8fb395f2b0ff6f6a7eec9df311550
bridge: Fix network header pointer for vlan tagged packets

There are several devices that can receive vlan tagged packets with
CHECKSUM_PARTIAL like tap, possibly veth and xennet.
When (multiple) vlan tagged packets with CHECKSUM_PARTIAL are forwarded
by bridge to a device with the IP_CSUM feature, they end up with checksum
error because before entering bridge, the network header is set to
ETH_HLEN (not including vlan header length) in __netif_receive_skb_core(),
get_rps_cpu(), or drivers' rx functions, and nobody fixes the pointer later.

Since the network header is exepected to be ETH_HLEN in flow-dissection
and hash-calculation in RPS in rx path, and since the header pointer fix
is needed only in tx path, set the appropriate network header on forwarding
packets.

Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_forward.c