]> git.proxmox.com Git - mirror_frr.git/blob - zebra/debug.c
zebra: Display uptime of Babel routes in show ip[v6] route.
[mirror_frr.git] / zebra / debug.c
1 /*
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. */
28 unsigned long zebra_debug_event;
29 unsigned long zebra_debug_packet;
30 unsigned long zebra_debug_kernel;
31 unsigned long zebra_debug_rib;
32
33 DEFUN (show_debugging_zebra,
34 show_debugging_zebra_cmd,
35 "show debugging zebra",
36 SHOW_STR
37 "Zebra configuration\n"
38 "Debugging information\n")
39 {
40 vty_out (vty, "Zebra debugging status:%s", VTY_NEWLINE);
41
42 if (IS_ZEBRA_DEBUG_EVENT)
43 vty_out (vty, " Zebra event debugging is on%s", VTY_NEWLINE);
44
45 if (IS_ZEBRA_DEBUG_PACKET)
46 {
47 if (IS_ZEBRA_DEBUG_SEND && IS_ZEBRA_DEBUG_RECV)
48 {
49 vty_out (vty, " Zebra packet%s debugging is on%s",
50 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
51 VTY_NEWLINE);
52 }
53 else
54 {
55 if (IS_ZEBRA_DEBUG_SEND)
56 vty_out (vty, " Zebra packet send%s debugging is on%s",
57 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
58 VTY_NEWLINE);
59 else
60 vty_out (vty, " Zebra packet receive%s debugging is on%s",
61 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
62 VTY_NEWLINE);
63 }
64 }
65
66 if (IS_ZEBRA_DEBUG_KERNEL)
67 vty_out (vty, " Zebra kernel debugging is on%s", VTY_NEWLINE);
68
69 if (IS_ZEBRA_DEBUG_RIB)
70 vty_out (vty, " Zebra RIB debugging is on%s", VTY_NEWLINE);
71 if (IS_ZEBRA_DEBUG_RIB_Q)
72 vty_out (vty, " Zebra RIB queue debugging is on%s", VTY_NEWLINE);
73
74 return CMD_SUCCESS;
75 }
76
77 DEFUN (debug_zebra_events,
78 debug_zebra_events_cmd,
79 "debug zebra events",
80 DEBUG_STR
81 "Zebra configuration\n"
82 "Debug option set for zebra events\n")
83 {
84 zebra_debug_event = ZEBRA_DEBUG_EVENT;
85 return CMD_WARNING;
86 }
87
88 DEFUN (debug_zebra_packet,
89 debug_zebra_packet_cmd,
90 "debug zebra packet",
91 DEBUG_STR
92 "Zebra configuration\n"
93 "Debug option set for zebra packet\n")
94 {
95 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
96 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
97 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
98 return CMD_SUCCESS;
99 }
100
101 DEFUN (debug_zebra_packet_direct,
102 debug_zebra_packet_direct_cmd,
103 "debug zebra packet (recv|send)",
104 DEBUG_STR
105 "Zebra configuration\n"
106 "Debug option set for zebra packet\n"
107 "Debug option set for receive packet\n"
108 "Debug option set for send packet\n")
109 {
110 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
111 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
112 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
113 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
114 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
115 zebra_debug_packet &= ~ZEBRA_DEBUG_DETAIL;
116 return CMD_SUCCESS;
117 }
118
119 DEFUN (debug_zebra_packet_detail,
120 debug_zebra_packet_detail_cmd,
121 "debug zebra packet (recv|send) detail",
122 DEBUG_STR
123 "Zebra configuration\n"
124 "Debug option set for zebra packet\n"
125 "Debug option set for receive packet\n"
126 "Debug option set for send packet\n"
127 "Debug option set detaied information\n")
128 {
129 zebra_debug_packet = ZEBRA_DEBUG_PACKET;
130 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
131 zebra_debug_packet |= ZEBRA_DEBUG_SEND;
132 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
133 zebra_debug_packet |= ZEBRA_DEBUG_RECV;
134 zebra_debug_packet |= ZEBRA_DEBUG_DETAIL;
135 return CMD_SUCCESS;
136 }
137
138 DEFUN (debug_zebra_kernel,
139 debug_zebra_kernel_cmd,
140 "debug zebra kernel",
141 DEBUG_STR
142 "Zebra configuration\n"
143 "Debug option set for zebra between kernel interface\n")
144 {
145 zebra_debug_kernel = ZEBRA_DEBUG_KERNEL;
146 return CMD_SUCCESS;
147 }
148
149 DEFUN (debug_zebra_rib,
150 debug_zebra_rib_cmd,
151 "debug zebra rib",
152 DEBUG_STR
153 "Zebra configuration\n"
154 "Debug RIB events\n")
155 {
156 SET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB);
157 return CMD_SUCCESS;
158 }
159
160 DEFUN (debug_zebra_rib_q,
161 debug_zebra_rib_q_cmd,
162 "debug zebra rib queue",
163 DEBUG_STR
164 "Zebra configuration\n"
165 "Debug RIB events\n"
166 "Debug RIB queueing\n")
167 {
168 SET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB_Q);
169 return CMD_SUCCESS;
170 }
171
172 DEFUN (no_debug_zebra_events,
173 no_debug_zebra_events_cmd,
174 "no debug zebra events",
175 NO_STR
176 DEBUG_STR
177 "Zebra configuration\n"
178 "Debug option set for zebra events\n")
179 {
180 zebra_debug_event = 0;
181 return CMD_SUCCESS;
182 }
183
184 DEFUN (no_debug_zebra_packet,
185 no_debug_zebra_packet_cmd,
186 "no debug zebra packet",
187 NO_STR
188 DEBUG_STR
189 "Zebra configuration\n"
190 "Debug option set for zebra packet\n")
191 {
192 zebra_debug_packet = 0;
193 return CMD_SUCCESS;
194 }
195
196 DEFUN (no_debug_zebra_packet_direct,
197 no_debug_zebra_packet_direct_cmd,
198 "no debug zebra packet (recv|send)",
199 NO_STR
200 DEBUG_STR
201 "Zebra configuration\n"
202 "Debug option set for zebra packet\n"
203 "Debug option set for receive packet\n"
204 "Debug option set for send packet\n")
205 {
206 if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
207 zebra_debug_packet &= ~ZEBRA_DEBUG_SEND;
208 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
209 zebra_debug_packet &= ~ZEBRA_DEBUG_RECV;
210 return CMD_SUCCESS;
211 }
212
213 DEFUN (no_debug_zebra_kernel,
214 no_debug_zebra_kernel_cmd,
215 "no debug zebra kernel",
216 NO_STR
217 DEBUG_STR
218 "Zebra configuration\n"
219 "Debug option set for zebra between kernel interface\n")
220 {
221 zebra_debug_kernel = 0;
222 return CMD_SUCCESS;
223 }
224
225 DEFUN (no_debug_zebra_rib,
226 no_debug_zebra_rib_cmd,
227 "no debug zebra rib",
228 NO_STR
229 DEBUG_STR
230 "Zebra configuration\n"
231 "Debug zebra RIB\n")
232 {
233 zebra_debug_rib = 0;
234 return CMD_SUCCESS;
235 }
236
237 DEFUN (no_debug_zebra_rib_q,
238 no_debug_zebra_rib_q_cmd,
239 "no debug zebra rib queue",
240 NO_STR
241 DEBUG_STR
242 "Zebra configuration\n"
243 "Debug zebra RIB\n"
244 "Debug RIB queueing\n")
245 {
246 UNSET_FLAG (zebra_debug_rib, ZEBRA_DEBUG_RIB_Q);
247 return CMD_SUCCESS;
248 }
249
250 /* Debug node. */
251 struct cmd_node debug_node =
252 {
253 DEBUG_NODE,
254 "", /* Debug node has no interface. */
255 1
256 };
257
258 static int
259 config_write_debug (struct vty *vty)
260 {
261 int write = 0;
262
263 if (IS_ZEBRA_DEBUG_EVENT)
264 {
265 vty_out (vty, "debug zebra events%s", VTY_NEWLINE);
266 write++;
267 }
268 if (IS_ZEBRA_DEBUG_PACKET)
269 {
270 if (IS_ZEBRA_DEBUG_SEND && IS_ZEBRA_DEBUG_RECV)
271 {
272 vty_out (vty, "debug zebra packet%s%s",
273 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
274 VTY_NEWLINE);
275 write++;
276 }
277 else
278 {
279 if (IS_ZEBRA_DEBUG_SEND)
280 vty_out (vty, "debug zebra packet send%s%s",
281 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
282 VTY_NEWLINE);
283 else
284 vty_out (vty, "debug zebra packet recv%s%s",
285 IS_ZEBRA_DEBUG_DETAIL ? " detail" : "",
286 VTY_NEWLINE);
287 write++;
288 }
289 }
290 if (IS_ZEBRA_DEBUG_KERNEL)
291 {
292 vty_out (vty, "debug zebra kernel%s", VTY_NEWLINE);
293 write++;
294 }
295 if (IS_ZEBRA_DEBUG_RIB)
296 {
297 vty_out (vty, "debug zebra rib%s", VTY_NEWLINE);
298 write++;
299 }
300 if (IS_ZEBRA_DEBUG_RIB_Q)
301 {
302 vty_out (vty, "debug zebra rib queue%s", VTY_NEWLINE);
303 write++;
304 }
305 return write;
306 }
307
308 void
309 zebra_debug_init (void)
310 {
311 zebra_debug_event = 0;
312 zebra_debug_packet = 0;
313 zebra_debug_kernel = 0;
314 zebra_debug_rib = 0;
315
316 install_node (&debug_node, config_write_debug);
317
318 install_element (VIEW_NODE, &show_debugging_zebra_cmd);
319
320 install_element (ENABLE_NODE, &show_debugging_zebra_cmd);
321 install_element (ENABLE_NODE, &debug_zebra_events_cmd);
322 install_element (ENABLE_NODE, &debug_zebra_packet_cmd);
323 install_element (ENABLE_NODE, &debug_zebra_packet_direct_cmd);
324 install_element (ENABLE_NODE, &debug_zebra_packet_detail_cmd);
325 install_element (ENABLE_NODE, &debug_zebra_kernel_cmd);
326 install_element (ENABLE_NODE, &debug_zebra_rib_cmd);
327 install_element (ENABLE_NODE, &debug_zebra_rib_q_cmd);
328 install_element (ENABLE_NODE, &no_debug_zebra_events_cmd);
329 install_element (ENABLE_NODE, &no_debug_zebra_packet_cmd);
330 install_element (ENABLE_NODE, &no_debug_zebra_kernel_cmd);
331 install_element (ENABLE_NODE, &no_debug_zebra_rib_cmd);
332 install_element (ENABLE_NODE, &no_debug_zebra_rib_q_cmd);
333
334 install_element (CONFIG_NODE, &debug_zebra_events_cmd);
335 install_element (CONFIG_NODE, &debug_zebra_packet_cmd);
336 install_element (CONFIG_NODE, &debug_zebra_packet_direct_cmd);
337 install_element (CONFIG_NODE, &debug_zebra_packet_detail_cmd);
338 install_element (CONFIG_NODE, &debug_zebra_kernel_cmd);
339 install_element (CONFIG_NODE, &debug_zebra_rib_cmd);
340 install_element (CONFIG_NODE, &debug_zebra_rib_q_cmd);
341 install_element (CONFIG_NODE, &no_debug_zebra_events_cmd);
342 install_element (CONFIG_NODE, &no_debug_zebra_packet_cmd);
343 install_element (CONFIG_NODE, &no_debug_zebra_kernel_cmd);
344 install_element (CONFIG_NODE, &no_debug_zebra_rib_cmd);
345 install_element (CONFIG_NODE, &no_debug_zebra_rib_q_cmd);
346 }