Skip to content
Snippets Groups Projects
Commit 31dfe382 authored by Hauke Petersen's avatar Hauke Petersen
Browse files

net/gnrc/eth: enable filtering of L2 addresses

parent 145e4761
No related branches found
No related tags found
No related merge requests found
...@@ -144,7 +144,8 @@ static int _set(netdev_t *dev, netopt_t opt, void *value, size_t value_len) ...@@ -144,7 +144,8 @@ static int _set(netdev_t *dev, netopt_t opt, void *value, size_t value_len)
_set_promiscous(dev, ((bool *)value)[0]); _set_promiscous(dev, ((bool *)value)[0]);
break; break;
default: default:
return -ENOTSUP; res = netdev_eth_set(dev, opt, value, value_len);
break;
} }
return res; return res;
......
...@@ -87,6 +87,15 @@ int netdev_eth_get(netdev_t *dev, netopt_t opt, void *value, size_t max_len) ...@@ -87,6 +87,15 @@ int netdev_eth_get(netdev_t *dev, netopt_t opt, void *value, size_t max_len)
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->filter;
res = sizeof(l2filter_t **);
break;
}
#endif #endif
default: default:
{ {
...@@ -100,15 +109,27 @@ int netdev_eth_get(netdev_t *dev, netopt_t opt, void *value, size_t max_len) ...@@ -100,15 +109,27 @@ int netdev_eth_get(netdev_t *dev, netopt_t opt, void *value, size_t max_len)
int netdev_eth_set(netdev_t *dev, netopt_t opt, void *value, size_t value_len) int netdev_eth_set(netdev_t *dev, netopt_t opt, void *value, size_t value_len)
{ {
#ifndef MODULE_L2FILTER
(void)dev; (void)dev;
#endif
(void)value; (void)value;
(void)value_len; (void)value_len;
int res = 0; int res = 0;
switch (opt) { switch (opt) {
#ifdef MODULE_L2FILTER
case NETOPT_L2FILTER:
res = l2filter_add(dev->filter, value, value_len);
break;
case NETOPT_L2FILTER_RM:
res = l2filter_rm(dev->filter, value, value_len);
break;
#endif
default: default:
return -ENOTSUP; res = -ENOTSUP;
break;
} }
return res; return res;
......
...@@ -72,6 +72,13 @@ static gnrc_pktsnip_t *_recv(gnrc_netdev_t *gnrc_netdev) ...@@ -72,6 +72,13 @@ static gnrc_pktsnip_t *_recv(gnrc_netdev_t *gnrc_netdev)
ethernet_hdr_t *hdr = (ethernet_hdr_t *)eth_hdr->data; ethernet_hdr_t *hdr = (ethernet_hdr_t *)eth_hdr->data;
#ifdef MODULE_L2FILTER
if (!l2filter_pass(dev->filter, hdr->src, ETHERNET_ADDR_LEN)) {
DEBUG("gnrc_netdev_eth: incoming packet filtered by l2filter\n");
goto safe_out;
}
#endif
/* set payload type from ethertype */ /* set payload type from ethertype */
pkt->type = gnrc_nettype_from_ethertype(byteorder_ntohs(hdr->type)); pkt->type = gnrc_nettype_from_ethertype(byteorder_ntohs(hdr->type));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment