From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 23E3F989F for ; Tue, 17 Apr 2018 11:08:58 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Apr 2018 02:08:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,463,1517904000"; d="scan'208";a="47558647" Received: from awalabdu-mobl.ger.corp.intel.com (HELO [163.33.228.229]) ([163.33.228.229]) by fmsmga001.fm.intel.com with ESMTP; 17 Apr 2018 02:08:56 -0700 To: Adrien Mazarguil , Thomas Monjalon , Ferruh Yigit , dev@dpdk.org Cc: "Zhang, Qi Z" References: <20180410162022.9101-1-adrien.mazarguil@6wind.com> <20180416150525.2817-1-adrien.mazarguil@6wind.com> <20180416150525.2817-16-adrien.mazarguil@6wind.com> From: Mohammad Abdul Awal Message-ID: <1c5723ca-469d-c4a1-fb4f-57082728e0f1@intel.com> Date: Tue, 17 Apr 2018 10:08:56 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180416150525.2817-16-adrien.mazarguil@6wind.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH v4 15/16] ethdev: add physical port action 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: Tue, 17 Apr 2018 09:08:59 -0000 On 16/04/2018 17:22, Adrien Mazarguil wrote: > This patch adds the missing action counterpart to the PHY_PORT pattern > item, that is, the ability to directly inject matching traffic into a > physical port of the underlying device. > > It breaks ABI compatibility for the following public functions: > > - rte_flow_copy() > - rte_flow_create() > - rte_flow_query() > - rte_flow_validate() > > Signed-off-by: Adrien Mazarguil > Acked-by: Andrew Rybchenko > Cc: "Zhang, Qi Z" Acked-by: Mohammad Abdul Awal > --- > app/test-pmd/cmdline_flow.c | 35 ++++++++++++++++++++++++ > app/test-pmd/config.c | 1 + > doc/guides/prog_guide/rte_flow.rst | 20 ++++++++++++++ > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++++ > lib/librte_ether/rte_flow.c | 1 + > lib/librte_ether/rte_flow.h | 22 +++++++++++++++ > 6 files changed, 84 insertions(+) > > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index f9f937277..356714801 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -182,6 +182,9 @@ enum index { > ACTION_VF, > ACTION_VF_ORIGINAL, > ACTION_VF_ID, > + ACTION_PHY_PORT, > + ACTION_PHY_PORT_ORIGINAL, > + ACTION_PHY_PORT_INDEX, > ACTION_METER, > ACTION_METER_ID, > }; > @@ -623,6 +626,7 @@ static const enum index next_action[] = { > ACTION_RSS, > ACTION_PF, > ACTION_VF, > + ACTION_PHY_PORT, > ACTION_METER, > ZERO, > }; > @@ -657,6 +661,13 @@ static const enum index action_vf[] = { > ZERO, > }; > > +static const enum index action_phy_port[] = { > + ACTION_PHY_PORT_ORIGINAL, > + ACTION_PHY_PORT_INDEX, > + ACTION_NEXT, > + ZERO, > +}; > + > static const enum index action_meter[] = { > ACTION_METER_ID, > ACTION_NEXT, > @@ -1714,6 +1725,30 @@ static const struct token token_list[] = { > .args = ARGS(ARGS_ENTRY(struct rte_flow_action_vf, id)), > .call = parse_vc_conf, > }, > + [ACTION_PHY_PORT] = { > + .name = "phy_port", > + .help = "direct packets to physical port index", > + .priv = PRIV_ACTION(PHY_PORT, > + sizeof(struct rte_flow_action_phy_port)), > + .next = NEXT(action_phy_port), > + .call = parse_vc, > + }, > + [ACTION_PHY_PORT_ORIGINAL] = { > + .name = "original", > + .help = "use original port index if possible", > + .next = NEXT(action_phy_port, NEXT_ENTRY(BOOLEAN)), > + .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_action_phy_port, > + original, 1)), > + .call = parse_vc_conf, > + }, > + [ACTION_PHY_PORT_INDEX] = { > + .name = "index", > + .help = "physical port index", > + .next = NEXT(action_phy_port, NEXT_ENTRY(UNSIGNED)), > + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_phy_port, > + index)), > + .call = parse_vc_conf, > + }, > [ACTION_METER] = { > .name = "meter", > .help = "meter the directed packets at given id", > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 840320108..2d68f1fb0 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -1074,6 +1074,7 @@ static const struct { > MK_FLOW_ACTION(RSS, sizeof(struct rte_flow_action_rss)), > MK_FLOW_ACTION(PF, 0), > MK_FLOW_ACTION(VF, sizeof(struct rte_flow_action_vf)), > + MK_FLOW_ACTION(PHY_PORT, sizeof(struct rte_flow_action_phy_port)), > MK_FLOW_ACTION(METER, sizeof(struct rte_flow_action_meter)), > }; > > diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst > index 4e053c24b..a39c1e1b0 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -1433,6 +1433,26 @@ See `Item: VF`_. > | ``id`` | VF ID | > +--------------+--------------------------------+ > > +Action: ``PHY_PORT`` > +^^^^^^^^^^^^^^^^^^^^ > + > +Directs matching traffic to a given physical port index of the underlying > +device. > + > +See `Item: PHY_PORT`_. > + > +.. _table_rte_flow_action_phy_port: > + > +.. table:: PHY_PORT > + > + +--------------+-------------------------------------+ > + | Field | Value | > + +==============+=====================================+ > + | ``original`` | use original port index if possible | > + +--------------+-------------------------------------+ > + | ``index`` | physical port index | > + +--------------+-------------------------------------+ > + > Action: ``METER`` > ^^^^^^^^^^^^^^^^^ > > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index a2bbd1930..64d8dfddb 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -3423,6 +3423,11 @@ This section lists supported actions and their attributes, if any. > - ``original {boolean}``: use original VF ID if possible. > - ``id {unsigned}``: VF ID. > > +- ``phy_port``: direct packets to physical port index. > + > + - ``original {boolean}``: use original port index if possible. > + - ``index {unsigned}``: physical port index. > + > Destroying flow rules > ~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/lib/librte_ether/rte_flow.c b/lib/librte_ether/rte_flow.c > index 36e277a4f..00989c73b 100644 > --- a/lib/librte_ether/rte_flow.c > +++ b/lib/librte_ether/rte_flow.c > @@ -76,6 +76,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { > MK_FLOW_ACTION(RSS, sizeof(struct rte_flow_action_rss)), > MK_FLOW_ACTION(PF, 0), > MK_FLOW_ACTION(VF, sizeof(struct rte_flow_action_vf)), > + MK_FLOW_ACTION(PHY_PORT, sizeof(struct rte_flow_action_phy_port)), > }; > > static int > diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h > index 2c7c4d009..58b75e934 100644 > --- a/lib/librte_ether/rte_flow.h > +++ b/lib/librte_ether/rte_flow.h > @@ -989,6 +989,14 @@ enum rte_flow_action_type { > RTE_FLOW_ACTION_TYPE_VF, > > /** > + * Directs packets to a given physical port index of the underlying > + * device. > + * > + * See struct rte_flow_action_phy_port. > + */ > + RTE_FLOW_ACTION_TYPE_PHY_PORT, > + > + /** > * Traffic metering and policing (MTR). > * > * See struct rte_flow_action_meter. > @@ -1112,6 +1120,20 @@ struct rte_flow_action_vf { > }; > > /** > + * RTE_FLOW_ACTION_TYPE_PHY_PORT > + * > + * Directs packets to a given physical port index of the underlying > + * device. > + * > + * @see RTE_FLOW_ITEM_TYPE_PHY_PORT > + */ > +struct rte_flow_action_phy_port { > + uint32_t original:1; /**< Use original port index if possible. */ > + uint32_t reserved:31; /**< Reserved, must be zero. */ > + uint32_t index; /**< Physical port index. */ > +}; > + > +/** > * RTE_FLOW_ACTION_TYPE_METER > * > * Traffic metering and policing (MTR).