2017-01-19 22:56:26 -06:00
!
{% block banner %}
! =========== Managed by sonic-cfggen DO NOT edit manually! ====================
2017-09-12 16:13:27 -05:00
! generated by templates/quagga/bgpd.conf.j2 with config DB data
2017-01-19 22:56:26 -06:00
! file: bgpd.conf
!
{% endblock banner %}
!
{% block system_init %}
2017-09-12 16:13:27 -05:00
hostname {{ DEVICE_METADATA['localhost']['hostname'] }}
2017-01-19 22:56:26 -06:00
password zebra
log syslog informational
log facility local4
! enable password {# {{ en_passwd }} TODO: param needed #}
{% endblock system_init %}
!
2017-08-08 18:23:58 -05:00
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
2017-01-19 22:56:26 -06:00
{% block bgp_init %}
!
! bgp multiple-instance
!
2017-06-21 20:52:50 -05:00
route-map FROM_BGP_SPEAKER_V4 permit 10
!
route-map TO_BGP_SPEAKER_V4 deny 10
!
2017-08-08 18:23:58 -05:00
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
2017-01-19 22:56:26 -06:00
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
2017-08-30 15:06:02 -05:00
no bgp default ipv4-unicast
2017-03-31 15:25:39 -05:00
{# Advertise graceful restart capability for ToR #}
2017-09-12 16:13:27 -05:00
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
2017-03-31 15:25:39 -05:00
bgp graceful-restart
{% endif %}
2017-09-12 16:13:27 -05:00
{% for (name, prefix) in LOOPBACK_INTERFACE %}
2017-10-20 09:15:11 -05:00
{% if prefix | ipv4 and name == 'Loopback0' %}
2017-09-12 16:13:27 -05:00
bgp router-id {{ prefix | ip }}
{% endif %}
{% endfor %}
2017-01-19 22:56:26 -06:00
{# advertise loopback #}
2017-09-12 16:13:27 -05:00
{% for (name, prefix) in LOOPBACK_INTERFACE %}
2017-10-20 09:15:11 -05:00
{% if prefix | ipv4 and name == 'Loopback0' %}
2017-09-12 16:13:27 -05:00
network {{ prefix | ip }}/32
2017-10-20 09:15:11 -05:00
{% elif prefix | ipv6 and name == 'Loopback0' %}
2017-01-19 22:56:26 -06:00
address-family ipv6
2017-10-17 20:28:27 -05:00
network {{ prefix | ip }}/64
2017-01-19 22:56:26 -06:00
exit-address-family
{% endif %}
{% endfor %}
{% endblock bgp_init %}
2017-03-27 16:22:04 -05:00
{% endif %}
2017-01-19 22:56:26 -06:00
{% block vlan_advertisement %}
2017-09-12 16:13:27 -05:00
{% for (name, prefix) in VLAN_INTERFACE %}
{% if prefix | ipv4 %}
network {{ prefix }}
{% elif prefix | ipv6 %}
2017-08-16 23:12:32 -05:00
address-family ipv6
2017-09-12 16:13:27 -05:00
network {{ prefix }}
2017-08-16 23:12:32 -05:00
exit-address-family
{% endif %}
2017-01-19 22:56:26 -06:00
{% endfor %}
{% endblock vlan_advertisement %}
{% block bgp_sessions %}
2017-08-08 18:23:58 -05:00
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
2017-09-13 23:23:06 -05:00
{% if bgp_session['asn'] | int != 0 %}
2017-08-08 18:23:58 -05:00
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
2018-04-30 18:52:22 -05:00
{# set the bgp neighbor timers if they have not default values #}
{% if (bgp_session['keepalive'] is defined and bgp_session['keepalive'] | int != 60)
or (bgp_session['holdtime'] is defined and bgp_session['holdtime'] | int != 180) %}
neighbor {{ neighbor_addr }} timers {{ bgp_session['keepalive'] }} {{ bgp_session['holdtime'] }}
{% endif %}
2017-08-08 18:23:58 -05:00
{% if bgp_session.has_key('admin_status') and bgp_session['admin_status'] == 'down' or not bgp_session.has_key('admin_status') and DEVICE_METADATA['localhost'].has_key('default_bgp_status') and DEVICE_METADATA['localhost']['default_bgp_status'] == 'down' %}
neighbor {{ neighbor_addr }} shutdown
2017-06-12 13:05:22 -05:00
{% endif %}
2017-08-08 18:23:58 -05:00
{% if neighbor_addr | ipv4 %}
2017-08-30 15:06:02 -05:00
address-family ipv4
2017-09-12 16:13:27 -05:00
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
2017-08-30 15:06:02 -05:00
neighbor {{ neighbor_addr }} allowas-in 1
2017-02-07 02:28:30 -06:00
{% endif %}
2017-08-30 15:06:02 -05:00
neighbor {{ neighbor_addr }} activate
2018-06-22 20:04:18 -05:00
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
2017-08-30 15:06:02 -05:00
maximum-paths 64
exit-address-family
2017-06-22 21:50:24 -05:00
{% endif %}
2017-08-08 18:23:58 -05:00
{% if neighbor_addr | ipv6 %}
2017-01-19 22:56:26 -06:00
address-family ipv6
2017-09-12 16:13:27 -05:00
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
2017-08-08 18:23:58 -05:00
neighbor {{ neighbor_addr }} allowas-in 1
2017-06-22 21:50:24 -05:00
{% endif %}
2017-08-08 18:23:58 -05:00
neighbor {{ neighbor_addr }} activate
2018-06-22 20:04:18 -05:00
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
2017-01-19 22:56:26 -06:00
maximum-paths 64
exit-address-family
{% endif %}
{% endif %}
{% endfor %}
{% endblock bgp_sessions %}
2017-06-21 20:52:50 -05:00
{% block bgp_peers_with_range %}
2017-09-12 16:13:27 -05:00
{% if BGP_PEER_RANGE %}
2017-08-08 18:23:58 -05:00
{% for bgp_peer in BGP_PEER_RANGE.values() %}
2017-06-21 20:52:50 -05:00
neighbor {{ bgp_peer['name'] }} peer-group
neighbor {{ bgp_peer['name'] }} passive
2017-09-18 15:04:29 -05:00
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
2017-06-21 20:52:50 -05:00
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
2017-10-20 09:15:11 -05:00
{% for (name, prefix) in LOOPBACK_INTERFACE %}
{% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %}
{% endfor %}
2017-06-21 20:52:50 -05:00
neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in
neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out
2017-07-13 17:03:10 -05:00
{% for ip_range in bgp_peer['ip_range'] %}
bgp listen range {{ip_range}} peer-group {{ bgp_peer['name'] }}
{% endfor %}
2017-08-30 15:06:02 -05:00
address-family ipv4
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
address-family ipv6
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
2017-06-21 20:52:50 -05:00
{% endfor %}
2017-09-12 16:13:27 -05:00
{% endif %}
2017-06-21 20:52:50 -05:00
{% endblock bgp_peers_with_range %}
2017-01-19 22:56:26 -06:00
!
2017-08-08 18:23:58 -05:00
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
2017-01-19 22:56:26 -06:00
maximum-paths 64
!
route-map ISOLATE permit 10
2017-08-08 18:23:58 -05:00
set as-path prepend {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
2017-03-27 16:22:04 -05:00
{% endif %}
2017-01-19 22:56:26 -06:00
!