On Sat, Feb 13, 2021 at 07:28:05AM +0000, Roy Marples wrote: > Module Name: src > Committed By: roy > Date: Sat Feb 13 07:28:05 UTC 2021 > > Modified Files: > src/sys/net: if_ether.h if_ethersubr.c > > Log Message: > if_ether: Ensure that ether_header is aligned > > > To generate a diff of this commit: > cvs rdiff -u -r1.84 -r1.85 src/sys/net/if_ether.h > cvs rdiff -u -r1.289 -r1.290 src/sys/net/if_ethersubr.c
This appears to ensure the Ethernet header is naturally aligned on a 32-bit boundary. The 16-bit ether_type field is the only thing in ether_header that is wider than a uint8_t. Many drivers will place the start of the receive buffer at an ETHER_ALIGN (which is 2) offset to ensure the layer three header is 32-bit aligned after the 14-byte Ethernet header. Thus this will result in always calling m_copyup() in ether_input() on strict alignment platforms.