diff options
Diffstat (limited to 'lib/debug.c')
| -rw-r--r-- | lib/debug.c | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/lib/debug.c b/lib/debug.c index 757a47ab99..d25c32d428 100644 --- a/lib/debug.c +++ b/lib/debug.c @@ -9,42 +9,75 @@ #include "debug.h" #include "command.h" -static struct debug_cb_list_head cb_head; +static struct debug_list_head debug_head; -DECLARE_LIST(debug_cb_list, struct debug_callbacks, item); +DECLARE_LIST(debug_list, struct debug, item); /* All code in this section should be reentrant and MT-safe */ -DEFUN_NOSH(debug_all, debug_all_cmd, "[no] debug all", - NO_STR DEBUG_STR "Toggle all debugging output\n") +DEFUN_NOSH (debug_all, + debug_all_cmd, + "[no] debug all", + NO_STR DEBUG_STR + "Toggle all debugging output\n") { - struct debug_callbacks *cb; - + struct debug *debug; bool set = !strmatch(argv[0]->text, "no"); uint32_t mode = DEBUG_NODE2MODE(vty->node); - frr_each (debug_cb_list, &cb_head, cb) - cb->debug_set_all(mode, set); + frr_each (debug_list, &debug_head, debug) { + DEBUG_MODE_SET(debug, mode, set); + + /* If all modes have been turned off, don't preserve options. */ + if (!DEBUG_MODE_CHECK(debug, DEBUG_MODE_ALL)) + DEBUG_CLEAR(debug); + } return CMD_SUCCESS; } /* ------------------------------------------------------------------------- */ -void debug_init(struct debug_callbacks *cb) +void debug_status_write(struct vty *vty) +{ + struct debug *debug; + + frr_each (debug_list, &debug_head, debug) { + if (DEBUG_MODE_CHECK(debug, DEBUG_MODE_ALL)) + vty_out(vty, " %s debugging is on\n", debug->desc); + } +} + +static int config_write_debug(struct vty *vty) { - static bool inited = false; + struct debug *debug; - if (!inited) { - inited = true; - debug_cb_list_init(&cb_head); + frr_each (debug_list, &debug_head, debug) { + if (DEBUG_MODE_CHECK(debug, DEBUG_MODE_CONF)) + vty_out(vty, "%s\n", debug->conf); } - debug_cb_list_add_head(&cb_head, cb); + return 0; } -void debug_init_cli(void) +static struct cmd_node debug_node = { + .name = "debug", + .node = LIB_DEBUG_NODE, + .prompt = "", + .config_write = config_write_debug, +}; + +void debug_install(struct debug *debug) { + debug_list_add_tail(&debug_head, debug); +} + +void debug_init(void) +{ + debug_list_init(&debug_head); + + install_node(&debug_node); + install_element(ENABLE_NODE, &debug_all_cmd); install_element(CONFIG_NODE, &debug_all_cmd); } |
