From patchwork Thu Oct 19 01:13:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 30566 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A8C5E2B92; Thu, 19 Oct 2017 03:13:43 +0200 (CEST) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0066.outbound.protection.outlook.com [104.47.32.66]) by dpdk.org (Postfix) with ESMTP id 9FE0B2B82 for ; Thu, 19 Oct 2017 03:13:42 +0200 (CEST) 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=xHZq914nTVotRjgTXgRpb5kR48XtFD5zEh105X4KKNk=; b=mF++97UOPS2Sg5wnxEyR74Dili8lcPECUHAt3tLCB4byQR4OQ65d/2WHqGwDalV2rNJ10rxlGoGj+WDvZHn8WnuupPlMuHNjSYYWHLsgyJ1RublLeCaOy0NH5Eae+yipxENoLlPsDkI9sTwGFFN5YU1DPg0Nf1cmJvk/ZXTEEUQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3830.namprd07.prod.outlook.com (2603:10b6:4:7f::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Thu, 19 Oct 2017 01:13:40 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Harish Patil , Dept-EngDPDKDev@cavium.com, Rasesh Mody Date: Wed, 18 Oct 2017 18:13:29 -0700 Message-Id: <1508375611-9326-1-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: CY4PR03CA0104.namprd03.prod.outlook.com (2603:10b6:910:4d::45) To DM5PR0701MB3830.namprd07.prod.outlook.com (2603:10b6:4:7f::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 243463ec-3d69-4a78-1b5a-08d5168ea281 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:DM5PR0701MB3830; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 3:cARsC0GT1f2eRM2Ip56b3YFd131oEuUm0+YFRRH6XTX5hZkuthhONeyfcodLyY5foaDX69ahRZO0Ec0KHFoDWaT9SN4pFReJ1yUIWb2355An77gUtkaLY40mGiamJ0f+RYR5zF8DbPFv2jcRaptoevR17zNCMTZmKHYvZZd3Qz7gRr30E1RD/V7+6V1CwPdbtUoVhJTJeVfyPjRoJOxD13AC5yhhj4jsHuu63t1nWEFgmCsn21zINXQnuBZ8/U3i; 25:2CnAnTFxvJr9GfPXOdcw/isuNiVPFt4wJePT2ov0/c+I9MYMk1tP2AbBJypoF3GW/65yIcFDqRGvVyepxozOANYlHEPnZMnJUAciWoOVmdvMSacXnk1Y2SIlfQ2pwi8zixLBUG0VF/hMe8lTkkaajQi3RQghU5+VfJXM/LEydvAeIE4bI6dsPCvfr09IdtK1B3DtM7R21PLqvfDAaWX4sSKmD4tCaF5yvJ25Ig9PnFffGedHC+x9PVpODOSXpCp39ZobSZaf1FvXxY5ALXWq6mMJgmzrwuyMR4Mf9nw7RsUu+vnY0M33H/jeU7887hgcHc28tR4sRBA2EAxWBIxp4A==; 31:6bvcoiX9OmleYwPc/71o3VEzI/m5c0FF4Y0VSDy3PvizbbQ8fZygmeWL6bgKJh+KOlOj6RXWNSEXoyRVgIslxLHZrmOxDvny04Q7/S4XZ3/eexnnwy6ahcP+8fNI0VjPVMIYQUv7FuAmH9Y0hLXtBc11vWGQ1rD6JlSum2LeOs1tI0aICrrMGv0EOVmxPLlehMWBzHbGY6Mk/XjZl2LN7R5erheUS+5dNpLnhMgmb2Y= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3830: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 20:fO2aNxJtvpjkDENjTP3kLETPh//mQpdFOSbITXnjPQMb74/1TvgWGlx8opIB88Szl9fbwhkngoZtmifjHZ/3wqi4bCVR+QDso4toVlvFWua/TxXR8EQrx6T546iE6shm5nbaQ41Sj3MuCJn+tr+GyOQTwrsqlQHxkBsVWmCJPVJST+g/HcVTfXb9yRd4Lk7ui1nfOIx0t7mWBns6inbXpFPvOtHPx3wQBL/i1PTgWKwyXbkYfPmN08ulJgT2LTwHcclOcHs5x2jElB3MavNx0xEJbGSZMFIYckWLtw4dbKDwX4FHJ9MtKFuv2ykSipXKnFj+4AcW90wYiAk+BYOjHAxkQPMvyy6/Aet/5Mtbpp2sbjYJfBqflhIH1e2sWsilevNeyEkQxUAVa+wuqUwew1s+Nvtir0xdlHaz9biazijp29+Y95uoEctMC4RykSsmoqn5V0W4UWMlCNt4ggMt/CuI72nCZAJS2Mr+E13egyvVzHx2EycywOZh1WfuaYBB; 4:eQD63JFFtcT8Ch5DBnUtYHZzFiy8bJ36+jytHp7jjD6JsIty5LBP0q/22iFamTEBJoltKX+gAmNAt7wrMvqxclLdirjH0sZ2djWpBicWRej7uv14EIe+mmkDiL9TuWyFDgfdQ825EY9As3EOtG5bXep8uqX6PQTEPezlltYaJ/gJmrTAStWZRw5oZ03p5ZwgOC5K/7AxA1IqNyWDSPQ485ZWR9CIV7n6cOcm68zIHi2VphiBCdrGdW4872gnudaM X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123564025)(20161123555025)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR0701MB3830; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR0701MB3830; X-Forefront-PRVS: 0465429B7F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(189002)(199003)(68736007)(305945005)(2361001)(316002)(6666003)(72206003)(4720700003)(189998001)(16586007)(50986999)(54906003)(101416001)(5660300001)(50226002)(21086003)(16526018)(48376002)(97736004)(3846002)(36756003)(55016002)(53936002)(50466002)(106356001)(5003940100001)(25786009)(107886003)(6116002)(478600001)(2906002)(8676002)(8936002)(69596002)(6916009)(7736002)(47776003)(81166006)(33646002)(66066001)(81156014)(105586002)(86362001)(2351001)(4326008); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3830; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A: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; DM5PR0701MB3830; 23:F7K03oD0F6rYfuUhotMNisZ9if53JzUsWi7kEDp?= 0mbbiqJQ2pQ5ccwWxOGJXSQsdWNBYW4Ud1j+uIfgqHjFyZERvw+5Zq/lwVtP0806a2uboGG79+bVUZfKR4mZ1kIMptz7KglhBqwMIbXzpTmhdvRZ39JlfAfBFCeI7hi+8R1RyctAj/Ae4uHeGRSANSIj1pwv5Ez3P7X8cCcniAWNI0u3JAJZV6zxQhteY1JXa3Sl7i+psuB16g9KxQl1q3yQJFwluXUqp4NjG/ABBTWH97JU8ku2Gj0N7RpnXr8pmwRYZVCjO7/SeXV0gSxBEASG8K4HHo4sY7QTXX6P80eA8o/wuqpOmCtJmKvFRIdd8cWvtfVcQwhEukKB4tm7HrbW5ZeaKZZbEc8KQkrNAH+r77WMzO61T3If9AhM1mJIqSEoGkjF/+TDbw06W6XjeCfXvQL2tfL13ViZeJnGdkyCYYmmYVGN7qEuOtghi2KODCSXx3nlLCi4gtbyOHevLQgo2YaphIPIRSrzPKm7JhDLSe8l+ONHCLBs2/eN9YIzmbL4+dC3hjrXXFlgzU0k9JmjAoYKzNLzWwjlTUbWKpTXoHO52ZnVSmxKz50eHb4zZjb51pw2KqRcqfbZNjmbsrCll8Wlp4SsbrQW1I0NrJ70V1yD4Hh022/APWhrkSsGyUsUwmhsYzxPBOaA7F99/4s6NGIq/UJIl1TC+RcFyXwGQFogABoY0KI+mHkfVCj0X0FXK++kV0sFSRuwMSFBIBee7ig7R76E3/vmXtlTTCARSeZ8yf0+Bh7TLvED+iVU3FmLAoW5h3QQ/+izSnayl3lgIdD5TXLrYEnnBLlbjLBFR4r1IWPXjm+q0av5iAu/rKTySNHfw7ZuPIHge64iUpO4ofR0DARME2azvvLmFtRUPj90322v2LMpPa2FhID4eNTWKu5ncA1w6/7W1ip2C1YGQMwqZEsSr+7wRP2Bvewj2DbmyFp0HgFrosXxFqHWFAL5eonwu2mV9D5k2g5rzuQhuVtQLxrDfSsx1gT6ilbB0gAElMsIXfSPUdgJZBuZTS27gs1igX1A9OV7aHiCPfzOxzkAQ6Xa3is5Zn0Rda6c8nO1Zzd/VArSpmw1+xn/SYvhWTTwUiofYwvTFwA3PDKfVuGwnYQN9MlgWFCZgDMGdWQ== X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 6:BBVtyHWO4twyaO96WGe3DmyuJQKpNtmI7cERFdEgX/CNVQHXPEEHDdejbdcv5m1lZpOFNqlrSNGNVCnqzTo8a/9teaNbSbFX70NaA0puD6uqWCLds4/yOiNuQmUvbWFnI7E7X+VyR81jHmSM6X3ZrwRBlhcXBZcC1R9Z37yrrslBRGD4MZOzHAxBPYcHwIvyr/vjMCwq/5QXxLkGg3FGQOIaWMWJU/Kmw5YZcZ82GVC4J03honUzFH+f9mLUPPTFW3+dBGmWXf9TS08/7cLUt9U0FFlDQPndBmPwyBFOEnaCbXVy/0flnpdj2UufBiqe2Br+/IjJkpagCIBuSJCQeA==; 5:2A1g8EUQ2X0t3KJU+5BOPA4Lyeu26wh0nAMvvjiCkq+8iZq1hCPBRfkaKKdUtTDEvKkiyAC1+DTCgZD4mniLNloLcJzckAXzTJFiO31BbT8OjDLB3gZajDgShGeLUIFUMEg6oqeLUnZkYn+/b/n0Qw==; 24:iWTL0Sy/5V76aDVa32zVhDWOE47PRGbnx5mXhMkeGgKAmy5+Jt6GxDY+pK4iqm0SJDKn1jSS35nHHQ1FbaJqUGsTxeo0C21Mjvm7SLVGko4=; 7:7Zsidx95GY4h8+4Qz6kjHAffWDgXBUSXwE5/5qsOcMK3HypbTLa6NnLoA5/FD6wK5LBrYx0cTBILkDrsPLybkPIseNgcxP3mblgRnpXk15TWU1BCr1DnHHKYnf0SYHf+DCw38eSkkO1WFroZWVNqnE5sAp7e4Qrat9vbH43QU1cuP4AfTfKrSnGIMu5E4T09a36OWKBxgauVRMvPN9HhICBPcn1mNnIN9IcRKz//peY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2017 01:13:40.5799 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3830 Subject: [dpdk-dev] [PATCH 1/3] net/qede: fix supported packet types 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: Harish Patil Update/fix supported ptypes to return both inner and outer headers, tunnel_type, fragmented and VLAN packet types. Fixes: 3d4bb4411683 ("net/qede: add fastpath support for VXLAN tunneling") Fixes: 2ea6f76aff40 ("qede: add core driver") Signed-off-by: Harish Patil Signed-off-by: Rasesh Mody --- drivers/net/qede/qede_ethdev.c | 14 +++ drivers/net/qede/qede_rxtx.c | 223 ++++++++++++++++++++++++++++++++++------ drivers/net/qede/qede_rxtx.h | 23 ++++- 3 files changed, 227 insertions(+), 33 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index a238781..dc67bfd 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1808,8 +1808,22 @@ static int qede_flow_ctrl_get(struct rte_eth_dev *eth_dev, qede_dev_supported_ptypes_get(struct rte_eth_dev *eth_dev) { static const uint32_t ptypes[] = { + RTE_PTYPE_L2_ETHER, + RTE_PTYPE_L2_ETHER_VLAN, RTE_PTYPE_L3_IPV4, RTE_PTYPE_L3_IPV6, + RTE_PTYPE_L4_TCP, + RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_VXLAN, + RTE_PTYPE_L4_FRAG, + /* Inner */ + RTE_PTYPE_INNER_L2_ETHER, + RTE_PTYPE_INNER_L2_ETHER_VLAN, + RTE_PTYPE_INNER_L3_IPV4, + RTE_PTYPE_INNER_L3_IPV6, + RTE_PTYPE_INNER_L4_TCP, + RTE_PTYPE_INNER_L4_UDP, + RTE_PTYPE_INNER_L4_FRAG, RTE_PTYPE_UNKNOWN }; diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 45b4aeb..aba51ab 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -844,6 +844,109 @@ static inline uint8_t qede_check_notunn_csum_l4(uint16_t flag) return 0; } +/* Returns outer 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; + + eth_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *); + if (eth_hdr->ether_type == rte_cpu_to_be_16(ETHER_TYPE_IPv4)) { + packet_type |= RTE_PTYPE_L3_IPV4; + ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *, + sizeof(struct ether_hdr)); + 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)) { + packet_type |= RTE_PTYPE_L3_IPV6; + ipv6_hdr = rte_pktmbuf_mtod_offset(m, struct ipv6_hdr *, + sizeof(struct ether_hdr)); + 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; + } + + return packet_type; +} + +static inline uint32_t qede_rx_cqe_to_pkt_type_inner(uint16_t flags) +{ + uint16_t val; + + /* Lookup table */ + static const uint32_t + ptype_lkup_tbl[QEDE_PKT_TYPE_MAX] __rte_cache_aligned = { + [QEDE_PKT_TYPE_IPV4] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV6] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV4_TCP] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_TCP | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_TCP] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_TCP | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV4_UDP] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_UDP | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_UDP] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_UDP | + RTE_PTYPE_INNER_L2_ETHER, + /* Frags with no VLAN */ + [QEDE_PKT_TYPE_IPV4_FRAG] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_FRAG | + RTE_PTYPE_INNER_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_FRAG] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_FRAG | + RTE_PTYPE_INNER_L2_ETHER, + /* VLANs */ + [QEDE_PKT_TYPE_IPV4_VLAN] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_VLAN] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV4_TCP_VLAN] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_TCP | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_TCP_VLAN] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_TCP | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV4_UDP_VLAN] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_UDP | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_UDP_VLAN] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_UDP | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + /* Frags with VLAN */ + [QEDE_PKT_TYPE_IPV4_VLAN_FRAG] = RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_FRAG | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_VLAN_FRAG] = RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_FRAG | + RTE_PTYPE_INNER_L2_ETHER_VLAN, + }; + + /* Bits (0..3) provides L3/L4 protocol type */ + /* Bits (4,5) provides frag and VLAN info */ + val = ((PARSING_AND_ERR_FLAGS_L3TYPE_MASK << + PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT) | + (PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK << + PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT) | + (PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK << + PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT) | + (PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK << + PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT)) & flags; + + if (val < QEDE_PKT_TYPE_MAX) + return ptype_lkup_tbl[val]; + + return RTE_PTYPE_UNKNOWN; +} + static inline uint32_t qede_rx_cqe_to_pkt_type(uint16_t flags) { uint16_t val; @@ -851,24 +954,68 @@ static inline uint32_t qede_rx_cqe_to_pkt_type(uint16_t flags) /* Lookup table */ static const uint32_t ptype_lkup_tbl[QEDE_PKT_TYPE_MAX] __rte_cache_aligned = { - [QEDE_PKT_TYPE_IPV4] = RTE_PTYPE_L3_IPV4, - [QEDE_PKT_TYPE_IPV6] = RTE_PTYPE_L3_IPV6, - [QEDE_PKT_TYPE_IPV4_TCP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP, - [QEDE_PKT_TYPE_IPV6_TCP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP, - [QEDE_PKT_TYPE_IPV4_UDP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP, - [QEDE_PKT_TYPE_IPV6_UDP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP, + [QEDE_PKT_TYPE_IPV4] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV6] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV4_TCP] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_TCP | + RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_TCP] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_TCP | + RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV4_UDP] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_UDP | + RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_UDP] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_UDP | + RTE_PTYPE_L2_ETHER, + /* Frags with no VLAN */ + [QEDE_PKT_TYPE_IPV4_FRAG] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_FRAG | + RTE_PTYPE_L2_ETHER, + [QEDE_PKT_TYPE_IPV6_FRAG] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_FRAG | + RTE_PTYPE_L2_ETHER, + /* VLANs */ + [QEDE_PKT_TYPE_IPV4_VLAN] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_VLAN] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV4_TCP_VLAN] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_TCP | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_TCP_VLAN] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_TCP | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV4_UDP_VLAN] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_UDP | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_UDP_VLAN] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_UDP | + RTE_PTYPE_L2_ETHER_VLAN, + /* Frags with VLAN */ + [QEDE_PKT_TYPE_IPV4_VLAN_FRAG] = RTE_PTYPE_L3_IPV4 | + RTE_PTYPE_L4_FRAG | + RTE_PTYPE_L2_ETHER_VLAN, + [QEDE_PKT_TYPE_IPV6_VLAN_FRAG] = RTE_PTYPE_L3_IPV6 | + RTE_PTYPE_L4_FRAG | + RTE_PTYPE_L2_ETHER_VLAN, }; /* Bits (0..3) provides L3/L4 protocol type */ + /* Bits (4,5) provides frag and VLAN info */ val = ((PARSING_AND_ERR_FLAGS_L3TYPE_MASK << PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT) | (PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK << - PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT)) & flags; + PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT) | + (PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK << + PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT) | + (PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK << + PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT)) & flags; if (val < QEDE_PKT_TYPE_MAX) - return ptype_lkup_tbl[val] | RTE_PTYPE_L2_ETHER; - else - return RTE_PTYPE_UNKNOWN; + return ptype_lkup_tbl[val]; + + return RTE_PTYPE_UNKNOWN; } static inline uint8_t @@ -1100,6 +1247,27 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) return 0; } +#ifdef RTE_LIBRTE_QEDE_DEBUG_RX +static inline void +print_rx_bd_info(struct rte_mbuf *m, struct qede_rx_queue *rxq, + uint8_t bitfield) +{ + PMD_RX_LOG(INFO, rxq, + "len 0x%x bf 0x%x 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, + (unsigned long)m->ol_flags, + rte_get_ptype_l2_name(m->packet_type), + rte_get_ptype_l3_name(m->packet_type), + rte_get_ptype_l4_name(m->packet_type), + rte_get_ptype_tunnel_name(m->packet_type), + rte_get_ptype_inner_l2_name(m->packet_type), + rte_get_ptype_inner_l3_name(m->packet_type), + rte_get_ptype_inner_l4_name(m->packet_type)); +} +#endif + uint16_t qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { @@ -1120,7 +1288,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) uint16_t parse_flag; #ifdef RTE_LIBRTE_QEDE_DEBUG_RX uint8_t bitfield_val; - enum rss_hash_type htype; #endif uint8_t tunn_parse_flag; uint8_t j; @@ -1214,8 +1381,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) rss_hash = rte_le_to_cpu_32(fp_cqe->rss_hash); #ifdef RTE_LIBRTE_QEDE_DEBUG_RX bitfield_val = fp_cqe->bitfields; - htype = (uint8_t)GET_FIELD(bitfield_val, - ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE); #endif } else { parse_flag = @@ -1226,8 +1391,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) vlan_tci = rte_le_to_cpu_16(cqe_start_tpa->vlan_tag); #ifdef RTE_LIBRTE_QEDE_DEBUG_RX bitfield_val = cqe_start_tpa->bitfields; - htype = (uint8_t)GET_FIELD(bitfield_val, - ETH_FAST_PATH_RX_TPA_START_CQE_RSS_HASH_TYPE); #endif rss_hash = rte_le_to_cpu_32(cqe_start_tpa->rss_hash); } @@ -1247,8 +1410,17 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t 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"); @@ -1275,21 +1447,16 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) } } - if (CQE_HAS_VLAN(parse_flag)) { + if (CQE_HAS_VLAN(parse_flag) || + CQE_HAS_OUTER_VLAN(parse_flag)) { + /* Note: FW doesn't indicate Q-in-Q packet */ ol_flags |= PKT_RX_VLAN_PKT; if (qdev->vlan_strip_flg) { ol_flags |= PKT_RX_VLAN_STRIPPED; rx_mb->vlan_tci = vlan_tci; } } - if (CQE_HAS_OUTER_VLAN(parse_flag)) { - ol_flags |= PKT_RX_QINQ_PKT; - if (qdev->vlan_strip_flg) { - rx_mb->vlan_tci = vlan_tci; - ol_flags |= PKT_RX_QINQ_STRIPPED; - } - rx_mb->vlan_tci_outer = 0; - } + /* RSS Hash */ if (qdev->rss_enable) { ol_flags |= PKT_RX_RSS_HASH; @@ -1341,11 +1508,9 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) rx_mb->ol_flags = ol_flags; rx_mb->data_len = len; rx_mb->packet_type = packet_type; - PMD_RX_LOG(INFO, rxq, - "pkt_type 0x%04x len %u hash_type %d hash_val 0x%x" - " ol_flags 0x%04lx\n", - packet_type, len, htype, rx_mb->hash.rss, - (unsigned long)ol_flags); +#ifdef RTE_LIBRTE_QEDE_DEBUG_RX + print_rx_bd_info(rx_mb, rxq, bitfield_val); +#endif if (!tpa_start_flg) { rx_mb->nb_segs = fp_cqe->bd_num; rx_mb->pkt_len = pkt_len; diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h index b551fd6..acf9e47 100644 --- a/drivers/net/qede/qede_rxtx.h +++ b/drivers/net/qede/qede_rxtx.h @@ -84,7 +84,8 @@ /* Macros for non-tunnel packet types lkup table */ #define QEDE_PKT_TYPE_UNKNOWN 0x0 -#define QEDE_PKT_TYPE_MAX 0xf +#define QEDE_PKT_TYPE_MAX 0x3f + #define QEDE_PKT_TYPE_IPV4 0x1 #define QEDE_PKT_TYPE_IPV6 0x2 #define QEDE_PKT_TYPE_IPV4_TCP 0x5 @@ -92,6 +93,20 @@ #define QEDE_PKT_TYPE_IPV4_UDP 0x9 #define QEDE_PKT_TYPE_IPV6_UDP 0xa +/* For frag pkts, corresponding IP bits is set */ +#define QEDE_PKT_TYPE_IPV4_FRAG 0x11 +#define QEDE_PKT_TYPE_IPV6_FRAG 0x12 + +#define QEDE_PKT_TYPE_IPV4_VLAN 0x21 +#define QEDE_PKT_TYPE_IPV6_VLAN 0x22 +#define QEDE_PKT_TYPE_IPV4_TCP_VLAN 0x25 +#define QEDE_PKT_TYPE_IPV6_TCP_VLAN 0x26 +#define QEDE_PKT_TYPE_IPV4_UDP_VLAN 0x29 +#define QEDE_PKT_TYPE_IPV6_UDP_VLAN 0x2a + +#define QEDE_PKT_TYPE_IPV4_VLAN_FRAG 0x31 +#define QEDE_PKT_TYPE_IPV6_VLAN_FRAG 0x32 + /* Macros for tunneled packets with next protocol lkup table */ #define QEDE_PKT_TYPE_TUNN_GENEVE 0x1 #define QEDE_PKT_TYPE_TUNN_GRE 0x2 @@ -99,12 +114,12 @@ /* Bit 2 is don't care bit */ #define QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_GENEVE 0x9 -#define QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_GRE 0xa +#define QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_GRE 0xa #define QEDE_PKT_TYPE_TUNN_L2_TENID_NOEXIST_VXLAN 0xb #define QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_GENEVE 0xd #define QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_GRE 0xe -#define QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_VXLAN 0xf +#define QEDE_PKT_TYPE_TUNN_L2_TENID_EXIST_VXLAN 0xf #define QEDE_PKT_TYPE_TUNN_IPV4_TENID_NOEXIST_GENEVE 0x11 @@ -112,7 +127,7 @@ #define QEDE_PKT_TYPE_TUNN_IPV4_TENID_NOEXIST_VXLAN 0x13 #define QEDE_PKT_TYPE_TUNN_IPV4_TENID_EXIST_GENEVE 0x15 -#define QEDE_PKT_TYPE_TUNN_IPV4_TENID_EXIST_GRE 0x16 +#define QEDE_PKT_TYPE_TUNN_IPV4_TENID_EXIST_GRE 0x16 #define QEDE_PKT_TYPE_TUNN_IPV4_TENID_EXIST_VXLAN 0x17