mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 20:28:43 +00:00
977b82fba4
Add a new protocol offering route aggregation. User can specify list of route attributes in the configuration file and run route aggregation on the export side of the pipe protocol. Routes are sorted and for every group of equivalent routes new route is created and exported to the routing table. It is also possible to specify filter which will run for every route before aggregation. Furthermore, it will be possible to set attributes of new routes according to attributes of the aggregated routes. This is a work in progress. Original work by Igor Putovny, subsequent cleanups and finalization by Maria Matejka.
117 lines
2.9 KiB
Plaintext
117 lines
2.9 KiB
Plaintext
log "bird.log" all;
|
|
|
|
protocol device {}
|
|
|
|
protocol static {
|
|
ipv6;
|
|
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;
|
|
route 2001:db8:3::/48 unreachable;
|
|
route 2001:db8:4::/48 unreachable;
|
|
route 2001:db8:5::/48 unreachable;
|
|
route 2001:db8:6::/48 unreachable;
|
|
route 2001:db8:7::/48 unreachable;
|
|
route 2001:db8:8::/48 unreachable;
|
|
route 2001:db8:9::/48 unreachable;
|
|
route 2001:db8:a::/48 unreachable;
|
|
route 2001:db8:b::/48 unreachable;
|
|
route 2001:db8:c::/48 unreachable;
|
|
route 2001:db8:d::/48 unreachable;
|
|
route 2001:db8:e::/48 unreachable;
|
|
route 2001:db8:f::/48 unreachable;
|
|
}
|
|
|
|
protocol static {
|
|
ipv6 {
|
|
import filter {
|
|
bgp_med = 1;
|
|
bgp_community = -empty-.add((65533,1)).add((65500,0xe));
|
|
accept;
|
|
};
|
|
};
|
|
route 2001:db8:1::/48 unreachable;
|
|
route 2001:db8:3::/48 unreachable;
|
|
route 2001:db8:5::/48 unreachable;
|
|
route 2001:db8:7::/48 unreachable;
|
|
route 2001:db8:9::/48 unreachable;
|
|
route 2001:db8:b::/48 unreachable;
|
|
route 2001:db8:d::/48 unreachable;
|
|
route 2001:db8:f::/48 unreachable;
|
|
}
|
|
|
|
protocol static {
|
|
ipv6 {
|
|
import filter {
|
|
bgp_med = 2;
|
|
bgp_community = -empty-.add((65533,2)).add((65500,0xd));
|
|
accept;
|
|
};
|
|
};
|
|
route 2001:db8:2::/48 unreachable;
|
|
route 2001:db8:3::/48 unreachable;
|
|
route 2001:db8:6::/48 unreachable;
|
|
route 2001:db8:7::/48 unreachable;
|
|
route 2001:db8:a::/48 unreachable;
|
|
route 2001:db8:b::/48 unreachable;
|
|
route 2001:db8:e::/48 unreachable;
|
|
route 2001:db8:f::/48 unreachable;
|
|
}
|
|
|
|
protocol static {
|
|
ipv6 {
|
|
import filter {
|
|
bgp_med = 4;
|
|
bgp_community = -empty-.add((65533,4)).add((65500,0xb));
|
|
accept;
|
|
};
|
|
};
|
|
route 2001:db8:4::/48 unreachable;
|
|
route 2001:db8:5::/48 unreachable;
|
|
route 2001:db8:6::/48 unreachable;
|
|
route 2001:db8:7::/48 unreachable;
|
|
route 2001:db8:c::/48 unreachable;
|
|
route 2001:db8:d::/48 unreachable;
|
|
route 2001:db8:e::/48 unreachable;
|
|
route 2001:db8:f::/48 unreachable;
|
|
}
|
|
|
|
protocol static {
|
|
ipv6 {
|
|
import filter {
|
|
bgp_med = 8;
|
|
bgp_community = -empty-.add((65533,8)).add((65500,0x7));
|
|
accept;
|
|
};
|
|
};
|
|
route 2001:db8:8::/48 unreachable;
|
|
route 2001:db8:9::/48 unreachable;
|
|
route 2001:db8:a::/48 unreachable;
|
|
route 2001:db8:b::/48 unreachable;
|
|
route 2001:db8:c::/48 unreachable;
|
|
route 2001:db8:d::/48 unreachable;
|
|
route 2001:db8:e::/48 unreachable;
|
|
route 2001:db8:f::/48 unreachable;
|
|
}
|
|
|
|
ipv6 table agr_result;
|
|
|
|
protocol aggregator {
|
|
table master6;
|
|
peer table agr_result;
|
|
export all;
|
|
aggregate on net,(defined(bgp_med));
|
|
merge by {
|
|
print "Merging all these: ", routes;
|
|
bgp_med = 0;
|
|
for route r in routes do {
|
|
if ! defined(r.bgp_med) then { unset(bgp_med); accept; }
|
|
|
|
print r, " bgp_med: ", r.bgp_med;
|
|
bgp_med = bgp_med + r.bgp_med;
|
|
bgp_community = bgp_community.add(r.bgp_community);
|
|
}
|
|
accept;
|
|
};
|
|
}
|