|
@@ -18,16 +18,11 @@
|
|
|
{%- else %}
|
|
|
table t_external;
|
|
|
|
|
|
-filter external_IPs_to_learn {
|
|
|
- # For now
|
|
|
- reject;
|
|
|
-}
|
|
|
-
|
|
|
protocol kernel k_external {
|
|
|
scan time 20;
|
|
|
|
|
|
learn;
|
|
|
- import filter external_IPs_to_learn;
|
|
|
+ import none;
|
|
|
export all;
|
|
|
|
|
|
table t_external;
|
|
@@ -59,71 +54,4 @@ protocol static bogon_unreach_ext {
|
|
|
route fc00::/7 unreachable; # ULA
|
|
|
{%- endif %}
|
|
|
}
|
|
|
-
|
|
|
- {%- if 'veth_int2ext' in ifaces and 'veth_ext2int' in ifaces %}
|
|
|
- {%- set veth_ips = {} %}
|
|
|
- {%- for iface in ifaces if iface in [ 'veth_int2ext', 'veth_ext2int' ] %}
|
|
|
- {%- do veth_ips.update ({ iface : { 'v4' : None, 'v6' : None }}) %}
|
|
|
- {%- for prefix in ifaces.get (iface, {}).get ('prefixes', []) %}
|
|
|
- {%- if "." in prefix %}
|
|
|
- {%- do veth_ips[iface].update ({ 'v4' : prefix.split ('/')[0] }) %}
|
|
|
- {%- else %}
|
|
|
- {%- do veth_ips[iface].update ({ 'v6' : prefix.split ('/')[0] }) %}
|
|
|
- {%- endif %}
|
|
|
- {%- endfor %}
|
|
|
- {%- endfor %}
|
|
|
-
|
|
|
-#
|
|
|
-# VRF glue
|
|
|
-#
|
|
|
-{%- set internal_ip = veth_ips['veth_int2ext'][proto] %}
|
|
|
-{%- set external_ip = veth_ips['veth_ext2int'][proto] %}
|
|
|
-# Learn route on external side of VEth tunnel between VRFs for recursive BGP
|
|
|
-# nexthop lookup.
|
|
|
-protocol direct d_ext2int {
|
|
|
- table t_external;
|
|
|
-
|
|
|
- interface "veth_ext2int";
|
|
|
-}
|
|
|
-
|
|
|
-template bgp ibgp_vrf_glue {
|
|
|
- local as AS_OWN;
|
|
|
-
|
|
|
- enable route refresh yes;
|
|
|
- graceful restart yes;
|
|
|
-}
|
|
|
-
|
|
|
-protocol bgp int2ext from ibgp_vrf_glue {
|
|
|
- import filter external_IPs_to_learn;
|
|
|
- export filter own_prefixes;
|
|
|
-
|
|
|
- source address {{ internal_ip }};
|
|
|
- neighbor {{ external_ip }} as AS_OWN;
|
|
|
-
|
|
|
- rr client;
|
|
|
- next hop self;
|
|
|
-}
|
|
|
-
|
|
|
-protocol bgp ext2int from ibgp_vrf_glue {
|
|
|
- table t_external;
|
|
|
-
|
|
|
- # External router!
|
|
|
- router id {{ veth_ips['veth_ext2int']['v4'] }};
|
|
|
-
|
|
|
- import filter own_prefixes;
|
|
|
- export filter {
|
|
|
- if proto = "k_external" then {
|
|
|
- bgp_community.add (EXTERNAL_ROUTE);
|
|
|
- accept;
|
|
|
- }
|
|
|
-
|
|
|
- reject;
|
|
|
- };
|
|
|
-
|
|
|
- source address {{ external_ip }};
|
|
|
- neighbor {{ internal_ip }} as AS_OWN;
|
|
|
-
|
|
|
- next hop self;
|
|
|
-}
|
|
|
- {%- endif %} {#- veth int/ext tunnel #}
|
|
|
{%- endif %} {#- vrf_external exists #}
|