From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ori Kam Subject: Re: [PATCH 2/3] ethdev: add flow api actions to modify TCP/UDP port numbers Date: Thu, 4 Oct 2018 13:55:13 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "indranil@chelsio.com" , "nirranjan@chelsio.com" To: Rahul Lakkireddy , "dev@dpdk.org" Return-path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50069.outbound.protection.outlook.com [40.107.5.69]) by dpdk.org (Postfix) with ESMTP id DAFAC1B456 for ; Thu, 4 Oct 2018 15:55:15 +0200 (CEST) In-Reply-To: Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > -----Original Message----- > From: dev On Behalf Of Rahul Lakkireddy > Sent: Monday, September 24, 2018 11:28 AM > To: dev@dpdk.org > Cc: indranil@chelsio.com; nirranjan@chelsio.com > Subject: [dpdk-dev] [PATCH 2/3] ethdev: add flow api actions to modify > TCP/UDP port numbers >=20 > Add actions: > - SET_TP_SRC - set a new TCP/UDP source port number. > - SET_TP_DST - set a new TCP/UDP destination port number. >=20 > Original work by Shagun Agrawal >=20 > Signed-off-by: Rahul Lakkireddy > --- > Changes since RFC v2: > - Updated comments, help messages, and doc to indicate that IP/TCP/UDP > of the outermost headers are modified. > - Updated comments and doc to indicate that a corresponding valid flow > pattern item must be specified to offload corresponding header rewrite > action. > - Updated release notes. >=20 > app/test-pmd/cmdline_flow.c | 52 +++++++++++++++++++++ > app/test-pmd/config.c | 4 ++ > doc/guides/prog_guide/rte_flow.rst | 36 ++++++++++++++ > doc/guides/rel_notes/release_18_11.rst | 2 + > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 10 ++++ > lib/librte_ethdev/rte_flow.c | 4 ++ > lib/librte_ethdev/rte_flow.h | 37 +++++++++++++++ > 7 files changed, 145 insertions(+) >=20 > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index 1432498a3..a9888cacf 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -251,6 +251,10 @@ enum index { > ACTION_SET_IPV6_SRC_IPV6_SRC, > ACTION_SET_IPV6_DST, > ACTION_SET_IPV6_DST_IPV6_DST, > + ACTION_SET_TP_SRC, > + ACTION_SET_TP_SRC_TP_SRC, > + ACTION_SET_TP_DST, > + ACTION_SET_TP_DST_TP_DST, > }; >=20 > /** Maximum size for pattern in struct rte_flow_item_raw. */ > @@ -828,6 +832,8 @@ static const enum index next_action[] =3D { > ACTION_SET_IPV4_DST, > ACTION_SET_IPV6_SRC, > ACTION_SET_IPV6_DST, > + ACTION_SET_TP_SRC, > + ACTION_SET_TP_DST, > ZERO, > }; >=20 > @@ -954,6 +960,18 @@ static const enum index action_set_ipv6_dst[] =3D { > ZERO, > }; >=20 > +static const enum index action_set_tp_src[] =3D { > + ACTION_SET_TP_SRC_TP_SRC, > + ACTION_NEXT, > + ZERO, > +}; > + > +static const enum index action_set_tp_dst[] =3D { > + ACTION_SET_TP_DST_TP_DST, > + ACTION_NEXT, > + ZERO, > +}; > + > static const enum index action_jump[] =3D { > ACTION_JUMP_GROUP, > ACTION_NEXT, > @@ -2574,6 +2592,40 @@ static const struct token token_list[] =3D { > (struct rte_flow_action_set_ipv6, ipv6_addr)), > .call =3D parse_vc_conf, > }, > + [ACTION_SET_TP_SRC] =3D { > + .name =3D "set_tp_src", > + .help =3D "set a new source port number in the outermost" > + " TCP/UDP header", > + .priv =3D PRIV_ACTION(SET_TP_SRC, > + sizeof(struct rte_flow_action_set_tp)), > + .next =3D NEXT(action_set_tp_src), > + .call =3D parse_vc, > + }, > + [ACTION_SET_TP_SRC_TP_SRC] =3D { > + .name =3D "port", > + .help =3D "new source port number to set", > + .next =3D NEXT(action_set_tp_src, NEXT_ENTRY(UNSIGNED)), > + .args =3D ARGS(ARGS_ENTRY_HTON > + (struct rte_flow_action_set_tp, port)), > + .call =3D parse_vc_conf, > + }, > + [ACTION_SET_TP_DST] =3D { > + .name =3D "set_tp_dst", > + .help =3D "set a new destination port number in the outermost" > + " TCP/UDP header", > + .priv =3D PRIV_ACTION(SET_TP_DST, > + sizeof(struct rte_flow_action_set_tp)), > + .next =3D NEXT(action_set_tp_dst), > + .call =3D parse_vc, > + }, > + [ACTION_SET_TP_DST_TP_DST] =3D { > + .name =3D "port", > + .help =3D "new destination port number to set", > + .next =3D NEXT(action_set_tp_dst, NEXT_ENTRY(UNSIGNED)), > + .args =3D ARGS(ARGS_ENTRY_HTON > + (struct rte_flow_action_set_tp, port)), > + .call =3D parse_vc_conf, > + }, > }; >=20 > /** Remove and return last entry from argument stack. */ > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 14dbdf7a3..1629a6d7a 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -1180,6 +1180,10 @@ static const struct { > sizeof(struct rte_flow_action_set_ipv6)), > MK_FLOW_ACTION(SET_IPV6_DST, > sizeof(struct rte_flow_action_set_ipv6)), > + MK_FLOW_ACTION(SET_TP_SRC, > + sizeof(struct rte_flow_action_set_tp)), > + MK_FLOW_ACTION(SET_TP_DST, > + sizeof(struct rte_flow_action_set_tp)), > }; >=20 > /** 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 b9bcaa3d1..4be160209 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -2148,6 +2148,42 @@ Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error > will be returned. > | ``ipv6_addr`` | new IPv6 destination address | > +---------------+------------------------------+ >=20 > +Action: ``SET_TP_SRC`` > +^^^^^^^^^^^^^^^^^^^^^^^^^ > + > +Set a new source port number in the outermost TCP/UDP header. > + > +It must be used with a valid RTE_FLOW_ITEM_TYPE_TCP or > RTE_FLOW_ITEM_TYPE_UDP > +flow pattern item. Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be > returned. > + > +.. _table_rte_flow_action_set_tp_src: > + > +.. table:: SET_TP_SRC > + > + +----------+-------------------------+ > + | Field | Value | > + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > + | ``port`` | new TCP/UDP source port | > + +---------------+--------------------+ > + > +Action: ``SET_TP_DST`` > +^^^^^^^^^^^^^^^^^^^^^^^^^ > + > +Set a new destination port number in the outermost TCP/UDP header. > + > +It must be used with a valid RTE_FLOW_ITEM_TYPE_TCP or > RTE_FLOW_ITEM_TYPE_UDP > +flow pattern item. Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be > returned. > + > +.. _table_rte_flow_action_set_tp_dst: > + > +.. table:: SET_TP_DST > + > + +----------+------------------------------+ > + | Field | Value | > + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > + | ``port`` | new TCP/UDP destination port | > + +---------------+-------------------------+ > + > Negative types > ~~~~~~~~~~~~~~ >=20 > diff --git a/doc/guides/rel_notes/release_18_11.rst > b/doc/guides/rel_notes/release_18_11.rst > index 782722318..84b0a6a4b 100644 > --- a/doc/guides/rel_notes/release_18_11.rst > +++ b/doc/guides/rel_notes/release_18_11.rst > @@ -93,6 +93,8 @@ New Features >=20 > * Modify source and destination IP addresses in the outermost IPv4/IPv= 6 > headers. > + * Modify source and destination port numbers in the outermost TCP/UDP > + headers. >=20 > API Changes > ----------- > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index 97d91f066..ffec7013b 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -3722,6 +3722,16 @@ This section lists supported actions and their > attributes, if any. >=20 > - ``ipv6_addr``: New IPv6 destination address. >=20 > +- ``of_set_tp_src``: Set a new source port number in the outermost TCP/U= DP > + header. > + > + - ``port``: New TCP/UDP source port number. > + > +- ``of_set_tp_dst``: Set a new destination port number in the outermost > TCP/UDP > + header. > + > + - ``port``: New TCP/UDP destination port number. > + > Destroying flow rules > ~~~~~~~~~~~~~~~~~~~~~ >=20 > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > index d4f1b9a05..409c79741 100644 > --- a/lib/librte_ethdev/rte_flow.c > +++ b/lib/librte_ethdev/rte_flow.c > @@ -117,6 +117,10 @@ static const struct rte_flow_desc_data > rte_flow_desc_action[] =3D { > sizeof(struct rte_flow_action_set_ipv6)), > MK_FLOW_ACTION(SET_IPV6_DST, > sizeof(struct rte_flow_action_set_ipv6)), > + MK_FLOW_ACTION(SET_TP_SRC, > + sizeof(struct rte_flow_action_set_tp)), > + MK_FLOW_ACTION(SET_TP_DST, > + sizeof(struct rte_flow_action_set_tp)), > }; >=20 > static int > diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h > index 0fe91ae89..cf5cecf42 100644 > --- a/lib/librte_ethdev/rte_flow.h > +++ b/lib/librte_ethdev/rte_flow.h > @@ -1545,6 +1545,28 @@ enum rte_flow_action_type { > * See struct rte_flow_action_set_ipv6. > */ > RTE_FLOW_ACTION_TYPE_SET_IPV6_DST, > + > + /** > + * Modify source port number in the outermost TCP/UDP header. > + * > + * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_TCP > + * or RTE_FLOW_ITEM_TYPE_UDP, then the PMD should return a > + * RTE_FLOW_ERROR_TYPE_ACTION error. > + * > + * See struct rte_flow_action_set_tp. > + */ > + RTE_FLOW_ACTION_TYPE_SET_TP_SRC, > + > + /** > + * Modify destination port number in the outermost TCP/UDP header. > + * > + * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_TCP > + * or RTE_FLOW_ITEM_TYPE_UDP, then the PMD should return a > + * RTE_FLOW_ERROR_TYPE_ACTION error. > + * > + * See struct rte_flow_action_set_tp. > + */ > + RTE_FLOW_ACTION_TYPE_SET_TP_DST, > }; >=20 > /** > @@ -1938,6 +1960,21 @@ struct rte_flow_action_set_ipv6 { > uint8_t ipv6_addr[16]; > }; >=20 > +/** > + * @warning > + * @b EXPERIMENTAL: this structure may change without prior notice > + * > + * RTE_FLOW_ACTION_TYPE_SET_TP_SRC > + * RTE_FLOW_ACTION_TYPE_SET_TP_DST > + * > + * Allows modification of source (RTE_FLOW_ACTION_TYPE_SET_TP_SRC) > + * and destination (RTE_FLOW_ACTION_TYPE_SET_TP_DST) port numbers > + * in the specified outermost TCP/UDP header. > + */ > +struct rte_flow_action_set_tp { > + uint16_t port; > +}; > + > /* > * Definition of a single action. > * > -- > 2.18.0 Acked-by: Ori Kam