net: add gro_compute_pseudo functions
authorTom Herbert <therbert@google.com>
Fri, 22 Aug 2014 20:34:04 +0000 (13:34 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Aug 2014 01:09:23 +0000 (18:09 -0700)
Add inet_gro_compute_pseudo and ip6_gro_compute_pseudo. These are
the logical equivalents of inet_compute_pseudo and ip6_compute_pseudo
for GRO path. The IP header is taken from skb_gro_network_header.

Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip.h
include/net/ip6_checksum.h

index db4a771b9ef3a6893bb2ae5d5f8692bfec5c571d..c8fd6112bd0b49f772557b4ec56c3737ad65594e 100644 (file)
@@ -364,6 +364,14 @@ static inline void inet_set_txhash(struct sock *sk)
        sk->sk_txhash = flow_hash_from_keys(&keys);
 }
 
+static inline __wsum inet_gro_compute_pseudo(struct sk_buff *skb, int proto)
+{
+       const struct iphdr *iph = skb_gro_network_header(skb);
+
+       return csum_tcpudp_nofold(iph->saddr, iph->daddr,
+                                 skb_gro_len(skb), proto, 0);
+}
+
 /*
  *     Map a multicast IP onto multicast MAC for type ethernet.
  */
index 55236cb711745fc76ef4c897bcf70e957b34611c..1a49b73f7f6e372381f9d1f3b7cffdc5649794c6 100644 (file)
@@ -48,6 +48,14 @@ static inline __wsum ip6_compute_pseudo(struct sk_buff *skb, int proto)
                                            skb->len, proto, 0));
 }
 
+static inline __wsum ip6_gro_compute_pseudo(struct sk_buff *skb, int proto)
+{
+       const struct ipv6hdr *iph = skb_gro_network_header(skb);
+
+       return ~csum_unfold(csum_ipv6_magic(&iph->saddr, &iph->daddr,
+                                           skb_gro_len(skb), proto, 0));
+}
+
 static __inline__ __sum16 tcp_v6_check(int len,
                                   const struct in6_addr *saddr,
                                   const struct in6_addr *daddr,