<?xml version="1.0" encoding="UTF-8"?>
<!--
  USP Device:2.12 Root Object definition

  Copyright (c) 2010-2018, Broadband Forum

  The undersigned members have elected to grant the copyright to
  their contributed material used in this software:
    Copyright (c) 2017-2018 ARRIS Enterprises, LLC.

  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.

  Summary:
    USP Device:2.12 Root Object definition.

  Editors:
    * John Blackford, ARRIS
    * Tim Carey, Nokia
    * Tim Spets, Greenwave System
    * Klaus Wich, Huawei

  Broadband User Service Work Area Directors:
    * Jason Walls, QA Cafe
    * John Blackford, ARRIS

  Issue History (Filename: Approval Date: Publication Date: Changes):
    * tr-181-2-0-0.xml: May 2010:
      - corresponds to TR-181 Issue 2.
    * tr-181-2-1-0.xml: November 2010:
      - corresponds to TR-181 Issue 2 Amendment 1.
    * tr-181-2-2-0.xml: March 2011:
      - corresponds to TR-181 Issue 2 Amendment 2.
    * tr-181-2-3-0.xml: September 2011:
      - corresponds to TR-181 Issue 2 Amendment 3.
    * tr-181-2-4-0.xml: November 2011:
      - corresponds to TR-181 Issue 2 Amendment 4.
    * tr-181-2-5-0.xml: May 2012:
      - corresponds to TR-181 Issue 2 Amendment 5.
    * tr-181-2-6-0.xml: November 2012:
      - corresponds to TR-181 Issue 2 Amendment 6.
    * tr-181-2-7-0.xml: November 2013: January 17, 2014
      - corresponds to TR-181 Issue 2 Amendment 7.
    * tr-181-2-8-0.xml: 8 September 2014: 17 September 2014:
      - corresponds to TR-181 Issue 2 Amendment 8.
    * tr-181-2-9-0.xml:  1 December 2014:  4 February 2015:
      - Added WiFi MAC Address Filtering
      - Added Traceroute fixes
      - Added IEEE 1905 data model
      - Incorporated TR-143a1
    * tr-181-2-10-0.xml: 9 November 2015: 13 November 2015:
      - corresponds to TR-181 Issue 2 Amendment 10.
    * tr-181-2-11-0.xml: 18 July 2016: 12 August 2016
      - corresponds to TR-181 Issue 2 Amendment 11.
    * tr-181-2-12-0-usp.xml: 26 March 2018: 26 March 2018
      - corresponds to TR-181 Issue 2 Amendment 12.
-->

<!-- 
  In the dm:document attributes below, 'spec="urn:broadband-forum-org:tr-181-2-12-0-usp"'
  should properly be 'spec="urn:broadband-forum-org:tr-181-2-12-0"'. The "-usp" at the end
  of this string is included to avoid undesirable BBF Report Tool outputs or changes at this
  time. 
-->
<dm:document xmlns:dm="urn:broadband-forum-org:cwmp:datamodel-1-6"
    xmlns:dmr="urn:broadband-forum-org:cwmp:datamodel-report-0-1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:broadband-forum-org:cwmp:datamodel-1-6
    http://www.broadband-forum.org/cwmp/cwmp-datamodel-1-6.xsd
    urn:broadband-forum-org:cwmp:datamodel-report-0-1
    http://www.broadband-forum.org/cwmp/cwmp-datamodel-report.xsd"
    spec="urn:broadband-forum-org:tr-181-2-12-0-usp"
    file="tr-181-2-12-0-usp.xml">

  <description>
    {{docname|Device:2 Root Data Model for USP (TR-369)}}
    {{appdate|March 2018}}
    {{trname|TR-181i2a12}}
    * Added USP Local agent support (TR-369)
    * Added Firmware Image support
    * Added Ethernet Link Aggregation Group
    * Added additional Wi-Fi and WAN statistics
    * Added support for Two-Way Active Measurement Protocol (TWAMP) reflector
    * Added support for Layer Two Tunneling Protocol version 3 (L2TPv3)
    * Added support for Virtual eXtensible Local Area Network (VXLAN) tunnels
    * Added support for Broadband Access Service Attributes and Performance Metrics measurement test framework (BASAPM)
    * Added support for Large-Scale Measurement of Broadband Performance (LMAP)
  </description>

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

  <import file="tr-106-1-2-types.xml" spec="urn:broadband-forum-org:tr-106-1-2-0">
    <dataType name="_Alias" ref="Alias"/>
    <dataType name="IPAddress"/>
    <dataType name="StatsCounter32"/>
    <dataType name="StatsCounter64"/>
    <dataType name="UUID"/>
    <dataType name="JSONObject"/>
  </import>

  <import file="tr-181-2-12-common.xml" spec="urn:broadband-forum-org:tr-181-2-12-0">
    <component name="ADSLLineDiagnosticsInput"/>
    <component name="ADSLLineDiagnosticsOutput"/>
    <component name="ATMF5LoopbackDiagnosticsInput"/>
    <component name="ATMF5LoopbackDiagnosticsOutput"/>
    <component name="HPNAPHYThroughputDiagnosticsInput"/>
    <component name="HPNAPHYThroughputDiagnosticsOutput"/>
    <component name="HPNAPerformanceMonitoringDiagnosticsInput"/>
    <component name="HPNAPerformanceMonitoringDiagnosticsOutput"/>
    <component name="GhnPHYThroughputDiagnosticsInput"/>
    <component name="GhnPHYThroughputDiagnosticsOutput"/>
    <component name="GhnPerformanceMonitoringDiagnosticsInput"/>
    <component name="GhnPerformanceMonitoringDiagnosticsOutput"/>
    <component name="UPAInterfaceMeasurementDiagnosticsInput"/>
    <component name="UPAInterfaceMeasurementDiagnosticsOutput"/>
    <component name="WiFiNeighboringWiFiDiagnosticsOutput"/>
    <component name="IPPingDiagnosticsInput"/>
    <component name="IPPingDiagnosticsOutput"/>
    <component name="IPTraceRouteDiagnosticsInput"/>
    <component name="IPTraceRouteDiagnosticsOutput"/>
    <component name="IPDownloadDiagnosticsCapabilities"/>
    <component name="IPDownloadDiagnosticsInput"/>
    <component name="IPDownloadDiagnosticsInput2"/>
    <component name="IPDownloadDiagnosticsOutput"/>
    <component name="IPUploadDiagnosticsCapabilities"/>
    <component name="IPUploadDiagnosticsInput"/>
    <component name="IPUploadDiagnosticsInput2"/>
    <component name="IPUploadDiagnosticsOutput"/>
    <component name="IPUDPEchoDiagnosticsInput"/>
    <component name="IPUDPEchoDiagnosticsCapabilities"/>
    <component name="IPUDPEchoDiagnosticsInput2"/>
    <component name="IPUDPEchoDiagnosticsOutput"/>
    <component name="IPServerSelectionDiagnosticsInput"/>
    <component name="IPServerSelectionDiagnosticsOutput"/>
    <component name="DNSLookupDiagnosticsInput"/>
    <component name="DNSLookupDiagnosticsOutput"/>
    <component name="SelfTestDiagnosticsOutput"/>
	<model name="_Device:2.12" ref="Device:2.12"/>
  </import>

  <dataType name="Alias" base="_Alias">
    <description action="append">
      A non-volatile unique key used to reference this instance. Alias provides a mechanism for a Controller to label this instance for future reference.
      The following mandatory constraints MUST be enforced:
      * The value MUST NOT be empty.
      * The value MUST start with a letter.
      * If the value is not assigned by the Controller at creation time, the Agent MUST assign a value with an "cpe-" prefix.
      The value MUST NOT change once it's been assigned.   
    </description>
  </dataType>

  <model name="Device:2.12" base="_Device:2.12">
    <object base="Device." access="readOnly" minEntries="1" maxEntries="1">
      <parameter name="ProxiedDeviceNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <command name="Reboot()" dmr:version="2.12">
        <description>
          Reboot the entity associated with the containing {{object}}.
        </description>
      </command>
      <event name="Boot!" dmr:version="2.12">
        <description>
          Boot event indicating that the {{object}} was rebooted.
        </description>
        <parameter name="CommandKey" dmr:version="2.12">
          <description>
            The ''command_key'' supplied when requesting the boot, or {{empty}} if the boot was not requested via a USP operation.
          </description>
          <syntax>
            <string/>
          </syntax>
        </parameter>
        <parameter name="Cause" dmr:version="2.12">
          <description>
            The cause of the boot.
          </description>
          <syntax>
            <string>
              <enumeration value="LocalReboot"/>
              <enumeration value="RemoteReboot"/>
              <enumeration value="LocalFactoryReset"/>
              <enumeration value="RemoteFactoryReset"/>
            </string>
          </syntax>
        </parameter>
        <parameter name="FirmwareUpdated" dmr:version="2.12">
          <description>
            {{true}} if the firmware was updated as a result of the boot that caused this Event Notification; otherwise {{false}}.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>
        <parameter name="ParameterMap" dmr:version="2.12">
          <description>
            Boot parameters configured via the recipient Controller's {{object|.LocalAgent.Controller.{i}.BootParameter}} table.
            Formatted as a {{datatype|expand}}
          </description>
          <syntax>
            <dataType ref="JSONObject"/>
          </syntax>
        </parameter>
      </event>
      <command name="FactoryReset()">
        <description>
          Factory reset the entity associated with the containing {{object}}.
        </description>
      </command>
      <command name="SelfTestDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This diagnostics test is vendor-specific and MAY include testing hardware, software, and/or firmware.
        </description>
        <output>
          <component ref="SelfTestDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.DeviceInfo." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <parameter base="ManufacturerOUI" access="readOnly">
        <description action="append">
          Any change would indicate that it's a new Agent and would therefore require a {{event|#.Boot!}} Event with a {{enum|LocalFactoryReset|#.Boot!.Cause}} enumerated value in the {{param|#.Boot!.Cause}} argument.
        </description>
      </parameter>
      <parameter name="FriendlyName" access="readWrite" dmr:version="2.12">
        <description>
          The friendly name of the device.
          In {{bibref|TR-369}} the friendly name is used during the advertisement of an endpoint - see section IANA-Registered USP Service Names of {{bibref|TR-369}}.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="CID" access="readOnly" dmr:previousParameter="ManufacturerOUI" dmr:version="2.12">
        <description>
          Company identifier assigned and registered by the IEEE Registration Authority to the entity responsible for this Agent.  Represented as a six hexadecimal-digit value using all upper-case letters and including any leading zeros.  {{pattern}}
          This value MUST remain fixed over the lifetime of the Agent, including across firmware updates. Any change would indicate that it's a new Agent and would therefore require a {{event|#.Boot!}} Event with a {{enum|LocalFactoryReset|#.Boot!.Cause}} enumerated value in the {{param|#.Boot!.Cause}} argument.
        </description>
        <syntax>
          <string>
            <size minLength="6" maxLength="6"/>
            <pattern value="[0-9A-F]{6}"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="PEN" access="readOnly" dmr:version="2.12">
        <description>
          Private Enterprise Number assigned and registered by IANA to the entity responsible for this Agent.  Represented as a decimal encoding of the IANA-assinged number.
          This value MUST remain fixed over the lifetime of the Agent, including across firmware updates. Any change would indicate that it's a new Agent and would therefore require a {{event|#.Boot!}} Event with a {{enum|LocalFactoryReset|#.Boot!.Cause}} enumerated value in the {{param|#.Boot!.Cause}} argument.
        </description>
        <syntax>
          <string>
            <size maxLength="10"/>
          </string>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        This object contains general information about the USP Agent itself.  For information related to the Device that hosts the Agent, please reference the {{object|.DeviceInfo}} object.
        NOTE: The Vendor Log File table ({{object|.DeviceInfo.VendorLogFile}}) details are located on the {{object|.DeviceInfo}} object.
      </description>
      <parameter name="EndpointID" access="readOnly" dmr:version="2.12">
        <description>
          The unique USP identifier for this USP Agent.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="SoftwareVersion" access="readOnly" dmr:version="2.12">
        <description>
          The current USP Agent software version; not the version of the overall device firmware, which is located in {{param|.DeviceInfo.SoftwareVersion}}.
          To allow version comparisons, this element SHOULD be in the form of dot-delimited integers, where each successive integer represents  a more minor category of variation.  For example, ''3.0.21'' where the components mean: ''Major.Minor.Build''.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="UpTime" access="readOnly" activeNotify="canDeny" dmr:version="2.12">
        <description>
          Time in {{units}} since the USP Agent was last restarted (either via a reset of the software or reboot of the underlying device).
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <event name="Periodic!" dmr:version="2.12">
        <description>
          Periodic event configured via the recipient Controller's {{param|Controller.{i}.PeriodicNotifInterval}} and {{param|Controller.{i}.PeriodicNotifTime}} parameters.
        </description>
      </event>
      <event name="WakeUp!" dmr:version="2.12">
        <description>
          Wake-up event.
        </description>
      </event>
      <event name="TransferComplete!" dmr:version="2.12">
        <description>
          Indicates that a file has been transferred to or from the Device. The event is sent when the transfer has either completed successfully (in which case {{param|FaultCode}} will be zero), or else has failed (in which case {{param|FaultCode}} will be non-zero and {{param|FaultString}} will give further details).
          The file transfer can be requested via a USP operation or via some other mechanism. If it's requested via a USP operation {{param|Command}}, {{param|CommandKey}} and {{param|Requestor}} give further details.
        </description>
        <parameter name="Command" dmr:version="2.12">
          <description>
            The Path Name of the command that requested the transfer, or {{empty}} if the transfer was not requested via a USP operation.
          </description>
          <syntax>
            <string/>
          </syntax>
        </parameter>
        <parameter name="CommandKey" dmr:version="2.12">
          <description>
            The ''command_key'' supplied when requesting the transfer, or {{empty}} if the transfer was not requested via a USP operation.
          </description>
          <syntax>
            <string/>
            <default type="parameter" value=""/>
          </syntax>
        </parameter>
        <parameter name="Requestor" dmr:version="2.12">
          <description>
            The Endpoint ID of the Controller that requested the transfer, or {{empty}} if no Controller requested it.
          </description>
          <syntax>
            <string/>
            <default type="parameter" value=""/>
          </syntax>
        </parameter>
        <parameter name="TransferType" dmr:version="2.12">
          <description>
            The type (direction) of the transfer.
          </description>
          <syntax>
            <string>
              <enumeration value="Download">
                <description>
                  Downstream transfer; to the Agent.
                </description>
              </enumeration>
              <enumeration value="Upload">
                <description>
                  Upstream transfer; from the Agent.
                </description>
              </enumeration>
            </string>
            <default type="parameter" value="Download"/>
          </syntax>
        </parameter>
        <parameter name="Affected" dmr:version="2.12">
          <description>
            The Path Name of the Object or Object Instance that was affected by the transfer, or {{empty}} if no data model object was affected by the transfer.
          </description>
          <syntax>
            <string/>
            <default type="parameter" value=""/>
          </syntax>
        </parameter>
        <parameter name="TransferURL" dmr:version="2.12">
          <description>
            The URL from or to which this transfer was performed, or {{empty}} if no such URL is available.
          </description>
          <syntax>
            <string>
              <size maxLength="1024"/>
            </string>
            <default type="parameter" value=""/>
          </syntax>
        </parameter>
        <parameter name="StartTime" dmr:version="2.12">
          <description>
            The date and time in UTC at which the transfer was started. The Device SHOULD record this information and report it in this argument, but if this information is not available, the value of this argument MUST be set to the ''Unknown Time'' value.
          </description>
          <syntax>
            <dateTime/>
            <default type="parameter" value="0001-01-01T00:00:00Z"/>
          </syntax>
        </parameter>
        <parameter name="CompleteTime" dmr:version="2.12">
          <description>
            The date and time in UTC at which the transfer was fully completed. This need only be filled in if the transfer has been fully completed. The Device SHOULD record this information and report it in this argument, but if this information is not available or the transfer has not completed, the value of this argument MUST be set to the ''Unknown Time'' value.
          </description>
          <syntax>
            <dateTime/>
            <default type="parameter" value="0001-01-01T00:00:00Z"/>
          </syntax>
        </parameter>
        <parameter name="FaultCode" dmr:version="2.12">
          <description>
            The numerical fault code as defined in {{bibref|TR-369}}. A value of 0 (zero) indicates no fault.
          </description>
          <syntax>
            <unsignedInt/>
            <default type="parameter" value="0"/>
          </syntax>
        </parameter>
        <parameter name="FaultString" dmr:version="2.12">
          <description>
            A human-readable text description of the fault. This field SHOULD be {{empty}} if the {{param|FaultCode}} equals 0 (zero).
          </description>
          <syntax>
            <string>
              <size maxLength="256"/>
            </string>
            <default type="parameter" value=""/>
          </syntax>
        </parameter>
      </event>
      <command name="AddCertificate()" dmr:version="2.12">
        <description>
          This command is issued to allow a Controller (with the proper permissions) to add a new certificate to {{object|#.Certificate.{i}}}. This does not automatically produce a trust relationship with the host identified by the Certificate. To produce a trust relationship, an entry is required to exist in {{param|#.Controller.{i}.Credential}} or {{param|#.ControllerTrust.Credential.{i}.Credential}} that references the new {{object|#.Certificate.{i}}} entry. The Agent will use the Serial Number and Issuer fields from the input {{param|Certificate}} to populate the {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}} parameters. If {{object|#.Certificate}} already has an instance with the same {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}} parameters, this command will fail. To replace an instance with the same {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}}, the existing instance must first be deleted.
        </description>
        <input>
          <parameter name="Alias" dmr:version="2.12">
            <description>
              An optional input the Controller can use to specify the {{param|##.Certificate.{i}.Alias}} value for the added entry. If provided as an input and the value already exists in {{object|##.Certificate.{i}}}, this commmand will fail.
            </description>
            <syntax>
              <dataType ref="Alias"/>
            </syntax>
          </parameter>
          <parameter name="Certificate" mandatory="true" dmr:version="2.12">
            <description>
              The X.509 certificate in Privacy-enhanced Electronic Mail (PEM) format.
            </description>
            <syntax>
              <string>
                <size maxLength="65535"/>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
      <parameter name="SupportedProtocols" access="readOnly" dmr:version="2.12">
        <description>
          USP Message Transfer Protocols supported by this USP Agent.  The USP Agent MUST support at least one Protocol.
        </description>
        <syntax>
          <list minItems="1"/>
          <string>
            <enumeration value="CoAP">
              <description>
                See {{bibref|RFC7252}}
              </description>
            </enumeration>
            <enumeration value="WebSocket">
              <description>
                See {{bibref|RFC6455}}
              </description>
            </enumeration>
            <enumeration value="STOMP">
              <description>
                See {{bibref|STOMP1.2}}
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="SupportedFingerprintAlgorithms" access="readOnly" dmr:version="2.12">
        <description>
          {{list|each entry is an algorithm for calculating firgerprints that is supported by the Agent}}
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="SHA-1">
              <description>
                As specified in {{bibref|RFC3174}}.
              </description>
            </enumeration>
            <enumeration value="SHA-224">
              <description>
                As specified in {{bibref|RFC6234}}.
              </description>
            </enumeration>
            <enumeration value="SHA-256">
              <description>
                As specified in {{bibref|RFC6234}}.
              </description>
            </enumeration>
            <enumeration value="SHA-384">
              <description>
                As specified in {{bibref|RFC6234}}.
              </description>
            </enumeration>
            <enumeration value="SHA-512">
              <description>
                As specified in {{bibref|RFC6234}}.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="AdvertisedDeviceSubtypes" access="readWrite" dmr:version="2.12">
        <description>{{list|each entry is a subtype component of the service type that is advertised for the device using mDNS as defined in {{bibref|RFC6762}}}}
        </description>
        <syntax>
          <list/>
          <string/>
        </syntax>
      </parameter>
      <parameter name="MaxSubscriptionChangeAdoptionTime" access="readWrite" dmr:version="2.12">
        <description>
          The acceptable amount of time in {{units}} between the alteration of the Agent's Subscriptions (e.g. updated subscription, new subscription, removed subscription, etc.) and the notifications related to those subscriptions being delivered.
          For example, if this parameter is set to 30 {{units}}, then once a Subscription has been updated, the Agent has 30 {{units}} before it needs to start delivering notifications based on the updated version of the Subscription (instead of the old version of the Subscription).
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="5"/>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="MTPNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="ControllerNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="SubscriptionNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="RequestNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="CertificateNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.MTP.{i}." access="readWrite" minEntries="0" maxEntries="unbounded" numEntriesParameter="MTPNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents a MTP used by the local Agent.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
          If this {{object}} instance is to be disabled and currently used for communication with the requesting controller, the agent has to send the request response first, before disabling it.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          The current operational state of the {{object}} instance.
        </description>
        <syntax>
          <string>
            <enumeration value="Up"/>
            <enumeration value="Down">
              <description>Value when this {{object}} instance cannot establish communication.</description>
            </enumeration>
            <enumeration value="Error" optional="true">
              <description>Value when this {{object}} instance is misconfigured.</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="Protocol" access="readWrite" dmr:version="2.12">
        <description>
          The Message Transport Protocol (MTP) to be used for communications by a USP Endpoint.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="Device.LocalAgent.SupportedProtocols"/>
          </string>
          <default type="object" value="CoAP"/>
        </syntax>
      </parameter>
      <parameter name="EnableMDNS" access="readWrite" dmr:version="2.12">
        <description>
          This parameter, when {{true}}, enables the advertisement of DNS-SD services defined for this {{object}} instance using mDNS as defined in {{bibref|RFC6762}}.
          This parameter cannot be set to {{true}} if there are multiple {{object}} instances with the same value of the {{param|Protocol}} parameter.
          When {{true}}, the hostname advertised in the SRV record MUST be a Fully Qualified Domain Name (FQDN).
          The interfaces that advertise these DNS-SD services are restriced to the set of interfaces associated with this {{object}} instance and the interfaces defined by the {{param|##.DNS.SD.AdvertisedInterfaces}} parameter.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="true"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}." access="readWrite" minEntries="0" maxEntries="unbounded" numEntriesParameter="ControllerNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents a USP Controller that has access to this USP Agent.
      </description>
      <uniqueKey functional="true">
        <parameter ref="EndpointID"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="EndpointID" access="readWrite" dmr:version="2.12">
        <description>
          The unique USP identifier for this USP Controller.
        </description>
        <syntax>
          <string/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="ControllerCode" access="readWrite" dmr:version="2.12">
        <description>
          Information about the configuration state of an Agent as it pertains to the {{object}} instance.  This is not information related to an operator's installation or usage of the protocol, that information is maintained in {{param|ProvisioningCode}}.
          This parameter could be used in scenarios where the Controller needs to perform some kind of initialization or periodic configuration monitoring. For example, a Controller might perform some initial configuration of an Agent on first contact (perhaps to configure the Subscriptions).  The Controller could inspect this parameter to determine the current state of the Agent's configuration, allowing the Controller to streamline the configuration process.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="ProvisioningCode" access="readWrite" dmr:version="2.12">
        <description>
          Identifying information which MAY be used by the {{object}} instance to determine {{object}} instance specific customization and provisioning parameters.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
          When {{false}}, messages (notifications) are not sent to the remote endpoint represented by this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="AssignedRole" access="readWrite" dmr:version="2.12">
        <description>{{list|each entry is a Role that has been assigned to this {{object}} instance by means other than the {{param|.LocalAgent.ControllerTrust.Credential.{i}.Role}} parameter}}
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="Device.LocalAgent.ControllerTrust.Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="InheritedRole" access="readOnly" dmr:version="2.12">
        <description>{{list|each entry is a Role that has been assigned to this {{object}} instance from the {{param|.LocalAgent.ControllerTrust.Credential.{i}.Role}} parameter associated with the CA credential ({{param|.LocalAgent.ControllerTrust.Credential.{i}.Credential}}) used to validate the Controller certificate}}
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="Device.LocalAgent.ControllerTrust.Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Credential" access="readWrite" dmr:version="2.12">
        <description>
          {{nolist}}
          Comma-separated list of strings, the set of certificates from {{object|#.Certificate.{i}}} that a Controller can present for use in authenticating the identity of this {{object}} instance.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.Certificate." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="PeriodicNotifInterval" access="readWrite" dmr:version="2.12">
        <description>
          If a Periodic Event Notification {{object|#.Subscription}} instance is associated with this USP Controller, then this is the duration in {{units}} of the interval for which the USP Agent MUST attempt to issue a Periodic Notification to the USP Controller.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1"/>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="PeriodicNotifTime" access="readWrite" dmr:version="2.12">
        <description>
          If a Periodic Event Notification {{object|#.Subscription}} instance is associated with this USP Controller, then this is an absolute time reference in UTC to determine when the USP Agent will issue a Periodic Notification. Each Periodic Notification MUST occur at this reference time plus or minus an integer multiple of the {{param|PeriodicNotifInterval}}.
          {{param}} is used only to set the ''phase'' of the Periodic Event Notifications.  The actual value of {{param}} can be arbitrarily far into the  past or future.
          For example, if {{param|PeriodicNotifInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past,  present, or future) then Periodic Notifications will be sent every day at UTC midnight.  These MUST begin on the very next midnight, even if {{param}} refers to a day in the future.
          The Unknown Time value defined in {{bibref|TR-106a2|section 3.2}} indicates that no particular time reference is specified.  That is, the USP Agent MAY locally choose the time reference, and needs only to adhere to the specified {{param|PeriodicNotifInterval}}.
          If absolute time is not available to the USP Agent, its Periodic Notification behavior MUST be the same as if the {{param}} parameter was set to the Unknown Time value.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
      <parameter name="USPNotifRetryMinimumWaitInterval" access="readWrite" dmr:version="2.12">
        <description>
          This parameter is related to the retry mechanism for Notifications.
          Configures the first retry wait interval, in {{units}}, as specified in {{bibref|TR-369|Section "Responses to Notifications and Notification Retry"}}.
          A value of 5 corresponds to the default behavior.
          The USP Agent MUST use a random value between {{param}} and ({{param}} * {{param|USPNotifRetryIntervalMultiplier}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="5"/>
        </syntax>
      </parameter>
      <parameter name="USPNotifRetryIntervalMultiplier" access="readWrite" dmr:version="2.12">
        <description>
          This parameter is related to the retry mechanism for Notifications.
          Configures the retry interval multiplier as specified in {{bibref|TR-369|Section "Responses to Notifications and Notification Retry"}}.
          This value is expressed in units of 0.001.  Hence the values of the multiplier range between 1.000 and 65.535.
          A value of 2000 corresponds to the default behavior.
          The USP Agent MUST use a random value between {{param|USPNotifRetryMinimumWaitInterval}} and ({{param|USPNotifRetryMinimumWaitInterval}} *  {{param}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a  starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1000" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="2000"/>
        </syntax>
      </parameter>
      <command name="ScheduleTimer()" dmr:version="2.12">
        <description>
          Schedule a ''Timer!'' event on the associated {{object}}.
        </description>
        <input>
          <parameter name="DelaySeconds" mandatory="true" dmr:version="2.12">
            <description>
              The number of seconds from the time this command is invoked until the Agent initiates a Timer! Event notification (based on the associated subscriptions).
            </description>
            <syntax>
              <unsignedInt>
                <range minInclusive="1"/>
                <units value="seconds"/>
              </unsignedInt>
              <default type="parameter" value="0"/>
            </syntax>
          </parameter>
        </input>
      </command>
      <event name="Timer!" dmr:version="2.12">
        <description>
          Timer event requested via a ScheduleTimer() command invoked on the same Controller instance via an Operate USP message.
        </description>
        <parameter name="CommandKey" dmr:version="2.12">
          <description>
            The ''command_key'' supplied when requesting the timer event.
          </description>
          <syntax>
            <string/>
          </syntax>
        </parameter>
      </event>
      <command name="AddMyCertificate()" dmr:version="2.12">
        <description>
          This command is issued to allow a Controller to add a new certificate for itself. This can be useful when the current certificate is expiring or has become compromised. This command creates a new entry in {{object|#.Certificate}} and adds a reference to the new entry to the Controller's {{param|#.Controller.{i}.Credential}}. The Agent will use the Serial Number and Issuer fields from the input {{param|Certificate}} to populate the {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}} parameters. If {{object|#.Certificate}} already has an instance with the same {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}} parameters, this command will fail. To replace an instance with the same {{param|#.Certificate.{i}.SerialNumber}} and {{param|#.Certificate.{i}.Issuer}}, the existing instance must first be deleted.
        </description>
        <input>
          <parameter name="Alias" dmr:version="2.12">
            <description>
              An optional input the Controller can use to specify the {{param|###.Certificate.{i}.Alias}} value for the added entry. If provided as an input and the value already exists in {{object|###.Certificate.{i}}}, this commmand will fail.
            </description>
            <syntax>
              <dataType ref="Alias"/>
            </syntax>
          </parameter>
          <parameter name="Certificate" mandatory="true" dmr:version="2.12">
            <description>
              The X.509 certificate in Privacy-enhanced Electronic Mail (PEM) format.
            </description>
            <syntax>
              <string>
                <size maxLength="65535"/>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
      <command name="SendOnBoardRequest()" dmr:version="2.12">
        <description>
          Requests the Agent to send an ''OnBoardRequest'' notification to this Controller.
        </description>
      </command>
      <parameter name="BootParameterNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="MTPNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.MTP.{i}." access="readWrite" minEntries="0" maxEntries="unbounded" numEntriesParameter="MTPNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents a MTP used by this Controller.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Protocol"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
          If this {{object}} instance is to be disabled and currently used for communication with the requesting controller, the agent has to send the request response first, before disabling it.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Protocol" access="readWrite" dmr:version="2.12">
        <description>
          The Message Transport Protocol (MTP) to be used for communications by a USP Endpoint.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="Device.LocalAgent.SupportedProtocols"/>
          </string>
          <default type="object" value="CoAP"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.TransferCompletePolicy." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        The policy defined in this object determines the conditions under which the USP Agent notifies a USP Controller, that has an appropriate Subscription, of the completion of file transfers.
      </description>
      <parameter name="ResultTypeFilter" access="readWrite" dmr:version="2.12">
        <description>
          Indicates the transfer results that MUST be included when the USP Agent notifies a USP Controller of file transfers.  Transfer results omitted from this list MUST NOT be included when the USP Agent notifies a USP Controller.
        </description>
        <syntax>
          <string>
            <enumeration value="Success">
              <description>
                The autonomous file transfer completed successfully; i.e., the {{event|##.TransferComplete!}} event's {{param|##.TransferComplete!.FaultCode}} was zero
              </description>
            </enumeration>
            <enumeration value="Failure">
              <description>
                The autonomous file transfer did not complete successfully; i.e., the the {{event|##.TransferComplete!}} event's {{param|##.TransferComplete!.FaultCode}} was non-zero
              </description>
            </enumeration>
            <enumeration value="Both">
              <description>
                Success and Failure
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.BootParameter.{i}." access="readWrite" minEntries="0" maxEntries="unbounded" numEntriesParameter="BootParameterNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        This table provides the Controller with the ability to dictate the Parameters that are delivered via ''Boot!'' events.
        Any Parameter (identified by {{param|ParameterName}}) contained in this table MUST be included within the ''param_map'' element of the ''Boot!'' event.
      </description>
      <uniqueKey>
        <parameter ref="ParameterName"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enables or disables this {{object}}.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="ParameterName" access="readWrite" dmr:version="2.12">
        <description>
          A pattern that describes the Parameter(s) to be included in the ''param_map'' element of a ''Boot!'' event.  Specifically, patterns with wildcards (an "*" character) in place of Instance Identifiers are allowed.
          If the pattern does not match any existing Parameters at the time that the Agent is creating the ''Boot!'' event, then this {{object|#.BootParameter}} instance is not included in the ''param_map'' of the ''Boot!'' event.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.E2ESession." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        The {{object}} object represents the End to End (E2E) Session Context functionality for this {{object|##.Controller.{i}}} object instance.
      </description>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
          When {{true}}, Session Context is used when exchanging USP Records with the remote endpoint represented by this {{object|##.Controller.{i}}} object instance.
          When {{false}}, Session Context is not used when exchanging USP Records with the remote endpoint represented by this {{object|##.Controller.{i}}} object instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          The current status of the Session Context.
        </description>
        <syntax>
          <string>
            <enumeration value="Up"/>
            <enumeration value="Negotiating" optional="true">
              <description>A new Session Context is being negotiated (i.e., a USP Record with sequence_id of 0 and session_id not previously used with this remote endpoint was sent and response has not yet been received).</description>
            </enumeration>
            <enumeration value="Down"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="SessionExpiration" access="readWrite" dmr:version="2.12">
        <description>
          The duration in {{units}} in which the current Session Context will expire since the last session-related activity (e.g., Message sent or received, Session Context start or restart).
          A value of 0 means session expiration is disabled.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="SessionRetryMinimumWaitInterval" access="readWrite" dmr:version="2.12">
        <description>
          Configures the first retry wait interval, in {{units}}, as specified in {{bibref|TR-369|Section "Failure Handling in the Session Context"}}.
          A value of 5 corresponds to the default behavior that is described in {{bibref|TR-369}}.
          The USP Agent MUST use a random value between {{param}} and ({{param}} * {{param|SessionRetryIntervalMultiplier}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="5"/>
        </syntax>
      </parameter>
      <parameter name="SessionRetryIntervalMultiplier" access="readWrite" dmr:version="2.12">
        <description>
          Configures the retry interval multiplier as specified in {{bibref|TR-369|Section "Failure Handling in the Session Context"}}.
          This value is expressed in units of 0.001. Hence the values of the multiplier range between 1.000 and 65.535.
          A value of 2000 corresponds to the default behavior that is described in {{bibref|TR-369}}.
          The USP Agent MUST use a random value between {{param|SessionRetryMinimumWaitInterval}} and ({{param|SessionRetryMinimumWaitInterval}} * {{param}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1000" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="2000"/>
        </syntax>
      </parameter>
      <parameter name="CurrentRetryCount" access="readOnly" dmr:version="2.12">
        <description>
          The current retry count of the Session Context. When zero (0), the Session Context is not in a retry state.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="SegmentedPayloadChunkSize" access="readWrite" dmr:version="2.12">
        <description>
          The maximum size, in {{units}}, of the Record (payload(s) and headers) that can be transmitted to the remote endpoint. The smallest size, which can be configured is 512 bytes.
          A value of 0 means that the segmentation function is effectively disabled.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="0"/>
            <range minInclusive="512"/>
            <units value="bytes"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="MaxRetransmitTries" access="readWrite" dmr:version="2.12">
        <description>
          The maximum times that a USP Endpoint attempts to retransmit the requested USP Record to the remote endpoint.
          If the maximum tries is met for any requested USP Record, the USP Endpoint will restart the E2E Session.
          A value of -1 means that the USP Endpoint will always attempt to retransmit the requested USP Record.
          A value of 0 means that the USP Endpoint will not attempt to retransmit the requested USP Record and will restart the E2E Session.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="10"/>
          </int>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="PayloadSecurity" access="readWrite" dmr:version="2.12">
        <description>
          The security mechanism to use when exchanging the payload of the Record with the remote endpoint.
        </description>
        <syntax>
          <string>
            <enumeration value="Plaintext"/>
            <enumeration value="TLS">
              <description>
                The payload is encrypted at the originating endpoint and decrypted at the receiving endpoint using TLS.
                The procedures for using TLS in a Session Context is defined in {{bibref|TR-369}}.
              </description>
            </enumeration>
          </string>
          <default type="object" value="TLS"/>
        </syntax>
      </parameter>
      <command name="Reset()" async="true" dmr:version="2.12">
        <description>
          If the {{object}} is enabled then this command will either request to start or restart a Session Context with the remote endpoint.
          If the {{object}} is not enabled and there is an active Session Context then this command will terminate that Session Context with the remote endpoint.
          If the {{object}} is not enabled and there is no active Session Context then this command does nothing.
        </description>
      </command>
    </object>
    <object name="Device.LocalAgent.MTP.{i}.CoAP." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the CoAP Message Transport Protocol (MTP), then this object contains CoAP specific configuration parameters.
      </description>
      <parameter name="Interfaces" access="readWrite" dmr:version="2.12">
        <description>
          {{reference|the {{object|###.IP.Interface}} object instance that this server will use as its host address to receive USP messages}}
          {{empty}} will bind this server to all interfaces for this device.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="###.IP.Interface." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Port" access="readWrite" dmr:version="2.12">
        <description>
          The port number used by the CoAP Server to receive USP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="5683"/>
        </syntax>
      </parameter>
      <parameter name="Path" access="readWrite" dmr:version="2.12">
        <description>
          The path that is used by the CoAP Server in order to receive USP messages.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="IsEncrypted" access="readOnly" dmr:version="2.12">
        <description>
          This parameter represents whether or not communications that utilize this {{object}} object instance are encrypted.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="EnableEncryption" access="readWrite" dmr:version="2.12">
        <description>
          When {{true}}, encryption is used for this MTP instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="true"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.MTP.{i}.CoAP." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the CoAP Message Transport Protocol (MTP), then this object contains CoAP specific configuration parameters.
      </description>
      <parameter name="Host" access="readWrite" dmr:version="2.12">
        <description>
          The hostname or IP Address of the Controller's CoAP server.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Port" access="readWrite" dmr:version="2.12">
        <description>
          The port number used by the Controller's CoAP Server to receive USP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="Path" access="readWrite" dmr:version="2.12">
        <description>
          The path that is used by the Controller's CoAP Server in order to receive USP messages.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="EnableEncryption" access="readWrite" dmr:version="2.12">
        <description>
          When {{true}}, encryption is used as specified in {{bibref|TR-369|Section "MTP Message Encryption"}}.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="true"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.MTP.{i}.STOMP." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the STOMP Message Transport Protocol (MTP), then this object contains STOMP Client specific configuration parameters related to how the Agent communicates with the STOMP Server.
      </description>

      <parameter name="Reference" access="readWrite" dmr:version="2.12">
        <description>
          A reference to the STOMP Connection used by this Agent when communicating via the STOMP MTP.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent=".STOMP.Connection." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="Destination" access="readWrite" dmr:version="2.12">
        <description>
          The STOMP destination where the Agent will be listening to incoming USP messages.
        </description>
        <syntax>
          <string/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="DestinationFromServer" access="readOnly" dmr:version="2.12">
        <description>
          The STOMP destination contained in the subscribe-dest header of the CONNECTED STOMP Frame.
          If the Agent doesn't receive a subscribe-dest header in the CONNECTED STOMP Frame, then the value of this Parameter is {{empty}}.
          If this parameter's value is not empty then this is the STOMP destination address for this Agent, but if the value is empty the {{param|Destination}} Parameter contains the STOMP destination address for this Agent.
        </description>
        <syntax>
          <string/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.MTP.{i}.STOMP." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the STOMP Message Transport Protocol (MTP), then this object contains STOMP Client specific configuration parameters related to how this Controller communicates with the STOMP Server.
      </description>
      <parameter name="Reference" access="readWrite" dmr:version="2.12">
        <description>
          A reference to the STOMP Connection used by this Controller when communicating via the STOMP MTP.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent=".STOMP.Connection." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="Destination" access="readWrite" dmr:version="2.12">
        <description>
          The STOMP destination where the Controller will be listening to incoming USP messages.
        </description>
        <syntax>
          <string/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.MTP.{i}.WebSocket." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the WebSocket Message Transport Protocol (MTP) as a WebSocket server, then this object contains WebSocket specific configuration parameters.
      </description>
      <parameter name="Interfaces" access="readWrite" dmr:version="2.12">
        <description>
          {{reference|the {{object|###.IP.Interface}} object instance that this server will use as its host address to receive USP messages}}
          {{empty}} will bind this server to all interfaces for this device.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="###.IP.Interface." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Port" access="readWrite" dmr:version="2.12">
        <description>
          The port number used by the WebSocket Server to receive USP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="5683"/>
        </syntax>
      </parameter>
      <parameter name="Path" access="readWrite" dmr:version="2.12">
        <description>
          The path that is used by the WebSocket Server in order to receive USP messages.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Controller.{i}.MTP.{i}.WebSocket." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        If the USP Endpoint uses the WebSocket Message Transport Protocol (MTP) as a WebSocket client, then this object contains WebSocket specific configuration parameters.
      </description>
      <parameter name="Host" access="readWrite" dmr:version="2.12">
        <description>
          The hostname or IP Address of the Controller's WebSocket server.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Port" access="readWrite" dmr:version="2.12">
        <description>
          The port number used by the Controller's WebSocket server to receive USP messages.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="Path" access="readWrite" dmr:version="2.12">
        <description>
          The path that is used by the Controller's WebSocket server in order to receive USP messages.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="IsEncrypted" access="readOnly" dmr:version="2.12">
        <description>
          This parameter represents whether or not communications that utilize this {{object}} object instance are encrypted.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="KeepAliveInterval" access="readWrite" dmr:version="2.12">
        <description>
          The the duration in {{units}} between when WebSocket ping control frames are transmitted by the Agent to the WebSocket server for the USP Controller.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1"/>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="CurrentRetryCount" access="readOnly" dmr:version="2.12">
        <description>
          The current retry count of the session. When zero (0), the session is not in a retry state.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="SessionRetryMinimumWaitInterval" access="readWrite" dmr:version="2.12">
        <description>
          Configures the first retry wait interval, in {{units}}, as specified in {{bibref|TR-369|Section "WebSocket Session Retry"}}.
          The USP Agent MUST use a random value between {{param}} and ({{param}} * {{param|SessionRetryIntervalMultiplier}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="5"/>
        </syntax>
      </parameter>
      <parameter name="SessionRetryIntervalMultiplier" access="readWrite" dmr:version="2.12">
        <description>
          Configures the retry interval multiplier as specified in {{bibref|TR-369|Section "WebSocket Session Retry"}}.
          This value is expressed in units of 0.001. Hence the values of the multiplier range between 1.000 and 65.535.
          The USP Agent MUST use a random value between {{param|SessionRetryMinimumWaitInterval}} and ({{param|SessionRetryMinimumWaitInterval}} * {{param}} / 1000) as the first retry wait interval.  Other values in the retry pattern MUST be calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1000" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="2000"/>
        </syntax>
      </parameter>
      <command name="Reset()" async="true" dmr:version="2.12">
        <description>
          If enabled, this command will either request to start or restart an WebSocket session with the Controller.
        </description>
      </command>
    </object>
    <object name="Device.LocalAgent.Subscription.{i}." access="readWrite" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="SubscriptionNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        A Subscription dictates how a USP Agent issues USP Notification Messages to a USP Controller.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Recipient"/>
        <parameter ref="ID"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enables/disables this {{object}}.  A disabled entry MUST NOT be processed by the USP Agent.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Recipient" access="readOnly" dmr:version="2.12">
        <description>
          {{reference|the {{object|#.Controller}} instance that will receive the Notification associated with this {{object}}|delete}}
          The value of this parameter is automatically populated by the USP Agent upon {{object}} creation using the reference to the USP Controller that created the instance.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.Controller." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ID" access="readWrite" dmr:version="2.12">
        <description>
          Unique identifier of the {{object}} itself, which is specific to the USP Controller that creates the instance of the {{object}}.
          This value is also populated in the ''subscription_id'' element of every Notification message sent from a USP Agent to a USP Controller.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="CreationDate" access="readOnly" dmr:version="2.12">
        <description>
          The date and time when this instance of {{object}} was created. This is internally used by the {{param|TimeToLive}} parameter to determine the expiration of this {{object}} instance.
          The value of this parameter is automatically populated by the USP Agent upon {{object}} creation.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
      <parameter name="NotifType" access="readWrite" dmr:version="2.12">
        <description>
          Type of Notification message that will be sent to the USP Controller specified by {{param|Recipient}} when this {{object}} is triggered.
        </description>
        <syntax>
          <string>
            <enumeration value="ValueChange"/>
            <enumeration value="ObjectCreation"/>
            <enumeration value="ObjectDeletion"/>
            <enumeration value="OperationComplete"/>
            <enumeration value="Event"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ReferenceList" access="readWrite" dmr:version="2.12">
        <description>
          Each entry in the list is a parameter path that determines the element of the data model that the {{object}} is applicable to.
          Different values of the {{param|NotifType}} parameter will cause the {{object}} to interact with {{param}} differently.  For example, an instance of {{object}} with {{enum|ValueChange|NotifType}} will utilize the value of this parameter differently than an instance with {{enum|Event|NotifType}}.
          Expressions are allowed in the list items, but in some cases could cause a dynamic set of instances to be monitored in order to fulfill the Subscription's requirements.
          Once the value of the {{param}} is written, the value cannot be changed as the {{object}} instance is considered to be immutable. If the value of a non-empty {{param}} parameter needs to change, the {{object}} instance MUST be deleted and a new {{object}} instance created.
        </description>
        <syntax>
          <list/>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Persistent" access="readWrite" dmr:version="2.12">
        <description>
          Determines whether or not this {{object}} remains after the USP Agent is restarted (either via a reset of the software or reboot of the underlying device).
          If {{true}}, this {{object}} stays in existence until either a Delete message removes it or the {{param|TimeToLive}} parameter expires.
          If {{false}}, this {{object}} is automatically removed by the USP Agent whenever it is restarted.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="TimeToLive" access="readWrite" dmr:version="2.12">
        <description>
          Specifies the duration of time (in {{units}}) that this {{object}} remains in existence.  After {{param}} has expired, this {{object}} instance is automatically removed by the USP Agent.
          If the value of {{param}} is 0, then this parameter is ignored and this {{object}} stays in existence until either a Delete message removes it or the {{param|Persistent}} parameter determines that it needs to be removed.
          If the value of {{param}} is greater than 0, then this parameter determines the length of time (from {{object}} creation) until it will be automatically removed by the USP Agent (unless the {{param|Persistent}} parameter is {{false}} and the USP Agent is restarted, in which case it will be removed before the {{param}} expiration).  NOTE: This paramater does not count down as time moves forward; it will always read back with the same value that it was last set to.
          If the USP Agent is incapable of maintaining absolute time then {{param}} will automatically expire if the USP Agent is restarted (either via a reset of the software or reboot of the underlying device) before {{param}} expiration.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="NotifRetry" access="readWrite" dmr:version="2.12">
        <description>
          Specifies whether or not the USP Agent attempts to re-deliver the Notification in the event that it could not be delivered to the USP Controller.
          When {{param}} is {{true}}, the USP Agent MUST retry the delivery of the Notification.  This implies that the Notification MUST be generated with the "send_resp" flag set to {{true}} such that the USP Agent knows when the Notification has been successfully delivered. The retry attempt(s) are performed using the retry algorithm defined in {{bibref|TR-369|Section "Responses to Notifications and Notification Retry"}}.
          When {{param}} is {{false}}, the USP Agent MUST NOT retry the delivery of the Notification, and SHOULD generate the notification with "send_resp" flag set to {{false}}.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="NotifExpiration" access="readWrite" dmr:version="2.12">
        <description>
          Specifies the duration of time (in {{units}}) that the Notification associated with this {{object}} will continue to be retried.  After {{param}} has expired, if the Notification has still not been successfully delivered then the USP Agent MUST stop attempting to re-deliver the Notification.
          If {{param|NotifRetry}} is set to {{false}} then this parameter is ignored.
          If {{param|NotifRetry}} is set to {{true}} and the value of {{param}} is 0, then the USP Agent will attempt to re-deliver the Notification until it has been successfully delivered or until the USP Agent is restarted (either via a reset of the software or reboot of the underlying device).
          If {{param|NotifRetry}} is set to {{true}} and the value of {{param}} is greater than 0, then the USP Agent will attempt to re-deliver the Notification until either it has been successfully delivered, until the length of time (from the time tha the Notification was initially attempted to be delivered) specified in this parameter expires, or until the USP Agent is restarted (either via a reset of the software or reboot of the underlying device).
          NOTE: This paramater does not count down as time moves forward; it will always read back with the same value that it was last set to.        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.Request.{i}." access="readOnly" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="RequestNumberOfEntries" dmr:version="2.12">
      <description>
        {{object}} instances are created using USP ''Operate'' messages. Only ''Operate'' messages with ''async''=''true'' will create a {{object}} instance in the data model.
        When the command of the ''Operate'' completes, then this {{object}} instance is removed from this table.
      </description>
      <uniqueKey functional="true">
        <parameter ref="Originator"/>
        <parameter ref="Command"/>
        <parameter ref="CommandKey"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Originator" access="readOnly" dmr:version="2.12">
        <description>
          The USP Endpoint Identifier that originated the command.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="Command" access="readOnly" dmr:version="2.12">
        <description>
          The command to be executed. This parameter is a Path Name that addresses a Command in an Object or Object Instance.
          The command is a result of the evaluation of the ''command'' argument of an ''Operate'' message.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="CommandKey" access="readOnly" dmr:version="2.12">
        <description>
          The ''command_key'' from the USP ''Operate'' message.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          The operational status of the request to execute the command.
        </description>
        <syntax>
          <string>
            <enumeration value="Requested">
              <description>The command has been requested but is currently not executing.</description>
            </enumeration>
            <enumeration value="Active">
              <description>The command is currently executing.</description>
            </enumeration>
            <enumeration value="Canceling">
              <description>The command has been requested to be canceled.</description>
            </enumeration>
            <enumeration value="Canceled">
              <description>The command has successfully been canceled.</description>
            </enumeration>
            <enumeration value="Success">
              <description>The command has successfully been completed its execution.</description>
            </enumeration>
            <enumeration value="Error">
              <description>The command has unsuccessfully completed its execution or has unsuccessfully been canceled.</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <command name="Cancel()" dmr:version="2.12">
        <description>
          Request cancelation of this {{object}}'s command.
          This command completes immediately. If successful, {{param|Status}} will immediately change to {{enum|Canceling|Status}} and will change to {{enum|Canceled|Status}} when the cancelation is complete.
        </description>
      </command>
    </object>
    <object name="Device.LocalAgent.Certificate.{i}." access="readOnly" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="CertificateNumberOfEntries" dmr:version="2.12">
      <description>
        Each instance of this table represents information related to a X.509 certificate (see {{bibref|RFC5280}}) of a Controller or Certificate Authority. Instances are referenced from  {{param|##.LocalAgent.Controller.{i}.Credential}} and {{param|##.LocalAgent.ControllerTrust.Credential.{i}.Credential}}.
      </description>
      <uniqueKey functional="true">
        <parameter ref="SerialNumber"/>
        <parameter ref="Issuer"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="SerialNumber" access="readOnly" dmr:version="2.12">
        <description>
          The Serial Number field in an X.509 certificate, see {{bibref|RFC5280}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Issuer" access="readOnly" dmr:version="2.12">
        <description>
          The Issuer field in an X.509 certificate, see {{bibref|RFC5280}}; i.e. the Distinguished Name (DN) of the entity who has signed the certificate.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <command name="Delete()" dmr:version="2.12">
        <description>
          This command is issued to allow a Controller (with the proper permissions) to delete an entry from the {{object|##.Certificate.{i}}}. It also removes references to the Certificate in {{param|##.LocalAgent.Controller.{i}.Credential}} or {{param|##.LocalAgent.ControllerTrust.Credential.{i}.Credential}} and removes any X.509 certificate data the Agent had stored related to the entry.
        </description>
      </command>
      <command name="GetFingerprint()" dmr:version="2.12">
        <description>
          This command is issued to allow a Controller to request the value of a fingerprint calculated for the specified table entry using the input {{param|FingerprintAlgorithm}}.
        </description>
        <input>
          <parameter name="FingerprintAlgorithm" mandatory="true" dmr:version="2.12">
            <description>
              The algorithm to be used to calculate the requested fingerprint. The value MUST be one the Agent supports, as noted in {{param|###.SupportedFingerprintAlgorithms}}.
            </description>
            <syntax>
              <string>
                <enumeration value="SHA-1">
                  <description>
                    As specified in {{bibref|RFC3174}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-224">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-256">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-384">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-512">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
              </string>
            </syntax>
          </parameter>
        </input>
        <output>
          <parameter name="Fingerprint" dmr:version="2.12">
            <description>
              The value of the fingerprint.
            </description>
            <syntax>
              <hexBinary>
                <size maxLength="128"/>
              </hexBinary>
            </syntax>
          </parameter>
        </output>
      </command>
    </object>
    <object name="Device.LocalAgent.ControllerTrust." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        This object contains information that an Agent applies when establishing a trust relationship with a Controller.
      </description>
      <parameter name="UntrustedRole" access="readWrite" dmr:version="2.12">
        <description>
          {{list|each entry is a Role that is associated with Controllers whose identity cannot be authenticated. The value of the {{param}} parameter is appended to the {{param|##.LocalAgent.Controller.{i}.AssignedRole}} parameter}}
          In some instances, this policy is set by the Agent and cannot be modified by Controllers. If the Agent does not allow modification of this parameter, the Agent MUST respond with an error to the request to set this parameter.
        </description>
        <syntax>
          <list maxItems="1"/>
          <string>
            <pathRef refType="strong" targetParent="Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="BannedRole" access="readWrite" dmr:version="2.12">
        <description>
          The Role that is associated with Controllers indicate banned access.
          When assigned to a Controller or associated with an entry in the {{object|Credential}} table, this MUST be the only value of the {{param}} parameter of the {{param|##.LocalAgent.Controller.{i}.AssignedRole}} parameter.
          The Agent SHOULD refuse to accept USP messages from, or send USP messages to, any Controller that has this Role.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="TOFUAllowed" access="readWrite" dmr:version="2.12">
        <description>
          When  {{true}}, Agent has active policy that allows for self-signed certificates and certificates from unknown Certificate Authorities (CAs) to be trusted on first use (TOFU).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="TOFUInactivityTimer" access="readWrite" dmr:version="2.12">
        <description>
          Inactivity timer in {{units}}.
          This timer is started when trust on first use (TOFU) policy is used to accept a Controller certificate. If no USP Message is received before this timer elapses, the Agent MUST tear down the MTP connection and underlying (D)TLS session.
          A value of 0 means that the TOFU inactivity timer is effectively disabled.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <command name="RequestChallenge()" dmr:version="2.12">
        <description>
          This command is issued to retrieve the instruction for the referenced challenge.
          There is at most one (1) outstanding RequestChallenge for a requesting Controller.
          As such, any new challenges with a different value of the {{param|ChallengeRef}} parameter are denied until a successful response to the outstanding challenge is received by the Agent or the current RequestChallenge expires.
          When the value of the {{param|ChallengeRef}} parameter defined in the RequestChallenge does not exist, the Agent returns an "Invalid Value" error.
        </description>
        <input>
          <parameter name="ChallengeRef" mandatory="true" dmr:version="2.12">
            <description>
              {{reference|the {{object|#.Challenge}} object instance for this request}}
            </description>
            <syntax>
              <string>
                <pathRef refType="weak" targetParent="#.Challenge." targetType="row"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="RequestExpiration" dmr:version="2.12">
            <description>
              The expiration period, in {{units}}, where the Controller request that this challenge request expire (times-out).
              A value of zero indicates that the challenge request will never expire. The default is 900 {{units}}.
            </description>
            <syntax>
              <int>
                <range minInclusive="0"/>
                <units value="seconds"/>
              </int>
            </syntax>
          </parameter>
        </input>
        <output>
          <parameter name="Instruction" dmr:version="2.12">
            <description>
              The value of the {{param|##.Challenge.{i}.Instruction}} parameter associated with the requested challenge in the {{param|#.Input.ChallengeRef}} parameter.
            </description>
            <syntax>
              <base64/>
            </syntax>
          </parameter>
          <parameter name="InstructionType" dmr:version="2.12">
            <description>
              The media type with a format as defined by {{bibref|RFC6838}} of the content of the {{param|Instruction}} parameter.
              The allowable values of the media type are defined by the {{param|##.Challenge.{i}.InstructionType}} parameter.
            </description>
            <syntax>
              <string/>
            </syntax>
          </parameter>
          <parameter name="ValueType" dmr:version="2.12">
            <description>
              The media type with a format as defined by {{bibref|RFC6838}} of the content of the {{param|##.Challenge.{i}.Value}} parameter.
              The allowable values of the media type are defined by the {{param|##.Challenge.{i}.ValueType}} parameter.
            </description>
            <syntax>
              <string/>
            </syntax>
          </parameter>
          <parameter name="ChallengeID" dmr:version="2.12">
            <description>
              The challenge identifier the Controller uses in the ChallengeResponse command to correlate this request with a response.
            </description>
            <syntax>
              <string/>
            </syntax>
          </parameter>
        </output>
      </command>
      <command name="ChallengeResponse()" dmr:version="2.12">
        <description>
          This command is issued to return the response of challenge.
        </description>
        <input>
          <parameter name="ChallengeID" mandatory="true" dmr:version="2.12">
            <description>
              The challenge identifier the Controller uses to correlate the challenge request with a response.
            </description>
            <syntax>
              <string/>
            </syntax>
          </parameter>
          <parameter name="Value" mandatory="true" dmr:version="2.12">
            <description>
              The value of the challenge that is specific to the type of challenge. The challenge value is provided by the external party to the Controller.
            </description>
            <syntax>
              <base64/>
            </syntax>
          </parameter>
        </input>
      </command>
      <parameter name="RoleNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="CredentialNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="ChallengeNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.ControllerTrust.Role.{i}." access="readWrite" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="RoleNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents a Role that can be assigned to or inherited by a Controller via the Controller Trust mechanism.  The Role contains a set of permissions that determine how the Controller can interact with the data model.
        If multiple permission entries associated with this table contain a Target that evaluates to the same instantiated Object/Parameter for multiple Roles, then the permissions to be used are a union of the identified permissions.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Name" access="readWrite" dmr:version="2.12">
        <description>
          The Role assigned to this {{object}} instance.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="PermissionNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>{{numentries}}</description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.ControllerTrust.Role.{i}.Permission.{i}." access="readWrite" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="PermissionNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents the permissions that are extended to a set of Targets for a specified Role.
        If there are multiple entries in this table for a specific Role where the Targets overlap, the permissions for the entry with the highest value takes priority over all others.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Order"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Order" access="readWrite" dmr:version="2.12">
        <description>
          The order (relative priority) to use when determining the permissions for overlapping Targets that are contained within the same {{object|#.}}.
          The larger value of this parameter takes priority over a permission with a smaller value (i.e., 0 has the lowest priority).
        </description>
        <syntax>
          <unsignedInt/>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="Targets" access="readWrite" dmr:version="2.12">
        <description>
          {{list|each entry is a target to which the value of the permissions parameters are assigned}}
          When an entry is a value of a Partial Path, the permissions are associated to that Object and any child Object/Parameter.
          When the value of an entry is an Object instance then the permissions are associated to all Parameters of the Object instance.
          When an entry is a value of a Search Path as defined in {{bibref|TR-369}} that resolves to zero or more Parameter Paths, then all Parameter Paths that result from the evaluation of the Search Path are subject to the permissions assigned by this {{object}} instance.
        </description>
        <syntax>
          <list/>
          <string>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="Param" access="readWrite" dmr:version="2.12">
        <description>
          The permissions of a Role for the specified Targets.
          A string of 4 characters where each character represents a permission ("r" for Read, "w" for Write, "x" for Execute", and "n" for Notify).
          The string is always in the same order (rwxn) and the lack of a permission is signified by a "-" character (e.g., r--n).
          The following describes the meaning of the permissions for Parameter type of Targets:
          # Read: Grants the capability to read the value of the Parameter via Get and read the meta-information of the Parameter via GetSupportedDM.
          # Write: Grants the capability to update the value of the Parameter via Add or Set.
          # Execute: Grants no capabilities; Parameters can not be executed.
          # Notify: Grants the capability to use this Parameter in the ReferenceList of a ValueChange Subscription.
        </description>
        <syntax>
          <string>
            <size minLength="4" maxLength="4"/>
          </string>
          <default type="object" value="----"/>
        </syntax>
      </parameter>
      <parameter name="Obj" access="readWrite" dmr:version="2.12">
        <description>
          The permissions of a Role for the specified Targets.
          A string of 4 characters where each character represents a permission ("r" for Read, "w" for Write, "x" for Execute", and "n" for Notify).
          The string is always in the same order (rwxn) and the lack of a permission is signified by a "-" character (e.g., r--n).
          The following describes the meaning of the permissions for Object type of Targets:
          # Read: Grants the capability to read the meta-information of the Object via GetSupportedDM.
          # Write: Grants no capabilities for Static Objects. Grants the capability to create a new instance of a Multi-Instanced Object via Add (e.g. Device.LocalAgent.Controller.).
          # Execute: Grants no capabilities; Objects are not executable and Commands are controlled by the CommandEventPermissions.
          # Notify: Grants the capability to use this Object in the ReferenceList of an ObjectCreation (for multi-instance objects only) Subscription.
        </description>
        <syntax>
          <string>
            <size minLength="4" maxLength="4"/>
          </string>
          <default type="object" value="----"/>
        </syntax>
      </parameter>
      <parameter name="InstantiatedObj" access="readWrite" dmr:version="2.12">
        <description>
          The permissions of a Role for the specified Targets.
          A string of 4 characters where each character represents a permission ("r" for Read, "w" for Write, "x" for Execute", and "n" for Notify).
          The string is always in the same order (rwxn) and the lack of a permission is signified by a "-" character (e.g., r--n).
          The following describes the meaning of the permissions for Instantiated Object type of Targets:
          # Read: Grants the capability to read the instance numbers and unique keys of the Instantiated Object via GetInstances.
          # Write: Grants the capability to remove an existing instance of an Instantiated Object via Delete (e.g. Device.LocalAgent.Controller.1.).
          # Execute: Grants no capabilities; Object Instances are not executable and Commands are controlled by the CommandEventPermissions.
          # Notify: Grants the capability to use this Instantiated Object in the ReferenceList of an ObjectDeletion Subscription.
        </description>
        <syntax>
          <string>
            <size minLength="4" maxLength="4"/>
          </string>
          <default type="object" value="----"/>
        </syntax>
      </parameter>
      <parameter name="CommandEvent" access="readWrite" dmr:version="2.12">
        <description>
          The permissions of a Role for the specified Targets.
          A string of 4 characters where each character represents a permission ("r" for Read, "w" for Write, "x" for Execute", and "n" for Notify).
          The string is always in the same order (rwxn) and the lack of a permission is signified by a "-" character (e.g., r--n).
          The following describes the meaning of the permissions for Command and Event type of Targets:
          # Read: Grants the capability to read the meta-information of the Command (including input and output arguments) and Event (including arguments) via GetSupportedDM.
          # Write: Grants no capabilities; Commands are executed instead of written to and Events are read only.
          # Execute: Grants the capability to execute the Command via Operate, but grants no capabilities to an Event.
          # Notify: Grants the capability to use this Event or Command in the ReferenceList of an Event or OperationComplete Subscription.
        </description>
        <syntax>
          <string>
            <size minLength="4" maxLength="4"/>
          </string>
          <default type="object" value="----"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.ControllerTrust.Credential.{i}." access="readWrite" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="CredentialNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents a trusted credential. The credential can be that of a certificate authority (CA) for a Controller whose EndpointID is unknown.
        When a credential is supplied to the Agent by a Controller during authentication, the credentials in this table are used to determine if any of the supplied certificates (including those in the chain of trust) are considered "trusted".
        If the Controller authenticated via an entry in this table is not previously known to the Agent, the associated Role entry is automatically applied to the Controller.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Credential"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Role" access="readWrite" dmr:version="2.12">
        <description>
          {{nolist}}
          Comma-separated list of strings, the (set of) Role(s) applied to a Controller authenticated through this {{object}} instance.
          The roles are added to the Controller's current list of Roles by replacing the value of the {{param|###.LocalAgent.Controller.{i}.InheritedRole}} parameter.
          If the Controller is already known to the Agent, with an associated Role, this parameter has no impact.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="#.Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Credential" access="readWrite" dmr:version="2.12">
        <description>
          A reference to the {{object|##.Certificate.{i}}} instance for use in the authentication of certificates provided by a Controller and authorization of Controllers, and for authentication of certificates used for MTP encryption.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.Certificate." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="AllowedUses" access="readWrite" dmr:version="2.12">
        <description>
          Identifies what usages the Certificate Authority (CA) authenticated by the associated credential is trusted to authorize.
        </description>
        <syntax>
          <string>
            <enumeration value="MTP-only">
              <description>The CA can only authorize MTP (domain) connectivity, and cannot authenticate Controllers.</description>
            </enumeration>
            <enumeration value="MTP-and-USP">
              <description>The CA can authorize MTP (domain) connectivity and authenticate Controllers.</description>
            </enumeration>
            <enumeration value="MTP-and-broker">
              <description>The CA can authorize MTP (domain) connectivity and the presenter of this certificate is trusted to have authenticated the identity of Endpoints whose Records it transmits such that the from_id can be trusted without additional authentication. See {{bibref|TR-369|"Authentication and Authorization"}} for additional description of the Trusted Broker function.</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
    </object>
    <object name="Device.LocalAgent.ControllerTrust.Challenge.{i}." access="readWrite" minEntries="0" maxEntries="unbounded"
        numEntriesParameter="ChallengeNumberOfEntries" enableParameter="Enable" dmr:version="2.12">
      <description>
        Each instance of this table represents information that is used to challenge a Controller in order to assign a Role to the Controller or to determine the authenticity of a Certificate.
        The Controller requests a type of challenge from an Agent using the RequestChallenge command.
        The Agent returns the value of the {{param|Instruction}} for that type of challenge to the Controller which the Controller then provides a third-party.
        The third-party responds to the Instruction which the Controller then sends to the Agent using the ChallengeResponse command.
        The Agent verifies the response to the Challenges and executes an implementation specific Agent logic in order to establish trust with the Controller.
        This could include (but is not limited to):
        *Assignment of roles to the Controller is done by appending the non-duplicate roles of the {{param|Role}} parameter to the value of the {{param|###.LocalAgent.Controller.{i}.AssignedRole}} parameter.
        *Use the Controller's certificate to which the challenge response was received in order to authenticate the identity of the Controller.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Description" access="readWrite" dmr:version="2.12">
        <description>
          The description of this {{object}} instance.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
      <parameter name="Role" access="readWrite" dmr:version="2.12">
        <description>
          {{nolist}}
          Comma-separated list of strings, the (set of) role(s) appended (non-duplicate values only) to the value of the {{param|###.LocalAgent.Controller.{i}.AssignedRole}} parameter.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="#.Role." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enable/Disable this {{object}} instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Type" access="readWrite" dmr:version="2.12">
        <description>
          The type of challenge that will be verified from the challenge response provided by the third-party through the Controller.
        </description>
        <syntax>
          <string>
            <enumeration value="Passphrase">
              <description>The challenge uses a passphrase the third-party is expected to match.</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="Value" access="readWrite" dmr:version="2.12">
        <description>
          The value of the challenge that is specific to the type of challenge.
        </description>
        <syntax hidden="true">
          <base64/>
        </syntax>
      </parameter>
      <parameter name="ValueType" access="readWrite" dmr:version="2.12">
        <description>
          The media type with a format as defined by {{bibref|RFC6838}} of the content of the {{param|Value}} parameter.
        </description>
        <syntax>
          <string>
            <enumeration value="text/plain"/>
            <enumeration value="image/jpeg"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Instruction" access="readWrite" dmr:version="2.12">
        <description>
          The instruction that is provided to the external party by the Controller requesting the challenge.
        </description>
        <syntax>
          <base64/>
        </syntax>
      </parameter>
      <parameter name="InstructionType" access="readWrite" dmr:version="2.12">
        <description>
          The media type with a format as defined by {{bibref|RFC6838}} of the content of the {{param|Instruction}} parameter.
        </description>
        <syntax>
          <string>
            <enumeration value="text/plain"/>
            <enumeration value="image/jpeg"/>
            <enumeration value="text/html"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Retries" access="readWrite" dmr:version="2.12">
        <description>
          The number of times a challenge is retried before the challenge procedure is terminated.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="LockoutPeriod" access="readWrite" dmr:version="2.12">
        <description>
          The time, in {{units}} that a Controller that has failed the challenge is locked out (based on the value of the {{param|Retries}} parameter) prior to being provided the challenge again.
          A value of zero means that a LockoutPeriod doesn't apply and the challenge can be provided indefinitely.
        </description>
        <syntax>
          <int>
            <range minInclusive="0"/>
            <units value="seconds"/>
          </int>
          <default type="object" value="30"/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.STOMP." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        The {{object}} represents the STOMP capabilities of the device as described in {{bibref|TR-369}}.
      </description>
      <parameter name="ConnectionNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.STOMP.Connection.{i}." access="readWrite" minEntries="0" maxEntries="unbounded" enableParameter="Enable"
        numEntriesParameter="ConnectionNumberOfEntries" dmr:version="2.12">
      <description>
        The {{object}} represents a STOMP connection between the Agent and a STOMP server.
      </description>
      <uniqueKey>
        <parameter ref="Host"/>
        <parameter ref="Username"/>
        <parameter ref="VirtualHost"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Enables or disables this {{object}}.
          This parameter is based on ''ifAdminStatus'' from {{bibref|RFC2863}}.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          The current operational state of this {{object}} (see {{bibref|TR-181i2|Section 4.2.2}}).  {{enum}}
          When {{param|Enable}} is {{false}} then {{param}} SHOULD normally be {{enum|Disabled}} or {{enum|Error}} if there is a fault condition on the interface).
          When {{param|Enable}} is changed to {{true}} then {{param}} SHOULD change to {{enum|Enabled}} if and only if the interface is able to transmit and receive PDUs; it SHOULD change to {{enum|Unknown}} if the state of the interface can not be determined for some reason.
        </description>
        <syntax>
          <string>
            <enumeration value="Enabled"/>
            <enumeration value="Disabled"/>
            <enumeration value="Unknown"/>
            <enumeration value="Connecting"/>
            <enumeration value="ServerNotPresent"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error_AuthenticationFailure"/>
            <enumeration value="Error" optional="true"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="LastChangeDate" access="readOnly" dmr:version="2.12">
        <description>
          The date and time at which this {{object}} entered into its current operational state.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
      <parameter name="Host" access="readWrite" dmr:version="2.12">
        <description>
          The hostname or IP Address of the STOMP Server.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Port" access="readWrite" dmr:version="2.12">
        <description>
          The port number of the STOMP Server.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="61613"/>
        </syntax>
      </parameter>
      <parameter name="Username" access="readWrite" dmr:version="2.12">
        <description>
          The username part of the credentials to be used when authenticating this {{object}} during connection establishment with the STOMP Server.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Password" access="readWrite" dmr:version="2.12">
        <description>
          The password part of the credentials to be used when authenticating this {{object}} during connection establishment with the STOMP Server.
        </description>
        <syntax hidden="true">
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="VirtualHost" access="readWrite" dmr:version="2.12">
        <description>
          The Virtual Host to use when establishing the connection.
          Some STOMP Server implementations utilize virtual hosts to place a context around credentials, permissions, and internal resources.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
      <parameter name="EnableHeartbeats" access="readWrite" dmr:version="2.12">
        <description>
          Enable or disable the STOMP Heart-beating mechanism as described in STOMP (for this {{object}}).
          When the STOMP Heart-beat mechanism is enabled, {{param|OutgoingHeartbeat}} and {{param|IncomingHeartbeat}} determine how the heart-beat header within the CONNECT frame is formatted.
          When the STOMP Heart-beat mechanism is disabled, {{param|OutgoingHeartbeat}} and {{param|IncomingHeartbeat}} are ignored and the CONNECT frame MUST NOT contain a heart-beat header element.
          Any changes to this parameter will not take effect until the next connection.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
      <parameter name="OutgoingHeartbeat" access="readWrite" dmr:version="2.12">
        <description>
          Represents the Outgoing heart-beat timing of the STOMP Heart-beating mechanism as described in STOMP (for this {{object}}).
          The Outgoing heart-beat represents what the sender of the frame can do.  A value of 0 means that it cannot send heart-beats.
          Any changes to this parameter will not take effect until the next connection.
        </description>
        <syntax>
          <unsignedInt>
            <units value="milliseconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="IncomingHeartbeat" access="readWrite" dmr:version="2.12">
        <description>
          Represents the Incoming heart-beat timing of the STOMP Heart-beating mechanism as described in STOMP (for this {{object}}).
          The Incoming heart-beat represents what the sender of the frame would like to get.  A value of 0 means that it does not want to receive heart-beats.
          Any changes to this parameter will not take effect until the next connection.
        </description>
        <syntax>
          <unsignedInt>
            <units value="milliseconds"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
      <parameter name="ServerRetryInitialInterval" access="readWrite" dmr:version="2.12">
        <description>
          The maximum first reconnection wait interval, in {{units}}, as specified in {{bibref|TR-369}}.
          The Device MUST use a random value between ''0'' and {{param}} as the first reconnection wait interval.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="60"/>
        </syntax>
      </parameter>
      <parameter name="ServerRetryIntervalMultiplier" access="readWrite" dmr:version="2.12">
        <description>
          The reconnection interval multiplier as specified in {{bibref|TR-369}}. This value is expressed in units of 0.001. Hence the values of the multiplier range between 1.000 and 65.535.
          For the ''n''th reconnection wait interval, the Device MUST use a random value, in ''seconds'', between ''0'' and {{param|ServerRetryInitialInterval}} * ({{param}} / 1000) ** (''n'' - ''1'').
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1000" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="2000"/>
        </syntax>
      </parameter>
      <parameter name="ServerRetryMaxInterval" access="readWrite" dmr:version="2.12">
        <description>
          The maximum reconnection wait interval, in {{units}}.
          If the ''n''th reconnection wait interval calculated from {{param|ServerRetryInitialInterval}} and {{param|ServerRetryIntervalMultiplier}} exceeds the value of this parameter, then the Agent MUST use the value of this parameter as the next reconnection wait interval.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="30720"/>
        </syntax>
      </parameter>
      <parameter name="IsEncrypted" access="readOnly" dmr:version="2.12">
        <description>
          This parameter represents whether or not communications that utilize this {{object}} object instance are encrypted.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.Standby." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        Capabilities of a Device as it pertains to entering a standby state.
      </description>
      <parameter name="NetworkAware" access="readOnly" dmr:version="2.12">
        <description>
          Indicates that the device is capable of maintaining a network connection and responding to communications via the network connection while in a standby state.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="TimerAware" access="readOnly" dmr:version="2.12">
        <description>
          Indicates that the device is capable of maintaining and responding to timers while in a standby state.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.SoftwareModules." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        Top level object for dynamically managed software applications.
      </description>
      <command name="InstallDU()" async="true" dmr:version="2.12">
        <description>
          Install one or more Deployment Units (DUs) to the associated {{object}}.
        </description>
        <input>
          <parameter name="URL" mandatory="true" dmr:version="2.12">
            <description>
              The URL, as defined in {{bibref|RFC3986}}, that specifies the location of the DU to be installed.
              The URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
              HTTP and HTTPS transports MUST be supported.  Other optional transports MAY be supported.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="UUID" dmr:version="2.12">
            <description>
              The UUID (see {{bibref|RFC4122}}) of the DU to be installed.
              If this parameter is {{empty}} the device MUST generate the UUID based on the rules defined in {{bibref|RFC4122}} and {{bibref|TR-069|Annex H}}.
            </description>
            <syntax>
              <dataType ref="UUID"/>
            </syntax>
          </parameter>
          <parameter name="Username" dmr:version="2.12">
            <description>
              Username to be used by the device to authenticate with the file server, if authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
              <default type="parameter" value=""/>
            </syntax>
          </parameter>
          <parameter name="Password" dmr:version="2.12">
            <description>
              Password to be used by the device to authenticate with the file server, if authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
              <default type="parameter" value=""/>
            </syntax>
          </parameter>
          <parameter name="ExecutionEnvRef" dmr:version="2.12">
            <description>
              A reference to the Execution Environment upon which the DU to be installed.
              If {{empty}} the device MUST choose the Execution Environment to use.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
                <pathRef refType="weak" targetParent=".SoftwareModules.ExecutionUnit." targetType="row"/>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
      <event name="DUStateChange!" dmr:version="2.12">
        <description>
          This event informs a Controller of the completion (successful or unsuccessful) of a DU state change.
          When used, this event MUST be issued after the device has completed any file transfers and carried out all operations related to the DU State Change.
          This event MAY contain the results from multiple DU state changes; it is implementation specific how the device chooses to aggregate the DU state changes, although the device MUST notify the Controller of any DU state changes within 24 hours of the time the operations were completed by the device.
          The device SHOULD make every attempt to aggregate, as much as possible, the DU State Change notifications to the Controller in the interest of scalability.
        </description>
        <parameter name="UUID" dmr:version="2.12">
          <description>
            The UUID as defined in {{bibref|RFC4122}} of the DU that affected by the state change.
          </description>
          <syntax>
            <dataType ref="UUID"/>
          </syntax>
        </parameter>
        <parameter name="DeploymentUnitRef" dmr:version="2.12">
          <description>
            A reference to the DU that was affected by the state change.
          </description>
          <syntax>
            <string>
              <pathRef refType="weak" targetParent=".SoftwareModules.DeploymentUnit." targetType="row"/>
            </string>
          </syntax>
        </parameter>
        <parameter name="Version" dmr:version="2.12">
          <description>
            In the case of an Install, this will be the version of the DU created.  In the case of an Update, it will be the updated version of the DU. In the case of an Uninstall, it will be the version of the uninstalled DU.
            This MUST match the {{param|.SoftwareModules.DeploymentUnit.{i}.Version}} Parameter contained within the instance of the DeploymentUnit that is contained within the {{param|DeploymentUnitRef}} argument.
          </description>
          <syntax>
            <string>
              <size maxLength="32"/>
            </string>
          </syntax>
        </parameter>
        <parameter name="CurrentState" dmr:version="2.12">
          <description>
            The current state of the created DU.
          </description>
          <syntax>
            <string>
              <enumeration value="Installed">
                <description>
                  The DU is in an Installed state due to one of the following: successful Install, successful Update, failed Update, or failed Uninstall.  In the case of a failed Update or failed Uninstall the Fault argument will contain an explanation of the failure.
                </description>
              </enumeration>
              <enumeration value="UnInstalled">
                <description>
                  The DU was successfully uninstalled from the device.
                </description>
              </enumeration>
              <enumeration value="Failed">
                <description>
                  The DU could not be installed in which case a DU instance MUST NOT be created in the Data Model.
                </description>
              </enumeration>
            </string>
          </syntax>
        </parameter>
        <parameter name="Resolved" dmr:version="2.12">
          <description>
            Whether or not the DU operation resolved all of its dependencies.
            In the case of a successful Uninstall, this value is meaningless and should be {{true}}.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>
        <parameter name="ExecutionUnitRefList" dmr:version="2.12">
          <description>
            The Execution Units affected by this operation.
            In the case of an Install, this will be the list of EUs that were created as a result of the DU’s installation.
            In the case an Update, this will be the list of all EUs currently associated with the updated DU, including those that were created through the initial DU installation and any updates that had already occurred but not including any EUs that no longer exist on the device because of this or previous updates.
            In the case of an Uninstall, this will be the list of the EUs removed from the device due to the DU being removed.
          </description>
          <syntax>
            <list/>
            <string>
              <pathRef refType="weak" targetParent=".SoftwareModules.ExecutionUnit." targetType="row"/>
            </string>
          </syntax>
        </parameter>
        <parameter name="StartTime" dmr:version="2.12">
          <description>
            The date and time transfer was started in UTC. The device SHOULD record this information and report it in this argument, but if this information is not available, the value of this argument MUST be set to the Unknown Time value.
          </description>
          <syntax>
            <dateTime/>
          </syntax>
        </parameter>
        <parameter name="CompleteTime" dmr:version="2.12">
          <description>
            The date and time the transfer was fully completed and applied in UTC. This need only be filled in if the transfer has been fully completed and applied. The device SHOULD record this information and report it in this argument, but if this information is not available or the transfer has not completed, the value of this argument MUST be set to the Unknown Time value.
          </description>
          <syntax>
            <dateTime/>
          </syntax>
        </parameter>
        <parameter name="OperationPerformed" dmr:version="2.12">
          <description>
            The operation that was performed against the DU causing the DU state change.
          </description>
          <syntax>
            <string>
              <enumeration value="Install">
                <description>The operation attempted was the Installation of a DU.</description>
              </enumeration>
              <enumeration value="Update">
                <description>The operation attempted was the Update of an existing DU.</description>
              </enumeration>
              <enumeration value="Uninstall">
                <description>The operation attempted was the Un-Installation of an existing DU.</description>
              </enumeration>
            </string>
          </syntax>
        </parameter>
        <object name="Fault." minEntries="1" maxEntries="1" dmr:version="2.12">
          <description>
            Fault Structure. If the operation was successful, the {{param|FaultCode}} MUST be zero. Otherwise a non-zero {{param|FaultCode}} is specified along with a {{param|FaultString}} indicating the failure reason.
          </description>
          <parameter name="FaultCode" dmr:version="2.12">
            <description>
              The numerical fault code. Valid values are:
              *If the operation was successful, the fault code is 0.
              *If the device cannot complete the operation for some unknown reason, it SHOULD reject the operation with a 9001 (Request Denied) fault code.
              *If the device detects the presence of the "userinfo" component in the file source URL, it SHOULD reject the operation with a 9003 (Invalid Arguments) fault code.
              *If the device cannot find the Execution Environment specified in the Install or Update command, it SHOULD reject the operation with a 9023 (Unknown Execution Environment) fault code.
              *If the device determines that the Deployment Unit being installed does not match either the Execution Environment specified or any Execution Environment on the device, it SHOULD reject the operation with a 9025 (Deployment Unit to Execution Environment Mismatch) fault code
              *If the device detects that the Deployment Unit being installed already has the same version as one already installed on the same Execution Environment, it SHOULD reject the operation with a 9026 (Duplicate Deployment Unit) fault code.
              *If the device detects that that there are no more system resources (disk space, memory, etc.) to perform the Install or Update of a Deployment Unit, it SHOULD reject the operation with a 9027 (System Resources Exceeded) fault code.
              *If a requested operation attempts to alter the State of a Deployment Unit in a manner that conflicts with the Deployment Unit State Machine Diagram {{bibref|TR-369|Appendix I "Software Module Management"}}, it SHOULD reject the operation with a 9029 (Invalid Deployment Unit State) fault code.
              *If a requested operation attempts to Uninstall a DU that caused an EE to come into existence, where that EE has at least 1 installed DU or at least 1 child EE, then the device SHOULD reject the operation with a 9029 (Invalid Deployment Unit State) fault code.
            </description>
            <syntax>
              <unsignedInt/>
            </syntax>
          </parameter>
          <parameter name="FaultString" dmr:version="2.12">
            <description>
              A human-readable text description of the fault. This field SHOULD be empty if the FaultCode equals 0 (zero).
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
        </object>
      </event>
      <parameter name="ExecEnvNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="DeploymentUnitNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
      <parameter name="ExecutionUnitNumberOfEntries" access="readOnly" dmr:version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>
    <object name="Device.SoftwareModules.ExecEnv.{i}." access="readOnly" numEntriesParameter="ExecEnvNumberOfEntries" minEntries="0" maxEntries="unbounded" dmr:version="2.12">
      <description>
        The Execution Environments that are available on the device, along with their properties and configurable settings.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Name"/>
      </uniqueKey>
      <parameter name="Enable" access="readWrite" dmr:version="2.12">
        <description>
          Indicates whether or not this {{object}} is enabled.
          Disabling an enabled Execution Environment stops it, while enabling a disabled Execution Environment starts it.
          When an Execution Environment is disabled, Deployment Units installed to that Execution Environment will be unaffected, but any Execution Units currently running on that Execution Environment will automatically transition to {{enum|Idle|#.ExecutionUnit.{i}.Status}}.
          If an Update or Uninstall operation is attempted on a {{object|#.DeploymentUnit}} that is to be applied against a disabled {{object}}, that operation fails and the associated event will contain a FaultStruct for that operation.
          Disabling an Execution Environment could place the device in a non-manageable state.  For example, if the operating system itself was modeled as an {{object}} and a Controller disabled it, the Agent might be terminated leaving the device unmanageable.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          Indicates the status of this {{object}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Up"/>
            <enumeration value="Error" optional="true"/>
            <enumeration value="Disabled"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Name" access="readOnly" dmr:version="2.12">
        <description>
          A Name provided by the device that adequately distinguishes this {{object}} from all other {{object}} instances.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Type" access="readOnly" dmr:version="2.12">
        <description>
          Indicates the complete type and specification version of this {{object}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="InitialRunLevel" access="readWrite" dmr:version="2.12">
        <description>
          The run level that this {{object}} will be in upon startup (whether that is caused by a device Boot or the Execution Environment starting).
          Run levels dictate which Execution Units will be started.  Execution Units will be started if {{param|CurrentRunLevel}} is greater than or equal to {{param|#.ExecutionUnit.{i}.RunLevel}} and {{param|#.ExecutionUnit.{i}.AutoStart}} is {{true}}.
          If the value of {{param|CurrentRunLevel}} is -1, then the value of this parameter is irrelevant when read and setting its value has no impact on the Run Level of this {{object}}.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="65535"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="CurrentRunLevel" access="readOnly" dmr:version="2.12">
        <description>
          The run level that this {{object}} is currently operating in.  This value is altered by executing the {{command|SetRunLevel()}} command.
          Upon startup (whether that is caused by a device Boot or the Execution Environment starting) {{param}} will be equal to {{param|InitialRunLevel}}, unless Run Levels are not supported by this {{object}} in which case {{param}} will be -1.
          Run levels dictate which Execution Units will be started.  Execution Units will be started if {{param}} is greater than or equal to {{param|#.ExecutionUnit.{i}.RunLevel}} and {{param|#.ExecutionUnit.{i}.AutoStart}} is {{true}}.
          If {{param}} is -1 then Run Levels are not supported by this {{object}} and setting {{param|InitialRunLevel}} or executing the command {{command|SetRunLevel()}} will not impact the Run Level of this {{object}}.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="InitialExecutionUnitRunLevel" access="readWrite" dmr:version="2.12">
        <description>
          Indicates the initial value on creation for {{param|#.ExecutionUnit.{i}.RunLevel}} for all Execution Unit instances associated with this {{object}}.
          If the value of {{param|CurrentRunLevel}} is -1, then the value of this parameter is irrelevant when read and setting its value has no impact on the Run Level of any Execution Unit.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="Vendor" access="readOnly" dmr:version="2.12">
        <description>
          The vendor that produced this {{object}}.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Version" access="readOnly" dmr:version="2.12">
        <description>
          The Version of this {{object}} as specified by the Vendor that implemented this {{object}}, not the version of the specification.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ParentExecEnv" access="readOnly" dmr:version="2.12">
        <description>
          Represents the parent {{object}} of this {{object}}.
          If this value is {{empty}} then this is the Primary Execution Environment.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.ExecEnv." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="AllocatedDiskSpace" access="readOnly" dmr:version="2.12">
        <description>
          The amount of disk space measured in {{units}} allocated to this {{object}}.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="AvailableDiskSpace" access="readOnly" dmr:version="2.12">
        <description>
          The amount of disk space measured in {{units}} currently available to this {{object}}.  This value changes as the {{object|#.ExecutionUnit}} instances associated with this {{object}} consumes disk space.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="AllocatedMemory" access="readOnly" dmr:version="2.12">
        <description>
          The amount of physical RAM measured in {{units}} allocated to this {{object}}.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="AvailableMemory" access="readOnly" dmr:version="2.12">
        <description>
          The amount of physical RAM measured in {{units}} currently available to this {{object}}.  This value changes as the {{object|#.ExecutionUnit}} instances associated with this {{object}} are started/stopped and consume the physical RAM.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="ActiveExecutionUnits" access="readOnly" dmr:version="2.12">
        <description>
          Represents the {{object|#.ExecutionUnit}} instances currently running on this {{object}}.  This parameter only contains {{object|#.ExecutionUnit}} instances that currently have a {{param|#.ExecutionUnit.{i}.Status}} of {{enum|Active|#.ExecutionUnit.{i}.Status}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="#.ExecutionUnit." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ProcessorRefList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the processors that this {{object}} has available to it.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.Processor." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <command name="SetRunLevel()" dmr:version="2.12">
        <description>
          Provides a mechanism to remotely manipulate the run level of this {{object}}, meaning that altering this comand will change the value of the {{param|#.CurrentRunLevel}}.
          Run levels dictate which Execution Units will be started.  Execution Units will be started if {{param|CurrentRunLevel}} is greater than or equal to {{param|#.ExecutionUnit.{i}.RunLevel}} and {{param|#.ExecutionUnit.{i}.AutoStart}} is {{true}}.
        </description>
        <input>
          <parameter name="RequestedRunLevel" dmr:version="2.12">
            <description>
              This parameter will request to change the value of the {{param|#.CurrentRunLevel}} to the value of this parameter.
              Setting this value when {{param|#.CurrentRunLevel}} is -1 has no impact to the Run Level of this instance of the {{object|##.}} object.
            </description>
            <syntax>
              <int>
                <range minInclusive="-1" maxInclusive="65535"/>
              </int>
            </syntax>
          </parameter>
        </input>
      </command>
      <command name="Reset()" dmr:version="2.12">
        <description>
          This command causes this {{object}} to revert back to the state it was in when the device last issued a Boot event with a cause of a local or remote factory reset.
          The following requirements dictate what MUST happen for the reset to be complete:
          # All Deployment Units that were installed after the last Boot (with cause of a factory reset) event MUST be removed
          # All persistent storage, configuration files, and log files that were associated with the removed Deployment Units MUST be removed
          # Any Deployment Unit that is still installed against the Execution Environment MUST be restored to the version present when the last Boot (with cause of a factory reset) event event was issued
          # Any Deployment Unit that was present when the last Boot (with cause of a factory reset) eventevent was issued, but was subsequently uninstalled and is now not present, MUST be installed with the version that was present when the last "0 BOOTSTRAP" Inform event was issued
          # The Execution Environment MUST be restored to the version and configuration present when the last Boot (with cause of a factory reset) eventevent was issued
          # The Execution Environment MUST be restarted after all other restoration requirements have been met
        </description>
      </command>
    </object>
    <object name="Device.SoftwareModules.DeploymentUnit.{i}." access="readOnly" numEntriesParameter="DeploymentUnitNumberOfEntries" minEntries="0" maxEntries="unbounded" dmr:version="2.12">
      <description>
        This table serves as the Deployment Unit inventory and contains status information about each Deployment Unit.
        A new instance of this table gets created during the installation of a Software Module.
      </description>
      <uniqueKey>
        <parameter ref="UUID"/>
        <parameter ref="Version"/>
        <parameter ref="ExecutionEnvRef"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="UUID" access="readOnly" dmr:version="2.12">
        <description>
          A Universally Unique Identifier either provided by the Controller, or generated by the device, at the time of Deployment Unit Installation.
          The format of this value is defined by {{bibref|RFC4122}} Version 5 (Name-Based) and {{bibref|TR-181i2a12|Appendix TBD}}.
          This value MUST NOT be altered when the {{object}} is updated.
        </description>
        <syntax>
          <string>
            <size maxLength="36"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="DUID" access="readOnly" dmr:version="2.12">
        <description>
          Deployment Unit Identifier chosen by the targeted {{object|#.ExecEnv}}.  The format of this value is Execution Environment specific.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Name" access="readOnly" dmr:version="2.12">
        <description>
          Indicates the Name of this {{object}}, which is chosen by the author of the Deployment Unit.
          The value of this parameter is used in the generation of the {{param|UUID}} based on the rules defined in {{bibref|TR-069|Annex H}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          Indicates the status of this {{object}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Installing">
              <description>
                This instance is in the process of being Installed and SHOULD transition to the {{enum|Installed}} state.
              </description>
            </enumeration>
            <enumeration value="Installed">
              <description>
                This instance has been successfully Installed.  The {{param|Resolved}} flag SHOULD also be referenced for dependency resolution.
              </description>
            </enumeration>
            <enumeration value="Updating">
              <description>
                This instance is in the process of being Updated and SHOULD transition to the {{enum|Installed}} state.
              </description>
            </enumeration>
            <enumeration value="Uninstalling">
              <description>
                This instance is in the process of being Uninstalled and SHOULD transition to the {{enum|Uninstalled}} state.
              </description>
            </enumeration>
            <enumeration value="Uninstalled">
              <description>
                This instance has been successfully Uninstalled.  This status will typically not be seen within a {{object}} instance.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="Resolved" access="readOnly" dmr:version="2.12">
        <description>
          Indicates whether or not this {{object}} has resolved all of its dependencies.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="URL" access="readOnly" dmr:version="2.12">
        <description>
          Contains the URL used by the most recent ChangeDUState RPC to either Install or Update this {{object}}.
        </description>
        <syntax>
          <string>
            <size maxLength="1024"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Description" access="readOnly" dmr:version="2.12">
        <description>
          Textual description of this {{object}}. The format of this value is Execution Environment specific.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Vendor" access="readOnly" dmr:version="2.12">
        <description>
          The author of this {{object}} formatted as a domain name.
          The value of this parameter is used in the generation of the {{param|UUID}} based on the rules defined in {{bibref|TR-069a3|Annex H}}.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Version" access="readOnly" dmr:version="2.12">
        <description>
          Version of this {{object}}.  The format of this value is Execution Environment specific.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="VendorLogList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the vendor log files that have come into existence because of this {{object}}.
          This does not include any vendor log files that have come into existence because of {{object|#.ExecutionUnit}} instances that are contained within this {{object}}.
          When this {{object}} is uninstalled the vendor log files referenced here SHOULD be removed from the device.
          Not all {{object}} instances will actually have a corresponding vendor log file, in which case the value of this parameter will be {{empty}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.VendorLogFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="VendorConfigList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the vendor config files that have come into existence because of this {{object}}.
          This does not include any vendor config files that have come into existence because of {{object|#.ExecutionUnit}} instances that are contained within this {{object}}.
          When this {{object}} is uninstalled the vendor config files referenced here SHOULD be removed from the device.
          Not all {{object}} instances will actually have a corresponding vendor config file, in which case the value of this parameter will be {{empty}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.VendorConfigFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecutionUnitList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the {{object|#.ExecutionUnit}} instances that are associated with this {{object}} instance.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent="#.ExecutionUnit." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecutionEnvRef" access="readOnly" dmr:version="2.12">
        <description>
          Represents the {{object|#.ExecEnv}} instance where this {{object}} instance is installed.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.ExecEnv." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <command name="Update()" async="true" dmr:version="2.12">
        <description>
          Update the associated {{object}}.
        </description>
        <input>
          <parameter name="URL" dmr:version="2.12">
            <description>
              The URL, as defined in {{bibref|RFC3986}}, that specifies the location of the DU to be installed.
              The URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
              HTTP and HTTPS transports MUST be supported.  Other optional transports MAY be supported.
              If the device receives an Update command with the same source URL as a previous Update or Install comamnd, the device MUST perform each Update as requested, and MUST NOT assume that the content of the file to be downloaded is the same each time.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Username" dmr:version="2.12">
            <description>
              Username to be used by the device to authenticate with the file server, if authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
              <default type="parameter" value=""/>
            </syntax>
          </parameter>
          <parameter name="Password" dmr:version="2.12">
            <description>
              Password to be used by the device to authenticate with the file server, if authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
              <default type="parameter" value=""/>
            </syntax>
          </parameter>
        </input>
      </command>
      <command name="Uninstall()" async="true" dmr:version="2.12">
        <description>
          Uninstall the associated {{object}}.
        </description>
      </command>
    </object>
    <object name="Device.SoftwareModules.ExecutionUnit.{i}." access="readOnly" numEntriesParameter="ExecutionUnitNumberOfEntries" minEntries="0" maxEntries="unbounded" dmr:version="2.12">
      <description>
        This table serves as the Execution Unit inventory and contains both status information about each Execution Unit as well as configurable parameters for each Execution Unit.
        Each {{object|#.DeploymentUnit}} that is installed can have zero or more Execution Units.
        Once a Deployment Unit is installed it populates this table with its contained Execution Units.
        When the Deployment Unit (that caused this {{object}} to come into existence) is updated, this instance MAY be removed and new instances MAY come into existence.  While the Deployment Unit (that caused this {{object}} to come into existence) is being updated, all {{object}} instances associated with the Deployment Unit will be stopped until the update is complete at which time they will be restored to the state that they were in before the update started.
        When the Deployment Unit (that caused this {{object}} to come into existence) is uninstalled, this instance is removed.
        Each {{object}} MAY also contain a set of vendor specific parameters displaying status and maintaining configuration that reside under the {{object|Extensions}} object.
      </description>
      <uniqueKey>
        <parameter ref="EUID"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="EUID" access="readOnly" dmr:version="2.12">
        <description>
          Execution Unit Identifier chosen by the {{object|#.ExecEnv}} during installation of the associated {{object|#.DeploymentUnit}}.
          The format of this value is Execution Environment specific, but it MUST be unique across {{object|#.ExecEnv}} instances.  Thus, it is recommended that this be a combination of the {{param|#.ExecEnv.{i}.Name}} and an Execution Environment local unique value.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
      <parameter name="Name" access="readOnly" dmr:version="2.12">
        <description>
          The name of this {{object}} as it pertains to its associated {{object|#.DeploymentUnit}}, which SHOULD be unique across all {{object}} instances contained within its associated {{object|#.DeploymentUnit}}.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecEnvLabel" access="readOnly" dmr:version="2.12">
        <description>
          The name of this {{object}} as provided by the {{object|#.ExecEnv}}, which SHOULD be unique across all {{object}} instances contained within a specific {{object|#.ExecEnv}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Status" access="readOnly" dmr:version="2.12">
        <description>
          Indicates the status of this {{object}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Idle">
              <description>
                This instance is in an Idle state and not running.
              </description>
            </enumeration>
            <enumeration value="Starting">
              <description>
                This instance is in the process of Starting and SHOULD transition to the {{enum|Active}} state.
              </description>
            </enumeration>
            <enumeration value="Active">
              <description>
                This instance is currently running.
              </description>
            </enumeration>
            <enumeration value="Stopping">
              <description>
                This instance is in the process of Stopping and SHOULD transition to the {{enum|Idle}} state.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecutionFaultCode" access="readOnly" dmr:version="2.12">
        <description>
          If while running or transitioning between states this {{object}} identifies a fault this parameter embodies the problem.  The value of {{enum|NoFault}} MUST be used when everything is working as intended. {{enum}}
          For fault codes not included in this list, the vendor MAY include vendor-specific values, which MUST use the format defined in {{bibref|TR-106a4|Section 3.3}}.
        </description>
        <syntax>
          <string>
            <enumeration value="NoFault"/>
            <enumeration value="FailureOnStart"/>
            <enumeration value="FailureOnAutoStart"/>
            <enumeration value="FailureOnStop"/>
            <enumeration value="FailureWhileActive"/>
            <enumeration value="DependencyFailure"/>
            <enumeration value="UnStartable"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecutionFaultMessage" access="readOnly" dmr:version="2.12">
        <description>
          If while running or transitioning between states this {{object}} identifies a fault this parameter provides a more detailed explanation of the problem.
          If {{param|ExecutionFaultCode}} has the value of {{enum|NoFault|ExecutionFaultCode}} then the value of this parameter MUST {{empty}} and ignored by the Controller.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="AutoStart" access="readWrite" dmr:version="2.12">
        <description>
          If {{true}} and the {{param|RunLevel}} verification is also met, then this {{object}} will be automatically started by the device after its {{object|#.ExecEnv}} is either rebooted or restarted.
          If {{false}} this {{object}} will not be started after its {{object|#.ExecEnv}} is either rebooted or restarted until it is explicitly commanded to do so by either the Controller or another Execution Unit.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="RunLevel" access="readWrite" dmr:version="2.12">
        <description>
          Determines when this {{object}} will be started.
          If {{param|AutoStart}} is {{true}} and {{param|#.ExecEnv.{i}.CurrentRunLevel}} is greater than or equal to {{param}}, then this {{object}} will be started.
          If the value of {{param|#.ExecEnv.{i}.CurrentRunLevel}} is -1, then the associated {{object|#.ExecEnv.}} doesn't support Run Levels, thus the value of this parameter is irrelevant when read and setting its value has no impact to the Run Level of this {{object}}.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="65535"/>
          </unsignedInt>
        </syntax>
      </parameter>
      <parameter name="Vendor" access="readOnly" dmr:version="2.12">
        <description>
          Vendor of this {{object}}.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Version" access="readOnly" dmr:version="2.12">
        <description>
          Version of the {{object}}.  The format of this value is Execution Environment specific.
        </description>
        <syntax>
          <string>
            <size maxLength="32"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="Description" access="readOnly" dmr:version="2.12">
        <description>
          Textual description of this {{object}}. The format of this value is Execution Environment specific.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="DiskSpaceInUse" access="readOnly" dmr:version="2.12">
        <description>
          The amount of disk space measured in {{units}} currently being used by this {{object}}.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="MemoryInUse" access="readOnly" dmr:version="2.12">
        <description>
          The amount of physical RAM measured in {{units}} currently being used by this {{object}}.  A value of -1 MUST be used for {{object}} instances where this parameter is not applicable.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
            <units value="kilobytes"/>
          </int>
        </syntax>
      </parameter>
      <parameter name="References" access="readOnly" dmr:version="2.12">
        <description>
          Represents the instances of multi-instanced objects that are directly controlled by, and have come into existence because of, this {{object}}.
          NOTE: All other objects and parameters (i.e. not multi-instanced objects) that this {{object}} has caused to come into existence can be discovered via the GetSupportedDM and GetInstances USP messages.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="AssociatedProcessList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the system processes that are active in the system because of this {{object}}.
          If {{param|Status}} is not {{enum|Active|Status}} it is expected that this list will be {{empty}}.  Some {{object}} instances MIGHT NOT have any system processes irrespective of the value of {{param|Status}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.ProcessStatus.Process." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="VendorLogList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the vendor log files that have come into existence because of this {{object}}.
          When the {{object|#.DeploymentUnit}} (that caused this {{object}} to come into existence) is uninstalled the vendor log files referenced here SHOULD be removed from the device.
          Not all {{object}} instances will actually have a corresponding vendor log file, in which case the value of this parameter will be {{empty}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.VendorLogFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="VendorConfigList" access="readOnly" dmr:version="2.12">
        <description>
          Represents the vendor config files that have come into existence because of this {{object}}.
          When the {{object|#.DeploymentUnit}} (that caused this {{object}} to come into existence) is uninstalled the vendor config files referenced here SHOULD be removed from the device.
          Not all {{object}} instances will actually have a corresponding vendor config file, in which case the value of this parameter will be {{empty}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetParent=".DeviceInfo.VendorConfigFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <parameter name="ExecutionEnvRef" access="readOnly" dmr:version="2.12">
        <description>
          Represents the {{object|#.ExecEnv}} that this {{object}} is associated with.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.ExecEnv." targetType="row"/>
          </string>
        </syntax>
      </parameter>
      <command name="SetRequestedState()" dmr:version="2.12">
        <description>
          Set the state transition that the Controller is requesting for this instance of the {{object}} object.  {{enum}}
          If this instance of the {{object}} object is associated with an Execution Environment that is disabled and an attempt is made to alter this value, then a error message MUST be generated.
        </description>
        <input>
          <parameter name="RequestedState" dmr:version="2.12">
            <description>
              Indicates the requested state to transition this instance of the {{object|##.}} object.  {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Idle" dmr:version="2.12">
                  <description>
                    If this {{object|##.}} is currently in {{enum|Starting|###.ExecutionUnit.{i}.Status}} or {{enum|Active|###.ExecutionUnit.{i}.Status}} the device will attempt to Stop the Execution Unit; otherwise this requested state is ignored.
                  </description>
                </enumeration>
                <enumeration value="Active" dmr:version="2.12">
                  <description>
                    If this {{object|##.}} is currently in {{enum|Idle|###.ExecutionUnit.{i}.Status}} the device will attempt to Start the Execution Unit.
                    If this {{object|##.}} is in {{enum|Stopping|###.ExecutionUnit.{i}.Status}} the request is rejected and a fault raised.  Otherwise this requested state is ignored.
                  </description>
                </enumeration>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
    </object>
    <object name="Device.SoftwareModules.ExecutionUnit.{i}.Extensions." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.12">
      <description>
        This object proposes a general location for vendor extensions specific to this Execution Unit, which allows multiple Execution Units to expose parameters without the concern of conflicting parameter names.  These vendor extensions are related to displaying status and maintaining configuration for this Execution Unit.
        It is also possible for the Execution Unit to expose status and configuration parameters within Service objects or as embedded objects and parameters directly within the root data model, in which case the combination of {{param|#.References}} and use of GetSupportDM and GetInstances USP messages will be used to determine their locations.
      </description>
    </object>
    <object name="Device.ProxiedDevice.{i}." access="readOnly" minEntries="0" maxEntries="unbounded"
        mountType="mountPoint" numEntriesParameter="ProxiedDeviceNumberOfEntries" dmr:version="2.12">
      <description>Each entry in the table is a ProxiedDevice object that is a mount point. Each ProxiedDevice represents distinct hardware Devices. ProxiedDevice objects are virtual and abstracted representation of functionality, that exists on hardware other than that which the Agent is running.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <parameter name="Alias" access="readWrite" dmr:version="2.12">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>
    </object>
    <object base="Device.BulkData.Profile.{i}." access="readWrite" numEntriesParameter="ProfileNumberOfEntries" enableParameter="Enable" minEntries="0" maxEntries="unbounded">
      <parameter name="Controller" access="readOnly" dmr:previousParameter="Name">
        <description>
          {{reference|the {{object|Device.LocalAgent.Controller.}} instance that created or last updated this {{object}}}}
          The value of this parameter is automatically populated by the USP Agent upon {{object}} creation using the reference to the USP Controller that created the instance.
          The value of this parameter is automatically updated by the USP Agent upon {{object}} alteration using the reference to the USP Controller that changed the instance.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="Device.LocalAgent.Controller." targetType="row"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <!-- General Commands from common model -->
    <object base="Device.DeviceInfo.FirmwareImage.{i}." access="readOnly"  minEntries="0" maxEntries="unbounded">
      <command name="Download()" async="true" dmr:version="2.12">
        <description>
          This command is issued to download a firmware into this Firmware Image instance.
          All results of the actual download will be contained within the {{event|Device.LocalAgent.TransferComplete!}} event.
        </description>
        <input>
          <parameter name="URL" mandatory="true" dmr:version="2.12">
            <description>
              URL, as defined in {{bibref|RFC3986}}, specifying the source file location. HTTP and HTTPS transports MUST be supported.
              If the Agent receives multiple download requests with the same source URL, the Agent MUST perform each download as requested, and MUST NOT assume that the content of the file to be downloaded is the same each time.
              This URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="AutoActivate" mandatory="true" dmr:version="2.12">
            <description>
              If {{true}} the Agent MUST automatically activate the firmware once it is successfully downloaded.
              If {{false}} the Agent MUST NOT activate the firmware until explicitly instructed to do so by either invoking {{command|#.Activate()}} or setting {{param|##.BootFirmwareImage}} and rebooting the Agent.
            </description>
            <syntax>
              <boolean/>
            </syntax>
          </parameter>
          <parameter name="Username" dmr:version="2.12">
            <description>
              Username to be used by the Agent to authenticate with the file server. This argument is omitted if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Password" dmr:version="2.12">
            <description>
              Password to be used by the Agent to authenticate with the file server. This argument is omitted if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="FileSize" dmr:version="2.12">
            <description>
              The size of the file to be downloaded in bytes.
              The FileSize argument is intended as a hint to the Agent, which the Agent MAY use to determine if it has sufficient space for the file to be downloaded, or to prepare space to accept the file.
              The Controller MAY set this value to zero. The Agent MUST interpret a zero value to mean that that the Controller has provided no information about the file size. In this case, the Agent MUST attempt to proceed with the download under the presumption that sufficient space is available, though during the course of download, the Agent might determine otherwise.
              The Controller SHOULD set the value of this Parameter to the exact size of the file to be downloaded. If the value is non-zero, the Agent MAY reject the ScheduleDownload request on the basis of insufficient space.
              If the Agent attempts to proceed with the download based on the value of this argument, but the actual file size differs from the value of this argument, this could result in a failure of the download. However, the Agent MUST NOT cause the download to fail solely because it determines that the value of this argument is inaccurate.
            </description>
            <syntax>
              <unsignedInt/>
            </syntax>
          </parameter>
          <parameter name="CheckSumAlgorithm" dmr:version="2.12">
            <description>
              The hash algorithm to use when performing a checksum validation of the downloaded file.
              If the {{param|CheckSum}} input argument is specified, the Agent MUST validate the integrity of the downloaded file by comparing the value contained in the {{param|CheckSum}} input argument against a hash of the downloaded file.
            </description>
            <syntax>
              <string>
                <enumeration value="SHA-1">
                  <description>
                    As specified in {{bibref|RFC3174}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-224">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-256">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-384">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-512">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
              </string>
            </syntax>
          </parameter>
          <parameter name="CheckSum" dmr:version="2.12">
            <description>
              The hash value of the downloaded file used to validate the integrity of the downloaded file.
              If this argument is specified, the Agent MUST validate the integrity of the downloaded file by comparing the provided value against a hash of the downloaded file using the hashing algorithm specified in the {{param|CheckSumAlgorithm}} input argument.
              If this argument is {{empty}}, the Agent MUST NOT perform a checksum validation of the downloaded file.
            </description>
            <syntax>
              <hexBinary/>
            </syntax>
          </parameter>
        </input>
      </command>
      <command name="Activate()" async="true" dmr:version="2.12">
        <description>
          This command is issued to activate this {{object}} instance.
          A {{object}} instance can also be activated by setting the {{param|Device.DeviceInfo.BootFirmwareImage}} parameter and causing the Agent to reboot.
          A successful activation will result in a reboot of the device with this {{object}} as the currently running firmware image. Furthermore, this {{object}} will be referenced by the {{param|Device.DeviceInfo.ActiveFirmwareImage}} parameter.
          A failed activation will result in this {{object}} instance's {{param|BootFailureLog}} being updated.
        </description>
        <input>
          <object name="TimeWindow.{i}." minEntries="1" maxEntries="5" dmr:version="2.12">
            <description>
              The time window(s) that dictate when the Agent activates the firmware image.
              An Agent MUST be able to accept a request with either one or two {{object}} instances.
              The time windows MUST NOT overlap, i.e. if there are two time windows, the second window’s Start value has to be greater than or equal to the first window’s End value.
            </description>
            <parameter name="Start" mandatory="true" dmr:version="2.12">
              <description>
                Start of this time window as an offset in {{units}} after invoking the command. An offset is used in order to avoid a dependence on absolute time.
              </description>
              <syntax>
                <unsignedInt>
                  <units value="seconds"/>
                </unsignedInt>
              </syntax>
            </parameter>
            <parameter name="End" mandatory="true" dmr:version="2.12">
              <description>
                End of this time window as an offset in {{units}} after invoking the command. An offset is used in order to avoid a dependence on absolute time.
              </description>
              <syntax>
                <unsignedInt>
                  <units value="seconds"/>
                </unsignedInt>
              </syntax>
            </parameter>
            <parameter name="Mode" mandatory="true" dmr:version="2.12">
              <description>
                Specifies when within this time window the Agent is permitted to activate the specified firmware image.
              </description>
              <syntax>
                <string>
                  <enumeration value="AnyTime">
                    <description>
                      The Agent MAY activate the firmware image at any time during the time window even if this results in interruption of service for the subscriber.
                    </description>
                  </enumeration>
                  <enumeration value="Immediately">
                    <description>
                      The Agent MUST activate the firmware image immediately at the start of the time window even if this results in interruption of service for the subscriber.
                    </description>
                  </enumeration>
                  <enumeration value="WhenIdle">
                    <description>
                      The Agent MUST NOT cause an interruption of service from the subscriber's standpoint while activating the firmware image during the time window.
                      How the Agent determines this is outside the scope of this specification.
                    </description>
                  </enumeration>
                  <enumeration value="ConfirmationNeeded">
                    <description>
                      The Agent MUST ask for and receive confirmation before activating the firmware image.
                      It is outside the scope of this specification how the Agent asks for and receives this confirmation.
                      If confirmation is not received, this time window MUST NOT be used.
                    </description>
                  </enumeration>
                </string>
              </syntax>
            </parameter>
            <parameter name="UserMessage" dmr:version="2.12">
              <description>
                A message that informs the user of a request to activate a new firmware image.
                The Agent MAY use this message when seeking confirmation from the user, e.g. when {{param|Mode}} is {{enum|ConfirmationNeeded|Mode}}.
                When there is no need for such a message, it SHOULD be {{empty}} and MUST be ignored.
              </description>
              <syntax>
                <string/>
              </syntax>
            </parameter>
            <parameter name="MaxRetries" dmr:version="2.12">
              <description>
                The maximum number of retries for activating the firmware image before regarding the transfer as having failed. Refers only to this time window (each time window can specify its own value).
                A value of 0 means “No retries are permitted”. A value of -1 means “the Agent determines the number of retries”, i.e. that the Agent can use its own retry policy, not that it has to retry forever.
                Only applicable when the {{param|Mode}} input argument is {{enum|ConfirmationNeeded|Mode}}, otherwise this input argument MUST be ignored.
              </description>
              <syntax>
                <int>
                  <range minInclusive="-1" maxInclusive="10"/>
                </int>
              </syntax>
            </parameter>
          </object>
        </input>
      </command>
    </object>
    <object base="Device.DeviceInfo.VendorLogFile.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      <command name="Upload()" async="true" dmr:version="2.12">
        <description>
          This command is issued to upload the log file specified by this Vendor Log File instance.
          All results of the actual upload will be contained within the {{event|Device.LocalAgent.TransferComplete!}} event.
        </description>
        <input>
          <parameter name="URL" mandatory="true" dmr:version="2.12">
            <description>
              URL, as defined in {{bibref|RFC3986}}, specifying the destination file location. HTTP and HTTPS transports MUST be supported.
              This argument specifies only the destination file location, and does not indicate in any way the name or location of the local file to be uploaded.
              If the Agent receives multiple upload requests with the same URL, the Agent MUST perform each upload as requested, and MUST NOT assume that the content of the file to be uploaded is the same each time.
              This URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Username" mandatory="true" dmr:version="2.12">
            <description>
              Username to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Password" mandatory="true" dmr:version="2.12">
            <description>
              Password to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
    </object>
    <object base="Device.DeviceInfo.VendorConfigFile.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      <command name="Backup()" async="true" dmr:version="2.12">
        <description>
          This command is issued to upload the configuration file specified by this {{object}} instance.
          All results of the actual upload will be contained within the {{event|Device.LocalAgent.TransferComplete!}} event.
        </description>
        <input>
          <parameter name="URL" mandatory="true" dmr:version="2.12">
            <description>
              URL, as defined in {{bibref|RFC3986}}, specifying the destination file location. HTTP and HTTPS transports MUST be supported.
              This argument specifies only the destination file location, and does not indicate in any way the name or location of the local file to be uploaded.
              If the Agent receives multiple upload requests with the same URL, the Agent MUST perform each upload as requested, and MUST NOT assume that the content of the file to be uploaded is the same each time.
              This URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Username" mandatory="true" dmr:version="2.12">
            <description>
              Username to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Password" mandatory="true" dmr:version="2.12">
            <description>
              Password to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
        </input>
      </command>
      <command name="Restore()" async="true" dmr:version="2.12">
        <description>
          This command is issued to download a configuration file into this {{object}} instance.
          All results of the actual download will be contained within the {{event|Device.LocalAgent.TransferComplete!}} event.
        </description>
        <input>
          <parameter name="URL" mandatory="true" dmr:version="2.12">
            <description>
              URL, as defined in {{bibref|RFC3986}}, specifying the source file location. HTTP and HTTPS transports MUST be supported.
              If the Agent receives multiple download requests with the same source URL, the Agent MUST perform each download as requested, and MUST NOT assume that the content of the file to be downloaded is the same each time.
              This URL MUST NOT include the "userinfo" component, as defined in {{bibref|RFC3986}}.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Username" mandatory="true" dmr:version="2.12">
            <description>
              Username to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="Password" mandatory="true" dmr:version="2.12">
            <description>
              Password to be used by the Agent to authenticate with the file server. This string is set to {{empty}} if no authentication is required.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="FileSize" dmr:version="2.12">
            <description>
              The size of the file to be downloaded in bytes.
              The FileSize argument is intended as a hint to the Agent, which the Agent MAY use to determine if it has sufficient space for the file to be downloaded, or to prepare space to accept the file.
              The Controller MAY set this value to zero. The Agent MUST interpret a zero value to mean that that the Controller has provided no information about the file size. In this case, the Agent MUST attempt to proceed with the download under the presumption that sufficient space is available, though during the course of download, the Agent might determine otherwise.
              The Controller SHOULD set the value of this Parameter to the exact size of the file to be downloaded. If the value is non-zero, the Agent MAY reject the ScheduleDownload request on the basis of insufficient space.
              If the Agent attempts to proceed with the download based on the value of this argument, but the actual file size differs from the value of this argument, this could result in a failure of the download. However, the Agent MUST NOT cause the download to fail solely because it determines that the value of this argument is inaccurate.
            </description>
            <syntax>
              <unsignedInt/>
            </syntax>
          </parameter>
          <parameter name="TargetFileName" dmr:version="2.12">
            <description>
              The name of the file to be used on the target file system. This argument MAY be {{empty}} if the target file name can be extracted from the downloaded file itself, or from the URL argument, or if no target file name is needed.
              If this argument is specified, but the target file name is also indicated by another source (for example, if it is extracted from the downloaded file itself), this argument MUST be ignored.
              If the target file name is used, the downloaded file would replace any existing file of the same name (whether or not the Agent archives the replaced file is a local matter).
              If present, this Parameter is treated as an opaque string with no specific requirements for its format. That is, the TargetFileName value is to be interpreted based on the Agent's vendor-specific file naming conventions.
              Note that this specification does not preclude the use of a file naming convention in which the file’s path can be specified as part of the file name.
            </description>
            <syntax>
              <string>
                <size maxLength="256"/>
              </string>
            </syntax>
          </parameter>
          <parameter name="CheckSumAlgorithm" dmr:version="2.12">
            <description>
              The hash algorithm to use when performing a checksum validation of the downloaded file.
              If the {{param|CheckSum}} input argument is specified, the Agent MUST validate the integrity of the downloaded file by comparing the value contained in the {{param|CheckSum}} input argument against a hash of the downloaded file.
            </description>
            <syntax>
              <string>
                <enumeration value="SHA-1">
                  <description>
                    As specified in {{bibref|RFC3174}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-224">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-256">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-384">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
                <enumeration value="SHA-512">
                  <description>
                    As specified in {{bibref|RFC6234}}.
                  </description>
                </enumeration>
              </string>
            </syntax>
          </parameter>
          <parameter name="CheckSum" dmr:version="2.12">
            <description>
              The hash value of the downloaded file used to validate the integrity of the downloaded file.
              If this argument is specified, the Agent MUST validate the integrity of the downloaded file by comparing the provided value against a hash of the downloaded file using the hashing algorithm specified in the {{param|CheckSumAlgorithm}} input argument.
              If this argument is {{empty}}, the Agent MUST NOT perform a checksum validation of the downloaded file.
            </description>
            <syntax>
              <hexBinary/>
            </syntax>
          </parameter>
        </input>
      </command>
    </object>

    <!-- Diagnostics Commands from common model -->
    <object base="Device.DSL.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <command name="ADSLLineTest()" async="true" dmr:version="2.12">
        <description>
          This command is to provide diagnostic information for a CPE with an ADSL2 or ADSL2+ modem WAN interface, but MAY also be used for ADSL.
        </description>
        <input>
          <component ref="ADSLLineDiagnosticsInput"/>
          <parameter base="Interface" mandatory="true"/>
        </input>
        <output>
          <component ref="ADSLLineDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.ATM." access="readOnly" minEntries="1" maxEntries="1">
      <description action="replace">
        Asynchronous Transfer Mode (ATM) object that contains the {{object|Link}} interface and {{object|Diagnostics.F5Loopback()}} diagnostics.
      </description>
    </object>
    <object base="Device.ATM.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <command name="F5Loopback()" async="true" dmr:version="2.12">
        <description>
          This command provides access to an ATM-layer F5 OAM loopback test.
        </description>
        <input>
          <component ref="ATMF5LoopbackDiagnosticsInput"/>
        </input>
        <output>
          <component ref="ATMF5LoopbackDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.HPNA.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <command name="PHYThroughput()" async="true" dmr:version="2.12">
        <description>
          HPNA PHY throughput diagnostics configuration and results.
          When diagnostics are requested, all HPNA nodes for which the {{param|#.Interface.{i}.AssociatedDevice.{i}.PHYDiagnosticsEnable}} parameter is set enter PHY diagnostics  mode.
        </description>
        <input>
          <component ref="HPNAPHYThroughputDiagnosticsInput"/>
        </input>
        <output>
          <component ref="HPNAPHYThroughputDiagnosticsOutput"/>
        </output>
      </command>
      <command name="PerformanceMonitoring()" async="true" dmr:version="2.12">
        <description>
          HPNA performance monitoring configuration and results.
          Performance monitoring results are sampled from all nodes in the HPNA network.  All packet related counters are sampled synchronized at all nodes in the HPNA network in order to derive packet loss calculations in the HPNA network.
        </description>
        <input>
          <component ref="HPNAPerformanceMonitoringDiagnosticsInput"/>
        </input>
        <output>
          <component ref="HPNAPerformanceMonitoringDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.Ghn.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <command name="PHYThroughput()" async="true" dmr:version="2.12">
        <description>
          G.hn PHY throughput diagnostics configuration and results.
          When diagnostics are requested, all G.hn nodes for which the {{param|#.Interface.{i}.PHYThroughputDiagnosticsEnable}} parameter is set enter PHY diagnostics mode.
        </description>
        <input>
          <component ref="GhnPHYThroughputDiagnosticsInput"/>
        </input>
        <output>
          <component ref="GhnPHYThroughputDiagnosticsOutput"/>
        </output>
      </command>
      <command name="PerformanceMonitoring()" async="true" dmr:version="2.12">
        <description>
          G.hn Performance Monitoring diagnostics configuration and results.
          When diagnostics are requested, all G.hn nodes for which the {{param|#.Interface.{i}.PerformanceMonitoringDiagnosticsEnable}} parameter is set enter PHY diagnostics mode.
        </description>
        <input>
          <component ref="GhnPerformanceMonitoringDiagnosticsInput"/>
        </input>
        <output>
          <component ref="GhnPerformanceMonitoringDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.UPA.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <command name="InterfaceMeasurement()" async="true" dmr:version="2.12">
        <description>
          This command provides access to either a Signal-to-Noise-Ratio (SNR) Port Measurement test or a Channel Frequency Response (CFR) Port Measurement test. The {{param|Type}} parameter is used to select which type of test to perform.
          CFR and SNR measurements are done between a two UPA devices (a local interface and a remote device belonging to the same network).
        </description>
        <input>
          <component ref="UPAInterfaceMeasurementDiagnosticsInput"/>
        </input>
        <output>
          <component ref="UPAInterfaceMeasurementDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.WiFi." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.7">
      <command name="NeighboringWiFiDiagnostic()" async="true" dmr:version="2.12">
        <description>
          This command defines access to other WiFi SSIDs that this device is able to receive.
        </description>
        <output>
          <component ref="WiFiNeighboringWiFiDiagnosticsOutput"/>
        </output>
      </command>
      <command name="Reset()" dmr:version="2.12">
        <description>
          This parameter represents a request to reset or reboot the WiFi sub-system without resetting or rebooting the device.
        </description>
      </command>
    </object>
    <object base="Device.IP.Diagnostics." access="readOnly" minEntries="1" maxEntries="1" dmr:version="2.0">
      <command name="IPPing()" async="true" dmr:version="2.12">
        <description>
          This command provides access to an IP-layer ping test.
        </description>
        <input>
          <component ref="IPPingDiagnosticsInput"/>
        </input>
        <output>
          <component ref="IPPingDiagnosticsOutput"/>
          <parameter base="IPAddressUsed">
            <description action="replace">
              Indicates which IP address was used to send the Ping request.
            </description>
          </parameter>
        </output>
      </command>
      <command name="TraceRoute()" async="true">
        <description>
          This command defines access to an IP-layer trace-route test for the specified IP interface.
        </description>
        <input>
          <component ref="IPTraceRouteDiagnosticsInput"/>
        </input>
        <output>
          <component ref="IPTraceRouteDiagnosticsOutput"/>
          <parameter base="IPAddressUsed">
            <description action="replace">
              Indicates which IP address was used for TraceRoute.
            </description>
          </parameter>
        </output>
      </command>
      <component ref="IPDownloadDiagnosticsCapabilities"/>
      <parameter base="DownloadDiagnosticsMaxIncrementalResult" access="readOnly">
        <description action="replace">
          The maximum number of rows in {{object|DownloadDiagnostics().IncrementalResult}} that the CPE will store.
        </description>
      </parameter>
      <command name="DownloadDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This command defines the diagnostics configuration for a HTTP and FTP DownloadDiagnostics Test.
          Files received in the DownloadDiagnostics do not require file storage on the CPE device.
        </description>
        <input>
          <component ref="IPDownloadDiagnosticsInput"/>
          <component ref="IPDownloadDiagnosticsInput2"/>
          <parameter base="NumberOfConnections">
            <description action="replace">
              The number of connections to be used in the test.  The default value SHOULD be 1.  {{param}} MUST NOT be set to a value greater than {{param|#.DownloadDiagnosticMaxConnections}}.
            </description>
            <syntax>
              <unsignedInt>
                <range minInclusive="1"/>
              </unsignedInt>
            </syntax>
          </parameter>
        </input>
        <output>
          <component ref="IPDownloadDiagnosticsOutput"/>
          <object base="PerConnectionResult.{i}." minEntries="0" maxEntries="unbounded">
            <description action="replace">
              Results for individual connections.  This table is only populated when {{param|#.EnablePerConnectionResults}} is {{true}}.  A new object is created for each connection specified in {{param|#.NumberOfConnections}}.  Instance numbers MUST start at 1 and sequentially increment as new instances are created.
            </description>
          </object>
          <object base="IncrementalResult.{i}." minEntries="0" maxEntries="unbounded">
            <description action="replace">
              Results for time segmented tests (tests where {{param|#.TimeBasedTestDuration}} &gt; 0 and {{param|#.TimeBasedTestMeasurementInterval}} &gt; 0).  This data is totaled across all connections in the test.  A new object is created every {{param|#.TimeBasedTestMeasurementInterval}} after that interval has completed.  Instance numbers MUST start at 1 and sequentially increment as new instances are created.
            </description>
          </object>
        </output>
      </command>
      <component ref="IPUploadDiagnosticsCapabilities"/>
      <parameter base="UploadDiagnosticsMaxIncrementalResult" access="readOnly">
        <description action="replace">
          The maximum number of rows in {{object|UploadDiagnostics().IncrementalResult}} that the CPE will store.
        </description>
      </parameter>
      <command name="UploadDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This command defines the diagnostics configuration for a HTTP or FTP UploadDiagnostics test.
          Files sent by the UploadDiagnostics do not require file storage on the CPE device, and MAY be an arbitrary stream of bytes.
        </description>
        <input>
          <component ref="IPUploadDiagnosticsInput"/>
          <component ref="IPUploadDiagnosticsInput2"/>
          <parameter base="NumberOfConnections">
            <description action="replace">
              The number of connections to be used in the test.  The default value SHOULD be 1.  {{param}} MUST NOT be set to a value greater than {{param|#.UploadDiagnosticsMaxConnections}}.
            </description>
          </parameter>
        </input>
        <output>
          <component ref="IPUploadDiagnosticsOutput"/>
          <object base="PerConnectionResult.{i}." minEntries="0" maxEntries="unbounded">
            <description action="replace">
              Results for individual connections.  This table is only populated when {{param|#.EnablePerConnectionResults}} is {{true}}.  A new object is created for each connection specified in {{param|#.NumberOfConnections}}.  Instance numbers MUST start at 1 and sequentially increment as new instances are created.
            </description>
          </object>
          <object base="IncrementalResult.{i}." minEntries="0" maxEntries="unbounded">
            <description action="replace">
              Results for time segmented tests (tests where {{param|#.TimeBasedTestDuration}} &gt; 0 and {{param|#.TimeBasedTestMeasurementInterval}} &gt; 0).  This data is totaled across all connections in the test.  A new object is created every {{param|#.TimeBasedTestMeasurementInterval}} after that interval has completed.  Instance numbers MUST start at 1 and sequentially increment as new instances are created.
            </description>
          </object>
        </output>
      </command>
      <component ref="IPUDPEchoDiagnosticsCapabilities"/>
      <parameter base="UDPEchoDiagnosticsMaxResults" access="readOnly">
        <description action="replace">
          The maximum number of rows in {{object|UDPEchoDiagnostics().IndividualPacketResult}} that the CPE will store.  If a test would create more rows than {{param}} only the first {{param}} rows are present in {{object|UDPEchoDiagnostics().IndividualPacketResult}}.
        </description>
      </parameter>
      <command name="UDPEchoDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This command defines the diagnostics configuration for a UDP Echo test {{bibref|TR-143a1|Appendix A.1}} defined in {{bibref|RFC862}} or a UDP Echo Plus test defined in {{bibref|TR-143a1|Appendix A.1}}.
        </description>
        <input>
          <component ref="IPUDPEchoDiagnosticsInput"/>
          <component ref="IPUDPEchoDiagnosticsInput2"/>
        </input>
        <output>
          <component ref="IPUDPEchoDiagnosticsOutput"/>
          <object base="IndividualPacketResult.{i}." minEntries="0" maxEntries="unbounded">
            <description action="replace">
              This object provides the results from individual UDPEchoPlus test packets collected during a test if {{param|#.EnableIndividualPacketResults}} is set to true.  It should contain {{param|#.NumberOfRepetitions}} objects.  Instance numbers MUST start at 1 and sequentially increment as new instances are created.  The instance number should match the TestIterationNumber field of the request and response packet.
            </description>
          </object>
        </output>
      </command>
      <command name="ServerSelectionDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This command provides access to a diagnostics test that performs either an ICMP Ping or UDP Echo ping against multiple hosts determining which one has the smallest average response time. There MUST be a ping response to the transmitted ping, or timeout, before the next ping is sent out.
        </description>
        <input>
          <component ref="IPServerSelectionDiagnosticsInput"/>
        </input>
        <output>
          <component ref="IPServerSelectionDiagnosticsOutput"/>
        </output>
      </command>
    </object>
    <object base="Device.DNS.Diagnostics." access="readOnly" minEntries="1" maxEntries="1">
      <description action="replace">
        The DNS Diagnostics object containing the {{object|NSLookupDiagnostics()}} test.
      </description>
      <command name="NSLookupDiagnostics()" async="true" dmr:version="2.12">
        <description>
          This command defines access to an IP-layer NS Lookup test for the specified IP interface.
          When initiated, the NS Lookup test will contact {{param|DNSServer}} and look up {{param|HostName}} {{param|NumberOfRepetitions}} times.
          There will be a {{object|Result}} instance for each time the device performs a DNS lookup, which is determined by the value of {{param|NumberOfRepetitions}}.
          Any previous {{object|Result}} instances are removed when a new test is initiated.
        </description>
        <input>
          <component ref="DNSLookupDiagnosticsInput"/>
        </input>
        <output>
          <component ref="DNSLookupDiagnosticsOutput"/>
          <object base="Result.{i}." minEntries="0" maxEntries="unbounded">
            <parameter base="Status">
              <description action="replace">
                Result Parameter to represent whether the NS Lookup was successful or not.
              </description>
            </parameter>
          </object>
        </output>
      </command>
    </object>

    <!-- Commands from common model (converted true parameters) -->
    <object base="Device.WiFi.AccessPoint.{i}.Security." access="readOnly" minEntries="1" maxEntries="1">
      <command name="Reset()" dmr:version="2.12">
        <description>
          Reset this {{object|#}} instance's WiFi security settings to their factory default values. The affected settings include {{param|ModeEnabled}}, {{param|WEPKey}}, {{param|PreSharedKey}} , {{param|KeyPassphrase}} and {{param|#.WPS.PIN}} (if applicable).
          If the command cannot be executed, the agent MUST reject the command. Possible failure reasons include a lack of default values or if {{param|ModeEnabled}} is an Enterprise type, i.e. {{enum|WPA-Enterprise|ModesSupported}}, {{enum|WPA2-Enterprise|ModesSupported}} or {{enum|WPA-WPA2-Enterprise|ModesSupported}}.
        </description>
      </command>
    </object>
    <object base="Device.DHCPv6.Client.{i}." access="readWrite" minEntries="1" maxEntries="unbounded">
      <command name="Renew()" dmr:previousParameter="RapidCommit" dmr:version="2.12">
        <description>
          The {{object}} will renew its DHCPv6-supplied information (i.e. the Agent will do a renew or information request as needed, updating both stateful and stateless parameter values discovered by this Client instance).
        </description>
      </command>
    </object>
    <object base="Device.FAP.GPS." access="readOnly" minEntries="1" maxEntries="1">
      <command name="GPSReset()" dmr:previousParameter="NumberOfSatellites" dmr:version="2.12">
        <description>
          Reset the GPS Hardware.
        </description>
      </command>
    </object>
    <object base="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}." access="readOnly"  minEntries="0" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="Status" dmr:version="2.12">
        <description>
          Resets the temperature sensor.
        </description>
      </command>
    </object>
    <object base="Device.UserInterface." access="readOnly" minEntries="1" maxEntries="1">
      <command name="PasswordReset()" dmr:previousParameter="PasswordUserSelectable" dmr:version="2.12">
        <description>
          Present only if the Agent provides a password-protected LAN-side user interface and supports LAN-side Auto-Configuration.
          Reset {{param|.LANConfigSecurity.ConfigPassword}} to its factory value.
        </description>
      </command>
    </object>
    <object base="Device.USB.USBHosts.Host.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="Type" dmr:version="2.12">
        <description>
          Reset the Host Controller and apply the reset signaling (see {{bibref|USB2.0|Chapter 7.1.7.5}}) to all of the Host Controller Hub downstream ports.
        </description>
      </command>
    </object>
    <object base="Device.PPP.Interface.{i}." access="readWrite" minEntries="0" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="LowerLayers" dmr:version="2.12">
        <description>
          On a reset the device MUST tear down the existing PPP connection represented by this object and establish a new one.
          The device MAY delay resetting the connection in order to avoid interruption of a user service such as an ongoing voice call.
          Reset on a disabled interface is a no-op (not an error).
        </description>
      </command>
    </object>
    <object base="Device.IP.Interface.{i}." access="readWrite" minEntries="0" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="Router" dmr:version="2.12">
        <description>
          On a reset device MUST tear down the existing IP connection represented by this object and establish a new one.
          The device MAY delay resetting the connection in order to avoid interruption of a user service such as an ongoing voice call.
          Reset on a disabled interface is a no-op (not an error).
        </description>
      </command>
    </object>
    <object base="Device.DHCPv4.Client.{i}." access="readWrite" minEntries="1" maxEntries="unbounded">
      <command name="Renew()" dmr:previousParameter="DHCPStatus" dmr:version="2.12">
        <description>
          The DHCP client will renew its DHCP lease.
        </description>
      </command>
    </object>
    <object base="Device.IEEE8021x.Supplicant.{i}." access="readWrite" minEntries="1" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="AuthenticationSuccessPolicy" dmr:version="2.12">
        <description>
          On a reset the device MUST reset the session by performing an initial authentication attempt as defined in {{bibref|802.1x-2004|9.6.1.3}}, Initialize Port by sending out the EAP start message.
          The device MAY delay resetting the resource in  order to avoid interruption of a user service such as an ongoing voice call.
        </description>
      </command>
      <command name="Disconnect()" dmr:version="2.12">
        <description>
          On a reset the device MUST disconnect (forced unauthentication) the resource.
          The device MAY delay re-authentication of the  resource in order to avoid interruption of a user service such as an ongoing voice call.
        </description>
      </command>
    </object>
    <object base="Device.SmartCardReaders.SmartCardReader.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      <command name="Reset()" dmr:previousParameter="Name" dmr:version="2.12">
        <description>
          Reset the SmartCard Reader and the associated SmartCard.
        </description>
      </command>
    </object>
    <object base="Device.PeriodicStatistics.SampleSet.{i}." access="readWrite" minEntries="0" maxEntries="unbounded">
      <command name="ForceSample()" dmr:previousParameter="FetchSamples" dmr:version="2.12">
        <description>
          Force statistics for the current sample to be calculated and updated in the data model.
          If this is the first time that this command is called during the current sample interval, this MUST cause a new value to be added to each of the periodic statistics comma-separated list parameters, and the {{param|ReportEndTime}} and all {{param|SampleSeconds}} parameters MUST be updated accordingly.
          If this is not the first time that this command is during the current sample interval, then the new values that were added as described in the previous paragraph, and the {{param|ReportEndTime}} and all {{param|SampleSeconds}} parameters, MUST be updated accordingly.
          Note that {{param}} just provides a "sneak preview" of the current sample.  It does not create a new sample and it does not interfere with the sample interval schedule.
          At the end of each sample interval, if this command was executed during the sample interval then the new values that were added as described above, and the {{param|ReportEndTime}} and all {{param|SampleSeconds}} parameters, will be updated accordingly.  In other words, the partial sample data that was created when the command was executed will be updated one last time at the end of the sample interval.
        </description>
      </command>
    </object>
    <object base="Device.MQTT.Client.{i}." access="readWrite"  minEntries="0" maxEntries="unbounded">
      <command name="ForceReconnect()" dmr:previousParameter="KeepAliveTime" dmr:version="2.12">
        <description>
          Disconnects the MQTT client from the MQTT broker and reconnects it again (toggle connection). It is only effective if the MQTT client is currently connected to the MQTT broker (Parameter {{param|Status|}} is {{enum|Connected|Status}}).
          If the MQTT client is in a different state, the command has no effect.
          This command may be used to immediately apply changes in the MQTT connection settings.
        </description>
      </command>
    </object>
    <object base="Device.MQTT.Broker.{i}.Bridge.{i}." access="readWrite" minEntries="0" maxEntries="unbounded">
      <command name="ForceReconnect()" dmr:previousParameter="KeepAliveTime" dmr:version="2.12">
        <description>
          Disconnects the MQTT bridge to the remote MQTT broker and reconnects it again (toggle connection). It is only effective if the MQTT bridge is currently connected to the remote MQTT broker (Parameter {{param|Status|}} is {{enum|Connected|Status}}).
          If the MQTT bridge is in a different state, the command has no effect.
          This command may be used to immediately apply changes in the MQTT connection settings.
        </description>
      </command>
    </object>

    <!-- Profiles -->
    <profile name="Download:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <parameter ref="IPv4DownloadDiagnosticsSupported" requirement="readOnly"/>
        <parameter ref="IPv6DownloadDiagnosticsSupported" requirement="readOnly"/>
        <parameter ref="DownloadTransports" requirement="readOnly"/>
        <command ref="DownloadDiagnostics()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="DownloadURL"/>
            <parameter ref="DSCP"/>
            <parameter ref="EthernetPriority"/>
          </input>
          <output>
            <parameter ref="ROMTime"/>
            <parameter ref="BOMTime"/>
            <parameter ref="EOMTime"/>
            <parameter ref="TestBytesReceived"/>
            <parameter ref="TotalBytesReceived"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="DownloadTCP:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="DownloadDiagnostics()">
          <output>
            <parameter ref="TCPOpenRequestTime"/>
            <parameter ref="TCPOpenResponseTime"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="Upload:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <parameter ref="IPv4UploadDiagnosticsSupported" requirement="readOnly"/>
        <parameter ref="IPv6UploadDiagnosticsSupported" requirement="readOnly"/>
        <parameter ref="UploadTransports" requirement="readOnly"/>
        <command ref="UploadDiagnostics()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="UploadURL"/>
            <parameter ref="DSCP"/>
            <parameter ref="EthernetPriority"/>
          </input>
          <output>
            <parameter ref="ROMTime"/>
            <parameter ref="BOMTime"/>
            <parameter ref="EOMTime"/>
            <parameter ref="TestFileLength"/>
            <parameter ref="TotalBytesSent"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="UploadTCP:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="UploadDiagnostics()">
          <output>
            <parameter ref="TCPOpenRequestTime"/>
            <parameter ref="TCPOpenResponseTime"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="SelfTestDiag:1" dmr:version="2.0">
      <object ref="Device." requirement="present">
        <command ref="SelfTestDiagnostics()">
          <output>
            <parameter ref="Results"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="NSLookupDiag:1" dmr:version="2.0">
      <object ref="Device.DNS.Diagnostics." requirement="present">
        <command ref="NSLookupDiagnostics()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="HostName"/>
            <parameter ref="DNSServer"/>
            <parameter ref="Timeout"/>
            <parameter ref="NumberOfRepetitions"/>
          </input>
          <output>
            <parameter ref="SuccessCount"/>
            <object ref="Result.{i}.">
              <parameter ref="Status"/>
              <parameter ref="AnswerType"/>
              <parameter ref="HostNameReturned"/>
              <parameter ref="IPAddresses"/>
              <parameter ref="DNSServerIP"/>
              <parameter ref="ResponseTime"/>
            </object>
          </output>
        </command>
      </object>
    </profile>
    <profile name="Baseline:1" extends="_Baseline:1" dmr:version="2.0"/>
    <profile name="Baseline:2" base="Baseline:1" extends="_Baseline:2" dmr:version="2.2"/>
    <profile name="Baseline:3" base="Baseline:2" extends="_Baseline:3" dmr:version="2.4"/>
    <profile name="IPPingDetailed:1" dmr:version="2.7">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="IPPing()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="Host"/>
            <parameter ref="NumberOfRepetitions"/>
            <parameter ref="Timeout"/>
            <parameter ref="DataBlockSize"/>
            <parameter ref="DSCP"/>
          </input>
          <output>
            <parameter ref="SuccessCount"/>
            <parameter ref="FailureCount"/>
            <parameter ref="AverageResponseTimeDetailed"/>
            <parameter ref="MinimumResponseTimeDetailed"/>
            <parameter ref="MaximumResponseTimeDetailed"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="IPPing:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="IPPing()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="Host"/>
            <parameter ref="NumberOfRepetitions"/>
            <parameter ref="Timeout"/>
            <parameter ref="DataBlockSize"/>
            <parameter ref="DSCP"/>
          </input>
          <output>
            <parameter ref="SuccessCount"/>
            <parameter ref="FailureCount"/>
            <parameter ref="AverageResponseTime"/>
            <parameter ref="MinimumResponseTime"/>
            <parameter ref="MaximumResponseTime"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="TraceRoute:1" dmr:version="2.0">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="TraceRoute()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="Host"/>
            <parameter ref="NumberOfTries"/>
            <parameter ref="Timeout"/>
            <parameter ref="DataBlockSize"/>
            <parameter ref="DSCP"/>
            <parameter ref="MaxHopCount"/>
          </input>
          <output>
            <parameter ref="ResponseTime"/>
            <object ref="RouteHops.{i}.">
              <parameter ref="Host"/>
              <parameter ref="HostAddress"/>
              <parameter ref="ErrorCode"/>
              <parameter ref="RTTimes"/>
            </object>
          </output>
        </command>
      </object>
    </profile>
    <profile name="ATMLoopback:1" dmr:version="2.0">
      <object ref="Device.ATM.Diagnostics." requirement="present">
        <command ref="F5Loopback()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="NumberOfRepetitions"/>
            <parameter ref="Timeout"/>
          </input>
          <output>
            <parameter ref="SuccessCount"/>
            <parameter ref="FailureCount"/>
            <parameter ref="AverageResponseTime"/>
            <parameter ref="MinimumResponseTime"/>
            <parameter ref="MaximumResponseTime"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="DSLDiagnostics:1" dmr:version="2.0">
      <description>
        Note: This profile is valid for G.992.1 modems.
      </description>
      <object ref="Device.DSL.Diagnostics." requirement="present">
        <command ref="ADSLLineTest()">
          <input>
            <parameter ref="Interface"/>
          </input>
          <output>
            <parameter ref="ACTPSDds"/>
            <parameter ref="ACTPSDus"/>
            <parameter ref="ACTATPds"/>
            <parameter ref="ACTATPus"/>
            <parameter ref="HLINSCds"/>
            <parameter ref="HLINpsds"/>
            <parameter ref="QLNpsds"/>
            <parameter ref="SNRpsds"/>
            <parameter ref="BITSpsds"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="ADSL2Diagnostics:1" dmr:version="2.0">
      <description>
        Note: This profile is valid for G.992.3 and G.992.5 modems.
      </description>
      <object ref="Device.DSL.Diagnostics." requirement="present">
        <command ref="ADSLLineTest()">
          <input>
            <parameter ref="Interface"/>
          </input>
          <output>
            <parameter ref="ACTPSDds"/>
            <parameter ref="ACTPSDus"/>
            <parameter ref="ACTATPds"/>
            <parameter ref="ACTATPus"/>
            <parameter ref="HLINSCds"/>
            <parameter ref="HLINSCus"/>
            <parameter ref="HLINpsds"/>
            <parameter ref="HLINpsus"/>
            <parameter ref="HLOGpsds"/>
            <parameter ref="HLOGpsus"/>
            <parameter ref="HLOGMTds"/>
            <parameter ref="HLOGMTus"/>
            <parameter ref="QLNpsds"/>
            <parameter ref="QLNpsus"/>
            <parameter ref="QLNMTds"/>
            <parameter ref="QLNMTus"/>
            <parameter ref="SNRpsds"/>
            <parameter ref="SNRpsus"/>
            <parameter ref="SNRMTds"/>
            <parameter ref="SNRMTus"/>
            <parameter ref="LATNpbds"/>
            <parameter ref="LATNpbus"/>
            <parameter ref="SATNds"/>
            <parameter ref="SATNus"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="VDSL2Diagnostics:1" dmr:version="2.0">
      <description>
        Note: This profile is valid for G.993.2 modems.
      </description>
      <object ref="Device.DSL.Diagnostics." requirement="present">
        <command ref="ADSLLineTest()">
          <input>
            <parameter ref="Interface"/>
          </input>
          <output>
            <parameter ref="ACTPSDds"/>
            <parameter ref="ACTPSDus"/>
            <parameter ref="ACTATPds"/>
            <parameter ref="ACTATPus"/>
            <parameter ref="HLINSCds"/>
            <parameter ref="HLINSCus"/>
            <parameter ref="HLINGds"/>
            <parameter ref="HLINGus"/>
            <parameter ref="HLINpsds"/>
            <parameter ref="HLINpsus"/>
            <parameter ref="HLOGGds"/>
            <parameter ref="HLOGGus"/>
            <parameter ref="HLOGpsds"/>
            <parameter ref="HLOGpsus"/>
            <parameter ref="HLOGMTds"/>
            <parameter ref="HLOGMTus"/>
            <parameter ref="QLNGds"/>
            <parameter ref="QLNGus"/>
            <parameter ref="QLNpsds"/>
            <parameter ref="QLNpsus"/>
            <parameter ref="QLNMTds"/>
            <parameter ref="QLNMTus"/>
            <parameter ref="SNRGds"/>
            <parameter ref="SNRGus"/>
            <parameter ref="SNRpsds"/>
            <parameter ref="SNRpsus"/>
            <parameter ref="SNRMTds"/>
            <parameter ref="SNRMTus"/>
            <parameter ref="LATNpbds"/>
            <parameter ref="LATNpbus"/>
            <parameter ref="SATNds"/>
            <parameter ref="SATNus"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="HPNADiagnostics:1" dmr:version="2.0">
      <object ref="Device.HPNA.Diagnostics." requirement="present">
        <command ref="PHYThroughput()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="NumPacketsInBurst"/>
            <parameter ref="BurstInterval"/>
            <parameter ref="TestPacketPayloadLength"/>
            <parameter ref="PayloadEncoding"/>
            <parameter ref="PayloadDataGen"/>
            <parameter ref="PayloadType"/>
            <parameter ref="PriorityLevel"/>
          </input>
          <output>
            <object ref="Result.{i}.">
              <parameter ref="SrcMACAddress"/>
              <parameter ref="DestMACAddress"/>
              <parameter ref="PHYRate"/>
              <parameter ref="BaudRate"/>
              <parameter ref="SNR"/>
              <parameter ref="PacketsReceived"/>
            </object>
          </output>
        </command>
      </object>
    </profile>
    <profile name="UPADiagnostics:1" dmr:version="2.0">
      <object ref="Device.UPA.Diagnostics." requirement="present">
        <command ref="InterfaceMeasurement()">
          <input>
            <parameter ref="Type"/>
            <parameter ref="Interface"/>
            <parameter ref="Port"/>
          </input>
          <output>
            <parameter ref="Measurements"/>
            <parameter ref="RxGain"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="UDPEchoDiag:1" dmr:version="2.9">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="UDPEchoDiagnostics()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="Host"/>
            <parameter ref="NumberOfRepetitions"/>
            <parameter ref="EnableIndividualPacketResults"/>
            <parameter ref="Timeout"/>
            <parameter ref="DataBlockSize"/>
            <parameter ref="DSCP"/>
            <parameter ref="InterTransmissionTime"/>
          </input>
          <output>
            <parameter ref="SuccessCount"/>
            <parameter ref="FailureCount"/>
            <parameter ref="AverageResponseTime"/>
            <parameter ref="MinimumResponseTime"/>
            <parameter ref="MaximumResponseTime"/>
            <object ref="IndividualPacketResult.{i}.">
              <parameter ref="PacketSuccess"/>
              <parameter ref="PacketSendTime"/>
              <parameter ref="PacketReceiveTime"/>
              <parameter ref="TestGenSN"/>
              <parameter ref="TestRespSN"/>
              <parameter ref="TestRespRcvTimeStamp"/>
              <parameter ref="TestRespReplyTimeStamp"/>
              <parameter ref="TestRespReplyFailureCount"/>
            </object>
          </output>
        </command>
      </object>
    </profile>
    <profile name="ServerSelectionDiag:1" dmr:version="2.9">
      <object ref="Device.IP.Diagnostics." requirement="present">
        <command ref="ServerSelectionDiagnostics()">
          <input>
            <parameter ref="Interface"/>
            <parameter ref="HostList"/>
            <parameter ref="NumberOfRepetitions"/>
            <parameter ref="Timeout"/>
          </input>
          <output>
            <parameter ref="FastestHost"/>
            <parameter ref="AverageResponseTime"/>
          </output>
        </command>
      </object>
    </profile>
    <profile name="STOMPConn:1" dmr:version="2.12">
      <object ref="Device.STOMP." requirement="present">
        <parameter ref="ConnectionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.STOMP.Connection.{i}." requirement="createDelete">
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Host" requirement="readWrite"/>
        <parameter ref="Port" requirement="readWrite"/>
        <parameter ref="VirtualHost" requirement="readWrite"/>
        <parameter ref="ServerRetryInitialInterval" requirement="readWrite"/>
        <parameter ref="ServerRetryIntervalMultiplier" requirement="readWrite"/>
        <parameter ref="ServerRetryMaxInterval" requirement="readWrite"/>
      </object>
    </profile>
    <profile name="STOMPHeartbeat:1" extends="STOMPConn:1" dmr:version="2.12">
      <object ref="Device.STOMP.Connection.{i}." requirement="createDelete">
        <parameter ref="EnableHeartbeats" requirement="readWrite"/>
        <parameter ref="OutgoingHeartbeat" requirement="readWrite"/>
        <parameter ref="IncomingHeartbeat" requirement="readWrite"/>
      </object>
    </profile>
    <profile name="STOMPAgent:1" dmr:version="2.12">
      <object ref="Device.LocalAgent.MTP.{i}.STOMP." requirement="present">
        <parameter ref="Reference" requirement="readOnly"/>
        <parameter ref="Destination" requirement="readOnly"/>
        <parameter ref="DestinationFromServer" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="STOMPController:1" dmr:version="2.12">
      <object ref="Device.LocalAgent.Controller.{i}.MTP.{i}.STOMP." requirement="present">
        <parameter ref="Reference" requirement="readOnly"/>
        <parameter ref="Destination" requirement="readOnly"/>
      </object>
    </profile>

    <!-- Profiles with command parameter impacts -->
    <profile name="TempStatusAdv:1" extends="TempStatus:1" dmr:version="2.0" dmr:previousProfile="TempStatus:1">
      <object ref="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}." requirement="present">
        <command ref="Reset()"/>
        <parameter ref="LowAlarmValue" requirement="readWrite"/>
        <parameter ref="LowAlarmTime" requirement="readOnly"/>
        <parameter ref="HighAlarmValue" requirement="readWrite"/>
        <parameter ref="HighAlarmTime" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="TempStatusAdv:2" base="TempStatusAdv:1" dmr:version="2.1" dmr:previousProfile="TempStatusAdv:1">
      <object ref="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}." requirement="present">
        <parameter ref="PollingInterval" requirement="readWrite"/>
      </object>
    </profile>
    <profile name="USBHostsAdv:1" extends="USBHostsBasic:1" dmr:version="2.0" dmr:previousProfile="USBHostsBasic:1">
      <object ref="Device.USB.USBHosts.Host.{i}." requirement="present">
        <command ref="Reset()"/>
        <parameter ref="PowerManagementEnable" requirement="readWrite"/>
      </object>
      <object ref="Device.USB.USBHosts.Host.{i}.Device.{i}." requirement="present">
        <parameter ref="IsSuspended" requirement="readOnly"/>
        <parameter ref="IsSelfPowered" requirement="readOnly"/>
        <parameter ref="ConfigurationNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}." requirement="present">
        <parameter ref="ConfigurationNumber" requirement="readOnly"/>
        <parameter ref="InterfaceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}." requirement="present">
        <parameter ref="InterfaceNumber" requirement="readOnly"/>
        <parameter ref="InterfaceClass" requirement="readOnly"/>
        <parameter ref="InterfaceSubClass" requirement="readOnly"/>
        <parameter ref="InterfaceProtocol" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="PeriodicStatsAdv:1" extends="PeriodicStatsBase:1" dmr:version="2.0" dmr:previousProfile="PeriodicStatsBase:1">
      <object ref="Device.PeriodicStatistics.SampleSet.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="TimeReference" requirement="readWrite"/>
        <parameter ref="FetchSamples" requirement="readWrite"/>
        <command ref="ForceSample()" />
      </object>
      <object ref="Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="SampleMode" requirement="readWrite"/>
        <parameter ref="CalculationMode" requirement="readWrite"/>
        <parameter ref="LowThreshold" requirement="readWrite"/>
        <parameter ref="HighThreshold" requirement="readWrite"/>
        <parameter ref="Failures" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="IPInterface:1" dmr:version="2.0" dmr:previousProfile="IPv6Routing:1">
      <object ref="Device.IP." requirement="present">
        <parameter ref="InterfaceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.IP.Interface.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="LowerLayers" requirement="readWrite"/>
        <parameter ref="Type" requirement="readOnly"/>
        <command ref="Reset()"/>
        <parameter ref="IPv4AddressNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.IP.Interface.{i}.IPv4Address.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="IPAddress" requirement="readWrite"/>
        <parameter ref="SubnetMask" requirement="readWrite"/>
        <parameter ref="AddressingType" requirement="readOnly"/>
      </object>
      <object ref="Device.IP.Interface.{i}.Stats." requirement="present">
        <parameter ref="BytesSent" requirement="readOnly"/>
        <parameter ref="BytesReceived" requirement="readOnly"/>
        <parameter ref="PacketsSent" requirement="readOnly"/>
        <parameter ref="PacketsReceived" requirement="readOnly"/>
        <parameter ref="ErrorsSent" requirement="readOnly"/>
        <parameter ref="ErrorsReceived" requirement="readOnly"/>
        <parameter ref="UnicastPacketsSent" requirement="readOnly"/>
        <parameter ref="UnicastPacketsReceived" requirement="readOnly"/>
        <parameter ref="DiscardPacketsSent" requirement="readOnly"/>
        <parameter ref="DiscardPacketsReceived" requirement="readOnly"/>
        <parameter ref="MulticastPacketsSent" requirement="readOnly"/>
        <parameter ref="MulticastPacketsReceived" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsSent" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsReceived" requirement="readOnly"/>
        <parameter ref="UnknownProtoPacketsReceived" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="IPInterface:2" base="IPInterface:1" dmr:version="2.2"  dmr:previousProfile="IPInterface:1">
      <description>
        This profile is IPv4 specific.
      </description>
      <object ref="Device.IP." requirement="present">
        <parameter ref="IPv4Enable" requirement="readWrite"/>
        <parameter ref="IPv4Status" requirement="readOnly"/>
      </object>
      <object ref="Device.IP.Interface.{i}." requirement="createDelete">
        <parameter ref="IPv4Enable" requirement="readWrite"/>
      </object>
      <object ref="Device.IP.Interface.{i}.IPv4Address.{i}." requirement="createDelete">
        <parameter ref="Status" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="IPv6Interface:1" dmr:version="2.2" dmr:previousProfile="IPInterface:2">
      <object ref="Device.IP." requirement="present">
        <parameter ref="IPv6Capable" requirement="readOnly"/>
        <parameter ref="IPv6Enable" requirement="readWrite"/>
        <parameter ref="IPv6Status" requirement="readOnly"/>
        <parameter ref="ULAPrefix" requirement="readWrite"/>
        <parameter ref="InterfaceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.IP.Interface.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="IPv6Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="LowerLayers" requirement="readWrite"/>
        <parameter ref="Type" requirement="readOnly"/>
        <parameter ref="ULAEnable" requirement="readWrite"/>
        <command ref="Reset()"/>
        <parameter ref="IPv6AddressNumberOfEntries" requirement="readOnly"/>
        <parameter ref="IPv6PrefixNumberOfEntries" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="PPPInterface:1" dmr:version="2.0" dmr:previousProfile="IPv6Interface:1">
      <object ref="Device.PPP." requirement="present">
        <parameter ref="InterfaceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.PPP.Interface.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="LowerLayers" requirement="readWrite"/>
        <command ref="Reset()"/>
        <parameter ref="Username" requirement="readWrite"/>
        <parameter ref="Password" requirement="readWrite"/>
        <parameter ref="ConnectionTrigger" requirement="readWrite"/>
      </object>
      <object ref="Device.PPP.Interface.{i}.PPPoE." requirement="present">
        <parameter ref="SessionID" requirement="readOnly"/>
        <parameter ref="ACName" requirement="readWrite"/>
        <parameter ref="ServiceName" requirement="readWrite"/>
      </object>
      <object ref="Device.PPP.Interface.{i}.Stats." requirement="present">
        <parameter ref="BytesSent" requirement="readOnly"/>
        <parameter ref="BytesReceived" requirement="readOnly"/>
        <parameter ref="PacketsSent" requirement="readOnly"/>
        <parameter ref="PacketsReceived" requirement="readOnly"/>
        <parameter ref="ErrorsSent" requirement="readOnly"/>
        <parameter ref="ErrorsReceived" requirement="readOnly"/>
        <parameter ref="UnicastPacketsSent" requirement="readOnly"/>
        <parameter ref="UnicastPacketsReceived" requirement="readOnly"/>
        <parameter ref="DiscardPacketsSent" requirement="readOnly"/>
        <parameter ref="DiscardPacketsReceived" requirement="readOnly"/>
        <parameter ref="MulticastPacketsSent" requirement="readOnly"/>
        <parameter ref="MulticastPacketsReceived" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsSent" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsReceived" requirement="readOnly"/>
        <parameter ref="UnknownProtoPacketsReceived" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="PPPInterface:2" base="PPPInterface:1" dmr:version="2.2" dmr:previousProfile="PPPInterface:1">
      <object ref="Device.PPP." requirement="present">
        <parameter ref="SupportedNCPs" requirement="readOnly"/>
      </object>
      <object ref="Device.PPP.Interface.{i}." requirement="createDelete">
        <parameter ref="IPv6CPEnable" requirement="readWrite">
          <description>
            REQUIRED only for IPv6 capable devices.
          </description>
        </parameter>
      </object>
      <object ref="Device.PPP.Interface.{i}.IPv6CP." requirement="present">
        <description>
          REQUIRED only for IPv6 capable devices.
        </description>
        <parameter ref="LocalInterfaceIdentifier" requirement="readOnly"/>
        <parameter ref="RemoteInterfaceIdentifier" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="DHCPv4Client:1" dmr: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>
    <profile name="DHCPv6Client:1" dmr:version="2.2" dmr:previousProfile="DHCPv4ServerClientInfo:1">
      <object ref="Device.DHCPv6." requirement="present">
        <parameter ref="ClientNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv6.Client.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="DUID" requirement="readOnly"/>
        <parameter ref="RequestAddresses" requirement="readWrite"/>
        <parameter ref="RequestPrefixes" requirement="readWrite"/>
        <parameter ref="RapidCommit" requirement="readWrite"/>
        <command ref="Renew()"/>
        <parameter ref="SuggestedT1" requirement="readWrite"/>
        <parameter ref="SuggestedT2" requirement="readWrite"/>
        <parameter ref="SupportedOptions" requirement="readOnly"/>
        <parameter ref="RequestedOptions" requirement="readWrite"/>
        <parameter ref="SentOptionNumberOfEntries" requirement="readOnly"/>
        <parameter ref="ReceivedOptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv6.Client.{i}.SentOption.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Tag" requirement="readWrite"/>
        <parameter ref="Value" requirement="readWrite"/>
      </object>
      <object ref="Device.DHCPv6.Client.{i}.ReceivedOption.{i}." requirement="present">
        <parameter ref="Tag" requirement="readOnly"/>
        <parameter ref="Value" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="DHCPv6ClientServerIdentity:1" extends="DHCPv6Client:1" dmr:version="2.2" dmr:previousProfile="DHCPv6Client:1">
      <object ref="Device.DHCPv6.Client.{i}." requirement="createDelete">
        <parameter ref="ServerNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv6.Client.{i}.Server.{i}." requirement="present">
        <parameter ref="SourceAddress" requirement="readOnly"/>
        <parameter ref="DUID" requirement="readOnly"/>
        <parameter ref="InformationRefreshTime" requirement="readOnly"/>
      </object>
      <object ref="Device.DHCPv6.Client.{i}.ReceivedOption.{i}." requirement="present">
        <parameter ref="Server" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="MQTTClientExtended:1" base="MQTTClientBase:1" dmr:version="2.10" dmr:previousProfile="MQTTClientSubscribe:1">
      <description>
        Adds client authentication, will handling and extends statistics
      </description>
      <object ref="Device.MQTT.Client.{i}." requirement="present">
        <parameter ref="Name" requirement="readWrite"/>
        <parameter ref="ClientID" requirement="readWrite"/>
        <parameter ref="Username" requirement="readWrite"/>
        <parameter ref="Password" requirement="readWrite"/>
        <parameter ref="TransportProtocol" requirement="readWrite"/>
        <parameter ref="MessageRetryTime" requirement="readWrite"/>
        <parameter ref="ConnectRetryTime" requirement="readWrite"/>
        <command ref="ForceReconnect()"/>
        <parameter ref="WillEnable" requirement="readWrite"/>
        <parameter ref="WillTopic" requirement="readWrite"/>
        <parameter ref="WillValue" requirement="readWrite"/>
        <parameter ref="WillQoS" requirement="readWrite"/>
        <parameter ref="WillRetain" requirement="readWrite"/>
      </object>
      <object ref="Device.MQTT.Client.{i}.Stats." requirement="present">
        <parameter ref="LastPublishMessageSent" requirement="readOnly"/>
        <parameter ref="LastPublishMessageReceived" requirement="readOnly"/>
        <parameter ref="PublishSent" requirement="readOnly"/>
        <parameter ref="PublishReceived" requirement="readOnly"/>
        <parameter ref="SubscribeSent" requirement="readOnly"/>
        <parameter ref="UnSubscribeSent" requirement="readOnly"/>
        <parameter ref="PublishErrors" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="HPNAQoS:1" dmr:version="2.0" dmr:previousProfile="HPNA:1">
      <object ref="Device.HPNA.Interface.{i}.QoS." requirement="present">
        <parameter ref="FlowSpecNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}." requirement="createDelete">
        <parameter ref="FlowType" requirement="readWrite"/>
        <parameter ref="Priority" requirement="readWrite"/>
        <parameter ref="Latency" requirement="readWrite"/>
        <parameter ref="Jitter" requirement="readWrite"/>
        <parameter ref="PacketSize" requirement="readWrite"/>
        <parameter ref="MinRate" requirement="readWrite"/>
        <parameter ref="AvgRate" requirement="readWrite"/>
        <parameter ref="MaxRate" requirement="readWrite"/>
        <parameter ref="PER" requirement="readWrite"/>
        <parameter ref="Timeout" requirement="readWrite"/>
      </object>
    </profile>

    <!-- Basic USP profiles -->
    <profile name="DeviceInfo:1" dmr:version="2.12">
      <object ref="Device.DeviceInfo." requirement="present">
        <parameter ref="Manufacturer" requirement="readOnly"/>
        <parameter ref="ManufacturerOUI" requirement="readOnly"/>
        <parameter ref="ProductClass" requirement="readOnly"/>
        <parameter ref="SerialNumber" requirement="readOnly"/>
        <parameter ref="ModelName" requirement="readOnly"/>
        <parameter ref="HardwareVersion" requirement="readOnly"/>
        <parameter ref="FriendlyName" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="Reboot:1" dmr:version="2.12">
      <object ref="Device." requirement="present">
        <command ref="Reboot()"/>
        <event ref="Boot!"/>
      </object>
      <object ref="Device.LocalAgent.Controller.{i}.BootParameter.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="ParameterName" requirement="readWrite"/>
      </object>
    </profile>
    <profile name="Firmware:1" dmr:version="2.12">
      <object ref="Device.DeviceInfo." requirement="present">
        <parameter ref="ActiveFirmwareImage" requirement="readOnly"/>
        <parameter ref="BootFirmwareImage" requirement="readWrite"/>
        <parameter ref="FirmwareImageNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DeviceInfo.FirmwareImage.{i}." requirement="present">
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="Version" requirement="readOnly"/>
        <parameter ref="Available" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="BootFailureLog" requirement="readOnly"/>
        <command ref="Download()"/>
      </object>
      <object ref="Device.LocalAgent." requirement="present">
        <event ref="TransferComplete!"/>
      </object>
    </profile>
    <profile name="LocalAgent:1" dmr:version="2.12">
      <object ref="Device.LocalAgent." requirement="present">
        <parameter ref="EndpointID" requirement="readOnly"/>
        <parameter ref="AdvertisedDeviceSubtypes" requirement="readOnly"/>
        <event ref="Periodic!"/>
        <parameter ref="MTPNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.MTP.{i}." requirement="present">
        <parameter ref="Alias" requirement="readOnly"/>
        <parameter ref="Protocol" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.MTP.{i}.CoAP." requirement="present">
        <parameter ref="Port" requirement="readOnly"/>
        <parameter ref="Path" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="Controllers:1" dmr:version="2.12">
      <object ref="Device.LocalAgent." requirement="present">
        <parameter ref="ControllerNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.Controller.{i}." requirement="present">
        <parameter ref="Enable" requirement="readOnly"/>
        <parameter ref="Alias" requirement="readOnly"/>
        <parameter ref="EndpointID" requirement="readOnly"/>
        <parameter ref="AssignedRole" requirement="readOnly"/>
        <parameter ref="PeriodicNotifInterval" requirement="readOnly"/>
        <parameter ref="MTPNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.Controller.{i}.MTP.{i}." requirement="present">
        <parameter ref="Enable" requirement="readOnly"/>
        <parameter ref="Alias" requirement="readOnly"/>
        <parameter ref="Protocol" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.Controller.{i}.MTP.{i}.CoAP." requirement="present">
        <parameter ref="Host" requirement="readOnly"/>
        <parameter ref="Port" requirement="readOnly"/>
        <parameter ref="Path" requirement="readOnly"/>
      </object>
    </profile>
    <profile name="Subscriptions:1" dmr:version="2.12">
      <object ref="Device.LocalAgent." requirement="present">
        <parameter ref="SubscriptionNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.Subscription.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="ID" requirement="readWrite"/>
        <parameter ref="Recipient" requirement="readOnly"/>
        <parameter ref="CreationDate" requirement="readOnly"/>
        <parameter ref="NotifType" requirement="readWrite"/>
        <parameter ref="ReferenceList" requirement="readWrite"/>
        <parameter ref="Persistent" requirement="readWrite"/>
        <parameter ref="TimeToLive" requirement="readWrite"/>
      </object>
    </profile>
    <profile name="Challenge:1" dmr:version="2.12">
      <object ref="Device.LocalAgent.ControllerTrust." requirement="present">
        <command ref="RequestChallenge()"/>
        <command ref="ChallengeResponse()"/>
        <parameter ref="ChallengeNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.LocalAgent.ControllerTrust.Challenge.{i}." requirement="present">
        <parameter ref="Alias" requirement="readOnly"/>
        <parameter ref="Description" requirement="readOnly"/>
        <parameter ref="Role" requirement="readOnly"/>
        <parameter ref="Value" requirement="readOnly"/>
        <parameter ref="ValueType" requirement="readOnly"/>
        <parameter ref="Instruction" requirement="readOnly"/>
        <parameter ref="InstructionType" requirement="readOnly"/>
      </object>
    </profile>

    <!-- Can use this for generating a DT (report tool needs some work...) -->
    <profile name="USPAgent:1" extends="DeviceInfo:1
        Reboot:1
        Firmware:1
        LocalAgent:1
        Controllers:1
        Subscriptions:1
        Challenge:1" dmr:version="2.12"/>

  </model>
</dm:document>
