From patchwork Thu Feb 11 21:01:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Cree X-Patchwork-Id: 582047 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 81C05140C1E for ; Fri, 12 Feb 2016 08:01:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751337AbcBKVBq (ORCPT ); Thu, 11 Feb 2016 16:01:46 -0500 Received: from nbfkord-smmo01.seg.att.com ([209.65.160.76]:22289 "EHLO nbfkord-smmo01.seg.att.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751067AbcBKVBp (ORCPT ); Thu, 11 Feb 2016 16:01:45 -0500 Received: from unknown [12.187.104.26] (EHLO webmail.solarflare.com) by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-6) with ESMTP id 9b6fcb65.2b4d61007940.1021603.00-2463.2511184.nbfkord-smmo01.seg.att.com (envelope-from ); Thu, 11 Feb 2016 21:01:45 +0000 (UTC) X-MXL-Hash: 56bcf6b920be07e3-4e5a834acf5c712613775860984f544b12f5957e Received: from unknown [12.187.104.26] (EHLO webmail.solarflare.com) by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-6) over TLS secured channel with ESMTP id 1a6fcb65.0.1021534.00-2341.2510988.nbfkord-smmo01.seg.att.com (envelope-from ); Thu, 11 Feb 2016 21:01:21 +0000 (UTC) X-MXL-Hash: 56bcf6a166518444-4b4a5301d73573c19d77de0d0e4887064abdc2c9 Received: from ec-desktop.uk.level5networks.com (10.17.20.45) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Thu, 11 Feb 2016 13:01:15 -0800 Date: Thu, 11 Feb 2016 21:01:07 +0000 From: Edward Cree X-X-Sender: ehc@ec-desktop.uk.level5networks.com To: David Miller CC: , , Subject: [PATCH v5 net-next 6/8] net: gre: Implement LCO for GRE over IPv4 Message-ID: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 X-Originating-IP: [10.17.20.45] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ocex03.SolarFlarecom.com (10.20.40.36) X-AnalysisOut: [v=2.0 cv=XtNNzy59 c=1 sm=1 a=8BlWFWvVlq5taO8ncb8nKg==:17 a] X-AnalysisOut: [=fVG4DLb5TBsA:10 a=jFJIQSaiL_oA:10 a=zRKbQ67AAAAA:8 a=9EIz] X-AnalysisOut: [qikiRxO9tfnEvA8A:9 a=CjuIK1q_8ugA:10 a=weYw5-ixvhFyegyb:21] X-Spam: [F=0.2214543580; CM=0.500; S=0.221(2015072901)] X-MAIL-FROM: X-SOURCE-IP: [12.187.104.26] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Edward Cree --- net/ipv4/ip_gre.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 7c51c4e..9b31532 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -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); }