<?xml version="1.0" encoding="UTF-8"?>
<!--
  Device:2 Root Data Model: Common Object definitions [DHCPv4]

  Copyright (c) 2010-2024, Broadband Forum

  Redistribution and use in source and binary forms, with or
  without modification, are permitted provided that the following
  conditions are met:

  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above
     copyright notice, this list of conditions and the following
     disclaimer in the documentation and/or other materials
     provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its
     contributors may be used to endorse or promote products
     derived from this software without specific prior written
     permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  The above license is used as a license under copyright only.
  Please reference the Forum IPR Policy for patent licensing terms
  <https://www.broadband-forum.org/ipr-policy>.

  Any moral rights which are necessary to exercise under the above
  license grant are also deemed granted under this license.

  Comments or questions about this Broadband Forum data model should be
  directed to <info@broadband-forum.org>.
-->

<dm:document
    xmlns:dm="urn:broadband-forum-org:cwmp:datamodel-1-10"
    xmlns:dmr="urn:broadband-forum-org:cwmp:datamodel-report-1-0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
      urn:broadband-forum-org:cwmp:datamodel-1-10
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-1-10.xsd
      urn:broadband-forum-org:cwmp:datamodel-report-1-0
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-report-1-0.xsd"
    spec="urn:broadband-forum-org:tr-181-2-19-0-dhcpv4"
    file="tr-181-2-19-0-dhcpv4.xml">

  <import file="tr-069-biblio.xml" spec="urn:broadband-forum-org:tr-069"/>

  <import file="tr-106-types.xml" spec="urn:broadband-forum-org:tr-106">
    <component name="Alias"/>
    <dataType name="IPv4Address"/>
    <dataType name="MACAddress"/>
    <dataType name="Order"/>
  </import>

  <import file="tr-181-2-root.xml"
      spec="urn:broadband-forum-org:tr-181-2-16-root">
    <component name="Root"/>
  </import>

  <import file="tr-181-2-stats.xml" spec="urn:broadband-forum-org:tr-181-2-19-stats">
    <component name="ObjectStatsResetCWMP"/>
    <component name="ObjectStatsResetUSP"/>
  </import>

  <component name="DHCPv4">

    <object name="Device.DHCPv4." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        The Dynamic Host Configuration Protocol (DHCP) IPv4 object
        {{bibref|RFC2131}}. This entire object applies to IPv4 only. It
        contains the {{object|Client}}, {{object|Server}}, and {{object|Relay}}
        objects.
      </description>

      <parameter name="ClientNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Client.{i}." access="readWrite"
        numEntriesParameter="ClientNumberOfEntries" enableParameter="Enable"
        minEntries="1" maxEntries="unbounded" version="2.0">
      <description>
        This object contains DHCP client settings for an associated ''IP
        Interface'' indicated by {{param|Interface}}.

        For enabled table entries, if {{param|Interface}} is not a valid
        reference then the table entry is inoperable and the CPE MUST set
        {{param|Status}} to {{enum|Error_Misconfigured|Status}}.

        Note: The {{object}} table includes a unique key parameter that is a
        strong reference. If a strongly referenced object is deleted, the CPE
        will set the referencing parameter to {{empty}}. However, doing so
        under these circumstances might cause the updated {{object}} row to
        then violate the table's unique key constraint; if this occurs, the CPE
        MUST set {{param|Status}} to {{enum|Error_Misconfigured|Status}} and
        disable the offending {{object}} row.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Interface"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the DHCP Client entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Interface" access="readWrite">
        <description>
          {{reference}} The IP Interface associated with the ''Client'' entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this table entry. {{enum}}

          The {{enum|Error_Misconfigured}} value indicates that a necessary
          configuration value is undefined or invalid.

          The {{enum|Error}} value MAY be used by the CPE to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error" optional="true"/>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <parameter name="DHCPStatus" access="readOnly">
        <description>
          The DHCP Client status as defined in {{bibref|RFC2131}}. {{enum}}

          Note: This value is only relevant when the DHCP Client is
          operationally enabled (i.e. when {{param|Status}} is
          {{enum|Enabled|Status}}).
        </description>
        <syntax>
          <string>
            <enumeration value="Init"/>
            <enumeration value="Selecting"/>
            <enumeration value="Requesting"/>
            <enumeration value="Rebinding"/>
            <enumeration value="Bound"/>
            <enumeration value="Renewing"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="IPAddress" access="readOnly">
        <description>
          IPv4 Address option received from the DHCP Server. {{empty}} when
          {{param|Status}} is not equal to {{enum|Bound|DHCPStatus}}.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SubnetMask" access="readOnly">
        <description>
          Subnet mask option received from the DHCP Server. {{empty}} when
          {{param|Status}} is not equal to {{enum|Bound|DHCPStatus}}.

          Value is information received via DHCP Option 1.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="IPRouters" access="readOnly">
        <description>
          {{list}} Items represent IP Router IPv4 Address(es) received from the
          DHCP server. {{empty}} when {{param|Status}} is not equal to
          {{enum|Bound|DHCPStatus}}.

          Value is information received via DHCP Options 3, 33 or 121.
        </description>
        <syntax>
          <list>
            <size maxLength="256"/>
          </list>
          <dataType ref="IPv4Address"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="DNSServers" access="readOnly">
        <description>
          {{list}} Items represent DNS Server IPv4 Address(es) received from
          the DHCP server. {{empty}} when {{param|Status}} is not equal to
          {{enum|Bound|DHCPStatus}}.

          Value is information received via DHCP Option 6.
        </description>
        <syntax>
          <list>
            <size maxLength="256"/>
          </list>
          <dataType ref="IPv4Address"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="LeaseTimeRemaining" access="readOnly"
          activeNotify="canDeny">
        <description>
          DHCP lease time remaining in {{units}}. A value of -1 indicates an
          infinite lease.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="seconds"/>
          </int>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="DHCPServer" access="readOnly">
        <description>
          The IPv4 address of the current DHCP server.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="PassthroughEnable" access="readWrite">
        <description>
          If {{false}}, the DHCP Client retrieved IP address information is
          configured on the referenced {{param|Interface}} object.

          If {{true}}, the DHCP Client retrieved information is propagated to
          the parameters in the referenced {{param|PassthroughDHCPPool}}
          object, replacing any existing configuration (including
          ''MinAddress'', ''MaxAddress'', ''SubnetMask'', ''IPRouters'', and
          ''DNSServers'').
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="PassthroughDHCPPool" access="readWrite">
        <description>
          {{reference}}When {{param}} is set to {{empty}},
          {{param|PassthroughEnable}} MUST be set to {{false}} (i.e.
          passthrough can not be enabled without a pool reference specified).
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="#.Server.Pool."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="AuthenticationProtocol" access="readWrite" version="2.19">
        <description>
          Specifies the authentication mechanism to be used.
        </description>
        <syntax>
          <string>
            <enumeration value="None"/>
            <enumeration value="ConfigurationToken">
              <description>
                Includes configuration token information in all DHCP messages,
                as defined in {{bibref|RFC3118|Section 4, Configuration Token}}.
              </description>
            </enumeration>
            <enumeration value="DelayedAuthentication">
              <description>
                Uses delayed authentication, as specified in {{bibref|RFC3118|Chapter 5 Delayed Authentication}}.
              </description>
            </enumeration>
          </string>
          <default type="object" value="None"/>
        </syntax>
      </parameter>

      <parameter name="DSCPMark" access="readWrite" version="2.19">
        <description>
          Diffserv code point to be used for outgoing DHCP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="63"/>
          </unsignedInt>
          <default type="object" value="48"/>
        </syntax>
      </parameter>

      <parameter name="SentOptionNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="ReqOptionNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Client.{i}.SentOption.{i}." access="readWrite"
        numEntriesParameter="SentOptionNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.0">
      <description>
        Each instance of this object represents a DHCP option that MUST, if
        enabled, be sent in DHCP client requests. All sent DHCP options MUST be
        listed.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Tag"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables this SentOption table entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Tag" access="readWrite">
        <description>
          Option tag as defined in {{bibref|RFC2132}}.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="254"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Value" access="readWrite">
        <description>
          A hexbinary encoded option value.
        </description>
        <syntax>
          <hexBinary>
            <size minLength="0" maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Client.{i}.ReqOption.{i}." access="readWrite"
        numEntriesParameter="ReqOptionNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.0">
      <description>
        Each instance of this object represents a DHCP option that MUST, if
        enabled, be requested in DHCP client requests. All requested DHCP
        options MUST be listed.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Tag"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables this ReqOption table entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Order" access="readWrite">
        <description>
          {{datatype|expand}}

          This indicates the position of the option in the DHCP
          client request.
        </description>
        <syntax>
          <dataType ref="Order"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Tag" access="readWrite">
        <description>
          Option tag as defined in {{bibref|RFC2132}}.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="254"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Value" access="readOnly">
        <description>
          A hexbinary encoded, most recently received DHCP option value.

          If no option value has been received, then the value MUST represent
          {{empty}}.

          Received DHCP option values MAY, but need not, persist across CPE
          reboots.
        </description>
        <syntax>
          <hexBinary>
            <size minLength="0" maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        DHCP server configuration.
      </description>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the DHCP server.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="PoolNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}." access="readWrite"
        numEntriesParameter="PoolNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.0">
      <description>
        DHCP conditional serving pool table.

        Each instance of this object defines a DHCP conditional serving pool.
        Client requests are associated with pools based on criteria such as
        source interface, supplied DHCP options, and MAC address.

        Overlapping pool ranges MUST be supported.

        For enabled table entries, if {{param|Interface}} is not a valid
        reference, or {{param|MinAddress}}, {{param|MaxAddress}}, or
        {{param|SubnetMask}} is not a valid value, then the table entry is
        inoperable and the CPE MUST set {{param|Status}} to
        {{enum|Error_Misconfigured|Status}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Order"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the Pool entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this entry. {{enum}}

          The {{enum|Error_Misconfigured}} value indicates that a necessary
          configuration value is undefined or invalid.

          The {{enum|Error}} value MAY be used by the CPE to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error" optional="true"/>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Order" access="readWrite">
        <description>
          {{datatype|expand}}

          For each DHCP request, the highest ordered entry that matches the
          association criteria is applied. All lower order entries are ignored.
        </description>
        <syntax>
          <dataType ref="Order"/>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          {{reference}} The IP Interface associated with the ''Pool'' entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="VendorClassID" access="readWrite">
        <description>
          Pool association criterion.

          Used to identify one or more LAN devices, value of the DHCP Vendor
          Class Identifier (Option 60) as defined in {{bibref|RFC2132}},
          matched according to the criterion in {{param|VendorClassIDMode}}.
          Case sensitive.

          This is a normal string, e.g. "abc" is represented as "abc" and not
          say "616263" hex. However, if the value includes non-printing
          characters then such characters have to be represented using XML
          escapes, e.g. #x0a for line-feed.

          {{empty}} indicates this criterion is not used for conditional
          serving.
        </description>
        <syntax>
          <string>
            <size maxLength="255"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="VendorClassIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|VendorClassID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|VendorClassID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="VendorClassIDMode" access="readWrite">
        <description>
          {{param|VendorClassID}} pattern match criterion. {{enum}}

          For example, if {{param|VendorClassID}} is "Example" then an Option
          60 value of "Example device" will match with {{param}} values of
          {{enum|Prefix}} or {{enum|Substring}}, but not with {{enum|Exact}} or
          {{enum|Suffix}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Exact"/>
            <enumeration value="Prefix"/>
            <enumeration value="Suffix"/>
            <enumeration value="Substring"/>
          </string>
          <default type="object" value="Exact"/>
        </syntax>
      </parameter>

      <parameter name="ClientID" access="readWrite">
        <description>
          Pool association criterion.

          A hexbinary string used to identify one or more LAN devices, value of
          the DHCP Client Identifier (Option 61) as defined in
          {{bibref|RFC2132}}. The option value is binary, so an exact match is
          REQUIRED.

          {{empty}} indicates this criterion is not used for conditional
          serving.
        </description>
        <syntax>
          <hexBinary>
            <size maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ClientIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|ClientID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|ClientID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="UserClassID" access="readWrite">
        <description>
          Pool association criterion.

          A hexbinary string used to identify one or more LAN devices, value of
          the DHCP User Class Identifier (Option 77) as defined in
          {{bibref|RFC3004}}.

          {{empty}} indicates this criterion is not used for conditional
          serving.
        </description>
        <syntax>
          <hexBinary>
            <size maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="UserClassIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|UserClassID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|UserClassID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Chaddr" access="readWrite">
        <description>
          Pool association criterion.

          Hardware address (MAC address) of the physical interface of the DHCP
          client.

          {{empty}} indicates this criterion is not used for conditional
          serving.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ChaddrMask" access="readWrite">
        <description>
          Bit-mask for the MAC address, where matching of a packet's MAC
          address with the {{param|Chaddr}} is only to be done for bit
          positions set to one in the mask. A mask of FF:FF:FF:FF:FF:FF or
          {{empty}} indicates all bits of the {{param|Chaddr}} are to be used
          for conditional serving classification.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ChaddrExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the (masked)
          {{param|Chaddr}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          (masked) {{param|Chaddr}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="AllowedDevices" access="readWrite" version="2.13">
        <description>
          Pool association criterion. Determines which devices are allowed,
          {{enum}}
        </description>
        <syntax>
          <string>
            <enumeration value="All">
              <description>All clients are served.</description>
            </enumeration>
            <enumeration value="Known">
              <description>
                Only clients, whose MAC address is listed in the
                {{object|Client.{i}.}} table (parameter
                {{param|Client.{i}.Chaddr}}) or in the
                {{object|StaticAddress.{i}.}} table (parameter
                {{param|StaticAddress.{i}.Chaddr}}) are served.

                The parameter {{param|Chaddr}} is not used, if this value is
                set.
              </description>
            </enumeration>
            <enumeration value="Unknown">
              <description>
                Only clients, whose MAC address is '''not''' listed in the
                {{object|Client.{i}.}} table (parameter
                {{param|Client.{i}.Chaddr}}) or in the
                {{object|StaticAddress.{i}.}} table (parameter
                {{param|StaticAddress.{i}.Chaddr}}) are served.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="MinAddress" access="readWrite">
        <description>
          Specifies first IPv4 address in the pool to be assigned by the DHCP
          server on the LAN interface.

          The parameter value can be overwritten by dynamic values retrieved
          via a DHCP client with {{param|##.Client.{i}.PassthroughEnable}} or a
          PPP interface with
          {{param|###.PPP.Interface.{i}.IPCP.PassthroughEnable}} equal to
          {{true}}.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="MaxAddress" access="readWrite">
        <description>
          Specifies last IPv4 address in the pool to be assigned by the DHCP
          server on the LAN interface.

          The parameter value can be overwritten by dynamic values retrieved
          via a DHCP client with {{param|##.Client.{i}.PassthroughEnable}} or a
          PPP interface with
          {{param|###.PPP.Interface.{i}.IPCP.PassthroughEnable}} equal to
          {{true}}.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="ReservedAddresses" access="readWrite">
        <description>
          {{list}} List items represent addresses marked reserved from the
          address allocation pool.
        </description>
        <syntax>
          <list maxItems="32">
            <size/>
          </list>
          <dataType ref="IPv4Address"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="SubnetMask" access="readWrite">
        <description>
          Specifies the client's network subnet mask.

          The parameter value can be overwritten by dynamic values retrieved
          via a DHCP client with {{param|##.Client.{i}.PassthroughEnable}} or a
          PPP interface with
          {{param|###.PPP.Interface.{i}.IPCP.PassthroughEnable}} equal to
          {{true}}.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="DNSServers" access="readWrite">
        <description>
          {{list}} List items represent DNS servers offered to DHCP clients.
          Support for more than three DNS Servers is OPTIONAL.

          The parameter value can be overwritten by dynamic values retrieved
          via a DHCP client with {{param|##.Client.{i}.PassthroughEnable}} or a
          PPP interface with
          {{param|###.PPP.Interface.{i}.IPCP.PassthroughEnable}} equal to
          {{true}}.
        </description>
        <syntax>
          <list maxItems="4">
            <size/>
          </list>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="DomainName" access="readWrite">
        <description>
          Sets the domain name to provide to clients on the LAN interface.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="IPRouters" access="readWrite">
        <description>
          {{list}} List items represent addresses of routers on this subnet.
          Also known as default gateway. Support for more than one Router
          address is OPTIONAL.

          The parameter value can be overwritten by dynamic values retrieved
          via a DHCP client with {{param|##.Client.{i}.PassthroughEnable}} or a
          PPP interface with
          {{param|###.PPP.Interface.{i}.IPCP.PassthroughEnable}} equal to
          {{true}}.
        </description>
        <syntax>
          <list maxItems="4">
            <size/>
          </list>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="WINSServers" access="readWrite" version="2.19">
        <description>
          Represent the WINS servers offered to DHCP clients.
        </description>
        <syntax>
          <list/>
          <dataType ref="IPv4Address"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="LeaseTime" access="readWrite">
        <description>
          Specifies the lease time in {{units}} of client assigned addresses. A
          value of -1 indicates an infinite lease.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="seconds"/>
          </int>
          <default type="object" value="86400"/>
        </syntax>
      </parameter>

      <parameter name="DSCPMark" access="readWrite" version="2.19">
        <description>
          Diffserv code point to be used for outgoing DHCP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="63"/>
          </unsignedInt>
          <default type="object" value="48"/>
        </syntax>
      </parameter>

      <parameter name="StaticAddressNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="OptionNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="ClientNumberOfEntries" access="readOnly" version="2.2">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}."
        access="readWrite" numEntriesParameter="StaticAddressNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.0">
      <description>
        DHCP static address table.

        Entries in this table correspond to what {{bibref|RFC2131}} calls
        "manual allocation", where a client's IP address is assigned by the
        network administrator, and DHCP is used simply to convey the assigned
        address to the client.

        Each instance of this object specifies a hardware address (MAC address)
        and an IP address within the pool. When serving from this pool, this IP
        address MUST, if available, be assigned to the DHCP client with this
        hardware address, and MUST NOT be assigned to any other client.

        Note that it is possible that an IP address in this table is present in
        one or more of the other conditional serving pools, in which case it is
        possible that such an address will be assigned to a different client.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Chaddr"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the StaticAddress table entry.

          Disabling an entry does not return the IP address to the pool.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Chaddr" access="readWrite">
        <description>
          Hardware address (MAC address) of the physical interface of the DHCP
          client.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="Yiaddr" access="readWrite">
        <description>
          IPv4 address to be assigned by the DHCP server to the DHCP client
          with the specified hardware address (MAC address).
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}.Option.{i}."
        access="readWrite" numEntriesParameter="OptionNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.0">
      <description>
        This object specifies the DHCP options that MUST, if enabled, be
        returned to clients whose DHCP requests are associated with this pool.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Tag"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables this Option table entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Tag" access="readWrite">
        <description>
          Option tag as defined in {{bibref|RFC2132}}.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="254"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Value" access="readWrite">
        <description>
          A hexbinary encoded option value.
        </description>
        <syntax>
          <hexBinary>
            <size minLength="0" maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}.Client.{i}." access="readOnly"
        numEntriesParameter="ClientNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.2">
      <description>
        DHCPv4 client table.

        This table lists details of DHCPv4 clients that matched the filter
        criteria of this {{object|#}} entry.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Chaddr"/>
      </uniqueKey>

      <component ref="Alias"/>
      <parameter base="Alias">
        <description action="append">
          Note: There is no guarantee that the {{param}} value on
          automatically-created {{object}} instances will be retained. This is
          because automatically-created {{object}} instances can be transitory.
        </description>
      </parameter>

      <parameter name="Chaddr" access="readOnly">
        <description>
          MAC address of the DHCPv4 client.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>

      <parameter name="Active" access="readOnly">
        <description>
          Whether or not the DHCPv4 client is currently present on the LAN. The
          method of presence detection is a local matter to the CPE.

          The ability to list inactive DHCPv4 clients is OPTIONAL. If the CPE
          includes inactive DHCPv4 clients in this table, {{param}} MUST be set
          to {{false}} for each inactive DHCPv4 client. The length of time an
          inactive DHCPv4 client remains listed in this table is a local matter
          to the CPE.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="IPv4AddressNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="OptionNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4Address.{i}."
        access="readOnly" numEntriesParameter="IPv4AddressNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.2">
      <description>
        IPv4 addresses assigned to this client.
      </description>
      <uniqueKey functional="true">
        <parameter ref="IPAddress"/>
      </uniqueKey>

      <parameter name="IPAddress" access="readOnly">
        <description>
          IPv4 address.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="LeaseTimeRemaining" access="readOnly">
        <description>
          The time at which the DHCP lease will expire or {{null}} if not
          known. For an infinite lease, the parameter value MUST be
          9999-12-31T23:59:59Z.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Pool.{i}.Client.{i}.Option.{i}."
        access="readOnly" numEntriesParameter="OptionNumberOfEntries"
        minEntries="0" maxEntries="unbounded" dmr:noUniqueKeys="true"
        version="2.2">
      <description>
        DHCPv4 options supplied by this client, e.g. ''VendorClassID'' (Option
        60), ''ClientID'' (option 61) or ''UserClassID'' (Option 77).
      </description>

      <parameter name="Tag" access="readOnly">
        <description>
          Option tag as defined in {{bibref|RFC2132}}.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="255"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Value" access="readOnly">
        <description>
          A hexbinary encoded option value.
        </description>
        <syntax>
          <hexBinary>
            <size minLength="0" maxLength="255"/>
          </hexBinary>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Server.Stats." access="readOnly" version="2.19">
      <description>
        Provide statistics for the embedded DHCP Server.
      </description>

      <parameter name="Discover" access="readOnly">
        <description>
          The total number of DHCPDISCOVER messages received by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Offer" access="readOnly">
        <description>
          The total number of DHCPOFFER messages sent by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Request" access="readOnly">
        <description>
          The total number of DHCPREQUEST messages received by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="ACK" access="readOnly">
        <description>
          The total number of DHCPACK messages sent by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="NACK" access="readOnly">
        <description>
          The total number of DHCPNACK messages sent by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Decline" access="readOnly">
        <description>
          The total number of DHCPDECLINE messages received by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Release" access="readOnly">
        <description>
          The total number of DHCPRELEASE messages received by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Inform" access="readOnly">
        <description>
          The total number of DHCPINFORM messages received by the server,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="ForceRenew" access="readOnly">
        <description>
          The total number of DHCPFORCERNEW messages sent by the server,
          as defined in {{bibref|RFC3203|DHCP reconfigure extension}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="DiscardedPackets" access="readOnly">
        <description>
          The total number of DHCP packets discarded by the server.
          Packets can be discarded due to illegal message format and content, incorrect received bytes, etc.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="TransmitFailure" access="readOnly">
        <description>
          The total number of DHCP messages that failed to transmit.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="RelayOptionDropped" access="readOnly">
        <description>
          The total number of DHCP messages with dropped relay options.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="SecondServerDetected" access="readOnly">
        <description>
          The total number of times a second DHCP server was detected.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Relay." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        DHCP Relay Agent (conditional relaying).
      </description>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the DHCP Relay Agent function.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of the DHCP relay. {{enum}}

          The {{enum|Error}} value MAY be used by the CPE to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error" optional="true"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ForwardingNumberOfEntries" access="readOnly">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Relay.Forwarding.{i}." access="readWrite"
        numEntriesParameter="ForwardingNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.0">
      <description>
        DHCP Relay Agent Forwarding table.

        For enabled table entries, if {{param|Interface}} is not a valid
        reference then the table entry is inoperable and the CPE MUST set
        {{param|Status}} to {{enum|Error_Misconfigured|Status}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the Forwarding entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this entry. {{enum}}

          The {{enum|Error_Misconfigured}} value indicates that a necessary
          configuration value is undefined or invalid.

          The {{enum|Error}} value MAY be used by the CPE to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error" optional="true"/>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Order" access="readWrite">
        <description>
          {{datatype|expand}}

          For each DHCP request, the highest ordered entry that matches the
          association criteria is applied. All lower order entries are ignored.
        </description>
        <syntax>
          <dataType ref="Order"/>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          {{reference}} The IP Interface associated with the ''Forwarding''
          entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="VendorClassID" access="readWrite">
        <description>
          Pool association criterion.

          Used to identify one or more LAN devices, value of the DHCP Vendor
          Class Identifier (Option 60) as defined in {{bibref|RFC2132}},
          matched according to the criterion in {{param|VendorClassIDMode}}.
          Case sensitive.

          This is a normal string, e.g. "abc" is represented as "abc" and not
          say "616263" hex. However, if the value includes non-printing
          characters then such characters have to be represented using XML
          escapes, e.g. #x0a for line-feed.

          {{empty}} indicates this criterion is not used as a relay
          classification criterion.
        </description>
        <syntax>
          <string>
            <size maxLength="255"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="VendorClassIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|VendorClassID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|VendorClassID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="VendorClassIDMode" access="readWrite">
        <description>
          {{param|VendorClassID}} pattern match criterion. {{enum}}

          For example, if {{param|VendorClassID}} is "Example" then an Option
          60 value of "Example device" will match with {{param}} values of
          {{enum|Prefix}} or {{enum|Substring}}, but not with {{enum|Exact}} or
          {{enum|Suffix}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Exact"/>
            <enumeration value="Prefix"/>
            <enumeration value="Suffix"/>
            <enumeration value="Substring"/>
          </string>
          <default type="object" value="Exact"/>
        </syntax>
      </parameter>

      <parameter name="ClientID" access="readWrite">
        <description>
          Pool association criterion.

          A hexbinary string used to identify one or more LAN devices, value of
          the DHCP Client Identifier (Option 61) as defined in
          {{bibref|RFC2132}}. The option value is binary, so an exact match is
          REQUIRED.

          {{empty}} indicates this criterion is not used as a relay
          classification criterion.
        </description>
        <syntax>
          <hexBinary>
            <size maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ClientIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|ClientID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|ClientID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="UserClassID" access="readWrite">
        <description>
          Pool association criterion.

          A hexbinary string used to identify one or more LAN devices, value of
          the DHCP User Class Identifier (Option 77) as defined in
          {{bibref|RFC3004}}.

          {{empty}} indicates this criterion is not used as a relay
          classification criterion.
        </description>
        <syntax>
          <hexBinary>
            <size maxLength="255"/>
          </hexBinary>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="UserClassIDExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the
          {{param|UserClassID}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          {{param|UserClassID}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Chaddr" access="readWrite">
        <description>
          Pool association criterion.

          Hardware address (MAC address) of the physical interface of the DHCP
          client.

          {{empty}} indicates this criterion is not used as a relay
          classification criterion.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ChaddrMask" access="readWrite">
        <description>
          Bit-mask for the MAC address, where matching of a packet's MAC
          address with the {{param|Chaddr}} is only to be done for bit
          positions set to one in the mask. A mask of FF:FF:FF:FF:FF:FF or
          {{empty}} indicates all bits of the {{param|Chaddr}} are to be used
          for relay classification.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="ChaddrExclude" access="readWrite">
        <description>
          If {{false}}, matching packets are those that match the (masked)
          {{param|Chaddr}} entry, if specified.

          If {{true}}, matching packets are those that do not match the
          (masked) {{param|Chaddr}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="LocallyServed" access="readWrite">
        <description>
          If {{true}}, incoming DHCP requests will be forwarded to the CPE DHCP
          Server. If {{false}}, incoming DHCP requests will be forwarded to the
          {{param|DHCPServerIPAddress}} configured for this forwarding entry.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DHCPServerIPAddress" access="readWrite">
        <description>
          IPv4 address of the DHCP server, where the request has to be sent to
          when there is a conditional match with this forwarding entry and
          {{param|LocallyServed}} is {{false}}. If {{param|LocallyServed}} is
          {{false}} and this parameter is not configured, then the DHCP request
          is dropped.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Client.{i}.Retransmission." access="readOnly" version="2.18">
      <description>
        This object enables the configurion of the DHCPv4 retransmission behavior according to the guidelines described in {{bibref|RFC2131|Chapter 4.1}}.
      </description>

      <parameter name="DiscoverInitialTimeout" access="readWrite">
        <description>
          Initial delay, expressed in {{units}}, before initiating the first DCHCPDISCOVER message.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="4"/>
        </syntax>
      </parameter>

      <parameter name="DiscoverMaxTimeout" access="readWrite">
        <description>
          Maximum duration, expressed in {{units}}, between two DHCPDISCOVER message retransmission.

          According to {{bibref|RFC2131|Chapter 4.1}}, the recommended value for this parameter is 64 {{units}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="64"/>
        </syntax>
      </parameter>

      <parameter name="DiscoverMaxDuration" access="readWrite">
        <description>
          Maximum duration, expressed in {{units}}, during which the DHCPv4 client is permitted to retransmit DHCPDISCOVER message

          A value of '0' indicates that no specific maximum duration is set.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="RequestInitialTimeout" access="readWrite">
        <description>
          Initial delay, expressed in {{units}}, before initiating the first DHCPREQUEST message.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="4"/>
        </syntax>
      </parameter>

      <parameter name="RequestMaxTimeout" access="readWrite">
        <description>
          Maximum duration, expressed in {{units}}, between two DHCPREQUEST message retransmission.

          According to {{bibref|RFC2131|Chapter 4.1}}, the recommended value for this parameter is 64 {{units}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="64"/>
        </syntax>
      </parameter>

      <parameter name="RequestMaxDuration" access="readWrite">
        <description>
          Maximum duration, expressed in {{units}}, during which the DHCPv4 client is permitted to retransmit DHCPREQUEST message.

          A value of '0' indicates that no specific maximum duration is set.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="TimeoutRandomize" access="readWrite">
        <description>
          The Randomization factor for the retransmission timeout, in {{units}}, as defined in
          {{bibref|RFC2131|4.1 Constructing and sending DHCP messages}}.

          E.g. a timeout of 2000ms with a randomization of 1000 will end up between 1000 and 3000 ms.
        </description>
        <syntax>
          <int>
            <units value="ms"/>
          </int>
          <default type="object" value="1000"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DHCPv4.Client.{i}.Stats." access="readOnly" version="2.19">
      <description>
        Provide statistis for the embedded DHCP Client.
      </description>

      <parameter name="Discover" access="readOnly">
        <description>
          The total number of DHCPDISCOVER messages sent by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Offer" access="readOnly">
        <description>
          The total number of DHCPOFFER messages received by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Request" access="readOnly">
        <description>
          The total number of DHCPREQUEST messages sent by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Decline" access="readOnly">
        <description>
          The total number of DHCPDECLINE messages sent by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Release" access="readOnly">
        <description>
          The total number of DHCPRELEASE messages sent by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="Inform" access="readOnly">
        <description>
          The total number of DHCPINFORM messages sent by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="ACK" access="readOnly">
        <description>
          The total number of DHCPACK messages received by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="NACK" access="readOnly">
        <description>
          The total number of DHCPNACK messages received by the client,
          as defined in {{bibref|RFC2132|DHCP Message Type}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="ForceRenew" access="readOnly">
        <description>
          The total number of DHCPFORCERNEW messages received by the client,
          as defined in {{bibref|RFC3203|DHCP reconfigure extension}}.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="DiscardedPackets" access="readOnly">
        <description>
          The total number of DHCP packets discarded by the client.
          Packets can be discarded due to illegal message format and content, incorrect received bytes, etc.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="TransmitFailure" access="readOnly">
        <description>
          The total number of DHCP messages that failed to transmit.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>
    </object>

    <profile name="DHCPv4Server:1" version="2.0">
      <object ref="Device.DHCPv4." requirement="present"/>
      <object ref="Device.DHCPv4.Server." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="PoolNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Server.Pool.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="MinAddress" requirement="readWrite"/>
        <parameter ref="MaxAddress" requirement="readWrite"/>
        <parameter ref="ReservedAddresses" requirement="readWrite"/>
        <parameter ref="SubnetMask" requirement="readWrite"/>
        <parameter ref="DNSServers" requirement="readWrite"/>
        <parameter ref="DomainName" requirement="readWrite"/>
        <parameter ref="IPRouters" requirement="readWrite"/>
        <parameter ref="LeaseTime" requirement="readWrite"/>
        <parameter ref="OptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Server.Pool.{i}.Option.{i}."
          requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="DHCPv4CondServing:1" extends="DHCPv4Server:1" version="2.0">
      <object ref="Device.DHCPv4.Server.Pool.{i}." requirement="createDelete">
        <parameter ref="VendorClassID" requirement="readWrite"/>
        <parameter ref="ClientID" requirement="readWrite"/>
        <parameter ref="UserClassID" requirement="readWrite"/>
        <parameter ref="Chaddr" requirement="readWrite"/>
        <parameter ref="ChaddrMask" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="DHCPv4Relay:1" version="2.0">
      <object ref="Device.DHCPv4." requirement="present"/>
      <object ref="Device.DHCPv4.Relay." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="ForwardingNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Relay.Forwarding.{i}."
          requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="LocallyServed" requirement="readWrite"/>
        <parameter ref="DHCPServerIPAddress" requirement="readWrite"/>
        <parameter ref="VendorClassID" requirement="readWrite"/>
        <parameter ref="ClientID" requirement="readWrite"/>
        <parameter ref="UserClassID" requirement="readWrite"/>
        <parameter ref="Chaddr" requirement="readWrite"/>
        <parameter ref="ChaddrMask" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="DHCPv4ServerClientInfo:1" version="2.2">
      <object ref="Device.DHCPv4.Server.Pool.{i}." requirement="createDelete">
        <parameter ref="ClientNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Server.Pool.{i}.Client.{i}."
          requirement="present">
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Chaddr" requirement="readOnly"/>
        <parameter ref="Active" requirement="readOnly"/>
        <parameter ref="IPv4AddressNumberOfEntries" requirement="readOnly"/>
        <parameter ref="OptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4Address.{i}."
          requirement="present">
        <parameter ref="IPAddress" requirement="readOnly"/>
        <parameter ref="LeaseTimeRemaining" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Server.Pool.{i}.Client.{i}.Option.{i}."
          requirement="present">
        <parameter ref="Tag" requirement="readOnly"/>
        <parameter ref="Value" requirement="readOnly"/>
      </object>
    </profile>
  </component>

  <component name="DHCPv4USP">
    <object base="Device.DHCPv4.Client.{i}." access="readWrite" minEntries="1"
        maxEntries="unbounded">

      <command name="Renew()" dmr:previousParameter="DHCPStatus"
          version="2.12" async="false">
        <description>
          The DHCP client will renew its DHCP lease.
        </description>
      </command>
    </object>

    <object base="Device.DHCPv4.Client.{i}.Stats.">
      <component ref="ObjectStatsResetUSP"/>
    </object>

    <object base="Device.DHCPv4.Server.Stats.">
      <component ref="ObjectStatsResetUSP"/>
    </object>

    <profile name="DHCPv4Client:1" version="2.0"
        dmr:previousProfile="IEEE8021xAuthentication:2">
      <object ref="Device.DHCPv4." requirement="present">
        <parameter ref="ClientNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <command ref="Renew()"/>
        <parameter ref="IPAddress" requirement="readOnly"/>
        <parameter ref="SubnetMask" requirement="readOnly"/>
        <parameter ref="IPRouters" requirement="readOnly"/>
        <parameter ref="DNSServers" requirement="readOnly"/>
        <parameter ref="LeaseTimeRemaining" requirement="readOnly"/>
        <parameter ref="DHCPServer" requirement="readOnly"/>
        <parameter ref="SentOptionNumberOfEntries" requirement="readOnly"/>
        <parameter ref="ReqOptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}.SentOption.{i}."
          requirement="createDelete">
        <description>
          This table is REQUIRED to support sending of option 60 (Vendor Class
          Identifier) and option 77 (User Class Identifier) values.
        </description>
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readWrite"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}.ReqOption.{i}."
          requirement="createDelete">
        <description>
          This table is REQUIRED to support requesting of option 60 (Vendor
          Class Identifier), option 61 (Client Identifier) and option 77 (User
          Class Identifier) values.
        </description>
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readOnly"/>
      </object>
    </profile>
  </component>

  <component name="DHCPv4CWMP">
    <object base="Device.DHCPv4.Client.{i}." access="readWrite" minEntries="1"
      maxEntries="unbounded">

      <parameter name="Renew" access="readWrite"
        dmr:previousParameter="DHCPStatus">
        <description>
          When set to {{true}}, the DHCP client will renew its DHCP lease.
        </description>
        <syntax command="true">
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <object base="Device.DHCPv4.Client.{i}.Stats.">
      <component ref="ObjectStatsResetCWMP"/>
    </object>

    <object base="Device.DHCPv4.Server.Stats.">
      <component ref="ObjectStatsResetCWMP"/>
    </object>

    <profile name="DHCPv4Client:1" version="2.0"
        dmr:previousProfile="IEEE8021xAuthentication:2">
      <object ref="Device.DHCPv4." requirement="present">
        <parameter ref="ClientNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Renew" requirement="readWrite"/>
        <parameter ref="IPAddress" requirement="readOnly"/>
        <parameter ref="SubnetMask" requirement="readOnly"/>
        <parameter ref="IPRouters" requirement="readOnly"/>
        <parameter ref="DNSServers" requirement="readOnly"/>
        <parameter ref="LeaseTimeRemaining" requirement="readOnly"/>
        <parameter ref="DHCPServer" requirement="readOnly"/>
        <parameter ref="SentOptionNumberOfEntries" requirement="readOnly"/>
        <parameter ref="ReqOptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}.SentOption.{i}."
          requirement="createDelete">
        <description>
          This table is REQUIRED to support sending of option 60 (Vendor Class
          Identifier) and option 77 (User Class Identifier) values.
        </description>
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readWrite"/>
      </object>
      <object ref="Device.DHCPv4.Client.{i}.ReqOption.{i}."
          requirement="createDelete">
        <description>
          This table is REQUIRED to support requesting of option 60 (Vendor
          Class Identifier), option 61 (Client Identifier) and option 77 (User
          Class Identifier) values.
        </description>
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readOnly"/>
      </object>
    </profile>
  </component>

  <model name="DHCPv4:2.19">
    <component ref="Root"/>
    <component ref="DHCPv4"/>
  </model>
</dm:document>
