<?xml version="1.0"?>
<interfaceDefinition>
  <node name="interfaces">
    <properties>
      <help>Network interfaces</help>
    </properties>
    <children>
      <tagNode name="ethernet" owner="${vyos_conf_scripts_dir}/interfaces-ethernet.py">
        <properties>
          <help>Ethernet Interface</help>
          <priority>318</priority>
          <valueHelp>
            <format>ethN</format>
            <description>Ethernet interface name</description>
          </valueHelp>
          <constraint>
            <regex>^((eth|lan)[0-9]+|(eno|ens|enp|enx).+)$</regex>
          </constraint>
          <constraintErrorMessage>Invalid Ethernet interface name</constraintErrorMessage>
        </properties>
        <children>
          #include <include/interface/address-ipv4-ipv6-dhcp.xml.i>
          #include <include/interface/description.xml.i>
          #include <include/interface/dhcp-options.xml.i>
          #include <include/interface/dhcpv6-options.xml.i>
          <leafNode name="disable-flow-control">
            <properties>
              <help>Disable Ethernet flow control (pause frames)</help>
              <valueless/>
            </properties>
          </leafNode>
          #include <include/interface/disable-link-detect.xml.i>
          #include <include/interface/disable.xml.i>
          #include <include/interface/interface-firewall.xml.i>
          #include <include/interface/interface-policy.xml.i>
          <leafNode name="duplex">
            <properties>
              <help>Duplex mode</help>
              <completionHelp>
                <list>auto half full</list>
              </completionHelp>
              <valueHelp>
                <format>auto</format>
                <description>Auto negotiation (default)</description>
              </valueHelp>
              <valueHelp>
                <format>half</format>
                <description>Half duplex</description>
              </valueHelp>
              <valueHelp>
                <format>full</format>
                <description>Full duplex</description>
              </valueHelp>
              <constraint>
                <regex>^(auto|half|full)$</regex>
              </constraint>
              <constraintErrorMessage>duplex must be auto, half or full</constraintErrorMessage>
            </properties>
            <defaultValue>auto</defaultValue>
          </leafNode>
          #include <include/interface/eapol.xml.i>
          #include <include/interface/hw-id.xml.i>
          #include <include/interface/ipv4-options.xml.i>
          #include <include/interface/ipv6-options.xml.i>
          #include <include/interface/mac.xml.i>
          #include <include/interface/mtu-68-16000.xml.i>
          #include <include/interface/mirror.xml.i>
          <node name="offload">
            <properties>
              <help>Configurable offload options</help>
            </properties>
            <children>
              <leafNode name="gro">
                <properties>
                  <help>Enable Generic Receive Offload</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="gso">
                <properties>
                  <help>Enable Generic Segmentation Offload</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="lro">
                <properties>
                  <help>Enable Large Receive Offload</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="rps">
                <properties>
                  <help>Enable Receive Packet Steering</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="sg">
                <properties>
                  <help>Enable Scatter-Gather</help>
                  <valueless/>
                </properties>
              </leafNode>
              <leafNode name="tso">
                <properties>
                  <help>Enable TCP Segmentation Offloading</help>
                  <valueless/>
                </properties>
              </leafNode>
            </children>
          </node>
          <leafNode name="speed">
            <properties>
              <help>Link speed (default: auto)</help>
              <completionHelp>
                <list>auto 10 100 1000 2500 5000 10000 25000 40000 50000 100000</list>
              </completionHelp>
              <valueHelp>
                <format>auto</format>
                <description>Auto negotiation</description>
              </valueHelp>
              <valueHelp>
                <format>10</format>
                <description>10 Mbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>100</format>
                <description>100 Mbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>1000</format>
                <description>1 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>2500</format>
                <description>2.5 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>5000</format>
                <description>5 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>10000</format>
                <description>10 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>25000</format>
                <description>25 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>40000</format>
                <description>40 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>50000</format>
                <description>50 Gbit/sec</description>
              </valueHelp>
              <valueHelp>
                <format>100000</format>
                <description>100 Gbit/sec</description>
              </valueHelp>
              <constraint>
                <regex>^(auto|10|100|1000|2500|5000|10000|25000|40000|50000|100000)$</regex>
              </constraint>
              <constraintErrorMessage>Speed must be auto, 10, 100, 1000, 2500, 5000, 10000, 25000, 40000, 50000 or 100000</constraintErrorMessage>
            </properties>
            <defaultValue>auto</defaultValue>
          </leafNode>
          <node name="ring-buffer">
            <properties>
              <help>Shared buffer between the device driver and NIC</help>
            </properties>
            <children>
              <leafNode name="rx">
                <properties>
                  <help>RX ring buffer</help>
                  <valueHelp>
                    <format>u32:80-16384</format>
                    <description>ring buffer size</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 80-16384"/>
                  </constraint>
                </properties>
              </leafNode>
              <leafNode name="tx">
                <properties>
                  <help>TX ring buffer</help>
                  <valueHelp>
                    <format>u32:80-16384</format>
                    <description>ring buffer size</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 80-16384"/>
                  </constraint>
                </properties>
              </leafNode>
            </children>
          </node>
          #include <include/interface/vif-s.xml.i>
          #include <include/interface/vif.xml.i>
          #include <include/interface/vrf.xml.i>
          #include <include/interface/xdp.xml.i>
        </children>
      </tagNode>
    </children>
  </node>
</interfaceDefinition>