<?xml version="1.0"?>
<interfaceDefinition>
  <node name="interfaces">
    <children>
      <tagNode name="bridge" owner="${vyos_conf_scripts_dir}/interfaces-bridge.py">
        <properties>
          <help>Bridge Interface</help>
          <priority>310</priority>
          <constraint>
            <regex>br[0-9]+</regex>
          </constraint>
          <constraintErrorMessage>Bridge interface must be named brN</constraintErrorMessage>
          <valueHelp>
            <format>brN</format>
            <description>Bridge interface name</description>
          </valueHelp>
        </properties>
        <children>
          #include <include/interface/address-ipv4-ipv6-dhcp.xml.i>
          <leafNode name="aging">
            <properties>
              <help>MAC address aging interval</help>
              <valueHelp>
                <format>u32:0</format>
                <description>Disable MAC address learning (always flood)</description>
              </valueHelp>
              <valueHelp>
                <format>u32:10-1000000</format>
                <description>MAC address aging time in seconds</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-0 --range 10-1000000"/>
              </constraint>
            </properties>
            <defaultValue>300</defaultValue>
          </leafNode>
          #include <include/interface/description.xml.i>
          #include <include/interface/dhcp-options.xml.i>
          #include <include/interface/dhcpv6-options.xml.i>
          #include <include/interface/disable-link-detect.xml.i>
          #include <include/interface/disable.xml.i>
          #include <include/interface/vrf.xml.i>
          #include <include/interface/mtu-68-16000.xml.i>
          #include <include/interface/interface-firewall.xml.i>
          #include <include/interface/interface-policy.xml.i>
          <leafNode name="forwarding-delay">
            <properties>
              <help>Forwarding delay</help>
              <valueHelp>
                <format>u32:0-200</format>
                <description>Spanning Tree Protocol forwarding delay in seconds</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-200"/>
              </constraint>
              <constraintErrorMessage>Forwarding delay must be between 0 and 200 seconds</constraintErrorMessage>
            </properties>
            <defaultValue>14</defaultValue>
          </leafNode>
          <leafNode name="hello-time">
            <properties>
              <help>Hello packet advertisement interval</help>
              <valueHelp>
                <format>u32:1-10</format>
                <description>Spanning Tree Protocol hello advertisement interval in seconds</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-10"/>
              </constraint>
              <constraintErrorMessage>Bridge Hello interval must be between 1 and 10 seconds</constraintErrorMessage>
            </properties>
            <defaultValue>2</defaultValue>
          </leafNode>
          <node name="igmp">
            <properties>
              <help>Internet Group Management Protocol (IGMP) settings</help>
            </properties>
            <children>
              <leafNode name="querier">
                <properties>
                  <help>Enable IGMP querier</help>
                  <valueless/>
                </properties>
              </leafNode>
            </children>
          </node>
          #include <include/interface/ipv4-options.xml.i>
          #include <include/interface/ipv6-options.xml.i>
          #include <include/interface/mac.xml.i>
          #include <include/interface/mirror.xml.i>
          <leafNode name="enable-vlan">
            <properties>
              <help>Enable VLAN aware bridge</help>
              <valueless/>
            </properties>
          </leafNode>
          <leafNode name="max-age">
            <properties>
              <help>Interval at which neighbor bridges are removed</help>
              <valueHelp>
                <format>u32:1-40</format>
                <description>Bridge maximum aging time in seconds</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-40"/>
              </constraint>
              <constraintErrorMessage>Bridge max aging value must be between 1 and 40 seconds</constraintErrorMessage>
            </properties>
            <defaultValue>20</defaultValue>
          </leafNode>
          <node name="member">
            <properties>
              <help>Bridge member interfaces</help>
            </properties>
            <children>
              <tagNode name="interface">
                <properties>
                  <help>Member interface name</help>
                  <completionHelp>
                    <script>${vyos_completion_dir}/list_interfaces.py --bridgeable</script>
                  </completionHelp>
                </properties>
                <children>
                  <leafNode name="native-vlan">
                    <properties>
                      <help>Specify VLAN id which should natively be present on the link</help>
                      <valueHelp>
                        <format>u32:1-4094</format>
                        <description>Virtual Local Area Network (VLAN) ID</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-4094"/>
                      </constraint>
                      <constraintErrorMessage>VLAN ID must be between 1 and 4094</constraintErrorMessage>
                    </properties>
                  </leafNode>
                  <leafNode name="allowed-vlan">
                    <properties>
                      <help>Specify VLAN id which is allowed in this trunk interface</help>
                      <valueHelp>
                        <format>&lt;id&gt;</format>
                        <description>VLAN id allowed to pass this interface</description>
                      </valueHelp>
                      <valueHelp>
                        <format>&lt;idN&gt;-&lt;idM&gt;</format>
                        <description>VLAN id range allowed on this interface (use '-' as delimiter)</description>
                      </valueHelp>
                      <constraint>
                        <validator name="allowed-vlan"/>
                      </constraint>
                      <constraintErrorMessage>not a valid VLAN ID value or range</constraintErrorMessage>
                      <multi/>
                    </properties>
                  </leafNode>
                  <leafNode name="cost">
                    <properties>
                      <help>Bridge port cost</help>
                      <valueHelp>
                        <format>u32:1-65535</format>
                        <description>Path cost value for Spanning Tree Protocol</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-65535"/>
                      </constraint>
                      <constraintErrorMessage>Path cost value must be between 1 and 65535</constraintErrorMessage>
                    </properties>
                    <defaultValue>100</defaultValue>
                  </leafNode>
                  <leafNode name="priority">
                    <properties>
                      <help>Bridge port priority</help>
                      <valueHelp>
                        <format>u32:0-63</format>
                        <description>Bridge port priority</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 1-63"/>
                      </constraint>
                      <constraintErrorMessage>Port priority value must be between 0 and 63</constraintErrorMessage>
                    </properties>
                    <defaultValue>32</defaultValue>
                  </leafNode>
                  <leafNode name="isolated">
                    <properties>
                      <help>Port is isolated (also known as Private-VLAN)</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                </children>
              </tagNode>
            </children>
          </node>
          <leafNode name="priority">
            <properties>
              <help>Priority for this bridge</help>
              <valueHelp>
                <format>u32:0-65535</format>
                <description>Bridge priority</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-65535"/>
              </constraint>
              <constraintErrorMessage>Bridge priority must be between 0 and 65535 (multiples of 4096)</constraintErrorMessage>
            </properties>
            <defaultValue>32768</defaultValue>
          </leafNode>
          <leafNode name="stp">
            <properties>
              <help>Enable spanning tree protocol</help>
              <valueless/>
            </properties>
          </leafNode>
          #include <include/interface/redirect.xml.i>
          #include <include/interface/vif.xml.i>
        </children>
      </tagNode>
    </children>
  </node>
</interfaceDefinition>