diff options
-rw-r--r-- | conf/Makefile | 4 | ||||
-rw-r--r-- | conf/cf-lex.l | 2 | ||||
-rw-r--r-- | conf/conf.h | 4 | ||||
-rw-r--r-- | conf/confbase.Y | 25 |
4 files changed, 22 insertions, 13 deletions
diff --git a/conf/Makefile b/conf/Makefile index 270d5567..be1e1a47 100644 --- a/conf/Makefile +++ b/conf/Makefile @@ -1,10 +1,10 @@ -source=cf-parse.tab.c cf-lex.c +source=cf-parse.tab.c cf-lex.c f-util.c root-rel=../ include ../Rules conf-src=$(srcdir)/conf -conf-fragments=$(conf-src)/confbase.Y @CONFS@ $(addsuffix /config.Y,$(static-dir-paths)) +conf-fragments=$(conf-src)/confbase.Y @CONFS@ $(addsuffix /config.Y,$(static-dir-paths)) $(conf-src)/filter.Y ifdef DEBUG BISON_DEBUG=-t diff --git a/conf/cf-lex.l b/conf/cf-lex.l index 7c37a008..ab7e6cef 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -245,6 +245,7 @@ cf_allocate(void) cfg_mem = lp_new(cfg_pool, 1024); } +#if 1 char * cfg_strdup(char *c) { @@ -253,4 +254,5 @@ cfg_strdup(char *c) memcpy(z, c, l); return z; } +#endif diff --git a/conf/conf.h b/conf/conf.h index 1e80628e..19ed34e9 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -36,6 +36,10 @@ struct symbol { #define SYM_VOID 0 #define SYM_PROTO 1 #define SYM_NUMBER 2 +#define SYM_STAT 3 /* statement */ +#define SYM_VARIABLE_INT 4 +#define SYM_FUNCTION 5 +#define SYM_FILTER 6 void cf_lex_init_tables(void); int cf_lex(void); diff --git a/conf/confbase.Y b/conf/confbase.Y index 0f00587a..b8749aaf 100644 --- a/conf/confbase.Y +++ b/conf/confbase.Y @@ -16,6 +16,7 @@ CF_HDR #include "nest/protocol.h" #include "nest/iface.h" #include "nest/route.h" +#include "conf/filter.h" CF_DECLS @@ -24,6 +25,7 @@ CF_DECLS ip_addr a; struct symbol *s; char *t; + struct f_instruction *x; } %token END @@ -32,7 +34,8 @@ CF_DECLS %token <s> SYM %token <t> TEXT -%type <i> expr bool pxlen +%type <i> cexpr bool pxlen +%type <x> expr %left '+' '-' %left '*' '/' '%' @@ -55,22 +58,22 @@ conf_entries: CF_ADDTO(conf, /* EMPTY */) -/* Expressions */ +/* Constant expressions */ -expr: +cexpr: NUM - | expr '+' expr { $$ = $1 + $3; } - | expr '-' expr { $$ = $1 - $3; } - | expr '*' expr { $$ = $1 * $3; } - | expr '/' expr { if ($3) $$ = $1 / $3; else cf_error("Division by zero"); } - | expr '%' expr { if ($3) $$ = $1 % $3; else cf_error("Division by zero"); } - | '(' expr ')' { $$ = $2; } + | cexpr '+' cexpr { $$ = $1 + $3; } + | cexpr '-' cexpr { $$ = $1 - $3; } + | cexpr '*' cexpr { $$ = $1 * $3; } + | cexpr '/' cexpr { if ($3) $$ = $1 / $3; else cf_error("Division by zero"); } + | cexpr '%' cexpr { if ($3) $$ = $1 % $3; else cf_error("Division by zero"); } + | '(' cexpr ')' { $$ = $2; } | SYM { if ($1->class != SYM_NUMBER) cf_error("Number expected"); else $$ = $1->aux; } ; CF_ADDTO(conf, definition) definition: - DEFINE SYM '=' expr { + DEFINE SYM '=' cexpr { if ($2->class != SYM_VOID) cf_error("Symbol already defined"); $2->class = SYM_NUMBER; $2->aux = $4; @@ -80,7 +83,7 @@ definition: /* Switches */ bool: - expr {$$ = !!$1; } + cexpr {$$ = !!$1; } | ON { $$ = 1; } | YES { $$ = 1; } | OFF { $$ = 0; } |