babeld: justify "running-config" meaning in CLI

The primary focus of this commit is to make "show running-config"
command display more current configuration, including some of the bits
previously seen in the output of "show babel running-config". Besides
that, the following commands were renamed for consistency with the
syntax of other components:

"debug *" to "debug babel *" (and moved to top level)
"show babel running-config" to "show babel parameters"

* babel_interface.c
  * show_babel_running_config(): rename to show_babel_parameters(),
    update syntax pattern, don't call show_babeld_configuration()
  * babel_if_init(): update respectively
  * babel_enable_if_config_write(): new VTY helper for static
    babel_enable_if
* babel_interface.h: add extern declaration
* babel_main.c: unset all debug options by default
  * show_babel_main_configuration(): remove debug options decoder
* babel_zebra.c
  * babel_debug(): rename to debug_babel(), update syntax pattern
  * no_babel_debug(): rename to no_debug_babel(), update syntax pattern
  * babelz_zebra_init(): update respectively
  * debug_babel_config_write() new VTY helper for static debug_type
* babel_zebra.h: add extern declaration
* babeld.c
  * babel_config_write(): add the code to output "debug babel *",
    "router babel", "redistribute *" and "network *" statements
  * show_babeld_configuration(): dismiss
* babeld.h: remove extern declaration
* babeld.texi: update for renamed commands
* babeld.conf.sample: idem, add debug statements block
This commit is contained in:
Denis Ovsienko 2012-02-11 21:06:16 +04:00 committed by Paul Jakma
parent ce590ecd85
commit a14ef5eecc
9 changed files with 111 additions and 53 deletions

View File

@ -877,9 +877,9 @@ DEFUN (show_babel_database,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFUN (show_babel_running_config, DEFUN (show_babel_parameters,
show_babel_running_config_cmd, show_babel_parameters_cmd,
"show babel running-config", "show babel parameters",
SHOW_STR SHOW_STR
IP_STR IP_STR
"Babel information\n" "Babel information\n"
@ -888,7 +888,6 @@ DEFUN (show_babel_running_config,
{ {
vty_out(vty, " -- Babel running configuration --%s", VTY_NEWLINE); vty_out(vty, " -- Babel running configuration --%s", VTY_NEWLINE);
show_babel_main_configuration(vty); show_babel_main_configuration(vty);
show_babeld_configuration(vty);
vty_out(vty, " -- distribution lists --%s", VTY_NEWLINE); vty_out(vty, " -- distribution lists --%s", VTY_NEWLINE);
config_show_distribute(vty); config_show_distribute(vty);
@ -931,8 +930,8 @@ babel_if_init ()
install_element(ENABLE_NODE, &show_babel_neighbour_cmd); install_element(ENABLE_NODE, &show_babel_neighbour_cmd);
install_element(VIEW_NODE, &show_babel_database_cmd); install_element(VIEW_NODE, &show_babel_database_cmd);
install_element(ENABLE_NODE, &show_babel_database_cmd); install_element(ENABLE_NODE, &show_babel_database_cmd);
install_element(VIEW_NODE, &show_babel_running_config_cmd); install_element(VIEW_NODE, &show_babel_parameters_cmd);
install_element(ENABLE_NODE, &show_babel_running_config_cmd); install_element(ENABLE_NODE, &show_babel_parameters_cmd);
} }
/* hooks: functions called respectively when struct interface is /* hooks: functions called respectively when struct interface is
@ -980,6 +979,22 @@ interface_config_write (struct vty *vty)
return write; return write;
} }
/* Output a "network" statement line for each of the enabled interfaces. */
int
babel_enable_if_config_write (struct vty * vty)
{
unsigned int i, lines = 0;
char *str;
for (i = 0; i < vector_active (babel_enable_if); i++)
if ((str = vector_slot (babel_enable_if, i)) != NULL)
{
vty_out (vty, " network %s%s", str, VTY_NEWLINE);
lines++;
}
return lines;
}
/* functions to allocate or free memory for a babel_interface_nfo, filling /* functions to allocate or free memory for a babel_interface_nfo, filling
needed fields */ needed fields */
static babel_interface_nfo * static babel_interface_nfo *

View File

@ -41,6 +41,7 @@ THE SOFTWARE.
#include <zebra.h> #include <zebra.h>
#include "zclient.h" #include "zclient.h"
#include "vty.h"
#define CONFIG_DEFAULT 0 #define CONFIG_DEFAULT 0
#define CONFIG_NO 1 #define CONFIG_NO 1
@ -147,6 +148,7 @@ unsigned update_jitter(babel_interface_nfo *babel_ifp, int urgent);
int is_interface_ll_address(struct interface *ifp, const unsigned char *address); int is_interface_ll_address(struct interface *ifp, const unsigned char *address);
/* Send retraction to all, and reset all interfaces statistics. */ /* Send retraction to all, and reset all interfaces statistics. */
void babel_interface_close_all(void); void babel_interface_close_all(void);
extern int babel_enable_if_config_write (struct vty *);
#endif #endif

View File

@ -77,7 +77,7 @@ struct thread_master *master; /* quagga's threads handler */
struct timeval babel_now; /* current time */ struct timeval babel_now; /* current time */
unsigned char myid[8]; /* unique id (mac address of an interface) */ unsigned char myid[8]; /* unique id (mac address of an interface) */
int debug = BABEL_DEBUG_COMMON; int debug = 0;
int default_wireless_hello_interval = -1; int default_wireless_hello_interval = -1;
int default_wired_hello_interval = -1; int default_wired_hello_interval = -1;
@ -523,30 +523,6 @@ babel_save_state_file(void)
void void
show_babel_main_configuration (struct vty *vty) show_babel_main_configuration (struct vty *vty)
{ {
#ifdef NO_DEBUG
vty_out(vty, "No debug.%s", VTY_NEWLINE);
#else
vty_out(vty, "Activated debug options:");
if (debug == BABEL_DEBUG_ALL) {
vty_out(vty, " all%s", VTY_NEWLINE);
} else {
vty_out(vty, "%s%s%s%s%s%s%s%s%s%s%s%s%s",
debug & BABEL_DEBUG_COMMON ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_COMMON ? " common" : "",
debug & BABEL_DEBUG_KERNEL ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_KERNEL ? " kernel" : "",
debug & BABEL_DEBUG_FILTER ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_FILTER ? " filter" : "",
debug & BABEL_DEBUG_TIMEOUT ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_TIMEOUT ? " timeout" : "",
debug & BABEL_DEBUG_IF ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_IF ? " interface": "",
debug & BABEL_DEBUG_ROUTE ? VTY_NEWLINE : "",
debug & BABEL_DEBUG_ROUTE ? " route" : "",
VTY_NEWLINE);
}
#endif
vty_out(vty, vty_out(vty,
"pid file = %s%s" "pid file = %s%s"
"state file = %s%s" "state file = %s%s"

View File

@ -236,10 +236,11 @@ DEFUN (no_babel_redistribute_type,
#ifndef NO_DEBUG #ifndef NO_DEBUG
/* [Babel Command] */ /* [Babel Command] */
DEFUN (babel_debug, DEFUN (debug_babel,
babel_debug_cmd, debug_babel_cmd,
"debug (common|kernel|filter|timeout|interface|route|all)", "debug babel (common|kernel|filter|timeout|interface|route|all)",
"Enable debug messages for specific or all part.\n" "Enable debug messages for specific or all part.\n"
"Babel information\n"
"Common messages (default)\n" "Common messages (default)\n"
"Kernel messages\n" "Kernel messages\n"
"Filter messages\n" "Filter messages\n"
@ -264,11 +265,12 @@ DEFUN (babel_debug,
} }
/* [Babel Command] */ /* [Babel Command] */
DEFUN (no_babel_debug, DEFUN (no_debug_babel,
no_babel_debug_cmd, no_debug_babel_cmd,
"no debug (common|kernel|filter|timeout|interface|route|all)", "no debug babel (common|kernel|filter|timeout|interface|route|all)",
NO_STR NO_STR
"Disable debug messages for specific or all part.\n" "Disable debug messages for specific or all part.\n"
"Babel information\n"
"Common messages (default)\n" "Common messages (default)\n"
"Kernel messages\n" "Kernel messages\n"
"Filter messages\n" "Filter messages\n"
@ -293,6 +295,39 @@ DEFUN (no_babel_debug,
} }
#endif /* NO_DEBUG */ #endif /* NO_DEBUG */
/* Output "debug" statement lines, if necessary. */
int
debug_babel_config_write (struct vty * vty)
{
#ifdef NO_DEBUG
return 0;
#else
int i, lines = 0;
if (debug == BABEL_DEBUG_ALL)
{
vty_out (vty, "debug babel all%s", VTY_NEWLINE);
lines++;
}
else
for (i = 0; debug_type[i].str != NULL; i++)
if
(
debug_type[i].type != BABEL_DEBUG_ALL
&& CHECK_FLAG (debug, debug_type[i].type)
)
{
vty_out (vty, "debug babel %s%s", debug_type[i].str, VTY_NEWLINE);
lines++;
}
if (lines)
{
vty_out (vty, "!%s", VTY_NEWLINE);
lines++;
}
return lines;
#endif /* NO_DEBUG */
}
void babelz_zebra_init(void) void babelz_zebra_init(void)
{ {
@ -313,8 +348,10 @@ void babelz_zebra_init(void)
install_node (&zebra_node, zebra_config_write); install_node (&zebra_node, zebra_config_write);
install_element(BABEL_NODE, &babel_redistribute_type_cmd); install_element(BABEL_NODE, &babel_redistribute_type_cmd);
install_element(BABEL_NODE, &no_babel_redistribute_type_cmd); install_element(BABEL_NODE, &no_babel_redistribute_type_cmd);
install_element(BABEL_NODE, &babel_debug_cmd); install_element(ENABLE_NODE, &debug_babel_cmd);
install_element(BABEL_NODE, &no_babel_debug_cmd); install_element(ENABLE_NODE, &no_debug_babel_cmd);
install_element(CONFIG_NODE, &debug_babel_cmd);
install_element(CONFIG_NODE, &no_debug_babel_cmd);
} }
static int static int

View File

@ -36,8 +36,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
*/ */
#ifndef BABEL_ZEBRA_H
#define BABEL_ZEBRA_H
#include "vty.h"
extern struct zclient *zclient; extern struct zclient *zclient;
void babelz_zebra_init(void); void babelz_zebra_init(void);
void babel_zebra_close_connexion(void); void babel_zebra_close_connexion(void);
extern int debug_babel_config_write (struct vty *);
#endif

View File

@ -59,6 +59,7 @@ THE SOFTWARE.
#include "message.h" #include "message.h"
#include "resend.h" #include "resend.h"
#include "babel_filter.h" #include "babel_filter.h"
#include "babel_zebra.h"
static int babel_init_routing_process(struct thread *thread); static int babel_init_routing_process(struct thread *thread);
@ -92,7 +93,26 @@ static struct cmd_node cmd_babel_node =
static int static int
babel_config_write (struct vty *vty) babel_config_write (struct vty *vty)
{ {
return 0; int lines = 0;
int i;
/* list enabled debug modes */
lines += debug_babel_config_write (vty);
if (!babel_routing_process)
return lines;
vty_out (vty, "router babel%s", VTY_NEWLINE);
/* list enabled interfaces */
lines = 1 + babel_enable_if_config_write (vty);
/* list redistributed protocols */
for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
if (i != zclient->redist_default && zclient->redist[i])
{
vty_out (vty, " redistribute %s%s", zebra_route_string (i), VTY_NEWLINE);
lines++;
}
return lines;
} }
@ -701,9 +721,3 @@ redistribute_filter(const unsigned char *prefix, unsigned short plen,
return 0; return 0;
} }
void
show_babeld_configuration (struct vty *vty)
{
vty_out(vty, "babeld running process %s.%s",
babel_routing_process ? "enable" : "disable", VTY_NEWLINE);
}

View File

@ -1,13 +1,21 @@
debug babel common
!debug babel kernel
!debug babel filter
!debug babel timeout
!debug babel interface
!debug babel route
!debug babel all
router babel router babel
! network eth0 ! network eth0
! redistribute kernel ! redistribute kernel
! no redistribute static ! no redistribute static
!interface eth0 !interface eth0
! wired ! babel wired
! wireless ! babel wireless
! babel split-horizon ! babel split-horizon
! no babel split-horizon ! no babel split-horizon
! log file /var/log/quagga/babeld.log ! log file /var/log/quagga/babeld.log
log stdout log stdout

View File

@ -132,7 +132,6 @@ extern int redistribute_filter(const unsigned char *prefix, unsigned short plen,
unsigned int ifindex, int proto); unsigned int ifindex, int proto);
extern int resize_receive_buffer(int size); extern int resize_receive_buffer(int size);
extern void schedule_neighbours_check(int msecs, int override); extern void schedule_neighbours_check(int msecs, int override);
extern void show_babeld_configuration (struct vty *vty);
#endif /* BABEL_BABELD_H */ #endif /* BABEL_BABELD_H */

View File

@ -109,7 +109,7 @@ Specify which kind of routes should be redistributed into Babel.
@deffn {Command} {show babel database} {} @deffn {Command} {show babel database} {}
@deffnx {Command} {show babel interface} {} @deffnx {Command} {show babel interface} {}
@deffnx {Command} {show babel neighbour} {} @deffnx {Command} {show babel neighbour} {}
@deffnx {Command} {show babel running-config} {} @deffnx {Command} {show babel parameters} {}
These commands dump various parts of @command{babeld}'s internal These commands dump various parts of @command{babeld}'s internal
state. They are mostly useful for troubleshooting. state. They are mostly useful for troubleshooting.
@end deffn @end deffn
@ -117,8 +117,8 @@ state. They are mostly useful for troubleshooting.
@node Babel debugging commands, , Show Babel information, Babel @node Babel debugging commands, , Show Babel information, Babel
@section Babel debugging commands @section Babel debugging commands
@deffn {Babel Command} {debug @var{kind}} {} @deffn {Babel Command} {debug babel @var{kind}} {}
@deffnx {Babel Command} {no debug @var{kind}} {} @deffnx {Babel Command} {no debug babel @var{kind}} {}
Enable or disable debugging messages of a given kind. @var{kind} can Enable or disable debugging messages of a given kind. @var{kind} can
be one of @samp{common}, @samp{kernel}, @samp{filter}, @samp{timeout}, be one of @samp{common}, @samp{kernel}, @samp{filter}, @samp{timeout},
@samp{interface}, @samp{route} or @samp{all}. Note that if you have @samp{interface}, @samp{route} or @samp{all}. Note that if you have