mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-16 18:13:49 +01:00
net/gnrc/802154: enable filtering of L2 addresses
This commit is contained in:
parent
e8b0e0b9e7
commit
145e4761c1
@ -125,6 +125,13 @@ int netdev_ieee802154_get(netdev_ieee802154_t *dev, netopt_t opt, void *value,
|
|||||||
*((netstats_t **)value) = &dev->netdev.stats;
|
*((netstats_t **)value) = &dev->netdev.stats;
|
||||||
res = sizeof(uintptr_t);
|
res = sizeof(uintptr_t);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef MODULE_L2FILTER
|
||||||
|
case NETOPT_L2FILTER:
|
||||||
|
assert(max_len >= sizeof(l2filter_t **));
|
||||||
|
*((l2filter_t **)value) = dev->netdev.filter;
|
||||||
|
res = sizeof(l2filter_t **);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -207,6 +214,14 @@ int netdev_ieee802154_set(netdev_ieee802154_t *dev, netopt_t opt, void *value,
|
|||||||
dev->proto = *((gnrc_nettype_t *)value);
|
dev->proto = *((gnrc_nettype_t *)value);
|
||||||
res = sizeof(gnrc_nettype_t);
|
res = sizeof(gnrc_nettype_t);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef MODULE_L2FILTER
|
||||||
|
case NETOPT_L2FILTER:
|
||||||
|
res = l2filter_add(dev->netdev.filter, value, len);
|
||||||
|
break;
|
||||||
|
case NETOPT_L2FILTER_RM:
|
||||||
|
res = l2filter_rm(dev->netdev.filter, value, len);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "od.h"
|
#include "od.h"
|
||||||
|
#include "net/l2filter.h"
|
||||||
#include "net/gnrc.h"
|
#include "net/gnrc.h"
|
||||||
#include "net/ieee802154.h"
|
#include "net/ieee802154.h"
|
||||||
|
|
||||||
@ -112,7 +113,19 @@ static gnrc_pktsnip_t *_recv(gnrc_netdev_t *gnrc_netdev)
|
|||||||
gnrc_pktbuf_release(pkt);
|
gnrc_pktbuf_release(pkt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr = netif_hdr->data;
|
hdr = netif_hdr->data;
|
||||||
|
|
||||||
|
#ifdef MODULE_L2FILTER
|
||||||
|
if (!l2filter_pass(netdev->filter, gnrc_netif_hdr_get_src_addr(hdr),
|
||||||
|
hdr->src_l2addr_len)) {
|
||||||
|
gnrc_pktbuf_release(pkt);
|
||||||
|
gnrc_pktbuf_release(netif_hdr);
|
||||||
|
DEBUG("_recv_ieee802154: packet dropped by l2filter\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
hdr->lqi = rx_info.lqi;
|
hdr->lqi = rx_info.lqi;
|
||||||
hdr->rssi = rx_info.rssi;
|
hdr->rssi = rx_info.rssi;
|
||||||
hdr->if_pid = thread_getpid();
|
hdr->if_pid = thread_getpid();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user