55 #define ETHER_ADDR_LEN 6
56 #define ETHER_TYPE_LEN 2
57 #define ETHER_CRC_LEN 4
58 #define ETHER_HDR_LEN \
59 (ETHER_ADDR_LEN * 2 + ETHER_TYPE_LEN)
60 #define ETHER_MIN_LEN 64
61 #define ETHER_MAX_LEN 1518
63 (ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
65 #define ETHER_MAX_VLAN_FRAME_LEN \
68 #define ETHER_MAX_JUMBO_FRAME_LEN \
71 #define ETHER_MAX_VLAN_ID 4095
73 #define ETHER_MIN_MTU 68
88 } __attribute__((__packed__));
90 #define ETHER_LOCAL_ADMIN_ADDR 0x02
91 #define ETHER_GROUP_ADDR 0x01
107 static inline int is_same_ether_addr(const struct ether_addr *ea1,
112 if (ea1->addr_bytes[i] != ea2->addr_bytes[i])
178 const unaligned_uint16_t *ea_words = (
const unaligned_uint16_t *)ea;
180 return (ea_words[0] == 0xFFFF && ea_words[1] == 0xFFFF &&
181 ea_words[2] == 0xFFFF);
239 uint8_t *p = (uint8_t *)&rand;
257 #ifdef __INTEL_COMPILER
258 uint16_t *from_words = (uint16_t *)(ea_from->
addr_bytes);
259 uint16_t *to_words = (uint16_t *)(ea_to->
addr_bytes);
261 to_words[0] = from_words[0];
262 to_words[1] = from_words[1];
263 to_words[2] = from_words[2];
272 #define ETHER_ADDR_FMT_SIZE 18
287 snprintf(buf, size,
"%02X:%02X:%02X:%02X:%02X:%02X",
304 } __attribute__((__packed__));
314 } __attribute__((__packed__));
324 } __attribute__((__packed__));
327 #define ETHER_TYPE_IPv4 0x0800
328 #define ETHER_TYPE_IPv6 0x86DD
329 #define ETHER_TYPE_ARP 0x0806
330 #define ETHER_TYPE_RARP 0x8035
331 #define ETHER_TYPE_VLAN 0x8100
332 #define ETHER_TYPE_QINQ 0x88A8
333 #define ETHER_TYPE_1588 0x88F7
334 #define ETHER_TYPE_SLOW 0x8809
335 #define ETHER_TYPE_TEB 0x6558
336 #define ETHER_TYPE_LLDP 0x88CC
338 #define ETHER_VXLAN_HLEN (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr))
static void rte_pktmbuf_free(struct rte_mbuf *m)
static struct rte_mbuf * rte_pktmbuf_clone(struct rte_mbuf *md, struct rte_mempool *mp)
static uint64_t rte_rand(void)
static int is_local_admin_ether_addr(const struct ether_addr *ea)
static void ether_format_addr(char *buf, uint16_t size, const struct ether_addr *eth_addr)
static int is_universal_ether_addr(const struct ether_addr *ea)
static int is_multicast_ether_addr(const struct ether_addr *ea)
static int rte_vlan_strip(struct rte_mbuf *m)
static rte_be16_t rte_cpu_to_be_16(uint16_t x)
uint8_t addr_bytes[ETHER_ADDR_LEN]
static uint16_t rte_mbuf_refcnt_read(const struct rte_mbuf *m)
static char * rte_pktmbuf_adj(struct rte_mbuf *m, uint16_t len)
static int is_zero_ether_addr(const struct ether_addr *ea)
static int rte_vlan_insert(struct rte_mbuf **m)
#define rte_pktmbuf_mtod(m, t)
static int is_valid_assigned_ether_addr(const struct ether_addr *ea)
#define ETHER_LOCAL_ADMIN_ADDR
struct rte_mempool * pool
static char * rte_pktmbuf_prepend(struct rte_mbuf *m, uint16_t len)
static int is_broadcast_ether_addr(const struct ether_addr *ea)
static void * rte_memcpy(void *dst, const void *src, size_t n)
#define PKT_RX_VLAN_STRIPPED
static uint16_t rte_be_to_cpu_16(rte_be16_t x)
static void ether_addr_copy(const struct ether_addr *ea_from, struct ether_addr *ea_to)
static int is_unicast_ether_addr(const struct ether_addr *ea)
static void eth_random_addr(uint8_t *addr)