Split off general commands to cmds.c.

Added `show symbols' command which dumps whole symbol table together
with symbol types etc.
This commit is contained in:
Martin Mares 2000-01-19 12:30:19 +00:00
parent f5ad9f87a3
commit 4b87e256eb
9 changed files with 101 additions and 19 deletions

16
TODO
View file

@ -21,13 +21,10 @@ Core
- netlink: import Linux route attributes to our rta's, so that they can be filtered? - netlink: import Linux route attributes to our rta's, so that they can be filtered?
- socket: Use IP_RECVERR for BGP TCP sockets?
- config: executable config files - config: executable config files
- config: when parsing prefix, check zero bits - config: when parsing prefix, check zero bits
- config: useless rules when protocols disabled - config: useless rules when protocols disabled
- config: better datetime format - config: better datetime format
- config: long disable/enable/restart sequences hang
- krt: rescan interfaces when route addition fails? - krt: rescan interfaces when route addition fails?
@ -37,11 +34,6 @@ Core
Commands Commands
~~~~~~~~ ~~~~~~~~
show <name> # show everything you know about symbol <name>
rip ??? [<name>]
ospf ??? [<name>]
static ??? [<name>]
symbols
- showing of routing table as seen by given protocol - showing of routing table as seen by given protocol
Roadmap Roadmap
@ -51,7 +43,6 @@ Roadmap
- Remaining bits of IPv6 support (radvd) - Remaining bits of IPv6 support (radvd)
- RIPv6 - RIPv6
- BGP? - BGP?
- Logging and debugging messages
Client Client
~~~~~~ ~~~~~~
@ -62,7 +53,7 @@ Documentation
- write doctool - write doctool
- write documentation :| - write documentation :|
Cleanup Globals
~~~~~~~ ~~~~~~~
- right usage of DBG vs. debug - right usage of DBG vs. debug
- cleanup debugging calls - cleanup debugging calls
@ -73,8 +64,8 @@ Cleanup
- replace all NUM, IPA and expr tokens by constant filter expressions - replace all NUM, IPA and expr tokens by constant filter expressions
- try compiling with -Wunused - try compiling with -Wunused
- does everybody test return value of sk_open? - does everybody test return value of sk_open?
- add references to RFC's we did follow - doc: references to RFC's we did follow
- protocols: implement CLI hooks - protocols: implement CLI hooks and per-procotol CLI commands
- protocols: implement reconfigure hook - protocols: implement reconfigure hook
- protocols: use locking - protocols: use locking
@ -122,3 +113,4 @@ BGP
- hold time - hold time
- idle timer after error: initial value, exponential growth, maximum value - idle timer after error: initial value, exponential growth, maximum value
- import of IGP routes (use external route tags from OSPF) - import of IGP routes (use external route tags from OSPF)
- Use IP_RECVERR for BGP TCP sockets?

View file

@ -308,3 +308,43 @@ cf_pop_scope(void)
conf_this_scope = conf_this_scope->next; conf_this_scope = conf_this_scope->next;
ASSERT(conf_this_scope); ASSERT(conf_this_scope);
} }
struct symbol *
cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos)
{
for(;;)
{
if (!sym)
{
if (*pos >= SYM_HASH_SIZE)
return NULL;
sym = cf->sym_hash[(*pos)++];
}
else
sym = sym->next;
if (sym && sym->scope->active)
return sym;
}
}
char *
cf_symbol_class_name(struct symbol *sym)
{
switch (sym->class)
{
case SYM_VOID:
return "undefined";
case SYM_PROTO:
return "protocol";
case SYM_NUMBER:
return "numeric constant";
case SYM_FUNCTION:
return "function";
case SYM_FILTER:
return "filter";
case SYM_TABLE:
return "routing table";
default:
return "unknown type";
}
}

View file

@ -94,6 +94,8 @@ struct symbol *cf_default_name(char *template, int *counter);
void cf_define_symbol(struct symbol *symbol, int type, void *def); void cf_define_symbol(struct symbol *symbol, int type, void *def);
void cf_push_scope(struct symbol *); void cf_push_scope(struct symbol *);
void cf_pop_scope(void); void cf_pop_scope(void);
struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos);
char *cf_symbol_class_name(struct symbol *sym);
/* Parser */ /* Parser */

View file

@ -32,6 +32,7 @@ Reply codes of BIRD command-line interface
1007 Route list 1007 Route list
1008 Route details 1008 Route details
1009 Static route list 1009 Static route list
1010 Symbol list
8000 Reply too long 8000 Reply too long
8001 Route not found 8001 Route not found

View file

@ -1,4 +1,4 @@
source=rt-table.c rt-fib.c rt-attr.c proto.c iface.c rt-dev.c password.c cli.c locks.c source=rt-table.c rt-fib.c rt-attr.c proto.c iface.c rt-dev.c password.c cli.c locks.c cmds.c
root-rel=../ root-rel=../
dir-name=nest dir-name=nest

View file

@ -1,7 +1,7 @@
/* /*
* BIRD Internet Routing Daemon -- Command-Line Interface * BIRD Internet Routing Daemon -- Command-Line Interface
* *
* (c) 1999 Martin Mares <mj@ucw.cz> * (c) 1999--2000 Martin Mares <mj@ucw.cz>
* *
* Can be freely distributed and used under the terms of the GNU GPL. * Can be freely distributed and used under the terms of the GNU GPL.
*/ */

35
nest/cmds.c Normal file
View file

@ -0,0 +1,35 @@
/*
* BIRD Internet Routing Daemon -- CLI Commands Which Don't Fit Anywhere Else
*
* (c) 2000 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include "nest/bird.h"
#include "nest/cli.h"
#include "conf/conf.h"
#include "nest/cmds.h"
#include "lib/string.h"
void
cmd_show_status(void)
{
cli_msg(1000, "BIRD " BIRD_VERSION);
/* FIXME: Should include uptime, shutdown flag et cetera */
}
void
cmd_show_symbols(struct symbol *sym)
{
int pos = 0;
if (sym)
cli_msg(1010, "%s\t%s", sym->name, cf_symbol_class_name(sym));
else
{
while (sym = cf_walk_symbols(config, sym, &pos))
cli_msg(-1010, "%s\t%s", sym->name, cf_symbol_class_name(sym));
cli_msg(0, "");
}
}

10
nest/cmds.h Normal file
View file

@ -0,0 +1,10 @@
/*
* BIRD Internet Routing Daemon -- CLI Commands Which Don't Fit Anywhere Else
*
* (c) 2000 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
void cmd_show_status(void);
void cmd_show_symbols(struct symbol *sym);

View file

@ -1,7 +1,7 @@
/* /*
* BIRD -- Core Configuration * BIRD -- Core Configuration
* *
* (c) 1998--1999 Martin Mares <mj@ucw.cz> * (c) 1998--2000 Martin Mares <mj@ucw.cz>
* *
* Can be freely distributed and used under the terms of the GNU GPL. * Can be freely distributed and used under the terms of the GNU GPL.
*/ */
@ -13,6 +13,7 @@ static struct iface_patt *this_ipatt;
#include "nest/rt-dev.h" #include "nest/rt-dev.h"
#include "nest/password.h" #include "nest/password.h"
#include "nest/cmds.h"
CF_DECLS CF_DECLS
@ -193,10 +194,8 @@ password_list:
CF_CLI_HELP(SHOW,,[[Show status information]]) CF_CLI_HELP(SHOW,,[[Show status information]])
CF_CLI(SHOW STATUS,,, [[Show router status]]) { CF_CLI(SHOW STATUS,,, [[Show router status]])
cli_msg(1000, "BIRD " BIRD_VERSION); { cmd_show_status(); }
/* FIXME: Should include uptime, shutdown flag et cetera */
} ;
CF_CLI(SHOW PROTOCOLS, optsym, [<name>], [[Show routing protocols]]) CF_CLI(SHOW PROTOCOLS, optsym, [<name>], [[Show routing protocols]])
{ proto_show($3, 0); } ; { proto_show($3, 0); } ;
@ -253,6 +252,9 @@ r_args:
} }
; ;
CF_CLI(SHOW SYMBOLS, optsym, [<symbol>], [[Show all known symbolic names]])
{ cmd_show_symbols($3); } ;
CF_CLI_HELP(DEBUG, <subsystem>, [[Show debugging information]]) CF_CLI_HELP(DEBUG, <subsystem>, [[Show debugging information]])
CF_CLI(DEBUG RESOURCES,,, [[Show all allocated resource]]) CF_CLI(DEBUG RESOURCES,,, [[Show all allocated resource]])
{ rdump(&root_pool); cli_msg(0, ""); } ; { rdump(&root_pool); cli_msg(0, ""); } ;