From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0059.outbound.protection.outlook.com [104.47.38.59]) by dpdk.org (Postfix) with ESMTP id 0CE361B1B6; Sat, 27 Jan 2018 22:16:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=T3veiLp7yQBjIYiVQr9+DxDUNI9GQJaM2J55ZwGxics=; b=ZDYyoN/fUEXCuMyKtyvRaZiGjeKI1Flp++WD2gMHPVeSfkSyvKJa1/oqvzA7NvGAgvPdeZIuNMWHTX+lA6BngEtxYjWhmq8JbJX1dhN4hOFJIytts04Cqj2D+nUhuwrml3f7K0zaSjiZxwHZ11Qxbo0fVlxRl3AsihwsyOElRtA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3669.namprd07.prod.outlook.com (2603:10b6:4:7e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Sat, 27 Jan 2018 21:16:26 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Harish Patil , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com, stable@dpdk.org Date: Sat, 27 Jan 2018 13:15:27 -0800 Message-Id: <1517087735-16191-4-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1517087735-16191-1-git-send-email-rasesh.mody@cavium.com> References: <1517087735-16191-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BN6PR16CA0001.namprd16.prod.outlook.com (2603:10b6:404:f5::11) To DM5PR0701MB3669.namprd07.prod.outlook.com (2603:10b6:4:7e::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d3016cc2-830e-4d70-bc1a-08d565cb39f7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DM5PR0701MB3669; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3669; 3:7EK9GXyhfa6wDrPF/fwN/MHlUED4dEdNoJD2btD+lDF/t9eLQBe4eLQ8433UXzLQFS+/pT4MEUuT+Ek6JI7DfC6dHpMxqsIzrLTGfvcz46auZGU5C5Rsi+NLCTkLahBuM0GI9r3E8GN4LIMxBt9uxwlGJrrraQhJJCHjXNH8LaCXPur1M+CTyJ/W2qua5547YAzeitlkKxOT186QDpZjGSoh0L0MfdgC90d5kHyTMat0SubRpUeYvl145y5lIlg2; 25:F1skvyKm10M26PSfUzX3o0BTK4k0okLyYMx7PPEaVDdfy3TLIAFe9co9X1s+V35MnJAHy429IrY2mbte0NbPYo2k54FXth//xNVKXU9UKzwlFCdmLfI1QWBPLFfMRe/nzYg99XaB8+1VeQAzxr8WoNdBazGDAEIKpN5Q35RxrnKjT2fU8qmvNThj/CpOLFujXl0P2aCEy71efClbvOm7qqx0xsWVetB4Vo9VCTehMoBnXlTJuQgvA1hWp/21WH/sI7PGDSGHGqPpuS0kerwPtIsQfDPnh+eLOhjCh8rN0+TaIUgmAX1mE25FO0nJrAoAaEU8gTTmG5RBIhk1+hVpNQ==; 31:RmgCvX+JHIO5lmvuLdUknOGE11IqFuKMU83mSrw2F5mr8EsAhlDLldzZ0BDaqsqzZidmiliy0zcOMmq1cz3tD73ouTw2kUp7pSbWFusAZMIhytjChBcR/BBNrrUf5qD/nQStqvFDbNEPPi6CTF5QfPbDAW7/OtABgOHSxs4A+wmlaqWUpo/saMRlbq4s3EuKhHgvu8akelngV46PcQ/U25C0IxkngmJKb/PWzzpC1Lw= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3669: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3669; 20:X33aiG081lY1e1EmkWxN5iIHBV1V7lKMaOtU25CabzH8AG6KfQ5Tp7rsM8OuARWPawxuIM4/2C2GhBpPVUax21S06Ru7p4DhuwnoF0zieDjbmlls3Ro/b6muMFipikeNMPocXCx8Z5F8C7/6dqr9j/bE1OgYhI5trG57Gmjlw5xOQSIZPzF21WJc56ijYMPfsqLVrTADZzsC9wMtrE63z9f0wcMxtSGUxhO56LYxKcCWx+cJSnFLG4j/Dcaa76ykVfImAonZzbQnsi5AMCSrKyaDbjQU2+IlrkKts20LB+JGdMZ85z15qqAdpmXN1oL2G/9um0Hz7fUfRfqmdGcZOSRTH+2MaEgqEZQegOKiVgSIwEIieG57MpQrym3kiH9jLpNSTd3pzCIxFJA8oOwgy3JWYd72eL6/AfBxx6ff8zjrk8Yf0M+Z8bzB8xQPt+rfmHmp4z69THcq0uafKxQkC61XtDCZpOIPOU+sa6sfzYqDaOYt6FL6Obj9qdzv1bH7; 4:/b8nO+X7lUX/Rb7Tyl1NQpN1DoDj8h9Xk3JE15gE6mAZLq+46nC9gk4dYYjx4tl3taEBcz7fMhSWPSZgehtDpdUUdYnfvA2CxiA/kTR2KbLoFpg3MvRosLe0U0FNNVVkFWoPjdV5R/q5QPnWKiOnwAhPtthslpqlQiZZ2R9t2N+CavigB/C0S/K02lziFQiNCTiSxWl5kkvor5d4A4fVlC7ka+AnoUwO67nVAK24mFYR2m9GzzZM5dRyyg89SQj7U4x3tgbaQnjI19KhefZsdg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231092)(2400081)(944501161)(93006095)(93001095)(6041288)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:DM5PR0701MB3669; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3669; X-Forefront-PRVS: 056544FBEE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39850400004)(376002)(366004)(346002)(39380400002)(199004)(189003)(50226002)(386003)(68736007)(4326008)(50466002)(6916009)(5660300001)(2361001)(106356001)(478600001)(48376002)(4720700003)(2351001)(16586007)(21086003)(305945005)(59450400001)(72206003)(51416003)(7696005)(52116002)(7736002)(316002)(76176011)(2950100002)(53936002)(69596002)(97736004)(66066001)(16526019)(2906002)(36756003)(81166006)(26005)(86362001)(575784001)(25786009)(47776003)(81156014)(8936002)(8676002)(3846002)(55016002)(105586002)(6116002)(186003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3669; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR0701MB3669; 23:KDytI57PHdGESsBwBrdr2k/Rv7PDttdV0LwlIqB?= =?us-ascii?Q?AIkGG2wpfXvpq3oMayYaHsIAuGGsZ1x8Leg1qcNyfu8UQb8XYWXD0cWRceMk?= =?us-ascii?Q?56Wfu1kvEQJ0uJGgaA7D2o/sEbiiXwnL9w3aEKj041Q+8xp2K3su/PfoY2YX?= =?us-ascii?Q?W55ZasQ9xblJQC4KFHzY5fmICoK1XE4EjrjL2eiY9CAgnBd7jIe0AhQLlb41?= =?us-ascii?Q?k9U+t8OfbtE/UBf9aGlz70woDfjDR8ELZhba5axhD8bZkeyRkeaEhTkl5X7g?= =?us-ascii?Q?sin23AU9GKEPGMakFycT+vZW4kUYLgrQ31jDrZMx+6/yvELpjQrCb/eliLh2?= =?us-ascii?Q?+sVYzHNnfYUKGMvCayRp56YisacLWmdZUwNcCp9bwMtLc/l9fPmiYiZL3vAU?= =?us-ascii?Q?2F35xPYq3r227DTON5CuNvEhFf73zicX1k7ArXeCPzM7wRuyDGDaq8+sec2r?= =?us-ascii?Q?4Dh9onNbPv9d1708K9zCpMuauVkBCvkHxmDiJvieF34Rx2avCBk3u6CyW3wL?= =?us-ascii?Q?kVEljSF4ef1Rb0dVidfZLYTjWwTuqdhHy2Qp6NVUE2wG4LTsrqAZi2ZBu/+f?= =?us-ascii?Q?dh4wFEZXUkbBX9w69TpkQCJCUhs4iI4gdKCauUgxJFclKn1lJ2zvJWd08Wfs?= =?us-ascii?Q?jFhwJ6AMhBnuAmjFjPKg+BKc/z+DIUyd5LfMyNY4JnZGTwUSwMmGemK3OS99?= =?us-ascii?Q?ISFeFLfMoekQZT5O2eIRvu08PXz+z3NQ5oKj62SmDWKaXR4QsZw4yVVTbkWF?= =?us-ascii?Q?z2q9eBwarV/x3/qBC9AxXARi6B+hVFG+0TWY2EDwubO+V9v9uvEoRFWYph4F?= =?us-ascii?Q?3S5qrbIuTSDIzs/Er191NUksirUduixUwXxsZH9vBRg8l09DiAC3mvXgl1N4?= =?us-ascii?Q?uKVFPf3ClQj5pIEW3u2B1wC9S9KEtDojVvL1gwMrw/+NgSLZDPGJj1lMx7uI?= =?us-ascii?Q?5SEpMg79GRJx5HJHb5xBIN3kZ3hhe0a3ODlPpMy5+l86MSJGk6OaFJL5ldVG?= =?us-ascii?Q?+250FVwPA5icroJ4OkMc3VWCe1cwwUCqjg2YYV8czCjY2inc5hedtKebHk/m?= =?us-ascii?Q?kU5przT2JCCKNhnByDD2zO/RtMX2D8zQuV/X6tFfU4oFbq/r8WeOfvs4/BDd?= =?us-ascii?Q?aYAEe9Td0CegpuhoXCc8aQazom/Db51CLCpMgnnNbaRZyOarQ1nH/RLhtcEG?= =?us-ascii?Q?OCcJWpCHkv/NjiqskoryjHpJoxeKxgVLapPUvq3UywKIGuVT8wycQLoeexiq?= =?us-ascii?Q?Dz0IDpO5B+l6K+DbwGPY=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3669; 6:nJ0tVTgiM0mVy0i4+Go5C12yjVJYyr5W9YbAw6fk2aXIPVabFghv+zi4VBW36Dyc6wGfEORW/UEGYPHhkyMjWAWkzPyM7n0YPEwZ1QRTnBFVR4Rw8PkG/te0Pyk54V7Bi6oJ8HjtUHh07O4xqirjkG3QQVvJZhXnXmHNslrtSHRE4iEHWPAq3Dsy2e4OyaIrtazsyPxxxm0kdVl7QhXHm28XyrhlwsVyJ53Pfs5EJ8cQ9/uDtWRCjLgmrfux00ET+tEzRpkNsRwXj6XMtCg0Wm6aE3UiS+7fAeD+d4ogQVBBZdCoWGmWrUPNqV30tH1VSrNli+E9fnONsSor5yoU9hQQMM7HNioWJYGydD/MPaM=; 5:RYltsxBEu/j4geIcxA3UloJEtb7CadlRFK6djgcnhJ5xGSrt03UcuLpb+w1dX0HOtYB1XbjGKjjJCXivqbcLI4uHV9H0gXWHC9SlJ2siW0jA025ZnquOVD6AEsimT7BDdM3ontc8tM4D72a4YcjvKQr1Y/88IHxPklUawQBJUn0=; 24:hD9OHxS1TvxZWUX5QpMIvnQTNWp3zolmawktOJOMXKU2W6grmPSnaiLuUUrxytgbA+ncf1/dCAEf4CkhHmgIU5yM9a3Hfrr/eaeOOu3n2gk=; 7:eS8tQv22jIr+uEjBR2jmZTwloL/rpUL4uERXH412ipEF5rWD2e8rWMBR8BulfjKTNg5GriADW2KiXo1WEpvz/sPmA4bmm+pHGREtaODeMMkKJKuZ9U4lP6pJulQRjFyUJ7cGgXjJScCjcJRzQ0zyq6kon6QfE6Y/paX1hotEXTqQWWz4XdZIakxl7LmU7c2+I1dX3sOdBCqYtsX+5esJngOX85yo7MJK3dutANIuiRP+IFyF8WGBs/oRqLgAaAAK SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2018 21:16:26.0596 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d3016cc2-830e-4d70-bc1a-08d565cb39f7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3669 Subject: [dpdk-dev] [PATCH 03/11] net/qede: fix to check if tunnel L3 header is valid 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: , X-List-Received-Date: Sat, 27 Jan 2018 21:16:28 -0000 From: Harish Patil - Add a check to verify tunnel IP header checksum is valid and mark MBUF flag as appropriate. - Bit of refactoring so that inner frame handling for tunneled packets can be made common as regular (non-tunneled) packets. - make qede_tunn_exist() as inline. - remove RTE_PTYPE_L2_ETHER as default L2 pkt_type. Fixes: 3d4bb4411683 ("net/qede: add fastpath support for VXLAN tunneling") Cc: stable@dpdk.org Signed-off-by: Harish Patil --- drivers/net/qede/qede_rxtx.c | 143 +++++++++++++++++++++++++++--------------- 1 file changed, 91 insertions(+), 52 deletions(-) diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 184f0e1..2af1bfc 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -812,12 +812,18 @@ void qede_stop_queues(struct rte_eth_dev *eth_dev) } } -static bool qede_tunn_exist(uint16_t flag) +static inline bool qede_tunn_exist(uint16_t flag) { return !!((PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK << PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT) & flag); } +static inline uint8_t qede_check_tunn_csum_l3(uint16_t flag) +{ + return !!((PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK << + PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT) & flag); +} + /* * qede_check_tunn_csum_l4: * Returns: @@ -844,33 +850,51 @@ static inline uint8_t qede_check_notunn_csum_l4(uint16_t flag) return 0; } -/* Returns outer L3 and L4 packet_type for tunneled packets */ +/* Returns outer L2, L3 and L4 packet_type for tunneled packets */ static inline uint32_t qede_rx_cqe_to_pkt_type_outer(struct rte_mbuf *m) { uint32_t packet_type = RTE_PTYPE_UNKNOWN; struct ether_hdr *eth_hdr; struct ipv4_hdr *ipv4_hdr; struct ipv6_hdr *ipv6_hdr; + struct vlan_hdr *vlan_hdr; + uint16_t ethertype; + bool vlan_tagged = 0; + uint16_t len; eth_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *); - if (eth_hdr->ether_type == rte_cpu_to_be_16(ETHER_TYPE_IPv4)) { + len = sizeof(struct ether_hdr); + ethertype = rte_cpu_to_be_16(eth_hdr->ether_type); + + /* Note: Valid only if VLAN stripping is disabled */ + if (ethertype == ETHER_TYPE_VLAN) { + vlan_tagged = 1; + vlan_hdr = (struct vlan_hdr *)(eth_hdr + 1); + len += sizeof(struct vlan_hdr); + ethertype = rte_cpu_to_be_16(vlan_hdr->eth_proto); + } + + if (ethertype == ETHER_TYPE_IPv4) { packet_type |= RTE_PTYPE_L3_IPV4; - ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *, - sizeof(struct ether_hdr)); + ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *, len); if (ipv4_hdr->next_proto_id == IPPROTO_TCP) packet_type |= RTE_PTYPE_L4_TCP; else if (ipv4_hdr->next_proto_id == IPPROTO_UDP) packet_type |= RTE_PTYPE_L4_UDP; - } else if (eth_hdr->ether_type == rte_cpu_to_be_16(ETHER_TYPE_IPv6)) { + } else if (ethertype == ETHER_TYPE_IPv6) { packet_type |= RTE_PTYPE_L3_IPV6; - ipv6_hdr = rte_pktmbuf_mtod_offset(m, struct ipv6_hdr *, - sizeof(struct ether_hdr)); + ipv6_hdr = rte_pktmbuf_mtod_offset(m, struct ipv6_hdr *, len); if (ipv6_hdr->proto == IPPROTO_TCP) packet_type |= RTE_PTYPE_L4_TCP; else if (ipv6_hdr->proto == IPPROTO_UDP) packet_type |= RTE_PTYPE_L4_UDP; } + if (vlan_tagged) + packet_type |= RTE_PTYPE_L2_ETHER_VLAN; + else + packet_type |= RTE_PTYPE_L2_ETHER; + return packet_type; } @@ -1163,17 +1187,17 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) [QEDE_PKT_TYPE_TUNN_GRE] = RTE_PTYPE_TUNNEL_GRE, [QEDE_PKT_TYPE_TUNN_VXLAN] = RTE_PTYPE_TUNNEL_VXLAN, [QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_GENEVE] = - RTE_PTYPE_TUNNEL_GENEVE | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_GENEVE, [QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_GRE] = - RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_GRE, [QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_VXLAN] = - RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_VXLAN, [QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_GENEVE] = - RTE_PTYPE_TUNNEL_GENEVE | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_GENEVE, [QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_GRE] = - RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_GRE, [QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_VXLAN] = - RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_L2_ETHER, + RTE_PTYPE_TUNNEL_VXLAN, [QEDE_PKT_TYPE_TUNN_IPV4_TENID_NOEXIST_GENEVE] = RTE_PTYPE_TUNNEL_GENEVE | RTE_PTYPE_L3_IPV4, [QEDE_PKT_TYPE_TUNN_IPV4_TENID_NOEXIST_GRE] = @@ -1253,7 +1277,7 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) uint8_t bitfield) { PMD_RX_LOG(INFO, rxq, - "len 0x%x bf 0x%x hash_val 0x%x" + "len 0x%04x bf 0x%04x hash_val 0x%x" " ol_flags 0x%04lx l2=%s l3=%s l4=%s tunn=%s" " inner_l2=%s inner_l3=%s inner_l4=%s\n", m->data_len, bitfield, m->hash.rss, @@ -1404,47 +1428,62 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) ol_flags |= PKT_RX_L4_CKSUM_BAD; } else { ol_flags |= PKT_RX_L4_CKSUM_GOOD; - if (tpa_start_flg) - flags = - cqe_start_tpa->tunnel_pars_flags.flags; - else - flags = fp_cqe->tunnel_pars_flags.flags; - tunn_parse_flag = flags; - /* Tunnel_type */ - packet_type = - qede_rx_cqe_to_tunn_pkt_type(tunn_parse_flag); - - /* Inner header */ - packet_type |= - qede_rx_cqe_to_pkt_type_inner(parse_flag); - - /* Outer L3/L4 types is not available in CQE */ - packet_type |= - qede_rx_cqe_to_pkt_type_outer(rx_mb); } - } else { - PMD_RX_LOG(INFO, rxq, "Rx non-tunneled packet\n"); - if (unlikely(qede_check_notunn_csum_l4(parse_flag))) { - PMD_RX_LOG(ERR, rxq, - "L4 csum failed, flags = 0x%x\n", - parse_flag); - rxq->rx_hw_errors++; - ol_flags |= PKT_RX_L4_CKSUM_BAD; - } else { - ol_flags |= PKT_RX_L4_CKSUM_GOOD; - } - if (unlikely(qede_check_notunn_csum_l3(rx_mb, - parse_flag))) { + + if (unlikely(qede_check_tunn_csum_l3(parse_flag))) { PMD_RX_LOG(ERR, rxq, - "IP csum failed, flags = 0x%x\n", - parse_flag); - rxq->rx_hw_errors++; - ol_flags |= PKT_RX_IP_CKSUM_BAD; + "Outer L3 csum failed, flags = 0x%x\n", + parse_flag); + rxq->rx_hw_errors++; + ol_flags |= PKT_RX_EIP_CKSUM_BAD; } else { - ol_flags |= PKT_RX_IP_CKSUM_GOOD; - packet_type = - qede_rx_cqe_to_pkt_type(parse_flag); + ol_flags |= PKT_RX_IP_CKSUM_GOOD; } + + if (tpa_start_flg) + flags = cqe_start_tpa->tunnel_pars_flags.flags; + else + flags = fp_cqe->tunnel_pars_flags.flags; + tunn_parse_flag = flags; + + /* Tunnel_type */ + packet_type = + qede_rx_cqe_to_tunn_pkt_type(tunn_parse_flag); + + /* Inner header */ + packet_type |= + qede_rx_cqe_to_pkt_type_inner(parse_flag); + + /* Outer L3/L4 types is not available in CQE */ + packet_type |= qede_rx_cqe_to_pkt_type_outer(rx_mb); + + /* Outer L3/L4 types is not available in CQE. + * Need to add offset to parse correctly, + */ + rx_mb->data_off = offset + RTE_PKTMBUF_HEADROOM; + packet_type |= qede_rx_cqe_to_pkt_type_outer(rx_mb); + } + + /* Common handling for non-tunnel packets and for inner + * headers in the case of tunnel. + */ + if (unlikely(qede_check_notunn_csum_l4(parse_flag))) { + PMD_RX_LOG(ERR, rxq, + "L4 csum failed, flags = 0x%x\n", + parse_flag); + rxq->rx_hw_errors++; + ol_flags |= PKT_RX_L4_CKSUM_BAD; + } else { + ol_flags |= PKT_RX_L4_CKSUM_GOOD; + } + if (unlikely(qede_check_notunn_csum_l3(rx_mb, parse_flag))) { + PMD_RX_LOG(ERR, rxq, "IP csum failed, flags = 0x%x\n", + parse_flag); + rxq->rx_hw_errors++; + ol_flags |= PKT_RX_IP_CKSUM_BAD; + } else { + ol_flags |= PKT_RX_IP_CKSUM_GOOD; + packet_type |= qede_rx_cqe_to_pkt_type(parse_flag); } if (CQE_HAS_VLAN(parse_flag) || -- 1.7.10.3