typedef struct { unsigned short __required_align; unsigned char ethDstMac[]; unsigned char ethSrcMac[]; unsigned short ethType; } CTL_ETH_HEADER_t;
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 ðDstMac[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.