Use CTASSERT to make sure:

sizeof ether_header is 2 * ETHER_ADDR_LEN + 2 (14) bytes long
	sizeof ether_addr is ETHER_ADDR_LEN bytes long

On arm, this shows that struct ether_addr needs to be __packed.

The first condition muts be true for the bridging code to not dump core.
The second one appears to be implicitly relied upon by wi (but many
of the rids it sends down likely need __packed too to be safe) and
maybe others.  It appears to not hurt anything.
This commit is contained in:
Warner Losh 2006-12-01 07:06:35 +00:00
parent d2d6d8d537
commit a20538a08a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=164785

View File

@ -68,7 +68,12 @@ struct ether_header {
*/
struct ether_addr {
u_char octet[ETHER_ADDR_LEN];
};
} __packed;
#ifdef CTASSERT
CTASSERT(sizeof (struct ether_header) == ETHER_ADDR_LEN * 2 + 2);
CTASSERT(sizeof (struct ether_addr) == ETHER_ADDR_LEN);
#endif
#define ETHER_IS_MULTICAST(addr) (*(addr) & 0x01) /* is address mcast/bcast? */