From patchwork Wed Aug 24 16:37:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 662366 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 3sKCr809nTz9t14 for ; Thu, 25 Aug 2016 02:46:32 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b=Saip4Zr7; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756102AbcHXQqM (ORCPT ); Wed, 24 Aug 2016 12:46:12 -0400 Received: from mail-pa0-f47.google.com ([209.85.220.47]:33652 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755751AbcHXQqJ (ORCPT ); Wed, 24 Aug 2016 12:46:09 -0400 Received: by mail-pa0-f47.google.com with SMTP id ti13so8076170pac.0 for ; Wed, 24 Aug 2016 09:46:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=Z7BnWHECw8yhma4AI/TnTX0FyKKjtKaJdqjVp+Kae5M=; b=Saip4Zr7iWhEyFMhy6np8KfUHkKKOlt/rVq4RCkfN0nSnLXjMMGUtTBweLzmArXJ3u JPk9Y/8MxwujzlasYkOAD4PBkkq+JoMVenQlqMSn7CCYVsbv5PuZUBKwrWxncBt1Lpiv hlfLun73ppgUnDbYLPWdc9UJe4uajUtCodEcY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=Z7BnWHECw8yhma4AI/TnTX0FyKKjtKaJdqjVp+Kae5M=; b=WB/YVk2swcXpBE6XxRF9vZG4xH5JtrV95HlBmATQRnRHLe46lAjOpht7vfWXTvjnjT RJCVJAtfuVnbwXH/4mu9MGY+7wYUNIVABVGQ75eqCQ//mZFH8ba2IVLkhNwMRYyiNhIo Gb3Qpo3iKY85jfz0QwWPSChDIK00In2I759KTZExegMFgkWPr9Piz5gg500oGgF+5svY DMzN96yD1y1QjbEfMl/wXatx3W+Q6XV3ql69awLkHX+/9U9Ty0vU/Ul3G7CVKDcpxE1S ynqnwMoDj5Oc/d76ut2BHlHGAe2zWxGWmNf4L+DprjJT1mxDKDneSQK+X2qLZaTeo/ac 3RdA== X-Gm-Message-State: AE9vXwOh8yFBPxcat6C6lwtOyIjFIdG6zWn9R2Gyf545czBxGavtVqIpTw1BICy3B8qnPHMf X-Received: by 10.66.76.132 with SMTP id k4mr7367335paw.22.1472056673402; Wed, 24 Aug 2016 09:37:53 -0700 (PDT) Received: from [172.27.227.211] ([216.129.126.118]) by smtp.googlemail.com with ESMTPSA id p75sm14860347pfa.71.2016.08.24.09.37.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Aug 2016 09:37:52 -0700 (PDT) Subject: Re: [PATCH net-next 2/3] net: mpls: Fixups for GSO To: pravin shelar , Simon Horman References: <1471626542-13335-1-git-send-email-dsa@cumulusnetworks.com> <1471626542-13335-3-git-send-email-dsa@cumulusnetworks.com> <20160822122122.GA8689@penelope.isobedori.kobe.vergenet.net> <20160822145134.GA26491@penelope.isobedori.kobe.vergenet.net> <3297517c-2889-19fe-5aa4-89e1d14eadca@cumulusnetworks.com> <20160824072002.GA27254@penelope.isobedori.kobe.vergenet.net> Cc: Pravin B Shelar , Linux Kernel Network Developers , "David S. Miller" , buytenh@wantstofly.org, "Eric W. Biederman" , rshearma@brocade.com, tom@herbertland.com, Thomas Graf , olivier.dugeon@orange.com, Alexander Duyck , roopa@cumulusnetworks.com From: David Ahern Message-ID: <586321df-72c6-0dee-4ce6-22ca2a0860fb@cumulusnetworks.com> Date: Wed, 24 Aug 2016 10:37:51 -0600 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 8/24/16 10:28 AM, pravin shelar wrote: >> How do you feel about implementing the do_output() idea I suggested above? >> I'm happy to provide testing and review. > > I am not sure about changing do_output(). why not just use same scheme > to track mpls header in OVS datapath as done in mpls device? > was just replying with the same. Something like this should be able to handle multiple labels. The inner network header is set once and the outer one pointing to MPLS is adjusted each time a label is pushed: If it does, what else needs to be changed in OVS to handle the network layer now pointing to the MPLS labels? diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c index 1ecbd7715f6d..0f37b17e3a73 100644 --- a/net/openvswitch/actions.c +++ b/net/openvswitch/actions.c @@ -162,10 +162,16 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key, if (skb_cow_head(skb, MPLS_HLEN) < 0) return -ENOMEM; + if (!skb->inner_protocol) { + skb_set_inner_network_header(skb, skb->mac_len); + skb_set_inner_protocol(skb, skb->protocol); + } + skb_push(skb, MPLS_HLEN); memmove(skb_mac_header(skb) - MPLS_HLEN, skb_mac_header(skb), skb->mac_len); skb_reset_mac_header(skb); + skb_set_network_header(skb, skb->mac_len); new_mpls_lse = (__be32 *)skb_mpls_header(skb); *new_mpls_lse = mpls->mpls_lse; @@ -173,8 +179,7 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key, skb_postpush_rcsum(skb, new_mpls_lse, MPLS_HLEN); update_ethertype(skb, eth_hdr(skb), mpls->mpls_ethertype); - if (!skb->inner_protocol) - skb_set_inner_protocol(skb, skb->protocol); + skb->protocol = mpls->mpls_ethertype; invalidate_flow_key(key);