diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c index 19c41bd134..fbd06d80d9 100644 --- a/drivers/at86rf2xx/at86rf2xx.c +++ b/drivers/at86rf2xx/at86rf2xx.c @@ -100,7 +100,6 @@ void at86rf2xx_reset(at86rf2xx_t *dev) /* set default TX power */ at86rf2xx_set_txpower(dev, AT86RF2XX_DEFAULT_TXPOWER); /* set default options */ - at86rf2xx_set_option(dev, NETDEV2_IEEE802154_PAN_COMP, true); at86rf2xx_set_option(dev, AT86RF2XX_OPT_AUTOACK, true); at86rf2xx_set_option(dev, AT86RF2XX_OPT_CSMA, true); at86rf2xx_set_option(dev, AT86RF2XX_OPT_TELL_RX_START, false); diff --git a/drivers/include/net/netdev2/ieee802154.h b/drivers/include/net/netdev2/ieee802154.h index 26c861af5e..75f7b36740 100644 --- a/drivers/include/net/netdev2/ieee802154.h +++ b/drivers/include/net/netdev2/ieee802154.h @@ -38,7 +38,7 @@ extern "C" { * @{ */ -#define NETDEV2_IEEE802154_SEND_MASK (0x0068) /**< flags to take for send packets */ +#define NETDEV2_IEEE802154_SEND_MASK (0x0028) /**< flags to take for send packets */ #define NETDEV2_IEEE802154_RESV1 (0x0001) /**< reserved flag */ #define NETDEV2_IEEE802154_RAW (0x0002) /**< pass raw frame to upper layer */ /** @@ -52,7 +52,6 @@ extern "C" { * @brief request ACK from receiver */ #define NETDEV2_IEEE802154_ACK_REQ (0x0020) -#define NETDEV2_IEEE802154_PAN_COMP (0x0040) /**< compress source PAN ID */ #define NETDEV2_IEEE802154_RESV3 (0x0080) /**< reserved flag */ /** * @} diff --git a/sys/include/net/ieee802154.h b/sys/include/net/ieee802154.h index 7989e3597f..14fb31663f 100644 --- a/sys/include/net/ieee802154.h +++ b/sys/include/net/ieee802154.h @@ -119,9 +119,8 @@ extern "C" { * first byte of the IEEE 802.15.4 FCF. This means that * it encompasses the type values, * @ref IEEE802154_FCF_SECURITY_EN, - * @ref IEEE802154_FCF_FRAME_PEND, - * @ref IEEE802154_FCF_ACK_REQ, and - * @ref IEEE802154_FCF_PAN_COMP. + * @ref IEEE802154_FCF_FRAME_PEND, and + * @ref IEEE802154_FCF_ACK_REQ. * Additionally the @ref IEEE802154_BCAST flag can be set * do ignore @p dst and @p dst_len and just set `ff:ff` * (broadcast) as destination address diff --git a/sys/net/link_layer/ieee802154/ieee802154.c b/sys/net/link_layer/ieee802154/ieee802154.c index 489d8f6a80..6bc2bd5c44 100644 --- a/sys/net/link_layer/ieee802154/ieee802154.c +++ b/sys/net/link_layer/ieee802154/ieee802154.c @@ -82,10 +82,15 @@ size_t ieee802154_set_frame_hdr(uint8_t *buf, const uint8_t *src, size_t src_len } /* fill in source PAN ID (if applicable) */ - if (!(flags & IEEE802154_FCF_PAN_COMP) && (src_len != 0)) { - /* (little endian) */ - buf[pos++] = src_pan.u8[0]; - buf[pos++] = src_pan.u8[1]; + if (src_len != 0) { + if ((dst_len != 0) && (src_pan.u16 == dst_pan.u16)) { + buf[0] |= IEEE802154_FCF_PAN_COMP; + } + else { + /* (little endian) */ + buf[pos++] = src_pan.u8[0]; + buf[pos++] = src_pan.u8[1]; + } } /* fill in source address */