pathd: rework debugs

Pathd uses a single debug struct with additional option flags to
configure different types of debug messages. This is not how debug
library is supposed to be used. The idea of option flags is to allow
more granular control of a single type, not to represent multiple types.

This commit adds a separate debug struct for each type which greatly
simplifies the code.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2024-03-26 16:38:45 +02:00 committed by Mark Stapp
parent d9775c690c
commit 1797b7eefc
8 changed files with 59 additions and 123 deletions

View file

@ -1101,10 +1101,8 @@ DEFPY(debug_path_policy, debug_path_policy_cmd, "[no] debug pathd policy",
"policy debugging\n") "policy debugging\n")
{ {
uint32_t mode = DEBUG_NODE2MODE(vty->node); uint32_t mode = DEBUG_NODE2MODE(vty->node);
bool no_debug = no;
DEBUG_MODE_SET(&path_policy_debug, mode, !no); DEBUG_MODE_SET(&path_policy_debug, mode, !no);
DEBUG_FLAGS_SET(&path_policy_debug, PATH_POLICY_DEBUG_BASIC, !no_debug);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -1310,9 +1308,7 @@ int config_write_segment_routing(struct vty *vty)
static int path_policy_cli_debug_config_write(struct vty *vty) static int path_policy_cli_debug_config_write(struct vty *vty)
{ {
if (DEBUG_MODE_CHECK(&path_policy_debug, DEBUG_MODE_CONF)) { if (DEBUG_MODE_CHECK(&path_policy_debug, DEBUG_MODE_CONF)) {
if (DEBUG_FLAGS_CHECK(&path_policy_debug, vty_out(vty, "debug pathd policy\n");
PATH_POLICY_DEBUG_BASIC))
vty_out(vty, "debug pathd policy\n");
return 1; return 1;
} }
return 0; return 0;

View file

@ -31,7 +31,12 @@ DEFINE_MTYPE(PATHD, PCEP, "PCEP module");
/* /*
* Globals. * Globals.
*/ */
static struct pcep_glob pcep_glob_space = {.dbg = {0, "pathd module: pcep"}}; static struct pcep_glob pcep_glob_space = {
.dbg_basic = {0, "PCEP basic"},
.dbg_path = {0, "PCEP path"},
.dbg_msg = {0, "PCEP message"},
.dbg_lib = {0, "PCEP lib"},
};
struct pcep_glob *pcep_g = &pcep_glob_space; struct pcep_glob *pcep_g = &pcep_glob_space;
/* Main Thread Even Handler */ /* Main Thread Even Handler */

View file

@ -27,40 +27,22 @@ DECLARE_MTYPE(PCEP);
#define PCEP_DEBUG_MODE_PCEPLIB 0x08 #define PCEP_DEBUG_MODE_PCEPLIB 0x08
#define PCEP_DEBUG_MODE_ALL 0x0F #define PCEP_DEBUG_MODE_ALL 0x0F
#define PCEP_DEBUG(fmt, ...) \ #define PCEP_DEBUG(fmt, ...) \
do { \ DEBUGD(&pcep_g->dbg_basic, "pcep: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_BASIC)) \
DEBUGD(&pcep_g->dbg, "pcep: " fmt, ##__VA_ARGS__); \
} while (0)
#define PCEP_DEBUG_PATH(fmt, ...) \ #define PCEP_DEBUG_PATH(fmt, ...) \
do { \ DEBUGD(&pcep_g->dbg_path, "pcep: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PATH)) \
DEBUGD(&pcep_g->dbg, "pcep: " fmt, ##__VA_ARGS__); \
} while (0)
#define PCEP_DEBUG_PCEP(fmt, ...) \ #define PCEP_DEBUG_PCEP(fmt, ...) \
do { \ DEBUGD(&pcep_g->dbg_msg, "pcep: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEP)) \
DEBUGD(&pcep_g->dbg, "pcep: " fmt, ##__VA_ARGS__); \
} while (0)
#define PCEP_DEBUG_PCEPLIB(priority, fmt, ...) \ #define PCEP_DEBUG_PCEPLIB(priority, fmt, ...) \
do { \ do { \
switch (priority) { \ switch (priority) { \
case LOG_DEBUG: \ case LOG_DEBUG: \
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, \ DEBUGD(&pcep_g->dbg_lib, "pcep: " fmt, ##__VA_ARGS__); \
PCEP_DEBUG_MODE_PCEPLIB)) \
DEBUGD(&pcep_g->dbg, "pcep: " fmt, \
##__VA_ARGS__); \
break; \ break; \
case LOG_INFO: \ case LOG_INFO: \
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, \ DEBUGI(&pcep_g->dbg_lib, "pcep: " fmt, ##__VA_ARGS__); \
PCEP_DEBUG_MODE_PCEPLIB)) \
DEBUGI(&pcep_g->dbg, "pcep: " fmt, \
##__VA_ARGS__); \
break; \ break; \
case LOG_NOTICE: \ case LOG_NOTICE: \
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, \ DEBUGN(&pcep_g->dbg_lib, "pcep: " fmt, ##__VA_ARGS__); \
PCEP_DEBUG_MODE_PCEPLIB)) \
DEBUGN(&pcep_g->dbg, "pcep: " fmt, \
##__VA_ARGS__); \
break; \ break; \
case LOG_WARNING: \ case LOG_WARNING: \
case LOG_ERR: \ case LOG_ERR: \
@ -294,7 +276,10 @@ struct path {
}; };
struct pcep_glob { struct pcep_glob {
struct debug dbg; struct debug dbg_basic;
struct debug dbg_path;
struct debug dbg_msg;
struct debug dbg_lib;
struct event_loop *master; struct event_loop *master;
struct frr_pthread *fpt; struct frr_pthread *fpt;
uint8_t num_pce_opts_cli; uint8_t num_pce_opts_cli;

View file

@ -110,10 +110,6 @@ static const char PCEP_VTYSH_ARG_DELEGATION_TIMEOUT[] = "delegation-timeout";
static const char PCEP_VTYSH_ARG_SR_DRAFT07[] = "sr-draft07"; static const char PCEP_VTYSH_ARG_SR_DRAFT07[] = "sr-draft07";
static const char PCEP_VTYSH_ARG_PCE_INIT[] = "pce-initiated"; static const char PCEP_VTYSH_ARG_PCE_INIT[] = "pce-initiated";
static const char PCEP_VTYSH_ARG_TCP_MD5[] = "tcp-md5-auth"; static const char PCEP_VTYSH_ARG_TCP_MD5[] = "tcp-md5-auth";
static const char PCEP_VTYSH_ARG_BASIC[] = "basic";
static const char PCEP_VTYSH_ARG_PATH[] = "path";
static const char PCEP_VTYSH_ARG_MESSAGE[] = "message";
static const char PCEP_VTYSH_ARG_PCEPLIB[] = "pceplib";
static const char PCEP_CLI_CAP_STATEFUL[] = " [Stateful PCE]"; static const char PCEP_CLI_CAP_STATEFUL[] = " [Stateful PCE]";
static const char PCEP_CLI_CAP_INCL_DB_VER[] = " [Include DB version]"; static const char PCEP_CLI_CAP_INCL_DB_VER[] = " [Include DB version]";
static const char PCEP_CLI_CAP_LSP_TRIGGERED[] = " [LSP Triggered Resync]"; static const char PCEP_CLI_CAP_LSP_TRIGGERED[] = " [LSP Triggered Resync]";
@ -463,31 +459,19 @@ static void pcep_cli_remove_pce_connection(struct pce_opts *pce_opts)
* VTY command implementations * VTY command implementations
*/ */
static int path_pcep_cli_debug(struct vty *vty, const char *debug_type, bool set) static int path_pcep_cli_debug(struct vty *vty, bool onoff, bool basic,
bool path, bool message, bool lib)
{ {
uint32_t mode = DEBUG_NODE2MODE(vty->node); uint32_t mode = DEBUG_NODE2MODE(vty->node);
/* Global Set */ if (basic)
if (debug_type == NULL) { DEBUG_MODE_SET(&pcep_g->dbg_basic, mode, onoff);
DEBUG_MODE_SET(&pcep_g->dbg, mode, set); if (path)
DEBUG_FLAGS_SET(&pcep_g->dbg, PCEP_DEBUG_MODE_ALL, set); DEBUG_MODE_SET(&pcep_g->dbg_path, mode, onoff);
return CMD_SUCCESS; if (message)
} DEBUG_MODE_SET(&pcep_g->dbg_msg, mode, onoff);
if (lib)
DEBUG_MODE_SET(&pcep_g->dbg, mode, true); DEBUG_MODE_SET(&pcep_g->dbg_lib, mode, onoff);
if (strcmp(debug_type, "basic") == 0)
DEBUG_FLAGS_SET(&pcep_g->dbg, PCEP_DEBUG_MODE_BASIC, set);
else if (strcmp(debug_type, "path") == 0)
DEBUG_FLAGS_SET(&pcep_g->dbg, PCEP_DEBUG_MODE_PATH, set);
else if (strcmp(debug_type, "message") == 0)
DEBUG_FLAGS_SET(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEP, set);
else if (strcmp(debug_type, "pceplib") == 0)
DEBUG_FLAGS_SET(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEPLIB, set);
/* Unset the pcep debug mode if there is no flag at least set*/
if (!DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_ALL))
DEBUG_MODE_SET(&pcep_g->dbg, mode, false);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -1714,25 +1698,14 @@ static int path_pcep_cli_clear_srte_pcep_session(struct vty *vty,
int pcep_cli_debug_config_write(struct vty *vty) int pcep_cli_debug_config_write(struct vty *vty)
{ {
char buff[128] = ""; if (DEBUG_MODE_CHECK(&pcep_g->dbg_basic, DEBUG_MODE_CONF))
vty_out(vty, "debug pathd pcep basic\n");
if (DEBUG_MODE_CHECK(&pcep_g->dbg, DEBUG_MODE_CONF)) { if (DEBUG_MODE_CHECK(&pcep_g->dbg_path, DEBUG_MODE_CONF))
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_BASIC)) vty_out(vty, "debug pathd pcep path\n");
csnprintfrr(buff, sizeof(buff), " %s", if (DEBUG_MODE_CHECK(&pcep_g->dbg_msg, DEBUG_MODE_CONF))
PCEP_VTYSH_ARG_BASIC); vty_out(vty, "debug pathd pcep message\n");
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PATH)) if (DEBUG_MODE_CHECK(&pcep_g->dbg_lib, DEBUG_MODE_CONF))
csnprintfrr(buff, sizeof(buff), " %s", vty_out(vty, "debug pathd pcep pceplib\n");
PCEP_VTYSH_ARG_PATH);
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEP))
csnprintfrr(buff, sizeof(buff), " %s",
PCEP_VTYSH_ARG_MESSAGE);
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEPLIB))
csnprintfrr(buff, sizeof(buff), " %s",
PCEP_VTYSH_ARG_PCEPLIB);
vty_out(vty, "debug pathd pcep%s\n", buff);
buff[0] = 0;
return 1;
}
return 0; return 0;
} }
@ -2015,27 +1988,21 @@ DEFPY(show_debugging_pathd_pcep,
{ {
vty_out(vty, "Pathd pcep debugging status:\n"); vty_out(vty, "Pathd pcep debugging status:\n");
if (DEBUG_MODE_CHECK(&pcep_g->dbg, DEBUG_MODE_CONF)) { if (DEBUG_MODE_CHECK(&pcep_g->dbg_basic, DEBUG_MODE_ALL))
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_BASIC)) vty_out(vty, "PCEP basic debugging is on\n");
vty_out(vty, " Pathd pcep %s debugging is on\n", if (DEBUG_MODE_CHECK(&pcep_g->dbg_path, DEBUG_MODE_ALL))
PCEP_VTYSH_ARG_BASIC); vty_out(vty, "PCEP path debugging is on\n");
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PATH)) if (DEBUG_MODE_CHECK(&pcep_g->dbg_msg, DEBUG_MODE_ALL))
vty_out(vty, " Pathd pcep %s debugging is on\n", vty_out(vty, "PCEP message debugging is on\n");
PCEP_VTYSH_ARG_PATH); if (DEBUG_MODE_CHECK(&pcep_g->dbg_lib, DEBUG_MODE_ALL))
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEP)) vty_out(vty, "PCEP lib debugging is on\n");
vty_out(vty, " Pathd pcep %s debugging is on\n",
PCEP_VTYSH_ARG_MESSAGE);
if (DEBUG_FLAGS_CHECK(&pcep_g->dbg, PCEP_DEBUG_MODE_PCEPLIB))
vty_out(vty, " Pathd pcep %s debugging is on\n",
PCEP_VTYSH_ARG_PCEPLIB);
}
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFPY(pcep_cli_debug, DEFPY(pcep_cli_debug,
pcep_cli_debug_cmd, pcep_cli_debug_cmd,
"[no] debug pathd pcep [<basic|path|message|pceplib>$debug_type]", "[no] debug pathd pcep [{basic$basic|path$path|message$msg|pceplib$lib}]",
NO_STR DEBUG_STR NO_STR DEBUG_STR
"pathd debugging\n" "pathd debugging\n"
"pcep module debugging\n" "pcep module debugging\n"
@ -2044,7 +2011,11 @@ DEFPY(pcep_cli_debug,
"pcep message debugging\n" "pcep message debugging\n"
"pceplib debugging\n") "pceplib debugging\n")
{ {
return path_pcep_cli_debug(vty, debug_type, !no); if (strmatch(argv[argc - 1]->text, "pcep"))
return path_pcep_cli_debug(vty, !no, true, true, true, true);
else
return path_pcep_cli_debug(vty, !no, !!basic, !!path, !!msg,
!!lib);
} }
DEFPY(pcep_cli_show_srte_pcep_counters, DEFPY(pcep_cli_show_srte_pcep_counters,

View file

@ -335,10 +335,8 @@ DEFPY (debug_path_ted,
"ted debugging\n") "ted debugging\n")
{ {
uint32_t mode = DEBUG_NODE2MODE(vty->node); uint32_t mode = DEBUG_NODE2MODE(vty->node);
bool no_debug = (no != NULL);
DEBUG_MODE_SET(&ted_state_g.dbg, mode, !no); DEBUG_MODE_SET(&ted_state_g.dbg, mode, !no);
DEBUG_FLAGS_SET(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC, !no_debug);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -473,8 +471,7 @@ DEFPY (show_pathd_ted_db,
int path_ted_cli_debug_config_write(struct vty *vty) int path_ted_cli_debug_config_write(struct vty *vty)
{ {
if (DEBUG_MODE_CHECK(&ted_state_g.dbg, DEBUG_MODE_CONF)) { if (DEBUG_MODE_CHECK(&ted_state_g.dbg, DEBUG_MODE_CONF)) {
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) vty_out(vty, "debug pathd mpls-te\n");
vty_out(vty, "debug pathd mpls-te\n");
return 1; return 1;
} }
return 0; return 0;
@ -482,7 +479,7 @@ int path_ted_cli_debug_config_write(struct vty *vty)
void path_ted_show_debugging(struct vty *vty) void path_ted_show_debugging(struct vty *vty)
{ {
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) if (DEBUG_MODE_CHECK(&ted_state_g.dbg, DEBUG_MODE_ALL))
vty_out(vty, " Path TED debugging is on\n"); vty_out(vty, " Path TED debugging is on\n");
} }

View file

@ -59,28 +59,17 @@ struct ted_state {
struct debug dbg; struct debug dbg;
}; };
/* Debug flags. */ /* Debug flags. */
#define PATH_TED_DEBUG_BASIC 0x01
#define PATH_TED_DEBUG(fmt, ...) \ #define PATH_TED_DEBUG(fmt, ...) \
do { \ DEBUGD(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
DEBUGD(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
} while (0)
#define PATH_TED_ERROR(fmt, ...) \ #define PATH_TED_ERROR(fmt, ...) \
do { \ DEBUGE(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
DEBUGE(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
} while (0)
#define PATH_TED_WARN(fmt, ...) \ #define PATH_TED_WARN(fmt, ...) \
do { \ DEBUGW(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
DEBUGW(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
} while (0)
#define PATH_TED_INFO(fmt, ...) \ #define PATH_TED_INFO(fmt, ...) \
do { \ DEBUGI(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
DEBUGI(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
} while (0)
/* TED management functions */ /* TED management functions */
bool path_ted_is_initialized(void); bool path_ted_is_initialized(void);

View file

@ -36,12 +36,7 @@ DEFINE_HOOK(pathd_candidate_removed, (struct srte_candidate * candidate),
struct debug path_policy_debug; struct debug path_policy_debug;
#define PATH_POLICY_DEBUG(fmt, ...) \ #define PATH_POLICY_DEBUG(fmt, ...) \
do { \ DEBUGD(&path_policy_debug, "policy: " fmt, ##__VA_ARGS__)
if (DEBUG_FLAGS_CHECK(&path_policy_debug, \
PATH_POLICY_DEBUG_BASIC)) \
DEBUGD(&path_policy_debug, "policy: " fmt, \
##__VA_ARGS__); \
} while (0)
static void trigger_pathd_candidate_created(struct srte_candidate *candidate); static void trigger_pathd_candidate_created(struct srte_candidate *candidate);
@ -1283,7 +1278,7 @@ const char *srte_origin2str(enum srte_protocol_origin origin)
void path_policy_show_debugging(struct vty *vty) void path_policy_show_debugging(struct vty *vty)
{ {
if (DEBUG_FLAGS_CHECK(&path_policy_debug, PATH_POLICY_DEBUG_BASIC)) if (DEBUG_MODE_CHECK(&path_policy_debug, DEBUG_MODE_ALL))
vty_out(vty, " Path policy debugging is on\n"); vty_out(vty, " Path policy debugging is on\n");
} }

View file

@ -32,8 +32,6 @@ enum srte_protocol_origin {
extern struct debug path_policy_debug; extern struct debug path_policy_debug;
#define PATH_POLICY_DEBUG_BASIC 0x01
enum srte_policy_status { enum srte_policy_status {
SRTE_POLICY_STATUS_UNKNOWN = 0, SRTE_POLICY_STATUS_UNKNOWN = 0,
SRTE_POLICY_STATUS_DOWN = 1, SRTE_POLICY_STATUS_DOWN = 1,