Skip to content

To improve the error handling of vtysh read config file #15568

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions src/sonic-frr/patch/0030-bgpd-error-handling-improve.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
From 4f50e545db4593121a2da0cab710cac4ad018d04 Mon Sep 17 00:00:00 2001
From: stormliang <[email protected]>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this upstream patch?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I this is not upstream patch, I create this one.

Date: Sun, 25 Jun 2023 03:15:39 +0000
Subject: [PATCH] error handling improve

---
lib/command.c | 15 +++++++++++++++
lib/command.h | 1 +
vtysh/vtysh.c | 14 ++++++++++++++
3 files changed, 30 insertions(+)

diff --git a/lib/command.c b/lib/command.c
index 3718c1459..5f15f5469 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -51,6 +51,9 @@

#include "frrscript.h"

+#include <string.h>
+#include <errno.h>
+
DEFINE_MTYPE_STATIC(LIB, HOST, "Host config");
DEFINE_MTYPE(LIB, COMPLETION, "Completion item");

@@ -1290,6 +1293,18 @@ int config_from_file(struct vty *vty, FILE *fp, unsigned int *line_num)
&& ret != CMD_ERR_NOTHING_TODO)
error_ret = ret;
}
+ if (feof(fp)) {
+ // Handle end-of-file (EOF) error
+ vty_out(vty, "End of file reached.\n");
+ } else if (ferror(fp)) {
+ error_ret = CMD_ERR_READ_CONF_FILE;
+ // Handle general I/O error
+ vty_out(vty, "fgets error: Error occurred while reading input: %s\n", strerror(errno));
+ } else {
+ error_ret = CMD_ERR_READ_CONF_FILE;
+ // Handle other errors
+ vty_out(vty, "fgets error: Unknown error occurred.\n");
+ }

if (error_ret) {
return error_ret;
diff --git a/lib/command.h b/lib/command.h
index c888356d6..e38617737 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -236,6 +236,7 @@ struct cmd_node {
#define CMD_NOT_MY_INSTANCE 14
#define CMD_NO_LEVEL_UP 15
#define CMD_ERR_NO_DAEMON 16
+#define CMD_ERR_READ_CONF_FILE 17

/* Argc max counts. */
#define CMD_ARGC_MAX 256
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 8e95aaa47..bbcdb90dc 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -25,6 +25,8 @@
#include <sys/wait.h>
#include <sys/resource.h>
#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>

/* readline carries some ancient definitions around */
#pragma GCC diagnostic push
@@ -895,6 +897,18 @@ int vtysh_config_from_file(struct vty *vty, FILE *fp)
}
}
}
+ if (feof(fp)) {
+ // Handle end-of-file (EOF) error
+ vty_out(vty, "End of file reached.\n");
+ } else if (ferror(fp)) {
+ retcode = CMD_ERR_READ_CONF_FILE;
+ // Handle general I/O error
+ vty_out(vty, "fgets error: Error occurred while reading input: %s\n", strerror(errno));
+ } else {
+ retcode = CMD_ERR_READ_CONF_FILE;
+ // Handle other errors
+ vty_out(vty, "fgets error: Unknown error occurred.\n");
+ }

return (retcode);
}
--
2.25.1

1 change: 1 addition & 0 deletions src/sonic-frr/patch/series
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ cross-compile-changes.patch
0027-bgpd-Ensure-FRR-has-enough-data-to-read-in-peek_for_as4_capability-and-bgp_open_option_parse.patch
0028-bgpd-Ensure-that-bgp-open-message-stream-has-enough-data-to-read.patch
0029-bgpd-Change-log-level-for-graceful-restart-events.patch
0030-bgpd-error-handling-improve.patch