diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-05-24 20:09:01 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-05-28 17:07:04 -0400 |
| commit | f756a869aeefec55c31d54e1dff4b9c116532512 (patch) | |
| tree | 982df68b1d6e8eac843273f3812a413b012ed14e /lib/debug.c | |
| parent | dcdc27095a2e2d26a62ffed85c9c6231ee954bed (diff) | |
lib: Make the debug callbacks a list of callbacks
Allow multiple callers to initialize themselves to receive
callbacks for debug on/off operations.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'lib/debug.c')
| -rw-r--r-- | lib/debug.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/lib/debug.c b/lib/debug.c index 72fd4648ee..a39623b039 100644 --- a/lib/debug.c +++ b/lib/debug.c @@ -18,29 +18,43 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <zebra.h> +#include "typesafe.h" #include "debug.h" #include "command.h" -static const struct debug_callbacks *callbacks; +static struct debug_cb_list_head cb_head; + +DECLARE_LIST(debug_cb_list, struct debug_callbacks, 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") { + struct debug_callbacks *cb; + bool set = !strmatch(argv[0]->text, "no"); uint32_t mode = DEBUG_NODE2MODE(vty->node); - if (callbacks->debug_set_all) - callbacks->debug_set_all(mode, set); + frr_each (debug_cb_list, &cb_head, cb) + cb->debug_set_all(mode, set); + return CMD_SUCCESS; } /* ------------------------------------------------------------------------- */ -void debug_init(const struct debug_callbacks *cb) +void debug_init(struct debug_callbacks *cb) { - callbacks = cb; + static bool inited = false; + + if (!inited) { + inited = true; + debug_cb_list_init(&cb_head); + } + + debug_cb_list_add_head(&cb_head, cb); + install_element(ENABLE_NODE, &debug_all_cmd); install_element(CONFIG_NODE, &debug_all_cmd); } |
