Commit 0f808c06 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Adds filtering to 'show symbols' command.

Thanks Alexander V. Chernikov for the original patch.
parent 20ab192b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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>
+10 −3
Original line number Diff line number Diff line
@@ -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, "");
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -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);
+14 −1
Original line number Diff line number Diff line
@@ -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, ""); } ;