diff options
author | Tom Herbert <therbert@google.com> | 2015-02-10 19:30:31 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-11 18:12:12 -0500 |
commit | 15e2396d4e3ce23188852b74d924107982c63b42 (patch) | |
tree | 98ffbc9b291dbd31872cea91843f69d2bcbdf83d /net | |
parent | baa32ff42871f2d4aca9c08c9403d0e497325564 (diff) |
net: Infrastructure for CHECKSUM_PARTIAL with remote checsum offload
This patch adds infrastructure so that remote checksum offload can
set CHECKSUM_PARTIAL instead of calling csum_partial and writing
the modfied checksum field.
Add skb_remcsum_adjust_partial function to set an skb for using
CHECKSUM_PARTIAL with remote checksum offload. Changed
skb_remcsum_process and skb_gro_remcsum_process to take a boolean
argument to indicate if checksum partial can be set or the
checksum needs to be modified using the normal algorithm.
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 1 | ||||
-rw-r--r-- | net/ipv4/fou.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index d030575532a2..48c6ecb18f3c 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -4024,6 +4024,7 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff | |||
4024 | NAPI_GRO_CB(skb)->flush = 0; | 4024 | NAPI_GRO_CB(skb)->flush = 0; |
4025 | NAPI_GRO_CB(skb)->free = 0; | 4025 | NAPI_GRO_CB(skb)->free = 0; |
4026 | NAPI_GRO_CB(skb)->udp_mark = 0; | 4026 | NAPI_GRO_CB(skb)->udp_mark = 0; |
4027 | NAPI_GRO_CB(skb)->gro_remcsum_start = 0; | ||
4027 | 4028 | ||
4028 | /* Setup for GRO checksum validation */ | 4029 | /* Setup for GRO checksum validation */ |
4029 | switch (skb->ip_summed) { | 4030 | switch (skb->ip_summed) { |
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c index 7fa8d36e56d4..d320f575cc62 100644 --- a/net/ipv4/fou.c +++ b/net/ipv4/fou.c | |||
@@ -75,7 +75,7 @@ static struct guehdr *gue_remcsum(struct sk_buff *skb, struct guehdr *guehdr, | |||
75 | return NULL; | 75 | return NULL; |
76 | guehdr = (struct guehdr *)&udp_hdr(skb)[1]; | 76 | guehdr = (struct guehdr *)&udp_hdr(skb)[1]; |
77 | 77 | ||
78 | skb_remcsum_process(skb, (void *)guehdr + hdrlen, start, offset); | 78 | skb_remcsum_process(skb, (void *)guehdr + hdrlen, start, offset, true); |
79 | 79 | ||
80 | return guehdr; | 80 | return guehdr; |
81 | } | 81 | } |
@@ -230,7 +230,7 @@ static struct guehdr *gue_gro_remcsum(struct sk_buff *skb, unsigned int off, | |||
230 | } | 230 | } |
231 | 231 | ||
232 | skb_gro_remcsum_process(skb, (void *)guehdr + hdrlen, | 232 | skb_gro_remcsum_process(skb, (void *)guehdr + hdrlen, |
233 | start, offset, grc); | 233 | start, offset, grc, true); |
234 | 234 | ||
235 | skb->remcsum_offload = 1; | 235 | skb->remcsum_offload = 1; |
236 | 236 | ||