sys/shell/netif: enable setting of L2 addr filters
This commit is contained in:
parent
31dfe382a3
commit
359a89f28b
@ -27,6 +27,7 @@
|
||||
|
||||
#include "thread.h"
|
||||
#include "net/netstats.h"
|
||||
#include "net/l2filter.h"
|
||||
#include "net/ipv6/addr.h"
|
||||
#include "net/gnrc/ipv6/netif.h"
|
||||
#include "net/gnrc/netif.h"
|
||||
@ -499,6 +500,30 @@ static void _netif_list(kernel_pid_t dev)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_L2FILTER
|
||||
l2filter_t *filter = NULL;
|
||||
res = gnrc_netapi_get(dev, NETOPT_L2FILTER, 0, &filter, sizeof(filter));
|
||||
if (res > 0) {
|
||||
#ifdef MODULE_L2FILTER_WHITELIST
|
||||
puts("\n White-listed link layer addresses:");
|
||||
#else
|
||||
puts("\n Black-listed link layer addresses:");
|
||||
#endif
|
||||
int count = 0;
|
||||
for (unsigned i = 0; i < L2FILTER_LISTSIZE; i++) {
|
||||
if (filter[i].addr_len > 0) {
|
||||
char hwaddr_str[filter[i].addr_len * 3];
|
||||
gnrc_netif_addr_to_str(hwaddr_str, sizeof(hwaddr_str),
|
||||
filter[i].addr, filter[i].addr_len);
|
||||
printf(" %2i: %s\n", count++, hwaddr_str);
|
||||
}
|
||||
}
|
||||
if (count == 0) {
|
||||
puts(" --- none ---");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_NETSTATS_L2
|
||||
puts("");
|
||||
_netif_stats(dev, NETSTATS_LAYER2, false);
|
||||
@ -771,6 +796,40 @@ static int _netif_set_encrypt_key(kernel_pid_t dev, netopt_t opt, char *key_str)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULE_L2FILTER
|
||||
static int _netif_addrm_l2filter(kernel_pid_t dev, char *val, bool add)
|
||||
{
|
||||
uint8_t addr[MAX_ADDR_LEN];
|
||||
size_t addr_len = gnrc_netif_addr_from_str(addr, sizeof(addr), val);
|
||||
|
||||
if ((addr_len == 0) || (addr_len > L2FILTER_ADDR_MAXLEN)) {
|
||||
puts("error: given address is invalid");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (add) {
|
||||
if (gnrc_netapi_set(dev, NETOPT_L2FILTER, 0, addr, addr_len) < 0) {
|
||||
puts("unable to add link layer address to filter");
|
||||
return 1;
|
||||
}
|
||||
puts("successfully added address to filter");
|
||||
}
|
||||
else {
|
||||
if (gnrc_netapi_set(dev, NETOPT_L2FILTER_RM, 0, addr, addr_len) < 0) {
|
||||
puts("unable to remove link layer address from filter");
|
||||
return 1;
|
||||
}
|
||||
puts("successfully removed address to filter");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void _l2filter_usage(const char *cmd)
|
||||
{
|
||||
printf("usage: %s <if_id> l2filter {add|del} <addr>\n", cmd);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int _netif_set(char *cmd_name, kernel_pid_t dev, char *key, char *value)
|
||||
{
|
||||
if ((strcmp("addr", key) == 0) || (strcmp("addr_short", key) == 0)) {
|
||||
@ -1153,6 +1212,23 @@ int _netif_config(int argc, char **argv)
|
||||
|
||||
return _netif_mtu((kernel_pid_t)dev, argv[3]);
|
||||
}
|
||||
#ifdef MODULE_L2FILTER
|
||||
else if (strcmp(argv[2], "l2filter") == 0) {
|
||||
if (argc < 5) {
|
||||
_l2filter_usage(argv[2]);
|
||||
}
|
||||
else if (strcmp(argv[3], "add") == 0) {
|
||||
return _netif_addrm_l2filter(dev, argv[4], true);
|
||||
}
|
||||
else if (strcmp(argv[3], "del") == 0) {
|
||||
return _netif_addrm_l2filter(dev, argv[4], false);
|
||||
}
|
||||
else {
|
||||
_l2filter_usage(argv[2]);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef MODULE_NETSTATS
|
||||
else if (strcmp(argv[2], "stats") == 0) {
|
||||
uint8_t module;
|
||||
@ -1230,6 +1306,9 @@ int _netif_config(int argc, char **argv)
|
||||
_flag_usage(argv[0]);
|
||||
_add_usage(argv[0]);
|
||||
_del_usage(argv[0]);
|
||||
#ifdef MODULE_L2FILTER
|
||||
_l2filter_usage(argv[0]);
|
||||
#endif
|
||||
#ifdef MODULE_NETSTATS
|
||||
_stats_usage(argv[0]);
|
||||
#endif
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user