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

  Copyright (c) 2010-2025, Broadband Forum

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

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

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

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

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

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

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

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

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

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

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

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

  <import file="tr-181-2-security.xml"
      spec="urn:broadband-forum-org:tr-181-2-21-security">
    <component name="ClientCerts"/>
  </import>

  <component name="BootStage">
    <parameter name="BootStage" access="readOnly" version="2.21">
      <description>
        The operational state of the device middleware during its boot sequence.

        Represents the possible milestones during the boot process, providing clear indicators
        of the device's current state and readiness for communication. These stages are used both
        for real-time operational state tracking and for historical boot performance analysis.

        The transitions between stages provide clear triggers for internal management agents
        to know exactly when the device is ready for specific operations.

        E.g., the CWMP/USP agents can use these stages to determine communication readiness.
      </description>
      <syntax>
        <string>
          <enumeration value="Started">
            <description>
              Artificial milestone marking the first recorded timestamp of the boot process.
            </description>
          </enumeration>
          <enumeration value="PowerOn">
            <description>
              Device has received power and hardware initialization has started.
            </description>
          </enumeration>
          <enumeration value="KernelReady">
            <description>
              Core operating system and kernel have been initialized and basic runtime is available.
            </description>
          </enumeration>
          <enumeration value="NetworkReady">
            <description>
              Local networking stack (e.g., IPv4/IPv6 interfaces, DHCP) is operational.
            </description>
          </enumeration>
          <enumeration value="ManagementReady">
            <description>
              Management protocol agent (TR-069/TR-369) has started and can accept controller sessions.

              E.g., the CWMP Agent can send the ‘1 BOOT’ Inform or the USP Agent can send the
              ‘Boot!’ Event.
            </description>
          </enumeration>
          <enumeration value="Completed">
            <description>
              Device fully operational. All systems initialized, including services, Internet
              connectivity and remote management.
            </description>
          </enumeration>
          <enumeration value="Stopping">
            <description>
              Device is in the process of shutting down.
            </description>
          </enumeration>
        </string>
      </syntax>
    </parameter>
  </component>

  <component name="CauseOfBoot">
    <parameter name="Cause">
      <description>
        The cause of the boot.
      </description>
      <syntax>
        <string>
          <enumeration value="LocalReboot">
            <description>
              A reboot triggered locally on the device (NOT as a result of a
              {{command|.Reboot()|model}} command triggered by a remote trigger, e.g.
              another remote management protocol).
            </description>
          </enumeration>
          <enumeration value="RemoteReboot">
            <description>
              A reboot triggered via the {{command|.Reboot()|model}} command or other remote
              trigger, e.g. another remote management protocol.
            </description>
          </enumeration>
          <enumeration value="LocalShutdown" version="2.21">
            <description>
              A shutdown triggered locally on the device (NOT as a result of a
              {{command|.Shutdown()|model}} command triggered by a remote trigger, e.g.
              another remote management protocol).
            </description>
          </enumeration>
          <enumeration value="RemoteShutdown" version="2.21">
            <description>
              A shutdown triggered via the {{command|.Shutdown()|model}} command or other remote
              trigger, e.g. another remote management protocol.
            </description>
          </enumeration>
          <enumeration value="FactoryReset" version="2.15">
            <description>
              A factory reset triggered locally on the device or remotely (as a result of a
              {{command|.FactoryReset()|model}} command or other remote trigger,
              e.g. another remote management protocol), which is to be used
              when the Agent cannot differentiate between local and remote
            </description>
          </enumeration>
          <enumeration value="LocalFactoryReset">
            <description>
              A factory reset triggered locally on the device (NOT as a result of a
              {{command|.FactoryReset()|model}} command triggered by a remote trigger,
              e.g. another remote management protocol)
            </description>
          </enumeration>
          <enumeration value="RemoteFactoryReset">
            <description>
              A factory reset triggered via the {{command|.FactoryReset()|model}} command or
              other remote trigger, e.g. another remote management protocol
            </description>
          </enumeration>
        </string>
      </syntax>
    </parameter>
  </component>

  <component name="DeviceInfo">
    <object name="Device.DeviceInfo." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        This object contains general device information.
      </description>

      <parameter name="DeviceCategory" access="readOnly" version="2.8">
        <description>
          Each list item is a device category (e.g. "AV_TV" and "AV_Recorder"),
          or the value is {{empty}} if no such element is provided by the
          device.

          Note: It is assumed that this list might be used for HTIP
          (Home-network Topology Identifying Protocol) {{bibref|JJ-300.00}} and
          {{bibref|G.9973}}. Standard HTIP device categories are defined in
          {{bibref|JJ-300.01}}. In this case, the maximum length of the list is
          127 and of each item is 31, and any non-HTIP device categories SHOULD
          NOT conflict with standard HTIP device categories.
        </description>
        <syntax>
          <list/>
          <string/>
        </syntax>
      </parameter>

      <parameter name="Manufacturer" access="readOnly">
        <description>
          The manufacturer of the CPE (human readable string).
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ManufacturerOUI" access="readOnly">
        <description>
          Organizationally unique identifier of the device manufacturer.
          Represented as a six hexadecimal-digit value using all upper-case
          letters and including any leading zeros. {{pattern}}

          The value MUST be a valid OUI as defined in {{bibref|OUI}}.

          This value MUST remain fixed over the lifetime of the device,
          including across firmware updates.
        </description>
        <syntax>
          <string>
            <size minLength="6" maxLength="6"/>
            <pattern value="[0-9A-F]{6}"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ModelName" access="readOnly">
        <description>
          Model name of the CPE (human readable string).
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ModelNumber" access="readOnly" version="2.8">
        <description>
          The model number of the device (human readable string), or {{empty}}
          if no model number is provided by the device.

          Note: It is assumed that this string might be used for HTIP
          (Home-network Topology Identifying Protocol) {{bibref|JJ-300.00}} and
          {{bibref|G.9973}}. In this case, the maximum length of the string is
          31.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Description" access="readOnly">
        <description>
          A full description of the CPE device (human readable string).
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ProductClass" access="readOnly">
        <description>
          Identifier of the class of product for which the serial number
          applies. That is, for a given manufacturer, this parameter is used to
          identify the product or class of product over which the
          {{param|SerialNumber}} parameter is unique.

          This value MUST remain fixed over the lifetime of the device,
          including across firmware updates.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="SerialNumber" access="readOnly">
        <description>
          Identifier of the particular device that is unique for the indicated
          class of product and manufacturer.

          This value MUST remain fixed over the lifetime of the device,
          including across firmware updates.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="HardwareVersion" access="readOnly" forcedInform="true">
        <description>
          A string identifying the particular CPE model and version.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="SoftwareVersion" access="readOnly"
          activeNotify="forceEnabled" forcedInform="true">
        <description>
          A string identifying the software version currently installed in the
          CPE (i.e. version of the overall CPE firmware).

          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="ActiveFirmwareImage" access="readOnly" version="2.12">
        <description>
          {{noreference}}A full path reference to the row in the
          {{object|FirmwareImage}} table representing the currently running
          firmware image.
        </description>
        <syntax>
          <string>
            <pathRef targetType="row" targetParent="FirmwareImage."
                refType="strong"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="BootFirmwareImage" access="readWrite" version="2.12">
        <description>
          {{noreference}}A full path reference to the row in the
          {{object|FirmwareImage}} table of the firmware image that is to be
          loaded the next time the device boots.

          This parameter value cannot be empty and must point to a valid and
          enabled {{object|FirmwareImage}} object where the
          ({{param|FirmwareImage.{i}.Available}} parameter is set to 'true').
          Out of the factory, this parameter should be set to point to the
          firmware image the CPE will attempt to boot when first powered on.

          The firmware image instance referenced by this parameter must also
          have an Available parameter value of 'true'. Attempting to set this
          parameter to point to a non-enabled firmware image MUST result in the
          CPE responding with a CWMP fault (9007).

          In situations where the CPE cannot boot the firmware image specified
          by this parameter and manages to boot a different firmware image, the
          CPE MUST NOT modify this value to point to the alternate firmware
          image that is currently active.
        </description>
        <syntax>
          <string>
            <pathRef targetType="row" targetParent="FirmwareImage."
                refType="strong"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="AdditionalHardwareVersion" access="readOnly">
        <description>
          {{list}} Each entry is an additional version. Represents any
          additional hardware version information the vendor might wish to
          supply.
        </description>
        <syntax>
          <list>
            <size maxLength="64"/>
          </list>
          <string/>
        </syntax>
      </parameter>

      <parameter name="AdditionalSoftwareVersion" access="readOnly">
        <description>
          {{list}} Each entry is an additional version. Represents any
          additional software version information the vendor might wish to
          supply.
        </description>
        <syntax>
          <list>
            <size maxLength="64"/>
          </list>
          <string/>
        </syntax>
      </parameter>

      <parameter name="ProvisioningCode" access="readWrite"
          activeNotify="forceEnabled" forcedInform="true">
        <description>
          Identifier of the primary service provider and other provisioning
          information, which MAY be used by the ACS to determine service
          provider-specific customization and provisioning parameters.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="UpTime" access="readOnly" activeNotify="canDeny">
        <description>
          Time in {{units}} since the CPE was last restarted.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <component ref="BootStage"/>

      <parameter name="FirstUseDate" access="readOnly">
        <description>
          Date and time in UTC that the CPE first both successfully established
          an IP-layer network connection and acquired an absolute time
          reference using NTP or equivalent over that network connection. The
          CPE MAY reset this date after a factory reset.

          If NTP or equivalent is not available, this parameter, if present,
          SHOULD be set to the Unknown Time value.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="LastFirmwareUpdate" access="readOnly" version="2.21">
        <description>Date and time of when the {{param|SoftwareVersion}} last changed.</description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="HostName" access="readWrite" version="2.16">
        <description>
          The hostname of the device {{bibref|RFC1123|Section 2 General
          issues}}. This can be either a Fully Qualified Domain Name (FQDN) or
          just the first component of an FQDN. For example, myhgw, myhgw.home,
          myhgw.home.arpa, myhgw.isp.net.
        </description>
        <syntax>
          <string>
            <size maxLength="255"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="CountryCode" access="readWrite" version="2.21">
        <description>
          The two-letter country code in accordance with {{bibref|ISO3166-1}} alpha-2. For example, 'US' for the United States.
        </description>
        <syntax>
          <string>
            <size minLength="2" maxLength="2"/>
            <pattern value="[A-Z][A-Z]"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="FirmwareImageNumberOfEntries" access="readOnly"
          version="2.12">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

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

      <parameter name="ProcessorNumberOfEntries" access="readOnly"
          version="2.1" status="deleted">
        <description>
          {{numentries}}

          {{deprecated|2.18|because the only contained parameter, {{param|Processor.{i}.Architecture}},
          is no longer relevant for modern devices.}}

          {{deleted|2.21}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="LogRotateNumberOfEntries" access="readOnly"
          version="2.17">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="VendorLogFileNumberOfEntries" access="readOnly"
          version="2.1">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="LocationNumberOfEntries" access="readOnly"
          version="2.4">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="DeviceImageNumberOfEntries" access="readOnly"
          version="2.11" dmr:customNumEntriesParameter="true">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.VendorConfigFile.{i}." access="readOnly"
        numEntriesParameter="VendorConfigFileNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.0">
      <description>
        Every instance of this object is a Vendor Configuration File, and
        contains parameters associated with the Vendor Configuration File.

        This table of Vendor Configuration Files is for information only and
        does not allow the Controller to operate on these files in any way.

        {{template|VENDORCONFIGFILE-DESC}}
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Name" access="readOnly">
        <description>
          Name of the vendor configuration file.

          If the CPE is able to obtain the name of the configuration file from
          the file itself, then the value of this parameter MUST be set to that
          name.

          Otherwise, if the CPE can extract the file name from the URL used to
          download the configuration file, then the value of this parameter
          MUST be set to that name.

          {{template|VENDORCONFIGFILE-NAME}}
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Version" access="readOnly">
        <description>
          A string identifying the configuration file version currently used in
          the CPE.

          If the CPE is able to obtain the version of the configuration file
          from the file itself, then the value of this parameter MUST be set to
          the obtained value.

          Otherwise, the value of this parameter MUST be {{empty}}.
        </description>
        <syntax>
          <string>
            <size maxLength="16"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Date" access="readOnly">
        <description>
          Date and time when the content of the current version of this vendor
          configuration file was first applied by the CPE.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="Description" access="readOnly">
        <description>
          A description of the vendor configuration file (human-readable
          string).
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="UseForBackupRestore" access="readOnly" version="2.7">
        <description>
          When {{true}}, this parameter indicates that this {{object}} instance
          is to be used for backup and restoration purposes.

          Note: The backup and restore operations may require the use of
          multiple {{object}} instances. In this scenario the mechanism for
          determining the order and combination of {{object}} instances used for
          backup and restoration purposes is implementation specific.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.MemoryStatus." access="readOnly"
        minEntries="1" maxEntries="1" version="2.0">
      <description>
        Status of the device's physical memory.
      </description>

      <parameter name="Total" access="readOnly">
        <description>
          The total physical volatile RAM, in {{units}}, installed on the
          device.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Available" access="readOnly" activeNotify="canDeny" version="2.21">
        <description>
          The estimated total physical volatile RAM, in {{units}}, that can be allocated
          without triggering out-of-memory conditions.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Free" access="readOnly" activeNotify="canDeny">
        <description>
          The free physical volatile RAM, in {{units}}, currently unallocated
          and unused. This excludes memory that can be reclaimed (e.g. caches,
          buffers).

          Note: This definition was changed in Device:2.21. Please refer to {{param|Available}} for
          a guaranteed indication of memory availability, rather than memory that is completely unused.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="TotalPersistent" access="readOnly" version="2.15">
        <description>
          The sum total physical Non-Volatile Memory (NVM), in {{units}},
          installed on the device. This memory persists across reboots and can
          be used by the system, applications, or users.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="FreePersistent" access="readOnly"
          activeNotify="canDeny" version="2.15">
        <description>
          The sum total free physical Non-Volatile Memory (NVM), in {{units}},
          currently available on the device. This memory persists across
          reboots and is available for use by the system, applications, or
          users.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.MemoryStatus.MemoryMonitor." access="readOnly"
        minEntries="1" maxEntries="1" version="2.18">
      <description>
        This object specifies information that the device has obtained via sampling
        the memory utilization (RAM) on the device.
      </description>

      <parameter name="Enable" access="readWrite" version="2.18">
        <description>
          Indicates whether or not memory monitoring is enabled.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="MemUtilization" access="readOnly" version = "2.18">
        <description>
          Memory utilization, in {{units}}, rounded to the nearest
          whole {{units}}, is the percentage of memory used by the system which cannot be spontaneously
          reclaimed or repurposed by the system in case it is required. This metric is collected at the
          {{param|PollingInterval}}. This value is used to determine if a critical condition is
          reached i.e., the memory utilization exceeds {{param|CriticalRiseThreshold}}.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="PollingInterval" access="readWrite" version="2.18">
        <description>
          The interval, measured in {{units}}, in which the device polls
          the memory utilization.

          If the value is 0 then the device selects its own polling interval.

          If the value is greater than 0 then the device MUST use this value as
          the polling interval.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="CriticalRiseThreshold" access="readWrite" version = "2.18">
        <description>
          Memory utilization rise threshold {{units}} value. If the {{param|MemUtilization}} exceeds the rise threshold value,
          and the {{param|CriticalFallTimeStamp}} is greater than {{param|CriticalRiseTimeStamp}} (indicating that critical
          condition is reached), the following takes place:

          * The {{param|CriticalRiseTimeStamp}} is updated to the current time.
          * A log is generated into the vendor log file referenced by
            {{param|VendorLogFileRef}}
            indicating critical condition is reached if the {{param|EnableCriticalLog}} is {{true}}.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
          <default type="implementation" value="80"/>
        </syntax>
      </parameter>

      <parameter name="CriticalFallThreshold" access="readWrite" version = "2.18">
        <description>
          Memory utilization fall threshold {{units}} value. If the {{param|MemUtilization}} falls below the fall threshold value and
          {{param|CriticalRiseTimeStamp}} is greater than {{param|CriticalFallTimeStamp}} (indicating that the critical condition
          is no longer present), the following takes place:

          * The {{param|CriticalFallTimeStamp}} is updated to current time.
          * A log is generated into the vendor log file referenced by
            {{object|.DeviceInfo.VendorLogFile}} indicating that the critical
            condition is no longer present if the {{param|EnableCriticalLog}} is {{true}}.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
          <default type="implementation" value="60"/>
        </syntax>
      </parameter>

      <parameter name="CriticalRiseTimeStamp" access="readOnly" version="2.18">
        <description>
          Last date and time when the critical condition was reached. See {{param|CriticalRiseThreshold}} description
          for more details.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="CriticalFallTimeStamp" access="readOnly" version="2.18">
        <description>
          Last date and time when the critical condition was no longer present. See {{param|CriticalFallThreshold}} description
          for more details.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="EnableCriticalLog" access="readWrite" version="2.18">
        <description>
          This parameter indicates whether a critical log needs to be
          generated in the vendor log file.

          * If the value of {{param}} is {{true}}, then a critical log is generated
          in the vendor log file.

          * If the value of {{param}} is {{false}}, then no critical log is generated
          in the vendor log file.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="VendorLogFileRef" access="readOnly" version="2.18">
        <description>
          The reference to {{object|.DeviceInfo.VendorLogFile}} is automatically constructed
          and the {{object|.DeviceInfo.VendorLogFile}} is populated with the information based on {{param|FilePath}}.

          E.g. When {{param|FilePath}} = ''file:///var/log/messages''.
          The following entry is automatically added to {{object|.DeviceInfo.VendorLogFile}}: ''file:///var/log/messages''.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong"
              targetParent=".DeviceInfo.VendorLogFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="FilePath" access="readWrite" version="2.18">
        <description>
          Destination path and filename of where to create and keep the log files
          which MUST use the file URI scheme {{bibref|RFC8089|The file URI Scheme}}.
          This file is related to {{param|EnableCriticalLog}}.
        </description>
        <syntax>
          <dataType ref="FileURI"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.ProcessStatus." access="readOnly"
        minEntries="1" maxEntries="1" version="2.0">
      <description>
        Status of the processes on the device.
      </description>

      <parameter name="CPUUsage" access="readOnly" activeNotify="canDeny">
        <description>
          The total amount of the CPU, in {{units}}, rounded to the nearest
          whole {{units}}. In the case that multiple CPU are present, this
          value represents the average of all CPU.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

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

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

    <object name="Device.DeviceInfo.ProcessStatus.CPU.{i}." access="readOnly"
        numEntriesParameter="CPUNumberOfEntries" minEntries="0"
        maxEntries="unbounded" dmr:fixedObject="true" version="2.18">
      <description>
        This object describes the utilization metrics for each CPU on the device. It also defines
        the monitoring actions that are automatically triggered when specific utilization thresholds
        are crossed.
      </description>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias" version="2.18"/>

      <parameter name="Name" access="readOnly" version="2.18">
        <description>
          Name of this CPU. This text MUST be sufficient to
          distinguish this CPU from other CPUs.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Enable" access="readWrite" version="2.18">
        <description>
          Enables or disables the CPU utilization monitoring.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="UpTime" access="readOnly" version = "2.18">
        <description>
          Time in {{units}} since the CPU was last restarted.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="UserModeUtilization" access="readOnly" version = "2.18">
        <description>
          CPU utilization, in {{units}}, rounded to the nearest
          whole {{units}}, while executing at the user level.
          This includes utilization across all cores.

          This value is calculated the same way as {{param|CPUUtilization}}. See
          {{param|CPUUtilization}} description for more details.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="SystemModeUtilization" access="readOnly" version = "2.18">
        <description>
          CPU utilization, in {{units}}, rounded to the nearest
          whole {{units}}, while executing at the system/kernel level.
          Note that this includes the time spent servicing interrupts as well.
          This includes utilization across all cores.

          This value is calculated the same way as {{param|CPUUtilization}}. See
          {{param|CPUUtilization}} description for more details.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="IdleModeUtilization" access="readOnly" version = "2.18">
        <description>
          CPU utilization, in {{units}}, rounded to the nearest
          whole {{units}}, while the CPU was idle.

          This value is calculated the same way as {{param|CPUUtilization}}. See
          {{param|CPUUtilization}} description for more details.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="CPUUtilization" access="readOnly" version = "2.18">
        <description>
          CPU utilization, in {{units}}, rounded to the nearest
          whole {{units}}. The CPU Utilization is calculated as
          a moving window average of {{param|NumSamples}} CPU utilization samples collected at the {{param|PollInterval}}.

          For example, the CPU utilization is calculated as follows:
          CPU Utilization = (sample1 + sample2 + ... + sampleN)/N where N is the number of CPU usage samples as represented by {{param|NumSamples}}
          and sample1, sample2, ..., sampleN are CPU usage samples collected at every {{param|PollInterval}} seconds.

          This parameter, which reflects system and user mode CPU utilization, is used to determine if the CPU is in critical condition.
          This value includes system mode and user mode utilization i.e.,
          everything except idle mode utilization.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="PollInterval" access="readWrite" version="2.18">
        <description>
          The interval, measured in {{units}}, over which the CPU usage is polled.

          If the value is 0 then the device selects its own polling interval.

          If the value is greater than 0 then the device MUST use this value as
          the poll interval.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="implementation" value="5"/>
        </syntax>
      </parameter>

      <parameter name="NumSamples" access="readWrite" version="2.18">
        <description>
          This parameter indicates the number of CPU usage samples that is needed to
          calculate the average CPU utilization and populate the {{param|CPUUtilization}}
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="300"/>
          </unsignedInt>
          <default type="implementation" value="30"/>
        </syntax>
      </parameter>

      <parameter name="CriticalRiseThreshold" access="readWrite" version = "2.18">
        <description>
          CPU utilization rise threshold {{units}} value. If the {{param|CPUUtilization}} exceeds the rise threshold value and the
          {{param|CriticalFallTimeStamp}} is greater than {{param|CriticalRiseTimeStamp}} (indicating that critical condition
          is reached), the following takes place:

          * The {{param|CriticalRiseTimeStamp}} is updated to the current time
          * A log is generated into the vendor log file referenced by {{object|###.DeviceInfo.VendorLogFile}}
            indicating critical condition is reached if the {{param|EnableCriticalLog}} is {{true}}. The logs generated
            should indicate the {{param|Name}} as well as the {{param|CriticalRiseTimeStamp}} of the CPU.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
          <default type="implementation" value="80"/>
        </syntax>
      </parameter>

      <parameter name="CriticalFallThreshold" access="readWrite" version = "2.18">
        <description>
          CPU utilization fall threshold {{units}} value. If the {{param|CPUUtilization}} falls below fall threshold value and
          {{param|CriticalRiseTimeStamp}} is greater than {{param|CriticalFallTimeStamp}} (indicating that critical condition
          is no longer present), the following takes place:

          * The {{param|CriticalFallTimeStamp}} is updated to current time
          * A log is generated into the vendor log file referenced by {{object|###.DeviceInfo.VendorLogFile}}
            indicating the clearing of critical condition if the {{param|EnableCriticalLog}} is {{true}}. The logs generated
            should indicate the {{param|Name}} as well as the {{param|CriticalFallTimeStamp}} of the CPU.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="100"/>
            <units value="percent"/>
          </unsignedInt>
          <default type="implementation" value="60"/>
        </syntax>
      </parameter>

      <parameter name="CriticalRiseTimeStamp" access="readOnly" version="2.18">
        <description>
          Last date and time when the critical condition was reached. See {{param|CriticalRiseThreshold}} description for
          more details.

        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="CriticalFallTimeStamp" access="readOnly" version="2.18">
        <description>
          Last date and time when the critical condition is no longer present. See {{param|CriticalFallThreshold}} description
          for more details.

        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="EnableCriticalLog" access="readWrite" version="2.18">
        <description>
          This parameter indicates whether a critical log needs to be
          generated in the vendor log file.

          * If the value of {{param}} is {{true}}, then a critical log is generated
          in the vendor log file.

          * If the value of {{param}} is {{false}}, then no critical log is generated
          in the vendor log file.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="VendorLogFileRef" access="readOnly" version="2.18">
        <description>
          The reference to {{object|###.DeviceInfo.VendorLogFile}} is automatically constructed
          and the {{object|###.DeviceInfo.VendorLogFile}} is populated with the information based on {{param|FilePath}}.

          E.g. When {{param|FilePath}} = ''file:///var/log/messages''.
          The following entry is automatically added to {{object|###.DeviceInfo.VendorLogFile}}: ''file:///var/log/messages''.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong"
              targetParent=".DeviceInfo.VendorLogFile." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="FilePath" access="readWrite" version="2.18">
        <description>
          Destination path and filename of where to create and keep the log files
          which MUST use the uri scheme file {{bibref|RFC8089|The file URI Scheme}}.
          This file is related to {{param|EnableCriticalLog}}.
        </description>
        <syntax>
          <dataType ref="FileURI"/>
        </syntax>
      </parameter>

      <parameter name="InterruptRate" access="readOnly" version="2.21">
        <description>
          The aggregate rate of hardware interrupts (IRQs) handled by this CPU across all interrupt sources, in {{units}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="interrupts per second"/>
          </unsignedInt>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.ProcessStatus.Process.{i}."
        access="readOnly" numEntriesParameter="ProcessNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.0">
      <description>
        List of all processes running on the device.
      </description>
      <uniqueKey functional="true">
        <parameter ref="PID"/>
      </uniqueKey>

      <parameter name="PID" access="readOnly">
        <description>
          The Process Identifier.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="Command" access="readOnly">
        <description>
          The name of the command that has caused the process to exist.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Size" access="readOnly" activeNotify="canDeny">
        <description>
          The size in {{units}} of the memory occupied by the process.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Priority" access="readOnly">
        <description>
          The priority of the process where 0 is highest.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="99"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="CPUTime" access="readOnly" activeNotify="canDeny">
        <description>
          The amount of time in {{units}} that the process has spent taking up
          CPU time since the process was started.
        </description>
        <syntax>
          <unsignedInt>
            <units value="milliseconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="State" access="readOnly" activeNotify="canDeny">
        <description>
          The current state that the process is in.
        </description>
        <syntax>
          <string>
            <enumeration value="Running"/>
            <enumeration value="Sleeping"/>
            <enumeration value="Stopped"/>
            <enumeration value="Idle" optional="true"/>
            <enumeration value="Uninterruptible" optional="true"/>
            <enumeration value="Zombie" optional="true"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.PowerStatus." access="readOnly"
        minEntries="1" maxEntries="1" version="2.19">
      <description>
        Status of the power consumption of the device.
      </description>

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

    <object name="Device.DeviceInfo.PowerStatus.PowerSensor.{i}."
      access="readOnly" minEntries="0" maxEntries="unbounded"
      numEntriesParameter="PowerSensorNumberOfEntries" version="2.19">
      <description>
        Represents the power sensor parameters including voltage, current, and power measurements.
      </description>

      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Indicates whether or not the power sensor is enabled.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this power sensor.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                The sensor is not currently sampling the power.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>
                The sensor is currently sampling the power.
              </description>
            </enumeration>
            <enumeration value="Error">
              <description>
                The sensor error currently prevents sampling the power.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="Name" access="readOnly">
        <description>
          Name of this power sensor. This text MUST be sufficient to
          distinguish this power sensor from other power sensors.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" activeNotify="canDeny">
        <description>
          The time at which this power sensor's last good reading was
          obtained.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates a
          good reading has not been obtained since last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="Voltage" access="readOnly">
        <description>
          The voltage measured by the sensor, in {{units}}.
        </description>
        <syntax>
          <int>
            <units value="mV"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="Current" access="readOnly">
        <description>
          The current measured by the sensor, in {{units}}.
        </description>
        <syntax>
          <int>
            <units value="mA"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="Power" access="readOnly">
        <description>
          The power measured by the sensor, in {{units}}.
        </description>
        <syntax>
          <int>
            <units value="mW"/>
          </int>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.TemperatureStatus." access="readOnly"
        minEntries="1" maxEntries="1" version="2.0">
      <description>
        Status of the temperature of the device.
      </description>

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

    <object name="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}."
        access="readOnly"
        numEntriesParameter="TemperatureSensorNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.0">
      <description>
        This object represents information that the device has obtained via
        sampling an internal temperature sensor.
      </description>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias" version="2.3"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Indicates whether or not the temperature sensor is enabled.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this temperature sensor.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                The sensor is not currently sampling the temperature.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>
                The sensor is currently sampling the temperature.
              </description>
            </enumeration>
            <enumeration value="Error">
              <description>
                The sensor error currently prevents sampling the temperature.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="ResetTime" access="readOnly">
        <description>
          The time at which this temperature sensor was reset.

          Reset can be caused by:

          * {{param|Status}} transition from {{enum|Disabled|Status}} to
            {{enum|Enabled|Status}}

          * {{template|Reset}}.

          * An internal reset of the temperature sensor (including a reboot of
            the device).

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates
          that this temperature sensor has never been reset, which can only
          happen if it has never been enabled.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="Name" access="readOnly">
        <description>
          Name of this temperature sensor. This text MUST be sufficient to
          distinguish this temperature sensor from other temperature sensors.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Value" access="readOnly" activeNotify="canDeny">
        <description>
          This temperature sensor's last good reading in {{units}}.

          A value of -274 (which is below absolute zero) indicates a good
          reading has not been obtained since last reset.
        </description>
        <syntax>
          <int>
            <range minInclusive="-274"/>
            <units value="degrees celsius"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" activeNotify="canDeny">
        <description>
          The time at which this temperature sensor's last good reading was
          obtained.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates a
          good reading has not been obtained since last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="MinValue" access="readOnly">
        <description>
          This temperature sensor's lowest value reading in {{units}} since
          last reset.

          A value of -274 (which is below absolute zero) indicates a good
          reading has not been obtained since last reset.
        </description>
        <syntax>
          <int>
            <range minInclusive="-274"/>
            <units value="degrees celsius"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="MinTime" access="readOnly">
        <description>
          The time at which this temperature sensor's lowest value was read.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates a
          good reading has not been obtained since last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="MaxValue" access="readOnly">
        <description>
          This temperature sensor's highest value reading in {{units}} since
          last reset.

          A value of -274 (which is below absolute zero) indicates a good
          reading has not been obtained since last reset.
        </description>
        <syntax>
          <int>
            <range minInclusive="-274"/>
            <units value="degrees celsius"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="MaxTime" access="readOnly">
        <description>
          The time at which this temperature sensor's highest value was read.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates a
          good reading has not been obtained since last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="LowAlarmValue" access="readWrite">
        <description>
          This temperature sensor's low alarm value in {{units}}.

          A value of -274 (which is below absolute zero) indicates a non
          configured value.

          A change to this value will cause {{param|LowAlarmTime}} to be reset.
        </description>
        <syntax>
          <int>
            <range minInclusive="-274"/>
            <units value="degrees celsius"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="LowAlarmTime" access="readOnly">
        <description>
          Initial time at which this temperature sensor's
          {{param|LowAlarmValue}} was encountered.

          This value is only set the first time the alarm is seen and not
          changed until the next reset.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates
          that an alarm has not been encountered since the last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="HighAlarmValue" access="readWrite">
        <description>
          This temperature sensor's high alarm value in {{units}}.

          A value of -274 (which is below absolute zero) indicates a non
          configured value.

          A change to this value will cause {{param|HighAlarmTime}} to be
          reset.
        </description>
        <syntax>
          <int>
            <range minInclusive="-274"/>
            <units value="degrees celsius"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="PollingInterval" access="readWrite" version="2.1">
        <description>
          The interval, measured in {{units}}, in which the device polls this
          {{object}}.

          If the value is 0 then the device selects its own polling interval.

          If the value is greater than 0 then the device MUST use this value as
          the polling interval.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="HighAlarmTime" access="readOnly">
        <description>
          Initial time at which this temperature sensor's
          {{param|HighAlarmValue}} was encountered.

          This value is only set the first time the alarm is seen and not
          changed until the next reset.

          The Unknown Time value, as defined in {{bibref|TR-106}}, indicates
          that an alarm has not been encountered since the last reset.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.NetworkProperties." access="readOnly"
        minEntries="1" maxEntries="1" version="2.0">
      <description>
        This object defines the parameters that describe how the device handles
        network traffic.
      </description>

      <parameter name="MaxTCPWindowSize" access="readOnly">
        <description>
          The maximum number of {{units}} of outstanding data a sender can send
          on a particular connection prior to an acknowledgment
          {{bibref|RFC793}}. Any scaling factor SHOULD be included in this
          parameter {{bibref|RFC1323}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="bytes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="TCPImplementation" access="readOnly">
        <description>
          {{list}} Indicates the TCP congestion control mechanism(s)
          implemented. {{enum}}

          Tahoe, Reno, and New Reno are defined in {{bibref|RFC2582}}
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="Tahoe">
              <description>
                Represents the base TCP implementation in {{bibref|RFC793}} and
                elements of {{bibref|RFC2582}}
              </description>
            </enumeration>
            <enumeration value="Reno">
              <description>
                Represents the base TCP implementation in {{bibref|RFC793}}
                with the additional algorithms defined in {{bibref|RFC2581}}
              </description>
            </enumeration>
            <enumeration value="New Reno">
              <description>
                Described as a modification to the Reno algorithms in
                {{bibref|RFC2582}}
              </description>
            </enumeration>
            <enumeration value="Vegas">
              <description>
                An emerging TCP congestion control mechanism
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.Processor.{i}." access="readOnly"
        numEntriesParameter="ProcessorNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.1" status="deleted">
      <description>
        Each table entry represents a hardware or virtual processor that
        resides on this device.

        {{deprecated|2.18|because the only contained parameter, {{param|Architecture}},
        is no longer relevant for modern devices.}}

        {{deleted|2.21}}
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias" version="2.3"/>

      <parameter name="Architecture" access="readOnly">
        <description>
          The architecture of the processor on the underlying hardware.
          {{enum}}

          For processor architectures not included in this list, the vendor MAY
          include vendor-specific values, which MUST use the format defined in
          {{bibref|TR-106|Section 3.3}}.
        </description>
        <syntax>
          <string>
            <enumeration value="arm"/>
            <enumeration value="i386"/>
            <enumeration value="m68010"/>
            <enumeration value="m68k"/>
            <enumeration value="mipseb">
              <description>big-endian</description>
            </enumeration>
            <enumeration value="mipsel">
              <description>little-endian</description>
            </enumeration>
            <enumeration value="powerpc"/>
            <enumeration value="sh3eb">
              <description>big-endian</description>
            </enumeration>
            <enumeration value="sh3el">
              <description>little-endian</description>
            </enumeration>
            <enumeration value="x86_64"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.LogRotate.{i}." access="readWrite"
      enableParameter="Enable" numEntriesParameter="LogRotateNumberOfEntries"
      minEntries="0" maxEntries="unbounded" version="2.17">
      <description>
        This Object details the available rotation settings for vendor log file rotation.

        Based on {{bibref|YANGSYSLOG|A YANG Data Model for Syslog Configuration}}.
      </description>

      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the log rotation functionality for this item.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Name" access="readWrite">
        <description>
          Specifies the full path and filename of the log file that must be rotated.
          Which MUST use the uri scheme file {{bibref|RFC8089|The file URI Scheme}}.
        </description>
        <syntax>
          <dataType ref="FileURI"/>
        </syntax>
      </parameter>

      <parameter name="NumberOfFiles" access="readWrite">
        <description>
          Specifies the maximum number of log files retained.
          When during log rotation the maximum number of log files is reached,
          the oldest log file will be deleted.

          Specify ''1'' for implementations that only support one log file.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="MaxFileSize" access="readWrite">
        <description>
          Specifies the maximum log file size in {{units}}.
          Log events that arrive after the maximum file size is reached will cause the current log file to be closed
          and a new log file to be opened.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="RollOver" access="readWrite">
        <description>
          Specifies the length of time, in {{units}}, that log events should be written to a specific log file.
          Log events that arrive after the rollover period cause the current log file to be closed
          and a new log file to be opened.
        </description>
        <syntax>
          <unsignedInt>
            <units value="minutes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Retention" access="readWrite">
        <description>
          Specifies the length of time, in {{units}}, that completed/closed log event files
          should be stored in the file system before they are removed.
        </description>
        <syntax>
          <unsignedInt>
            <units value="minutes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Compression" access="readWrite">
        <description>
          Specifies the post-rotation compression method that must be applied
          exclusively on the initial log file in a rotation sequence.
        </description>
        <syntax>
          <string>
            <enumeration value="None"/>
            <enumeration value="GZIP"/>
            <enumeration value="BZIP2"/>
            <enumeration value="LZO"/>
            <enumeration value="XZ"/>
            <enumeration value="ZSTD"/>
          </string>
          <default type="object" value="None"/>
        </syntax>
      </parameter>

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

    <object name="Device.DeviceInfo.LogRotate.{i}.LogFile.{i}." access="readOnly"
        numEntriesParameter="LogFileNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.17">
      <description>
        Each table entry represents a Log File.

        This table of log files is informational only and does not allow the
        Controller to operate on these files in any way.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Name" access="readOnly">
        <description>
          Name of the rotated log file stored within the same directory that {{param|#.Name}} is specified.
          Which MUST use the uri scheme file {{bibref|RFC8089|The file URI Scheme}}.
        </description>
        <syntax>
          <dataType ref="FileURI"/>
        </syntax>
      </parameter>

      <parameter name="Size" access="readOnly">
        <description>
          The size of the log file in {{units}}. If the device doesn't
          know the file size then {{param}} will be 0.
        </description>
        <syntax>
          <unsignedInt>
            <units value="bytes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="LastChange" access="readOnly" activeNotify="canDeny">
        <description>
          Last modification date of the file specified by {{param|Name}}.
        </description>
        <syntax>
            <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.VendorLogFile.{i}." access="readOnly"
        numEntriesParameter="VendorLogFileNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.1">
      <description>
        Each table entry represents a Vendor Log File.

        This table of log files is informational only and does not allow the
        Controller to operate on these files in any way.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Name" access="readOnly">
        <description>
          Name of the log file.

          Typically this will be the full file system path, but provided that
          it is guaranteed to be unique across current and future log files, it
          MAY be a shorter name derived from the file system path, or be
          derived via another mechanism.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="MaximumSize" access="readOnly">
        <description>
          The maximum size of the log file in {{units}}. If the device doesn't
          know the maximum file size then {{param}} will be 0.
        </description>
        <syntax>
          <unsignedInt>
            <units value="bytes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Persistent" access="readOnly">
        <description>
          When {{true}}, the log file contents are preserved across a device
          reboot.

          When {{false}}, the log file contents will be purged when the device
          is rebooted.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.Location.{i}." access="readWrite"
        numEntriesParameter="LocationNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.4">
      <description>
        This object contains Location information.
      </description>
      <uniqueKey functional="true">
        <parameter ref="Source"/>
        <parameter ref="ExternalSource"/>
      </uniqueKey>

      <parameter name="Source" access="readOnly">
        <description>
          Identifies the source of the location data.
        </description>
        <syntax>
          <string>
            <enumeration value="GPS"/>
            <enumeration value="Barometer" version="2.21"/>
            <enumeration value="AGPS"/>
            <enumeration value="Manual"/>
            <enumeration value="External"/>
          </string>
          <default type="object" value="External"/>
        </syntax>
      </parameter>

      <parameter name="AcquiredTime" access="readOnly">
        <description>
          The time when the location was acquired.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="ExternalSource" access="readOnly">
        <description>
          URL, MAC address, or other identifier that identifies an "External"
          source of this location.

          Meaningful only if {{param|Source}} has a value of
          {{enum|External|Source}}, otherwise it MUST be {{empty}}.

          If {{param|ExternalProtocol}} has a value of
          {{enum|CWMP|ExternalProtocol}}, this is the URL or IP address of the
          Controller.
          If {{param|ExternalProtocol}} has a value of
          {{enum|USP|ExternalProtocol}}, this is the USP Endpoint of the
          Controller.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="ExternalProtocol" access="readOnly">
        <description>
          Protocol used to acquire a location from an "External" source.
          {{enum}}

          Meaningful only if {{param|Source}} has a value of
          {{enum|External|Source}}, otherwise it MUST be {{empty}}.
        </description>
        <syntax>
          <string>
            <enumeration value="">
              <description>{{empty}}</description>
            </enumeration>
            <enumeration value="CWMP"/>
            <enumeration value="USP" version="2.13"/>
            <enumeration value="OMA-DM"/>
            <enumeration value="SNMP"/>
            <enumeration value="UPnP"/>
            <enumeration value="HELD"/>
            <enumeration value="DHCPv4"/>
            <enumeration value="DHCPv6"/>
            <enumeration value="LLDP-MED"/>
            <enumeration value="MLP"/>
            <enumeration value="Other"/>
          </string>
          <default type="object" value="CWMP"/>
        </syntax>
      </parameter>

      <parameter name="DataObject" access="readWrite">
        <description>
          The currently valid location information.

          Writable only when {{param|ExternalProtocol}} has a value of
          {{enum|CWMP|ExternalProtocol}} or {{enum|USP|ExternalProtocol}}.

          If obtained through the local GPS/AGPS then the location information
          is formatted according to {{bibref|RFC5491}}.

          If obtained through the local Barometer then the location information
          is formatted according to {{bibref|RFC8428}}.

          If manually configured then location information will be
          XML-formatted according to {{bibref|RFC5491}} (geographical
          information) and {{bibref|RFC5139}} (civic addresses).

          If manually configured then location information will be
          XML-formatted according to {{bibref|RFC8428}} (barometric data).

          If obtained by an external source this is the location information as
          received.

          If it's an XML document (e.g. CWMP, OMA-DM, UPnP, HELD, MLP) the
          location information will be represented as-is, otherwise it will be
          converted to base64.

          CWMP or USP configured location information will be XML-formatted
          according to {{bibref|RFC5491}} (geographical information) and
          {{bibref|RFC5139}} (civic addresses).

          CWMP or USP configured location information will be XML-formatted
          according to {{bibref|RFC8428}} (barometric information) for Barometer.

          Only zero or one Location object instance with value
          {{enum|CWMP|ExternalProtocol}} MUST exist at any given time.
        </description>
        <syntax>
          <string>
            <size maxLength="2048"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.DeviceImageFile.{i}." access="readOnly"
        numEntriesParameter="DeviceImageNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.11">
      <description>
        This object describes an image of the device.
      </description>
      <uniqueKey functional="true">
        <parameter ref="Location"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Location" access="readOnly">
        <description>
          The location of the device that represents the image as the user
          looks at the front of the device in its typical orientation (e.g.,
          on-end, flat).
        </description>
        <syntax>
          <string>
            <enumeration value="Front"/>
            <enumeration value="Back"/>
            <enumeration value="Left"/>
            <enumeration value="Right"/>
            <enumeration value="Top"/>
            <enumeration value="Bottom"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Image" access="readOnly">
        <description>
          The device image in PNG, JPEG or GIF format.
        </description>
        <syntax>
          <base64/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.FirmwareImage.{i}." access="readOnly"
        numEntriesParameter="FirmwareImageNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.12">
      <description>
        Top-level object for mapping firmware images.

        This is a static table – the number of object instances in this table
        is defined by the firmware that is currently running.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Name" access="readOnly">
        <description>
          Firmware/software image name. Descriptive text of the image or
          filename.

          The value of {{param}} is {{empty}} if {{param|Status}} is anything
          other than {{enum|Active|Status}}, {{enum|Available|Status}},
          {{enum|InstallationFailed|Status}}, or
          {{enum|ActivationFailed|Status}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Version" access="readOnly">
        <description>
          A string identifying the version of the firmware image represented by
          this {{object}}. Whenever this firmware image is active (ie, the
          device has booted this firmware image), the value of the
          {{param|#.SoftwareVersion}} parameter MUST be the same as the value
          contained in this parameter.

          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''.

          The value of {{param}} is {{empty}} if {{param|Status}} is anything
          other than {{enum|Available|Status}},
          {{enum|InstallationFailed|Status}}, or
          {{enum|ActivationFailed|Status}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Available" access="readWrite">
        <description>
          Specifies whether or not this particular firmware image can be used
          by the Agent. An Agent will only attempt to boot this particular
          firmware image if this parameter value is set to {{true}}.

          This value MUST be set to {{true}} by the device whenever a new
          firmware image is installed.

          This value cannot be set to {{false}} if the firmware image is active
          or is referenced by the {{param|#.BootFirmwareImage}} parameter.

          Firmware image instances cannot be deleted, so a Controller MAY use
          this parameter to subsequently mark a particular firmware as being
          invalid, which will prevent the Agent from attempting to boot it.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          Status of the firmware image, as determined by the Agent. {{enum}}
        </description>
        <syntax>
          <string>
            <enumeration value="NoImage">
              <description>
                This Firmware Image instance is empty.

                This value could happen on an Agent that supports multiple
                firmware images, but only has a single image installed.
              </description>
            </enumeration>
            <enumeration value="Active" version="2.14">
              <description>
                This Firmware Image instance is the currently active image.
              </description>
            </enumeration>
            <enumeration value="Downloading">
              <description>
                This Firmware Image instance is being downloaded.
              </description>
            </enumeration>
            <enumeration value="Validating">
              <description>
                This Firmware Image instance has been downloaded, and is in the
                process of being validated.
              </description>
            </enumeration>
            <enumeration value="Available">
              <description>
                This Firmware Image instance has been downloaded, validated,
                and installed, and is ready to be activated.
              </description>
            </enumeration>
            <enumeration value="DownloadFailed">
              <description>
                The Agent has attempted to download this Firmware Image
                instance, but ultimately failed while retrieving it from the
                source URL.
              </description>
            </enumeration>
            <enumeration value="ValidationFailed">
              <description>
                The Agent has attempted to validate a Firmware Image downloaded
                to this instance, but ultimately failed while validating it.
              </description>
            </enumeration>
            <enumeration value="InstallationFailed">
              <description>
                The Agent has attempted to install a Firmware Image downloaded
                and validated to this instance, but ultimately failed while
                installing it.
              </description>
            </enumeration>
            <enumeration value="ActivationFailed">
              <description>
                The Agent has attempted to activate this Firmware Image instance,
                but ultimately the activation failed.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" version="2.21">
        <description>Date and time of when {{param|Status}} last changed.</description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="BootFailureLog" access="readOnly">
        <description>
          If the Agent is unable to boot into this firmware image, when
          specified, the Agent can use this parameter to record some
          information as to why the boot failed.

          If the Agent successfully boots into this firmware, the value of this
          parameter SHOULD be {{empty}}. When a new firmware image is installed
          into this object instance, this parameter MUST be cleared.

          The length of this string is defined as implementation-specific by
          the Agent.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.KernelFaults." access="readOnly" version="2.17">
      <description>
        A fault in the context of the Kernel refers to a situation where the kernel encounters a critical error or a bug that it cannot recover from.
        When this happens, the kernel generates a "fault message" or "kernel panic", which provides information about the error,
        the state of the system at the time of the error, and a stack trace of function calls leading up to the error.
      </description>

      <parameter name="StoragePath" access="readOnly">
        <description>
          Path where the Kernel faults logs must be stored.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="LastUpgradeCount" access="readOnly">
        <description>
          Total number of Kernel faults which occurred since last firmware upgrade.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PreviousBootCount" access="readOnly">
        <description>
          The number of Kernel faults which occurred during the previous boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBootCount" access="readOnly" version="2.21">
        <description>
          The number of Kernel faults which have occurred during the current boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="MinFreeSpace" access="readWrite">
        <description>
          Minimum free space in {{units}} on the device that must be free before attempting to create a {{object|KernelFault}} instance.
          This setting does not affect the counting of Kernel faults.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="RotateKernelFaultEntries" access="readWrite" version="2.19">
        <description>
          When enabled and once the maximum {{object|KernelFault}} entries as
          indicated by {{param|MaxKernelFaultEntries}} are reached,
          the oldest entry, determined by {{param|KernelFault.{i}.TimeStamp}},
          is removed to make space for a new one, which is assigned a new
          instance identifier and a new {{param|KernelFault.{i}.Alias}}.

          This setting does not affect the counting of Kernel faults.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
      <parameter name="MaxKernelFaultEntries" access="readWrite">
        <description>
          The maximum number of entries available in the {{object|KernelFault}} table.
          Defines the maximum number of {{object|KernelFault}} instances that can be stored on the device.

          When {{param|RotateKernelFaultEntries}} is {{false}} and this limit is hit, no new {{object|KernelFault}} instances will be created until sufficient Kernel fault instances are removed. When {{param|RotateKernelFaultEntries}} is {{true}} and this limit is hit, the table {{object|KernelFault}} is rotated as specified by {{param|RotateKernelFaultEntries}}.
          Set this parameter to 0 to completely disable the creation of {{object|KernelFault}} instances.

          Reducing the {{param}} will cause for the implementation to delete the oldest {{object|KernelFault}} instances.

          This setting does not affect the counting of Kernel faults.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

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

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

    <object name="Device.DeviceInfo.KernelFaults.KernelFault.{i}." access="readOnly"
        numEntriesParameter="KernelFaultNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.17">
      <description>
        Each table entry represents a Kernel fault that is stored on the device.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="FaultLocation" access="readOnly">
        <description>
          Specifies the location of where to create and keep the logs.
          Can either be a relative path or file within the {{param|#.StoragePath}} location.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="LastInstruction" access="readOnly">
        <description>
          The last instruction executed when the Kernel fault was triggered.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="TimeStamp" access="readOnly">
        <description>
          The time when the Kernel fault was registered.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="FirmwareVersion" access="readOnly">
        <description>
          The firmware version that triggered the Kernel fault.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="ProcessName" access="readOnly">
        <description>
          The name of the process that was active while the kernel fault occurred.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="Reason" access="readOnly">
        <description>
          The reason why the kernel fault occurred.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

    </object>

    <object name="Device.DeviceInfo.KernelFaults.Stats.{i}." access="readOnly"
        numEntriesParameter="StatsNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.21">
      <description>
        Each table entry represents statistics for a particular recorded Kernel Fault Type.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Type"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Type" access="readOnly" version="2.21">
        <description>
          The type of the Kernel fault for which this table entry contains the statistics.
        </description>
        <syntax>
          <string>
            <enumeration value="Unknown">
              <description>Kernel fault of unknown or unmatched type.</description>
            </enumeration>
            <enumeration value="PageFault">
              <description>Memory page not present or access violation.</description>
            </enumeration>
            <enumeration value="GeneralProtectionFault">
              <description>Illegal access to CPU-protected resource.</description>
            </enumeration>
            <enumeration value="InvalidOpcode">
              <description>Invalid or unsupported instruction encountered.</description>
            </enumeration>
            <enumeration value="DivideError">
              <description>Division by zero or invalid divide operation.</description>
            </enumeration>
            <enumeration value="DeviceNotAvailable">
              <description>Floating-point or SIMD unit not available.</description>
            </enumeration>
            <enumeration value="DoubleFault">
              <description>Second fault occurred during fault handling.</description>
            </enumeration>
            <enumeration value="StackSegmentFault">
              <description>Stack overflow or invalid stack segment.</description>
            </enumeration>
            <enumeration value="AlignmentCheck">
              <description>Misaligned memory access.</description>
            </enumeration>
            <enumeration value="MachineCheck">
              <description>Hardware machine check exception.</description>
            </enumeration>
            <enumeration value="MathFault">
              <description>Floating-point or SIMD arithmetic fault.</description>
            </enumeration>
            <enumeration value="Breakpoint">
              <description>Software breakpoint or trap instruction.</description>
            </enumeration>
            <enumeration value="DebugException">
              <description>Hardware single-step or watchpoint triggered.</description>
            </enumeration>
            <enumeration value="NMI">
              <description>Non-maskable interrupt received.</description>
            </enumeration>
            <enumeration value="SecurityException">
              <description>CPU-detected protection/security fault.</description>
            </enumeration>
            <enumeration value="Oops">
              <description>Recoverable kernel exception resulting in process termination.</description>
            </enumeration>
            <enumeration value="Panic">
              <description>Unrecoverable kernel fault causing system halt.</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpgradeCount" access="readOnly" version="2.21">
        <description>
          Total number of Kernel faults, of this type, which occurred since last firmware upgrade.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PreviousBootCount" access="readOnly" version="2.21">
        <description>
          The number of Kernel faults, of this type, which occurred during the previous boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBootCount" access="readOnly" version="2.21">
        <description>
          The number of Kernel faults, of this type, which have occurred during the current boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.DeviceInfo.ProcessFaults." access="readOnly" version="2.17">
      <description>
        Monitoring process faults and configuring the operating system to generate crash dumps and core files
        is essential for diagnosing and troubleshooting issues with applications and processes.
      </description>

      <parameter name="StoragePath" access="readOnly">
        <description>
          Path where the process fault logs must be stored.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="LastUpgradeCount" access="readOnly">
        <description>
          Total number of process faults which occurred since last firmware upgrade.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PreviousBootCount" access="readOnly">
        <description>
          The number of process faults which occurred during the previous boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBootCount" access="readOnly" version="2.21">
        <description>
          The number of process faults that have occurred during the current boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="MinFreeSpace" access="readWrite">
        <description>
          Minimum free space in {{units}} on the device that must be free before attempting to create a {{object|ProcessFault}} instance.
          This setting does not affect the counting of process faults.
        </description>
        <syntax>
          <unsignedInt>
            <units value="KiB"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="RotateProcessFaultEntries" access="readWrite" version="2.19">
        <description>
          When enabled and once the maximum {{object|ProcessFault}} entries as
          indicated by {{param|MaxProcessFaultEntries}} are reached,
          the oldest entry, determined by {{param|ProcessFault.{i}.TimeStamp}},
          is removed to make space for a new one, which is assigned a new
          instance identifier and a new {{param|ProcessFault.{i}.Alias}}.

          This setting does not affect the counting of Process faults.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="MaxProcessFaultEntries" access="readWrite">
        <description>
          The maximum number of entries available in the {{object|ProcessFault}} table.
          Defines the maximum number of {{object|ProcessFault}} instances that can be stored on the device.

          When {{param|RotateProcessFaultEntries}} is {{false}} and this limit is hit, no new {{object|ProcessFault}} instances will be created until sufficient Process fault instances are removed. When {{param|RotateProcessFaultEntries}} is {{true}} and this limit is hit, the table {{object|ProcessFault}} is rotated as specified by {{param|RotateProcessFaultEntries}}.
          Set this parameter to 0 to completely disable the creation of {{object|ProcessFault}} instances.

          Reducing the {{param}} will cause for the implementation to delete the oldest {{object|ProcessFault}} instances.

          This setting does not affect the counting of process faults.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

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

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

    <object name="Device.DeviceInfo.ProcessFaults.ProcessFault.{i}." access="readOnly"
        numEntriesParameter="ProcessFaultNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.17">
      <description>
        Each table entry represents a process fault that is stored on the device.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="ProcessID" access="readOnly">
        <description>
          Process ID of the process that crashed.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="ProcessName" access="readOnly">
        <description>
          Process Name of the process that crashed.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="FaultLocation" access="readOnly">
        <description>
          Specifies the location of where to create and keep the process fault logs.
          Can either be a relative path or file within the {{param|#.StoragePath}} location.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="TimeStamp" access="readOnly">
        <description>
          The time when the process fault occurred.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="FirmwareVersion" access="readOnly">
        <description>
          The firmware version that triggered the process fault.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="Arguments" access="readOnly">
        <description>
          The command arguments that were used to start to the process.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

      <parameter name="Reason" access="readOnly">
        <description>
          The reason why the process fault occurred.
        </description>
        <syntax>
          <string/>
        </syntax>
      </parameter>

    </object>

    <object name="Device.DeviceInfo.ProcessFaults.Stats.{i}." access="readOnly"
        numEntriesParameter="StatsNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.21">
      <description>
        Each table entry represents statistics for a particular recorded Process Fault Type.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Type"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Type" access="readOnly" version="2.21">
        <description>
          The type of the process fault for which this table entry contains the statistics.
        </description>
        <syntax>
          <string>
            <enumeration value="Unknown">
              <description>Process fault of unknown or unmatched type.</description>
            </enumeration>
            <enumeration value="SegmentationFault">
              <description>Invalid memory reference (SIGSEGV).</description>
            </enumeration>
            <enumeration value="BusError">
              <description>Invalid physical memory access (SIGBUS).</description>
            </enumeration>
            <enumeration value="IllegalInstruction">
              <description>Invalid or privileged instruction (SIGILL).</description>
            </enumeration>
            <enumeration value="FloatingPointException">
              <description>Arithmetic fault such as divide by zero (SIGFPE).</description>
            </enumeration>
            <enumeration value="Abort">
              <description>Process aborted (SIGABRT).</description>
            </enumeration>
            <enumeration value="Trap">
              <description>Breakpoint or trace trap (SIGTRAP).</description>
            </enumeration>
            <enumeration value="BadSystemCall">
              <description>Invalid or blocked system call (SIGSYS).</description>
            </enumeration>
            <enumeration value="OOMKilled">
              <description>Killed by kernel Out-Of-Memory killer (SIGKILL).</description>
            </enumeration>
            <enumeration value="BrokenPipe">
              <description>Write to a closed pipe or socket (SIGPIPE).</description>
            </enumeration>
            <enumeration value="HangUp">
              <description>Terminal hangup or disconnect (SIGHUP).</description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpgradeCount" access="readOnly" version="2.21">
        <description>
          Total number of process faults, of this type, which occurred since last firmware upgrade.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PreviousBootCount" access="readOnly" version="2.21">
        <description>
          The number of process faults, of this type, which occurred during the previous boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBootCount" access="readOnly" version="2.21">
        <description>
          The number of process faults, of this type, which have occurred during the current boot cycle.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <profile name="MemoryStatus:1" version="2.0">
      <object ref="Device.DeviceInfo.MemoryStatus." requirement="present">
        <parameter ref="Total" requirement="readOnly"/>
        <parameter ref="Free" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="ProcessStatus:1" version="2.0">
      <object ref="Device.DeviceInfo.ProcessStatus." requirement="present">
        <parameter ref="CPUUsage" requirement="readOnly"/>
        <parameter ref="ProcessNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DeviceInfo.ProcessStatus.Process.{i}."
          requirement="present">
        <parameter ref="PID" requirement="readOnly"/>
        <parameter ref="Command" requirement="readOnly"/>
        <parameter ref="Size" requirement="readOnly"/>
        <parameter ref="Priority" requirement="readOnly"/>
        <parameter ref="CPUTime" requirement="readOnly"/>
        <parameter ref="State" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="TempStatus:1" version="2.0">
      <object ref="Device.DeviceInfo.TemperatureStatus." requirement="present">
        <parameter ref="TemperatureSensorNumberOfEntries"
            requirement="readOnly"/>
      </object>
      <object ref="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}."
          requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="ResetTime" requirement="readOnly"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="Value" requirement="readOnly"/>
        <parameter ref="LastUpdate" requirement="readOnly"/>
        <parameter ref="MinValue" requirement="readOnly"/>
        <parameter ref="MinTime" requirement="readOnly"/>
        <parameter ref="MaxValue" requirement="readOnly"/>
        <parameter ref="MaxTime" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="Processors:1" version="2.1" status="deleted">
      <object ref="Device.DeviceInfo.Processor.{i}." requirement="present">
        <parameter ref="Architecture" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="VendorLogFiles:1" version="2.1">
      <object ref="Device.DeviceInfo.VendorLogFile.{i}." requirement="present">
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="MaximumSize" requirement="readOnly"/>
        <parameter ref="Persistent" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="Location:1" version="2.4">
      <object ref="Device.DeviceInfo." requirement="present">
        <parameter ref="LocationNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DeviceInfo.Location.{i}." requirement="createDelete">
        <parameter ref="Source" requirement="readOnly"/>
        <parameter ref="AcquiredTime" requirement="readOnly"/>
        <parameter ref="ExternalSource" requirement="readOnly"/>
        <parameter ref="ExternalProtocol" requirement="readOnly"/>
        <parameter ref="DataObject" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="DeviceImage:1" version="2.11">
      <object ref="Device.DeviceInfo." requirement="present">
        <parameter ref="DeviceImageNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.DeviceInfo.DeviceImageFile.{i}."
          requirement="present">
        <parameter ref="Location" requirement="readOnly"/>
        <parameter ref="Image" requirement="readOnly"/>
      </object>
    </profile>
  </component>

  <component name="DeviceInfoUSP">
    <object base="Device.DeviceInfo.">
      <parameter name="LastRebootRef" access="readOnly" version="2.21">
        <description>
          This parameter specifies the last known reason why the device rebooted, which contains
          information about the reboot reason, cause and timestamp.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetType="row" targetParent="Reboots.Reboot."/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object base="Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.">
      <event name="HighTemperatureAlarm!" version="2.20">
        <description>
          This event is triggered when the temperature sensor detects a high temperature.
          If the {{param|Enable}} parameter is {{true}}, the event is triggered exactly once when the
          {{param|Value}} value rises above {{param|HighAlarmValue}}.
        </description>

        <parameter name="Value">
          <description>
            The current temperature value that triggered the event.
            This value is in {{units}}.
          </description>
          <syntax>
            <int>
              <units value="degrees celsius"/>
              <range minInclusive="-274"/>
            </int>
          </syntax>
        </parameter>
      </event>

      <event name="LowTemperatureAlarm!" version="2.20">
        <description>
          This event is triggered when the temperature sensor detects a low temperature.
          If the {{param|Enable}} parameter is {{true}}, the event is triggered exactly once when the
          {{param|Value}} value falls below {{param|LowAlarmValue}}.
        </description>

        <parameter name="Value">
          <description>
            The current temperature value that triggered the event.
            This value is in {{units}}.
          </description>
          <syntax>
            <int>
              <units value="degrees celsius"/>
              <range minInclusive="-274"/>
            </int>
          </syntax>
        </parameter>
      </event>
    </object>

    <object base="Device.DeviceInfo.KernelFaults." access="readOnly">
      <command name="RemoveAllKernelFaults()" async="true" version="2.17">
        <description>
          This command removes all the {{object|KernelFault.{i}.}} from the device, together with all the associated Kernel fault data stored on the device.
        </description>
      </command>
    </object>

    <object base="Device.DeviceInfo.KernelFaults.KernelFault.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      
      <component ref="UploadCommand" version="2.17"/>
      
      <command name="Remove()" async="true" version="2.17">
        <description>
          Remove this row from the table, together with the associated Kernel fault data stored on the device.
        </description>
      </command>
    </object>

    <object base="Device.DeviceInfo.ProcessFaults." access="readOnly">
      <command name="RemoveAllProcessFaults()" async="true" version="2.17">
        <description>
          This command removes all the {{object|ProcessFault.{i}.}} from the device, together with all the associated faulty data stored on the device.
        </description>
      </command>
    </object>

    <object base="Device.DeviceInfo.ProcessFaults.ProcessFault.{i}." access="readOnly" minEntries="0" maxEntries="unbounded">
      
      <component ref="UploadCommand" version="2.17"/>
      
      <command name="Remove()" async="true" version="2.17">
        <description>
          Remove this row from the table, together with the associated faulty data stored on the device.
        </description>
      </command>
    </object>

    <object name="Device.DeviceInfo.Reboots." access="readOnly" version="2.18">
      <description>
        The monitoring of reboot reasons is essential for diagnosing and troubleshooting
        issues with applications and processes running on the Device.
      </description>


      <parameter name="BootCount" access="readOnly">
        <description>
          The number of times the device has rebooted since the last factory reset.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentVersionBootCount" access="readOnly">
        <description>
          The number of times the device has rebooted since the latest firmware update.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="WatchdogBootCount" access="readOnly">
        <description>
          The number of times the device has rebooted by a sw/hw watchdog since the last factory reset.

          The watchdog is a component within the operating system kernel or Device responsible for monitoring user-space activities.
          If it detects non-responsiveness in user-space processes, it triggers a reboot of the device.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBootCycle" access="readOnly" version="2.20">
        <description>
          The current boot cycle of the device (e.g. Warm or Cold).
        </description>
        <syntax>
          <string>
            <enumeration value="Unknown">
              <description>
                The device's boot cycle could not be determined.
              </description>
            </enumeration>
            <enumeration value="Warm">
              <description>
                The device performed a warm boot.

                This typically occurs during a restart without a full power cycle (e.g. a
                software-initiated restart).
              </description>
            </enumeration>
            <enumeration value="Cold">
              <description>
                The device performed a cold boot.
                
                This indicates that power was applied to the device from a completely off state.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="ColdBootCount" access="readOnly">
        <description>
          The number of times the device has cold rebooted since the last factory reset.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="WarmBootCount" access="readOnly">
        <description>
          The number of times the device has warm rebooted since the last factory reset.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="MaxRebootEntries" access="readWrite">
        <description>
          The maximum number of entries available in the {{object|Reboot}} table.
          Defines the maximum number of {{object|Reboot}} instances that can be stored on the device.

          When the maximum {{object|Reboot}} entries as indicated by {{param}} are reached,
          the next boot entry overrides the object with the oldest {{param|Reboot.{i}.TimeStamp}}.

          Set this parameter to 0 to completely disable the creation of {{object|Reboot}} instances.

          Set this parameter to -1 to leave it open to the implementation to decide
          the maximum number of {{object|Reboot}} instances that may be stored on the device.

          Reducing the {{param}} will cause for the implementation to delete the oldest {{object|Reboot}} instances.

          This setting does not affect the counting of reboots.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
          </int>
        </syntax>
      </parameter>

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

      <command name="RemoveAllReboots()" async="true" version="2.18">
        <description>
          Removes all the {{object|Reboot.{i}.}} instances from the device, together with the associated data stored on the device.
        </description>
      </command>
    </object>

    <object name="Device.DeviceInfo.Reboots.Reboot.{i}." access="readOnly"
        numEntriesParameter="RebootNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.18">
      <description>
        Each table entry represents a reboot reason that is stored on the device.

        When the maximum {{object}} entries as indicated by {{param|#.MaxRebootEntries}} are reached,
        the next boot entry overrides the object with the oldest {{param|TimeStamp}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="TimeStamp"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="TimeStamp" access="readOnly">
        <description>
          The time when the reboot occurred.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="FirmwareUpdated" access="readOnly">
        <description>
          {{true}} if the Device was rebooted as a result of a firmware update; otherwise {{false}}.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <component ref="CauseOfBoot" version="2.18"/>

      <parameter name="Reason" access="readOnly">
        <description>
          The reason of the boot (e.g. power on reset, watchdog, overheat, FAN fault, web user interface, ...).
        </description>
        <syntax>
          <string/>
          <default type="implementation" value="Unknown"/>
        </syntax>
      </parameter>

      <command name="Remove()" async="true">
        <description>
          Remove this row from the table, together with the associated data stored on the device.
        </description>
      </command>
    </object>

    <object name="Device.DeviceInfo.BootTiming." access="readOnly" minEntries="1" maxEntries="1" version="2.21">
      <description>
        Boot performance metrics for monitoring and analyzing device boot time and milestones.

        This object provides detailed historical timing metrics for the most recent boot cycle,
        allowing for performance analysis and troubleshooting of boot-related issues.
      </description>

      <parameter name="BootStartTime" access="readOnly">
        <description>
          The timestamp when the boot process started. 
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="BootCompleteTime" access="readOnly">
        <description>
          The timestamp of when the boot (of all systems) is complete.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="BootDuration" access="readOnly">
        <description>
          Duration of the most recent boot ({{param|BootCompleteTime}} - {{param|BootStartTime}}), in {{units}}.
          This value is calculated by the device as a convenience, since it can also be derived by the controller.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

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

    <object name="Device.DeviceInfo.BootTiming.LastBootMilestone.{i}." access="readOnly"
        numEntriesParameter="LastBootMilestoneNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.21">
      <description>
        Each table entry represents a milestone reached during the boot process referenced by
        {{param|##.LastRebootRef}}. This table is cleared and repopulated on each new boot.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="BootStage"/>
      </uniqueKey>

      <component ref="Alias"/>

      <component ref="BootStage"/>

      <parameter name="TimeStamp" access="readOnly">
        <description>
          The timestamp when this boot milestone was reached.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object base="Device.DeviceInfo.MemoryStatus.MemoryMonitor." access="readOnly">
      <parameter base="CriticalRiseThreshold" access="readWrite">
        <description action="append">
          * A {{event|MemoryCriticalState!}} event is generated along with Mem stats indicating
            critical condition is reached.
        </description>
      </parameter>

      <event name="MemoryCriticalState!" version="2.18">
        <description>
          This event is generated indicating critical condition is reached i.e., when
          {{param|MemUtilization}} exceeds the rise threshold, the event is generated.
        </description>

        <parameter name="MemUtilization" version = "2.18">
          <description>
            Memory utilization, in {{units}}, rounded to the nearest
            whole {{units}}, collected at the polling interval.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="100"/>
              <units value="percent"/>
            </unsignedInt>
          </syntax>
        </parameter>
      </event>
    </object>

    <object base="Device.DeviceInfo.ProcessStatus.CPU.{i}." access="readOnly">
      <parameter base="CriticalRiseThreshold">
        <description action="append">
          * A {{event|CPUCriticalState!}} event is generated along with CPU Utilization indicating
            critical condition is reached.
        </description>
      </parameter>

      <event name="CPUCriticalState!" version="2.18">
        <description>
          This event is generated indicating critical condition is reached i.e., when
          the rise threshold is crossed, the event is generated.
        </description>

        <parameter name="CPUUtilization" version = "2.18">
          <description>
            CPU utilization, in {{units}}, rounded to the nearest
            whole {{units}}.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="100"/>
              <units value="percent"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="Name" version="2.18">
          <description>
            Name of this CPU. This text MUST be sufficient to
            distinguish this CPU from other CPUs.
          </description>
          <syntax>
            <string>
              <size maxLength="256"/>
            </string>
          </syntax>
        </parameter>
      </event>
    </object>
  </component>

  <component name="UploadCommand">
    <command name="Upload()" async="true" version="2.12">
      <description>
        This command is issued to upload the log information specified by this
        {{object}} instance.

        All results of the actual upload will be contained within the
        {{event|.LocalAgent.TransferComplete!}} event.
      </description>
      <input>
        <parameter name="URL" mandatory="true">
          <description>
            The {{datatype}} specifying the destination file location. The
            HTTPS transport MUST be supported, and the HTTP transport MAY 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>
           <dataType ref="URL"/>
          </syntax>
        </parameter>

        <parameter name="Username" mandatory="false">
          <description>
            Username to be used by the Agent to authenticate with the file
            server. If {{param}} is not provided or is set to {{empty}}, an alternative form of
            authentication (e.g., certificate-based authentication) is required.

            Note: The mandatory requirement for this parameter was removed in Device:2.20.
          </description>
          <syntax>
            <string>
               <size maxLength="256"/>
            </string>
          </syntax>
        </parameter>

        <parameter name="Password" mandatory="false">
          <description>
            Password to be used by the Agent to authenticate with the file
            server. If {{param}} is not provided or is set to {{empty}}, an alternative form of
            authentication (e.g., certificate-based authentication) is required.

            Note: The mandatory requirement for this parameter was removed in Device:2.20.
          </description>
          <syntax>
            <string>
              <size maxLength="256"/>
            </string>
          </syntax>
        </parameter>

        <component ref="ClientCerts" version="2.20"/>
      </input>
    </command>
  </component>

  <model name="DeviceInfo:2.21">
    <component ref="Root"/>
    <component ref="DeviceInfo"/>
  </model>
</dm:document>
