From a20538a08a664dddf00a325f406449d0098bd82e Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Fri, 1 Dec 2006 07:06:35 +0000 Subject: [PATCH] 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. --- sys/net/ethernet.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sys/net/ethernet.h b/sys/net/ethernet.h index 8d512c06e66e..1b89416b9b64 100644 --- a/sys/net/ethernet.h +++ b/sys/net/ethernet.h @@ -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? */