File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / zebra / debug.c
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
CVS tags: MAIN, HEAD
Initial revision

    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>