diff options
Diffstat (limited to 'vtysh')
-rw-r--r-- | vtysh/vtysh_config.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c index d22ec3113..2e1d7c5ba 100644 --- a/vtysh/vtysh_config.c +++ b/vtysh/vtysh_config.c @@ -272,16 +272,11 @@ void vtysh_config_parse_line(void *arg, const char *line) strlen(" ip igmp query-interval")) == 0) { config_add_line_uniq_end(config->line, line); } else if (config->index == LINK_PARAMS_NODE - && strncmp(line, " exit-link-params", - strlen(" exit")) + && strncmp(line, " exit-link-params", + strlen(" exit")) == 0) { config_add_line(config->line, line); config->index = INTERFACE_NODE; - } else if (config->index == VRF_NODE - && strncmp(line, " exit-vrf", - strlen(" exit-vrf")) - == 0) { - config_add_line_uniq_end(config->line, line); } else if (!strncmp(line, " vrrp", strlen(" vrrp")) || !strncmp(line, " no vrrp", strlen(" no vrrp"))) { @@ -300,7 +295,10 @@ void vtysh_config_parse_line(void *arg, const char *line) config_add_line(config_top, line); break; default: - if (strncmp(line, "interface", strlen("interface")) == 0) + if (strncmp(line, "exit", strlen("exit")) == 0) { + if (config) + config_add_line_uniq_end(config->line, line); + } else if (strncmp(line, "interface", strlen("interface")) == 0) config = config_get(INTERFACE_NODE, line); else if (strncmp(line, "pseudowire", strlen("pseudowire")) == 0) config = config_get(PW_NODE, line); @@ -496,7 +494,9 @@ void vtysh_config_dump(void) * are not under the VRF node. */ if (config->index == INTERFACE_NODE - && list_isempty(config->line)) { + && (listcount(config->line) == 1) + && (line = listnode_head(config->line)) + && strmatch(line, "exit")) { config_del(config); continue; } |