1/* 2 * RIPng debug output routines 3 * Copyright (C) 1998 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 Free 19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 20 * 02111-1307, USA. 21 */ 22 23#include <zebra.h> 24#include "command.h" 25#include "ripngd/ripng_debug.h" 26 27/* For debug statement. */ 28unsigned long ripng_debug_event = 0; 29unsigned long ripng_debug_packet = 0; 30unsigned long ripng_debug_zebra = 0; 31 32DEFUN (show_debugging_ripng, 33 show_debugging_ripng_cmd, 34 "show debugging ripng", 35 SHOW_STR 36 "RIPng configuration\n" 37 "Debugging information\n") 38{ 39 vty_out (vty, "Zebra debugging status:%s", VTY_NEWLINE); 40 41 if (IS_RIPNG_DEBUG_EVENT) 42 vty_out (vty, " RIPng event debugging is on%s", VTY_NEWLINE); 43 44 if (IS_RIPNG_DEBUG_PACKET) 45 { 46 if (IS_RIPNG_DEBUG_SEND && IS_RIPNG_DEBUG_RECV) 47 { 48 vty_out (vty, " RIPng packet%s debugging is on%s", 49 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 50 VTY_NEWLINE); 51 } 52 else 53 { 54 if (IS_RIPNG_DEBUG_SEND) 55 vty_out (vty, " RIPng packet send%s debugging is on%s", 56 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 57 VTY_NEWLINE); 58 else 59 vty_out (vty, " RIPng packet receive%s debugging is on%s", 60 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 61 VTY_NEWLINE); 62 } 63 } 64 65 if (IS_RIPNG_DEBUG_ZEBRA) 66 vty_out (vty, " RIPng zebra debugging is on%s", VTY_NEWLINE); 67 68 return CMD_SUCCESS; 69} 70 71DEFUN (debug_ripng_events, 72 debug_ripng_events_cmd, 73 "debug ripng events", 74 DEBUG_STR 75 "RIPng configuration\n" 76 "Debug option set for ripng events\n") 77{ 78 ripng_debug_event = RIPNG_DEBUG_EVENT; 79 return CMD_WARNING; 80} 81 82DEFUN (debug_ripng_packet, 83 debug_ripng_packet_cmd, 84 "debug ripng packet", 85 DEBUG_STR 86 "RIPng configuration\n" 87 "Debug option set for ripng packet\n") 88{ 89 ripng_debug_packet = RIPNG_DEBUG_PACKET; 90 ripng_debug_packet |= RIPNG_DEBUG_SEND; 91 ripng_debug_packet |= RIPNG_DEBUG_RECV; 92 return CMD_SUCCESS; 93} 94 95DEFUN (debug_ripng_packet_direct, 96 debug_ripng_packet_direct_cmd, 97 "debug ripng packet (recv|send)", 98 DEBUG_STR 99 "RIPng configuration\n" 100 "Debug option set for ripng packet\n" 101 "Debug option set for receive packet\n" 102 "Debug option set for send packet\n") 103{ 104 ripng_debug_packet |= RIPNG_DEBUG_PACKET; 105 if (strncmp ("send", argv[0], strlen (argv[0])) == 0) 106 ripng_debug_packet |= RIPNG_DEBUG_SEND; 107 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) 108 ripng_debug_packet |= RIPNG_DEBUG_RECV; 109 ripng_debug_packet &= ~RIPNG_DEBUG_DETAIL; 110 return CMD_SUCCESS; 111} 112 113DEFUN (debug_ripng_packet_detail, 114 debug_ripng_packet_detail_cmd, 115 "debug ripng packet (recv|send) detail", 116 DEBUG_STR 117 "RIPng configuration\n" 118 "Debug option set for ripng packet\n" 119 "Debug option set for receive packet\n" 120 "Debug option set for send packet\n" 121 "Debug option set detaied information\n") 122{ 123 ripng_debug_packet |= RIPNG_DEBUG_PACKET; 124 if (strncmp ("send", argv[0], strlen (argv[0])) == 0) 125 ripng_debug_packet |= RIPNG_DEBUG_SEND; 126 if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) 127 ripng_debug_packet |= RIPNG_DEBUG_RECV; 128 ripng_debug_packet |= RIPNG_DEBUG_DETAIL; 129 return CMD_SUCCESS; 130} 131 132DEFUN (debug_ripng_zebra, 133 debug_ripng_zebra_cmd, 134 "debug ripng zebra", 135 DEBUG_STR 136 "RIPng configuration\n" 137 "Debug option set for ripng and zebra communication\n") 138{ 139 ripng_debug_zebra = RIPNG_DEBUG_ZEBRA; 140 return CMD_WARNING; 141} 142 143DEFUN (no_debug_ripng_events, 144 no_debug_ripng_events_cmd, 145 "no debug ripng events", 146 NO_STR 147 DEBUG_STR 148 "RIPng configuration\n" 149 "Debug option set for ripng events\n") 150{ 151 ripng_debug_event = 0; 152 return CMD_SUCCESS; 153} 154 155DEFUN (no_debug_ripng_packet, 156 no_debug_ripng_packet_cmd, 157 "no debug ripng packet", 158 NO_STR 159 DEBUG_STR 160 "RIPng configuration\n" 161 "Debug option set for ripng packet\n") 162{ 163 ripng_debug_packet = 0; 164 return CMD_SUCCESS; 165} 166 167DEFUN (no_debug_ripng_packet_direct, 168 no_debug_ripng_packet_direct_cmd, 169 "no debug ripng packet (recv|send)", 170 NO_STR 171 DEBUG_STR 172 "RIPng configuration\n" 173 "Debug option set for ripng packet\n" 174 "Debug option set for receive packet\n" 175 "Debug option set for send packet\n") 176{ 177 if (strncmp ("send", argv[0], strlen (argv[0])) == 0) 178 { 179 if (IS_RIPNG_DEBUG_RECV) 180 ripng_debug_packet &= ~RIPNG_DEBUG_SEND; 181 else 182 ripng_debug_packet = 0; 183 } 184 else if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) 185 { 186 if (IS_RIPNG_DEBUG_SEND) 187 ripng_debug_packet &= ~RIPNG_DEBUG_RECV; 188 else 189 ripng_debug_packet = 0; 190 } 191 return CMD_SUCCESS; 192} 193 194DEFUN (no_debug_ripng_zebra, 195 no_debug_ripng_zebra_cmd, 196 "no debug ripng zebra", 197 NO_STR 198 DEBUG_STR 199 "RIPng configuration\n" 200 "Debug option set for ripng and zebra communication\n") 201{ 202 ripng_debug_zebra = 0; 203 return CMD_WARNING; 204} 205 206/* Debug node. */ 207struct cmd_node debug_node = 208{ 209 DEBUG_NODE, 210 "" /* Debug node has no interface. */ 211}; 212 213int 214config_write_debug (struct vty *vty) 215{ 216 int write = 0; 217 218 if (IS_RIPNG_DEBUG_EVENT) 219 { 220 vty_out (vty, "debug ripng events%s", VTY_NEWLINE); 221 write++; 222 } 223 if (IS_RIPNG_DEBUG_PACKET) 224 { 225 if (IS_RIPNG_DEBUG_SEND && IS_RIPNG_DEBUG_RECV) 226 { 227 vty_out (vty, "debug ripng packet%s%s", 228 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 229 VTY_NEWLINE); 230 write++; 231 } 232 else 233 { 234 if (IS_RIPNG_DEBUG_SEND) 235 vty_out (vty, "debug ripng packet send%s%s", 236 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 237 VTY_NEWLINE); 238 else 239 vty_out (vty, "debug ripng packet recv%s%s", 240 IS_RIPNG_DEBUG_DETAIL ? " detail" : "", 241 VTY_NEWLINE); 242 write++; 243 } 244 } 245 if (IS_RIPNG_DEBUG_ZEBRA) 246 { 247 vty_out (vty, "debug ripng zebra%s", VTY_NEWLINE); 248 write++; 249 } 250 return write; 251} 252 253void 254ripng_debug_reset () 255{ 256 ripng_debug_event = 0; 257 ripng_debug_packet = 0; 258 ripng_debug_zebra = 0; 259} 260 261void 262ripng_debug_init () 263{ 264 ripng_debug_event = 0; 265 ripng_debug_packet = 0; 266 ripng_debug_zebra = 0; 267 268 install_node (&debug_node, config_write_debug); 269 270 install_element (VIEW_NODE, &show_debugging_ripng_cmd); 271 272 install_element (ENABLE_NODE, &show_debugging_ripng_cmd); 273 install_element (ENABLE_NODE, &debug_ripng_events_cmd); 274 install_element (ENABLE_NODE, &debug_ripng_packet_cmd); 275 install_element (ENABLE_NODE, &debug_ripng_packet_direct_cmd); 276 install_element (ENABLE_NODE, &debug_ripng_packet_detail_cmd); 277 install_element (ENABLE_NODE, &debug_ripng_zebra_cmd); 278 install_element (ENABLE_NODE, &no_debug_ripng_events_cmd); 279 install_element (ENABLE_NODE, &no_debug_ripng_packet_cmd); 280 install_element (ENABLE_NODE, &no_debug_ripng_packet_direct_cmd); 281 install_element (ENABLE_NODE, &no_debug_ripng_zebra_cmd); 282 283 install_element (CONFIG_NODE, &debug_ripng_events_cmd); 284 install_element (CONFIG_NODE, &debug_ripng_packet_cmd); 285 install_element (CONFIG_NODE, &debug_ripng_packet_direct_cmd); 286 install_element (CONFIG_NODE, &debug_ripng_packet_detail_cmd); 287 install_element (CONFIG_NODE, &debug_ripng_zebra_cmd); 288 install_element (CONFIG_NODE, &no_debug_ripng_events_cmd); 289 install_element (CONFIG_NODE, &no_debug_ripng_packet_cmd); 290 install_element (CONFIG_NODE, &no_debug_ripng_packet_direct_cmd); 291 install_element (CONFIG_NODE, &no_debug_ripng_zebra_cmd); 292} 293