summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2023-09-28 09:03:06 +0200
committerGitHub <noreply@github.com>2023-09-28 09:03:06 +0200
commit0af454157655fa27a33d79ed60b4f6383cc283a9 (patch)
tree8fa5594d5abd58065d82de4382ca19292efc0c9a
parentMerge pull request #14222 from opensourcerouting/doc/debian12 (diff)
parentvtysh: fix entering configuration node in file-lock mode (diff)
downloadfrr-0af454157655fa27a33d79ed60b4f6383cc283a9.tar.xz
frr-0af454157655fa27a33d79ed60b4f6383cc283a9.zip
Merge pull request #14498 from idryzhov/fix-conf-t-file-lock
Fixes for `file-lock` mode of configuration node
-rw-r--r--lib/command.c4
-rw-r--r--lib/vty.c8
-rw-r--r--vtysh/vtysh.c16
3 files changed, 24 insertions, 4 deletions
diff --git a/lib/command.c b/lib/command.c
index 1977dc4fa..86da488fd 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -1316,8 +1316,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 15cc340eb..ed8b71ed2 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -2890,6 +2890,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;
@@ -2946,6 +2952,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 050807ccd..9c61146c2 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -2379,15 +2379,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);
@@ -5021,6 +5032,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. */