rip_debug.c
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:7k
源码类别:

网络

开发平台:

Unix_Linux

  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. #include <zebra.h>
  22. #include "command.h"
  23. #include "ripd/rip_debug.h"
  24. /* For debug statement. */
  25. unsigned long rip_debug_event = 0;
  26. unsigned long rip_debug_packet = 0;
  27. unsigned long rip_debug_zebra = 0;
  28. DEFUN (debug_rip_events,
  29.        debug_rip_events_cmd,
  30.        "debug rip events",
  31.        DEBUG_STR
  32.        RIP_STR
  33.        "RIP eventsn")
  34. {
  35.   rip_debug_event = RIP_DEBUG_EVENT;
  36.   return CMD_WARNING;
  37. }
  38. DEFUN (debug_rip_packet,
  39.        debug_rip_packet_cmd,
  40.        "debug rip packet",
  41.        DEBUG_STR
  42.        RIP_STR
  43.        "RIP packetn")
  44. {
  45.   rip_debug_packet = RIP_DEBUG_PACKET;
  46.   rip_debug_packet |= RIP_DEBUG_SEND;
  47.   rip_debug_packet |= RIP_DEBUG_RECV;
  48.   return CMD_SUCCESS;
  49. }
  50. DEFUN (debug_rip_packet_direct,
  51.        debug_rip_packet_direct_cmd,
  52.        "debug rip packet (recv|send)",
  53.        DEBUG_STR
  54.        RIP_STR
  55.        "RIP packetn"
  56.        "RIP receive packetn"
  57.        "RIP send packetn")
  58. {
  59.   rip_debug_packet |= RIP_DEBUG_PACKET;
  60.   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
  61.     rip_debug_packet |= RIP_DEBUG_SEND;
  62.   if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
  63.     rip_debug_packet |= RIP_DEBUG_RECV;
  64.   rip_debug_packet &= ~RIP_DEBUG_DETAIL;
  65.   return CMD_SUCCESS;
  66. }
  67. DEFUN (debug_rip_packet_detail,
  68.        debug_rip_packet_detail_cmd,
  69.        "debug rip packet (recv|send) detail",
  70.        DEBUG_STR
  71.        RIP_STR
  72.        "RIP packetn"
  73.        "RIP receive packetn"
  74.        "RIP send packetn"
  75.        "Detailed information displayn")
  76. {
  77.   rip_debug_packet |= RIP_DEBUG_PACKET;
  78.   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
  79.     rip_debug_packet |= RIP_DEBUG_SEND;
  80.   if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
  81.     rip_debug_packet |= RIP_DEBUG_RECV;
  82.   rip_debug_packet |= RIP_DEBUG_DETAIL;
  83.   return CMD_SUCCESS;
  84. }
  85. DEFUN (debug_rip_zebra,
  86.        debug_rip_zebra_cmd,
  87.        "debug rip zebra",
  88.        DEBUG_STR
  89.        RIP_STR
  90.        "RIP and ZEBRA communicationn")
  91. {
  92.   rip_debug_zebra = RIP_DEBUG_ZEBRA;
  93.   return CMD_WARNING;
  94. }
  95. DEFUN (no_debug_rip_events,
  96.        no_debug_rip_events_cmd,
  97.        "no debug rip events",
  98.        NO_STR
  99.        DEBUG_STR
  100.        RIP_STR
  101.        "RIP eventsn")
  102. {
  103.   rip_debug_event = 0;
  104.   return CMD_SUCCESS;
  105. }
  106. DEFUN (no_debug_rip_packet,
  107.        no_debug_rip_packet_cmd,
  108.        "no debug rip packet",
  109.        NO_STR
  110.        DEBUG_STR
  111.        RIP_STR
  112.        "RIP packetn")
  113. {
  114.   rip_debug_packet = 0;
  115.   return CMD_SUCCESS;
  116. }
  117. DEFUN (no_debug_rip_packet_direct,
  118.        no_debug_rip_packet_direct_cmd,
  119.        "no debug rip packet (recv|send)",
  120.        NO_STR
  121.        DEBUG_STR
  122.        RIP_STR
  123.        "RIP packetn"
  124.        "RIP option set for receive packetn"
  125.        "RIP option set for send packetn")
  126. {
  127.   if (strncmp ("send", argv[0], strlen (argv[0])) == 0)
  128.     {
  129.       if (IS_RIP_DEBUG_RECV)
  130. rip_debug_packet &= ~RIP_DEBUG_SEND;
  131.       else
  132. rip_debug_packet = 0;
  133.     }
  134.   else if (strncmp ("recv", argv[0], strlen (argv[0])) == 0)
  135.     {
  136.       if (IS_RIP_DEBUG_SEND)
  137. rip_debug_packet &= ~RIP_DEBUG_RECV;
  138.       else
  139. rip_debug_packet = 0;
  140.     }
  141.   return CMD_SUCCESS;
  142. }
  143. DEFUN (no_debug_rip_zebra,
  144.        no_debug_rip_zebra_cmd,
  145.        "no debug rip zebra",
  146.        NO_STR
  147.        DEBUG_STR
  148.        RIP_STR
  149.        "RIP and ZEBRA communicationn")
  150. {
  151.   rip_debug_zebra = 0;
  152.   return CMD_WARNING;
  153. }
  154. DEFUN (show_debugging_rip,
  155.        show_debugging_rip_cmd,
  156.        "show debugging rip",
  157.        SHOW_STR
  158.        DEBUG_STR
  159.        RIP_STR)
  160. {
  161.   vty_out (vty, "Zebra debugging status:%s", VTY_NEWLINE);
  162.   if (IS_RIP_DEBUG_EVENT)
  163.     vty_out (vty, "  RIP event debugging is on%s", VTY_NEWLINE);
  164.   if (IS_RIP_DEBUG_PACKET)
  165.     {
  166.       if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV)
  167. {
  168.   vty_out (vty, "  RIP packet%s debugging is on%s",
  169.    IS_RIP_DEBUG_DETAIL ? " detail" : "",
  170.    VTY_NEWLINE);
  171. }
  172.       else
  173. {
  174.   if (IS_RIP_DEBUG_SEND)
  175.     vty_out (vty, "  RIP packet send%s debugging is on%s",
  176.      IS_RIP_DEBUG_DETAIL ? " detail" : "",
  177.      VTY_NEWLINE);
  178.   else
  179.     vty_out (vty, "  RIP packet receive%s debugging is on%s",
  180.      IS_RIP_DEBUG_DETAIL ? " detail" : "",
  181.      VTY_NEWLINE);
  182. }
  183.     }
  184.   if (IS_RIP_DEBUG_ZEBRA)
  185.     vty_out (vty, "  RIP zebra debugging is on%s", VTY_NEWLINE);
  186.   return CMD_SUCCESS;
  187. }
  188. /* Debug node. */
  189. struct cmd_node debug_node =
  190.   {
  191.     DEBUG_NODE,
  192.     "", /* Debug node has no interface. */
  193.     1
  194.   };
  195. int
  196. config_write_debug (struct vty *vty)
  197. {
  198.   int write = 0;
  199.   if (IS_RIP_DEBUG_EVENT)
  200.     {
  201.       vty_out (vty, "debug rip events%s", VTY_NEWLINE);
  202.       write++;
  203.     }
  204.   if (IS_RIP_DEBUG_PACKET)
  205.     {
  206.       if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV)
  207. {
  208.   vty_out (vty, "debug rip packet%s%s",
  209.    IS_RIP_DEBUG_DETAIL ? " detail" : "",
  210.    VTY_NEWLINE);
  211.   write++;
  212. }
  213.       else
  214. {
  215.   if (IS_RIP_DEBUG_SEND)
  216.     vty_out (vty, "debug rip packet send%s%s",
  217.      IS_RIP_DEBUG_DETAIL ? " detail" : "",
  218.      VTY_NEWLINE);
  219.   else
  220.     vty_out (vty, "debug rip packet recv%s%s",
  221.      IS_RIP_DEBUG_DETAIL ? " detail" : "",
  222.      VTY_NEWLINE);
  223.   write++;
  224. }
  225.     }
  226.   if (IS_RIP_DEBUG_ZEBRA)
  227.     {
  228.       vty_out (vty, "debug rip zebra%s", VTY_NEWLINE);
  229.       write++;
  230.     }
  231.   return write;
  232. }
  233. void
  234. rip_debug_reset ()
  235. {
  236.   rip_debug_event = 0;
  237.   rip_debug_packet = 0;
  238.   rip_debug_zebra = 0;
  239. }
  240. void
  241. rip_debug_init ()
  242. {
  243.   rip_debug_event = 0;
  244.   rip_debug_packet = 0;
  245.   rip_debug_zebra = 0;
  246.   install_node (&debug_node, config_write_debug);
  247.   install_element (ENABLE_NODE, &debug_rip_events_cmd);
  248.   install_element (ENABLE_NODE, &debug_rip_packet_cmd);
  249.   install_element (ENABLE_NODE, &debug_rip_packet_direct_cmd);
  250.   install_element (ENABLE_NODE, &debug_rip_packet_detail_cmd);
  251.   install_element (ENABLE_NODE, &debug_rip_zebra_cmd);
  252.   install_element (ENABLE_NODE, &no_debug_rip_events_cmd);
  253.   install_element (ENABLE_NODE, &no_debug_rip_packet_cmd);
  254.   install_element (ENABLE_NODE, &no_debug_rip_packet_direct_cmd);
  255.   install_element (ENABLE_NODE, &no_debug_rip_zebra_cmd);
  256.   install_element (CONFIG_NODE, &debug_rip_events_cmd);
  257.   install_element (CONFIG_NODE, &debug_rip_packet_cmd);
  258.   install_element (CONFIG_NODE, &debug_rip_packet_direct_cmd);
  259.   install_element (CONFIG_NODE, &debug_rip_packet_detail_cmd);
  260.   install_element (CONFIG_NODE, &debug_rip_zebra_cmd);
  261.   install_element (CONFIG_NODE, &no_debug_rip_events_cmd);
  262.   install_element (CONFIG_NODE, &no_debug_rip_packet_cmd);
  263.   install_element (CONFIG_NODE, &no_debug_rip_packet_direct_cmd);
  264.   install_element (CONFIG_NODE, &no_debug_rip_zebra_cmd);
  265.   install_element (ENABLE_NODE, &show_debugging_rip_cmd);
  266. }