/src/frr/bgpd/rfapi/vnc_debug.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | /* |
3 | | * |
4 | | * Copyright 2016, LabN Consulting, L.L.C. |
5 | | */ |
6 | | |
7 | | #include "lib/zebra.h" |
8 | | |
9 | | #include "lib/prefix.h" |
10 | | #include "lib/linklist.h" |
11 | | #include "lib/stream.h" |
12 | | #include "lib/command.h" |
13 | | #include "lib/log.h" |
14 | | #include "bgpd/rfapi/vnc_debug.h" |
15 | | |
16 | | /* |
17 | | * debug state storage |
18 | | */ |
19 | | unsigned long conf_vnc_debug; |
20 | | unsigned long term_vnc_debug; |
21 | | |
22 | | struct vnc_debug { |
23 | | unsigned long bit; |
24 | | const char *name; |
25 | | }; |
26 | | |
27 | | static const struct vnc_debug vncdebug[] = { |
28 | | {VNC_DEBUG_RFAPI_QUERY, "rfapi-query"}, |
29 | | {VNC_DEBUG_IMPORT_BI_ATTACH, "import-bi-attach"}, |
30 | | {VNC_DEBUG_IMPORT_DEL_REMOTE, "import-del-remote"}, |
31 | | {VNC_DEBUG_EXPORT_BGP_GETCE, "export-bgp-getce"}, |
32 | | {VNC_DEBUG_EXPORT_BGP_DIRECT_ADD, "export-bgp-direct-add"}, |
33 | | {VNC_DEBUG_IMPORT_BGP_ADD_ROUTE, "import-bgp-add-route"}, |
34 | | {VNC_DEBUG_VERBOSE, "verbose"}, |
35 | | }; |
36 | | |
37 | | #define VNC_STR "VNC information\n" |
38 | | |
39 | | /*********************************************************************** |
40 | | * debug bgp vnc <foo> |
41 | | ***********************************************************************/ |
42 | | DEFUN (debug_bgp_vnc, |
43 | | debug_bgp_vnc_cmd, |
44 | | "debug bgp vnc <rfapi-query|import-bi-attach|import-del-remote|verbose>", |
45 | | DEBUG_STR |
46 | | BGP_STR |
47 | | VNC_STR |
48 | | "rfapi query handling\n" |
49 | | "import BI atachment\n" |
50 | | "import delete remote routes\n" |
51 | | "verbose logging\n") |
52 | 0 | { |
53 | 0 | size_t i; |
54 | |
|
55 | 0 | for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) { |
56 | 0 | if (strmatch(argv[3]->text, vncdebug[i].name)) { |
57 | 0 | if (vty->node == CONFIG_NODE) { |
58 | 0 | conf_vnc_debug |= vncdebug[i].bit; |
59 | 0 | term_vnc_debug |= vncdebug[i].bit; |
60 | 0 | } else { |
61 | 0 | term_vnc_debug |= vncdebug[i].bit; |
62 | 0 | vty_out(vty, "BGP vnc %s debugging is on\n", |
63 | 0 | vncdebug[i].name); |
64 | 0 | } |
65 | 0 | return CMD_SUCCESS; |
66 | 0 | } |
67 | 0 | } |
68 | 0 | vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg); |
69 | 0 | return CMD_WARNING_CONFIG_FAILED; |
70 | 0 | } |
71 | | |
72 | | DEFUN (no_debug_bgp_vnc, |
73 | | no_debug_bgp_vnc_cmd, |
74 | | "no debug bgp vnc <rfapi-query|import-bi-attach|import-del-remote|verbose>", |
75 | | NO_STR |
76 | | DEBUG_STR |
77 | | BGP_STR |
78 | | VNC_STR |
79 | | "rfapi query handling\n" |
80 | | "import BI atachment\n" |
81 | | "import delete remote routes\n" |
82 | | "verbose logging\n") |
83 | 0 | { |
84 | 0 | size_t i; |
85 | |
|
86 | 0 | for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) { |
87 | 0 | if (strmatch(argv[argc - 1]->text, vncdebug[i].name)) { |
88 | 0 | if (vty->node == CONFIG_NODE) { |
89 | 0 | conf_vnc_debug &= ~vncdebug[i].bit; |
90 | 0 | term_vnc_debug &= ~vncdebug[i].bit; |
91 | 0 | } else { |
92 | 0 | term_vnc_debug &= ~vncdebug[i].bit; |
93 | 0 | vty_out(vty, "BGP vnc %s debugging is off\n", |
94 | 0 | vncdebug[i].name); |
95 | 0 | } |
96 | 0 | return CMD_SUCCESS; |
97 | 0 | } |
98 | 0 | } |
99 | 0 | vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg); |
100 | 0 | return CMD_WARNING_CONFIG_FAILED; |
101 | 0 | } |
102 | | |
103 | | /*********************************************************************** |
104 | | * no debug bgp vnc all |
105 | | ***********************************************************************/ |
106 | | |
107 | | DEFUN (no_debug_bgp_vnc_all, |
108 | | no_debug_bgp_vnc_all_cmd, |
109 | | "no debug all bgp vnc", |
110 | | NO_STR |
111 | | DEBUG_STR |
112 | | "Disable all VNC debugging\n" |
113 | | BGP_STR |
114 | | VNC_STR) |
115 | 0 | { |
116 | 0 | term_vnc_debug = 0; |
117 | 0 | vty_out(vty, "All possible VNC debugging has been turned off\n"); |
118 | |
|
119 | 0 | return CMD_SUCCESS; |
120 | 0 | } |
121 | | |
122 | | /*********************************************************************** |
123 | | * show/save |
124 | | ***********************************************************************/ |
125 | | |
126 | | DEFUN_NOSH (show_debugging_bgp_vnc, |
127 | | show_debugging_bgp_vnc_cmd, |
128 | | "show debugging bgp vnc", |
129 | | SHOW_STR |
130 | | DEBUG_STR |
131 | | BGP_STR |
132 | | VNC_STR) |
133 | 0 | { |
134 | 0 | size_t i; |
135 | |
|
136 | 0 | vty_out(vty, "BGP VNC debugging status:\n"); |
137 | |
|
138 | 0 | for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) { |
139 | 0 | if (term_vnc_debug & vncdebug[i].bit) { |
140 | 0 | vty_out(vty, " BGP VNC %s debugging is on\n", |
141 | 0 | vncdebug[i].name); |
142 | 0 | } |
143 | 0 | } |
144 | 0 | vty_out(vty, "\n"); |
145 | 0 | return CMD_SUCCESS; |
146 | 0 | } |
147 | | |
148 | | static int bgp_vnc_config_write_debug(struct vty *vty) |
149 | 0 | { |
150 | 0 | int write = 0; |
151 | 0 | size_t i; |
152 | |
|
153 | 0 | for (i = 0; i < array_size(vncdebug); ++i) { |
154 | 0 | if (conf_vnc_debug & vncdebug[i].bit) { |
155 | 0 | vty_out(vty, "debug bgp vnc %s\n", vncdebug[i].name); |
156 | 0 | write++; |
157 | 0 | } |
158 | 0 | } |
159 | 0 | return write; |
160 | 0 | } |
161 | | |
162 | | static int bgp_vnc_config_write_debug(struct vty *vty); |
163 | | static struct cmd_node debug_node = { |
164 | | .name = "vnc debug", |
165 | | .node = DEBUG_VNC_NODE, |
166 | | .prompt = "", |
167 | | .config_write = bgp_vnc_config_write_debug, |
168 | | }; |
169 | | |
170 | | void vnc_debug_init(void) |
171 | 0 | { |
172 | 0 | install_node(&debug_node); |
173 | 0 | install_element(ENABLE_NODE, &show_debugging_bgp_vnc_cmd); |
174 | |
|
175 | 0 | install_element(ENABLE_NODE, &debug_bgp_vnc_cmd); |
176 | 0 | install_element(CONFIG_NODE, &debug_bgp_vnc_cmd); |
177 | 0 | install_element(ENABLE_NODE, &no_debug_bgp_vnc_cmd); |
178 | 0 | install_element(CONFIG_NODE, &no_debug_bgp_vnc_cmd); |
179 | |
|
180 | 0 | install_element(ENABLE_NODE, &no_debug_bgp_vnc_all_cmd); |
181 | 0 | install_element(CONFIG_NODE, &no_debug_bgp_vnc_all_cmd); |
182 | 0 | } |