summaryrefslogtreecommitdiffstats
path: root/filter
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>2000-05-30 12:13:32 +0200
committerPavel Machek <pavel@ucw.cz>2000-05-30 12:13:32 +0200
commitfe613ecded2fca875a146e1c07713f131e85f7ff (patch)
treed237bf44cd73a721cee27426be09a6c46fc30237 /filter
parentf7876c36602015dbf6d7aa3d73fda5ad1c2f6c5a (diff)
downloadbird-fe613ecded2fca875a146e1c07713f131e85f7ff.tar
bird-fe613ecded2fca875a146e1c07713f131e85f7ff.zip
Access to few more attributes is needed.
Diffstat (limited to 'filter')
-rw-r--r--filter/config.Y7
-rw-r--r--filter/filter.c10
2 files changed, 15 insertions, 2 deletions
diff --git a/filter/config.Y b/filter/config.Y
index 95ce5ea..2a5b9ef 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 e300794..246fbf6 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