<?xml version="1.0"?>
<interfaceDefinition>
  <node name="service">
    <children>
      <node name="router-advert" owner="${vyos_conf_scripts_dir}/service-router-advert.py">
        <properties>
          <help>IPv6 Router Advertisements (RAs) service</help>
          <priority>900</priority>
        </properties>
        <children>
          <tagNode name="interface">
            <properties>
              <help>Interface to send DDNS updates for [REQUIRED]</help>
              <completionHelp>
                <script>${vyos_completion_dir}/list_interfaces.py</script>
              </completionHelp>
            </properties>
            <children>
              <leafNode name="hop-limit">
                <properties>
                  <help>Set Hop Count field of the IP header for outgoing packets (default: 64)</help>
                  <valueHelp>
                    <format>1-255</format>
                    <description>Value should represent current diameter of the Internet</description>
                  </valueHelp>
                  <valueHelp>
                    <format>0</format>
                    <description>Unspecified (by this router)</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 0-255"/>
                  </constraint>
                  <constraintErrorMessage>Hop count must be between 0 and 255</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="default-lifetime">
                <properties>
                  <help>Lifetime associated with the default router in units of seconds</help>
                  <valueHelp>
                    <format>4-9000</format>
                    <description>Router Lifetime in seconds</description>
                  </valueHelp>
                  <valueHelp>
                    <format>0</format>
                    <description>Not a default router</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 0-0 --range 4-9000"/>
                  </constraint>
                  <constraintErrorMessage>Default router livetime bust be 0 or between 4 and 9000</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="default-preference">
                <properties>
                  <help>Preference associated with the default router,</help>
                  <completionHelp>
                    <list>low medium high</list>
                  </completionHelp>
                  <valueHelp>
                    <format>low</format>
                    <description>Default router has low preference</description>
                  </valueHelp>
                  <valueHelp>
                    <format>medium</format>
                    <description>Default router has medium preference (default)</description>
                  </valueHelp>
                  <valueHelp>
                    <format>high</format>
                    <description>Default router has high preference</description>
                  </valueHelp>
                  <constraint>
                    <regex>(low|medium|high)</regex>
                  </constraint>
                  <constraintErrorMessage>Default preference must be low, medium or high</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="dnssl">
                <properties>
                  <help>DNS search list</help>
                  <multi/>
                </properties>
              </leafNode>
              <leafNode name="link-mtu">
                <properties>
                  <help>Link MTU value placed in RAs, exluded in RAs if unset</help>
                  <valueHelp>
                    <format>1280-9000</format>
                    <description>Link MTU value in RAs</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 1280-9000"/>
                  </constraint>
                  <constraintErrorMessage>Link MTU must be between 1280 and 9000</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="managed-flag">
                <properties>
                  <help>Hosts use the administered (stateful) protocol for address autoconfiguration in addition to any addresses autoconfigured using SLAAC</help>
                  <valueless/>
                </properties>
              </leafNode>
              <node name="interval">
                <properties>
                  <help>Set interval between unsolicited multicast RAs</help>
                </properties>
                <children>
                  <leafNode name="max">
                    <properties>
                      <help>Maximum interval between unsolicited multicast RAs (default: 600)</help>
                      <valueHelp>
                        <format>4-1800</format>
                        <description>Maximum interval in seconds</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 4-1800"/>
                      </constraint>
                      <constraintErrorMessage>Maximum interval must be between 4 and 1800 seconds</constraintErrorMessage>
                    </properties>
                  </leafNode>
                  <leafNode name="min">
                    <properties>
                      <help>Minimum interval between unsolicited multicast RAs</help>
                      <valueHelp>
                        <format>3-1350</format>
                        <description>Minimum interval in seconds</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 3-1350"/>
                      </constraint>
                      <constraintErrorMessage>Minimum interval must be between 3 and 1350 seconds</constraintErrorMessage>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <leafNode name="name-server">
                <properties>
                  <help>IPv6 address of recursive DNS server</help>
                  <valueHelp>
                    <format>ipv6</format>
                    <description>IPv6 address of DNS name server</description>
                  </valueHelp>
                  <constraint>
                    <validator name="ipv6-address"/>
                  </constraint>
                  <multi/>
                </properties>
              </leafNode>
              <leafNode name="other-config-flag">
                <properties>
                  <help>Hosts use the administered (stateful) protocol for autoconfiguration of other (non-address) information</help>
                  <valueless/>
                </properties>
              </leafNode>
              <tagNode name="prefix">
                <properties>
                  <help>IPv6 prefix to be advertised in Router Advertisements (RAs)</help>
                  <valueHelp>
                    <format>ipv6net</format>
                    <description>IPv6 prefix to be advertized</description>
                  </valueHelp>
                  <constraint>
                    <validator name="ipv6-prefix"/>
                  </constraint>
                </properties>
                <children>
                  <leafNode name="no-autonomous-flag">
                    <properties>
                      <help>Prefix can not be used for stateless address auto-configuration</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="no-on-link-flag">
                    <properties>
                      <help>Prefix can not be used for on-link determination</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                  <leafNode name="preferred-lifetime">
                    <properties>
                      <help>Time in seconds that the prefix will remain preferred (default 4 hours)</help>
                      <completionHelp>
                        <list>infinity</list>
                      </completionHelp>
                      <valueHelp>
                        <format>0-4294967295</format>
                        <description>Time in seconds that the prefix will remain preferred</description>
                      </valueHelp>
                      <valueHelp>
                        <format>infinity</format>
                        <description>Prefix will remain preferred forever</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 0-4294967295"/>
                        <regex>(infinity)</regex>
                      </constraint>
                    </properties>
                  </leafNode>
                  <leafNode name="valid-lifetime">
                    <properties>
                      <help>Time in seconds that the prefix will remain valid (default: 30 days)</help>
                      <completionHelp>
                        <list>infinity</list>
                      </completionHelp>
                      <valueHelp>
                        <format>1-4294967295</format>
                        <description>Time in seconds that the prefix will remain valid</description>
                      </valueHelp>
                      <valueHelp>
                        <format>infinity</format>
                        <description>Prefix will remain preferred forever</description>
                      </valueHelp>
                      <constraint>
                        <validator name="numeric" argument="--range 0-4294967295"/>
                        <regex>(infinity)</regex>
                      </constraint>
                    </properties>
                  </leafNode>
                </children>
              </tagNode>
              <leafNode name="reachable-time">
                <properties>
                  <help>Time, in milliseconds, that a node assumes a neighbor is reachable after having received a reachability confirmation</help>
                  <valueHelp>
                    <format>1-3600000</format>
                    <description>Reachable Time value in RAs (in milliseconds)</description>
                  </valueHelp>
                  <valueHelp>
                    <format>0</format>
                    <description>Reachable Time unspecified by this router</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 0-0 --range 1-3600000"/>
                  </constraint>
                  <constraintErrorMessage>Reachable time must be 0 or between 1 and 3600000 milliseconds</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="retrans-timer">
                <properties>
                  <help>Time in milliseconds between retransmitted Neighbor Solicitation messages</help>
                  <valueHelp>
                    <format>1-4294967295</format>
                    <description>Minimum interval in milliseconds</description>
                  </valueHelp>
                  <valueHelp>
                    <format>0</format>
                    <description>Time, in milliseconds, between retransmitted Neighbor Solicitation messages</description>
                  </valueHelp>
                  <constraint>
                    <validator name="numeric" argument="--range 0-0 --range 1-4294967295"/>
                  </constraint>
                  <constraintErrorMessage>Retransmit interval must be 0 or between 1 and 4294967295 milliseconds</constraintErrorMessage>
                </properties>
              </leafNode>
              <leafNode name="no-send-advert">
                <properties>
                  <help>Do not send router adverts</help>
                  <valueless/>
                </properties>
              </leafNode>
            </children>
          </tagNode>
        </children>
      </node>
    </children>
  </node>
</interfaceDefinition>