diff --git a/lib/command.c b/lib/command.c index 8025ab534fcf..b09af640a3d9 100644 --- a/lib/command.c +++ b/lib/command.c @@ -1335,8 +1335,8 @@ DEFUN (config_terminal, config_terminal_cmd, "configure [terminal [file-lock]]", "Configuration from vty interface\n" - "Configuration with locked datastores\n" - "Configuration terminal\n") + "Configuration terminal\n" + "Configuration with locked datastores\n") { return vty_config_enter(vty, false, false, argc == 3); } diff --git a/lib/vty.c b/lib/vty.c index 23aa2d1f38d0..6217cfe73c93 100644 --- a/lib/vty.c +++ b/lib/vty.c @@ -2884,6 +2884,12 @@ int vty_config_enter(struct vty *vty, bool private_config, bool exclusive, } assert(vty->mgmt_locked_candidate_ds); assert(vty->mgmt_locked_running_ds); + + /* + * As datastores are locked explicitly, we don't need implicit + * commits and should allow pending changes. + */ + vty->pending_allowed = true; } vty->node = CONFIG_NODE; @@ -2940,6 +2946,8 @@ int vty_config_node_exit(struct vty *vty) /* TODO: could we check for un-commited changes here? */ + vty->pending_allowed = false; + if (vty->mgmt_locked_running_ds) vty_mgmt_unlock_running_inline(vty); diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 8b223d1aa482..2f1109a544a8 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -2333,15 +2333,26 @@ DEFUNSH(VTYSH_REALLYALL, vtysh_disable, vtysh_disable_cmd, "disable", } DEFUNSH(VTYSH_REALLYALL, vtysh_config_terminal, vtysh_config_terminal_cmd, - "configure [terminal [file-lock]]", + "configure [terminal]", "Configuration from vty interface\n" - "Configuration with locked datastores\n" "Configuration terminal\n") { vty->node = CONFIG_NODE; return CMD_SUCCESS; } +DEFUNSH(VTYSH_REALLYALL, vtysh_config_terminal_file_lock, + vtysh_config_terminal_file_lock_cmd, + "configure terminal file-lock", + "Configuration from vty interface\n" + "Configuration terminal\n" + "Configuration with locked datastores\n") +{ + vty->node = CONFIG_NODE; + vty->vtysh_file_locked = true; + return CMD_SUCCESS; +} + static int vtysh_exit(struct vty *vty) { struct cmd_node *cnode = vector_lookup(cmdvec, vty->node); @@ -4930,6 +4941,7 @@ void vtysh_init_vty(void) if (!user_mode) install_element(VIEW_NODE, &vtysh_enable_cmd); install_element(ENABLE_NODE, &vtysh_config_terminal_cmd); + install_element(ENABLE_NODE, &vtysh_config_terminal_file_lock_cmd); install_element(ENABLE_NODE, &vtysh_disable_cmd); /* "exit" command. */