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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>