From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8]) by dpdk.org (Postfix) with ESMTP id 9696C3772 for ; Wed, 29 Aug 2018 10:46:08 +0200 (CEST) Received: from localhost (scalar.blr.asicdesigners.com [10.193.185.94]) by stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id w7T8k45f008401; Wed, 29 Aug 2018 01:46:05 -0700 Date: Wed, 29 Aug 2018 14:15:58 +0530 From: Rahul Lakkireddy To: Andrew Rybchenko Cc: "dev@dpdk.org" , Shagun Agarwal , Indranil Choudhury , Nirranjan Kirubaharan Message-ID: <20180829084556.GA10453@chelsio.com> References: <1535374462-6490-1-git-send-email-rahul.lakkireddy@chelsio.com> <14727d6f-8d03-84d6-5cac-60f89c0227ec@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <14727d6f-8d03-84d6-5cac-60f89c0227ec@solarflare.com> User-Agent: Mutt/1.5.24 (2015-08-30) Subject: Re: [dpdk-dev] [RFC] ethdev: add action to swap source and destination MAC to flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Aug 2018 08:46:09 -0000 On Tuesday, August 08/28/18, 2018 at 16:27:43 +0530, Andrew Rybchenko wrote: > On 08/27/2018 03:54 PM, Rahul Lakkireddy wrote: > > From: Shagun Agrawal [1] > > This action is useful for offloading loopback mode, where the hardware > will swap source and destination MAC address before looping back the > packet. This action can be used in conjunction with other rewrite > actions to achieve MAC layer transparent NAT where the MAC addresses > are swapped before either the source or destination MAC address > is rewritten and NAT is performed. > > Signed-off-by: Shagun Agrawal [2] > Signed-off-by: Rahul Lakkireddy [3] > --- > app/test-pmd/cmdline_flow.c | 9 +++++++++ > app/test-pmd/config.c | 1 + > doc/guides/prog_guide/rte_flow.rst | 15 +++++++++++++++ > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 ++ > lib/librte_ethdev/rte_flow.c | 1 + > lib/librte_ethdev/rte_flow.h | 7 +++++++ > 6 files changed, 35 insertions(+) > > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index f9260600e..4b83b55c4 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -243,6 +243,7 @@ enum index { > ACTION_VXLAN_DECAP, > ACTION_NVGRE_ENCAP, > ACTION_NVGRE_DECAP, > + ACTION_MAC_SWAP, > }; > > /** Maximum size for pattern in struct rte_flow_item_raw. */ > @@ -816,6 +817,7 @@ static const enum index next_action[] = { > ACTION_VXLAN_DECAP, > ACTION_NVGRE_ENCAP, > ACTION_NVGRE_DECAP, > + ACTION_MAC_SWAP, > ZERO, > }; > > @@ -2470,6 +2472,13 @@ static const struct token token_list[] = { > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > .call = parse_vc, > }, > + [ACTION_MAC_SWAP] = { > + .name = "mac_swap", > + .help = "swap source and destination mac address", > + .priv = PRIV_ACTION(MAC_SWAP, 0), > + .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > + .call = parse_vc, > + }, > }; > > /** Remove and return last entry from argument stack. */ > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 14ccd6864..b7393967a 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -1153,6 +1153,7 @@ static const struct { > sizeof(struct rte_flow_action_of_pop_mpls)), > MK_FLOW_ACTION(OF_PUSH_MPLS, > sizeof(struct rte_flow_action_of_push_mpls)), > + MK_FLOW_ACTION(MAC_SWAP, 0), > }; > > /** Compute storage space needed by action configuration and copy it. */ > diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst > index b305a72a5..530dbc504 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -2076,6 +2076,21 @@ RTE_FLOW_ERROR_TYPE_ACTION error should be returned. > > This action modifies the payload of matched flows. > > +Action: ``MAC_SWAP`` > +^^^^^^^^^^^^^^^^^^^^^^^^^ > + > +Swap source and destination mac address. > + > +.. _table_rte_flow_action_mac_swap: > + > +.. table:: MAC_SWAP > + > + +---------------+ > + | Field | > + +===============+ > + | no properties | > + +---------------+ > + > Negative types > ~~~~~~~~~~~~~~ > > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index dde205a2b..4f0da4fb6 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -3697,6 +3697,8 @@ This section lists supported actions and their attributes, if any. > - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of > the NVGRE tunnel network overlay from the matched flow. > > +- ``mac_swap``: Swap source and destination mac address. > + > Destroying flow rules > ~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > index cff4b5209..04b0b40ea 100644 > --- a/lib/librte_ethdev/rte_flow.c > +++ b/lib/librte_ethdev/rte_flow.c > @@ -109,6 +109,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { > sizeof(struct rte_flow_action_of_pop_mpls)), > MK_FLOW_ACTION(OF_PUSH_MPLS, > sizeof(struct rte_flow_action_of_push_mpls)), > + MK_FLOW_ACTION(MAC_SWAP, 0), > }; > > static int > diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h > index f8ba71cdb..e1fa17b7e 100644 > --- a/lib/librte_ethdev/rte_flow.h > +++ b/lib/librte_ethdev/rte_flow.h > @@ -1505,6 +1505,13 @@ enum rte_flow_action_type { > * error. > */ > RTE_FLOW_ACTION_TYPE_NVGRE_DECAP, > + > + /** > + * swap the source and destination mac address in ethernet header > > Swap the source and destination MAC address in Ethernet header. > > May be it is useful to highlight that outermost Ethernet header is edited. > Makes sense. Will update in v2. > MAC address rewrite actions require Ethernet pattern item. Is it required > here? > Yes, a valid Ethernet pattern item is required here as well. Will update in v2. > + * > + * No associated configuration structure. > + */ > + RTE_FLOW_ACTION_TYPE_MAC_SWAP, > }; > > /** > > References > > Visible links > 1. mailto:shaguna@chelsio.com > 2. mailto:shaguna@chelsio.com > 3. mailto:rahul.lakkireddy@chelsio.com Thanks, Rahul