<?xml version="1.0"?>
<interfaceDefinition>
  <node name="interfaces">
    <children>
      <tagNode name="pppoe" owner="${vyos_conf_scripts_dir}/interfaces-pppoe.py">
        <properties>
          <help>Point-to-Point Protocol over Ethernet (PPPoE)</help>
          <priority>321</priority>
          <constraint>
            <regex>^pppoe[0-9]+$</regex>
          </constraint>
          <constraintErrorMessage>PPPoE interface must be named pppoeN</constraintErrorMessage>
          <valueHelp>
            <format>pppoeN</format>
            <description>PPPoE dialer interface name</description>
          </valueHelp>
        </properties>
        <children>
          <leafNode name="access-concentrator">
            <properties>
              <help>Access concentrator name (only connect to this concentrator)</help>
              <constraint>
                <regex>[a-zA-Z0-9]+$</regex>
              </constraint>
              <constraintErrorMessage>Access concentrator name must be composed of uppper and lower case letters or numbers only</constraintErrorMessage>
            </properties>
          </leafNode>
          <node name="authentication">
            <properties>
              <help>Authentication settings</help>
            </properties>
            <children>
              <leafNode name="user">
                <properties>
                  <help>User name</help>
                </properties>
              </leafNode>
              <leafNode name="password">
                <properties>
                  <help>Password</help>
                </properties>
              </leafNode>
            </children>
          </node>
          #include <include/interface-dial-on-demand.xml.i>
          <leafNode name="default-route">
            <properties>
              <help>Default route insertion behaviour (default: auto)</help>
              <completionHelp>
                <list>auto none force</list>
              </completionHelp>
              <constraint>
                <regex>(auto|none|force)</regex>
              </constraint>
              <constraintErrorMessage>PPPoE default-route option must be 'auto', 'none', or 'force'</constraintErrorMessage>
              <valueHelp>
                <format>auto</format>
                <description>Automatically install a default route</description>
              </valueHelp>
              <valueHelp>
                <format>none</format>
                <description>Do not install a default route</description>
              </valueHelp>
              <valueHelp>
                <format>force</format>
                <description>Replace existing default route</description>
              </valueHelp>
            </properties>
            <defaultValue>auto</defaultValue>
          </leafNode>
          #include <include/dhcpv6-options.xml.i>
          #include <include/interface-description.xml.i>
          #include <include/interface-disable.xml.i>
          #include <include/interface-vrf.xml.i>
          <leafNode name="idle-timeout">
            <properties>
              <help>Delay before disconnecting idle session (in seconds)</help>
              <valueHelp>
                <format>n</format>
                <description>Idle timeout in seconds</description>
              </valueHelp>
            </properties>
          </leafNode>
          <node name="ipv6">
            <children>
              <node name="address">
                <properties>
                  <help>IPv6 address configuration modes</help>
                </properties>
                <children>
                  <leafNode name="autoconf">
                    <properties>
                      <help>Enable Stateless Address Autoconfiguration (SLAAC)</help>
                      <valueless/>
                    </properties>
                  </leafNode>
                </children>
              </node>
              <leafNode name="enable">
                <properties>
                  <help>Activate IPv6 support on this connection</help>
                  <valueless/>
                </properties>
              </leafNode>
            </children>
          </node>
          <leafNode name="source-interface">
            <properties>
              <help>Physical Interface used for this PPPoE session</help>
              <completionHelp>
                <script>${vyos_completion_dir}/list_interfaces.py --broadcast</script>
              </completionHelp>
            </properties>
          </leafNode>
          <leafNode name="local-address">
            <properties>
              <help>IPv4 address of local end of the PPPoE link</help>
              <valueHelp>
                <format>ipv4</format>
                <description>Address of local end of the PPPoE link</description>
              </valueHelp>
              <constraint>
                <validator name="ipv4-address"/>
              </constraint>
            </properties>
          </leafNode>
          #include <include/interface-mtu-68-1500.xml.i>
          <leafNode name="no-peer-dns">
            <properties>
              <help>Do not use DNS servers provided by the peer</help>
              <valueless/>
            </properties>
          </leafNode>
          <leafNode name="remote-address">
            <properties>
              <help>IPv4 address of remote end of the PPPoE link</help>
              <valueHelp>
                <format>ipv4</format>
                <description>Address of remote end of the PPPoE link</description>
              </valueHelp>
              <constraint>
                <validator name="ipv4-address"/>
              </constraint>
            </properties>
          </leafNode>
          <leafNode name="service-name">
            <properties>
              <help>Service name, only connect to access concentrators advertising this</help>
              <constraint>
                <regex>[a-zA-Z0-9]+$</regex>
              </constraint>
              <constraintErrorMessage>Service name must be composed of uppper and lower case letters or numbers only</constraintErrorMessage>
            </properties>
          </leafNode>
        </children>
      </tagNode>
    </children>
  </node>
</interfaceDefinition>