-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
shell: commands: add nib shell command
- Loading branch information
Showing
3 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* Copyright (C) 2017 Freie Universität Berlin | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
|
||
/** | ||
* @{ | ||
* | ||
* @file | ||
* @author Martine Lenders <[email protected]> | ||
*/ | ||
|
||
#include "net/gnrc/ipv6/nib.h" | ||
#include "net/gnrc/netif.h" | ||
#include "net/ipv6/addr.h" | ||
|
||
static void _usage(char **argv); | ||
static int _nib_neigh(int argc, char **argv); | ||
|
||
int _gnrc_ipv6_nib(int argc, char **argv) | ||
{ | ||
int res = 1; | ||
if ((argc < 2) || (strcmp(argv[1], "help") == 0)) { | ||
_usage(argv); | ||
res = 0; | ||
} | ||
else if (strcmp(argv[1], "neigh") == 0) { | ||
res = _nib_neigh(argc, argv); | ||
} | ||
else { | ||
_usage(argv); | ||
} | ||
return res; | ||
} | ||
|
||
static void _usage(char **argv) | ||
{ | ||
printf("usage: %s {neigh|help} ...\n", argv[0]); | ||
} | ||
|
||
static void _usage_nib_neigh(char **argv) | ||
{ | ||
printf("usage: %s %s [show|add|del|help]\n", argv[0], argv[1]); | ||
printf(" %s %s add <iface> <ipv6 addr> [<l2 addr>]\n", argv[0], argv[1]); | ||
printf(" %s %s del <ipv6 addr>\n", argv[0], argv[1]); | ||
printf(" %s %s show <ipv6 addr>\n", argv[0], argv[1]); | ||
} | ||
|
||
static int _nib_neigh(int argc, char **argv) | ||
{ | ||
if ((argc == 2) || (strcmp(argv[2], "show") == 0)) { | ||
gnrc_ipv6_nib_nc_t entry; | ||
void *state = NULL; | ||
unsigned iface = 0U; | ||
|
||
if (argc > 3) { | ||
iface = atoi(argv[3]); | ||
} | ||
while (gnrc_ipv6_nib_nc_iter(iface, &state, &entry)) { | ||
gnrc_ipv6_nib_nc_print(&entry); | ||
} | ||
} | ||
else if ((argc > 2) && (strcmp(argv[2], "help") == 0)) { | ||
_usage_nib_neigh(argv); | ||
} | ||
else if ((argc > 4) && (strcmp(argv[2], "add") == 0)) { | ||
ipv6_addr_t ipv6_addr; | ||
uint8_t l2addr[GNRC_IPV6_NIB_L2ADDR_MAX_LEN]; | ||
size_t l2addr_len; | ||
unsigned iface = atoi(argv[3]); | ||
|
||
if (ipv6_addr_from_str(&ipv6_addr, argv[4]) == NULL) { | ||
_usage_nib_neigh(argv); | ||
return 1; | ||
} | ||
if ((argc > 5) && /* TODO also check if interface supports link-layers or not */ | ||
(l2addr_len = gnrc_netif_addr_from_str(l2addr, sizeof(l2addr), | ||
argv[5])) == 0) { | ||
_usage_nib_neigh(argv); | ||
} | ||
gnrc_ipv6_nib_nc_set(&ipv6_addr, iface, l2addr, l2addr_len); | ||
} | ||
else if ((argc > 3) && (strcmp(argv[2], "del") == 0)) { | ||
ipv6_addr_t ipv6_addr; | ||
|
||
if (ipv6_addr_from_str(&ipv6_addr, argv[4]) == NULL) { | ||
_usage_nib_neigh(argv); | ||
return 1; | ||
} | ||
gnrc_ipv6_nib_nc_del(&ipv6_addr); | ||
} | ||
else { | ||
_usage_nib_neigh(argv); | ||
return 1; | ||
} | ||
return 0; | ||
} | ||
|
||
/** @} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters