When RCO is in effect we want to ensure that the outer checksum is
properly offloaded. Don't set skb->encapsulation in this case to
ensure that checksum offload is later considered for hw_features
instead of hw_enc_features.

Signed-off-by: Tom Herbert <t...@herbertland.com>
---
 net/ipv4/udp_offload.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index b556ef6..4eedec6 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -94,11 +94,13 @@ static struct sk_buff *__skb_udp_tunnel_segment(struct 
sk_buff *skb,
        do {
                unsigned int len;
 
-               if (remcsum)
+               if (remcsum) {
                        skb->ip_summed = CHECKSUM_NONE;
-
-               /* Set up inner headers if we are offloading inner checksum */
-               if (skb->ip_summed == CHECKSUM_PARTIAL) {
+                       skb->encapsulation = 0;
+               } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
+                       /* Set up inner headers if we are offloading inner
+                        * checksum
+                        */
                        skb_reset_inner_headers(skb);
                        skb->encapsulation = 1;
                }
-- 
2.8.0.rc2

Reply via email to