diff options
author | Pavel Machek <pavel@ucw.cz> | 2000-06-08 18:57:41 +0200 |
---|---|---|
committer | Pavel Machek <pavel@ucw.cz> | 2000-06-08 18:57:41 +0200 |
commit | 4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559 (patch) | |
tree | 46677d61b9151ee6d5e2a946f7669abd7d7ecd1d | |
parent | 89e7de98e455071c5ff3796765fb6fd6860a63c6 (diff) | |
download | bird-4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559.tar bird-4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559.zip |
Fix i_same for 'c' instruction.
-rw-r--r-- | filter/filter.c | 16 | ||||
-rw-r--r-- | filter/test.conf | 30 |
2 files changed, 35 insertions, 11 deletions
diff --git a/filter/filter.c b/filter/filter.c index a7a17bd..25711c5 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -748,7 +748,21 @@ i_same(struct f_inst *f1, struct f_inst *f2) } break; - case 'c': A2_SAME; break; + case 'c': + if (f1->aux & T_SET) { + if (!same_tree(f1->a2.p, f2->a2.p)) + return 0; + break; + } + switch (f1->aux) { + case T_STRING: + if (strcmp(f1->a2.p, f2->a2.p)) + return 0; + break; + default: + A2_SAME; + } + break; case 'C': if (val_compare(* (struct f_val *) f1->a1.p, * (struct f_val *) f2->a1.p)) return 0; diff --git a/filter/test.conf b/filter/test.conf index 1b635cb..73a6519 100644 --- a/filter/test.conf +++ b/filter/test.conf @@ -69,6 +69,26 @@ function bla() define four=4; define onetwo=1.2.3.4; +function __test1() +{ + if source ~ [ RTS_BGP, RTS_STATIC ] then { +# ospf_metric1 = 65535; +# ospf_metric2 = 1000; + ospf_tag = 0x12345678; + accept; + } reject; +} + +function __test2() +{ + if source ~ [ RTS_BGP, RTS_STATIC ] then { +# ospf_metric1 = 65535; +# ospf_metric2 = 1000; + ospf_tag = 0x12345678; + accept; + } reject; +} + function __startup() int i; prefix px; @@ -123,16 +143,6 @@ ip p; # print "*** FAIL: this is unreachable"; } -function __test1() -{ - print bgp_path ~ / 65000 /; -} - -function __test2() -{ - print bgp_path ~ / 65000 /; -} - filter testf int j; { |