numam-dpdk/drivers/net/mlx5
Dariusz Sosnowski 5615d27b7a net/mlx5: fix hairpin split with set VLAN VID action
Before this patch any flow rule which works on hairpin queues
and which has OF_SET_VLAN_VID action was split into 2 flow rules:

- one subflow for Rx,
- one subflow for Tx.

OF_SET_VLAN_VID action was always placed in the Tx subflow.

Assuming a flow rule which matches VLAN traffic and has both
OF_SET_VLAN_VID action, and MODIFY_FIELD action on VLAN VID,
but no OF_PUSH_VLAN action, the following happened:

- MODIFY_FIELD action was placed in Rx subflow,
- OF_SET_VLAN_VID action was placed in Tx subflow,
- OF_SET_VLAN_VID action is internally compiled to a header modify
  command.

This caused the following issues:

1. Since OF_SET_VLAN_VID was placed in Tx subflow, 2 header modify
   actions were allocated. One for Rx and one for Tx.
2. If OF_SET_VLAN_VID action was placed before MODIFY_FIELD on VLAN VID,
   the flow rule executed header modifications in reverse order.
   MODIFY_FIELD actions were executed first in the Rx subflow and
   OF_SET_VLAN_VID was executed second in Tx subflow.

This patch fixes this behavior by not splitting hairpin flow rules
if OF_SET_VLAN_VID action is used without OF_PUSH_VLAN.
On top of that, if flow rule is split, the OF_SET_VLAN_VID action
is not moved to Tx subflow (for flow rules mentioned above).

Fixes: 210008309b ("net/mlx5: fix VLAN push action on hairpin queue")
Cc: stable@dpdk.org

Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
2022-11-10 18:15:51 +01:00
..
hws net/mlx5/hws: fix capability check on non eswitch manager 2022-11-10 18:15:51 +01:00
linux net/mlx5: fix build with recent compilers 2022-10-31 20:02:05 +01:00
windows net/mlx5: fix thread termination check on Windows 2022-10-30 08:11:21 +01:00
meson.build common/mlx5: use build configuration dictionary 2022-11-14 11:28:49 +01:00
mlx5_defs.h net/mlx5: support flow age action with HWS 2022-10-26 13:33:41 +02:00
mlx5_devx.c net/mlx5: fix flow table and queue routine on Windows 2022-11-10 18:15:48 +01:00
mlx5_devx.h net/mlx5: support descriptor LWM for Rx queue 2022-06-23 17:23:29 +02:00
mlx5_ethdev.c net/mlx5: allow hairpin Rx queue in locked memory 2022-10-08 18:30:50 +02:00
mlx5_flow_aso.c net/mlx5: support async flow action push and pull 2022-10-26 13:33:42 +02:00
mlx5_flow_dv.c net/mlx5: fix match mask for meter flow 2022-11-10 18:15:48 +01:00
mlx5_flow_flex.c net/mlx5: fix flex item header length translation 2022-03-02 17:36:47 +01:00
mlx5_flow_hw.c net/mlx5: assert for enough space in counter rings 2022-11-10 18:15:45 +01:00
mlx5_flow_meter.c net/mlx5: support async flow action push and pull 2022-10-26 13:33:42 +02:00
mlx5_flow_verbs.c net/mlx5: forbid direction attribute in transfer flow rules 2022-11-10 18:15:47 +01:00
mlx5_flow.c net/mlx5: fix hairpin split with set VLAN VID action 2022-11-10 18:15:51 +01:00
mlx5_flow.h net/mlx5: forbid direction attribute in transfer flow rules 2022-11-10 18:15:47 +01:00
mlx5_hws_cnt.c net/mlx5: assert for enough space in counter rings 2022-11-10 18:15:45 +01:00
mlx5_hws_cnt.h net/mlx5: assert for enough space in counter rings 2022-11-10 18:15:45 +01:00
mlx5_mac.c net/mlx5: support Sub-Function 2021-07-22 00:11:14 +02:00
mlx5_rss.c net/mlx5: fix RETA update without stopping device 2021-11-10 15:44:44 +01:00
mlx5_rx.c net/mlx5: fix Rx queue recovery mechanism 2022-08-29 12:53:49 +02:00
mlx5_rx.h net/mlx5: support Rx descriptor threshold event 2022-06-23 17:25:02 +02:00
mlx5_rxmode.c net/mlx5: concentrate all device configurations 2022-02-21 11:36:51 +01:00
mlx5_rxq.c net/mlx5: fix shared Rx queue config reuse 2022-11-10 18:15:49 +01:00
mlx5_rxtx_vec_altivec.h avoid AltiVec keyword vector 2022-05-25 11:49:39 +02:00
mlx5_rxtx_vec_neon.h fix spelling in comments and strings 2022-01-11 12:16:53 +01:00
mlx5_rxtx_vec_sse.h fix spelling in comments and strings 2022-01-11 12:16:53 +01:00
mlx5_rxtx_vec.c net/mlx5: improve stride parameter names 2021-12-05 12:22:09 +01:00
mlx5_rxtx_vec.h ethdev: add namespace 2021-10-22 18:15:38 +02:00
mlx5_rxtx.c net/mlx5: move Rx queue DevX resource 2021-11-04 22:55:48 +01:00
mlx5_rxtx.h common/mlx5: share MR mempool registration 2021-10-21 15:58:00 +02:00
mlx5_stats.c net/mlx5: fix Rx/Tx stats concurrency 2022-04-21 12:50:26 +02:00
mlx5_testpmd.c net/mlx5: fix testpmd quit with available desc threshold 2022-11-10 18:15:49 +01:00
mlx5_testpmd.h app/testpmd: add host shaper command 2022-06-23 17:25:04 +02:00
mlx5_trigger.c net/mlx5: create control flow rules with HWS 2022-10-26 13:33:43 +02:00
mlx5_tx_empw.c net/mlx5: separate Tx burst functions to different files 2021-04-15 08:24:59 +02:00
mlx5_tx_mpw.c net/mlx5: separate Tx burst functions to different files 2021-04-15 08:24:59 +02:00
mlx5_tx_nompw.c net/mlx5: separate Tx burst functions to different files 2021-04-15 08:24:59 +02:00
mlx5_tx_txpp.c net/mlx5: separate Tx burst functions to different files 2021-04-15 08:24:59 +02:00
mlx5_tx.c net/mlx5: separate per port configuration 2022-02-21 11:36:54 +01:00
mlx5_tx.h net/mlx5: support device control for E-Switch default rule 2022-10-26 13:33:43 +02:00
mlx5_txpp.c common/mlx5: share interrupt management 2022-06-23 17:24:59 +02:00
mlx5_txq.c net/mlx5: support device control for E-Switch default rule 2022-10-26 13:33:43 +02:00
mlx5_utils.c net/mlx5: fix indexed pool fetch overlap 2022-03-01 22:24:22 +01:00
mlx5_utils.h net/mlx5: support flow age action with HWS 2022-10-26 13:33:41 +02:00
mlx5_vlan.c net/mlx5: concentrate all device configurations 2022-02-21 11:36:51 +01:00
mlx5.c net/mlx5: fix flow table and queue routine on Windows 2022-11-10 18:15:48 +01:00
mlx5.h net/mlx5: fix race condition in counter pool resizing 2022-11-10 18:15:44 +01:00
rte_pmd_mlx5.h net/mlx5: support device control for E-Switch default rule 2022-10-26 13:33:43 +02:00
version.map net/mlx5: support device control for E-Switch default rule 2022-10-26 13:33:43 +02:00