From: Sven Eckelmann sven@narfation.org Date: Sun, 04 Nov 2012 11:29:29 +0100
Now also assume following really unusual situation: We get our data from a ethernet driver and the skb stores the ethernet header. The start of the ethernet header is perfectly aligned (4 or even 16 byte boundary aligned). The the header is 14/18 byte long (6 byte src, 6 byte dst, 2 byte ethertype and maybe 4 byte vlan). Now the payload starts only on a 2 byte boundary -> it is never 4 byte boundary aligned. A 32 bit read now causes different variations of problems (reminder: bus error).
Every ethernet driver must provide the networking stack with a modulo 2 aligned ethernet header, which makes sure that everything after the ethernet header is at least 4 byte aligned.