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. */ 28unsigned long zebra_debug_event; 29unsigned long zebra_debug_packet; 30unsigned long zebra_debug_kernel; 31unsigned long zebra_debug_rib; 32unsigned long zebra_debug_fpm; 33 34DEFUN (show_debugging_zebra, 35 show_debugging_zebra_cmd, 36 "show debugging zebra", 37 SHOW_STR 38 "Debugging information\n" 39 "Zebra configuration\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 70 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 75 if (IS_ZEBRA_DEBUG_FPM) 76 vty_out (vty, " Zebra FPM debugging is on%s", VTY_NEWLINE); 77 78 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 detailed 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 153DEFUN (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 176DEFUN (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 187DEFUN (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 240DEFUN (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, 254 "no debug zebra rib queue", 255 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 265DEFUN (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 277/* Debug node. */ 278struct cmd_node debug_node = 279{ 280 DEBUG_NODE, 281 "", /* Debug node has no interface. */ 282 1 283}; 284 285static int 286config_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 } 322 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 } 332 if (IS_ZEBRA_DEBUG_FPM) 333 { 334 vty_out (vty, "debug zebra fpm%s", VTY_NEWLINE); 335 write++; 336 } 337 return write; 338} 339 340void 341zebra_debug_init (void) 342{ 343 zebra_debug_event = 0; 344 zebra_debug_packet = 0; 345 zebra_debug_kernel = 0; 346 zebra_debug_rib = 0; 347 zebra_debug_fpm = 0; 348 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); 359 install_element (ENABLE_NODE, &debug_zebra_rib_cmd); 360 install_element (ENABLE_NODE, &debug_zebra_rib_q_cmd); 361 install_element (ENABLE_NODE, &debug_zebra_fpm_cmd); 362 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); 365 install_element (ENABLE_NODE, &no_debug_zebra_rib_cmd); 366 install_element (ENABLE_NODE, &no_debug_zebra_rib_q_cmd); 367 install_element (ENABLE_NODE, &no_debug_zebra_fpm_cmd); 368 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); 374 install_element (CONFIG_NODE, &debug_zebra_rib_cmd); 375 install_element (CONFIG_NODE, &debug_zebra_rib_q_cmd); 376 install_element (CONFIG_NODE, &debug_zebra_fpm_cmd); 377 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); 380 install_element (CONFIG_NODE, &no_debug_zebra_rib_cmd); 381 install_element (CONFIG_NODE, &no_debug_zebra_rib_q_cmd); 382 install_element (CONFIG_NODE, &no_debug_zebra_fpm_cmd); 383} 384