frr defaults datacenter
service integrated-vtysh-config
log syslog

# Without this frr and kernel ECMP routes sometimes get desynced when a link is
# lost and found. Maybe related to https://github.com/FRRouting/frr/issues/12239.
zebra nexthop-group keep 1

# we only have the default route, so allow talking to BGP peers over it
ip nht resolve-via-default

router bgp {{ asn.asn }}
  bgp bestpath as-path multipath-relax

  neighbor fabric peer-group
  neighbor fabric remote-as external
  neighbor fabric capability extended-nexthop

{% for iface in interfaces | selectattr('name', 'match', '^lan') %}
  neighbor {{ iface.name }} interface peer-group fabric
{% endfor %}

  address-family ipv4 unicast
    redistribute connected route-map loopback
    neighbor fabric activate
    neighbor fabric route-map local out
  exit-address-family

  address-family ipv6 unicast
    redistribute connected route-map loopback
    neighbor fabric activate
    neighbor fabric route-map local out
  exit-address-family

{% if cluster is defined and cluster.custom_fields and cluster.custom_fields.vlans %}
  address-family l2vpn evpn
    neighbor fabric activate
    neighbor fabric route-map local out
    advertise-all-vni
  exit-address-family
{% endif %}

bgp as-path access-list local permit ^$

route-map loopback permit 1
  match interface lo

route-map local permit 1
  match as-path local