[v2,0/7] ethdev: add flow API object converter

Message ID 20180803132032.29038-1-adrien.mazarguil@6wind.com (mailing list archive)
Headers
Series ethdev: add flow API object converter |

Message

Adrien Mazarguil Aug. 3, 2018, 1:36 p.m. UTC
  This is a follow up to the "Flow API helpers enhancements" series submitted
almost a year ago [1]. The new title is due to the reduced scope of this
version.

rte_flow_conv() is a flexible replacement to rte_flow_copy(), itself a
temporary solution pending something better [2]. It replaces a lot of
duplicated code found in testpmd and removes some of the maintenance burden
that developers tend to forget (me included) when modifying pattern
item or actions (updating app/test-pmd/config.c to be clear).

This series was unearthed in order to complete the implementation of
RTE_FLOW_ACTION_TYPE_ENCAP_(VXLAN|NVGRE) in testpmd [3] without having to
duplicate existing code once again.

See individual patches for specific changes in this version.

v2 changes:

- rte_flow_copy() is kept, albeit deprecated, no API/ABI impact.
- Updated bonding PMD.
- No more automatic generation of rte_flow_conv.h.

[1] https://mails.dpdk.org/archives/dev/2017-October/077551.html
[2] https://mails.dpdk.org/archives/dev/2017-July/070492.html
[3] Currently the command-line parser (cmdline_flow.c) is aware of these
    actions, however config.c isn't. Flow rules with such actions cannot
    be created and cannot be validated with PMDs that implement them.

Adrien Mazarguil (7):
  ethdev: add flow API object converter
  ethdev: add flow API item/action name conversion
  app/testpmd: rely on flow API conversion function
  net/failsafe: switch to flow API object conversion function
  net/bonding: switch to flow API object conversion function
  ethdev: deprecate rte_flow_copy function
  ethdev: add missing item/actions to flow object converter

 app/test-pmd/config.c                      | 407 +++------------
 app/test-pmd/testpmd.h                     |   7 +-
 doc/guides/prog_guide/rte_flow.rst         |  20 +
 drivers/net/bonding/rte_eth_bond_api.c     |   6 +-
 drivers/net/bonding/rte_eth_bond_flow.c    |  31 +-
 drivers/net/bonding/rte_eth_bond_private.h |   5 +-
 drivers/net/failsafe/failsafe_ether.c      |   6 +-
 drivers/net/failsafe/failsafe_flow.c       |  31 +-
 drivers/net/failsafe/failsafe_private.h    |   5 +-
 lib/librte_ethdev/rte_ethdev_version.map   |   1 +
 lib/librte_ethdev/rte_flow.c               | 666 ++++++++++++++++++------
 lib/librte_ethdev/rte_flow.h               | 230 +++++++-
 12 files changed, 883 insertions(+), 532 deletions(-)
  

Comments

Thomas Monjalon Aug. 3, 2018, 2:06 p.m. UTC | #1
03/08/2018 15:36, Adrien Mazarguil:
> Adrien Mazarguil (7):
>   ethdev: add flow API object converter
>   ethdev: add flow API item/action name conversion
>   app/testpmd: rely on flow API conversion function
>   net/failsafe: switch to flow API object conversion function
>   net/bonding: switch to flow API object conversion function
>   ethdev: deprecate rte_flow_copy function
>   ethdev: add missing item/actions to flow object converter

This series will be considered for 18.11.

As you plan to deprecate rte_flow_copy function, please send a deprecation
notice which could enter in 18.08 release notes.

Thanks
  
Ferruh Yigit Aug. 23, 2018, 1:48 p.m. UTC | #2
On 8/3/2018 2:36 PM, Adrien Mazarguil wrote:
> This is a follow up to the "Flow API helpers enhancements" series submitted
> almost a year ago [1]. The new title is due to the reduced scope of this
> version.
> 
> rte_flow_conv() is a flexible replacement to rte_flow_copy(), itself a
> temporary solution pending something better [2]. It replaces a lot of
> duplicated code found in testpmd and removes some of the maintenance burden
> that developers tend to forget (me included) when modifying pattern
> item or actions (updating app/test-pmd/config.c to be clear).
> 
> This series was unearthed in order to complete the implementation of
> RTE_FLOW_ACTION_TYPE_ENCAP_(VXLAN|NVGRE) in testpmd [3] without having to
> duplicate existing code once again.
> 
> See individual patches for specific changes in this version.
> 
> v2 changes:
> 
> - rte_flow_copy() is kept, albeit deprecated, no API/ABI impact.
> - Updated bonding PMD.
> - No more automatic generation of rte_flow_conv.h.
> 
> [1] https://mails.dpdk.org/archives/dev/2017-October/077551.html
> [2] https://mails.dpdk.org/archives/dev/2017-July/070492.html
> [3] Currently the command-line parser (cmdline_flow.c) is aware of these
>     actions, however config.c isn't. Flow rules with such actions cannot
>     be created and cannot be validated with PMDs that implement them.
> 
> Adrien Mazarguil (7):
>   ethdev: add flow API object converter
>   ethdev: add flow API item/action name conversion
>   app/testpmd: rely on flow API conversion function
>   net/failsafe: switch to flow API object conversion function
>   net/bonding: switch to flow API object conversion function
>   ethdev: deprecate rte_flow_copy function
>   ethdev: add missing item/actions to flow object converter

Patch needs to be rebased to target v18.11 (in map file), and indeed new APIs
(rte_flow_conv) needs to be experimental.

And needs to remove deprecation notice in this patchset.
Also do you think does make sense to announce this change in release notes?

Apart from above, any volunteer for reviewing actual implementation?
  
Ferruh Yigit Aug. 24, 2018, 10:58 a.m. UTC | #3
On 8/3/2018 2:36 PM, Adrien Mazarguil wrote:
> This is a follow up to the "Flow API helpers enhancements" series submitted
> almost a year ago [1]. The new title is due to the reduced scope of this
> version.
> 
> rte_flow_conv() is a flexible replacement to rte_flow_copy(), itself a
> temporary solution pending something better [2]. It replaces a lot of
> duplicated code found in testpmd and removes some of the maintenance burden
> that developers tend to forget (me included) when modifying pattern
> item or actions (updating app/test-pmd/config.c to be clear).
> 
> This series was unearthed in order to complete the implementation of
> RTE_FLOW_ACTION_TYPE_ENCAP_(VXLAN|NVGRE) in testpmd [3] without having to
> duplicate existing code once again.
> 
> See individual patches for specific changes in this version.
> 
> v2 changes:
> 
> - rte_flow_copy() is kept, albeit deprecated, no API/ABI impact.
> - Updated bonding PMD.
> - No more automatic generation of rte_flow_conv.h.
> 
> [1] https://mails.dpdk.org/archives/dev/2017-October/077551.html
> [2] https://mails.dpdk.org/archives/dev/2017-July/070492.html
> [3] Currently the command-line parser (cmdline_flow.c) is aware of these
>     actions, however config.c isn't. Flow rules with such actions cannot
>     be created and cannot be validated with PMDs that implement them.
> 
> Adrien Mazarguil (7):
>   ethdev: add flow API object converter
>   ethdev: add flow API item/action name conversion
>   app/testpmd: rely on flow API conversion function
>   net/failsafe: switch to flow API object conversion function
>   net/bonding: switch to flow API object conversion function
>   ethdev: deprecate rte_flow_copy function
>   ethdev: add missing item/actions to flow object converter

Causing build error for arm, it looks like related to rte_memcpy macro:

.../lib/librte_ethdev/rte_flow.c: In function ‘rte_flow_conv_item_spec’:
.../lib/librte_ethdev/rte_flow.c:373:58: error: macro "rte_memcpy" passed 9
arguments, but takes just 3
       (size > sizeof(*dst.raw) ? sizeof(*dst.raw) : size));
                                                          ^
  
Adrien Mazarguil Aug. 27, 2018, 2:12 p.m. UTC | #4
On Fri, Aug 24, 2018 at 11:58:39AM +0100, Ferruh Yigit wrote:
> On 8/3/2018 2:36 PM, Adrien Mazarguil wrote:
> > This is a follow up to the "Flow API helpers enhancements" series submitted
> > almost a year ago [1]. The new title is due to the reduced scope of this
> > version.
> > 
> > rte_flow_conv() is a flexible replacement to rte_flow_copy(), itself a
> > temporary solution pending something better [2]. It replaces a lot of
> > duplicated code found in testpmd and removes some of the maintenance burden
> > that developers tend to forget (me included) when modifying pattern
> > item or actions (updating app/test-pmd/config.c to be clear).
> > 
> > This series was unearthed in order to complete the implementation of
> > RTE_FLOW_ACTION_TYPE_ENCAP_(VXLAN|NVGRE) in testpmd [3] without having to
> > duplicate existing code once again.
> > 
> > See individual patches for specific changes in this version.
> > 
> > v2 changes:
> > 
> > - rte_flow_copy() is kept, albeit deprecated, no API/ABI impact.
> > - Updated bonding PMD.
> > - No more automatic generation of rte_flow_conv.h.
> > 
> > [1] https://mails.dpdk.org/archives/dev/2017-October/077551.html
> > [2] https://mails.dpdk.org/archives/dev/2017-July/070492.html
> > [3] Currently the command-line parser (cmdline_flow.c) is aware of these
> >     actions, however config.c isn't. Flow rules with such actions cannot
> >     be created and cannot be validated with PMDs that implement them.
> > 
> > Adrien Mazarguil (7):
> >   ethdev: add flow API object converter
> >   ethdev: add flow API item/action name conversion
> >   app/testpmd: rely on flow API conversion function
> >   net/failsafe: switch to flow API object conversion function
> >   net/bonding: switch to flow API object conversion function
> >   ethdev: deprecate rte_flow_copy function
> >   ethdev: add missing item/actions to flow object converter
> 
> Causing build error for arm, it looks like related to rte_memcpy macro:
> 
> .../lib/librte_ethdev/rte_flow.c: In function ‘rte_flow_conv_item_spec’:
> .../lib/librte_ethdev/rte_flow.c:373:58: error: macro "rte_memcpy" passed 9
> arguments, but takes just 3
>        (size > sizeof(*dst.raw) ? sizeof(*dst.raw) : size));

Thanks, noticed it after sending v2. I'll fix it for v3.
  
Adrien Mazarguil Aug. 27, 2018, 3:14 p.m. UTC | #5
On Thu, Aug 23, 2018 at 02:48:37PM +0100, Ferruh Yigit wrote:
> On 8/3/2018 2:36 PM, Adrien Mazarguil wrote:
> > This is a follow up to the "Flow API helpers enhancements" series submitted
> > almost a year ago [1]. The new title is due to the reduced scope of this
> > version.
> > 
> > rte_flow_conv() is a flexible replacement to rte_flow_copy(), itself a
> > temporary solution pending something better [2]. It replaces a lot of
> > duplicated code found in testpmd and removes some of the maintenance burden
> > that developers tend to forget (me included) when modifying pattern
> > item or actions (updating app/test-pmd/config.c to be clear).
> > 
> > This series was unearthed in order to complete the implementation of
> > RTE_FLOW_ACTION_TYPE_ENCAP_(VXLAN|NVGRE) in testpmd [3] without having to
> > duplicate existing code once again.
> > 
> > See individual patches for specific changes in this version.
> > 
> > v2 changes:
> > 
> > - rte_flow_copy() is kept, albeit deprecated, no API/ABI impact.
> > - Updated bonding PMD.
> > - No more automatic generation of rte_flow_conv.h.
> > 
> > [1] https://mails.dpdk.org/archives/dev/2017-October/077551.html
> > [2] https://mails.dpdk.org/archives/dev/2017-July/070492.html
> > [3] Currently the command-line parser (cmdline_flow.c) is aware of these
> >     actions, however config.c isn't. Flow rules with such actions cannot
> >     be created and cannot be validated with PMDs that implement them.
> > 
> > Adrien Mazarguil (7):
> >   ethdev: add flow API object converter
> >   ethdev: add flow API item/action name conversion
> >   app/testpmd: rely on flow API conversion function
> >   net/failsafe: switch to flow API object conversion function
> >   net/bonding: switch to flow API object conversion function
> >   ethdev: deprecate rte_flow_copy function
> >   ethdev: add missing item/actions to flow object converter
> 
> Patch needs to be rebased to target v18.11 (in map file),

Right, will do it for v3.

> and indeed new APIs
> (rte_flow_conv) needs to be experimental.

This is what I did at first. Problem is that experimental APIs cannot be
used in internal code without triggering a compilation error unless
ALLOW_EXPERIMENTAL_API is defined (bonding cannot rely on an API marked as
experimental).

Since this series reimplements rte_flow_copy() as a wrapper to
rte_flow_conv(), I thought it didn't make sense for internal code to keep
using the former either.

Considering this, shall I add -DDALLOW_EXPERIMENTAL_API to bonding PMD or
keep things not experimental?

> And needs to remove deprecation notice in this patchset.

Doesn't it make sense to deprecate this function immediately after providing
a replacement on top of which it is reimplemented? Users end up using the
new function whether they want it or not. I don't think maintaining the
old duplicated code around is the right thing to do either.

> Also do you think does make sense to announce this change in release notes?

I'm not sure it's worth a release note. It's a rather obscure helper
function part of rte_flow. We didn't do it for rte_flow_copy() for
instance. Please confirm if you think it's needed.

> Apart from above, any volunteer for reviewing actual implementation?

I hope Gaetan will take a look, he added rte_flow_copy() after all :)