diff --git a/filter/filter.c b/filter/filter.c index a7a17bd4..25711c56 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 1b635cb7..73a65196 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; {