176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef	_GPXE_IF_ETHER_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	_GPXE_IF_ETHER_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( GPL2_OR_LATER );
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h>
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_ALEN		6	/* Size of Ethernet address */
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_HLEN		14	/* Size of ethernet header */
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	ETH_ZLEN		60	/* Minimum packet */
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	ETH_FRAME_LEN		1514	/* Maximum packet */
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_DATA_ALIGN		2	/* Amount needed to align the data after an ethernet header */
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef	ETH_MAX_MTU
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	ETH_MAX_MTU		(ETH_FRAME_LEN-ETH_HLEN)
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_RAW	0x0000	/* Raw packet */
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_IP	0x0800	/* Internet Protocl Packet */
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_ARP	0x0806	/* Address Resolution Protocol */
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_RARP	0x8035	/* Reverse Address resolution Protocol */
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_IPV6	0x86DD	/* IPv6 over blueblook */
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_SLOW	0x8809	/* Ethernet slow protocols */
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_EAPOL	0x888E	/* 802.1X EAP over LANs */
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETH_P_AOE	0x88A2	/* ATA over Ethernet */
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** An Ethernet link-layer header */
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ethhdr {
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Destination MAC address */
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        uint8_t h_dest[ETH_ALEN];
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Source MAC address */
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        uint8_t h_source[ETH_ALEN];
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Protocol ID */
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        uint16_t h_protocol;
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed));
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif	/* _GPXE_IF_ETHER_H */
37