! {% block banner %} ! =========== Managed by sonic-cfggen DO NOT edit manually! ==================== ! generated by templates/quagga/bgpd.conf.j2 using minigraph_facts.py ! file: bgpd.conf ! {% endblock banner %} ! {% block system_init %} hostname {{ inventory_hostname }} password zebra log syslog informational log facility local4 ! enable password {# {{ en_passwd }} TODO: param needed #} {% endblock system_init %} ! {% 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 {# Advertise graceful restart capability for ToR #} {% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %} bgp graceful-restart {% endif %} {# TODO: use lo[0] for backward compatibility, will revisit the case with multiple lo interfaces #} bgp router-id {{ minigraph_lo_interfaces[0]['addr'] }} {# advertise loopback #} {% for lo in minigraph_lo_interfaces %} {% if lo['addr'] | ipv4 %} network {{ lo['addr'] }}/32 {% elif lo['addr'] | ipv6 %} address-family ipv6 network {{ lo['addr'] }}/128 exit-address-family {% endif %} {% endfor %} {% endblock bgp_init %} {% endif %} {% block vlan_advertisement %} {% for vlan_interface in minigraph_vlan_interfaces %} {% if vlan_interface['addr'] | ipv4 %} network {{ vlan_interface['subnet'] }} {% elif vlan_interface['addr'] | ipv6 %} address-family ipv6 network {{ vlan_interface['subnet'] }} exit-address-family {% endif %} {% endfor %} {% endblock vlan_advertisement %} {% block bgp_sessions %} {% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %} {% if bgp_session['asn'] != 0 %} neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }} neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }} {% 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 %} {% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %} neighbor {{ neighbor_addr }} allowas-in 1 {% endif %} {% endif %} {% if neighbor_addr | ipv6 %} address-family ipv6 {% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %} neighbor {{ neighbor_addr }} allowas-in 1 {% endif %} neighbor {{ neighbor_addr }} activate maximum-paths 64 exit-address-family {% endif %} {% endif %} {% endfor %} {% endblock bgp_sessions %} {% block bgp_peers_with_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[deployment_id] }} neighbor {{ bgp_peer['name'] }} ebgp-multihop 255 neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound neighbor {{ bgp_peer['name'] }} update-source Loopback0 neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out {% for ip_range in bgp_peer['ip_range'] %} bgp listen range {{ip_range}} peer-group {{ bgp_peer['name'] }} {% endfor %} {% endfor %} {% 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 %} !