diff --git a/core/net/mac/frame802154.c b/core/net/mac/frame802154.c index 5e216260b..3cd85d20b 100644 --- a/core/net/mac/frame802154.c +++ b/core/net/mac/frame802154.c @@ -66,6 +66,7 @@ #include "sys/cc.h" #include "net/mac/frame802154.h" #include "net/llsec/llsec802154.h" +#include "net/linkaddr.h" #include /** diff --git a/core/net/mac/frame802154.h b/core/net/mac/frame802154.h index e6cb80c8b..4b3a81049 100644 --- a/core/net/mac/frame802154.h +++ b/core/net/mac/frame802154.h @@ -67,7 +67,6 @@ #define FRAME_802154_H #include "contiki-conf.h" -#include "net/linkaddr.h" #ifdef IEEE802154_CONF_PANID #define IEEE802154_PANID IEEE802154_CONF_PANID @@ -174,12 +173,15 @@ typedef struct { * specification for details. */ typedef struct { + /* The fields dest_addr and src_addr must come first to ensure they are aligned to the + * CPU word size. Needed as they are accessed directly as linkaddr_t*. Note we cannot use + * the type linkaddr_t directly here, as we always need 8 bytes, not LINKADDR_SIZE bytes. */ + uint8_t dest_addr[8]; /**< Destination address */ + uint8_t src_addr[8]; /**< Source address */ frame802154_fcf_t fcf; /**< Frame control field */ uint8_t seq; /**< Sequence number */ uint16_t dest_pid; /**< Destination PAN ID */ - uint8_t dest_addr[8]; /**< Destination address */ uint16_t src_pid; /**< Source PAN ID */ - uint8_t src_addr[8]; /**< Source address */ frame802154_aux_hdr_t aux_hdr; /**< Aux security header */ uint8_t *payload; /**< Pointer to 802.15.4 payload */ int payload_len; /**< Length of payload field */ diff --git a/platform/micaz/init-net.c b/platform/micaz/init-net.c index c0366c833..1ccf50b57 100644 --- a/platform/micaz/init-net.c +++ b/platform/micaz/init-net.c @@ -49,6 +49,7 @@ #include "dev/leds.h" #include "net/netstack.h" #include "net/mac/frame802154.h" +#include "net/linkaddr.h" #include "dev/ds2401.h" #include "sys/node-id.h"