diff options
-rw-r--r-- | conf/confbase.Y | 1 | ||||
-rw-r--r-- | doc/bird.sgml | 2 | ||||
-rw-r--r-- | nest/cmds.c | 13 | ||||
-rw-r--r-- | nest/cmds.h | 7 | ||||
-rw-r--r-- | nest/config.Y | 15 |
5 files changed, 32 insertions, 6 deletions
diff --git a/conf/confbase.Y b/conf/confbase.Y index b952f314..b9bc048e 100644 --- a/conf/confbase.Y +++ b/conf/confbase.Y @@ -50,6 +50,7 @@ CF_DECLS struct f_path_mask *h; struct password_item *p; struct rt_show_data *ra; + struct sym_show_data *sd; struct lsadb_show_data *ld; struct iface *iface; void *g; diff --git a/doc/bird.sgml b/doc/bird.sgml index f5cfdfb1..aabb9857 100644 --- a/doc/bird.sgml +++ b/doc/bird.sgml @@ -570,7 +570,7 @@ This argument can be omitted if there exists only a single instance. <tag>show interfaces [summary]</tag> Show the list of interfaces. For each interface, print its type, state, MTU and addresses assigned. - <tag>show symbols</tag> + <tag>show symbols [table|filter|function|protocol|template|<symbol>]</tag> Show the list of symbols defined in the configuration (names of protocols, routing tables etc.). <tag>show route [[for] <m/prefix/|<m/IP/] [table <m/sym/] [filter <m/f/|where <m/c/] [(export|preexport) <m/p/] [protocol <m/p/] [<m/options/]</tag> diff --git a/nest/cmds.c b/nest/cmds.c index 8ac32096..62d7c9b4 100644 --- a/nest/cmds.c +++ b/nest/cmds.c @@ -7,6 +7,7 @@ */ #include "nest/bird.h" +#include "nest/route.h" #include "nest/cli.h" #include "conf/conf.h" #include "nest/cmds.h" @@ -35,16 +36,22 @@ cmd_show_status(void) } void -cmd_show_symbols(struct symbol *sym) +cmd_show_symbols(struct sym_show_data *sd) { int pos = 0; + struct symbol *sym = sd->sym; if (sym) - cli_msg(1010, "%s\t%s", sym->name, cf_symbol_class_name(sym)); + cli_msg(1010, "%-8s\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)); + { + if (sd->type && (sym->class != sd->type)) + continue; + + cli_msg(-1010, "%-8s\t%s", sym->name, cf_symbol_class_name(sym)); + } cli_msg(0, ""); } } diff --git a/nest/cmds.h b/nest/cmds.h index 3b86a924..8b0bff7e 100644 --- a/nest/cmds.h +++ b/nest/cmds.h @@ -6,6 +6,11 @@ * Can be freely distributed and used under the terms of the GNU GPL. */ +struct sym_show_data { + int type; /* Symbols type to show */ + struct symbol *sym; +}; + void cmd_show_status(void); -void cmd_show_symbols(struct symbol *sym); +void cmd_show_symbols(struct sym_show_data *sym); void cmd_show_memory(void); diff --git a/nest/config.Y b/nest/config.Y index 3fcfa528..f6795df4 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -59,6 +59,7 @@ CF_ENUM(T_ENUM_RTD, RTD_, ROUTER, DEVICE, BLACKHOLE, UNREACHABLE, PROHIBIT, MULT %type <r> rtable %type <s> optsym %type <ra> r_args +%type <sd> sym_args %type <i> proto_start echo_mask echo_size debug_mask debug_list debug_flag mrtdump_mask mrtdump_list mrtdump_flag export_or_preexport %type <ps> proto_patt proto_patt2 @@ -432,9 +433,21 @@ export_or_preexport: | EXPORT { $$ = 2; } ; -CF_CLI(SHOW SYMBOLS, optsym, [<symbol>], [[Show all known symbolic names]]) +CF_CLI(SHOW SYMBOLS, sym_args, [table|filter|function|protocol|template|<symbol>], [[Show all known symbolic names]]) { cmd_show_symbols($3); } ; +sym_args: + /* empty */ { + $$ = cfg_allocz(sizeof(struct sym_show_data)); + } + | sym_args TABLE { $$ = $1; $$->type = SYM_TABLE; } + | sym_args FUNCTION { $$ = $1; $$->type = SYM_FUNCTION; } + | sym_args FILTER { $$ = $1; $$->type = SYM_FILTER; } + | sym_args PROTOCOL { $$ = $1; $$->type = SYM_PROTO; } + | sym_args TEMPLATE { $$ = $1; $$->type = SYM_TEMPLATE; } + | sym_args SYM { $$ = $1; $$->sym = $2; } + ; + CF_CLI_HELP(DUMP, ..., [[Dump debugging information]]) CF_CLI(DUMP RESOURCES,,, [[Dump all allocated resource]]) { rdump(&root_pool); cli_msg(0, ""); } ; |