zebra: add srv6's no commands

CURRENT_CONFIGURATION:
configure terminal
 segment-routing
  srv6
   locators
    locator loc1
    locator loc2
    locator loc3

CMD1: delete single locator
configure terminal
 segment-routing
  srv6
   locators
    no locator loc1

CMD2: delete srv6 whole config (== delete all locators)
configure terminal
 segment-routing
  no srv6

Signed-off-by: Hiroki Shirokura <slank.dev@gmail.com>
This commit is contained in:
Hiroki Shirokura 2021-09-05 10:07:56 +00:00
parent f6e52a81dc
commit 0a735cd523

View File

@ -197,6 +197,21 @@ DEFUN_NOSH (srv6,
return CMD_SUCCESS;
}
DEFUN (no_srv6,
no_srv6_cmd,
"no srv6",
NO_STR
"Segment Routing SRv6\n")
{
struct zebra_srv6 *srv6 = zebra_srv6_get_default();
struct srv6_locator *locator;
struct listnode *node, *nnode;
for (ALL_LIST_ELEMENTS(srv6->locators, node, nnode, locator))
zebra_srv6_locator_delete(locator);
return CMD_SUCCESS;
}
DEFUN_NOSH (srv6_locators,
srv6_locators_cmd,
"locators",
@ -233,6 +248,23 @@ DEFUN_NOSH (srv6_locator,
return CMD_SUCCESS;
}
DEFUN (no_srv6_locator,
no_srv6_locator_cmd,
"no locator WORD",
NO_STR
"Segment Routing SRv6 locator\n"
"Specify locator-name\n")
{
struct srv6_locator *locator = zebra_srv6_locator_lookup(argv[2]->arg);
if (!locator) {
vty_out(vty, "%% Can't find SRv6 locator\n");
return CMD_WARNING_CONFIG_FAILED;
}
zebra_srv6_locator_delete(locator);
return CMD_SUCCESS;
}
DEFPY (locator_prefix,
locator_prefix_cmd,
"prefix X:X::X:X/M$prefix [func-bits (16-64)$func_bit_len]",
@ -348,8 +380,10 @@ void zebra_srv6_vty_init(void)
/* Command for change node */
install_element(CONFIG_NODE, &segment_routing_cmd);
install_element(SEGMENT_ROUTING_NODE, &srv6_cmd);
install_element(SEGMENT_ROUTING_NODE, &no_srv6_cmd);
install_element(SRV6_NODE, &srv6_locators_cmd);
install_element(SRV6_LOCS_NODE, &srv6_locator_cmd);
install_element(SRV6_LOCS_NODE, &no_srv6_locator_cmd);
/* Command for configuration */
install_element(SRV6_LOC_NODE, &locator_prefix_cmd);