184 lines
4.8 KiB
C
184 lines
4.8 KiB
C
#pragma once
|
|
|
|
#include <rte_common.h>
|
|
#include <stdint.h>
|
|
|
|
#define rte_pktmbuf_mtod_offset(m, t, o) \
|
|
((t)((char*)(m)->buf_addr + (m)->data_off + (o)))
|
|
|
|
#define rte_pktmbuf_mtod(m, t) rte_pktmbuf_mtod_offset(m, t, 0)
|
|
|
|
#define PKT_RX_VLAN (1ULL << 0)
|
|
|
|
#define PKT_RX_RSS_HASH (1ULL << 1)
|
|
|
|
#define PKT_RX_FDIR (1ULL << 2)
|
|
|
|
#define PKT_RX_L4_CKSUM_BAD (1ULL << 3)
|
|
|
|
#define PKT_RX_IP_CKSUM_BAD (1ULL << 4)
|
|
|
|
#define PKT_RX_OUTER_IP_CKSUM_BAD (1ULL << 5)
|
|
|
|
#define PKT_RX_EIP_CKSUM_BAD \
|
|
RTE_DEPRECATED(PKT_RX_EIP_CKSUM_BAD) PKT_RX_OUTER_IP_CKSUM_BAD
|
|
|
|
#define PKT_RX_VLAN_STRIPPED (1ULL << 6)
|
|
|
|
#define PKT_RX_IP_CKSUM_MASK ((1ULL << 4) | (1ULL << 7))
|
|
|
|
#define PKT_RX_IP_CKSUM_UNKNOWN 0
|
|
#define PKT_RX_IP_CKSUM_BAD (1ULL << 4)
|
|
#define PKT_RX_IP_CKSUM_GOOD (1ULL << 7)
|
|
#define PKT_RX_IP_CKSUM_NONE ((1ULL << 4) | (1ULL << 7))
|
|
|
|
#define PKT_RX_L4_CKSUM_MASK ((1ULL << 3) | (1ULL << 8))
|
|
|
|
#define PKT_RX_L4_CKSUM_UNKNOWN 0
|
|
#define PKT_RX_L4_CKSUM_BAD (1ULL << 3)
|
|
#define PKT_RX_L4_CKSUM_GOOD (1ULL << 8)
|
|
#define PKT_RX_L4_CKSUM_NONE ((1ULL << 3) | (1ULL << 8))
|
|
|
|
#define PKT_RX_IEEE1588_PTP (1ULL << 9)
|
|
|
|
#define PKT_RX_IEEE1588_TMST (1ULL << 10)
|
|
|
|
#define PKT_RX_FDIR_ID (1ULL << 13)
|
|
|
|
#define PKT_RX_FDIR_FLX (1ULL << 14)
|
|
|
|
#define PKT_RX_QINQ_STRIPPED (1ULL << 15)
|
|
|
|
#define PKT_RX_LRO (1ULL << 16)
|
|
|
|
/* There is no flag defined at offset 17. It is free for any future use. */
|
|
|
|
#define PKT_RX_SEC_OFFLOAD (1ULL << 18)
|
|
|
|
#define PKT_RX_SEC_OFFLOAD_FAILED (1ULL << 19)
|
|
|
|
#define PKT_RX_QINQ (1ULL << 20)
|
|
|
|
#define PKT_RX_OUTER_L4_CKSUM_MASK ((1ULL << 21) | (1ULL << 22))
|
|
|
|
#define PKT_RX_OUTER_L4_CKSUM_UNKNOWN 0
|
|
#define PKT_RX_OUTER_L4_CKSUM_BAD (1ULL << 21)
|
|
#define PKT_RX_OUTER_L4_CKSUM_GOOD (1ULL << 22)
|
|
#define PKT_RX_OUTER_L4_CKSUM_INVALID ((1ULL << 21) | (1ULL << 22))
|
|
|
|
/* add new RX flags here, don't forget to update PKT_FIRST_FREE */
|
|
|
|
#define PKT_FIRST_FREE (1ULL << 23)
|
|
#define PKT_LAST_FREE (1ULL << 40)
|
|
|
|
/* add new TX flags here, don't forget to update PKT_LAST_FREE */
|
|
|
|
#define PKT_TX_OUTER_UDP_CKSUM (1ULL << 41)
|
|
|
|
#define PKT_TX_UDP_SEG (1ULL << 42)
|
|
|
|
#define PKT_TX_SEC_OFFLOAD (1ULL << 43)
|
|
|
|
#define PKT_TX_MACSEC (1ULL << 44)
|
|
|
|
#define PKT_TX_TUNNEL_VXLAN (0x1ULL << 45)
|
|
#define PKT_TX_TUNNEL_GRE (0x2ULL << 45)
|
|
#define PKT_TX_TUNNEL_IPIP (0x3ULL << 45)
|
|
#define PKT_TX_TUNNEL_GENEVE (0x4ULL << 45)
|
|
|
|
#define PKT_TX_TUNNEL_MPLSINUDP (0x5ULL << 45)
|
|
#define PKT_TX_TUNNEL_VXLAN_GPE (0x6ULL << 45)
|
|
#define PKT_TX_TUNNEL_GTP (0x7ULL << 45)
|
|
|
|
#define PKT_TX_TUNNEL_IP (0xDULL << 45)
|
|
|
|
#define PKT_TX_TUNNEL_UDP (0xEULL << 45)
|
|
/* add new TX TUNNEL type here */
|
|
#define PKT_TX_TUNNEL_MASK (0xFULL << 45)
|
|
|
|
#define PKT_TX_QINQ (1ULL << 49)
|
|
|
|
#define PKT_TX_QINQ_PKT PKT_TX_QINQ
|
|
|
|
#define PKT_TX_TCP_SEG (1ULL << 50)
|
|
|
|
#define PKT_TX_IEEE1588_TMST (1ULL << 51)
|
|
|
|
#define PKT_TX_L4_NO_CKSUM (0ULL << 52)
|
|
#define PKT_TX_TCP_CKSUM (1ULL << 52)
|
|
|
|
#define PKT_TX_SCTP_CKSUM (2ULL << 52)
|
|
|
|
#define PKT_TX_UDP_CKSUM (3ULL << 52)
|
|
|
|
#define PKT_TX_L4_MASK (3ULL << 52)
|
|
|
|
#define PKT_TX_IP_CKSUM (1ULL << 54)
|
|
|
|
#define PKT_TX_IPV4 (1ULL << 55)
|
|
|
|
#define PKT_TX_IPV6 (1ULL << 56)
|
|
|
|
#define PKT_TX_VLAN (1ULL << 57)
|
|
/* this old name is deprecated */
|
|
#define PKT_TX_VLAN_PKT PKT_TX_VLAN
|
|
|
|
#define PKT_TX_OUTER_IP_CKSUM (1ULL << 58)
|
|
|
|
#define PKT_TX_OUTER_IPV4 (1ULL << 59)
|
|
|
|
#define PKT_TX_OUTER_IPV6 (1ULL << 60)
|
|
|
|
enum {
|
|
RTE_MBUF_L2_LEN_BITS = 7,
|
|
RTE_MBUF_L3_LEN_BITS = 9,
|
|
RTE_MBUF_L4_LEN_BITS = 8,
|
|
RTE_MBUF_TSO_SEGSZ_BITS = 16,
|
|
RTE_MBUF_OUTL3_LEN_BITS = 9,
|
|
RTE_MBUF_OUTL2_LEN_BITS = 7
|
|
};
|
|
|
|
struct rte_mbuf {
|
|
void* buf_addr;
|
|
uint16_t buf_len;
|
|
|
|
struct rte_mbuf* next;
|
|
uint32_t pkt_len;
|
|
uint16_t vlan_tci;
|
|
uint16_t vlan_tci_outer;
|
|
uint16_t nb_segs;
|
|
uint16_t port;
|
|
uint64_t ol_flags;
|
|
uint32_t packet_type;
|
|
uint16_t data_len;
|
|
uint16_t data_off;
|
|
uint16_t refcnt;
|
|
|
|
/* fields to support TX offloads */
|
|
RTE_STD_C11
|
|
union {
|
|
uint64_t tx_offload;
|
|
__extension__ struct {
|
|
uint64_t l2_len : RTE_MBUF_L2_LEN_BITS;
|
|
uint64_t l3_len : RTE_MBUF_L3_LEN_BITS;
|
|
uint64_t l4_len : RTE_MBUF_L4_LEN_BITS;
|
|
uint64_t tso_segsz : RTE_MBUF_TSO_SEGSZ_BITS;
|
|
/*
|
|
* Fields for Tx offloading of tunnels.
|
|
* These are undefined for packets which don't request
|
|
* any tunnel offloads (outer IP or UDP checksum,
|
|
* tunnel TSO).
|
|
*
|
|
* PMDs should not use these fields unconditionally
|
|
* when calculating offsets.
|
|
*
|
|
* Applications are expected to set appropriate tunnel
|
|
* offload flags when they fill in these fields.
|
|
*/
|
|
uint64_t outer_l3_len : RTE_MBUF_OUTL3_LEN_BITS;
|
|
uint64_t outer_l2_len : RTE_MBUF_OUTL2_LEN_BITS;
|
|
/* uint64_t unused:RTE_MBUF_TXOFLD_UNUSED_BITS; */
|
|
};
|
|
};
|
|
};
|