From b95822895312ba998253a8fb03a879cc3265887d Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Wed, 1 Nov 2023 10:57:43 +0100 Subject: [PATCH] Aggregator: Fixed bugs in filter usage --- nest/rt-table.c | 2 +- proto/aggregator/config.Y | 11 ++++++++++- proto/aggregator/test.conf | 18 +++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/nest/rt-table.c b/nest/rt-table.c index d3ef231d..a8f6226d 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -1210,7 +1210,7 @@ rte_same(rte *x, rte *y) { /* rte.flags / rte.pflags are not checked, as they are internal to rtable */ return - ( + (x == y) || ( (x->attrs == y->attrs) || ((!x->attrs->cached || !y->attrs->cached) && rta_same(x->attrs, y->attrs)) ) && diff --git a/proto/aggregator/config.Y b/proto/aggregator/config.Y index ba4eb9c4..93d7cb57 100644 --- a/proto/aggregator/config.Y +++ b/proto/aggregator/config.Y @@ -52,8 +52,17 @@ aggregator_proto_item: if (!AGGREGATOR_CFG->aggr_on_net) cf_error("aggregate on must be always include 'net'."); + struct f_inst *rot = NULL; + while ($4.begin) + { + struct f_inst *tmp = $4.begin->next; + $4.begin->next = rot; + rot = $4.begin; + $4.begin = tmp; + } + AGGREGATOR_CFG->aggr_on_count = count; - AGGREGATOR_CFG->aggr_on = f_linearize($4.begin, count); + AGGREGATOR_CFG->aggr_on = f_linearize(rot, count); struct f_line *premerge = f_linearize($4.end, 0); premerge->args = count; diff --git a/proto/aggregator/test.conf b/proto/aggregator/test.conf index ec7afc4f..e5ac6969 100644 --- a/proto/aggregator/test.conf +++ b/proto/aggregator/test.conf @@ -1,9 +1,17 @@ log "bird.log" all; +attribute int foo; + protocol device {} protocol static { - ipv6; + ipv6 { + import filter { + preference = 111; + foo = 666; + accept; + }; + }; route 2001:db8:0::/48 unreachable { bgp_path.prepend(65432); bgp_path.prepend(4200000000); }; route 2001:db8:1::/48 unreachable; route 2001:db8:2::/48 unreachable; @@ -25,6 +33,8 @@ protocol static { protocol static { ipv6 { import filter { + preference = 222; + foo = 666; bgp_med = 1; bgp_community = -empty-.add((65533,1)).add((65500,0xe)); accept; @@ -43,6 +53,8 @@ protocol static { protocol static { ipv6 { import filter { + preference = 222; + foo = 666; bgp_med = 2; bgp_community = -empty-.add((65533,2)).add((65500,0xd)); accept; @@ -61,6 +73,8 @@ protocol static { protocol static { ipv6 { import filter { + preference = 222; + foo = 666; bgp_med = 4; bgp_community = -empty-.add((65533,4)).add((65500,0xb)); accept; @@ -79,6 +93,8 @@ protocol static { protocol static { ipv6 { import filter { + preference = 222; + foo = 666; bgp_med = 8; bgp_community = -empty-.add((65533,8)).add((65500,0x7)); accept;