Import Upstream version 1.2.2
[quagga-debian.git] / ripd / rip_debug.c
1 /* RIP debug routines
2  * Copyright (C) 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
3  *
4  * This file is part of GNU Zebra.
5  *
6  * GNU Zebra 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
8  * Free Software Foundation; either version 2, or (at your option) any
9  * later version.
10  *
11  * GNU Zebra is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
18  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19  * 02111-1307, USA.  
20  */
21
22 #include <zebra.h>
23 #include "command.h"
24 #include "ripd/rip_debug.h"
25
26 /* For debug statement. */
27 unsigned long rip_debug_event = 0;
28 unsigned long rip_debug_packet = 0;
29 unsigned long rip_debug_zebra = 0;
30
31 DEFUN (show_debugging_rip,
32        show_debugging_rip_cmd,
33        "show debugging rip",
34        SHOW_STR
35        DEBUG_STR
36        RIP_STR)
37 {
38   vty_out (vty, "RIP debugging status:%s", VTY_NEWLINE);
39
40   if (IS_RIP_DEBUG_EVENT)
41     vty_out (vty, "  RIP event debugging is on%s", VTY_NEWLINE);
42
43   if (IS_RIP_DEBUG_PACKET)
44     {
45       if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV)
46         {
47           vty_out (vty, "  RIP packet debugging is on%s",
48                    VTY_NEWLINE);
49         }
50       else
51         {
52           if (IS_RIP_DEBUG_SEND)
53             vty_out (vty, "  RIP packet send debugging is on%s",
54                      VTY_NEWLINE);
55           else
56             vty_out (vty, "  RIP packet receive debugging is on%s",
57                      VTY_NEWLINE);
58         }
59     }
60
61   if (IS_RIP_DEBUG_ZEBRA)
62     vty_out (vty, "  RIP zebra debugging is on%s", VTY_NEWLINE);
63
64   return CMD_SUCCESS;
65 }
66
67 DEFUN (debug_rip_events,
68        debug_rip_events_cmd,
69        "debug rip events",
70        DEBUG_STR
71        RIP_STR
72        "RIP events\n")
73 {
74   rip_debug_event = RIP_DEBUG_EVENT;
75   return CMD_WARNING;
76 }
77
78 DEFUN (debug_rip_packet,
79        debug_rip_packet_cmd,
80        "debug rip packet",
81        DEBUG_STR
82        RIP_STR
83        "RIP packet\n")
84 {
85   rip_debug_packet = RIP_DEBUG_PACKET;
86   rip_debug_packet |= RIP_DEBUG_SEND;
87   rip_debug_packet |= RIP_DEBUG_RECV;
88   return CMD_SUCCESS;
89 }
90
91 DEFUN (debug_rip_packet_direct,
92        debug_rip_packet_direct_cmd,
93        "debug rip packet (recv|send)",
94        DEBUG_STR
95        RIP_STR
96        "RIP packet\n"
97        "RIP receive packet\n"
98        "RIP send packet\n")
99 {
100   rip_debug_packet |= RIP_DEBUG_PACKET;
101   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
102     rip_debug_packet |= RIP_DEBUG_SEND;
103   if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
104     rip_debug_packet |= RIP_DEBUG_RECV;
105   return CMD_SUCCESS;
106 }
107
108 /* N.B. the "detail" modifier is a no-op.  we leave this command
109    for legacy compatibility. */
110 DEFUN_DEPRECATED (debug_rip_packet_detail,
111        debug_rip_packet_detail_cmd,
112        "debug rip packet (recv|send) detail",
113        DEBUG_STR
114        RIP_STR
115        "RIP packet\n"
116        "RIP receive packet\n"
117        "RIP send packet\n"
118        "Detailed information display\n")
119 {
120   rip_debug_packet |= RIP_DEBUG_PACKET;
121   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
122     rip_debug_packet |= RIP_DEBUG_SEND;
123   if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
124     rip_debug_packet |= RIP_DEBUG_RECV;
125   return CMD_SUCCESS;
126 }
127
128 DEFUN (debug_rip_zebra,
129        debug_rip_zebra_cmd,
130        "debug rip zebra",
131        DEBUG_STR
132        RIP_STR
133        "RIP and ZEBRA communication\n")
134 {
135   rip_debug_zebra = RIP_DEBUG_ZEBRA;
136   return CMD_WARNING;
137 }
138
139 DEFUN (no_debug_rip_events,
140        no_debug_rip_events_cmd,
141        "no debug rip events",
142        NO_STR
143        DEBUG_STR
144        RIP_STR
145        "RIP events\n")
146 {
147   rip_debug_event = 0;
148   return CMD_SUCCESS;
149 }
150
151 DEFUN (no_debug_rip_packet,
152        no_debug_rip_packet_cmd,
153        "no debug rip packet",
154        NO_STR
155        DEBUG_STR
156        RIP_STR
157        "RIP packet\n")
158 {
159   rip_debug_packet = 0;
160   return CMD_SUCCESS;
161 }
162
163 DEFUN (no_debug_rip_packet_direct,
164        no_debug_rip_packet_direct_cmd,
165        "no debug rip packet (recv|send)",
166        NO_STR
167        DEBUG_STR
168        RIP_STR
169        "RIP packet\n"
170        "RIP option set for receive packet\n"
171        "RIP option set for send packet\n")
172 {
173   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
174     {
175       if (IS_RIP_DEBUG_RECV)
176        rip_debug_packet &= ~RIP_DEBUG_SEND;
177       else
178        rip_debug_packet = 0;
179     }
180   else if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
181     {
182       if (IS_RIP_DEBUG_SEND)
183        rip_debug_packet &= ~RIP_DEBUG_RECV;
184       else
185        rip_debug_packet = 0;
186     }
187   return CMD_SUCCESS;
188 }
189
190 DEFUN (no_debug_rip_zebra,
191        no_debug_rip_zebra_cmd,
192        "no debug rip zebra",
193        NO_STR
194        DEBUG_STR
195        RIP_STR
196        "RIP and ZEBRA communication\n")
197 {
198   rip_debug_zebra = 0;
199   return CMD_WARNING;
200 }
201
202 /* Debug node. */
203 static struct cmd_node debug_node =
204 {
205   DEBUG_NODE,
206   "",                           /* Debug node has no interface. */
207   1
208 };
209
210 static int
211 config_write_debug (struct vty *vty)
212 {
213   int write = 0;
214
215   if (IS_RIP_DEBUG_EVENT)
216     {
217       vty_out (vty, "debug rip events%s", VTY_NEWLINE);
218       write++;
219     }
220   if (IS_RIP_DEBUG_PACKET)
221     {
222       if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV)
223         {
224           vty_out (vty, "debug rip packet%s",
225                    VTY_NEWLINE);
226           write++;
227         }
228       else
229         {
230           if (IS_RIP_DEBUG_SEND)
231             vty_out (vty, "debug rip packet send%s",
232                      VTY_NEWLINE);
233           else
234             vty_out (vty, "debug rip packet recv%s",
235                      VTY_NEWLINE);
236           write++;
237         }
238     }
239   if (IS_RIP_DEBUG_ZEBRA)
240     {
241       vty_out (vty, "debug rip zebra%s", VTY_NEWLINE);
242       write++;
243     }
244   return write;
245 }
246
247 void
248 rip_debug_reset (void)
249 {
250   rip_debug_event = 0;
251   rip_debug_packet = 0;
252   rip_debug_zebra = 0;
253 }
254
255 void
256 rip_debug_init (void)
257 {
258   rip_debug_event = 0;
259   rip_debug_packet = 0;
260   rip_debug_zebra = 0;
261
262   install_node (&debug_node, config_write_debug);
263
264   install_element (ENABLE_NODE, &show_debugging_rip_cmd);
265   install_element (ENABLE_NODE, &debug_rip_events_cmd);
266   install_element (ENABLE_NODE, &debug_rip_packet_cmd);
267   install_element (ENABLE_NODE, &debug_rip_packet_direct_cmd);
268   install_element (ENABLE_NODE, &debug_rip_packet_detail_cmd);
269   install_element (ENABLE_NODE, &debug_rip_zebra_cmd);
270   install_element (ENABLE_NODE, &no_debug_rip_events_cmd);
271   install_element (ENABLE_NODE, &no_debug_rip_packet_cmd);
272   install_element (ENABLE_NODE, &no_debug_rip_packet_direct_cmd);
273   install_element (ENABLE_NODE, &no_debug_rip_zebra_cmd);
274
275   install_element (CONFIG_NODE, &debug_rip_events_cmd);
276   install_element (CONFIG_NODE, &debug_rip_packet_cmd);
277   install_element (CONFIG_NODE, &debug_rip_packet_direct_cmd);
278   install_element (CONFIG_NODE, &debug_rip_packet_detail_cmd);
279   install_element (CONFIG_NODE, &debug_rip_zebra_cmd);
280   install_element (CONFIG_NODE, &no_debug_rip_events_cmd);
281   install_element (CONFIG_NODE, &no_debug_rip_packet_cmd);
282   install_element (CONFIG_NODE, &no_debug_rip_packet_direct_cmd);
283   install_element (CONFIG_NODE, &no_debug_rip_zebra_cmd);
284 }