ethdev: alter behavior of flow API actions
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Wed, 25 Apr 2018 15:27:46 +0000 (17:27 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 27 Apr 2018 17:00:53 +0000 (18:00 +0100)
commitcc17feb904136d740b9b9fac0db4a1a63e23cb1b
treea5101557466ac0a893688293cc6466b6b0274806
parent2e6e75679aba1f4dad7c7d1d6a3ef9a02031e9f1
ethdev: alter behavior of flow API actions

This patch makes the following changes to flow rule actions:

- List order now matters, they are redefined as performed first to last
  instead of "all simultaneously".

- Repeated actions are now supported (e.g. specifying QUEUE multiple times
  now duplicates traffic among them). Previously only the last action of
  any given kind was taken into account.

- No more distinction between terminating/non-terminating/meta actions.
  Flow rules themselves are now defined as always terminating unless a
  PASSTHRU action is specified.

These changes alter the behavior of flow rules in corner cases in order to
prepare the flow API for actions that modify traffic contents or properties
(e.g. encapsulation, compression) and for which order matter when combined.

Previously one would have to do so through multiple flow rules by combining
PASSTRHU with priority levels, however this proved overly complex to
implement at the PMD level, hence this simpler approach.

This breaks ABI compatibility for the following public functions:

- rte_flow_create()
- rte_flow_validate()

PMDs with rte_flow support are modified accordingly:

- bnxt: no change, implementation already forbids multiple actions and does
  not support PASSTHRU.

- e1000: no change, same as bnxt.

- enic: modified to forbid redundant actions, no support for default drop.

- failsafe: no change needed.

- i40e: no change, implementation already forbids multiple actions.

- ixgbe: same as i40e.

- mlx4: modified to forbid multiple fate-deciding actions and drop when
  unspecified.

- mlx5: same as mlx4, with other redundant actions also forbidden.

- sfc: same as mlx4.

- tap: implementation already complies with the new behavior except for
  the default pass-through modified as a default drop.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
doc/guides/prog_guide/rte_flow.rst
doc/guides/rel_notes/release_18_05.rst
drivers/net/enic/enic_flow.c
drivers/net/mlx4/mlx4_flow.c
drivers/net/mlx5/mlx5_flow.c
drivers/net/sfc/sfc_flow.c
drivers/net/tap/tap_flow.c
lib/librte_ether/rte_flow.h