diff options
author | stephen hemminger <shemminger@vyatta.com> | 2012-10-09 16:35:52 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-10-10 22:41:22 -0400 |
commit | d97c00a32198f0d066556006cfcd409efb28f746 (patch) | |
tree | 1dac2ba815c1662981b449d687901876bc6fc8a1 /drivers/net | |
parent | 2840bf22866935fe7197582bcbe2cde4503e0bba (diff) |
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>
Diffstat (limited to 'drivers/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 0b95d5fffce7..763061d97921 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) | |||
537 | } | 537 | } |
538 | 538 | ||
539 | __skb_pull(skb, sizeof(struct vxlanhdr)); | 539 | __skb_pull(skb, sizeof(struct vxlanhdr)); |
540 | skb_postpull_rcsum(skb, eth_hdr(skb), sizeof(struct vxlanhdr)); | ||
541 | 540 | ||
542 | /* Is this VNI defined? */ | 541 | /* Is this VNI defined? */ |
543 | vni = ntohl(vxh->vx_vni) >> 8; | 542 | vni = ntohl(vxh->vx_vni) >> 8; |
@@ -556,7 +555,6 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) | |||
556 | /* Re-examine inner Ethernet packet */ | 555 | /* Re-examine inner Ethernet packet */ |
557 | oip = ip_hdr(skb); | 556 | oip = ip_hdr(skb); |
558 | skb->protocol = eth_type_trans(skb, vxlan->dev); | 557 | skb->protocol = eth_type_trans(skb, vxlan->dev); |
559 | skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); | ||
560 | 558 | ||
561 | /* Ignore packet loops (and multicast echo) */ | 559 | /* Ignore packet loops (and multicast echo) */ |
562 | if (compare_ether_addr(eth_hdr(skb)->h_source, | 560 | 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) | |||
568 | 566 | ||
569 | __skb_tunnel_rx(skb, vxlan->dev); | 567 | __skb_tunnel_rx(skb, vxlan->dev); |
570 | skb_reset_network_header(skb); | 568 | skb_reset_network_header(skb); |
569 | skb->ip_summed = CHECKSUM_NONE; | ||
571 | 570 | ||
572 | err = IP_ECN_decapsulate(oip, skb); | 571 | err = IP_ECN_decapsulate(oip, skb); |
573 | if (unlikely(err)) { | 572 | if (unlikely(err)) { |