diff options
author | stephen hemminger <shemminger@vyatta.com> | 2012-10-09 20:35:52 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-10-10 22:41:22 -0400 |
commit | d97c00a32198f0d066556006cfcd409efb28f746 (patch) | |
tree | 1dac2ba815c1662981b449d687901876bc6fc8a1 | |
parent | 2840bf22866935fe7197582bcbe2cde4503e0bba (diff) | |
download | op-kernel-dev-d97c00a32198f0d066556006cfcd409efb28f746.zip op-kernel-dev-d97c00a32198f0d066556006cfcd409efb28f746.tar.gz |
vxlan: fix receive checksum handling
Vxlan was trying to use postpull_rcsum to allow receive checksum
offload to work on drivers using CHECKSUM_COMPLETE method. But this
doesn't work correctly. Just force full receive checksum on received
packet.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/vxlan.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 0b95d5f..763061d 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -537,7 +537,6 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) } __skb_pull(skb, sizeof(struct vxlanhdr)); - skb_postpull_rcsum(skb, eth_hdr(skb), sizeof(struct vxlanhdr)); /* Is this VNI defined? */ vni = ntohl(vxh->vx_vni) >> 8; @@ -556,7 +555,6 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) /* Re-examine inner Ethernet packet */ oip = ip_hdr(skb); skb->protocol = eth_type_trans(skb, vxlan->dev); - skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); /* Ignore packet loops (and multicast echo) */ if (compare_ether_addr(eth_hdr(skb)->h_source, @@ -568,6 +566,7 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) __skb_tunnel_rx(skb, vxlan->dev); skb_reset_network_header(skb); + skb->ip_summed = CHECKSUM_NONE; err = IP_ECN_decapsulate(oip, skb); if (unlikely(err)) { |