net: gre: Implement LCO for GRE over IPv4
Signed-off-by: Edward Cree <ecree@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
06f622926d
commit
53936107ba
|
@ -440,6 +440,17 @@ drop:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static __sum16 gre_checksum(struct sk_buff *skb)
|
||||
{
|
||||
__wsum csum;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||
csum = lco_csum(skb);
|
||||
else
|
||||
csum = skb_checksum(skb, 0, skb->len, 0);
|
||||
return csum_fold(csum);
|
||||
}
|
||||
|
||||
static void build_header(struct sk_buff *skb, int hdr_len, __be16 flags,
|
||||
__be16 proto, __be32 key, __be32 seq)
|
||||
{
|
||||
|
@ -467,8 +478,7 @@ static void build_header(struct sk_buff *skb, int hdr_len, __be16 flags,
|
|||
!(skb_shinfo(skb)->gso_type &
|
||||
(SKB_GSO_GRE | SKB_GSO_GRE_CSUM))) {
|
||||
*ptr = 0;
|
||||
*(__sum16 *)ptr = csum_fold(skb_checksum(skb, 0,
|
||||
skb->len, 0));
|
||||
*(__sum16 *)ptr = gre_checksum(skb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -493,7 +503,7 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
|
|||
static struct sk_buff *gre_handle_offloads(struct sk_buff *skb,
|
||||
bool csum)
|
||||
{
|
||||
return iptunnel_handle_offloads(skb, csum,
|
||||
return iptunnel_handle_offloads(skb, false,
|
||||
csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue