]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixed the horrible mess Pavel has created with his last commit.
authorMartin Mares <mj@ucw.cz>
Tue, 16 May 2000 22:37:53 +0000 (22:37 +0000)
committerMartin Mares <mj@ucw.cz>
Tue, 16 May 2000 22:37:53 +0000 (22:37 +0000)
filter/filter.c
filter/filter.h

index a805363ad26e3983b80335bef74db0d00c906ab4..3a1ee0749ba92ba979cf78dbf2515537a89f01ad 100644 (file)
@@ -43,8 +43,6 @@
 
 #define P(a,b) ((a<<8) | b)
 
-struct f_inst *startup_func = NULL, *test1_func, *test2_func;
-
 #define CMP_ERROR 999
 
 static int
@@ -665,24 +663,22 @@ f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struc
   return res.val.i;
 }
 
-void
-filters_postconfig(void)
+int
+f_eval_int(struct f_inst *expr)
 {
   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" );
-  }
-} 
+  f_flags = 0;
+  f_tmp_attrs = NULL;
+  f_rte = NULL;
+  f_rte_old = NULL;
+  f_rta_copy = NULL;
+  f_pool = cfg_mem;
+  res = interpret(expr);
+  if (res.type != T_INT)
+    cf_error("Integer expression expected");
+  return res.val.i;
+}
 
 /**
  * filter_same - compare two filters
index f17f07654229255ed12d30f24e86e5e7b736fc86..02b22ff462bff83b6c49147cd68fbf565a194d8b 100644 (file)
@@ -31,7 +31,7 @@ struct f_inst {               /* Instruction */
 #define arg1 a1.p
 #define arg2 a2.p
 
-struct prefix {
+struct f_prefix {
   ip_addr ip;
   int len;
 #define LEN_MASK 0xff
@@ -46,7 +46,7 @@ struct f_val {
   union {
     int i;
     /*    ip_addr ip; Folded into prefix */    
-    struct prefix px;
+    struct f_prefix px;
     char *s;
     struct f_tree *t;
     struct adata *ad;
@@ -59,7 +59,6 @@ struct filter {
   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);
@@ -72,6 +71,7 @@ struct ea_list;
 struct rte;
 
 int f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struct linpool *tmp_pool, int flags);
+int f_eval_int(struct f_inst *expr);
 char *filter_name(struct filter *filter);
 int filter_same(struct filter *new, struct filter *old);