231d309b69
* Generate default VRF table for router interfaces * Updated jinja2 template to have prefix filter
210 lines
6.7 KiB
Django/Jinja
210 lines
6.7 KiB
Django/Jinja
!
|
|
{% block banner %}
|
|
! =========== Managed by sonic-cfggen DO NOT edit manually! ====================
|
|
! generated by templates/frr/frr.conf.j2 with config DB data
|
|
! file: frr.conf
|
|
!
|
|
{% endblock banner %}
|
|
!
|
|
{% block system_init %}
|
|
hostname {{ DEVICE_METADATA['localhost']['hostname'] }}
|
|
password zebra
|
|
log syslog informational
|
|
log facility local4
|
|
! enable password {# {{ en_passwd }} TODO: param needed #}
|
|
{% endblock system_init %}
|
|
!
|
|
{% block interfaces %}
|
|
! Enable link-detect (default disabled)
|
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
|
interface {{ name }}
|
|
link-detect
|
|
!
|
|
{% endfor %}
|
|
{% for pc in PORTCHANNEL %}
|
|
interface {{ pc }}
|
|
link-detect
|
|
!
|
|
{% endfor %}
|
|
{% endblock interfaces %}
|
|
!
|
|
{% block default_route %}
|
|
! set static default route to mgmt gateway as a backup to learned default
|
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
|
{% if prefix | ipv4 %}
|
|
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endblock default_route %}
|
|
!
|
|
{% block source_loopback %}
|
|
{% set lo_ipv4_addrs = [] %}
|
|
{% set lo_ipv6_addrs = [] %}
|
|
{% if LOOPBACK_INTERFACE %}
|
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
|
{% if name == 'Loopback0' %}
|
|
{% if prefix | ipv6 %}
|
|
{% if lo_ipv6_addrs.append(prefix) %}
|
|
{% endif %}
|
|
{% else %}
|
|
{% if lo_ipv4_addrs.append(prefix) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
! Set ip source to loopback for bgp learned routes
|
|
route-map RM_SET_SRC permit 10
|
|
set src {{ lo_ipv4_addrs[0] | ip }}
|
|
!
|
|
{% if lo_ipv6_addrs|length > 0 %}
|
|
route-map RM_SET_SRC6 permit 10
|
|
set src {{ lo_ipv6_addrs[0] | ip }}
|
|
!
|
|
{% endif %}
|
|
ip protocol bgp route-map RM_SET_SRC
|
|
!
|
|
{% if lo_ipv6_addrs|length > 0 %}
|
|
ipv6 protocol bgp route-map RM_SET_SRC6
|
|
!
|
|
{% endif %}
|
|
{% endblock source_loopback %}
|
|
!
|
|
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
|
|
{% block bgp_init %}
|
|
!
|
|
! bgp multiple-instance
|
|
!
|
|
route-map FROM_BGP_SPEAKER_V4 permit 10
|
|
!
|
|
route-map TO_BGP_SPEAKER_V4 deny 10
|
|
!
|
|
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|
bgp log-neighbor-changes
|
|
bgp bestpath as-path multipath-relax
|
|
no bgp default ipv4-unicast
|
|
{# Advertise graceful restart capability for ToR #}
|
|
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
|
|
bgp graceful-restart
|
|
{% endif %}
|
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
|
bgp router-id {{ prefix | ip }}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{# advertise loopback #}
|
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
|
network {{ prefix | ip }}/32
|
|
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
|
address-family ipv6
|
|
network {{ prefix | ip }}/128
|
|
exit-address-family
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endblock bgp_init %}
|
|
{% endif %}
|
|
{% block vlan_advertisement %}
|
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
|
{% if prefix | ipv4 %}
|
|
network {{ prefix }}
|
|
{% elif prefix | ipv6 %}
|
|
address-family ipv6
|
|
network {{ prefix }}
|
|
exit-address-family
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endblock vlan_advertisement %}
|
|
{% block bgp_sessions %}
|
|
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
|
|
{% if bgp_session['asn'] | int != 0 %}
|
|
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
|
|
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
|
|
{# 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 %}
|
|
{% 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
|
|
{% endif %}
|
|
{% if neighbor_addr | ipv4 %}
|
|
address-family ipv4
|
|
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
|
|
neighbor {{ neighbor_addr }} allowas-in 1
|
|
{% endif %}
|
|
neighbor {{ neighbor_addr }} activate
|
|
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
|
|
{% if bgp_session['rrclient'] | int != 0 %}
|
|
neighbor {{ neighbor_addr }} route-reflector-client
|
|
{% endif %}
|
|
{% if bgp_session['nhopself'] | int != 0 %}
|
|
neighbor {{ neighbor_addr }} next-hop-self
|
|
{% endif %}
|
|
maximum-paths 64
|
|
exit-address-family
|
|
{% endif %}
|
|
{% if neighbor_addr | ipv6 %}
|
|
address-family ipv6
|
|
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
|
|
neighbor {{ neighbor_addr }} allowas-in 1
|
|
{% endif %}
|
|
neighbor {{ neighbor_addr }} activate
|
|
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
|
|
{% if bgp_session['rrclient'] | int != 0 %}
|
|
neighbor {{ neighbor_addr }} route-reflector-client
|
|
{% endif %}
|
|
{% if bgp_session['nhopself'] | int != 0 %}
|
|
neighbor {{ neighbor_addr }} next-hop-self
|
|
{% endif %}
|
|
{% if bgp_session['asn'] != DEVICE_METADATA['localhost']['bgp_asn'] %}
|
|
neighbor {{ neighbor_addr }} route-map set-next-hop-global-v6 in
|
|
{% endif %}
|
|
maximum-paths 64
|
|
exit-address-family
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endblock bgp_sessions %}
|
|
{% block bgp_peers_with_range %}
|
|
{% if BGP_PEER_RANGE %}
|
|
{% for bgp_peer in BGP_PEER_RANGE.values() %}
|
|
neighbor {{ bgp_peer['name'] }} peer-group
|
|
neighbor {{ bgp_peer['name'] }} passive
|
|
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
|
|
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
|
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
|
{% if name == 'Loopback1' %}
|
|
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% for ip_range in bgp_peer['ip_range'] %}
|
|
bgp listen range {{ip_range}} peer-group {{ bgp_peer['name'] }}
|
|
{% endfor %}
|
|
address-family ipv4
|
|
neighbor {{ bgp_peer['name'] }} activate
|
|
neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
|
|
neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in
|
|
neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out
|
|
maximum-paths 64
|
|
exit-address-family
|
|
address-family ipv6
|
|
neighbor {{ bgp_peer['name'] }} activate
|
|
neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
|
|
maximum-paths 64
|
|
exit-address-family
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endblock bgp_peers_with_range %}
|
|
!
|
|
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
|
|
maximum-paths 64
|
|
!
|
|
route-map ISOLATE permit 10
|
|
set as-path prepend {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|
{% endif %}
|
|
!
|
|
route-map set-next-hop-global-v6 permit 10
|
|
set ipv6 next-hop prefer-global
|
|
!
|