diff --git a/filter/config.Y b/filter/config.Y index 95ce5eaa..2a5b9efb 100644 --- a/filter/config.Y +++ b/filter/config.Y @@ -368,12 +368,19 @@ term: } } +/* FIXME (maybe?) rta.from read/write */ | rtadot FROM { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_IP; $$->a2.i = OFFSETOF(struct rta, from); } +/* FIXME Gw read/write */ | rtadot GW { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_IP; $$->a2.i = OFFSETOF(struct rta, gw); } | rtadot NET { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_PREFIX; $$->a2.i = 0x12345678; /* This is actually ok - T_PREFIX is special-cased. */ } | rtadot SOURCE { $$ = f_new_inst(); $$->code = 'a'; $$->aux = T_ENUM_RTS; $$->a2.i = OFFSETOF(struct rta, source); } +/* FIXME rte.Preference - read/write */ +/* FIXME rta.Scope - read/write */ +/* FIXME rta.Cast - read */ +/* FIXME rta.Dest - read */ + | rtadot dynamic_attr { $$ = $2; $$->code = P('e','a'); } | term '.' IP { $$ = f_new_inst(); $$->code = P('c','p'); $$->a1.p = $1; $$->aux = T_IP; } diff --git a/filter/filter.c b/filter/filter.c index e300794a..246fbf67 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -10,6 +10,13 @@ /** * DOC: Filters * + * You can find sources of filters language in filter/ + * directory. filter/config.Y filter grammar, and basically translates + * source from user into tree of &f_inst structures. These trees are + * later interpreted using code in filter/filter.c. Filters internally + * work with values/variables in struct f_val, which contains type of + * value and value. + * * Filter consists of tree of &f_inst structures, one structure per * "instruction". Each &f_inst contains code, aux value which is * usually type of data this instruction operates on, and two generic @@ -23,8 +30,7 @@ * forced. Important thing about &f_val s is that they may be copied * with simple =. That's fine for all currently defined types: strings * are read-only (and therefore okay), paths are copied for each - * operation (okay too). - */ + * operation (okay too). */ #undef LOCAL_DEBUG