[PATCH v6 11/25] net/ixgbe: fix ntuple filter priority
Medvedkin, Vladimir
vladimir.medvedkin at intel.com
Sat Oct 10 20:32:52 CEST 2026
Acked-by: Vladimir Medvedkin <vladimir.medvedkin at intel.com>
On 10/9/2026 11:59 AM, Anatoly Burakov wrote:
> Currently, handling of ntuple filter priority is incorrect: it directly
> translates values inside the valid range (001b-111b), and clamps all
> invalid to 1. This leads to equivalence between rte_flow highest priority
> value (0), and rte_flow lower priority values (8+), both of which are
> mapped to 1 (lowest priority), while the 1-7 range is reversed (in ntuple,
> 111b is highest priority, but in rte_flow it is the lowest).
>
> Fix the calculation by
>
> - Translating highest rte_flow priority to highest ntuple priority
> - Only clamping low priority values to 1 (lowest priority)
> - Reversing the 1-7 mapping to preserve semantic meaning
>
> Fixes: 672be56d76a2 ("net/ixgbe: parse n-tuple filter")
> Cc: stable at dpdk.org
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
> ---
> drivers/net/intel/ixgbe/ixgbe_flow.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/intel/ixgbe/ixgbe_flow.c b/drivers/net/intel/ixgbe/ixgbe_flow.c
> index 76eec33839b..547c6621d3e 100644
> --- a/drivers/net/intel/ixgbe/ixgbe_flow.c
> +++ b/drivers/net/intel/ixgbe/ixgbe_flow.c
> @@ -209,6 +209,7 @@ cons_parse_ntuple_filter(const struct rte_flow_attr *attr,
> const struct rte_flow_item_vlan *vlan_mask;
> struct rte_flow_item_eth eth_null;
> struct rte_flow_item_vlan vlan_null;
> + uint16_t priority;
>
> /* Priority must be 16-bit */
> if (attr->priority > UINT16_MAX) {
> @@ -503,9 +504,21 @@ cons_parse_ntuple_filter(const struct rte_flow_attr *attr,
>
> filter->queue = q_act->index;
>
> - filter->priority = (uint16_t)attr->priority;
> - if (attr->priority < IXGBE_MIN_N_TUPLE_PRIO || attr->priority > IXGBE_MAX_N_TUPLE_PRIO)
> - filter->priority = 1;
> + /*
> + * rte_flow priority: 0 through UINT32_MAX, 0 is highest
> + *
> + * ntuple priority: 001b through 111b, 111b is highest
> + *
> + * which means we need to transform priority from rte_flow to ntuple:
> + *
> + * 1) clamp max value
> + * 2) reverse
> + * 3) add min value
> + */
> + priority = RTE_MIN(IXGBE_MAX_N_TUPLE_PRIO - 1, (uint16_t)attr->priority);
> + priority = IXGBE_MAX_N_TUPLE_PRIO - 1 - priority;
> + priority += IXGBE_MIN_N_TUPLE_PRIO;
> + filter->priority = priority;
>
> return 0;
> }
--
Regards,
Vladimir
More information about the dev
mailing list