mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-16 10:03:50 +01:00
cpu/nrf52/radio/nrf802154: fix beacon frame acceptance in _l2filter
This commit is contained in:
parent
bef67c8a51
commit
a5823397bc
@ -119,14 +119,22 @@ 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 ||
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* filter PAN ID */
|
/* filter PAN ID */
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user