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_1588 0x88F7
333 #define ETHER_TYPE_SLOW 0x8809
334 #define ETHER_TYPE_TEB 0x6558
336 #define ETHER_VXLAN_HLEN (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr))