summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>2000-06-08 18:57:41 +0200
committerPavel Machek <pavel@ucw.cz>2000-06-08 18:57:41 +0200
commit4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559 (patch)
tree46677d61b9151ee6d5e2a946f7669abd7d7ecd1d
parent89e7de98e455071c5ff3796765fb6fd6860a63c6 (diff)
downloadbird-4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559.tar
bird-4bb18dd2daa1e13ab4f9aaff2ddc4875c4776559.zip
Fix i_same for 'c' instruction.
-rw-r--r--filter/filter.c16
-rw-r--r--filter/test.conf30
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;
{