|
|
@ -1,5 +1,3 @@
|
|
|
|
/* -=-=-=-=-=-=-=-=-=-=-=-=-=- INTERFACES -=-=-=-=-=-=-=-=-=-=-=-=-=- */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% macro interface_ip_ospf(iface_name) %}
|
|
|
|
{% macro interface_ip_ospf(iface_name) %}
|
|
|
|
{% if salt['pillar.get']('interfaces:'+iface_name+':ip:ospf') %}
|
|
|
|
{% if salt['pillar.get']('interfaces:'+iface_name+':ip:ospf') %}
|
|
|
|
ospf {
|
|
|
|
ospf {
|
|
|
@ -35,6 +33,135 @@
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
{% endmacro %}
|
|
|
|
{% endmacro %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% macro bgp_neighbor(neighbor, neighbor_data) %}
|
|
|
|
|
|
|
|
neighbor {{ neighbor }} {
|
|
|
|
|
|
|
|
remote-as {{ neighbor_data['remote-as'] }}
|
|
|
|
|
|
|
|
{% if 'password' in neighbor_data %}password {{ neighbor_data['password'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'update-source' in neighbor_data %}update-source {{ neighbor_data['update-source'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'ebgp-multihop' in neighbor_data %}ebgp-multihop {{ neighbor_data['ebgp-multihop'] }}{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% if 'address-family' in neighbor_data %}
|
|
|
|
|
|
|
|
address-family {
|
|
|
|
|
|
|
|
{% if 'ipv4-unicast' in neighbor_data['address-family'] %}
|
|
|
|
|
|
|
|
ipv4-unicast {
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('route-reflector-client',False) %}route-reflector-client{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('route-server-client',False) %}route-server-client{% endif %}
|
|
|
|
|
|
|
|
{% if 'prefix-list' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
prefix-list {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv4-unicast']['prefix-list'] %}export {{ neighbor_data['address-family']['ipv4-unicast']['prefix-list']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv4-unicast']['prefix-list'] %}import {{ neighbor_data['address-family']['ipv4-unicast']['prefix-list']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'route-map' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
route-map {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv4-unicast']['route-map'] %}export {{ neighbor_data['address-family']['ipv4-unicast']['route-map']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv4-unicast']['route-map'] %}import {{ neighbor_data['address-family']['ipv4-unicast']['route-map']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'soft-reconfiguration' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
soft-reconfiguration {
|
|
|
|
|
|
|
|
{% for softreconf in neighbor_data['address-family']['ipv4-unicast']['soft-reconfiguration'] %}
|
|
|
|
|
|
|
|
{{ softreconf }}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'allowas-in' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
allowas-in {
|
|
|
|
|
|
|
|
{# neighbor_data['address-family']['ipv4-unicast']['allowas-in'] #}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('nexthop-self',False) %}
|
|
|
|
|
|
|
|
nexthop-self
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('maximum-prefix',None) != None %}
|
|
|
|
|
|
|
|
maximum-prefix {{ neighbor_data['address-family']['ipv4-unicast'].get('maximum-prefix',None) }}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('default-originate',False) %}
|
|
|
|
|
|
|
|
default-originate {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'ipv6-unicast' in neighbor_data['address-family'] %}
|
|
|
|
|
|
|
|
ipv6-unicast {
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('route-reflector-client',False) %}route-reflector-client{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('route-server-client',False) %}route-server-client{% endif %}
|
|
|
|
|
|
|
|
{% if 'prefix-list' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
prefix-list {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv6-unicast']['prefix-list'] %}export {{ neighbor_data['address-family']['ipv6-unicast']['prefix-list']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv6-unicast']['prefix-list'] %}import {{ neighbor_data['address-family']['ipv6-unicast']['prefix-list']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'route-map' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
route-map {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv6-unicast']['route-map'] %}export {{ neighbor_data['address-family']['ipv6-unicast']['route-map']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv6-unicast']['route-map'] %}import {{ neighbor_data['address-family']['ipv6-unicast']['route-map']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'soft-reconfiguration' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
soft-reconfiguration {
|
|
|
|
|
|
|
|
{% for softreconf in neighbor_data['address-family']['ipv6-unicast']['soft-reconfiguration'] %}
|
|
|
|
|
|
|
|
{{ softreconf }}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'allowas-in' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
allowas-in {
|
|
|
|
|
|
|
|
{# neighbor_data['address-family']['ipv6-unicast']['allowas-in'] #}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('nexthop-self',False) %}
|
|
|
|
|
|
|
|
nexthop-self
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('maximum-prefix',None) != None %}
|
|
|
|
|
|
|
|
maximum-prefix {{ neighbor_data['address-family']['ipv6-unicast'].get('maximum-prefix',None) }}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('default-originate',False) %}
|
|
|
|
|
|
|
|
default-originate {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endmacro %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{%- macro deep_merge(a, b): %}
|
|
|
|
|
|
|
|
{%- for k,v in b.items(): %}
|
|
|
|
|
|
|
|
{%- if v is not defined: %}
|
|
|
|
|
|
|
|
{%- do a.pop(k) %}
|
|
|
|
|
|
|
|
{%- else: %}
|
|
|
|
|
|
|
|
{%- if v is mapping: %}
|
|
|
|
|
|
|
|
{%- if a[k] is not mapping: %}
|
|
|
|
|
|
|
|
{%- do a.update({ k: { } }) %}
|
|
|
|
|
|
|
|
{%- endif %}
|
|
|
|
|
|
|
|
{%- do deep_merge(a[k], v) %}
|
|
|
|
|
|
|
|
{%- else: %}
|
|
|
|
|
|
|
|
{%- do a.update({ k: v }) %}
|
|
|
|
|
|
|
|
{%- endif %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{%- endfor %}
|
|
|
|
|
|
|
|
{%- endmacro %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{%- macro normalise_peeringdb_as_set(prefix_list, pdb) %}
|
|
|
|
|
|
|
|
{%- if '::' in pdb %}
|
|
|
|
|
|
|
|
{%- set bits = pdb.split("::") %}
|
|
|
|
|
|
|
|
{%- do prefix_list.update({'sources': bits[0], 'name': 'peeringdb-' + bits[1].upper(), 'as-set': bits[1].upper()}) %}
|
|
|
|
|
|
|
|
{%- elif '@' in pdb %}
|
|
|
|
|
|
|
|
{%- set bits = pdb.split("@") %}
|
|
|
|
|
|
|
|
{%- do prefix_list.update({'sources': bits[1], 'name': 'peeringdb-' + bits[0].upper(), 'as-set': bits[0].upper()}) %}
|
|
|
|
|
|
|
|
{%- else %}
|
|
|
|
|
|
|
|
{%- do prefix_list.update({'sources': 'RIPE,RADB,ARIN,APNIC,AFRINIC,LACNIC', 'name': 'peeringdb-' + pdb, 'as-set': pdb}) %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% endmacro %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% set peeringdb_prefixlist_4 = {} %}
|
|
|
|
|
|
|
|
{% set peeringdb_prefixlist_6 = {} %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* -=-=-=-=-=-=-=-=-=-=-=-=-=- INTERFACES -=-=-=-=-=-=-=-=-=-=-=-=-=- */
|
|
|
|
|
|
|
|
|
|
|
|
interfaces {
|
|
|
|
interfaces {
|
|
|
|
{% for iface_name, iface_data in pillar['netbox']['interfaces'].items() %}{% if iface_data['mgmt_only'] %}
|
|
|
|
{% for iface_name, iface_data in pillar['netbox']['interfaces'].items() %}{% if iface_data['mgmt_only'] %}
|
|
|
|
{% elif iface_name == 'lo' %}
|
|
|
|
{% elif iface_name == 'lo' %}
|
|
|
@ -270,100 +397,58 @@ protocols {
|
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
{% for neighbor, neighbor_data in as_data.get('neighbor',{}).items() %}
|
|
|
|
{% for neighbor, neighbor_data in as_data.get('neighbor',{}).items() %}
|
|
|
|
neighbor {{ neighbor }} {
|
|
|
|
{{ bgp_neighbor(neighbor, neighbor_data) }}
|
|
|
|
remote-as {{ neighbor_data['remote-as'] }}
|
|
|
|
|
|
|
|
{% if 'password' in neighbor_data %}password {{ neighbor_data['password'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'update-source' in neighbor_data %}update-source {{ neighbor_data['update-source'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'ebgp-multihop' in neighbor_data %}ebgp-multihop {{ neighbor_data['ebgp-multihop'] }}{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% if 'address-family' in neighbor_data %}
|
|
|
|
|
|
|
|
address-family {
|
|
|
|
|
|
|
|
{% if 'ipv4-unicast' in neighbor_data['address-family'] %}
|
|
|
|
|
|
|
|
ipv4-unicast {
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('route-reflector-client',False) %}route-reflector-client{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('route-server-client',False) %}route-server-client{% endif %}
|
|
|
|
|
|
|
|
{% if 'prefix-list' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
prefix-list {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv4-unicast']['prefix-list'] %}export {{ neighbor_data['address-family']['ipv4-unicast']['prefix-list']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv4-unicast']['prefix-list'] %}import {{ neighbor_data['address-family']['ipv4-unicast']['prefix-list']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'route-map' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
route-map {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv4-unicast']['route-map'] %}export {{ neighbor_data['address-family']['ipv4-unicast']['route-map']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv4-unicast']['route-map'] %}import {{ neighbor_data['address-family']['ipv4-unicast']['route-map']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'soft-reconfiguration' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
soft-reconfiguration {
|
|
|
|
|
|
|
|
{% for softreconf in neighbor_data['address-family']['ipv4-unicast']['soft-reconfiguration'] %}
|
|
|
|
|
|
|
|
{{ softreconf }}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'allowas-in' in neighbor_data['address-family']['ipv4-unicast'] %}
|
|
|
|
|
|
|
|
allowas-in {
|
|
|
|
|
|
|
|
{# neighbor_data['address-family']['ipv4-unicast']['allowas-in'] #}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('nexthop-self',False) %}
|
|
|
|
|
|
|
|
nexthop-self
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('maximum-prefix',None) != None %}
|
|
|
|
|
|
|
|
maximum-prefix {{ neighbor_data['address-family']['ipv4-unicast'].get('maximum-prefix',None) }}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv4-unicast'].get('default-originate',False) %}
|
|
|
|
|
|
|
|
default-originate {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'ipv6-unicast' in neighbor_data['address-family'] %}
|
|
|
|
|
|
|
|
ipv6-unicast {
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('route-reflector-client',False) %}route-reflector-client{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('route-server-client',False) %}route-server-client{% endif %}
|
|
|
|
|
|
|
|
{% if 'prefix-list' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
prefix-list {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv6-unicast']['prefix-list'] %}export {{ neighbor_data['address-family']['ipv6-unicast']['prefix-list']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv6-unicast']['prefix-list'] %}import {{ neighbor_data['address-family']['ipv6-unicast']['prefix-list']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'route-map' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
route-map {
|
|
|
|
|
|
|
|
{% if 'export' in neighbor_data['address-family']['ipv6-unicast']['route-map'] %}export {{ neighbor_data['address-family']['ipv6-unicast']['route-map']['export'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if 'import' in neighbor_data['address-family']['ipv6-unicast']['route-map'] %}import {{ neighbor_data['address-family']['ipv6-unicast']['route-map']['import'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'soft-reconfiguration' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
soft-reconfiguration {
|
|
|
|
|
|
|
|
{% for softreconf in neighbor_data['address-family']['ipv6-unicast']['soft-reconfiguration'] %}
|
|
|
|
|
|
|
|
{{ softreconf }}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if 'allowas-in' in neighbor_data['address-family']['ipv6-unicast'] %}
|
|
|
|
|
|
|
|
allowas-in {
|
|
|
|
|
|
|
|
{# neighbor_data['address-family']['ipv6-unicast']['allowas-in'] #}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('nexthop-self',False) %}
|
|
|
|
|
|
|
|
nexthop-self
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('maximum-prefix',None) != None %}
|
|
|
|
|
|
|
|
maximum-prefix {{ neighbor_data['address-family']['ipv6-unicast'].get('maximum-prefix',None) }}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if neighbor_data['address-family']['ipv6-unicast'].get('default-originate',False) %}
|
|
|
|
|
|
|
|
default-originate {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% set peeringdb = as_data.get('peeringdb',{}) %}
|
|
|
|
|
|
|
|
{% if peeringdb %}
|
|
|
|
|
|
|
|
{% for ix_name, ix_data in peeringdb.get('ix',{}).items() %}
|
|
|
|
|
|
|
|
/* {{ ix_name }} */
|
|
|
|
|
|
|
|
{% for asn, asn_data in ix_data.get('asn',{}).items() %}
|
|
|
|
|
|
|
|
{% set net_data = salt['peeringdb.get_net'](asn=asn)['out'][0] %}
|
|
|
|
|
|
|
|
{% set pdb_data = salt['peeringdb.get_netixlan'](asn=asn,ixlan=ix_data['peeringdb_ixlan'])['out'] %}
|
|
|
|
|
|
|
|
{% for peer in pdb_data %}
|
|
|
|
|
|
|
|
{% set neighbor_data = {'description': net_data.get('name','AS%d'%asn) + ' at ' + ix_name, 'address-family':{'ipv4-unicast':{},'ipv6-unicast':{}}} %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor_data, peeringdb.get('default',{})) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor_data, ix_data.get('default',{})) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor_data, {'remote-as':asn}) %}
|
|
|
|
|
|
|
|
{% set as_set = {} %}
|
|
|
|
|
|
|
|
{%- do normalise_peeringdb_as_set(as_set, net_data['irr_as_set']) %}
|
|
|
|
|
|
|
|
{% if peer.get('operational',False) %}
|
|
|
|
|
|
|
|
{% if peer.get('ipaddr4',None) %}
|
|
|
|
|
|
|
|
{% set neighbor4_data = {} %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor4_data, neighbor_data) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor4_data, {'address-family': {'ipv4-unicast': {'prefix-list':{'import':as_set['name']},'maximum-prefix': net_data['info_prefixes4']}}}) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor4_data, asn_data.get('default',{})) %}
|
|
|
|
|
|
|
|
{% if peer['ipaddr4'] in asn_data.get('neighbor',{}) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor4_data, asn_data['neighbor'][peer['ipaddr4']]) %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{%- do neighbor4_data['address-family'].pop('ipv6-unicast') %}
|
|
|
|
|
|
|
|
{{ bgp_neighbor(peer['ipaddr4'], neighbor4_data) }}
|
|
|
|
|
|
|
|
{% if neighbor4_data['address-family']['ipv4-unicast']['prefix-list']['import'] == as_set['name'] %}
|
|
|
|
|
|
|
|
{%- do peeringdb_prefixlist_4.update({as_set['name']: as_set}) %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if peer.get('ipaddr6',None) %}
|
|
|
|
|
|
|
|
{% set neighbor6_data = {} %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor6_data, neighbor_data) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor6_data, {'address-family': {'ipv6-unicast': {'prefix-list':{'import':as_set['name']},'maximum-prefix': net_data['info_prefixes4']}}}) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor6_data, asn_data.get('default',{})) %}
|
|
|
|
|
|
|
|
{% if peer['ipaddr6'] in asn_data.get('neighbor',{}) %}
|
|
|
|
|
|
|
|
{%- do deep_merge(neighbor6_data, asn_data['neighbor'][peer['ipaddr6']]) %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{%- do neighbor6_data['address-family'].pop('ipv4-unicast') %}
|
|
|
|
|
|
|
|
{{ bgp_neighbor(peer['ipaddr6'], neighbor6_data) }}
|
|
|
|
|
|
|
|
{% if neighbor6_data['address-family']['ipv6-unicast']['prefix-list']['import'] == as_set['name'] %}
|
|
|
|
|
|
|
|
{%- do peeringdb_prefixlist_6.update({as_set['name']: as_set}) %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1259,6 +1344,29 @@ policy {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% for prefix_list_name, prefix_data in peeringdb_prefixlist_4.items() %}
|
|
|
|
|
|
|
|
prefix-list {{ prefix_list_name }} {
|
|
|
|
|
|
|
|
{% if prefix_data['as-set'] %}
|
|
|
|
|
|
|
|
{% set jsonblob = salt['cmd.run']('/tmp/bgpq3 -A -4 -S ' + prefix_data["sources"] + ' -j ' + prefix_data["as-set"], env={'BIND_ADDR':pillar['loopback']['IPv4'], 'BIND_ADDR6':pillar['loopback']['IPv6'], 'LD_PRELOAD':'/tmp/bind.so'})|load_json %}
|
|
|
|
|
|
|
|
{#% set jsonblob = salt['cmd.run']('/tmp/bgpq3 -A -4 -j ' + prefix_data["as-set"], env={'BIND_ADDR':pillar['loopback']['IPv4'], 'BIND_ADDR6':pillar['loopback']['IPv6'], 'LD_PRELOAD':'/tmp/bind.so'})|load_json %#}
|
|
|
|
|
|
|
|
/* {{ '/tmp/bgpq3 -A -4 -j ' + prefix_data["as-set"] }} */
|
|
|
|
|
|
|
|
{% for prefix in jsonblob.NN %}
|
|
|
|
|
|
|
|
rule {{ loop.index }} {
|
|
|
|
|
|
|
|
action permit
|
|
|
|
|
|
|
|
prefix {{ prefix['prefix'] }}
|
|
|
|
|
|
|
|
{% if prefix.get('less-equal',None) != None %}le {{ prefix['less-equal'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if prefix.get('greater-equal',None) != None %}ge {{ prefix['greater-equal'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
rule 65535 {
|
|
|
|
|
|
|
|
prefix 0.0.0.0/0
|
|
|
|
|
|
|
|
le 32
|
|
|
|
|
|
|
|
action deny
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
{% for prefix_list_name, prefix_data in salt['pillar.get']("policy:prefix-list",{}).items() %}
|
|
|
|
{% for prefix_list_name, prefix_data in salt['pillar.get']("policy:prefix-list",{}).items() %}
|
|
|
|
prefix-list6 {{ prefix_list_name }} {
|
|
|
|
prefix-list6 {{ prefix_list_name }} {
|
|
|
|
{% if 'bgpq3' in prefix_data %}
|
|
|
|
{% if 'bgpq3' in prefix_data %}
|
|
|
@ -1294,6 +1402,29 @@ policy {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% for prefix_list_name, prefix_data in peeringdb_prefixlist_6.items() %}
|
|
|
|
|
|
|
|
prefix-list6 {{ prefix_list_name }} {
|
|
|
|
|
|
|
|
{% if prefix_data['as-set'] %}
|
|
|
|
|
|
|
|
{% set jsonblob = salt['cmd.run']('/tmp/bgpq3 -A -6 -S ' + prefix_data["sources"] + ' -j ' + prefix_data["as-set"], env={'BIND_ADDR':pillar['loopback']['IPv4'], 'BIND_ADDR6':pillar['loopback']['IPv6'], 'LD_PRELOAD':'/tmp/bind.so'})|load_json %}
|
|
|
|
|
|
|
|
{#% set jsonblob = salt['cmd.run']('/tmp/bgpq3 -A -6 -j ' + prefix_data["as-set"], env={'BIND_ADDR':pillar['loopback']['IPv4'], 'BIND_ADDR6':pillar['loopback']['IPv6'], 'LD_PRELOAD':'/tmp/bind.so'})|load_json %#}
|
|
|
|
|
|
|
|
/* {{ '/tmp/bgpq3 -A -4 -j ' + prefix_data["as-set"] }} */
|
|
|
|
|
|
|
|
{% for prefix in jsonblob.NN %}
|
|
|
|
|
|
|
|
rule {{ loop.index }} {
|
|
|
|
|
|
|
|
action permit
|
|
|
|
|
|
|
|
prefix {{ prefix['prefix'] }}
|
|
|
|
|
|
|
|
{% if prefix.get('less-equal',None) != None %}le {{ prefix['less-equal'] }}{% endif %}
|
|
|
|
|
|
|
|
{% if prefix.get('greater-equal',None) != None %}ge {{ prefix['greater-equal'] }}{% endif %}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
rule 65535 {
|
|
|
|
|
|
|
|
prefix ::/0
|
|
|
|
|
|
|
|
le 128
|
|
|
|
|
|
|
|
action deny
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* -=-=-=-=-=-=-=-=-=-=-=-=-=- SERVICE -=-=-=-=-=-=-=-=-=-=-=-=-=- */
|
|
|
|
/* -=-=-=-=-=-=-=-=-=-=-=-=-=- SERVICE -=-=-=-=-=-=-=-=-=-=-=-=-=- */
|
|
|
|