From 657ffe100dfa7c4f6441bcafb6b3a852108b1d57 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Wed, 20 Jul 2022 22:57:33 +0300 Subject: [PATCH] vtysh: Ignore `end` when parsing frr.conf If we have `end` at the end of the frr.conf, then we never execute XFRR_end_configuration command, and start/end markers do not work. This leads to for example waiting BGP configuration parsing thread to hang, and the peers are in shutdown state until the timer expires. Signed-off-by: Donatas Abraitis (cherry picked from commit ce2e1a0ed852a6d22385afba7ca44f9ec7f1454e) --- vtysh/vtysh.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 828d2d73b0..bd4f0e312e 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -885,10 +885,23 @@ int vtysh_config_from_file(struct vty *vty, FILE *fp) int lineno = 0; /* once we have an error, we remember & return that */ int retcode = CMD_SUCCESS; + char *vty_buf_copy = XCALLOC(MTYPE_VTYSH_CMD, VTY_BUFSIZ); + char *vty_buf_trimmed = NULL; while (fgets(vty->buf, VTY_BUFSIZ, fp)) { lineno++; + strlcpy(vty_buf_copy, vty->buf, VTY_BUFSIZ); + vty_buf_trimmed = trim(vty_buf_copy); + + /* + * Ignore the "end" lines, we will generate these where + * appropriate, otherwise we never execute + * XFRR_end_configuration, and start/end markers do not work. + */ + if (strmatch(vty_buf_trimmed, "end")) + continue; + ret = command_config_read_one_line(vty, &cmd, lineno, 1); switch (ret) { @@ -955,6 +968,8 @@ int vtysh_config_from_file(struct vty *vty, FILE *fp) } } + XFREE(MTYPE_VTYSH_CMD, vty_buf_copy); + return (retcode); } -- 2.39.5