diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2017-09-20 08:41:23 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2017-09-20 15:51:32 +0000 |
commit | 649296428b669b67b55ef2e701830fb8e676c6b6 (patch) | |
tree | 6c0490cf020687146761913dda566f5ca3d6ad06 /src/vnet/lisp-cp/one_cli.c | |
parent | 561ae0a63516e092672532424904706f51eb2b84 (diff) |
LISP: add debug cli for neighbor discovery
Change-Id: Ib5d335d6130617d6135615c6c8fa8deaac971331
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src/vnet/lisp-cp/one_cli.c')
-rw-r--r-- | src/vnet/lisp-cp/one_cli.c | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/src/vnet/lisp-cp/one_cli.c b/src/vnet/lisp-cp/one_cli.c index 1e52c9afadd..700bfd66e7a 100644 --- a/src/vnet/lisp-cp/one_cli.c +++ b/src/vnet/lisp-cp/one_cli.c @@ -277,6 +277,70 @@ VLIB_CLI_COMMAND (one_eid_table_map_command) = { /* *INDENT-ON* */ static clib_error_t * +lisp_add_del_ndp_entry_command_fn (vlib_main_t * vm, + unformat_input_t * input, + vlib_cli_command_t * cmd) +{ + unformat_input_t _line_input, *line_input = &_line_input; + clib_error_t *error = NULL; + int rc = 0; + u8 hw_addr[6], bd = 0; + ip6_address_t ip6; + u32 hw_addr_set = 0, ip_set = 0, is_add = 1; + gid_address_t _g, *g = &_g; + + memset (&ip6, 0, sizeof (ip6)); + memset (hw_addr, 0, sizeof (hw_addr)); + memset (g, 0, sizeof (*g)); + + if (!unformat_user (input, unformat_line_input, line_input)) + return 0; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "mac %U", unformat_mac_address, hw_addr)) + hw_addr_set = 1; + else if (unformat (line_input, "ip %U", unformat_ip6_address, &ip6)) + ip_set = 1; + else if (unformat (line_input, "del")) + is_add = 0; + else if (unformat (line_input, "bd %d", &bd)) + ; + else + { + error = clib_error_return (0, "parse error"); + goto done; + } + } + + if (!ip_set || (!hw_addr_set && is_add)) + { + vlib_cli_output (vm, "expected IP and MAC addresses!"); + return 0; + } + + /* build GID address */ + ip_address_set (&gid_address_arp_ndp_ip (g), &ip6, IP6); + gid_address_ndp_bd (g) = bd; + gid_address_type (g) = GID_ADDR_NDP; + rc = vnet_lisp_add_del_l2_arp_ndp_entry (g, hw_addr, is_add); + if (rc) + clib_warning ("Failed to %s ndp entry!", is_add ? "add" : "delete"); + +done: + unformat_free (line_input); + return error; +} + +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (one_add_del_ndp_entry_command) = { + .path = "one ndp", + .short_help = "one ndp [del] bd <bd> mac <mac> ip <ipv6>", + .function = lisp_add_del_ndp_entry_command_fn, +}; +/* *INDENT-ON* */ + +static clib_error_t * lisp_add_del_l2_arp_entry_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -323,7 +387,7 @@ lisp_add_del_l2_arp_entry_command_fn (vlib_main_t * vm, gid_address_arp_ip4 (arp) = ip4; gid_address_arp_bd (arp) = bd; gid_address_type (arp) = GID_ADDR_ARP; - rc = vnet_lisp_add_del_l2_arp_entry (arp, hw_addr, is_add); + rc = vnet_lisp_add_del_l2_arp_ndp_entry (arp, hw_addr, is_add); if (rc) clib_warning ("Failed to %s l2 arp entry!", is_add ? "add" : "delete"); |