- filters: deletion of mandatory attributes?
- filters: user defined attributes?
+- kernel: persistent mode
+
- cli: show tables?
- client: Ctrl-R eats one more enter
Globals
~~~~~~~
- right usage of DBG vs. debug
-- kill preconfigs?
-- check dump functions
-- cleanup debugging calls
- logging and tracing; use appropriate log levels
- check incoming packets and log errors!!
- check log calls for trailing newlines and log levels followed by comma
protos_preconfig(c);
rt_preconfig(c);
cf_parse();
- filters_postconfig(); /* FIXME: Do we really need this? */
protos_postconfig(c);
#ifdef IPV6
if (!c->router_id)
CF_ADDTO(conf, function_def)
function_def:
FUNCTION SYM { DBG( "Beginning of function %s\n", $2->name ); cf_push_scope($2); } function_params function_body {
- extern struct f_inst *startup_func, *test1_func, *test2_func;
cf_define_symbol($2, SYM_FUNCTION, $5);
- if (!strcasecmp($2->name, "__startup"))
- startup_func = $5;
- if (!strcasecmp($2->name, "__test1"))
- test1_func = $5;
- if (!strcasecmp($2->name, "__test2"))
- test2_func = $5;
$2->aux = (int) $4;
$2->aux2 = $5;
DBG("Hmm, we've got one function here - %s\n", $2->name);
#define P(a,b) ((a<<8) | b)
-struct f_inst *startup_func = NULL, *test1_func, *test2_func;
-
#define CMP_ERROR 999
static int
return res.val.i;
}
-void
-filters_postconfig(void)
-{
- struct f_val res;
-
-#if 1
- if (!i_same(test1_func, test2_func))
- bug("i_same does not work");
-#endif
- if (startup_func) {
- debug( "Launching startup function...\n" );
- f_pool = lp_new(&root_pool, 1024);
- res = interpret(startup_func);
- if (res.type == F_ERROR)
- die( "Startup function resulted in error." );
- debug( "done\n" );
- }
-}
-
/**
* filter_same - compare two filters
* @new: first filter to be compared
struct f_inst *root;
};
-void filters_postconfig(void);
struct f_inst *f_new_inst(void);
struct f_inst *f_new_dynamic_attr(int type, int f_type, int code); /* Type as core knows it, type as filters know it, and code of dynamic attribute */
struct f_tree *f_new_tree(void);