blob: 7bfdb77d92c7ecb90d797532f9e3457541a52ee7 [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001/*
2 * Zebra debug related function
3 * Copyright (C) 1999 Kunihiro Ishiguro
4 *
5 * This file is part of GNU Zebra.
6 *
7 * GNU Zebra is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * GNU Zebra is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Zebra; see the file COPYING. If not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23#include <zebra.h>
24#include "command.h"
25#include "debug.h"
26
27/* For debug statement. */
28unsigned long zebra_debug_event;
29unsigned long zebra_debug_packet;
30unsigned long zebra_debug_kernel;
Paul Jakmab0498dc2006-07-27 21:35:33 +000031unsigned long zebra_debug_rib;
Avneesh Sachdev5adc2522012-11-13 22:48:59 +000032unsigned long zebra_debug_fpm;
paul718e3742002-12-13 20:15:29 +000033
34DEFUN (show_debugging_zebra,
35 show_debugging_zebra_cmd,
36 "show debugging zebra",
37 SHOW_STR
38 "Zebra configuration\n"
39 "Debugging information\n")
40{
41 vty_out (vty, "Zebra debugging status:%s", VTY_NEWLINE);
42
43 if (IS_ZEBRA_DEBUG_EVENT)
44 vty_out (vty, " Zebra event debugging is on%s", VTY_NEWLINE);
45
46 if (IS_ZEBRA_DEBUG_PACKET)
47 {
48 if (IS_ZEBRA_DEBUG_SEND && IS_ZEBRA_DEBUG_RECV)
49 {
50 vty_out (vty, " Zebra packet%s debugging is on%s",
51 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
52 VTY_NEWLINE);
53 }
54 else
55 {
56 if (IS_ZEBRA_DEBUG_SEND)
57 vty_out (vty, " Zebra packet send%s debugging is on%s",
58 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
59 VTY_NEWLINE);
60 else
61 vty_out (vty, " Zebra packet receive%s debugging is on%s",
62 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
63 VTY_NEWLINE);
64 }
65 }
66
67 if (IS_ZEBRA_DEBUG_KERNEL)
68 vty_out (vty, " Zebra kernel debugging is on%s", VTY_NEWLINE);
69
Paul Jakmab0498dc2006-07-27 21:35:33 +000070 if (IS_ZEBRA_DEBUG_RIB)
71 vty_out (vty, " Zebra RIB debugging is on%s", VTY_NEWLINE);
72 if (IS_ZEBRA_DEBUG_RIB_Q)
73 vty_out (vty, " Zebra RIB queue debugging is on%s", VTY_NEWLINE);
74
Avneesh Sachdev5adc2522012-11-13 22:48:59 +000075 if (IS_ZEBRA_DEBUG_FPM)
76 vty_out (vty, " Zebra FPM debugging is on%s", VTY_NEWLINE);
77
paul718e3742002-12-13 20:15:29 +000078 return CMD_SUCCESS;
79}
80
81DEFUN (debug_zebra_events,
82 debug_zebra_events_cmd,
83 "debug zebra events",
84 DEBUG_STR
85 "Zebra configuration\n"
86 "Debug option set for zebra events\n")
87{
88 zebra_debug_event = ZEBRA_DEBUG_EVENT;
89 return CMD_WARNING;
90}
91
92DEFUN (debug_zebra_packet,
93 debug_zebra_packet_cmd,
94 "debug zebra packet",
95 DEBUG_STR
96 "Zebra configuration\n"
97 "Debug option set for zebra packet\n")
98{
99 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
100 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
101 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
102 return CMD_SUCCESS;
103}
104
105DEFUN (debug_zebra_packet_direct,
106 debug_zebra_packet_direct_cmd,
107 "debug zebra packet (recv|send)",
108 DEBUG_STR
109 "Zebra configuration\n"
110 "Debug option set for zebra packet\n"
111 "Debug option set for receive packet\n"
112 "Debug option set for send packet\n")
113{
114 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
115 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
116 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
117 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
118 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
119 zebra_debug_packet &= ~ZEBRA_DEBUG_DETAIL;
120 return CMD_SUCCESS;
121}
122
123DEFUN (debug_zebra_packet_detail,
124 debug_zebra_packet_detail_cmd,
125 "debug zebra packet (recv|send) detail",
126 DEBUG_STR
127 "Zebra configuration\n"
128 "Debug option set for zebra packet\n"
129 "Debug option set for receive packet\n"
130 "Debug option set for send packet\n"
131 "Debug option set detaied information\n")
132{
133 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
134 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
135 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
136 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
137 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
138 zebra_debug_packet |= ZEBRA_DEBUG_DETAIL;
139 return CMD_SUCCESS;
140}
141
142DEFUN (debug_zebra_kernel,
143 debug_zebra_kernel_cmd,
144 "debug zebra kernel",
145 DEBUG_STR
146 "Zebra configuration\n"
147 "Debug option set for zebra between kernel interface\n")
148{
149 zebra_debug_kernel = ZEBRA_DEBUG_KERNEL;
150 return CMD_SUCCESS;
151}
152
Paul Jakmab0498dc2006-07-27 21:35:33 +0000153DEFUN (debug_zebra_rib,
154 debug_zebra_rib_cmd,
155 "debug zebra rib",
156 DEBUG_STR
157 "Zebra configuration\n"
158 "Debug RIB events\n")
159{
160 SET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB);
161 return CMD_SUCCESS;
162}
163
164DEFUN (debug_zebra_rib_q,
165 debug_zebra_rib_q_cmd,
166 "debug zebra rib queue",
167 DEBUG_STR
168 "Zebra configuration\n"
169 "Debug RIB events\n"
170 "Debug RIB queueing\n")
171{
172 SET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB_Q);
173 return CMD_SUCCESS;
174}
175
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000176DEFUN (debug_zebra_fpm,
177 debug_zebra_fpm_cmd,
178 "debug zebra fpm",
179 DEBUG_STR
180 "Zebra configuration\n"
181 "Debug zebra FPM events\n")
182{
183 SET_FLAG (zebra_debug_fpm, ZEBRA_DEBUG_FPM);
184 return CMD_SUCCESS;
185}
186
paul718e3742002-12-13 20:15:29 +0000187DEFUN (no_debug_zebra_events,
188 no_debug_zebra_events_cmd,
189 "no debug zebra events",
190 NO_STR
191 DEBUG_STR
192 "Zebra configuration\n"
193 "Debug option set for zebra events\n")
194{
195 zebra_debug_event = 0;
196 return CMD_SUCCESS;
197}
198
199DEFUN (no_debug_zebra_packet,
200 no_debug_zebra_packet_cmd,
201 "no debug zebra packet",
202 NO_STR
203 DEBUG_STR
204 "Zebra configuration\n"
205 "Debug option set for zebra packet\n")
206{
207 zebra_debug_packet = 0;
208 return CMD_SUCCESS;
209}
210
211DEFUN (no_debug_zebra_packet_direct,
212 no_debug_zebra_packet_direct_cmd,
213 "no debug zebra packet (recv|send)",
214 NO_STR
215 DEBUG_STR
216 "Zebra configuration\n"
217 "Debug option set for zebra packet\n"
218 "Debug option set for receive packet\n"
219 "Debug option set for send packet\n")
220{
221 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
222 zebra_debug_packet &= ~ZEBRA_DEBUG_SEND;
223 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
224 zebra_debug_packet &= ~ZEBRA_DEBUG_RECV;
225 return CMD_SUCCESS;
226}
227
228DEFUN (no_debug_zebra_kernel,
229 no_debug_zebra_kernel_cmd,
230 "no debug zebra kernel",
231 NO_STR
232 DEBUG_STR
233 "Zebra configuration\n"
234 "Debug option set for zebra between kernel interface\n")
235{
236 zebra_debug_kernel = 0;
237 return CMD_SUCCESS;
238}
239
Paul Jakmab0498dc2006-07-27 21:35:33 +0000240DEFUN (no_debug_zebra_rib,
241 no_debug_zebra_rib_cmd,
242 "no debug zebra rib",
243 NO_STR
244 DEBUG_STR
245 "Zebra configuration\n"
246 "Debug zebra RIB\n")
247{
248 zebra_debug_rib = 0;
249 return CMD_SUCCESS;
250}
251
252DEFUN (no_debug_zebra_rib_q,
253 no_debug_zebra_rib_q_cmd,
Stephen Hemmingere5248432008-08-17 18:08:24 +0100254 "no debug zebra rib queue",
Paul Jakmab0498dc2006-07-27 21:35:33 +0000255 NO_STR
256 DEBUG_STR
257 "Zebra configuration\n"
258 "Debug zebra RIB\n"
259 "Debug RIB queueing\n")
260{
261 UNSET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB_Q);
262 return CMD_SUCCESS;
263}
264
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000265DEFUN (no_debug_zebra_fpm,
266 no_debug_zebra_fpm_cmd,
267 "no debug zebra fpm",
268 NO_STR
269 DEBUG_STR
270 "Zebra configuration\n"
271 "Debug zebra FPM events\n")
272{
273 zebra_debug_fpm = 0;
274 return CMD_SUCCESS;
275}
276
paul718e3742002-12-13 20:15:29 +0000277/* Debug node. */
278struct cmd_node debug_node =
279{
280 DEBUG_NODE,
281 "", /* Debug node has no interface. */
282 1
283};
284
paula1ac18c2005-06-28 17:17:12 +0000285static int
paul718e3742002-12-13 20:15:29 +0000286config_write_debug (struct vty *vty)
287{
288 int write = 0;
289
290 if (IS_ZEBRA_DEBUG_EVENT)
291 {
292 vty_out (vty, "debug zebra events%s", VTY_NEWLINE);
293 write++;
294 }
295 if (IS_ZEBRA_DEBUG_PACKET)
296 {
297 if (IS_ZEBRA_DEBUG_SEND && IS_ZEBRA_DEBUG_RECV)
298 {
299 vty_out (vty, "debug zebra packet%s%s",
300 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
301 VTY_NEWLINE);
302 write++;
303 }
304 else
305 {
306 if (IS_ZEBRA_DEBUG_SEND)
307 vty_out (vty, "debug zebra packet send%s%s",
308 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
309 VTY_NEWLINE);
310 else
311 vty_out (vty, "debug zebra packet recv%s%s",
312 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
313 VTY_NEWLINE);
314 write++;
315 }
316 }
317 if (IS_ZEBRA_DEBUG_KERNEL)
318 {
319 vty_out (vty, "debug zebra kernel%s", VTY_NEWLINE);
320 write++;
321 }
Paul Jakmab0498dc2006-07-27 21:35:33 +0000322 if (IS_ZEBRA_DEBUG_RIB)
323 {
324 vty_out (vty, "debug zebra rib%s", VTY_NEWLINE);
325 write++;
326 }
327 if (IS_ZEBRA_DEBUG_RIB_Q)
328 {
329 vty_out (vty, "debug zebra rib queue%s", VTY_NEWLINE);
330 write++;
331 }
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000332 if (IS_ZEBRA_DEBUG_FPM)
333 {
334 vty_out (vty, "debug zebra fpm%s", VTY_NEWLINE);
335 write++;
336 }
paul718e3742002-12-13 20:15:29 +0000337 return write;
338}
339
340void
paula1ac18c2005-06-28 17:17:12 +0000341zebra_debug_init (void)
paul718e3742002-12-13 20:15:29 +0000342{
343 zebra_debug_event = 0;
344 zebra_debug_packet = 0;
Paul Jakmab0498dc2006-07-27 21:35:33 +0000345 zebra_debug_kernel = 0;
346 zebra_debug_rib = 0;
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000347 zebra_debug_fpm = 0;
paul718e3742002-12-13 20:15:29 +0000348
349 install_node (&debug_node, config_write_debug);
350
351 install_element (VIEW_NODE, &show_debugging_zebra_cmd);
352
353 install_element (ENABLE_NODE, &show_debugging_zebra_cmd);
354 install_element (ENABLE_NODE, &debug_zebra_events_cmd);
355 install_element (ENABLE_NODE, &debug_zebra_packet_cmd);
356 install_element (ENABLE_NODE, &debug_zebra_packet_direct_cmd);
357 install_element (ENABLE_NODE, &debug_zebra_packet_detail_cmd);
358 install_element (ENABLE_NODE, &debug_zebra_kernel_cmd);
Paul Jakmab0498dc2006-07-27 21:35:33 +0000359 install_element (ENABLE_NODE, &debug_zebra_rib_cmd);
360 install_element (ENABLE_NODE, &debug_zebra_rib_q_cmd);
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000361 install_element (ENABLE_NODE, &debug_zebra_fpm_cmd);
paul718e3742002-12-13 20:15:29 +0000362 install_element (ENABLE_NODE, &no_debug_zebra_events_cmd);
363 install_element (ENABLE_NODE, &no_debug_zebra_packet_cmd);
364 install_element (ENABLE_NODE, &no_debug_zebra_kernel_cmd);
Paul Jakmab0498dc2006-07-27 21:35:33 +0000365 install_element (ENABLE_NODE, &no_debug_zebra_rib_cmd);
366 install_element (ENABLE_NODE, &no_debug_zebra_rib_q_cmd);
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000367 install_element (ENABLE_NODE, &no_debug_zebra_fpm_cmd);
paul718e3742002-12-13 20:15:29 +0000368
369 install_element (CONFIG_NODE, &debug_zebra_events_cmd);
370 install_element (CONFIG_NODE, &debug_zebra_packet_cmd);
371 install_element (CONFIG_NODE, &debug_zebra_packet_direct_cmd);
372 install_element (CONFIG_NODE, &debug_zebra_packet_detail_cmd);
373 install_element (CONFIG_NODE, &debug_zebra_kernel_cmd);
Paul Jakmab0498dc2006-07-27 21:35:33 +0000374 install_element (CONFIG_NODE, &debug_zebra_rib_cmd);
375 install_element (CONFIG_NODE, &debug_zebra_rib_q_cmd);
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000376 install_element (CONFIG_NODE, &debug_zebra_fpm_cmd);
paul718e3742002-12-13 20:15:29 +0000377 install_element (CONFIG_NODE, &no_debug_zebra_events_cmd);
378 install_element (CONFIG_NODE, &no_debug_zebra_packet_cmd);
379 install_element (CONFIG_NODE, &no_debug_zebra_kernel_cmd);
Paul Jakmab0498dc2006-07-27 21:35:33 +0000380 install_element (CONFIG_NODE, &no_debug_zebra_rib_cmd);
381 install_element (CONFIG_NODE, &no_debug_zebra_rib_q_cmd);
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000382 install_element (CONFIG_NODE, &no_debug_zebra_fpm_cmd);
paul718e3742002-12-13 20:15:29 +0000383}