| 1 | #ifndef _NET_ETHERNET_H |
| 2 | #define _NET_ETHERNET_H |
| 3 | |
| 4 | #ifdef __cplusplus |
| 5 | extern "C" { |
| 6 | #endif |
| 7 | |
| 8 | #include <stdint.h> |
| 9 | #include <sys/types.h> |
| 10 | #include <netinet/if_ether.h> |
| 11 | |
| 12 | struct ether_addr { |
| 13 | 	uint8_t ether_addr_octet[ETH_ALEN]; |
| 14 | }; |
| 15 | |
| 16 | struct ether_header { |
| 17 | 	uint8_t ether_dhost[ETH_ALEN]; |
| 18 | 	uint8_t ether_shost[ETH_ALEN]; |
| 19 | 	uint16_t ether_type; |
| 20 | }; |
| 21 | |
| 22 | #define	ETHERTYPE_PUP		0x0200 |
| 23 | #define ETHERTYPE_SPRITE	0x0500 |
| 24 | #define	ETHERTYPE_IP		0x0800 |
| 25 | #define	ETHERTYPE_ARP		0x0806 |
| 26 | #define	ETHERTYPE_REVARP	0x8035 |
| 27 | #define ETHERTYPE_AT		0x809B |
| 28 | #define ETHERTYPE_AARP		0x80F3 |
| 29 | #define	ETHERTYPE_VLAN		0x8100 |
| 30 | #define ETHERTYPE_IPX		0x8137 |
| 31 | #define	ETHERTYPE_IPV6		0x86dd |
| 32 | #define ETHERTYPE_LOOPBACK	0x9000 |
| 33 | |
| 34 | |
| 35 | #define	ETHER_ADDR_LEN	ETH_ALEN |
| 36 | #define	ETHER_TYPE_LEN	2 |
| 37 | #define	ETHER_CRC_LEN	4 |
| 38 | #define	ETHER_HDR_LEN	ETH_HLEN |
| 39 | #define	ETHER_MIN_LEN	(ETH_ZLEN + ETHER_CRC_LEN) |
| 40 | #define	ETHER_MAX_LEN	(ETH_FRAME_LEN + ETHER_CRC_LEN) |
| 41 | |
| 42 | #define	ETHER_IS_VALID_LEN(foo)	\ |
| 43 | 	((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) |
| 44 | |
| 45 | #define	ETHERTYPE_TRAIL		0x1000 |
| 46 | #define	ETHERTYPE_NTRAILER	16 |
| 47 | |
| 48 | #define	ETHERMTU	ETH_DATA_LEN |
| 49 | #define	ETHERMIN	(ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) |
| 50 | |
| 51 | #ifdef __cplusplus |
| 52 | } |
| 53 | #endif |
| 54 | |
| 55 | #endif |