0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-10-18 09:58:43 +00:00
bird/flock/bgp-secondary/bird_src.conf
Maria Matejka 6ee70f196a Flock: log checking
Checking is done inline and asynchronously, every log message should be
explicitly expected, otherwise it's reported. It also has an implicit
timeout of 1s for the log message to appear, otherwise it fails as well.
2024-07-23 16:16:24 +02:00

115 lines
2.8 KiB
Plaintext

log "{{ m.logs[0].name }}" all;
router id 1;
define epoch = {{ t.epoch % 2 }};
ipv6 table master6 sorted;
#debug tables all;
#debug channels all;
protocol device {
scan time 10;
}
protocol kernel kernel6 {
scan time 10;
ipv6 { export all; };
}
protocol static p200 {
ipv6 { import filter { preference = 200; accept; }; };
route 2001:db8:eee1::/48 unreachable;
route 2001:db8:eee2::/48 unreachable;
route 2001:db8:eee3::/48 unreachable;
route 2001:db8:eee4::/48 unreachable;
route 2001:db8:eee5::/48 unreachable;
route 2001:db8:eee6::/48 unreachable;
{% if t.epoch == 0 %}
disabled;
{% endif %}
}
protocol static p190 {
ipv6 { import filter { preference = 190; accept; }; };
route 2001:db8:eee1::/48 unreachable;
route 2001:db8:eee2::/48 unreachable;
route 2001:db8:eee3::/48 unreachable;
route 2001:db8:eee4::/48 unreachable;
route 2001:db8:eee5::/48 unreachable;
route 2001:db8:eee6::/48 unreachable;
{%- if t.epoch == 0 -%}
disabled;
{%- endif -%}
}
protocol static p180 {
ipv6 { import filter { preference = 180; accept; }; };
route 2001:db8:eee1::/48 unreachable;
route 2001:db8:eee2::/48 unreachable;
route 2001:db8:eee3::/48 unreachable;
route 2001:db8:eee4::/48 unreachable;
route 2001:db8:eee5::/48 unreachable;
route 2001:db8:eee6::/48 unreachable;
{%- if t.epoch == 0 -%}
disabled;
{%- endif -%}
}
protocol static p170 {
ipv6 { import filter { preference = 170; accept; }; };
route 2001:db8:eee1::/48 unreachable;
route 2001:db8:eee2::/48 unreachable;
route 2001:db8:eee3::/48 unreachable;
route 2001:db8:eee4::/48 unreachable;
route 2001:db8:eee5::/48 unreachable;
route 2001:db8:eee6::/48 unreachable;
{%- if t.epoch == 0 -%}
disabled;
{%- endif -%}
}
protocol static STARTUP {
ipv6;
route 2001:db8:cc00::/40 unreachable;
}
# We need to CHECK this:
# - adding worst to best
# - adding best to worst
# - removing (both dirs)
# - reconf
function CHECK() -> bool {
if net = 2001:db8:cc00::/40 then return true;
bgp_path.prepend(preference);
case epoch {
0: case preference {
170: return net ~ [ 2001:db8:eee4::/48, 2001:db8:eee5::/48 ];
180: return net ~ [ 2001:db8:eee3::/48 ];
190: return net ~ [ 2001:db8:eee2::/48, 2001:db8:eee4::/48 ];
200: return net ~ [ 2001:db8:eee1::/48, 2001:db8:eee3::/48 ];
else: return false;
}
1: case preference {
170: return net ~ [ 2001:db8:eee5::/48, 2001:db8:eee6::/48 ];
180: return net ~ [ 2001:db8:eee4::/48 ];
190: return net ~ [ 2001:db8:eee3::/48, 2001:db8:eee5::/48 ];
200: return net ~ [ 2001:db8:eee2::/48, 2001:db8:eee4::/48 ];
else: return false;
}
else: return false;
}
}
protocol bgp LINK {
local {{ t.links["L"]["src"]["ipv6"].ip }} as 1;
neighbor {{ t.links["L"]["dest"]["ipv6"].ip }} as 2;
ipv6 {
import none;
export where CHECK();
secondary;
};
}