1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-16 18:13:49 +01:00

cpu/nrf52/radio/nrf802154: fix beacon frame acceptance in _l2filter

This commit is contained in:
lulu254b 2024-11-13 11:15:10 +01:00 committed by Lukas-Luger
parent bef67c8a51
commit a5823397bc

View File

@ -119,16 +119,24 @@ static void _power_off(void)
static bool _l2filter(uint8_t *mhr) static bool _l2filter(uint8_t *mhr)
{ {
uint8_t dst_addr[IEEE802154_LONG_ADDRESS_LEN]; uint8_t dst_addr[IEEE802154_LONG_ADDRESS_LEN];
uint8_t src_addr[IEEE802154_LONG_ADDRESS_LEN];
le_uint16_t dst_pan; le_uint16_t dst_pan;
le_uint16_t src_pan;
uint8_t pan_bcast[] = IEEE802154_PANID_BCAST; uint8_t pan_bcast[] = IEEE802154_PANID_BCAST;
int addr_len = ieee802154_get_dst(mhr, dst_addr, &dst_pan); int dst_addr_len = ieee802154_get_dst(mhr, dst_addr, &dst_pan);
int src_addr_len = ieee802154_get_src(mhr, src_addr, &src_pan);
if ((mhr[0] & IEEE802154_FCF_TYPE_MASK) == IEEE802154_FCF_TYPE_BEACON) { if ((mhr[0] & IEEE802154_FCF_TYPE_MASK) == IEEE802154_FCF_TYPE_BEACON) {
if ((memcmp(&nrf802154_pan_id, pan_bcast, 2) == 0)) { if (src_addr_len == IEEE802154_SHORT_ADDRESS_LEN ||
src_addr_len == IEEE802154_LONG_ADDRESS_LEN){
if ((memcmp(&nrf802154_pan_id, src_pan.u8, 2) == 0) ||
(memcmp(&nrf802154_pan_id, pan_bcast, 2) == 0)) {
return true; return true;
} }
} }
}
/* filter PAN ID */ /* filter PAN ID */
/* Will only work on little endian platform (all?) */ /* Will only work on little endian platform (all?) */
@ -138,11 +146,11 @@ static bool _l2filter(uint8_t *mhr)
} }
/* check destination address */ /* check destination address */
if (((addr_len == IEEE802154_SHORT_ADDRESS_LEN) && if (((dst_addr_len == IEEE802154_SHORT_ADDRESS_LEN) &&
(memcmp(nrf802154_short_addr, dst_addr, addr_len) == 0 || (memcmp(nrf802154_short_addr, dst_addr, dst_addr_len) == 0 ||
memcmp(ieee802154_addr_bcast, dst_addr, addr_len) == 0)) || memcmp(ieee802154_addr_bcast, dst_addr, dst_addr_len) == 0)) ||
((addr_len == IEEE802154_LONG_ADDRESS_LEN) && ((dst_addr_len == IEEE802154_LONG_ADDRESS_LEN) &&
(memcmp(nrf802154_long_addr, dst_addr, addr_len) == 0))) { (memcmp(nrf802154_long_addr, dst_addr, dst_addr_len) == 0))) {
return true; return true;
} }