From patchwork Mon Feb 25 06:05:05 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pravin B Shelar X-Patchwork-Id: 222849 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 765F22C0091 for ; Mon, 25 Feb 2013 17:05:58 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751162Ab3BYGFy (ORCPT ); Mon, 25 Feb 2013 01:05:54 -0500 Received: from na3sys009aog109.obsmtp.com ([74.125.149.201]:40103 "HELO na3sys009aog109.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1750706Ab3BYGFx (ORCPT ); Mon, 25 Feb 2013 01:05:53 -0500 Received: from mail-pb0-f69.google.com ([209.85.160.69]) (using TLSv1) by na3sys009aob109.postini.com ([74.125.148.12]) with SMTP ID DSNKUSr/QEopwIcmuEIfGYlr1asn2Feggihb@postini.com; Sun, 24 Feb 2013 22:05:53 PST Received: by mail-pb0-f69.google.com with SMTP id rp8so3830375pbb.0 for ; Sun, 24 Feb 2013 22:05:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-received:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state; bh=njlG2XN8odksFdjwcbjdYOK8DZJMar12ho43gUTKHy4=; b=nYvCKflxrGo1OTopLIJHdBzVSu7ZJNsEW1goxqRHjQdWjwt9pzmVsrW1CKb5QMCLpp xZMiKgT6DVXRA7VHi5Yz+SqAXF8PuYHiGVB1rHwLk60BicbuYtCHCXQYNYNvaH/AvBdu FsQH0zlCfgVyqZI6GAXKBUsjky0r8h67SoDna+eI4Bw88tHfkkrK2qKkTDIz7O95T/xA 0Z82bAfiJuvFLzrKwXUU+XTYbXVNLg2m5gM+HpnLhWciYcDIWiClTzJXXI2bi/Ult8m5 eivCQniCADTP0KISp5MhvJyCHzHntbtHR6sclps0HC1pJuWSnvBIu0v+hcB2Ubd14/RH AaGg== X-Received: by 10.68.25.138 with SMTP id c10mr16412211pbg.133.1361772352775; Sun, 24 Feb 2013 22:05:52 -0800 (PST) X-Received: by 10.68.25.138 with SMTP id c10mr16412203pbg.133.1361772352683; Sun, 24 Feb 2013 22:05:52 -0800 (PST) Received: from localhost (c-76-126-241-147.hsd1.ca.comcast.net. [76.126.241.147]) by mx.google.com with ESMTPS id kb3sm11584934pbc.21.2013.02.24.22.05.51 (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Sun, 24 Feb 2013 22:05:51 -0800 (PST) From: Pravin B Shelar To: davem@davemloft.net Cc: netdev@vger.kernel.org, dmitry@broadcom.com, Pravin B Shelar Subject: [PATCH net-next 1/2] IP_GRE: Fix GRE_CSUM case. Date: Sun, 24 Feb 2013 22:05:05 -0800 Message-Id: <1361772305-1665-1-git-send-email-pshelar@nicira.com> X-Mailer: git-send-email 1.7.12.315.g682ce8b X-Gm-Message-State: ALoCoQkgYVdCon3EIE+TYlSMeYzI3Om7bXzu6hxYn+qQnLLpn4LBaujpsbuQm9aOBhMkX+Azyeg9sfnBE9fJZ1Sumta3vqiPCxpa64f/Yc4TYtn7wIY8ODpUtldQBcDb63DJTyA6E6W7QWmj6oUxxyMv7+lHSIK3TVS8ZG7KOFG/zcB2NkAp5Zc= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org commit "ip_gre: allow CSUM capable devices to handle packets" aa0e51cdda005cd37e2, broke GRE_CSUM case. GRE_CSUM needs checksum computed for inner packet. Therefore csum-calculation can not be offloaded if tunnel device requires GRE_CSUM. Following patch fixes it by computing inner packet checksum for GRE_CSUM type, for all other type of GRE devices csum is offloaded. CC: Dmitry Kravkov Signed-off-by: Pravin B Shelar Acked-by: Dmitry Kravkov --- net/ipv4/ip_gre.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 5ef4da7..9b4996d 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -735,7 +735,7 @@ drop: return 0; } -static struct sk_buff *handle_offloads(struct sk_buff *skb) +static struct sk_buff *handle_offloads(struct ip_tunnel *tunnel, struct sk_buff *skb) { int err; @@ -745,8 +745,12 @@ static struct sk_buff *handle_offloads(struct sk_buff *skb) goto error; skb_shinfo(skb)->gso_type |= SKB_GSO_GRE; return skb; - } - if (skb->ip_summed != CHECKSUM_PARTIAL) + } else if (skb->ip_summed == CHECKSUM_PARTIAL && + tunnel->parms.o_flags&GRE_CSUM) { + err = skb_checksum_help(skb); + if (unlikely(err)) + goto error; + } else if (skb->ip_summed != CHECKSUM_PARTIAL) skb->ip_summed = CHECKSUM_NONE; return skb; @@ -776,7 +780,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev int err; int pkt_len; - skb = handle_offloads(skb); + skb = handle_offloads(tunnel, skb); if (IS_ERR(skb)) { dev->stats.tx_dropped++; return NETDEV_TX_OK;