From patchwork Tue Nov 18 07:37:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jijiang Liu X-Patchwork-Id: 1330 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id D1B6C7F7D; Tue, 18 Nov 2014 08:27:31 +0100 (CET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 580457F58 for ; Tue, 18 Nov 2014 08:27:26 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 17 Nov 2014 23:37:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,408,1413270000"; d="scan'208";a="624066653" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga001.fm.intel.com with ESMTP; 17 Nov 2014 23:37:43 -0800 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id sAI7bgWq006347; Tue, 18 Nov 2014 15:37:42 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id sAI7be6h007592; Tue, 18 Nov 2014 15:37:42 +0800 Received: (from jijiangl@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id sAI7bdgA007588; Tue, 18 Nov 2014 15:37:39 +0800 From: Jijiang Liu To: dev@dpdk.org Date: Tue, 18 Nov 2014 15:37:30 +0800 Message-Id: <1416296251-7534-4-git-send-email-jijiang.liu@intel.com> X-Mailer: git-send-email 1.7.12.2 In-Reply-To: <1416296251-7534-1-git-send-email-jijiang.liu@intel.com> References: <1416296251-7534-1-git-send-email-jijiang.liu@intel.com> Subject: [dpdk-dev] [PATCH 3/4] i40e:translate i40e packet types X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Translate i40e packet types to abstract packet types, and keep the usage of the PKT_RX_IPV4_HDR and the PKT_RX_IPV4_HDR as before in i40e driver. Signed-off-by: Jijiang Liu --- lib/librte_pmd_i40e/i40e_rxtx.c | 604 +++++++++++++++++++++------------------ 1 files changed, 332 insertions(+), 272 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_rxtx.c b/lib/librte_pmd_i40e/i40e_rxtx.c index 487591d..80f1bc0 100644 --- a/lib/librte_pmd_i40e/i40e_rxtx.c +++ b/lib/librte_pmd_i40e/i40e_rxtx.c @@ -142,272 +142,320 @@ i40e_rxd_error_to_pkt_flags(uint64_t qword) return flags; } -/* Translate pkt types to pkt flags */ -static inline uint64_t -i40e_rxd_ptype_to_pkt_flags(uint64_t qword) +static inline enum rte_eth_packet_type +i40e_rxd_ptype_mapping(uint64_t qword) { uint8_t ptype = (uint8_t)((qword & I40E_RXD_QW1_PTYPE_MASK) >> I40E_RXD_QW1_PTYPE_SHIFT); - static const uint64_t ip_ptype_map[I40E_MAX_PKT_TYPE] = { - 0, /* PTYPE 0 */ - 0, /* PTYPE 1 */ - 0, /* PTYPE 2 */ - 0, /* PTYPE 3 */ - 0, /* PTYPE 4 */ - 0, /* PTYPE 5 */ - 0, /* PTYPE 6 */ - 0, /* PTYPE 7 */ - 0, /* PTYPE 8 */ - 0, /* PTYPE 9 */ - 0, /* PTYPE 10 */ - 0, /* PTYPE 11 */ - 0, /* PTYPE 12 */ - 0, /* PTYPE 13 */ - 0, /* PTYPE 14 */ - 0, /* PTYPE 15 */ - 0, /* PTYPE 16 */ - 0, /* PTYPE 17 */ - 0, /* PTYPE 18 */ - 0, /* PTYPE 19 */ - 0, /* PTYPE 20 */ - 0, /* PTYPE 21 */ - PKT_RX_IPV4_HDR, /* PTYPE 22 */ - PKT_RX_IPV4_HDR, /* PTYPE 23 */ - PKT_RX_IPV4_HDR, /* PTYPE 24 */ - 0, /* PTYPE 25 */ - PKT_RX_IPV4_HDR, /* PTYPE 26 */ - PKT_RX_IPV4_HDR, /* PTYPE 27 */ - PKT_RX_IPV4_HDR, /* PTYPE 28 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 29 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 30 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 31 */ - 0, /* PTYPE 32 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 33 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 34 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 35 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 36 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 37 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 38 */ - 0, /* PTYPE 39 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 40 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 41 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 42 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 43 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 44 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 45 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 46 */ - 0, /* PTYPE 47 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 48 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 49 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 50 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 51 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 52 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 53 */ - 0, /* PTYPE 54 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 55 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 56 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 57 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 58 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 59 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 60 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 61 */ - 0, /* PTYPE 62 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 63 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 64 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 65 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 66 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 67 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 68 */ - 0, /* PTYPE 69 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 70 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 71 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 72 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 73 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 74 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 75 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 76 */ - 0, /* PTYPE 77 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 78 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 79 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 80 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 81 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 82 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 83 */ - 0, /* PTYPE 84 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 85 */ - PKT_RX_TUNNEL_IPV4_HDR, /* PTYPE 86 */ - PKT_RX_IPV4_HDR_EXT, /* PTYPE 87 */ - PKT_RX_IPV6_HDR, /* PTYPE 88 */ - PKT_RX_IPV6_HDR, /* PTYPE 89 */ - PKT_RX_IPV6_HDR, /* PTYPE 90 */ - 0, /* PTYPE 91 */ - PKT_RX_IPV6_HDR, /* PTYPE 92 */ - PKT_RX_IPV6_HDR, /* PTYPE 93 */ - PKT_RX_IPV6_HDR, /* PTYPE 94 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 95 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 96 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 97 */ - 0, /* PTYPE 98 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 99 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 100 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 101 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 102 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 103 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 104 */ - 0, /* PTYPE 105 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 106 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 107 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 108 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 109 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 110 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 111 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 112 */ - 0, /* PTYPE 113 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 114 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 115 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 116 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 117 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 118 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 119 */ - 0, /* PTYPE 120 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 121 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 122 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 123 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 124 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 125 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 126 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 127 */ - 0, /* PTYPE 128 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 129 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 130 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 131 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 132 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 133 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 134 */ - 0, /* PTYPE 135 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 136 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 137 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 138 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 139 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 140 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 141 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 142 */ - 0, /* PTYPE 143 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 144 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 145 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 146 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 147 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 148 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 149 */ - 0, /* PTYPE 150 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 151 */ - PKT_RX_TUNNEL_IPV6_HDR, /* PTYPE 152 */ - PKT_RX_IPV6_HDR_EXT, /* PTYPE 153 */ - 0, /* PTYPE 154 */ - 0, /* PTYPE 155 */ - 0, /* PTYPE 156 */ - 0, /* PTYPE 157 */ - 0, /* PTYPE 158 */ - 0, /* PTYPE 159 */ - 0, /* PTYPE 160 */ - 0, /* PTYPE 161 */ - 0, /* PTYPE 162 */ - 0, /* PTYPE 163 */ - 0, /* PTYPE 164 */ - 0, /* PTYPE 165 */ - 0, /* PTYPE 166 */ - 0, /* PTYPE 167 */ - 0, /* PTYPE 168 */ - 0, /* PTYPE 169 */ - 0, /* PTYPE 170 */ - 0, /* PTYPE 171 */ - 0, /* PTYPE 172 */ - 0, /* PTYPE 173 */ - 0, /* PTYPE 174 */ - 0, /* PTYPE 175 */ - 0, /* PTYPE 176 */ - 0, /* PTYPE 177 */ - 0, /* PTYPE 178 */ - 0, /* PTYPE 179 */ - 0, /* PTYPE 180 */ - 0, /* PTYPE 181 */ - 0, /* PTYPE 182 */ - 0, /* PTYPE 183 */ - 0, /* PTYPE 184 */ - 0, /* PTYPE 185 */ - 0, /* PTYPE 186 */ - 0, /* PTYPE 187 */ - 0, /* PTYPE 188 */ - 0, /* PTYPE 189 */ - 0, /* PTYPE 190 */ - 0, /* PTYPE 191 */ - 0, /* PTYPE 192 */ - 0, /* PTYPE 193 */ - 0, /* PTYPE 194 */ - 0, /* PTYPE 195 */ - 0, /* PTYPE 196 */ - 0, /* PTYPE 197 */ - 0, /* PTYPE 198 */ - 0, /* PTYPE 199 */ - 0, /* PTYPE 200 */ - 0, /* PTYPE 201 */ - 0, /* PTYPE 202 */ - 0, /* PTYPE 203 */ - 0, /* PTYPE 204 */ - 0, /* PTYPE 205 */ - 0, /* PTYPE 206 */ - 0, /* PTYPE 207 */ - 0, /* PTYPE 208 */ - 0, /* PTYPE 209 */ - 0, /* PTYPE 210 */ - 0, /* PTYPE 211 */ - 0, /* PTYPE 212 */ - 0, /* PTYPE 213 */ - 0, /* PTYPE 214 */ - 0, /* PTYPE 215 */ - 0, /* PTYPE 216 */ - 0, /* PTYPE 217 */ - 0, /* PTYPE 218 */ - 0, /* PTYPE 219 */ - 0, /* PTYPE 220 */ - 0, /* PTYPE 221 */ - 0, /* PTYPE 222 */ - 0, /* PTYPE 223 */ - 0, /* PTYPE 224 */ - 0, /* PTYPE 225 */ - 0, /* PTYPE 226 */ - 0, /* PTYPE 227 */ - 0, /* PTYPE 228 */ - 0, /* PTYPE 229 */ - 0, /* PTYPE 230 */ - 0, /* PTYPE 231 */ - 0, /* PTYPE 232 */ - 0, /* PTYPE 233 */ - 0, /* PTYPE 234 */ - 0, /* PTYPE 235 */ - 0, /* PTYPE 236 */ - 0, /* PTYPE 237 */ - 0, /* PTYPE 238 */ - 0, /* PTYPE 239 */ - 0, /* PTYPE 240 */ - 0, /* PTYPE 241 */ - 0, /* PTYPE 242 */ - 0, /* PTYPE 243 */ - 0, /* PTYPE 244 */ - 0, /* PTYPE 245 */ - 0, /* PTYPE 246 */ - 0, /* PTYPE 247 */ - 0, /* PTYPE 248 */ - 0, /* PTYPE 249 */ - 0, /* PTYPE 250 */ - 0, /* PTYPE 251 */ - 0, /* PTYPE 252 */ - 0, /* PTYPE 253 */ - 0, /* PTYPE 254 */ - 0, /* PTYPE 255 */ + static const enum rte_eth_packet_type ptype_map[I40E_MAX_PKT_TYPE] = { + RTE_PTYPE_UNDEF, /* PTYPE 0 */ + RTE_PTYPE_PAY2, + RTE_PTYPE_TimeSync_PAY2, + RTE_PTYPE_FIP_PAY2, + RTE_PTYPE_UNDEF, /* PTYPE 4 */ + RTE_PTYPE_UNDEF, /* PTYPE 5 */ + RTE_PTYPE_LLDP_PAY2, + RTE_PTYPE_ECP_PAY2, + RTE_PTYPE_UNDEF, /* PTYPE 8 */ + RTE_PTYPE_UNDEF, /* PTYPE 9 */ + RTE_PTYPE_EAPOL_PAY2, + RTE_PTYPE_ARP, + RTE_PTYPE_FCOE_PAY3, + RTE_PTYPE_FCOE_FCDATA, + RTE_PTYPE_FCOE_FCRDY, + RTE_PTYPE_FCOE_FCRSP, + RTE_PTYPE_FCOE_FCOTHER, + RTE_PTYPE_FCOE_VFT, + RTE_PTYPE_FCOE_VFT_FCDATA, + RTE_PTYPE_FCOE_VFT_FCRDY, + RTE_PTYPE_FCOE_VFT_FCRSP, + RTE_PTYPE_FCOE_VFT_FCOTHER, + + /* Non Tunneled IPv4 */ + RTE_PTYPE_IPv4FRAG, + RTE_PTYPE_IPv4, + RTE_PTYPE_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 25 */ + RTE_PTYPE_IPv4_TCP, + RTE_PTYPE_IPv4_SCTP, + RTE_PTYPE_IPv4_ICMP, + + /* IPv4 --> IPv4 */ + RTE_PTYPE_IPv4_IPv4FRAG, + RTE_PTYPE_IPv4_IPv4, + RTE_PTYPE_IPv4_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 32 */ + RTE_PTYPE_IPv4_IPv4_TCP, + RTE_PTYPE_IPv4_IPv4_SCTP, + RTE_PTYPE_IPv4_IPv4_ICMP, + + /* IPv4 --> IPv6 */ + RTE_PTYPE_IPv4_IPv6FRAG, + RTE_PTYPE_IPv4_IPv6, + RTE_PTYPE_IPv4_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 39 */ + RTE_PTYPE_IPv4_IPv6_TCP, + RTE_PTYPE_IPv4_IPv6_SCTP, + RTE_PTYPE_IPv4_IPv6_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN */ + RTE_PTYPE_IPv4_GRENAT_PAY3, + + /* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */ + RTE_PTYPE_IPv4_GRENAT_IPv4FRAG, + RTE_PTYPE_IPv4_GRENAT_IPv4, + RTE_PTYPE_IPv4_GRENAT_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 47 */ + RTE_PTYPE_IPv4_GRENAT_IPv4_TCP, + RTE_PTYPE_IPv4_GRENAT_IPv4_SCTP, + RTE_PTYPE_IPv4_GRENAT_IPv4_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */ + RTE_PTYPE_IPv4_GRENAT_IPv6FRAG, + RTE_PTYPE_IPv4_GRENAT_IPv6, + RTE_PTYPE_IPv4_GRENAT_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 54 */ + RTE_PTYPE_IPv4_GRENAT_IPv6_TCP, + RTE_PTYPE_IPv4_GRENAT_IPv6_SCTP, + RTE_PTYPE_IPv4_GRENAT_IPv6_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC */ + RTE_PTYPE_IPv4_GRENAT_MAC_PAY3, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4FRAG, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 62 */ + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_TCP, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_SCTP, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6FRAG, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 69 */ + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_TCP, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_SCTP, + RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN */ + RTE_PTYPE_IPv4_GRENAT_MACVLAN_PAY3, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4FRAG, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 77 */ + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_TCP, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_SCTP, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_ICMP, + + /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6FRAG, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 84 */ + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_TCP, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_SCTP, + RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_ICMP, + + /* Non Tunneled IPv6 */ + RTE_PTYPE_IPv6FRAG, + RTE_PTYPE_IPv6, + RTE_PTYPE_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 91 */ + RTE_PTYPE_IPv6_TCP, + RTE_PTYPE_IPv6_SCTP, + RTE_PTYPE_IPv6_ICMP, + + /* IPv6 --> IPv4 */ + RTE_PTYPE_IPv6_IPv4FRAG, + RTE_PTYPE_IPv6_IPv4, + RTE_PTYPE_IPv6_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 98 */ + RTE_PTYPE_IPv6_IPv4_TCP, + RTE_PTYPE_IPv6_IPv4_SCTP, + RTE_PTYPE_IPv6_IPv4_ICMP, + + /* IPv6 --> IPv6 */ + RTE_PTYPE_IPv6_IPv6FRAG, + RTE_PTYPE_IPv6_IPv6, + RTE_PTYPE_IPv6_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 105 */ + RTE_PTYPE_IPv6_IPv6_TCP, + RTE_PTYPE_IPv6_IPv6_SCTP, + RTE_PTYPE_IPv6_IPv6_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN */ + RTE_PTYPE_IPv6_GRENAT_PAY3, + + /* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */ + RTE_PTYPE_IPv6_GRENAT_IPv4FRAG, + RTE_PTYPE_IPv6_GRENAT_IPv4, + RTE_PTYPE_IPv6_GRENAT_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 113 */ + RTE_PTYPE_IPv6_GRENAT_IPv4_TCP, + RTE_PTYPE_IPv6_GRENAT_IPv4_SCTP, + RTE_PTYPE_IPv6_GRENAT_IPv4_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */ + RTE_PTYPE_IPv6_GRENAT_IPv6FRAG, + RTE_PTYPE_IPv6_GRENAT_IPv6, + RTE_PTYPE_IPv6_GRENAT_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 120 */ + RTE_PTYPE_IPv6_GRENAT_IPv6_TCP, + RTE_PTYPE_IPv6_GRENAT_IPv6_SCTP, + RTE_PTYPE_IPv6_GRENAT_IPv6_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC */ + RTE_PTYPE_IPv6_GRENAT_MAC_PAY3, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4FRAG, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 128 */ + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_TCP, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_SCTP, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6FRAG, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 135 */ + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_TCP, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_SCTP, + RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN */ + RTE_PTYPE_IPv6_GRENAT_MACVLAN_PAY3, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4FRAG, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 143 */ + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_TCP, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_SCTP, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_ICMP, + + /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6FRAG, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_UDP, + RTE_PTYPE_UNDEF, /* PTYPE 150 */ + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_TCP, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_SCTP, + RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_ICMP, + + RTE_PTYPE_UNDEF, /* PTYPE 154 */ + RTE_PTYPE_UNDEF, /* PTYPE 155 */ + RTE_PTYPE_UNDEF, /* PTYPE 156 */ + RTE_PTYPE_UNDEF, /* PTYPE 157 */ + RTE_PTYPE_UNDEF, /* PTYPE 158 */ + RTE_PTYPE_UNDEF, /* PTYPE 159 */ + RTE_PTYPE_UNDEF, /* PTYPE 160 */ + RTE_PTYPE_UNDEF, /* PTYPE 161 */ + RTE_PTYPE_UNDEF, /* PTYPE 162 */ + RTE_PTYPE_UNDEF, /* PTYPE 163 */ + RTE_PTYPE_UNDEF, /* PTYPE 164 */ + RTE_PTYPE_UNDEF, /* PTYPE 165 */ + RTE_PTYPE_UNDEF, /* PTYPE 166 */ + RTE_PTYPE_UNDEF, /* PTYPE 167 */ + RTE_PTYPE_UNDEF, /* PTYPE 168 */ + RTE_PTYPE_UNDEF, /* PTYPE 169 */ + RTE_PTYPE_UNDEF, /* PTYPE 170 */ + RTE_PTYPE_UNDEF, /* PTYPE 171 */ + RTE_PTYPE_UNDEF, /* PTYPE 172 */ + RTE_PTYPE_UNDEF, /* PTYPE 173 */ + RTE_PTYPE_UNDEF, /* PTYPE 174 */ + RTE_PTYPE_UNDEF, /* PTYPE 175 */ + RTE_PTYPE_UNDEF, /* PTYPE 176 */ + RTE_PTYPE_UNDEF, /* PTYPE 177 */ + RTE_PTYPE_UNDEF, /* PTYPE 178 */ + RTE_PTYPE_UNDEF, /* PTYPE 179 */ + RTE_PTYPE_UNDEF, /* PTYPE 180 */ + RTE_PTYPE_UNDEF, /* PTYPE 181 */ + RTE_PTYPE_UNDEF, /* PTYPE 182 */ + RTE_PTYPE_UNDEF, /* PTYPE 183 */ + RTE_PTYPE_UNDEF, /* PTYPE 184 */ + RTE_PTYPE_UNDEF, /* PTYPE 185 */ + RTE_PTYPE_UNDEF, /* PTYPE 186 */ + RTE_PTYPE_UNDEF, /* PTYPE 187 */ + RTE_PTYPE_UNDEF, /* PTYPE 188 */ + RTE_PTYPE_UNDEF, /* PTYPE 189 */ + RTE_PTYPE_UNDEF, /* PTYPE 190 */ + RTE_PTYPE_UNDEF, /* PTYPE 191 */ + RTE_PTYPE_UNDEF, /* PTYPE 192 */ + RTE_PTYPE_UNDEF, /* PTYPE 193 */ + RTE_PTYPE_UNDEF, /* PTYPE 194 */ + RTE_PTYPE_UNDEF, /* PTYPE 195 */ + RTE_PTYPE_UNDEF, /* PTYPE 196 */ + RTE_PTYPE_UNDEF, /* PTYPE 197 */ + RTE_PTYPE_UNDEF, /* PTYPE 198 */ + RTE_PTYPE_UNDEF, /* PTYPE 199 */ + RTE_PTYPE_UNDEF, /* PTYPE 200 */ + RTE_PTYPE_UNDEF, /* PTYPE 201 */ + RTE_PTYPE_UNDEF, /* PTYPE 202 */ + RTE_PTYPE_UNDEF, /* PTYPE 203 */ + RTE_PTYPE_UNDEF, /* PTYPE 204 */ + RTE_PTYPE_UNDEF, /* PTYPE 205 */ + RTE_PTYPE_UNDEF, /* PTYPE 206 */ + RTE_PTYPE_UNDEF, /* PTYPE 207 */ + RTE_PTYPE_UNDEF, /* PTYPE 208 */ + RTE_PTYPE_UNDEF, /* PTYPE 209 */ + RTE_PTYPE_UNDEF, /* PTYPE 210 */ + RTE_PTYPE_UNDEF, /* PTYPE 211 */ + RTE_PTYPE_UNDEF, /* PTYPE 212 */ + RTE_PTYPE_UNDEF, /* PTYPE 213 */ + RTE_PTYPE_UNDEF, /* PTYPE 214 */ + RTE_PTYPE_UNDEF, /* PTYPE 215 */ + RTE_PTYPE_UNDEF, /* PTYPE 216 */ + RTE_PTYPE_UNDEF, /* PTYPE 217 */ + RTE_PTYPE_UNDEF, /* PTYPE 218 */ + RTE_PTYPE_UNDEF, /* PTYPE 219 */ + RTE_PTYPE_UNDEF, /* PTYPE 220 */ + RTE_PTYPE_UNDEF, /* PTYPE 221 */ + RTE_PTYPE_UNDEF, /* PTYPE 222 */ + RTE_PTYPE_UNDEF, /* PTYPE 223 */ + RTE_PTYPE_UNDEF, /* PTYPE 224 */ + RTE_PTYPE_UNDEF, /* PTYPE 225 */ + RTE_PTYPE_UNDEF, /* PTYPE 226 */ + RTE_PTYPE_UNDEF, /* PTYPE 227 */ + RTE_PTYPE_UNDEF, /* PTYPE 228 */ + RTE_PTYPE_UNDEF, /* PTYPE 229 */ + RTE_PTYPE_UNDEF, /* PTYPE 230 */ + RTE_PTYPE_UNDEF, /* PTYPE 231 */ + RTE_PTYPE_UNDEF, /* PTYPE 232 */ + RTE_PTYPE_UNDEF, /* PTYPE 233 */ + RTE_PTYPE_UNDEF, /* PTYPE 234 */ + RTE_PTYPE_UNDEF, /* PTYPE 235 */ + RTE_PTYPE_UNDEF, /* PTYPE 236 */ + RTE_PTYPE_UNDEF, /* PTYPE 237 */ + RTE_PTYPE_UNDEF, /* PTYPE 238 */ + RTE_PTYPE_UNDEF, /* PTYPE 239 */ + RTE_PTYPE_UNDEF, /* PTYPE 240 */ + RTE_PTYPE_UNDEF, /* PTYPE 241 */ + RTE_PTYPE_UNDEF, /* PTYPE 242 */ + RTE_PTYPE_UNDEF, /* PTYPE 243 */ + RTE_PTYPE_UNDEF, /* PTYPE 244 */ + RTE_PTYPE_UNDEF, /* PTYPE 245 */ + RTE_PTYPE_UNDEF, /* PTYPE 246 */ + RTE_PTYPE_UNDEF, /* PTYPE 247 */ + RTE_PTYPE_UNDEF, /* PTYPE 248 */ + RTE_PTYPE_UNDEF, /* PTYPE 249 */ + RTE_PTYPE_UNDEF, /* PTYPE 250 */ + RTE_PTYPE_UNDEF, /* PTYPE 251 */ + RTE_PTYPE_UNDEF, /* PTYPE 252 */ + RTE_PTYPE_UNDEF, /* PTYPE 253 */ + RTE_PTYPE_UNDEF, /* PTYPE 254 */ + RTE_PTYPE_UNDEF, /* PTYPE 255 */ }; - return ip_ptype_map[ptype]; + return ptype_map[ptype]; } static inline void @@ -605,6 +653,7 @@ i40e_rx_scan_hw_ring(struct i40e_rx_queue *rxq) volatile union i40e_rx_desc *rxdp; struct i40e_rx_entry *rxep; struct rte_mbuf *mb; + enum rte_eth_packet_type packet_type; uint16_t pkt_len; uint64_t qword1; uint32_t rx_status; @@ -660,12 +709,15 @@ i40e_rx_scan_hw_ring(struct i40e_rx_queue *rxq) rxdp[j].wb.qword0.lo_dword.l2tag1) : 0; pkt_flags = i40e_rxd_status_to_pkt_flags(qword1); pkt_flags |= i40e_rxd_error_to_pkt_flags(qword1); - pkt_flags |= i40e_rxd_ptype_to_pkt_flags(qword1); + packet_type = i40e_rxd_ptype_mapping(qword1); + mb->packet_type = (uint16_t) packet_type; + if (RTE_ETH_IS_IPV4_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV4_HDR; + else if (RTE_ETH_IS_IPV6_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV6_HDR; + mb->ol_flags = pkt_flags; - mb->packet_type = (uint16_t)((qword1 & - I40E_RXD_QW1_PTYPE_MASK) >> - I40E_RXD_QW1_PTYPE_SHIFT); if (pkt_flags & PKT_RX_RSS_HASH) mb->hash.rss = rte_le_to_cpu_32(\ rxdp->wb.qword0.hi_dword.rss); @@ -830,6 +882,7 @@ i40e_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) struct i40e_rx_entry *rxe; struct rte_mbuf *rxm; struct rte_mbuf *nmb; + enum rte_eth_packet_type packet_type; uint16_t nb_rx; uint32_t rx_status; uint64_t qword1; @@ -900,9 +953,13 @@ i40e_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rte_le_to_cpu_16(rxd.wb.qword0.lo_dword.l2tag1) : 0; pkt_flags = i40e_rxd_status_to_pkt_flags(qword1); pkt_flags |= i40e_rxd_error_to_pkt_flags(qword1); - pkt_flags |= i40e_rxd_ptype_to_pkt_flags(qword1); - rxm->packet_type = (uint16_t)((qword1 & I40E_RXD_QW1_PTYPE_MASK) >> - I40E_RXD_QW1_PTYPE_SHIFT); + packet_type = i40e_rxd_ptype_mapping(qword1); + rxm->packet_type = (uint16_t)packet_type; + if (RTE_ETH_IS_IPV4_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV4_HDR; + else if (RTE_ETH_IS_IPV6_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV6_HDR; + rxm->ol_flags = pkt_flags; if (pkt_flags & PKT_RX_RSS_HASH) rxm->hash.rss = @@ -938,6 +995,7 @@ i40e_recv_scattered_pkts(void *rx_queue, struct i40e_rx_queue *rxq = rx_queue; volatile union i40e_rx_desc *rx_ring = rxq->rx_ring; volatile union i40e_rx_desc *rxdp; + enum rte_eth_packet_type packet_type; union i40e_rx_desc rxd; struct i40e_rx_entry *sw_ring = rxq->sw_ring; struct i40e_rx_entry *rxe; @@ -1056,10 +1114,12 @@ i40e_recv_scattered_pkts(void *rx_queue, rte_le_to_cpu_16(rxd.wb.qword0.lo_dword.l2tag1) : 0; pkt_flags = i40e_rxd_status_to_pkt_flags(qword1); pkt_flags |= i40e_rxd_error_to_pkt_flags(qword1); - pkt_flags |= i40e_rxd_ptype_to_pkt_flags(qword1); - first_seg->packet_type = (uint16_t)((qword1 & - I40E_RXD_QW1_PTYPE_MASK) >> - I40E_RXD_QW1_PTYPE_SHIFT); + packet_type = i40e_rxd_ptype_mapping(qword1); + first_seg->packet_type = (uint16_t) packet_type; + if (RTE_ETH_IS_IPV4_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV4_HDR; + else if (RTE_ETH_IS_IPV6_HDR(packet_type)) + pkt_flags |= PKT_RX_IPV6_HDR; first_seg->ol_flags = pkt_flags; if (pkt_flags & PKT_RX_RSS_HASH) rxm->hash.rss =