Synopsis
typedef struct {
  unsigned short __required_align;
  unsigned char ethDstMac[];
  unsigned char ethSrcMac[];
  unsigned short ethType;
} CTL_ETH_HEADER_t;
Description

The Ethernet header is 14 bytes long. In order to make the subsequent IP and TCP/UDP headers align on a 32-bit word, an extra short is added to the start of the structure. The 1536 byte frame buffer passed back and forth with the hardware actually begins at &ethDstMac[0].

Some MAC layers have a short word length field preceding the Ethernet header when the data is sent/received to the hardware. The __required_align short mentioned in the preceding paragraph is used for that purpose. An example of this is the Ethernet FIFO on the TI LM3S Stellaris devices.