The HW flag action is supported by adding the tag to packet, with the default tag value.
Signed-off-by: Shun Hao <sh...@nvidia.com> Acked-by: Suanming Mou <suanmi...@nvidia.com> --- drivers/net/mlx5/mlx5_flow_hw.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 68c5a36bbb..fa10a591b3 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -2292,6 +2292,16 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, } acts->rule_acts[dr_pos].action = priv->hw_def_miss; break; + case RTE_FLOW_ACTION_TYPE_FLAG: + acts->mark = true; + acts->rule_acts[dr_pos].tag.value = + mlx5_flow_mark_set(MLX5_FLOW_MARK_DEFAULT); + acts->rule_acts[dr_pos].action = + priv->hw_tag[!!attr->group]; + rte_atomic_fetch_add_explicit(&priv->hws_mark_refcnt, 1, + rte_memory_order_relaxed); + flow_hw_rxq_flag_set(dev, true); + break; case RTE_FLOW_ACTION_TYPE_MARK: acts->mark = true; if (masks->conf && @@ -6415,6 +6425,10 @@ mlx5_flow_hw_actions_validate(struct rte_eth_dev *dev, if (ret < 0) return ret; break; + case RTE_FLOW_ACTION_TYPE_FLAG: + /* TODO: Validation logic */ + action_flags |= MLX5_FLOW_ACTION_FLAG; + break; case RTE_FLOW_ACTION_TYPE_MARK: /* TODO: Validation logic */ action_flags |= MLX5_FLOW_ACTION_MARK; @@ -6606,6 +6620,7 @@ flow_hw_actions_validate(struct rte_eth_dev *dev, static enum mlx5dr_action_type mlx5_hw_dr_action_types[] = { [RTE_FLOW_ACTION_TYPE_MARK] = MLX5DR_ACTION_TYP_TAG, + [RTE_FLOW_ACTION_TYPE_FLAG] = MLX5DR_ACTION_TYP_TAG, [RTE_FLOW_ACTION_TYPE_DROP] = MLX5DR_ACTION_TYP_DROP, [RTE_FLOW_ACTION_TYPE_JUMP] = MLX5DR_ACTION_TYP_TBL, [RTE_FLOW_ACTION_TYPE_QUEUE] = MLX5DR_ACTION_TYP_TIR, -- 2.20.0