From 8156765abe5d5d5cdaffa0503799b117c32ac130 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Mon, 20 Jun 2022 20:31:18 +0300 Subject: [PATCH] bgpd: Add `no rpki` command To delete the whole RPKI section. Signed-off-by: Donatas Abraitis --- bgpd/bgp_rpki.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c index 1c7dc7cb0ae0..90f48a5be0dc 100644 --- a/bgpd/bgp_rpki.c +++ b/bgpd/bgp_rpki.c @@ -120,6 +120,7 @@ static int add_ssh_cache(const char *host, const unsigned int port, #endif static struct rtr_socket *create_rtr_socket(struct tr_socket *tr_socket); static struct cache *find_cache(const uint8_t preference); +static void rpki_delete_all_cache_nodes(void); static int add_tcp_cache(const char *host, const char *port, const uint8_t preference, const char *bindaddr); static void print_record(const struct pfx_record *record, struct vty *vty, @@ -276,6 +277,17 @@ static struct cache *find_cache(const uint8_t preference) return NULL; } +static void rpki_delete_all_cache_nodes(void) +{ + struct listnode *cache_node, *cache_next; + struct cache *cache; + + for (ALL_LIST_ELEMENTS(cache_list, cache_node, cache_next, cache)) { + rtr_mgr_remove_group(rtr_config, cache->preference); + listnode_delete(cache_list, cache); + } +} + static void print_record(const struct pfx_record *record, struct vty *vty, json_object *json) { @@ -1055,6 +1067,17 @@ DEFUN_NOSH (rpki, return CMD_SUCCESS; } +DEFPY (no_rpki, + no_rpki_cmd, + "no rpki", + NO_STR + "Enable rpki and enter rpki configuration mode\n") +{ + rpki_delete_all_cache_nodes(); + stop(); + return CMD_SUCCESS; +} + DEFUN (bgp_rpki_start, bgp_rpki_start_cmd, "rpki start", @@ -1662,6 +1685,8 @@ static void install_cli_commands(void) install_default(RPKI_NODE); install_element(CONFIG_NODE, &rpki_cmd); install_element(ENABLE_NODE, &rpki_cmd); + install_element(CONFIG_NODE, &no_rpki_cmd); + install_element(ENABLE_NODE, &bgp_rpki_start_cmd); install_element(ENABLE_NODE, &bgp_rpki_stop_cmd);