From 4b87e256eba51a8711c24fbae501ac7975b4ecd3 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 19 Jan 2000 12:30:19 +0000 Subject: [PATCH] Split off general commands to cmds.c. Added `show symbols' command which dumps whole symbol table together with symbol types etc. --- TODO | 16 ++++------------ conf/cf-lex.l | 40 ++++++++++++++++++++++++++++++++++++++++ conf/conf.h | 2 ++ doc/reply_codes | 1 + nest/Makefile | 2 +- nest/cli.h | 2 +- nest/cmds.c | 35 +++++++++++++++++++++++++++++++++++ nest/cmds.h | 10 ++++++++++ nest/config.Y | 12 +++++++----- 9 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 nest/cmds.c create mode 100644 nest/cmds.h diff --git a/TODO b/TODO index 2b752ac3..b9ba13fd 100644 --- a/TODO +++ b/TODO @@ -21,13 +21,10 @@ Core - 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: when parsing prefix, check zero bits - config: useless rules when protocols disabled - config: better datetime format -- config: long disable/enable/restart sequences hang - krt: rescan interfaces when route addition fails? @@ -37,11 +34,6 @@ Core Commands ~~~~~~~~ -show # show everything you know about symbol - rip ??? [] - ospf ??? [] - static ??? [] - symbols - showing of routing table as seen by given protocol Roadmap @@ -51,7 +43,6 @@ Roadmap - Remaining bits of IPv6 support (radvd) - RIPv6 - BGP? -- Logging and debugging messages Client ~~~~~~ @@ -62,7 +53,7 @@ Documentation - write doctool - write documentation :| -Cleanup +Globals ~~~~~~~ - right usage of DBG vs. debug - cleanup debugging calls @@ -73,8 +64,8 @@ Cleanup - replace all NUM, IPA and expr tokens by constant filter expressions - try compiling with -Wunused - does everybody test return value of sk_open? -- add references to RFC's we did follow -- protocols: implement CLI hooks +- doc: references to RFC's we did follow +- protocols: implement CLI hooks and per-procotol CLI commands - protocols: implement reconfigure hook - protocols: use locking @@ -122,3 +113,4 @@ BGP - hold time - idle timer after error: initial value, exponential growth, maximum value - import of IGP routes (use external route tags from OSPF) + - Use IP_RECVERR for BGP TCP sockets? diff --git a/conf/cf-lex.l b/conf/cf-lex.l index df0f3c1d..a54cdd99 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -308,3 +308,43 @@ cf_pop_scope(void) conf_this_scope = conf_this_scope->next; 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"; + } +} diff --git a/conf/conf.h b/conf/conf.h index 178cdb6e..5b80b0dd 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -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_push_scope(struct symbol *); 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 */ diff --git a/doc/reply_codes b/doc/reply_codes index b6a1c045..711c6342 100644 --- a/doc/reply_codes +++ b/doc/reply_codes @@ -32,6 +32,7 @@ Reply codes of BIRD command-line interface 1007 Route list 1008 Route details 1009 Static route list +1010 Symbol list 8000 Reply too long 8001 Route not found diff --git a/nest/Makefile b/nest/Makefile index 69bc06c3..b9cb69b0 100644 --- a/nest/Makefile +++ b/nest/Makefile @@ -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=../ dir-name=nest diff --git a/nest/cli.h b/nest/cli.h index 3375f213..2e76db76 100644 --- a/nest/cli.h +++ b/nest/cli.h @@ -1,7 +1,7 @@ /* * BIRD Internet Routing Daemon -- Command-Line Interface * - * (c) 1999 Martin Mares + * (c) 1999--2000 Martin Mares * * Can be freely distributed and used under the terms of the GNU GPL. */ diff --git a/nest/cmds.c b/nest/cmds.c new file mode 100644 index 00000000..c4443f93 --- /dev/null +++ b/nest/cmds.c @@ -0,0 +1,35 @@ +/* + * BIRD Internet Routing Daemon -- CLI Commands Which Don't Fit Anywhere Else + * + * (c) 2000 Martin Mares + * + * 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, ""); + } +} diff --git a/nest/cmds.h b/nest/cmds.h new file mode 100644 index 00000000..ae1c9e2e --- /dev/null +++ b/nest/cmds.h @@ -0,0 +1,10 @@ +/* + * BIRD Internet Routing Daemon -- CLI Commands Which Don't Fit Anywhere Else + * + * (c) 2000 Martin Mares + * + * 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); diff --git a/nest/config.Y b/nest/config.Y index 4bccc166..d5fdc4e1 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -1,7 +1,7 @@ /* * BIRD -- Core Configuration * - * (c) 1998--1999 Martin Mares + * (c) 1998--2000 Martin Mares * * 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/password.h" +#include "nest/cmds.h" CF_DECLS @@ -193,10 +194,8 @@ password_list: CF_CLI_HELP(SHOW,,[[Show status information]]) -CF_CLI(SHOW STATUS,,, [[Show router status]]) { - cli_msg(1000, "BIRD " BIRD_VERSION); - /* FIXME: Should include uptime, shutdown flag et cetera */ -} ; +CF_CLI(SHOW STATUS,,, [[Show router status]]) +{ cmd_show_status(); } CF_CLI(SHOW PROTOCOLS, optsym, [], [[Show routing protocols]]) { proto_show($3, 0); } ; @@ -253,6 +252,9 @@ r_args: } ; +CF_CLI(SHOW SYMBOLS, optsym, [], [[Show all known symbolic names]]) +{ cmd_show_symbols($3); } ; + CF_CLI_HELP(DEBUG, , [[Show debugging information]]) CF_CLI(DEBUG RESOURCES,,, [[Show all allocated resource]]) { rdump(&root_pool); cli_msg(0, ""); } ;