]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: add srv6's no commands
authorHiroki Shirokura <slank.dev@gmail.com>
Sun, 5 Sep 2021 10:07:56 +0000 (10:07 +0000)
committerHiroki Shirokura <slank.dev@gmail.com>
Tue, 7 Sep 2021 12:54:39 +0000 (12:54 +0000)
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>
zebra/zebra_srv6_vty.c

index d2b91b6c07e1e71d373f004c217db77ee445b78b..cb1e6c42283ad41330f986ba97e1c4cea8af1931 100644 (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);