dpdk/drivers/net/i40e/i40e_rxtx.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2010-2015 Intel Corporation
   3 */
   4
   5#ifndef _I40E_RXTX_H_
   6#define _I40E_RXTX_H_
   7
   8#define RTE_PMD_I40E_RX_MAX_BURST 32
   9#define RTE_PMD_I40E_TX_MAX_BURST 32
  10
  11#define RTE_I40E_VPMD_RX_BURST        32
  12#define RTE_I40E_VPMD_TX_BURST        32
  13#define RTE_I40E_RXQ_REARM_THRESH      32
  14#define RTE_I40E_MAX_RX_BURST          RTE_I40E_RXQ_REARM_THRESH
  15#define RTE_I40E_TX_MAX_FREE_BUF_SZ    64
  16#define RTE_I40E_DESCS_PER_LOOP    4
  17
  18#define I40E_RXBUF_SZ_1024 1024
  19#define I40E_RXBUF_SZ_2048 2048
  20
  21/* In none-PXE mode QLEN must be whole number of 32 descriptors. */
  22#define I40E_ALIGN_RING_DESC    32
  23
  24#define I40E_MIN_RING_DESC      64
  25#define I40E_MAX_RING_DESC      4096
  26
  27#define I40E_FDIR_NUM_TX_DESC   (I40E_FDIR_PRG_PKT_CNT << 1)
  28#define I40E_FDIR_NUM_RX_DESC   (I40E_FDIR_PRG_PKT_CNT << 1)
  29
  30#define I40E_MIN_TSO_MSS          256
  31#define I40E_MAX_TSO_MSS          9674
  32
  33#define I40E_TX_MAX_SEG     UINT8_MAX
  34#define I40E_TX_MAX_MTU_SEG 8
  35
  36#define I40E_TX_MIN_PKT_LEN 17
  37
  38/* Shared FDIR masks between scalar / vector drivers */
  39#define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK   0x03
  40#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID  0x01
  41#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FLEX   0x02
  42#define I40E_RX_DESC_EXT_STATUS_FLEXBL_MASK   0x03
  43#define I40E_RX_DESC_EXT_STATUS_FLEXBL_FLEX   0x01
  44
  45#undef container_of
  46#define container_of(ptr, type, member) ({ \
  47                typeof(((type *)0)->member)(*__mptr) = (ptr); \
  48                (type *)((char *)__mptr - offsetof(type, member)); })
  49
  50#define I40E_TD_CMD (I40E_TX_DESC_CMD_ICRC |\
  51                     I40E_TX_DESC_CMD_EOP)
  52
  53enum i40e_header_split_mode {
  54        i40e_header_split_none = 0,
  55        i40e_header_split_enabled = 1,
  56        i40e_header_split_always = 2,
  57        i40e_header_split_reserved
  58};
  59
  60#define I40E_HEADER_SPLIT_NONE    ((uint8_t)0)
  61#define I40E_HEADER_SPLIT_L2      ((uint8_t)(1 << 0))
  62#define I40E_HEADER_SPLIT_IP      ((uint8_t)(1 << 1))
  63#define I40E_HEADER_SPLIT_UDP_TCP ((uint8_t)(1 << 2))
  64#define I40E_HEADER_SPLIT_SCTP    ((uint8_t)(1 << 3))
  65#define I40E_HEADER_SPLIT_ALL (I40E_HEADER_SPLIT_L2 | \
  66                               I40E_HEADER_SPLIT_IP | \
  67                               I40E_HEADER_SPLIT_UDP_TCP | \
  68                               I40E_HEADER_SPLIT_SCTP)
  69
  70/* HW desc structure, both 16-byte and 32-byte types are supported */
  71#ifdef RTE_LIBRTE_I40E_16BYTE_RX_DESC
  72#define i40e_rx_desc i40e_16byte_rx_desc
  73#else
  74#define i40e_rx_desc i40e_32byte_rx_desc
  75#endif
  76
  77struct i40e_rx_entry {
  78        struct rte_mbuf *mbuf;
  79};
  80
  81/*
  82 * Structure associated with each RX queue.
  83 */
  84struct i40e_rx_queue {
  85        struct rte_mempool *mp; /**< mbuf pool to populate RX ring */
  86        volatile union i40e_rx_desc *rx_ring;/**< RX ring virtual address */
  87        uint64_t rx_ring_phys_addr; /**< RX ring DMA address */
  88        struct i40e_rx_entry *sw_ring; /**< address of RX soft ring */
  89        uint16_t nb_rx_desc; /**< number of RX descriptors */
  90        uint16_t rx_free_thresh; /**< max free RX desc to hold */
  91        uint16_t rx_tail; /**< current value of tail */
  92        uint16_t nb_rx_hold; /**< number of held free RX desc */
  93        struct rte_mbuf *pkt_first_seg; /**< first segment of current packet */
  94        struct rte_mbuf *pkt_last_seg; /**< last segment of current packet */
  95        struct rte_mbuf fake_mbuf; /**< dummy mbuf */
  96#ifdef RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC
  97        uint16_t rx_nb_avail; /**< number of staged packets ready */
  98        uint16_t rx_next_avail; /**< index of next staged packets */
  99        uint16_t rx_free_trigger; /**< triggers rx buffer allocation */
 100        struct rte_mbuf *rx_stage[RTE_PMD_I40E_RX_MAX_BURST * 2];
 101#endif
 102
 103        uint16_t rxrearm_nb;    /**< number of remaining to be re-armed */
 104        uint16_t rxrearm_start; /**< the idx we start the re-arming from */
 105        uint64_t mbuf_initializer; /**< value to init mbufs */
 106
 107        uint16_t port_id; /**< device port ID */
 108        uint8_t crc_len; /**< 0 if CRC stripped, 4 otherwise */
 109        uint8_t fdir_enabled; /**< 0 if FDIR disabled, 1 when enabled */
 110        uint16_t queue_id; /**< RX queue index */
 111        uint16_t reg_idx; /**< RX queue register index */
 112        uint8_t drop_en; /**< if not 0, set register bit */
 113        volatile uint8_t *qrx_tail; /**< register address of tail */
 114        struct i40e_vsi *vsi; /**< the VSI this queue belongs to */
 115        uint16_t rx_buf_len; /* The packet buffer size */
 116        uint16_t rx_hdr_len; /* The header buffer size */
 117        uint16_t max_pkt_len; /* Maximum packet length */
 118        uint8_t hs_mode; /* Header Split mode */
 119        bool q_set; /**< indicate if rx queue has been configured */
 120        bool rx_deferred_start; /**< don't start this queue in dev start */
 121        uint16_t rx_using_sse; /**<flag indicate the usage of vPMD for rx */
 122        uint8_t dcb_tc;         /**< Traffic class of rx queue */
 123        uint64_t offloads; /**< Rx offload flags of DEV_RX_OFFLOAD_* */
 124};
 125
 126struct i40e_tx_entry {
 127        struct rte_mbuf *mbuf;
 128        uint16_t next_id;
 129        uint16_t last_id;
 130};
 131
 132struct i40e_vec_tx_entry {
 133        struct rte_mbuf *mbuf;
 134};
 135
 136/*
 137 * Structure associated with each TX queue.
 138 */
 139struct i40e_tx_queue {
 140        uint16_t nb_tx_desc; /**< number of TX descriptors */
 141        uint64_t tx_ring_phys_addr; /**< TX ring DMA address */
 142        volatile struct i40e_tx_desc *tx_ring; /**< TX ring virtual address */
 143        struct i40e_tx_entry *sw_ring; /**< virtual address of SW ring */
 144        uint16_t tx_tail; /**< current value of tail register */
 145        volatile uint8_t *qtx_tail; /**< register address of tail */
 146        uint16_t nb_tx_used; /**< number of TX desc used since RS bit set */
 147        /**< index to last TX descriptor to have been cleaned */
 148        uint16_t last_desc_cleaned;
 149        /**< Total number of TX descriptors ready to be allocated. */
 150        uint16_t nb_tx_free;
 151        /**< Start freeing TX buffers if there are less free descriptors than
 152             this value. */
 153        uint16_t tx_free_thresh;
 154        /** Number of TX descriptors to use before RS bit is set. */
 155        uint16_t tx_rs_thresh;
 156        uint8_t pthresh; /**< Prefetch threshold register. */
 157        uint8_t hthresh; /**< Host threshold register. */
 158        uint8_t wthresh; /**< Write-back threshold reg. */
 159        uint16_t port_id; /**< Device port identifier. */
 160        uint16_t queue_id; /**< TX queue index. */
 161        uint16_t reg_idx;
 162        struct i40e_vsi *vsi; /**< the VSI this queue belongs to */
 163        uint16_t tx_next_dd;
 164        uint16_t tx_next_rs;
 165        bool q_set; /**< indicate if tx queue has been configured */
 166        bool tx_deferred_start; /**< don't start this queue in dev start */
 167        uint8_t dcb_tc;         /**< Traffic class of tx queue */
 168        uint64_t offloads; /**< Tx offload flags of DEV_RX_OFFLOAD_* */
 169};
 170
 171/** Offload features */
 172union i40e_tx_offload {
 173        uint64_t data;
 174        struct {
 175                uint64_t l2_len:7; /**< L2 (MAC) Header Length. */
 176                uint64_t l3_len:9; /**< L3 (IP) Header Length. */
 177                uint64_t l4_len:8; /**< L4 Header Length. */
 178                uint64_t tso_segsz:16; /**< TCP TSO segment size */
 179                uint64_t outer_l2_len:8; /**< outer L2 Header Length */
 180                uint64_t outer_l3_len:16; /**< outer L3 Header Length */
 181        };
 182};
 183
 184int i40e_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id);
 185int i40e_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id);
 186int i40e_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id);
 187int i40e_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id);
 188const uint32_t *i40e_dev_supported_ptypes_get(struct rte_eth_dev *dev);
 189int i40e_dev_rx_queue_setup(struct rte_eth_dev *dev,
 190                            uint16_t queue_idx,
 191                            uint16_t nb_desc,
 192                            unsigned int socket_id,
 193                            const struct rte_eth_rxconf *rx_conf,
 194                            struct rte_mempool *mp);
 195int i40e_dev_tx_queue_setup(struct rte_eth_dev *dev,
 196                            uint16_t queue_idx,
 197                            uint16_t nb_desc,
 198                            unsigned int socket_id,
 199                            const struct rte_eth_txconf *tx_conf);
 200void i40e_dev_rx_queue_release(void *rxq);
 201void i40e_dev_tx_queue_release(void *txq);
 202uint16_t i40e_recv_pkts(void *rx_queue,
 203                        struct rte_mbuf **rx_pkts,
 204                        uint16_t nb_pkts);
 205uint16_t i40e_recv_scattered_pkts(void *rx_queue,
 206                                  struct rte_mbuf **rx_pkts,
 207                                  uint16_t nb_pkts);
 208uint16_t i40e_xmit_pkts(void *tx_queue,
 209                        struct rte_mbuf **tx_pkts,
 210                        uint16_t nb_pkts);
 211uint16_t i40e_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 212                uint16_t nb_pkts);
 213int i40e_tx_queue_init(struct i40e_tx_queue *txq);
 214int i40e_rx_queue_init(struct i40e_rx_queue *rxq);
 215void i40e_free_tx_resources(struct i40e_tx_queue *txq);
 216void i40e_free_rx_resources(struct i40e_rx_queue *rxq);
 217void i40e_dev_clear_queues(struct rte_eth_dev *dev);
 218void i40e_dev_free_queues(struct rte_eth_dev *dev);
 219void i40e_reset_rx_queue(struct i40e_rx_queue *rxq);
 220void i40e_reset_tx_queue(struct i40e_tx_queue *txq);
 221void i40e_tx_queue_release_mbufs(struct i40e_tx_queue *txq);
 222int i40e_tx_done_cleanup(void *txq, uint32_t free_cnt);
 223int i40e_alloc_rx_queue_mbufs(struct i40e_rx_queue *rxq);
 224void i40e_rx_queue_release_mbufs(struct i40e_rx_queue *rxq);
 225
 226uint32_t i40e_dev_rx_queue_count(struct rte_eth_dev *dev,
 227                                 uint16_t rx_queue_id);
 228int i40e_dev_rx_descriptor_done(void *rx_queue, uint16_t offset);
 229int i40e_dev_rx_descriptor_status(void *rx_queue, uint16_t offset);
 230int i40e_dev_tx_descriptor_status(void *tx_queue, uint16_t offset);
 231
 232uint16_t i40e_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
 233                            uint16_t nb_pkts);
 234uint16_t i40e_recv_scattered_pkts_vec(void *rx_queue,
 235                                      struct rte_mbuf **rx_pkts,
 236                                      uint16_t nb_pkts);
 237int i40e_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev);
 238int i40e_rxq_vec_setup(struct i40e_rx_queue *rxq);
 239int i40e_txq_vec_setup(struct i40e_tx_queue *txq);
 240void i40e_rx_queue_release_mbufs_vec(struct i40e_rx_queue *rxq);
 241uint16_t i40e_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
 242                                   uint16_t nb_pkts);
 243void i40e_set_rx_function(struct rte_eth_dev *dev);
 244void i40e_set_tx_function_flag(struct rte_eth_dev *dev,
 245                               struct i40e_tx_queue *txq);
 246void i40e_set_tx_function(struct rte_eth_dev *dev);
 247void i40e_set_default_ptype_table(struct rte_eth_dev *dev);
 248void i40e_set_default_pctype_table(struct rte_eth_dev *dev);
 249uint16_t i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
 250        uint16_t nb_pkts);
 251uint16_t i40e_recv_scattered_pkts_vec_avx2(void *rx_queue,
 252        struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
 253uint16_t i40e_xmit_pkts_vec_avx2(void *tx_queue, struct rte_mbuf **tx_pkts,
 254        uint16_t nb_pkts);
 255int i40e_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc);
 256uint16_t i40e_recv_pkts_vec_avx512(void *rx_queue,
 257                                   struct rte_mbuf **rx_pkts,
 258                                   uint16_t nb_pkts);
 259uint16_t i40e_recv_scattered_pkts_vec_avx512(void *rx_queue,
 260                                             struct rte_mbuf **rx_pkts,
 261                                             uint16_t nb_pkts);
 262uint16_t i40e_xmit_pkts_vec_avx512(void *tx_queue,
 263                                   struct rte_mbuf **tx_pkts,
 264                                   uint16_t nb_pkts);
 265
 266/* For each value it means, datasheet of hardware can tell more details
 267 *
 268 * @note: fix i40e_dev_supported_ptypes_get() if any change here.
 269 */
 270static inline uint32_t
 271i40e_get_default_pkt_type(uint8_t ptype)
 272{
 273        static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = {
 274                /* L2 types */
 275                /* [0] reserved */
 276                [1] = RTE_PTYPE_L2_ETHER,
 277                [2] = RTE_PTYPE_L2_ETHER_TIMESYNC,
 278                /* [3] - [5] reserved */
 279                [6] = RTE_PTYPE_L2_ETHER_LLDP,
 280                /* [7] - [10] reserved */
 281                [11] = RTE_PTYPE_L2_ETHER_ARP,
 282                /* [12] - [21] reserved */
 283
 284                /* Non tunneled IPv4 */
 285                [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 286                        RTE_PTYPE_L4_FRAG,
 287                [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 288                        RTE_PTYPE_L4_NONFRAG,
 289                [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 290                        RTE_PTYPE_L4_UDP,
 291                /* [25] reserved */
 292                [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 293                        RTE_PTYPE_L4_TCP,
 294                [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 295                        RTE_PTYPE_L4_SCTP,
 296                [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 297                        RTE_PTYPE_L4_ICMP,
 298
 299                /* IPv4 --> IPv4 */
 300                [29] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 301                        RTE_PTYPE_TUNNEL_IP |
 302                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 303                        RTE_PTYPE_INNER_L4_FRAG,
 304                [30] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 305                        RTE_PTYPE_TUNNEL_IP |
 306                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 307                        RTE_PTYPE_INNER_L4_NONFRAG,
 308                [31] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 309                        RTE_PTYPE_TUNNEL_IP |
 310                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 311                        RTE_PTYPE_INNER_L4_UDP,
 312                /* [32] reserved */
 313                [33] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 314                        RTE_PTYPE_TUNNEL_IP |
 315                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 316                        RTE_PTYPE_INNER_L4_TCP,
 317                [34] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 318                        RTE_PTYPE_TUNNEL_IP |
 319                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 320                        RTE_PTYPE_INNER_L4_SCTP,
 321                [35] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 322                        RTE_PTYPE_TUNNEL_IP |
 323                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 324                        RTE_PTYPE_INNER_L4_ICMP,
 325
 326                /* IPv4 --> IPv6 */
 327                [36] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 328                        RTE_PTYPE_TUNNEL_IP |
 329                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 330                        RTE_PTYPE_INNER_L4_FRAG,
 331                [37] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 332                        RTE_PTYPE_TUNNEL_IP |
 333                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 334                        RTE_PTYPE_INNER_L4_NONFRAG,
 335                [38] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 336                        RTE_PTYPE_TUNNEL_IP |
 337                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 338                        RTE_PTYPE_INNER_L4_UDP,
 339                /* [39] reserved */
 340                [40] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 341                        RTE_PTYPE_TUNNEL_IP |
 342                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 343                        RTE_PTYPE_INNER_L4_TCP,
 344                [41] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 345                        RTE_PTYPE_TUNNEL_IP |
 346                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 347                        RTE_PTYPE_INNER_L4_SCTP,
 348                [42] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 349                        RTE_PTYPE_TUNNEL_IP |
 350                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 351                        RTE_PTYPE_INNER_L4_ICMP,
 352
 353                /* IPv4 --> GRE/Teredo/VXLAN */
 354                [43] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 355                        RTE_PTYPE_TUNNEL_GRENAT,
 356
 357                /* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */
 358                [44] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 359                        RTE_PTYPE_TUNNEL_GRENAT |
 360                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 361                        RTE_PTYPE_INNER_L4_FRAG,
 362                [45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 363                        RTE_PTYPE_TUNNEL_GRENAT |
 364                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 365                        RTE_PTYPE_INNER_L4_NONFRAG,
 366                [46] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 367                        RTE_PTYPE_TUNNEL_GRENAT |
 368                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 369                        RTE_PTYPE_INNER_L4_UDP,
 370                /* [47] reserved */
 371                [48] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 372                        RTE_PTYPE_TUNNEL_GRENAT |
 373                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 374                        RTE_PTYPE_INNER_L4_TCP,
 375                [49] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 376                        RTE_PTYPE_TUNNEL_GRENAT |
 377                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 378                        RTE_PTYPE_INNER_L4_SCTP,
 379                [50] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 380                        RTE_PTYPE_TUNNEL_GRENAT |
 381                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 382                        RTE_PTYPE_INNER_L4_ICMP,
 383
 384                /* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */
 385                [51] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 386                        RTE_PTYPE_TUNNEL_GRENAT |
 387                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 388                        RTE_PTYPE_INNER_L4_FRAG,
 389                [52] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 390                        RTE_PTYPE_TUNNEL_GRENAT |
 391                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 392                        RTE_PTYPE_INNER_L4_NONFRAG,
 393                [53] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 394                        RTE_PTYPE_TUNNEL_GRENAT |
 395                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 396                        RTE_PTYPE_INNER_L4_UDP,
 397                /* [54] reserved */
 398                [55] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 399                        RTE_PTYPE_TUNNEL_GRENAT |
 400                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 401                        RTE_PTYPE_INNER_L4_TCP,
 402                [56] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 403                        RTE_PTYPE_TUNNEL_GRENAT |
 404                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 405                        RTE_PTYPE_INNER_L4_SCTP,
 406                [57] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 407                        RTE_PTYPE_TUNNEL_GRENAT |
 408                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 409                        RTE_PTYPE_INNER_L4_ICMP,
 410
 411                /* IPv4 --> GRE/Teredo/VXLAN --> MAC */
 412                [58] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 413                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER,
 414
 415                /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
 416                [59] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 417                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 418                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 419                        RTE_PTYPE_INNER_L4_FRAG,
 420                [60] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 421                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 422                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 423                        RTE_PTYPE_INNER_L4_NONFRAG,
 424                [61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 425                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 426                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 427                        RTE_PTYPE_INNER_L4_UDP,
 428                /* [62] reserved */
 429                [63] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 430                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 431                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 432                        RTE_PTYPE_INNER_L4_TCP,
 433                [64] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 434                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 435                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 436                        RTE_PTYPE_INNER_L4_SCTP,
 437                [65] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 438                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 439                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 440                        RTE_PTYPE_INNER_L4_ICMP,
 441
 442                /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
 443                [66] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 444                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 445                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 446                        RTE_PTYPE_INNER_L4_FRAG,
 447                [67] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 448                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 449                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 450                        RTE_PTYPE_INNER_L4_NONFRAG,
 451                [68] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 452                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 453                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 454                        RTE_PTYPE_INNER_L4_UDP,
 455                /* [69] reserved */
 456                [70] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 457                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 458                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 459                        RTE_PTYPE_INNER_L4_TCP,
 460                [71] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 461                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 462                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 463                        RTE_PTYPE_INNER_L4_SCTP,
 464                [72] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 465                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 466                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 467                        RTE_PTYPE_INNER_L4_ICMP,
 468
 469                /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN */
 470                [73] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 471                        RTE_PTYPE_TUNNEL_GRENAT |
 472                        RTE_PTYPE_INNER_L2_ETHER_VLAN,
 473
 474                /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */
 475                [74] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 476                        RTE_PTYPE_TUNNEL_GRENAT |
 477                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 478                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 479                        RTE_PTYPE_INNER_L4_FRAG,
 480                [75] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 481                        RTE_PTYPE_TUNNEL_GRENAT |
 482                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 483                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 484                        RTE_PTYPE_INNER_L4_NONFRAG,
 485                [76] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 486                        RTE_PTYPE_TUNNEL_GRENAT |
 487                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 488                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 489                        RTE_PTYPE_INNER_L4_UDP,
 490                /* [77] reserved */
 491                [78] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 492                        RTE_PTYPE_TUNNEL_GRENAT |
 493                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 494                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 495                        RTE_PTYPE_INNER_L4_TCP,
 496                [79] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 497                        RTE_PTYPE_TUNNEL_GRENAT |
 498                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 499                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 500                        RTE_PTYPE_INNER_L4_SCTP,
 501                [80] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 502                        RTE_PTYPE_TUNNEL_GRENAT |
 503                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 504                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 505                        RTE_PTYPE_INNER_L4_ICMP,
 506
 507                /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */
 508                [81] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 509                        RTE_PTYPE_TUNNEL_GRENAT |
 510                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 511                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 512                        RTE_PTYPE_INNER_L4_FRAG,
 513                [82] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 514                        RTE_PTYPE_TUNNEL_GRENAT |
 515                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 516                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 517                        RTE_PTYPE_INNER_L4_NONFRAG,
 518                [83] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 519                        RTE_PTYPE_TUNNEL_GRENAT |
 520                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 521                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 522                        RTE_PTYPE_INNER_L4_UDP,
 523                /* [84] reserved */
 524                [85] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 525                        RTE_PTYPE_TUNNEL_GRENAT |
 526                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 527                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 528                        RTE_PTYPE_INNER_L4_TCP,
 529                [86] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 530                        RTE_PTYPE_TUNNEL_GRENAT |
 531                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 532                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 533                        RTE_PTYPE_INNER_L4_SCTP,
 534                [87] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 535                        RTE_PTYPE_TUNNEL_GRENAT |
 536                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 537                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 538                        RTE_PTYPE_INNER_L4_ICMP,
 539
 540                /* Non tunneled IPv6 */
 541                [88] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 542                        RTE_PTYPE_L4_FRAG,
 543                [89] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 544                        RTE_PTYPE_L4_NONFRAG,
 545                [90] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 546                        RTE_PTYPE_L4_UDP,
 547                /* [91] reserved */
 548                [92] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 549                        RTE_PTYPE_L4_TCP,
 550                [93] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 551                        RTE_PTYPE_L4_SCTP,
 552                [94] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 553                        RTE_PTYPE_L4_ICMP,
 554
 555                /* IPv6 --> IPv4 */
 556                [95] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 557                        RTE_PTYPE_TUNNEL_IP |
 558                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 559                        RTE_PTYPE_INNER_L4_FRAG,
 560                [96] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 561                        RTE_PTYPE_TUNNEL_IP |
 562                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 563                        RTE_PTYPE_INNER_L4_NONFRAG,
 564                [97] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 565                        RTE_PTYPE_TUNNEL_IP |
 566                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 567                        RTE_PTYPE_INNER_L4_UDP,
 568                /* [98] reserved */
 569                [99] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 570                        RTE_PTYPE_TUNNEL_IP |
 571                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 572                        RTE_PTYPE_INNER_L4_TCP,
 573                [100] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 574                        RTE_PTYPE_TUNNEL_IP |
 575                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 576                        RTE_PTYPE_INNER_L4_SCTP,
 577                [101] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 578                        RTE_PTYPE_TUNNEL_IP |
 579                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 580                        RTE_PTYPE_INNER_L4_ICMP,
 581
 582                /* IPv6 --> IPv6 */
 583                [102] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 584                        RTE_PTYPE_TUNNEL_IP |
 585                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 586                        RTE_PTYPE_INNER_L4_FRAG,
 587                [103] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 588                        RTE_PTYPE_TUNNEL_IP |
 589                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 590                        RTE_PTYPE_INNER_L4_NONFRAG,
 591                [104] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 592                        RTE_PTYPE_TUNNEL_IP |
 593                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 594                        RTE_PTYPE_INNER_L4_UDP,
 595                /* [105] reserved */
 596                [106] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 597                        RTE_PTYPE_TUNNEL_IP |
 598                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 599                        RTE_PTYPE_INNER_L4_TCP,
 600                [107] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 601                        RTE_PTYPE_TUNNEL_IP |
 602                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 603                        RTE_PTYPE_INNER_L4_SCTP,
 604                [108] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 605                        RTE_PTYPE_TUNNEL_IP |
 606                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 607                        RTE_PTYPE_INNER_L4_ICMP,
 608
 609                /* IPv6 --> GRE/Teredo/VXLAN */
 610                [109] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 611                        RTE_PTYPE_TUNNEL_GRENAT,
 612
 613                /* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */
 614                [110] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 615                        RTE_PTYPE_TUNNEL_GRENAT |
 616                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 617                        RTE_PTYPE_INNER_L4_FRAG,
 618                [111] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 619                        RTE_PTYPE_TUNNEL_GRENAT |
 620                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 621                        RTE_PTYPE_INNER_L4_NONFRAG,
 622                [112] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 623                        RTE_PTYPE_TUNNEL_GRENAT |
 624                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 625                        RTE_PTYPE_INNER_L4_UDP,
 626                /* [113] reserved */
 627                [114] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 628                        RTE_PTYPE_TUNNEL_GRENAT |
 629                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 630                        RTE_PTYPE_INNER_L4_TCP,
 631                [115] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 632                        RTE_PTYPE_TUNNEL_GRENAT |
 633                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 634                        RTE_PTYPE_INNER_L4_SCTP,
 635                [116] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 636                        RTE_PTYPE_TUNNEL_GRENAT |
 637                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 638                        RTE_PTYPE_INNER_L4_ICMP,
 639
 640                /* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */
 641                [117] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 642                        RTE_PTYPE_TUNNEL_GRENAT |
 643                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 644                        RTE_PTYPE_INNER_L4_FRAG,
 645                [118] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 646                        RTE_PTYPE_TUNNEL_GRENAT |
 647                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 648                        RTE_PTYPE_INNER_L4_NONFRAG,
 649                [119] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 650                        RTE_PTYPE_TUNNEL_GRENAT |
 651                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 652                        RTE_PTYPE_INNER_L4_UDP,
 653                /* [120] reserved */
 654                [121] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 655                        RTE_PTYPE_TUNNEL_GRENAT |
 656                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 657                        RTE_PTYPE_INNER_L4_TCP,
 658                [122] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 659                        RTE_PTYPE_TUNNEL_GRENAT |
 660                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 661                        RTE_PTYPE_INNER_L4_SCTP,
 662                [123] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 663                        RTE_PTYPE_TUNNEL_GRENAT |
 664                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 665                        RTE_PTYPE_INNER_L4_ICMP,
 666
 667                /* IPv6 --> GRE/Teredo/VXLAN --> MAC */
 668                [124] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 669                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER,
 670
 671                /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
 672                [125] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 673                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 674                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 675                        RTE_PTYPE_INNER_L4_FRAG,
 676                [126] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 677                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 678                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 679                        RTE_PTYPE_INNER_L4_NONFRAG,
 680                [127] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 681                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 682                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 683                        RTE_PTYPE_INNER_L4_UDP,
 684                /* [128] reserved */
 685                [129] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 686                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 687                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 688                        RTE_PTYPE_INNER_L4_TCP,
 689                [130] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 690                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 691                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 692                        RTE_PTYPE_INNER_L4_SCTP,
 693                [131] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 694                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 695                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 696                        RTE_PTYPE_INNER_L4_ICMP,
 697
 698                /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
 699                [132] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 700                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 701                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 702                        RTE_PTYPE_INNER_L4_FRAG,
 703                [133] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 704                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 705                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 706                        RTE_PTYPE_INNER_L4_NONFRAG,
 707                [134] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 708                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 709                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 710                        RTE_PTYPE_INNER_L4_UDP,
 711                /* [135] reserved */
 712                [136] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 713                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 714                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 715                        RTE_PTYPE_INNER_L4_TCP,
 716                [137] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 717                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 718                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 719                        RTE_PTYPE_INNER_L4_SCTP,
 720                [138] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 721                        RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
 722                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 723                        RTE_PTYPE_INNER_L4_ICMP,
 724
 725                /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN */
 726                [139] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 727                        RTE_PTYPE_TUNNEL_GRENAT |
 728                        RTE_PTYPE_INNER_L2_ETHER_VLAN,
 729
 730                /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */
 731                [140] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 732                        RTE_PTYPE_TUNNEL_GRENAT |
 733                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 734                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 735                        RTE_PTYPE_INNER_L4_FRAG,
 736                [141] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 737                        RTE_PTYPE_TUNNEL_GRENAT |
 738                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 739                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 740                        RTE_PTYPE_INNER_L4_NONFRAG,
 741                [142] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 742                        RTE_PTYPE_TUNNEL_GRENAT |
 743                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 744                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 745                        RTE_PTYPE_INNER_L4_UDP,
 746                /* [143] reserved */
 747                [144] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 748                        RTE_PTYPE_TUNNEL_GRENAT |
 749                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 750                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 751                        RTE_PTYPE_INNER_L4_TCP,
 752                [145] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 753                        RTE_PTYPE_TUNNEL_GRENAT |
 754                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 755                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 756                        RTE_PTYPE_INNER_L4_SCTP,
 757                [146] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 758                        RTE_PTYPE_TUNNEL_GRENAT |
 759                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 760                        RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
 761                        RTE_PTYPE_INNER_L4_ICMP,
 762
 763                /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */
 764                [147] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 765                        RTE_PTYPE_TUNNEL_GRENAT |
 766                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 767                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 768                        RTE_PTYPE_INNER_L4_FRAG,
 769                [148] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 770                        RTE_PTYPE_TUNNEL_GRENAT |
 771                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 772                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 773                        RTE_PTYPE_INNER_L4_NONFRAG,
 774                [149] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 775                        RTE_PTYPE_TUNNEL_GRENAT |
 776                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 777                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 778                        RTE_PTYPE_INNER_L4_UDP,
 779                /* [150] reserved */
 780                [151] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 781                        RTE_PTYPE_TUNNEL_GRENAT |
 782                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 783                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 784                        RTE_PTYPE_INNER_L4_TCP,
 785                [152] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 786                        RTE_PTYPE_TUNNEL_GRENAT |
 787                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 788                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 789                        RTE_PTYPE_INNER_L4_SCTP,
 790                [153] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 791                        RTE_PTYPE_TUNNEL_GRENAT |
 792                        RTE_PTYPE_INNER_L2_ETHER_VLAN |
 793                        RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
 794                        RTE_PTYPE_INNER_L4_ICMP,
 795
 796                /* L2 NSH packet type */
 797                [154] = RTE_PTYPE_L2_ETHER_NSH,
 798                [155] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 799                        RTE_PTYPE_L4_FRAG,
 800                [156] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 801                        RTE_PTYPE_L4_NONFRAG,
 802                [157] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 803                        RTE_PTYPE_L4_UDP,
 804                [158] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 805                        RTE_PTYPE_L4_TCP,
 806                [159] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 807                        RTE_PTYPE_L4_SCTP,
 808                [160] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
 809                        RTE_PTYPE_L4_ICMP,
 810                [161] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 811                        RTE_PTYPE_L4_FRAG,
 812                [162] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 813                        RTE_PTYPE_L4_NONFRAG,
 814                [163] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 815                        RTE_PTYPE_L4_UDP,
 816                [164] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 817                        RTE_PTYPE_L4_TCP,
 818                [165] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 819                        RTE_PTYPE_L4_SCTP,
 820                [166] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
 821                        RTE_PTYPE_L4_ICMP,
 822
 823                /* All others reserved */
 824        };
 825
 826        return type_table[ptype];
 827}
 828
 829#endif /* _I40E_RXTX_H_ */
 830