diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2008-12-16 02:41:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-12-16 02:41:09 -0500 |
commit | 73cc19f1556b95976934de236fd9043f7208844f (patch) | |
tree | 4ebe390a9b328bba32d149b9f83e998836806f5d /include/net | |
parent | d565b0a1a9b6ee7dff46e1f68b26b526ac11ae50 (diff) |
ipv4: Add GRO infrastructure
This patch adds GRO support for IPv4.
The criteria for merging is more stringent than LRO, in particular,
we require all fields in the IP header to be identical except for
the length, ID and checksum. In addition, the ID must form an
arithmetic sequence with a difference of one.
The ID requirement might seem overly strict, however, most hardware
TSO solutions already obey this rule. Linux itself also obeys this
whether GSO is in use or not.
In future we could relax this rule by storing the IDs (or rather
making sure that we don't drop them when pulling the aggregate
skb's tail).
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/protocol.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/net/protocol.h b/include/net/protocol.h index 8d024d7cb741..cb2965aa1b62 100644 --- a/include/net/protocol.h +++ b/include/net/protocol.h | |||
@@ -39,6 +39,9 @@ struct net_protocol { | |||
39 | int (*gso_send_check)(struct sk_buff *skb); | 39 | int (*gso_send_check)(struct sk_buff *skb); |
40 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | 40 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, |
41 | int features); | 41 | int features); |
42 | struct sk_buff **(*gro_receive)(struct sk_buff **head, | ||
43 | struct sk_buff *skb); | ||
44 | int (*gro_complete)(struct sk_buff *skb); | ||
42 | unsigned int no_policy:1, | 45 | unsigned int no_policy:1, |
43 | netns_ok:1; | 46 | netns_ok:1; |
44 | }; | 47 | }; |