summaryrefslogtreecommitdiff
path: root/vtysh/vtysh_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'vtysh/vtysh_config.c')
-rw-r--r--vtysh/vtysh_config.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c
index 2949faa427..c207e4d427 100644
--- a/vtysh/vtysh_config.c
+++ b/vtysh/vtysh_config.c
@@ -315,11 +315,20 @@ void vtysh_config_parse_line(void *arg, const char *line)
} else if (!strncmp(line, " ip mroute",
strlen(" ip mroute"))) {
config_add_line_uniq_end(config->line, line);
+ } else if ((strncmp(line, " rpki", strlen(" rpki")) ==
+ 0) &&
+ config->index == VRF_NODE) {
+ config_add_line(config->line, line);
+ config->index = RPKI_VRF_NODE;
} else if (config->index == RMAP_NODE ||
config->index == INTERFACE_NODE ||
config->index == VTY_NODE)
config_add_line_uniq(config->line, line);
- else if (config->index == NH_GROUP_NODE) {
+ else if (config->index == RPKI_VRF_NODE &&
+ strncmp(line, " exit", strlen(" exit")) == 0) {
+ config_add_line(config->line, line);
+ config->index = VRF_NODE;
+ } else if (config->index == NH_GROUP_NODE) {
if (strncmp(line, " resilient",
strlen(" resilient")) == 0)
config_add_line_head(config->line,
@@ -455,6 +464,12 @@ void vtysh_config_parse_line(void *arg, const char *line)
else if (strncmp(line, "debug resolver",
strlen("debug resolver")) == 0)
config = config_get(RESOLVER_DEBUG_NODE, line);
+ else if (strncmp(line, "debug mgmt client frontend",
+ strlen("debug mgmt client frontend")) == 0)
+ config = config_get(MGMT_FE_DEBUG_NODE, line);
+ else if (strncmp(line, "debug mgmt client backend",
+ strlen("debug mgmt client backend")) == 0)
+ config = config_get(MGMT_BE_DEBUG_NODE, line);
else if (strncmp(line, "debug", strlen("debug")) == 0)
config = config_get(DEBUG_NODE, line);
else if (strncmp(line, "password", strlen("password")) == 0
@@ -484,8 +499,7 @@ void vtysh_config_parse_line(void *arg, const char *line)
config = config_get(RPKI_NODE, line);
else {
if (strncmp(line, "log", strlen("log")) == 0 ||
- strncmp(line, "hostname", strlen("hostname")) ==
- 0 ||
+ strncmp(line, "hostname", strlen("hostname")) == 0 ||
strncmp(line, "domainname", strlen("domainname")) ==
0 ||
strncmp(line, "allow-reserved-ranges",
@@ -497,12 +511,9 @@ void vtysh_config_parse_line(void *arg, const char *line)
strlen("no ip prefix-list")) == 0 ||
strncmp(line, "no ipv6 prefix-list",
strlen("no ipv6 prefix-list")) == 0 ||
- strncmp(line, "service ", strlen("service ")) ==
- 0 ||
- strncmp(line, "no service cputime-stats",
- strlen("no service cputime-stats")) == 0 ||
- strncmp(line, "service cputime-warning",
- strlen("service cputime-warning")) == 0)
+ strncmp(line, "service ", strlen("service ")) == 0 ||
+ strncmp(line, "no service ",
+ strlen("no service ")) == 0)
config_add_line_uniq(config_top, line);
else
config_add_line(config_top, line);
@@ -548,9 +559,7 @@ static void configvec_dump(vector vec, bool nested)
* are not under the VRF node.
*/
if (config->index == INTERFACE_NODE
- && (listcount(config->line) == 1)
- && (line = listnode_head(config->line))
- && strmatch(line, "exit")) {
+ && list_isempty(config->line)) {
config_del(config);
continue;
}
@@ -607,7 +616,13 @@ static int vtysh_read_file(FILE *confp, bool dry_run)
vty->node = CONFIG_NODE;
vtysh_execute_no_pager("enable");
- vtysh_execute_no_pager("configure terminal");
+ /*
+ * When reading the config, we need to wait until the lock is acquired.
+ * If we ignore the failure and continue without the lock, the config
+ * will be fully ignored.
+ */
+ while (vtysh_execute_no_pager("conf term file-lock") == CMD_WARNING_CONFIG_FAILED)
+ usleep(100000);
if (!dry_run)
vtysh_execute_no_pager("XFRR_start_configuration");