- 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?
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
Roadmap
- Remaining bits of IPv6 support (radvd)
- RIPv6
- BGP?
-- Logging and debugging messages
Client
~~~~~~
- write doctool
- write documentation :|
-Cleanup
+Globals
~~~~~~~
- right usage of DBG vs. debug
- cleanup debugging calls
- 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
- 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?
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";
+ }
+}
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 */
1007 Route list
1008 Route details
1009 Static route list
+1010 Symbol list
8000 Reply too long
8001 Route not found
-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
/*
* 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.
*/
--- /dev/null
+/*
+ * 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, "");
+ }
+}
--- /dev/null
+/*
+ * 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);
/*
* 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.
*/
#include "nest/rt-dev.h"
#include "nest/password.h"
+#include "nest/cmds.h"
CF_DECLS
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, [<name>], [[Show routing protocols]])
{ proto_show($3, 0); } ;
}
;
+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(DEBUG RESOURCES,,, [[Show all allocated resource]])
{ rdump(&root_pool); cli_msg(0, ""); } ;