! {% 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 minigraph_bgp_asn is not none %} {% block bgp_init %} ! ! bgp multiple-instance ! route-map FROM_BGP_SPEAKER_V4 permit 10 ! route-map TO_BGP_SPEAKER_V4 deny 10 ! router bgp {{ minigraph_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 %} network {{ vlan_interface['subnet'] }} {% endfor %} {% endblock vlan_advertisement %} {% block bgp_sessions %} {% for bgp_session in minigraph_bgp %} {% if bgp_session['asn'] != 0 %} neighbor {{ bgp_session['addr'] }} remote-as {{ bgp_session['asn'] }} neighbor {{ bgp_session['addr'] }} description {{ bgp_session['name'] }} {% if bgp_admin_state and bgp_admin_state.has_key(bgp_session['addr']) and bgp_admin_state[bgp_session['addr']]==False or bgp_admin_state and not bgp_admin_state.has_key(bgp_session['addr']) and bgp_admin_state.has_key('all') and bgp_admin_state['all']==False %} neighbor {{ bgp_session['addr'] }} shutdown {% endif %} {% if bgp_session['addr'] | ipv4 %} {% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %} neighbor {{ bgp_session['addr'] }} allowas-in 1 {% endif %} {% endif %} {% if bgp_session['addr'] | ipv6 %} address-family ipv6 {% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %} neighbor {{ bgp_session['addr'] }} allowas-in 1 {% endif %} neighbor {{ bgp_session['addr'] }} activate maximum-paths 64 exit-address-family {% endif %} {% endif %} {% endfor %} {% endblock bgp_sessions %} {% block bgp_peers_with_range %} {% for bgp_peer in minigraph_bgp_peers_with_range %} 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 minigraph_bgp_asn is not none %} maximum-paths 64 ! route-map ISOLATE permit 10 set as-path prepend {{ minigraph_bgp_asn }} {% endif %} !