Line data Source code
1 : /*
2 : * Debugging utilities.
3 : * Copyright (C) 2018 Cumulus Networks, Inc.
4 : * Quentin Young
5 : *
6 : * This program is free software; you can redistribute it and/or modify it
7 : * under the terms of the GNU General Public License as published by the Free
8 : * Software Foundation; either version 2 of the License, or (at your option)
9 : * any later version.
10 : *
11 : * This program is distributed in the hope that it will be useful, but WITHOUT
12 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 : * more details.
15 : *
16 : * You should have received a copy of the GNU General Public License along
17 : * with this program; see the file COPYING; if not, write to the Free Software
18 : * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 : */
20 : #include <zebra.h>
21 : #include "typesafe.h"
22 : #include "debug.h"
23 : #include "command.h"
24 :
25 : static struct debug_cb_list_head cb_head;
26 :
27 0 : DECLARE_LIST(debug_cb_list, struct debug_callbacks, item);
28 :
29 : /* All code in this section should be reentrant and MT-safe */
30 :
31 0 : DEFUN_NOSH(debug_all, debug_all_cmd, "[no] debug all",
32 : NO_STR DEBUG_STR "Toggle all debugging output\n")
33 : {
34 0 : struct debug_callbacks *cb;
35 :
36 0 : bool set = !strmatch(argv[0]->text, "no");
37 0 : uint32_t mode = DEBUG_NODE2MODE(vty->node);
38 :
39 0 : frr_each (debug_cb_list, &cb_head, cb)
40 0 : cb->debug_set_all(mode, set);
41 :
42 0 : return CMD_SUCCESS;
43 : }
44 :
45 : /* ------------------------------------------------------------------------- */
46 :
47 12 : void debug_init(struct debug_callbacks *cb)
48 : {
49 12 : static bool inited = false;
50 :
51 12 : if (!inited) {
52 12 : inited = true;
53 12 : debug_cb_list_init(&cb_head);
54 : }
55 :
56 12 : debug_cb_list_add_head(&cb_head, cb);
57 12 : }
58 :
59 12 : void debug_init_cli(void)
60 : {
61 12 : install_element(ENABLE_NODE, &debug_all_cmd);
62 12 : install_element(CONFIG_NODE, &debug_all_cmd);
63 12 : }
|