diff options
author | Christian Hopps <chopps@labn.net> | 2023-04-26 23:50:46 +0200 |
---|---|---|
committer | Christian Hopps <chopps@labn.net> | 2023-05-01 19:47:12 +0200 |
commit | cfa0facbf936fc6cc053fafea7d2b6fa8bccfc4c (patch) | |
tree | 727b06f65947ae9702c691dfeb4dfe8951225ca8 /lib/mgmt_fe_client.c | |
parent | Merge pull request #13368 from Keelan10/nhrpd-memory-leak (diff) | |
download | frr-cfa0facbf936fc6cc053fafea7d2b6fa8bccfc4c.tar.xz frr-cfa0facbf936fc6cc053fafea7d2b6fa8bccfc4c.zip |
mgmtd: fully implement debug flags for mgmtd and clients
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'lib/mgmt_fe_client.c')
-rw-r--r-- | lib/mgmt_fe_client.c | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/lib/mgmt_fe_client.c b/lib/mgmt_fe_client.c index 7cb9aa3de..b8266bfa8 100644 --- a/lib/mgmt_fe_client.c +++ b/lib/mgmt_fe_client.c @@ -6,6 +6,7 @@ */ #include <zebra.h> +#include "debug.h" #include "memory.h" #include "libfrr.h" #include "mgmt_fe_client.h" @@ -15,20 +16,14 @@ #include "stream.h" #include "sockopt.h" -#ifdef REDIRECT_DEBUG_TO_STDERR -#define MGMTD_FE_CLIENT_DBG(fmt, ...) \ - fprintf(stderr, "%s: " fmt "\n", __func__, ##__VA_ARGS__) -#define MGMTD_FE_CLIENT_ERR(fmt, ...) \ - fprintf(stderr, "%s: ERROR, " fmt "\n", __func__, ##__VA_ARGS__) -#else /* REDIRECT_DEBUG_TO_STDERR */ -#define MGMTD_FE_CLIENT_DBG(fmt, ...) \ - do { \ - if (mgmt_debug_fe_client) \ - zlog_debug("%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#define MGMTD_FE_CLIENT_ERR(fmt, ...) \ +#include "lib/mgmt_fe_client_clippy.c" + +#define MGMTD_FE_CLIENT_DBG(fmt, ...) \ + DEBUGD(&mgmt_dbg_fe_client, "%s:" fmt, __func__, ##__VA_ARGS__) +#define MGMTD_FE_CLIENT_ERR(fmt, ...) \ zlog_err("%s: ERROR: " fmt, __func__, ##__VA_ARGS__) -#endif /* REDIRECT_DEBUG_TO_STDERR */ +#define MGMTD_DBG_FE_CLIENT_CHECK() \ + DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_ALL) struct mgmt_fe_client_ctx; @@ -69,7 +64,7 @@ struct mgmt_fe_client_ctx { #define FOREACH_SESSION_IN_LIST(client_ctx, session) \ frr_each_safe (mgmt_sessions, &(client_ctx)->client_sessions, (session)) -static bool mgmt_debug_fe_client; +struct debug mgmt_dbg_fe_client = {0, "Management frontend client operations"}; static struct mgmt_fe_client_ctx mgmt_fe_client_ctx = { .conn_fd = -1, @@ -169,7 +164,7 @@ static int mgmt_fe_client_send_msg(struct mgmt_fe_client_ctx *client_ctx, &client_ctx->mstate, fe_msg, mgmtd__fe_message__get_packed_size(fe_msg), (size_t(*)(void *, void *))mgmtd__fe_message__pack, - mgmt_debug_fe_client); + MGMTD_DBG_FE_CLIENT_CHECK()); mgmt_fe_client_sched_msg_write(client_ctx); return rv; } @@ -181,7 +176,7 @@ static void mgmt_fe_client_write(struct event *thread) client_ctx = (struct mgmt_fe_client_ctx *)EVENT_ARG(thread); rv = mgmt_msg_write(&client_ctx->mstate, client_ctx->conn_fd, - mgmt_debug_fe_client); + MGMTD_DBG_FE_CLIENT_CHECK()); if (rv == MSW_SCHED_STREAM) mgmt_fe_client_register_event(client_ctx, MGMTD_FE_CONN_WRITE); else if (rv == MSW_DISCONNECT) @@ -679,7 +674,7 @@ static void mgmt_fe_client_proc_msgbufs(struct event *thread) client_ctx = (struct mgmt_fe_client_ctx *)EVENT_ARG(thread); if (mgmt_msg_procbufs(&client_ctx->mstate, mgmt_fe_client_process_msg, - client_ctx, mgmt_debug_fe_client)) + client_ctx, MGMTD_DBG_FE_CLIENT_CHECK())) mgmt_fe_client_register_event(client_ctx, MGMTD_FE_PROC_MSG); } @@ -691,7 +686,7 @@ static void mgmt_fe_client_read(struct event *thread) client_ctx = (struct mgmt_fe_client_ctx *)EVENT_ARG(thread); rv = mgmt_msg_read(&client_ctx->mstate, client_ctx->conn_fd, - mgmt_debug_fe_client); + MGMTD_DBG_FE_CLIENT_CHECK()); if (rv == MSR_DISCONNECT) { mgmt_fe_server_disconnect(client_ctx, true); return; @@ -703,7 +698,7 @@ static void mgmt_fe_client_read(struct event *thread) static void mgmt_fe_server_connect(struct mgmt_fe_client_ctx *client_ctx) { - const char *dbgtag = mgmt_debug_fe_client ? "FE-client" : NULL; + const char *dbgtag = MGMTD_DBG_FE_CLIENT_CHECK() ? "FE-client" : NULL; assert(client_ctx->conn_fd == -1); client_ctx->conn_fd = mgmt_msg_connect( @@ -779,6 +774,48 @@ static void mgmt_fe_client_schedule_conn_retry( &client_ctx->conn_retry_tmr); } +DEFPY(debug_mgmt_client_fe, debug_mgmt_client_fe_cmd, + "[no] debug mgmt client frontend", + NO_STR DEBUG_STR MGMTD_STR + "client\n" + "frontend\n") +{ + uint32_t mode = DEBUG_NODE2MODE(vty->node); + + DEBUG_MODE_SET(&mgmt_dbg_fe_client, mode, !no); + + return CMD_SUCCESS; +} + +static void mgmt_debug_client_fe_set_all(uint32_t flags, bool set) +{ + DEBUG_FLAGS_SET(&mgmt_dbg_fe_client, flags, set); +} + +static int mgmt_debug_fe_client_config_write(struct vty *vty) +{ + if (DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_CONF)) + vty_out(vty, "debug mgmt client frontend\n"); + + return CMD_SUCCESS; +} + +void mgmt_debug_fe_client_show_debug(struct vty *vty) +{ + if (MGMTD_DBG_FE_CLIENT_CHECK()) + vty_out(vty, "debug mgmt client frontend\n"); +} + +static struct debug_callbacks mgmt_dbg_fe_client_cbs = { + .debug_set_all = mgmt_debug_client_fe_set_all}; + +static struct cmd_node mgmt_dbg_node = { + .name = "mgmt client frontend", + .node = DEBUG_NODE, + .prompt = "", + .config_write = mgmt_debug_fe_client_config_write, +}; + /* * Initialize library and try connecting with MGMTD. */ @@ -809,6 +846,14 @@ uintptr_t mgmt_fe_client_lib_init(struct mgmt_fe_client_params *params, return (uintptr_t)&mgmt_fe_client_ctx; } +void mgmt_fe_client_lib_vty_init(void) +{ + debug_init(&mgmt_dbg_fe_client_cbs); + install_node(&mgmt_dbg_node); + install_element(ENABLE_NODE, &debug_mgmt_client_fe_cmd); + install_element(CONFIG_NODE, &debug_mgmt_client_fe_cmd); +} + /* * Create a new Session for a Frontend Client connection. */ |