<?xml version="1.0"?>
<interfaceDefinition>
  <node name="vpp" owner="${vyos_conf_scripts_dir}/vpp.py">
    <properties>
      <help>Accelerated data-plane</help>
      <priority>295</priority>
    </properties>
    <children>
      <node name="cpu">
        <properties>
          <help>CPU settings</help>
        </properties>
        <children>
          <leafNode name="corelist-workers">
            <properties>
              <help>List of cores worker threads</help>
              <valueHelp>
                <format>&lt;id&gt;</format>
                <description>CPU core id</description>
              </valueHelp>
              <valueHelp>
                <format>&lt;idN&gt;-&lt;idM&gt;</format>
                <description>CPU core id range (use '-' as delimiter)</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--allow-range --range 0-512"/>
              </constraint>
              <constraintErrorMessage>not a valid CPU core value or range</constraintErrorMessage>
              <multi/>
            </properties>
          </leafNode>
          <leafNode name="main-core">
            <properties>
              <help>Main core</help>
              <valueHelp>
                <format>u32:0-512</format>
                <description>Assign main thread to specific core</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-512"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="skip-cores">
            <properties>
              <help>Skip cores</help>
              <valueHelp>
                <format>u32:0-512</format>
                <description>Skip cores</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-512"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="workers">
            <properties>
              <help>Create worker threads</help>
              <valueHelp>
                <format>u32:0-4294967295</format>
                <description>Worker threads</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-512"/>
              </constraint>
            </properties>
          </leafNode>
        </children>
      </node>
      <tagNode name="interface">
        <properties>
          <help>Interface</help>
          <valueHelp>
            <format>ethN</format>
            <description>Interface name</description>
          </valueHelp>
          <constraint>
            <regex>((eth|lan)[0-9]+|(eno|ens|enp|enx).+)</regex>
          </constraint>
          <constraintErrorMessage>Invalid interface name</constraintErrorMessage>
        </properties>
        <children>
          <leafNode name="num-rx-desc">
            <properties>
              <help>Number of receive ring descriptors</help>
              <valueHelp>
                <format>u32:256-8192</format>
                <description>Number of receive ring descriptors</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 256-8192"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="num-tx-desc">
            <properties>
              <help>Number of tranceive ring descriptors</help>
              <valueHelp>
                <format>u32:256-8192</format>
                <description>Number of tranceive ring descriptors</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 256-8192"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="num-rx-queues">
            <properties>
              <help>Number of receive ring descriptors</help>
              <valueHelp>
                <format>u32:256-8192</format>
                <description>Number of receive queues</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 256-8192"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="num-tx-queues">
            <properties>
              <help>Number of tranceive ring descriptors</help>
              <valueHelp>
                <format>u32:256-8192</format>
                <description>Number of tranceive queues</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 256-8192"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name='pci'>
            <properties>
              <help>PCI address allocation</help>
              <valueHelp>
                <format>auto</format>
                <description>Auto detect PCI address</description>
              </valueHelp>
              <valueHelp>
                <format>&lt;xxxx:xx:xx.x&gt;</format>
                <description>Set Peripheral Component Interconnect (PCI) address</description>
              </valueHelp>
              <constraint>
                <regex>(auto|[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\.[0-9a-fA-F])</regex>
              </constraint>
            </properties>
            <defaultValue>auto</defaultValue>
          </leafNode>
          <leafNode name="rx-mode">
            <properties>
              <help>Receive packet processing mode</help>
              <completionHelp>
                <list>polling interrupt adaptive</list>
              </completionHelp>
              <valueHelp>
                <format>polling</format>
                <description>Constantly check for new data</description>
              </valueHelp>
              <valueHelp>
                <format>interrupt</format>
                <description>Interrupt mode</description>
              </valueHelp>
              <valueHelp>
                <format>adaptive</format>
                <description>Adaptive mode</description>
              </valueHelp>
              <constraint>
                <regex>(polling|interrupt|adaptive)</regex>
              </constraint>
            </properties>
          </leafNode>
        </children>
      </tagNode>
      <node name="ip">
        <properties>
          <help>IP settings</help>
        </properties>
        <children>
          <leafNode name="heap-size">
            <properties>
              <help>IPv4 heap size</help>
              <valueHelp>
                <format>u32:0-4294967295</format>
                <description>Amount of memory (in Mbytes) dedicated to the destination IP lookup table</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-4294967295"/>
              </constraint>
            </properties>
            <defaultValue>32</defaultValue>
          </leafNode>
        </children>
      </node>
      <node name="ip6">
        <properties>
          <help>IPv6 settings</help>
        </properties>
        <children>
          <leafNode name="heap-size">
            <properties>
              <help>IPv6 heap size</help>
              <valueHelp>
                <format>u32:0-4294967295</format>
                <description>Amount of memory (in Mbytes) dedicated to the destination IP lookup table</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-4294967295"/>
              </constraint>
            </properties>
            <defaultValue>32</defaultValue>
          </leafNode>
          <leafNode name="hash-buckets">
            <properties>
              <help>IPv6 forwarding table hash buckets</help>
              <valueHelp>
                <format>u32:1-4294967295</format>
                <description>IPv6 forwarding table hash buckets</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-4294967295"/>
              </constraint>
            </properties>
            <defaultValue>65536</defaultValue>
          </leafNode>
        </children>
      </node>
      <node name="l2learn">
        <properties>
          <help>Level 2 MAC address learning settings</help>
        </properties>
        <children>
          <leafNode name="limit">
            <properties>
              <help>Number of MAC addresses in the L2 FIB</help>
              <valueHelp>
                <format>u32:1-4294967295</format>
                <description>Number of concurent entries</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 1-4294967295"/>
              </constraint>
            </properties>
            <defaultValue>4194304</defaultValue>
          </leafNode>
        </children>
      </node>
      <node name="logging">
        <properties>
          <help>Loggint settings</help>
        </properties>
        <children>
          <leafNode name="default-log-level">
            <properties>
              <help>default-log-level</help>
              <completionHelp>
                <list>alert crit debug disabled emerg err info notice warn</list>
              </completionHelp>
              <valueHelp>
                <format>alert</format>
                <description>Alert</description>
              </valueHelp>
              <valueHelp>
                <format>crit</format>
                <description>Critical</description>
              </valueHelp>
              <valueHelp>
                <format>debug</format>
                <description>Debug</description>
              </valueHelp>
              <valueHelp>
                <format>disabled</format>
                <description>Disabled</description>
              </valueHelp>
              <valueHelp>
                <format>emerg</format>
                <description>Emergency</description>
              </valueHelp>
              <valueHelp>
                <format>err</format>
                <description>Error</description>
              </valueHelp>
              <valueHelp>
                <format>info</format>
                <description>Informational</description>
              </valueHelp>
              <valueHelp>
                <format>notice</format>
                <description>Notice</description>
              </valueHelp>
              <valueHelp>
                <format>warn</format>
                <description>Warning</description>
              </valueHelp>
              <constraint>
                <regex>(alert|crit|debug|disabled|emerg|err|info|notice|warn)</regex>
              </constraint>
            </properties>
          </leafNode>
        </children>
      </node>
      <node name="physmem">
        <properties>
          <help>Memory settings</help>
        </properties>
        <children>
          <leafNode name="max-size">
            <properties>
              <help>Set memory size for protectable memory allocator (pmalloc) memory space</help>
              <valueHelp>
                <format>&lt;number&gt;m</format>
                <description>Megabyte</description>
              </valueHelp>
              <valueHelp>
                <format>&lt;number&gt;g</format>
                <description>Gigabyte</description>
              </valueHelp>
            </properties>
          </leafNode>
        </children>
      </node>
      <node name="unix">
        <properties>
          <help>Unix settings</help>
        </properties>
        <children>
          <leafNode name="poll-sleep-usec">
            <properties>
              <help>Add a fixed-sleep between main loop poll</help>
              <valueHelp>
                <format>u32:0-4294967295</format>
                <description>Number of receive queues</description>
              </valueHelp>
              <constraint>
                <validator name="numeric" argument="--range 0-4294967295"/>
              </constraint>
            </properties>
            <defaultValue>0</defaultValue>
          </leafNode>
        </children>
      </node>
    </children>
  </node>
</interfaceDefinition>