aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAsbjørn Sloth Tønnesen <asbjorn@labitat.dk>2021-06-18 21:37:08 +0000
committerAsbjørn Sloth Tønnesen <asbjorn@labitat.dk>2021-06-18 22:40:15 +0000
commitb4c4a41b2b9f7ac70fec575c7badef0ec937f1a3 (patch)
tree508329465d208f61d4e402517ee5dee7b168609d
parentf6361901625aae13992670bd385ca2e67310f1b4 (diff)
downloadlabitat-ansible-b4c4a41b2b9f7ac70fec575c7badef0ec937f1a3.tar.gz
labitat-ansible-b4c4a41b2b9f7ac70fec575c7badef0ec937f1a3.tar.xz
labitat-ansible-b4c4a41b2b9f7ac70fec575c7badef0ec937f1a3.zip
space_server: bird: export prefixes based on communities
We only announce a prefix, if we have recieved it from a customer connection or if we originate it our self. This way we avoid announcing prefixes matching the earlier used, prefix list if we haven't recieved it via the customer connection. This is important for multi-homed labicolo customers.
-rw-r--r--roles/space_server/files/bird.conf15
1 files changed, 7 insertions, 8 deletions
diff --git a/roles/space_server/files/bird.conf b/roles/space_server/files/bird.conf
index a23a7bf..c387b8c 100644
--- a/roles/space_server/files/bird.conf
+++ b/roles/space_server/files/bird.conf
@@ -84,18 +84,17 @@ function is_default_route() {
return false;
}
-function is_customer_route() {
- case net.type {
- NET_IP4: if net ~ local_prefixes_v4 then return true;
- NET_IP6: if net ~ local_prefixes_v6 then return true;
- }
- return false;
+function is_propagated_route(){
+ return bgp_large_community ~ [
+ (local_asn, lc_f_type, lc_type_customer),
+ (local_asn, lc_f_type, lc_type_originate)
+ ];
}
filter kernel_export {
if source !~ [ RTS_BGP, RTS_STATIC ] then reject;
if is_default_route() then accept;
- if is_customer_route() then accept;
+ if is_propagated_route() then accept;
reject;
}
@@ -114,7 +113,7 @@ filter transit_import {
}
filter transit_export {
- if is_customer_route() then accept;
+ if is_propagated_route() then accept;
reject;
}