From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EE82DA04E7; Wed, 4 Nov 2020 05:22:45 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3ADA3BE69; Wed, 4 Nov 2020 05:22:44 +0100 (CET) Received: from mail-m975.mail.163.com (mail-m975.mail.163.com [123.126.97.5]) by dpdk.org (Postfix) with ESMTP id DA0FCBE63 for ; Wed, 4 Nov 2020 05:22:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=uj6NZ v4vZ4nsK/sw/AQF04Obc8WZgYj4xgJBHGmw6ns=; b=OKOQAqKbO6x3g/UwWg2xk /FsN4vk7ixasvq7VnpHK4g0nSHfbFSj2XEn8LRBT443+4BGBBeWdzxIg5zVnySlm Co8fMmCrvNTprX09wzQMMH98sS6WYn9Ucxvqx/Aj6EpzeW8BDn7b1mfSNnPmMSd4 Fk58pmvt95gGwOJCXd87qY= Received: from yangyi0100.home.langchao.com (unknown [111.207.123.58]) by smtp5 (Coremail) with SMTP id HdxpCgBHgmOMLKJfsPOVAA--.33S2; Wed, 04 Nov 2020 12:22:37 +0800 (CST) From: yang_y_yi@163.com To: dev@dpdk.org Cc: jiayu.hu@intel.com, konstantin.ananyev@intel.com, thomas@monjalon.net, yangyi01@inspur.com, yang_y_yi@163.com Date: Wed, 4 Nov 2020 12:22:36 +0800 Message-Id: <20201104042236.125888-1-yang_y_yi@163.com> X-Mailer: git-send-email 2.19.2.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: HdxpCgBHgmOMLKJfsPOVAA--.33S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxCw47Jr1xXFy3Zr43tw4rAFb_yoW5AF48pF WfJFZxGa4DGr42y3s8X3WxCryxKr18XF4fCws3ur90qayYqr1jqa9Iya4rGrn5JayYqayk t34xGFn7Gw13Aw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07U3gA7UUUUU= X-Originating-IP: [111.207.123.58] X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiEA3Si18YDzDp-gAAsr Subject: [dpdk-dev] [PATCH] gro: fix an error when packet is IPv6 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Yi Yang Current code will think IPv6 packet as IPv4 packet if inner header is IPv6 and outer header is IPv4, the result is rte_gro_reassemble() will handle it as if inner header also is IPv4, so IPv6 can't be handled correctly as one of unprocess_pkts. Fixes: e2d811063673 ("gro: support VXLAN UDP/IPv4") Fixes: 1ca5e6740852 ("gro: support UDP/IPv4") Fixes: 9e0b9d2ec0f4 ("gro: support VxLAN GRO") Fixes: 0d2cbe59b719 ("lib/gro: support TCP/IPv4") Signed-off-by: Yi Yang --- lib/librte_gro/rte_gro.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/librte_gro/rte_gro.c b/lib/librte_gro/rte_gro.c index e56bd20..4347267 100644 --- a/lib/librte_gro/rte_gro.c +++ b/lib/librte_gro/rte_gro.c @@ -32,32 +32,38 @@ NULL}; #define IS_IPV4_TCP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \ - ((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP)) + ((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP) && \ + ((ptype & RTE_PTYPE_TUNNEL_VXLAN) == 0)) #define IS_IPV4_UDP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \ - ((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP)) + ((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \ + ((ptype & RTE_PTYPE_TUNNEL_VXLAN) == 0)) #define IS_IPV4_VXLAN_TCP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \ ((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \ ((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \ RTE_PTYPE_TUNNEL_VXLAN) && \ - ((ptype & RTE_PTYPE_INNER_L4_TCP) == \ - RTE_PTYPE_INNER_L4_TCP) && \ - (((ptype & RTE_PTYPE_INNER_L3_MASK) & \ - (RTE_PTYPE_INNER_L3_IPV4 | \ - RTE_PTYPE_INNER_L3_IPV4_EXT | \ - RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)) != 0)) + ((ptype & RTE_PTYPE_INNER_L4_TCP) == \ + RTE_PTYPE_INNER_L4_TCP) && \ + (((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4) || \ + ((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4_EXT) || \ + ((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN))) #define IS_IPV4_VXLAN_UDP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \ ((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \ ((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \ RTE_PTYPE_TUNNEL_VXLAN) && \ - ((ptype & RTE_PTYPE_INNER_L4_UDP) == \ - RTE_PTYPE_INNER_L4_UDP) && \ - (((ptype & RTE_PTYPE_INNER_L3_MASK) & \ - (RTE_PTYPE_INNER_L3_IPV4 | \ - RTE_PTYPE_INNER_L3_IPV4_EXT | \ - RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)) != 0)) + ((ptype & RTE_PTYPE_INNER_L4_UDP) == \ + RTE_PTYPE_INNER_L4_UDP) && \ + (((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4) || \ + ((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4_EXT) || \ + ((ptype & RTE_PTYPE_INNER_L3_MASK) == \ + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN))) /* * GRO context structure. It keeps the table structures, which are -- 1.8.3.1