summaryrefslogtreecommitdiff
path: root/doc/bird.sgml
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-09-22 15:10:45 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2023-09-26 15:46:24 +0200
commita4adb09f5a5c3806488fb121eafc0e6c969135e7 (patch)
tree105f9d0af6c8e65f475564481bfe59115bac2303 /doc/bird.sgml
parent018a77fc0bc90f74e7267b40ce3bc82074ec8582 (diff)
Aggregator: brief documentation
Diffstat (limited to 'doc/bird.sgml')
-rw-r--r--doc/bird.sgml64
1 files changed, 64 insertions, 0 deletions
diff --git a/doc/bird.sgml b/doc/bird.sgml
index 366797ba..449a69de 100644
--- a/doc/bird.sgml
+++ b/doc/bird.sgml
@@ -1905,6 +1905,70 @@ protocol sections.
<chapt>Protocols
<label id="protocols">
+<sect>Aggregator
+<label id="aggregator">
+
+<sect1>Introduction
+<label id="aggregator-intro">
+<p>The Aggregator protocol explicitly merges routes by the given rules. There
+ are four phases of aggregation. First routes are filtered, then sorted into buckets,
+ then buckets are merged and finally the results are filtered once again.
+ Aggregating an already aggregated route is forbidden.
+
+<p>This is an experimental protocol, use with caution.
+
+<sect1>Configuration
+<label id="aggregator-config">
+<p><descrip>
+ <tag><label id="aggregator-table">table <m/table/</tag>
+ The table from which routes are exported to get aggregated.
+
+ <tag><label id="aggregator-export">export <m/.../</tag>
+ A standard channel's <cf/export/ clause, defining which routes are accepted into aggregation.
+
+ <tag><label id="aggregator-rule">aggregate on <m/expr/ | <m/attribute/ [<m/, .../]</tag>
+ All the given filter expressions and route attributes are evaluated for each route. Then routes
+ are sorted into buckets where <em/all/ values are the same. Note: due to performance reasons,
+ all filter expressions must return a compact type, e.g. integer, a BGP
+ (standard, extended, large) community or an IP address. If you need to compare e.g. modified
+ AS Paths in the aggregation rule, you can define a custom route attribute and set this attribute
+ in the export filter. For now, it's mandatory to say <cf/net/ here, we can't merge prefixes yet.
+
+ <tag><label id="aggregation-merge">merge by { <m/filter code/ }</tag>
+ The given filter code has an extra symbol defined: <cf/routes/. By iterating over <cf/routes/,
+ you get all the routes in the bucket and you can construct your new route. All attributes
+ selected in <cf/aggregate on/ are already set to the common values. For now, it's not possible
+ to use a named filter here. You have to finalize the route by calling <cf/accept/.
+
+ <tag><label id="aggregator-import">import <m/.../</tag>
+ Filter applied to the route after <cf/merge by/. Here you can use a named filter.
+
+ <tag><label id="aggregator-peer-table">peer table <m/table/</tag>
+ The table to which aggregated routes are imported. It may be the same table
+ as <cf/table/.
+</descrip>
+
+<sect1>Example
+<label id="aggregator-example">
+
+<p><code>
+protocol aggregator {
+ table master6;
+ export where defined(bgp_path);
+ /* Merge all routes with the same AS Path length */
+ aggregate on net, bgp_path.len;
+ merge by {
+ for route r in routes do {
+ if ! defined(bgp_path) then { bgp_path = r.bgp_path }
+ bgp_community = bgp_community.add(r.bgp_community);
+ }
+ accept;
+ };
+ import all;
+ peer table agr_result;
+}
+</code>
+
<sect>Babel
<label id="babel">