summaryrefslogtreecommitdiffstats
path: root/filter
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>1999-11-24 13:09:58 +0100
committerPavel Machek <pavel@ucw.cz>1999-11-24 13:09:58 +0100
commit8f013d9ca443d4ff39af7560039f108efa9ef474 (patch)
tree08691f3b360fd8bf49bbb55570e47534da1d3c05 /filter
parent48f9e0195488db0a515e4e5140d402fe4fe7d927 (diff)
downloadbird-8f013d9ca443d4ff39af7560039f108efa9ef474.tar
bird-8f013d9ca443d4ff39af7560039f108efa9ef474.zip
Sorry, previous commit did not even compile.
Diffstat (limited to 'filter')
-rw-r--r--filter/config.Y2
-rw-r--r--filter/filter.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/filter/config.Y b/filter/config.Y
index aaea74f..726e13a 100644
--- a/filter/config.Y
+++ b/filter/config.Y
@@ -184,7 +184,7 @@ pair:
* Complex types, their bison value is struct f_val
*/
prefix_s:
- IPA '/' NUM { $$.type = T_PREFIX; $$.val.px.ip = $1; $$.val.px.len = $3; printf( "ook, we have prefix here\n" ); }
+ IPA '/' NUM { $$.type = T_PREFIX; $$.val.px.ip = $1; $$.val.px.len = $3; cf_error( "%I/%d is not really prefix\n", $$.val.px.ip, $$.val.px.len ); }
;
prefix:
diff --git a/filter/filter.c b/filter/filter.c
index 19e5e45..3358741 100644
--- a/filter/filter.c
+++ b/filter/filter.c
@@ -90,7 +90,7 @@ val_simple_in_range(struct f_val v1, struct f_val v2)
mask = ipa_mkmask( v2.val.px.len & LEN_MASK );
if (ipa_compare(ipa_and(v2.val.px.ip, mask), ipa_and(v1.val.px.ip, mask)))
return 0;
- /* FIXME: read rpsl or better ask mj: is it really like this? */
+
if ((v2.val.px.len & LEN_MINUS) && (v1.val.px.len <= (v2.val.px.len & LEN_MASK)))
return 0;
if ((v2.val.px.len & LEN_PLUS) && (v1.val.px.len < (v2.val.px.len & LEN_MASK)))
@@ -216,7 +216,6 @@ interpret(struct f_inst *what)
case '<': COMPARE(i==-1);
case '<=': COMPARE(i!=1);
- /* FIXME: Should be able to work with prefixes of limited sizes */
case '~':
TWOARGS;
res.type = T_BOOL;
@@ -357,8 +356,8 @@ interpret(struct f_inst *what)
break;
}
*f_rte = rte_do_cow(*f_rte);
- l->next = *f_rte->attrs->eattrs;
- *f_rte->attrs->eattrs = l;
+ l->next = (*f_rte)->attrs->eattrs;
+ (*f_rte)->attrs->eattrs = l;
}
break;