From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 30110A0542 for ; Fri, 11 Nov 2022 11:34:37 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2B81340150; Fri, 11 Nov 2022 11:34:37 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 3A2284014F for ; Fri, 11 Nov 2022 11:34:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668162874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nWc4fNNAzELIXphFtIo5wHuItzrc9rtTeDJfRp1MYzw=; b=IN1OWg/6n4NnWcE3ydSJjzL0NdOph501AbCAPVDIGOU7jVxg8DHp9HQP4B+p7VmAA+POb9 QK+gTzrDbBdFfM689LuzqfUvr3m5k2A4IYm0CUl2Cw+wUEm14vR2oVkql31mZq0Bt7L51v VprnWBwlOv0UAm6+SGsVh4AF/7Nbqno= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-610-iP8_2M0ENaGrOJLa1tL0Ig-1; Fri, 11 Nov 2022 05:34:33 -0500 X-MC-Unique: iP8_2M0ENaGrOJLa1tL0Ig-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0D5EB85A583; Fri, 11 Nov 2022 10:34:33 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.195.104]) by smtp.corp.redhat.com (Postfix) with ESMTP id E21AC200E288; Fri, 11 Nov 2022 10:34:31 +0000 (UTC) From: Kevin Traynor To: Jiawei Wang Cc: Viacheslav Ovsiienko , dpdk stable Subject: patch 'net/mlx5: fix tunnel header with IPIP offload' has been queued to stable release 21.11.3 Date: Fri, 11 Nov 2022 10:33:09 +0000 Message-Id: <20221111103337.307408-19-ktraynor@redhat.com> In-Reply-To: <20221111103337.307408-1-ktraynor@redhat.com> References: <20221111103337.307408-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 21.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/14/22. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/ee2387b0ba1da1e287aeaa5245c0041cb3c9cd69 Thanks. Kevin --- >From ee2387b0ba1da1e287aeaa5245c0041cb3c9cd69 Mon Sep 17 00:00:00 2001 From: Jiawei Wang Date: Thu, 20 Oct 2022 15:55:34 +0300 Subject: [PATCH] net/mlx5: fix tunnel header with IPIP offload [ upstream commit bfa87e21bdeadb48c0ad9ad6b360393c413be861 ] For the flows with multiple tunnel layers and containing tunnel decap and modify actions, for example: ... / vxlan / eth / ipv4 proto is 4 / end actions raw_decap / modify_field / ... (note: proto 4 means we have the IP-over-IP tunnel in VXLAN payload) We have added the multiple tunnel layers validation rejecting the flows like above mentioned one. The hardware supports the above match combination till the inner IP-over-IP header (not including the last one), both for IP-over-IPv4 and IP-over-IPv6, so we should not blindly reject. Also, for the modify actions following the decap we should set the layer attributes correctly. This patch reverts the below code changes to support the match, and adjusts the layers update in case of decap with outer tunnel header. Fixes: fa06906a48ee ("net/mlx5: fix IPIP multi-tunnel validation") Signed-off-by: Jiawei Wang Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/mlx5_flow.c | 4 ++-- drivers/net/mlx5/mlx5_flow_dv.c | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index e260c8b27f..ba0983ddf0 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -2357,5 +2357,5 @@ mlx5_flow_validate_item_ipv4(const struct rte_flow_item *item, "IPv4 cannot follow L2/VLAN layer " "which ether type is not IPv4"); - if (item_flags & MLX5_FLOW_LAYER_TUNNEL) { + if (item_flags & MLX5_FLOW_LAYER_IPIP) { if (mask && spec) next_proto = mask->hdr.next_proto_id & @@ -2465,5 +2465,5 @@ mlx5_flow_validate_item_ipv6(const struct rte_flow_item *item, if (mask && mask->hdr.proto == UINT8_MAX && spec) next_proto = spec->hdr.proto; - if (item_flags & MLX5_FLOW_LAYER_TUNNEL) { + if (item_flags & MLX5_FLOW_LAYER_IPIP) { if (next_proto == IPPROTO_IPIP || next_proto == IPPROTO_IPV6) return rte_flow_error_set(error, EINVAL, diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 2a976d843b..c3a2a658e1 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -114,4 +114,5 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, { uint64_t layers = dev_flow->handle->layers; + bool tunnel_match = false; /* @@ -150,6 +151,8 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, case RTE_FLOW_ITEM_TYPE_MPLS: case RTE_FLOW_ITEM_TYPE_GTP: - if (tunnel_decap) + if (tunnel_decap) { attr->attr = 0; + tunnel_match = true; + } break; case RTE_FLOW_ITEM_TYPE_IPV4: @@ -165,5 +168,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, (item->mask))->hdr.next_proto_id; if ((next_protocol == IPPROTO_IPIP || - next_protocol == IPPROTO_IPV6) && tunnel_decap) + next_protocol == IPPROTO_IPV6) && tunnel_decap && + !tunnel_match) attr->attr = 0; break; @@ -180,5 +184,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, (item->mask))->hdr.proto; if ((next_protocol == IPPROTO_IPIP || - next_protocol == IPPROTO_IPV6) && tunnel_decap) + next_protocol == IPPROTO_IPV6) && tunnel_decap && + !tunnel_match) attr->attr = 0; break; -- 2.38.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-11-11 10:32:17.546690270 +0000 +++ 0019-net-mlx5-fix-tunnel-header-with-IPIP-offload.patch 2022-11-11 10:32:17.071300756 +0000 @@ -1 +1 @@ -From bfa87e21bdeadb48c0ad9ad6b360393c413be861 Mon Sep 17 00:00:00 2001 +From ee2387b0ba1da1e287aeaa5245c0041cb3c9cd69 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit bfa87e21bdeadb48c0ad9ad6b360393c413be861 ] + @@ -25 +26,0 @@ -Cc: stable@dpdk.org @@ -35 +36 @@ -index 3aec121679..8e7d649d15 100644 +index e260c8b27f..ba0983ddf0 100644 @@ -38 +39 @@ -@@ -2665,5 +2665,5 @@ mlx5_flow_validate_item_ipv4(const struct rte_flow_item *item, +@@ -2357,5 +2357,5 @@ mlx5_flow_validate_item_ipv4(const struct rte_flow_item *item, @@ -45 +46 @@ -@@ -2773,5 +2773,5 @@ mlx5_flow_validate_item_ipv6(const struct rte_flow_item *item, +@@ -2465,5 +2465,5 @@ mlx5_flow_validate_item_ipv6(const struct rte_flow_item *item, @@ -53 +54 @@ -index 6d8c155e45..1e52278191 100644 +index 2a976d843b..c3a2a658e1 100644 @@ -56 +57 @@ -@@ -129,4 +129,5 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, +@@ -114,4 +114,5 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, @@ -62 +63 @@ -@@ -165,6 +166,8 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, +@@ -150,6 +151,8 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, @@ -72 +73 @@ -@@ -180,5 +183,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, +@@ -165,5 +168,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, @@ -80 +81 @@ -@@ -195,5 +199,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr, +@@ -180,5 +184,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr,