<?xml version="1.0"?>
<!-- Border Gateway Protocol (BGP) configuration -->
<interfaceDefinition>
  <node name="protocols">
    <children>
      <tagNode name="bgp" owner="${vyos_conf_scripts_dir}/protocols_bgp.py">
        <properties>
          <help>Border Gateway Protocol (BGP)</help>
          <valueHelp>
            <format>u32:1-4294967294</format>
            <description>AS number</description>
          </valueHelp>
          <constraint>
            <validator name="numeric" argument="--range 1-4294967294"/>
          </constraint>
          <priority>820</priority>
        </properties>
        <children>
          <node name="address-family">
            <properties>
              <help>BGP address-family parameters</help>
            </properties>
            <children>
              <node name="ipv4-unicast">
                <properties>
                  <help>IPv4 BGP settings</help>
                </properties>
                <children>
                  <tagNode name="aggregate-address">
                    <properties>
                      <help>BGP aggregate network</help>
                      <valueHelp>
                        <format>ipv4net</format>
                        <description>BGP aggregate network</description>
                      </valueHelp>
                      <constraint>
                        <validator name="ipv4-prefix"/>
                      </constraint>
                    </properties>
                    <children>
                      #include <include/bgp-afi-aggregate-address.xml.i>
                    </children>
                  </tagNode>
                  <tagNode name="network">
                    <properties>
                      <help>BGP network</help>
                      <valueHelp>
                        <format>ipv4net</format>
                        <description>BGP network</description>
                      </valueHelp>
                      <constraint>
                        <validator name="ipv4-prefix"/>
                      </constraint>
                    </properties>
                    <children>
                      <leafNode name="backdoor">
                        <properties>
                          <help>Network as a backdoor route</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                      #include <include/bgp-route-map.xml.i>
                    </children>
                  </tagNode>
                  <node name="redistribute">
                    <properties>
                      <help>Redistribute routes from other protocols into BGP</help>
                    </properties>
                    <children>
                      <node name="connected">
                        <properties>
                          <help>Redistribute connected routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="kernel">
                        <properties>
                          <help>Redistribute kernel routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="ospf">
                        <properties>
                          <help>Redistribute OSPF routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="rip">
                        <properties>
                          <help>Redistribute RIP routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="static">
                        <properties>
                          <help>Redistribute static routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <leafNode name="table">
                        <properties>
                          <help>Redistribute non-main Kernel Routing Table</help>
                        </properties>
                      </leafNode>
                    </children>
                  </node>
                </children>
              </node>
              <node name="ipv6-unicast">
                <properties>
                  <help>IPv6 BGP settings</help>
                </properties>
                <children>
                  <tagNode name="aggregate-address">
                    <properties>
                      <help>BGP aggregate network</help>
                      <valueHelp>
                        <format>ipv6net</format>
                        <description>Aggregate network</description>
                      </valueHelp>
                      <constraint>
                        <validator name="ipv6-prefix"/>
                      </constraint>
                    </properties>
                    <children>
                      #include <include/bgp-afi-aggregate-address.xml.i>
                    </children>
                  </tagNode>
                  <tagNode name="network">
                    <properties>
                      <help>BGP network</help>
                      <valueHelp>
                        <format>ipv6net</format>
                        <description>Aggregate network</description>
                      </valueHelp>
                      <constraint>
                        <validator name="ipv6-prefix"/>
                      </constraint>
                    </properties>
                    <children>
                      <leafNode name="path-limit">
                        <properties>
                          <help>AS-path hopcount limit</help>
                          <valueHelp>
                            <format>u32:0-255</format>
                            <description>AS path hop count limit</description>
                          </valueHelp>
                          <constraint>
                            <validator name="numeric" argument="--range 0-255"/>
                          </constraint>
                        </properties>
                      </leafNode>
                      #include <include/bgp-route-map.xml.i>
                    </children>
                  </tagNode>
                  <node name="redistribute">
                    <properties>
                      <help>Redistribute routes from other protocols into BGP</help>
                    </properties>
                    <children>
                      <node name="connected">
                        <properties>
                          <help>Redistribute connected routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="kernel">
                        <properties>
                          <help>Redistribute kernel routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="ospfv3">
                        <properties>
                          <help>Redistribute OSPFv3 routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="ripng">
                        <properties>
                          <help>Redistribute RIPng routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <node name="static">
                        <properties>
                          <help>Redistribute static routes into BGP</help>
                        </properties>
                        <children>
                          #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
                        </children>
                      </node>
                      <leafNode name="table">
                        <properties>
                          <help>Redistribute non-main Kernel Routing Table</help>
                        </properties>
                      </leafNode>
                    </children>
                  </node>
                </children>
              </node>
              <node name="l2vpn-evpn">
                <properties>
                  <help>L2VPN EVPN BGP settings</help>
                </properties>
                <children>
                  <leafNode name="advertise-all-vni">
                    <properties>
                      <help>Advertise All local VNIs</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="advertise-default-gw">
                    <properties>
                      <help>Advertise All default g/w mac-ip routes in EVPN</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="advertise-svi-ip">
                    <properties>
                      <help>Advertise svi mac-ip routes in EVPN</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="vni">
                    <properties>
                      <help>VXLAN Network Identifier</help>
                      <valueHelp>
                        <format>u32:1-16777215</format>
                        <description>VNI number</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-16777215"/>
                      </constraint>
                    </properties>
                  </leafNode>
                </children>
              </node>
            </children>
          </node>
          <node name="maximum-paths">
            <properties>
              <help>BGP multipaths</help>
            </properties>
            <children>
              <leafNode name="ebgp">
                <properties>
                  <help>Maximum ebgp multipaths</help>
                  <valueHelp>
                    <format>u32:1-255</format>
                    <description>EBGP multipaths</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 1-255"/>
                  </constraint>
                </properties>
              </leafNode>
              <leafNode name="ibgp">
                <properties>
                  <help>Maximum ibgp multipaths</help>
                  <valueHelp>
                    <format>u32:1-255</format>
                    <description>EBGP multipaths</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 1-255"/>
                  </constraint>
                </properties>
              </leafNode>
            </children>
          </node>
          <node name="listen">
            <properties>
              <help>Listen for and accept BGP dynamic neighbors from range</help>
            </properties>
            <children>
              <leafNode name="limit">
                <properties>
                  <help>Maximum number of dynamic neighbors that can be created</help>
                  <valueHelp>
                    <format>u32:1-5000</format>
                    <description>BGP neighbor limit</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 1-5000"/>
                  </constraint>
                </properties>
              </leafNode>
              <tagNode name="range">
                <properties>
                  <help>BGP dynamic neighbors listen range</help>
                  <valueHelp>
                    <format>ipv4net</format>
                    <description>IPv4 dynamic neighbors listen range</description>
                  </valueHelp>
                  <valueHelp>
                    <format>ipv6net</format>
                    <description>IPv6 dynamic neighbors listen range</description>
                  </valueHelp>
                  <constraint>
                    <validator name="ipv4-prefix"/>
                    <validator name="ipv6-prefix"/>
                  </constraint>
                </properties>
                <children>
                  #include <include/bgp-peer-group.xml.i>
                </children>
              </tagNode>
            </children>
          </node>
          <tagNode name="neighbor">
            <properties>
              <help>BGP neighbor</help>
              <valueHelp>
                <format>ipv4</format>
                <description>BGP neighbor IP address</description>
              </valueHelp>
              <valueHelp>
                <format>ipv6</format>
                <description>BGP neighbor IPv6 address</description>
              </valueHelp>
              <valueHelp>
                <format>txt</format>
                <description>Interface name</description>
              </valueHelp>
              <constraint>
                <validator name="ipv4-address"/>
                <validator name="ipv6-address"/>
                <validator name="interface-name"/>
              </constraint>
            </properties>
            <children>
              <node name="address-family">
                <properties>
                  <help>Parameters relating to IPv4 or IPv6 routes</help>
                </properties>
                <children>
                  #include <include/bgp-neighbor-afi-ipv4-unicast.xml.i>
                  #include <include/bgp-neighbor-afi-ipv6-unicast.xml.i>
                  #include <include/bgp-neighbor-afi-l2vpn-evpn.xml.i>
                </children>
              </node>
              <leafNode name="advertisement-interval">
                <properties>
                  <help>Minimum interval for sending routing updates</help>
                  <valueHelp>
                    <format>u32:0-600</format>
                    <description>Advertisement interval in seconds</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 0-600"/>
                  </constraint>
                </properties>
              </leafNode>
              #include <include/bgp-bfd.xml.i>
              #include <include/bgp-capability.xml.i>
              #include <include/bgp-description.xml.i>
              #include <include/bgp-disable-capability-negotiation.xml.i>
              #include <include/bgp-disable-connected-check.xml.i>
              <node name="disable-send-community">
                <properties>
                  <help>Disable sending community attributes to this neighbor (IPv4)</help>
                </properties>
                <children>
                  <leafNode name="extended">
                    <properties>
                      <help>Disable sending extended community attributes to this neighbor (IPv4)</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="standard">
                    <properties>
                      <help>Disable sending standard community attributes to this neighbor (IPv4)</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                </children>
              </node>
              #include <include/bgp-ebgp-multihop.xml.i>
              <node name="interface">
                <properties>
                  <help>Interface parameters</help>
                </properties>
                <children>
                  #include <include/bgp-peer-group.xml.i>
                  #include <include/bgp-remote-as.xml.i>
                  <node name="v6only">
                    <properties>
                      <help>Enable BGP with v6 link-local only</help>
                    </properties>
                    <children>
                      #include <include/bgp-peer-group.xml.i>
                      #include <include/bgp-remote-as.xml.i>
                    </children>
                  </node>
                </children>
              </node>
              #include <include/bgp-local-as.xml.i>
              #include <include/bgp-override-capability.xml.i>
              #include <include/bgp-passive.xml.i>
              #include <include/bgp-password.xml.i>
              #include <include/bgp-peer-group.xml.i>
              <leafNode name="port">
                <properties>
                  <help>Neighbor BGP port</help>
                  <valueHelp>
                    <format>u32:1-65535</format>
                    <description>Neighbor BGP port number</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 1-65535"/>
                  </constraint>
                </properties>
              </leafNode>
              #include <include/bgp-remote-as.xml.i>
              #include <include/bgp-shutdown.xml.i>
              <leafNode name="strict-capability-match">
                <properties>
                  <help>Enable strict capability negotiation</help>
                  <valueless/>
                </properties>
              </leafNode>
              <node name="timers">
                <properties>
                  <help>Neighbor timers</help>
                </properties>
                <children>
                  <leafNode name="connect">
                    <properties>
                      <help>BGP connect timer for this neighbor</help>
                      <valueHelp>
                        <format>u32:1-65535</format>
                        <description>Connect timer in seconds</description>
                      </valueHelp>
                      <valueHelp>
                        <format>0</format>
                        <description>Disable connect timer</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 0-65535"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  #include <include/bgp-timers-holdtime.xml.i>
                  #include <include/bgp-timers-keepalive.xml.i>
                </children>
              </node>
              #include <include/bgp-ttl-security.xml.i>
              #include <include/bgp-update-source.xml.i>
            </children>
          </tagNode>
          <node name="parameters">
            <properties>
              <help>BGP parameters</help>
            </properties>
            <children>
              <leafNode name="always-compare-med">
                <properties>
                  <help>Always compare MEDs from different neighbors</help>
                  <valueless/>
                </properties>
              </leafNode>
              <node name="bestpath">
                <properties>
                  <help>Default bestpath selection mechanism</help>
                </properties>
                <children>
                  <node name="as-path">
                    <properties>
                      <help>AS-path attribute comparison parameters</help>
                    </properties>
                    <children>
                      <leafNode name="confed">
                        <properties>
                          <help>Compare AS-path lengths including confederation sets and sequences</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                      <leafNode name="ignore">
                        <properties>
                          <help>Ignore AS-path length in selecting a route</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                      <leafNode name="multipath-relax">
                        <properties>
                          <help>Allow load sharing across routes that have different AS paths (but same length)</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                    </children>
                  </node>
                  <leafNode name="compare-routerid">
                    <properties>
                      <help>Compare the router-id for identical EBGP paths</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <node name="med">
                    <properties>
                      <help>MED attribute comparison parameters</help>
                    </properties>
                    <children>
                      <leafNode name="confed">
                        <properties>
                          <help>Compare MEDs among confederation paths</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                      <leafNode name="missing-as-worst">
                        <properties>
                          <help>Treat missing route as a MED as the least preferred one</help>
                          <valueless/>
                        </properties>
                      </leafNode>
                    </children>
                  </node>
                </children>
              </node>
              <leafNode name="cluster-id">
                <properties>
                  <help>Route-reflector cluster-id</help>
                  <valueHelp>
                    <format>ipv4</format>
                    <description>Route-reflector cluster-id</description>
                  </valueHelp>
                  <constraint>
                    <validator name="ipv4-address"/>
                  </constraint>
                </properties>
              </leafNode>
              <node name="confederation">
                <properties>
                  <help>AS confederation parameters</help>
                </properties>
                <children>
                  <leafNode name="identifier">
                    <properties>
                      <help>Confederation AS identifier [REQUIRED]</help>
                      <valueHelp>
                        <format>u32:1-4294967294</format>
                        <description>Confederation AS id</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-4294967294"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="peers">
                    <properties>
                      <help>Peer ASs in the BGP confederation</help>
                      <valueHelp>
                        <format>u32:1-4294967294</format>
                        <description>Peer AS number</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-4294967294"/>
                      </constraint>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <node name="dampening">
                <properties>
                  <help>Enable route-flap dampening</help>
                </properties>
                <children>
                  <leafNode name="half-life">
                    <properties>
                      <help>Half-life time for dampening [REQUIRED]</help>
                      <valueHelp>
                        <format>u32:1-45</format>
                        <description>Half-life penalty in minutes</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-45"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="max-suppress-time">
                    <properties>
                      <help>Maximum duration to suppress a stable route [REQUIRED]</help>
                      <valueHelp>
                        <format>u32:1-255</format>
                        <description>Maximum suppress duration in minutes</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-255"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="re-use">
                    <properties>
                      <help>Threshold to start reusing a route [REQUIRED]</help>
                      <valueHelp>
                        <format>u32:1-20000</format>
                        <description>Re-use penalty points</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-20000"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="start-suppress-time">
                    <properties>
                      <help>When to start suppressing a route [REQUIRED]</help>
                      <valueHelp>
                        <format>u32:1-20000</format>
                        <description>Start-suppress penalty points</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-20000"/>
                      </constraint>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <node name="default">
                <properties>
                  <help>BGP defaults</help>
                </properties>
                <children>
                  <leafNode name="local-pref">
                    <properties>
                      <help>Default local preference</help>
                      <valueHelp>
                        <format>u32</format>
                        <description>Local preference</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 0-4294967295"/>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="no-ipv4-unicast">
                    <properties>
                      <help>Deactivate IPv4 unicast for a peer by default</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <leafNode name="deterministic-med">
                <properties>
                  <help>Compare MEDs between different peers in the same AS</help>
                  <valueless/>
                </properties>
              </leafNode>
              <node name="distance">
                <properties>
                  <help>Administratives distances for BGP routes</help>
                </properties>
                <children>
                  <node name="global">
                    <properties>
                      <help>Global administratives distances for BGP routes</help>
                    </properties>
                    <children>
                      <leafNode name="external">
                        <properties>
                          <help>Administrative distance for external BGP routes</help>
                          <valueHelp>
                            <format>u32:1-255</format>
                            <description>Administrative distance for external BGP routes</description>
                          </valueHelp>
                          <constraint>
                            <validator name="numeric" argument="--range 1-255"/>
                          </constraint>
                        </properties>
                      </leafNode>
                      <leafNode name="internal">
                        <properties>
                          <help>Administrative distance for internal BGP routes</help>
                          <valueHelp>
                            <format>u32:1-255</format>
                            <description>Administrative distance for internal BGP routes</description>
                          </valueHelp>
                          <constraint>
                            <validator name="numeric" argument="--range 1-255"/>
                          </constraint>
                        </properties>
                      </leafNode>
                      <leafNode name="local">
                        <properties>
                          <help>Administrative distance for local BGP routes</help>
                          <valueHelp>
                            <format>u32:1-255</format>
                            <description>Administrative distance for internal BGP routes</description>
                          </valueHelp>
                          <constraint>
                            <validator name="numeric" argument="--range 1-255"/>
                          </constraint>
                        </properties>
                      </leafNode>
                    </children>
                  </node>
                  <tagNode name="prefix">
                    <properties>
                      <help>Administrative distance for a specific BGP prefix</help>
                      <valueHelp>
                        <format>ipv4net</format>
                        <description>Administrative distance for a specific BGP prefix</description>
                      </valueHelp>
                      <constraint>
                        <validator name="ipv4-prefix"/>
                      </constraint>
                    </properties>
                    <children>
                      <leafNode name="distance">
                        <properties>
                          <help>Administrative distance for prefix</help>
                          <valueHelp>
                            <format>u32:1-255</format>
                            <description>Administrative distance for external BGP routes</description>
                          </valueHelp>
                          <constraint>
                            <validator name="numeric" argument="--range 1-255"/>
                          </constraint>
                        </properties>
                      </leafNode>
                    </children>
                  </tagNode>
                </children>
              </node>
              <node name="graceful-restart">
                <properties>
                  <help>Graceful restart capability parameters</help>
                </properties>
                <children>
                  <leafNode name="stalepath-time">
                    <properties>
                      <help>Maximum time to hold onto restarting neighbors stale paths</help>
                      <valueHelp>
                        <format>u32:1-3600</format>
                        <description>Hold time in seconds</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-3600"/>
                      </constraint>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <leafNode name="log-neighbor-changes">
                <properties>
                  <help>Log neighbor up/down changes and reset reason</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="network-import-check">
                <properties>
                  <help>Enable IGP route check for network statements</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="no-client-to-client-reflection">
                <properties>
                  <help>Disable client to client route reflection</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="no-fast-external-failover">
                <properties>
                  <help>Disable immediate session reset on peer link down event</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="router-id">
                <properties>
                  <help>BGP router id</help>
                  <valueHelp>
                    <format>ipv4</format>
                    <description>BGP router id</description>
                  </valueHelp>
                  <constraint>
                    <validator name="ipv4-address"/>
                  </constraint>
                </properties>
              </leafNode>
            </children>
          </node>
          <tagNode name="peer-group">
            <properties>
              <help>BGP peer-group</help>
            </properties>
            <children>
              <node name="address-family">
                <properties>
                  <help>BGP peer-group address-family parameters</help>
                </properties>
                <children>
                  #include <include/bgp-neighbor-afi-ipv4-unicast.xml.i>
                  #include <include/bgp-neighbor-afi-ipv6-unicast.xml.i>
                  #include <include/bgp-neighbor-afi-l2vpn-evpn.xml.i>
                </children>
              </node>
              #include <include/bgp-bfd.xml.i>
              #include <include/bgp-capability.xml.i>
              #include <include/bgp-description.xml.i>
              #include <include/bgp-disable-capability-negotiation.xml.i>
              #include <include/bgp-disable-connected-check.xml.i>
              #include <include/bgp-ebgp-multihop.xml.i>
              #include <include/bgp-local-as.xml.i>
              #include <include/bgp-override-capability.xml.i>
              #include <include/bgp-passive.xml.i>
              #include <include/bgp-password.xml.i>
              #include <include/bgp-remote-as.xml.i>
              #include <include/bgp-shutdown.xml.i>
              #include <include/bgp-ttl-security.xml.i>
              #include <include/bgp-update-source.xml.i>
            </children>
          </tagNode>
          #include <include/bgp-route-map.xml.i>
          <node name="timers">
            <properties>
              <help>BGP protocol timers</help>
            </properties>
            <children>
              #include <include/bgp-timers-holdtime.xml.i>
              #include <include/bgp-timers-keepalive.xml.i>
            </children>
          </node>
        </children>
      </tagNode>
    </children>
  </node>
</interfaceDefinition>