]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Dynamic attributes are now declared in per-protocol grammar files instead
authorMartin Mares <mj@ucw.cz>
Wed, 1 Mar 2000 11:32:23 +0000 (11:32 +0000)
committerMartin Mares <mj@ucw.cz>
Wed, 1 Mar 2000 11:32:23 +0000 (11:32 +0000)
of filter/config.Y. Bird now compiles even if you disable RIP.

Removed RTA and IMPOSSIBLE tokens (unused).

Removed superfluous comment in filter.h.

I've tried to do my best, but Pavel, please check these changes.

filter/config.Y
filter/f-util.c
filter/filter.h
proto/rip/config.Y

index 856189ec3393cf69f9d6cd516710765632580f28..ed94b9bf8167b9264c069f058c5b5606a79c5605 100644 (file)
@@ -34,16 +34,15 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, CONST, UNSET, RETURN,
        INT, BOOL, IP, PREFIX, PAIR, SET, STRING,
        IF, THEN, ELSE, CASE,
        TRUE, FALSE,
-       RTA, FROM, GW, NET, MASK, RIP_METRIC, RIP_TAG, SOURCE,
+       FROM, GW, NET, MASK, SOURCE,
        LEN,
        DEFINED,
-       IMPOSSIBLE,
        FILTER, WHERE)
 
 %nonassoc THEN
 %nonassoc ELSE
 
-%type <x> term block cmds cmd function_body constant print_one print_list var_list var_listn any_dynamic function_call
+%type <x> term block cmds cmd function_body constant print_one print_list var_list var_listn dynamic_attr function_call
 %type <f> filter filter_body where_filter
 %type <i> type break_command pair
 %type <e> set_item set_items switch_body
@@ -268,10 +267,12 @@ constant:
  | ENUM          { $$ = f_new_inst(); $$->code = 'c'; $$->aux = $1 >> 16; $$->a2.i = $1 & 0xffff; }
  ;
 
-any_dynamic:
-   RIP_METRIC { $$ = f_new_inst(); $$->aux = T_INT; $$->a2.i = EA_RIP_METRIC;}
- | RIP_TAG    { $$ = f_new_inst(); $$->aux = T_INT; $$->a2.i = EA_RIP_TAG; }
- ;
+/*
+ *  Maybe there are no dynamic attributes defined by protocols.
+ *  For such cases, we force the dynamic_attr list to contain
+ *  at least an invalid token, so it's syntantically correct.
+ */
+CF_ADDTO(dynamic_attr, INVALID_TOKEN { $$ = NULL; })
 
 rtadot: /* EMPTY, we are not permitted RTA. prefix */
  ;
@@ -334,7 +335,7 @@ term:
  | rtadot NET     { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_PREFIX; $$->a2.i = 0x12345678; }
  | rtadot SOURCE  { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_ENUM_RTS; $$->a2.i = OFFSETOF(struct rta, gw); }
 
- | rtadot any_dynamic { $$ = $2; $$->code = P('e','a'); }
+ | rtadot dynamic_attr { $$ = $2; $$->code = P('e','a'); }
 
  | term '.' IP { $$ = f_new_inst(); $$->code = P('c','p'); $$->a1.p = $1; $$->aux = T_IP; }
  | term '.' LEN { $$ = f_new_inst(); $$->code = P('c','p'); $$->a1.p = $1; $$->aux = T_INT; }
@@ -416,12 +417,12 @@ cmd:
      $$->code = 'r';
      $$->a1.p = $2;
    }
- | rtadot any_dynamic '=' term ';' {
+ | rtadot dynamic_attr '=' term ';' {
      $$ = $2;
      $$->code  = P('e','S');
      $$->a1.p = $4;
    }
- | UNSET '(' rtadot any_dynamic ')' ';' {
+ | UNSET '(' rtadot dynamic_attr ')' ';' {
      $$ = $4;
      $$->aux = T_VOID;
      $$->code = P('e','S');
index b070d951fce7bcd25b5f45814adb9132409a1194..2bc78737c3d09029769e7496ab8f8cd59b668b18 100644 (file)
@@ -32,6 +32,15 @@ f_new_inst(void)
   return ret;
 }
 
+struct f_inst *
+f_new_dynamic_attr(int code)
+{
+  struct f_inst *f = f_new_inst();
+  f->aux = T_INT;
+  f->a2.i = code;
+  return f;
+}
+
 char *
 filter_name(struct filter *filter)
 {
index a08f12671318eb1110dc220c3f8dc3c9ab9a8def..bbf30408008fe0d47dc75ae350193772f2c92116 100644 (file)
@@ -57,6 +57,7 @@ struct filter {
 
 void filters_postconfig(void);
 struct f_inst *f_new_inst(void);
+struct f_inst *f_new_dynamic_attr(int code);
 struct f_tree *f_new_tree(void);
 
 struct f_tree *build_tree(struct f_tree *);
@@ -121,6 +122,4 @@ struct f_tree {
 
 #define NEW_F_VAL struct f_val * val; val = cfg_alloc(sizeof(struct f_val));
 
-/* Create pair from two letters */
-
 #endif
index 1bc67207719578f679fa43ca8316da93975995a2..e1094a5023ab6b75182699debf148d2b107ab283 100644 (file)
@@ -25,7 +25,8 @@ CF_DECLS
 CF_KEYWORDS(RIP, INFINITY, METRIC, PORT, PERIOD, GARBAGETIME, PASSWORDS,
            MODE, BROADCAST, QUIET, NOLISTEN, VERSION1, 
            AUTHENTICATION, NONE, PLAINTEXT, MD5,
-           HONOUR, NEVER, NEIGHBOUR, ALWAYS)
+           HONOUR, NEVER, NEIGHBOUR, ALWAYS,
+           RIP_METRIC, RIP_TAG)
 
 %type <i> rip_mode rip_auth
 
@@ -97,6 +98,9 @@ rip_iface_list:
  | rip_iface_list ',' rip_iface
  ;
 
+CF_ADDTO(dynamic_attr, RIP_METRIC { $$ = f_new_dynamic_attr(EA_RIP_METRIC); })
+CF_ADDTO(dynamic_attr, RIP_TAG { $$ = f_new_dynamic_attr(EA_RIP_TAG); })
+
 CF_CODE
 
 CF_END