lib: mgmtd: enable conn debugs when user enables client debug

Signed-off-by: Christian Hopps <chopps@labn.net>
This commit is contained in:
Christian Hopps 2023-11-28 18:02:44 -05:00
parent 83018e2178
commit c37c19a9ec
2 changed files with 58 additions and 24 deletions

View File

@ -112,7 +112,11 @@ struct mgmt_be_client {
#define FOREACH_BE_TXN_IN_LIST(client_ctx, txn) \ #define FOREACH_BE_TXN_IN_LIST(client_ctx, txn) \
frr_each_safe (mgmt_be_txns, &(client_ctx)->txn_head, (txn)) frr_each_safe (mgmt_be_txns, &(client_ctx)->txn_head, (txn))
struct debug mgmt_dbg_be_client = {0, "Management backend client operations"}; struct debug mgmt_dbg_be_client = {
.desc = "Management backend client operations"
};
struct mgmt_be_client *mgmt_be_client;
static int mgmt_be_client_send_msg(struct mgmt_be_client *client_ctx, static int mgmt_be_client_send_msg(struct mgmt_be_client *client_ctx,
Mgmtd__BeMessage *be_msg) Mgmtd__BeMessage *be_msg)
@ -820,24 +824,28 @@ static int mgmt_be_client_notify_disconenct(struct msg_conn *conn)
* Debug Flags * Debug Flags
*/ */
static void mgmt_debug_client_be_set(uint32_t flags, bool set)
{
DEBUG_FLAGS_SET(&mgmt_dbg_be_client, flags, set);
if (!mgmt_be_client)
return;
mgmt_be_client->client.conn.debug =
DEBUG_MODE_CHECK(&mgmt_dbg_be_client, DEBUG_MODE_ALL);
}
DEFPY(debug_mgmt_client_be, debug_mgmt_client_be_cmd, DEFPY(debug_mgmt_client_be, debug_mgmt_client_be_cmd,
"[no] debug mgmt client backend", "[no] debug mgmt client backend",
NO_STR DEBUG_STR MGMTD_STR NO_STR DEBUG_STR MGMTD_STR
"client\n" "client\n"
"backend\n") "backend\n")
{ {
uint32_t mode = DEBUG_NODE2MODE(vty->node); mgmt_debug_client_be_set(DEBUG_NODE2MODE(vty->node), !no);
DEBUG_MODE_SET(&mgmt_dbg_be_client, mode, !no);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
static void mgmt_debug_client_be_set_all(uint32_t flags, bool set)
{
DEBUG_FLAGS_SET(&mgmt_dbg_be_client, flags, set);
}
static int mgmt_debug_be_client_config_write(struct vty *vty) static int mgmt_debug_be_client_config_write(struct vty *vty)
{ {
if (DEBUG_MODE_CHECK(&mgmt_dbg_be_client, DEBUG_MODE_CONF)) if (DEBUG_MODE_CHECK(&mgmt_dbg_be_client, DEBUG_MODE_CONF))
@ -853,7 +861,8 @@ void mgmt_debug_be_client_show_debug(struct vty *vty)
} }
static struct debug_callbacks mgmt_dbg_be_client_cbs = { static struct debug_callbacks mgmt_dbg_be_client_cbs = {
.debug_set_all = mgmt_debug_client_be_set_all}; .debug_set_all = mgmt_debug_client_be_set
};
static struct cmd_node mgmt_dbg_node = { static struct cmd_node mgmt_dbg_node = {
.name = "debug mgmt client backend", .name = "debug mgmt client backend",
@ -867,8 +876,13 @@ struct mgmt_be_client *mgmt_be_client_create(const char *client_name,
uintptr_t user_data, uintptr_t user_data,
struct event_loop *event_loop) struct event_loop *event_loop)
{ {
struct mgmt_be_client *client = struct mgmt_be_client *client;
XCALLOC(MTYPE_MGMTD_BE_CLIENT, sizeof(*client));
if (mgmt_be_client)
return NULL;
client = XCALLOC(MTYPE_MGMTD_BE_CLIENT, sizeof(*client));
mgmt_be_client = client;
/* Only call after frr_init() */ /* Only call after frr_init() */
assert(running_config); assert(running_config);
@ -902,6 +916,8 @@ void mgmt_be_client_lib_vty_init(void)
void mgmt_be_client_destroy(struct mgmt_be_client *client) void mgmt_be_client_destroy(struct mgmt_be_client *client)
{ {
assert(client == mgmt_be_client);
MGMTD_BE_CLIENT_DBG("Destroying MGMTD Backend Client '%s'", MGMTD_BE_CLIENT_DBG("Destroying MGMTD Backend Client '%s'",
client->name); client->name);
@ -912,4 +928,6 @@ void mgmt_be_client_destroy(struct mgmt_be_client *client)
XFREE(MTYPE_MGMTD_BE_CLIENT_NAME, client->name); XFREE(MTYPE_MGMTD_BE_CLIENT_NAME, client->name);
XFREE(MTYPE_MGMTD_BE_CLIENT, client); XFREE(MTYPE_MGMTD_BE_CLIENT, client);
mgmt_be_client = NULL;
} }

View File

@ -47,8 +47,11 @@ struct mgmt_fe_client {
#define FOREACH_SESSION_IN_LIST(client, session) \ #define FOREACH_SESSION_IN_LIST(client, session) \
frr_each_safe (mgmt_sessions, &(client)->sessions, (session)) frr_each_safe (mgmt_sessions, &(client)->sessions, (session))
struct debug mgmt_dbg_fe_client = {0, "Management frontend client operations"}; struct debug mgmt_dbg_fe_client = {
.desc = "Management frontend client operations"
};
struct mgmt_fe_client *mgmt_fe_client;
static inline const char *dsid2name(Mgmtd__DatastoreId id) static inline const char *dsid2name(Mgmtd__DatastoreId id)
{ {
@ -543,6 +546,16 @@ static int mgmt_fe_client_notify_disconnect(struct msg_conn *conn)
return _notify_connect_disconnect(client, false); return _notify_connect_disconnect(client, false);
} }
static void mgmt_debug_client_fe_set(uint32_t mode, bool set)
{
DEBUG_FLAGS_SET(&mgmt_dbg_fe_client, mode, set);
if (!mgmt_fe_client)
return;
mgmt_fe_client->client.conn.debug =
DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_ALL);
}
DEFPY(debug_mgmt_client_fe, debug_mgmt_client_fe_cmd, DEFPY(debug_mgmt_client_fe, debug_mgmt_client_fe_cmd,
"[no] debug mgmt client frontend", "[no] debug mgmt client frontend",
@ -550,18 +563,11 @@ DEFPY(debug_mgmt_client_fe, debug_mgmt_client_fe_cmd,
"client\n" "client\n"
"frontend\n") "frontend\n")
{ {
uint32_t mode = DEBUG_NODE2MODE(vty->node); mgmt_debug_client_fe_set(DEBUG_NODE2MODE(vty->node), !no);
DEBUG_MODE_SET(&mgmt_dbg_fe_client, mode, !no);
return CMD_SUCCESS; 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) static int mgmt_debug_fe_client_config_write(struct vty *vty)
{ {
if (DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_CONF)) if (DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_CONF))
@ -577,7 +583,8 @@ void mgmt_debug_fe_client_show_debug(struct vty *vty)
} }
static struct debug_callbacks mgmt_dbg_fe_client_cbs = { static struct debug_callbacks mgmt_dbg_fe_client_cbs = {
.debug_set_all = mgmt_debug_client_fe_set_all}; .debug_set_all = mgmt_debug_client_fe_set
};
static struct cmd_node mgmt_dbg_node = { static struct cmd_node mgmt_dbg_node = {
.name = "debug mgmt client frontend", .name = "debug mgmt client frontend",
@ -594,8 +601,13 @@ struct mgmt_fe_client *mgmt_fe_client_create(const char *client_name,
uintptr_t user_data, uintptr_t user_data,
struct event_loop *event_loop) struct event_loop *event_loop)
{ {
struct mgmt_fe_client *client = struct mgmt_fe_client *client;
XCALLOC(MTYPE_MGMTD_FE_CLIENT, sizeof(*client));
if (mgmt_fe_client)
return NULL;
client = XCALLOC(MTYPE_MGMTD_FE_CLIENT, sizeof(*client));
mgmt_fe_client = client;
client->name = XSTRDUP(MTYPE_MGMTD_FE_CLIENT_NAME, client_name); client->name = XSTRDUP(MTYPE_MGMTD_FE_CLIENT_NAME, client_name);
client->user_data = user_data; client->user_data = user_data;
@ -692,6 +704,8 @@ void mgmt_fe_client_destroy(struct mgmt_fe_client *client)
{ {
struct mgmt_fe_client_session *session; struct mgmt_fe_client_session *session;
assert(client == mgmt_fe_client);
MGMTD_FE_CLIENT_DBG("Destroying MGMTD Frontend Client '%s'", MGMTD_FE_CLIENT_DBG("Destroying MGMTD Frontend Client '%s'",
client->name); client->name);
@ -702,4 +716,6 @@ void mgmt_fe_client_destroy(struct mgmt_fe_client *client)
XFREE(MTYPE_MGMTD_FE_CLIENT_NAME, client->name); XFREE(MTYPE_MGMTD_FE_CLIENT_NAME, client->name);
XFREE(MTYPE_MGMTD_FE_CLIENT, client); XFREE(MTYPE_MGMTD_FE_CLIENT, client);
mgmt_fe_client = NULL;
} }