[PATCH 19.11 6/6] net/mlx5: fix GENEVE and VXLAN-GPE flow item matching

Christian Ehrhardt christian.ehrhardt at canonical.com
Fri Dec 3 07:06:45 CET 2021


On Thu, Dec 2, 2021 at 5:04 PM Gregory Etelson <getelson at nvidia.com> wrote:
>
> From: Alexander Kozyrev <akozyrev at nvidia.com>
>
> [ upstream commit 94421842de9a821778b95b928945ed8ea382302d ]

Thank you for the backports,
patch 2 of the series was already applied - the other 5 I added now.

> GENEVE and VXLAN-GPE item matching is done similarly to GRE matching.
> Users can skip the specification of the protocol type and expect that
> this type is deducted from the inner header type automatically.
> But the inner header type may not be specified in order to match all the
> protocol types. In this case, PMD should not specify the protocol type.
> Check if we have the inner header type before setting the protocol type.
>
> Fixes: 690391dd0e8b ("net/mlx5: fix GENEVE protocol type translation")
> Fixes: 861fa3796f75 ("net/mlx5: fix VXLAN-GPE next protocol translation")
> Cc: stable at dpdk.org
>
> Signed-off-by: Alexander Kozyrev <akozyrev at nvidia.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo at nvidia.com>
> ---
>  drivers/net/mlx5/mlx5_flow_dv.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
> index cd55deaf56..4766ce155d 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -6119,7 +6119,6 @@ flow_dv_translate_item_vxlan_gpe(void *matcher, void *key,
>         m_protocol = vxlan_m->protocol;
>         v_protocol = vxlan_v->protocol;
>         if (!m_protocol) {
> -               m_protocol = 0xff;
>                 /* Force next protocol to ensure next headers parsing. */
>                 if (pattern_flags & MLX5_FLOW_LAYER_INNER_L2)
>                         v_protocol = RTE_VXLAN_GPE_TYPE_ETH;
> @@ -6127,6 +6126,8 @@ flow_dv_translate_item_vxlan_gpe(void *matcher, void *key,
>                         v_protocol = RTE_VXLAN_GPE_TYPE_IPV4;
>                 else if (pattern_flags & MLX5_FLOW_LAYER_INNER_L3_IPV6)
>                         v_protocol = RTE_VXLAN_GPE_TYPE_IPV6;
> +               if (v_protocol)
> +                       m_protocol = 0xFF;
>         }
>         MLX5_SET(fte_match_set_misc3, misc_m,
>                  outer_vxlan_gpe_next_protocol, m_protocol);
> @@ -6197,8 +6198,9 @@ flow_dv_translate_item_geneve(void *matcher, void *key,
>         protocol_v = rte_be_to_cpu_16(geneve_v->protocol);
>         if (!protocol_m) {
>                 /* Force next protocol to prevent matchers duplication */
> -               protocol_m = 0xFFFF;
>                 protocol_v = mlx5_translate_tunnel_etypes(pattern_flags);
> +               if (protocol_v)
> +                       protocol_m = 0xFFFF;
>         }
>         MLX5_SET(fte_match_set_misc, misc_m, geneve_protocol_type, protocol_m);
>         MLX5_SET(fte_match_set_misc, misc_v, geneve_protocol_type,
> --
> 2.34.0
>


-- 
Christian Ehrhardt
Staff Engineer, Ubuntu Server
Canonical Ltd


More information about the stable mailing list