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

  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-upnp"
    file="tr-181-2-21-0-upnp.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">
    <dataType name="URL"/>
    <dataType name="UUID"/>
  </import>

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

  <component name="UPnP">

    <object name="Device.UPnP." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        This object contains all UPnP related objects and parameters including
        Device and Discovery related objects and parameters.
      </description>
    </object>

    <object name="Device.UPnP.Device." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        This object defines the UPnP devices and UPnP services that are
        implemented by the CPE.
      </description>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables/Disables UPnP support.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPMediaServer" access="readWrite">
        <description>
          Enables/Disables UPnP Media Server.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPMediaRenderer" access="readWrite">
        <description>
          Enables/Disables UPnP Media Renderer.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPWLANAccessPoint" access="readWrite">
        <description>
          Enables/Disables UPnP Wireless Access Point.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPQoSDevice" access="readWrite">
        <description>
          Enables/Disables UPnP QoS Device.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPQoSPolicyHolder" access="readWrite">
        <description>
          Enables/Disables UPnP QoS Policy Holder.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPIGD" access="readWrite">
        <description>
          Enables/Disables UPnP IGD.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMBasicMgmt" access="readWrite">
        <description>
          Enables/Disables UPnP-DM Basic Management.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMConfigurationMgmt" access="readWrite">
        <description>
          Enables/Disables UPnP-DM Configuration Management.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMSoftwareMgmt" access="readWrite">
        <description>
          Enables/Disables UPnP-DM Software Management.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Device.Capabilities." access="readOnly"
        minEntries="1" maxEntries="1" version="2.0">
      <description>
        This object defines what UPnP capabilities this device has.
      </description>

      <parameter name="UPnPArchitecture" access="readOnly">
        <description>
          Numeric value indicating the major version of the supported UPnP
          architecture.

          If UPnP 1.1 is supported the value is 1. If UPnP 2.0 is supported the
          value is 2.

          A value of 0 indicates no UPnP support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPArchitectureMinorVer" access="readOnly">
        <description>
          Numeric value indicating the minor version of the supported UPnP
          architecture.

          If UPnP 1.1 is supported the value is 1. If UPnP 2.0 is supported the
          value is 0.

          If {{param|UPnPArchitecture}} is 0 then this parameter SHOULD be
          ignored.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPMediaServer" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Media
          Server.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPMediaRenderer" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Media
          Renderer.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPWLANAccessPoint" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Wireless
          Access Point.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPBasicDevice" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Basic
          Device.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPQoSDevice" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Qos Device.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPQoSPolicyHolder" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP Qos Policy
          Holder.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPIGD" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP IGD.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMBasicMgmt" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP-DM Basic
          Management.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMConfigurationMgmt" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP-DM
          Configuration Management.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="UPnPDMSoftwareMgmt" access="readOnly">
        <description>
          Numeric value indicating the supported revision for UPnP-DM Software
          Management.

          A value of 0 indicates no support.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Discovery." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        UPnP {{bibref|UPnP-DAv1}} SSDP discovered root devices, embedded
        devices and embedded services.

        The CPE MAY, but need not, retain some or all of the information in
        this object across reboots.
      </description>

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

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

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

    <object name="Device.UPnP.Discovery.RootDevice.{i}." access="readOnly"
        numEntriesParameter="RootDeviceNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.0">
      <description>
        UPnP root device table. This table contains an entry for each UPnP root
        device that has been discovered via SSDP.
      </description>
      <uniqueKey functional="true">
        <parameter ref="UUID"/>
      </uniqueKey>

      <parameter name="Status" access="readOnly">
        <description>
          The status of the UPnP root device. {{enum}}

          The ability to list inactive UPnP root devices is OPTIONAL. The
          length of time an inactive device remains listed in this table is a
          local matter to the CPE.
        </description>
        <syntax>
          <string>
            <enumeration value="LeaseActive">
              <description>
                Device is active and UPnP lease has not expired.
              </description>
            </enumeration>
            <enumeration value="LeaseExpired">
              <description>
                Device is inactive because UPnP lease has expired.
              </description>
            </enumeration>
            <enumeration value="ByebyeReceived">
              <description>
                Device is inactive because byebye message was received.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="UUID" access="readOnly">
        <description>
          This UPnP root device's UUID (Universally Unique IDentifier)
          {{bibref|RFC4122}}, extracted from any of its USN (Unique Service
          Name) headers. This is a 36-byte string that uniquely identifies the
          device, the following is an example:

          : ''02c29d2a-dbfd-2d91-99c9-306d537e9856''

          {{pattern}}
        </description>
        <syntax>
          <string>
            <size maxLength="36"/>
            <pattern
                value="[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="USN" access="readOnly">
        <description>
          The value of the USN (Unique Service Name) header for this UPnP root
          device. Three discovery messages are sent for root devices, and this
          SHOULD be the value of the USN header of the following form:

          : ''uuid:device-UUID::urn:domain-name:device:deviceType:v''

          SSDP is an unreliable protocol and it is possible that no discovery
          message containing the USN header of the above form was ever
          received. If so, one of the other two forms MAY be used:

          : ''uuid:device-UUID::upnp:rootdevice''

          : ''uuid:device-UUID'' (for root device UUID)
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LeaseTime" access="readOnly">
        <description>
          The UPnP root device lease time in {{units}}, extracted from the
          CACHE-CONTROL header.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Location" access="readOnly">
        <description>
          The value of the LOCATION header for this UPnP root device, which is
          the {{datatype}} of the root device's DDD (Device Description
          Document).
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="Server" access="readOnly">
        <description>
          The value of the SERVER header for this UPnP root device, which is a
          string of the following form:

          : ''OS/version UPnP/udaversion product/version''

          where '''UPnP''' is a literal string, '''udaversion''' is the version
          of the UPnP Device Architecture.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Host" access="readOnly">
        <description>
          Indicates the full path names of all Host table entries, whether
          active or inactive, that correspond to this UPnP root device.
        </description>
        <syntax>
          <list/>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.Hosts.Host."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" version="2.6">
        <description>
          The date and time at which the last advertisement from this
          {{object}} was received.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Discovery.Device.{i}." access="readOnly"
        numEntriesParameter="DeviceNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.0">
      <description>
        UPnP embedded device table. This table contains an entry for each UPnP
        embedded device that has been discovered via SSDP.
      </description>
      <uniqueKey functional="true">
        <parameter ref="UUID"/>
      </uniqueKey>

      <parameter name="Status" access="readOnly">
        <description>
          The status of the UPnP embedded device. {{enum}}

          The ability to list inactive UPnP embedded devices is OPTIONAL. The
          length of time an inactive device remains listed in this table is a
          local matter to the CPE.
        </description>
        <syntax>
          <string>
            <enumeration value="LeaseActive">
              <description>
                Device is active and UPnP lease has not expired.
              </description>
            </enumeration>
            <enumeration value="LeaseExpired">
              <description>
                Device is inactive because UPnP lease has expired.
              </description>
            </enumeration>
            <enumeration value="ByebyeReceived">
              <description>
                Device is inactive because byebye message was received.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="UUID" access="readOnly">
        <description>
          This UPnP embedded device's UUID (Universally Unique IDentifier)
          {{bibref|RFC4122}}, extracted from any of its USN (Unique Service
          Name) headers. This is a 36-byte string that uniquely identifies the
          device, the following is an example:

          : ''02c29d2a-dbfd-2d91-99c9-306d537e9856''

          {{pattern}}
        </description>
        <syntax>
          <string>
            <size maxLength="36"/>
            <pattern
                value="[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="USN" access="readOnly">
        <description>
          The value of the USN (Unique Service Name) header for this UPnP
          embedded device. Two discovery messages are sent for embedded
          devices, and this SHOULD be the value of the USN header of the
          following form:

          : ''uuid:device-UUID::urn:domain-name:device:deviceType:v''

          SSDP is an unreliable protocol and it is possible that no discovery
          message containing the USN header of the above form was ever
          received. If so, the other form MAY be used:

          : ''uuid:device-UUID''
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LeaseTime" access="readOnly">
        <description>
          The UPnP embedded device lease time in {{units}}, extracted from the
          CACHE-CONTROL header.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Location" access="readOnly">
        <description>
          The value of the LOCATION header for this UPnP embedded device, which
          is the {{datatype}} of the root device's DDD (Device Description
          Document).
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="Server" access="readOnly">
        <description>
          The value of the SERVER header for this UPnP embedded device, which
          is a string of the following form:

          : ''OS/version UPnP/udaversion product/version''

          where '''UPnP''' is a literal string, '''udaversion''' is the version
          of the UPnP Device Architecture.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Host" access="readOnly">
        <description>
          Indicates the full path names of all Host table entries, whether
          active or inactive, that correspond to this UPnP embedded device.
        </description>
        <syntax>
          <list maxItems="1024"/>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.Hosts.Host."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" version="2.6">
        <description>
          The date and time at which the last advertisement from this
          {{object}} was received.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Discovery.Service.{i}." access="readOnly"
        numEntriesParameter="ServiceNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.0">
      <description>
        UPnP embedded service table. This table contains an entry for each UPnP
        embedded service that has been discovered via SSDP.
      </description>
      <uniqueKey functional="true">
        <parameter ref="USN"/>
      </uniqueKey>

      <parameter name="Status" access="readOnly">
        <description>
          The status of the UPnP embedded service. {{enum}}

          The ability to list inactive UPnP embedded services is OPTIONAL. The
          length of time an inactive service remains listed in this table is a
          local matter to the CPE.
        </description>
        <syntax>
          <string>
            <enumeration value="LeaseActive">
              <description>
                Service is active and UPnP lease has not expired.
              </description>
            </enumeration>
            <enumeration value="LeaseExpired">
              <description>
                Service is inactive because UPnP lease has expired.
              </description>
            </enumeration>
            <enumeration value="ByebyeReceived">
              <description>
                Service is inactive because byebye message was received.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="USN" access="readOnly">
        <description>
          The value of the USN (Unique Service Name) header for this UPnP
          embedded service. This is of the following form:

          : ''uuid:device-UUID::urn:domain-name:service:serviceType:v''
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LeaseTime" access="readOnly">
        <description>
          The UPnP embedded service lease time in {{units}}, extracted from the
          CACHE-CONTROL header.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Location" access="readOnly">
        <description>
          The value of the LOCATION header for this UPnP embedded service,
          which is the {{datatype}} of the root device's DDD (Device
          Description Document).
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="Server" access="readOnly">
        <description>
          The value of the SERVER header for this UPnP embedded service, which
          is a string of the following form:

          : ''OS/version UPnP/udaversion product/version''

          where '''UPnP''' is a literal string, '''udaversion''' is the version
          of the UPnP Device Architecture.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Host" access="readOnly">
        <description>
          Indicates the full path names of all Host table entries, whether
          active or inactive, that correspond to this UPnP embedded service.
        </description>
        <syntax>
          <list maxItems="1024"/>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.Hosts.Host."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastUpdate" access="readOnly" version="2.6">
        <description>
          The date and time at which the last advertisement from this
          {{object}} was received.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="ParentDevice" access="readOnly" version="2.6">
        <description>
          {{reference|the {{object|#.RootDevice}} or {{object|#.Device}} table
          entries that embeds this {{object}}}} This parameter is populated by
          extracting the "device-UUID" from the service's USN and matching the
          value against the root device or embedded device UUID value.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef
                refType="strong"
                targetParent="
                  #.RootDevice.
                  #.Device."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Description." access="readOnly" minEntries="1"
        maxEntries="1" version="2.6">
      <description>
        This object contains information from the Description Document
        discovered from the UPnP Devices and Services.
      </description>

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

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

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

    <object name="Device.UPnP.Description.DeviceDescription.{i}."
        access="readOnly"
        numEntriesParameter="DeviceDescriptionNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.6">
      <description>
        This table contains information read from the Device Description
        Document of discovered root devices.

        The CPE MAY, but need not, retain some or all of the information in
        this table after the associated SSDP advertisement (objects in the
        UPnP.Discovery. object tables) expires.

        In case the SSDP advertisement expires and the CPE deletes the related
        instances from the tables in UPnP.Discovery., the reference to such
        instances MUST be set to the empty string.
      </description>
      <uniqueKey functional="true">
        <parameter ref="URLBase"/>
      </uniqueKey>

      <parameter name="URLBase" access="readOnly">
        <description>
          The value extracted from the URLBase element in the Device
          Description Document of the discovered root device. If the URLBase
          element in the root device's Device Description Document is empty or
          absent, the {{datatype}} from which the device description was
          retrieved (e.g. the LOCATION from the SSDP message) is utilized as
          the URLBase.

          Note: the URLBase element is not recommended by {{bibref|UPnP-DAv1}}
          and is not permitted by {{bibref|UPnP-DAv11}}, so the value of
          {{param}} will usually be the URL from which the device description
          was retrieved.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="SpecVersion" access="readOnly">
        <description>
          The UPnP Device Architecture version extracted from the specVersion
          element in the Device Description Document of the discovered root
          device. The {{param}} is encoded as "major revision.minor revision".
          {{pattern}}
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pattern value="\d+\.\d+"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Host" access="readOnly">
        <description>
          Includes the Host table entries associated with the root device from
          which the device description was retrieved.
        </description>
        <syntax>
          <list maxItems="1024"/>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="###.Hosts.Host."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Description.DeviceInstance.{i}."
        access="readOnly" numEntriesParameter="DeviceInstanceNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.6">
      <description>
        This table contains the information from Device Description Document
        retrieved for a discovered UPnP root or embedded device.
      </description>
      <uniqueKey functional="true">
        <parameter ref="UDN"/>
      </uniqueKey>

      <parameter name="UDN" access="readOnly">
        <description>
          Unique Device Name of this device represented as a UUID for the
          device.

          This value is extracted from the UDN element in the Device
          Description Document with the leading uuid: removed.
        </description>
        <syntax>
          <dataType ref="UUID"/>
        </syntax>
      </parameter>

      <parameter name="ParentDevice" access="readOnly">
        <description>
          {{reference|a {{object}} table entry (if this is an embedded device)
          or {{empty}} (if this is a root device)}}
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="#.DeviceInstance."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="DiscoveryDevice" access="readOnly">
        <description>
          {{reference|a {{object|##.Discovery.RootDevice}} table entry (if this
          is a root device) or a {{object|##.Discovery.Device}} table entry (if
          this is an embedded device)}}

          This {{param}} value can be {{empty}} because the referenced object
          has been deleted or the CPE was unable to retrieve the Description
          Document due to some out-of-band error. The determination to delete
          this {{object}} or use {{empty}} is implementation specific.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef
                refType="strong"
                targetParent="
                  ##.Discovery.Device.
                  ##.Discovery.RootDevice."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="DeviceType" access="readOnly">
        <description>
          The value of the UPnP deviceType element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="FriendlyName" access="readOnly">
        <description>
          The value of the UPnP friendlyName element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="DeviceCategory" access="readOnly" version="2.8">
        <description>
          Each list item is the value of an element in the Device Description
          Document for this {{object}} that indicates 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 the ''htip:X_DeviceCategory'' Device
          Description Document element is 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.

          Note: {{param}} is different from {{param|DeviceType}} and is
          included here for the purpose of HTIP usage.
        </description>
        <syntax>
          <list/>
          <string/>
        </syntax>
      </parameter>

      <parameter name="Manufacturer" access="readOnly">
        <description>
          The value of the UPnP manufacturer element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ManufacturerOUI" access="readOnly" version="2.8">
        <description>
          The value of an element in the Device Description Document for this
          {{object}} that indicates the manufacturer OUI if this value is
          provided by the device; or {{empty}} if this value is not provided by
          the device.

          {{pattern}}

          Note: It is assumed that the ''htip:X_ManufacturerOUI'' element is
          used for HTIP (Home-network Topology Identifying Protocol)
          {{bibref|JJ-300.00}} and {{bibref|G.9973}}.
        </description>
        <syntax>
          <string>
            <size minLength="0" maxLength="6"/>
            <pattern value=""/>
            <pattern value="[0-9A-F]{6}"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ManufacturerURL" access="readOnly">
        <description>
          The value of the UPnP manufacturerURL element in the Device
          Description Document for this {{object}}, or {{empty}} if this value
          is not provided by the device.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="ModelDescription" access="readOnly">
        <description>
          The value of the UPnP modelDescription element in the Device
          Description Document for this {{object}}, or {{empty}} if this value
          is not provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ModelName" access="readOnly">
        <description>
          The value of the UPnP modelName element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ModelNumber" access="readOnly">
        <description>
          The value of the UPnP modelNumber element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ModelURL" access="readOnly">
        <description>
          The value of the UPnP modelURL element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="SerialNumber" access="readOnly">
        <description>
          The value of the UPnP serialNumber element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the device.
        </description>
        <syntax>
          <string>
            <size maxLength="128"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="UPC" access="readOnly">
        <description>
          The value of the UPnP UPC element in the Device Description Document
          for this {{object}}, or {{empty}} if this value is not provided by
          the device.
        </description>
        <syntax>
          <string>
            <size maxLength="12"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="PresentationURL" access="readOnly">
        <description>
          The value of the UPnP presentationURL element in the Device
          Description Document for this {{object}} and MUST be an absolute URL.

          The way to obtain an absolute URL from the presentationURL element is
          specified in {{bibref|UPnP-DAv1}} and {{bibref|UPnP-DAv11}}.

          If the presentationURL is not provided by the device then this value
          MUST be {{empty}}.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Description.ServiceInstance.{i}."
        access="readOnly" numEntriesParameter="ServiceInstanceNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.6">
      <description>
        This table contains the information from Device Description Document
        retrieved for a discovered UPnP service.
      </description>
      <uniqueKey functional="true">
        <parameter ref="ParentDevice"/>
        <parameter ref="ServiceId"/>
      </uniqueKey>

      <parameter name="ParentDevice" access="readOnly">
        <description>
          {{reference|a {{object|#.DeviceInstance}} table entry}}
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="#.DeviceInstance."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ServiceId" access="readOnly">
        <description>
          The value of the UPnP serviceId element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the service.

          If the UPnP serviceId is not provided by the UPnP service, this
          {{object}} MUST be deleted.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ServiceDiscovery" access="readOnly">
        <description>
          {{reference|a {{object|##.Discovery.Service}} table entry}}

          This {{param}} value can be {{empty}} because the referenced object
          has been deleted or the CPE was unable to retrieve the Description
          Document due to some out-of-band error. The determination to delete
          this {{object}} or use {{empty}} is implementation specific.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.Discovery.Service."
                targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ServiceType" access="readOnly">
        <description>
          The value of the UPnP serviceType element in the Device Description
          Document for this {{object}}, or {{empty}} if this value is not
          provided by the service.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="SCPDURL" access="readOnly">
        <description>
          The value of the UPnP SCPDURL element in the Device Description
          Document for this {{object}} and MUST be an absolute {{datatype}}.

          The way to obtain an absolute URL from the SCPDURL element is
          specified in {{bibref|UPnP-DAv1}} and {{bibref|UPnP-DAv11}}.

          If the SCPDURL is not provided by the device then this value MUST be
          {{empty}}.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="ControlURL" access="readOnly">
        <description>
          The value of the UPnP controlURL element in the Device Description
          Document for this {{object}} and MUST be an absolute {{datatype}}.

          The way to obtain an absolute URL from the controlURL element is
          specified in {{bibref|UPnP-DAv1}} and {{bibref|UPnP-DAv11}}.

          If the controlURL is not provided by the device then this value MUST
          be {{empty}}
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="EventSubURL" access="readOnly">
        <description>
          The value of the UPnP eventSubURL element in the Device Description
          Document for this {{object}} and MUST be an absolute {{datatype}}.

          The way to obtain an absolute URL from the eventSubURL element is
          specified in {{bibref|UPnP-DAv1}} and {{bibref|UPnP-DAv11}}.

          If the eventSubURL is not provided by the device then this value MUST
          be {{empty}}
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.UPnP.Device.IGD." access="readOnly" minEntries="1" maxEntries="1"
      version="2.20">
      <description>
        When {{param|#.UPnPIGD}} is set to {{true}}, this object defines the configuration
        parameters of the UPnP-IGD service embedded in the device.         
      </description>
    
      <parameter name="MaxLeaseLifetime" access="readWrite">
        <description>
          Specifies the maximum duration, in {{units}}, for a UPnP-IGD port mapping lease that the
          UPnP-IGD service will grant. When a UPnP control point requests a lease duration exceeding
          this value, the UPnP-IGD service will still grant the port mapping request, but the actual
          lease lifetime will be capped at this value. Once this maximum lifetime expires, the port
          mapping will be automatically removed.
          
          A value of 0 indicates no {{param}} is specified.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
          <default type="implementation" value="86400"/>
        </syntax>
      </parameter>
    
      <parameter name="CleanupInterval" access="readWrite">
        <description>
          Specifies the interval, in {{units}}, at which the Device's UPnP-IGD service
          automatically cleans up inactive UPnP port mappings.

          A port mapping is typically considered inactive if no network traffic has been observed
          traversing it for a predefined timeout period, which is an implementation-specific value
          within the UPnP-IGD service. During the cleanup process, mappings that meet this
          inactivity criteria are removed.

          A value of ''0'' disables this automatic cleanup mechanism, causing port mappings
          to persist until explicitly removed by the control point or the UPnP-IGD service restarts.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds" />
          </unsignedInt>
          <default type="implementation" value="0" />
        </syntax>
      </parameter>
      
      <parameter name="AllowReservedAddress" access="readWrite">
        <description>
          Indicates whether the Device allows port forwarding requests from
          UPnP control points even when the external (WAN) interface of the IGD has a private or
          reserved IPv4 address.

          When set to {{true}}, the IGD service will process and attempt to establish port mappings despite
          having a non-public IP address on its WAN interface. 

          When set to {{false}}, the IGD will prevent the establishment of port mappings if it
          detects a private or reserved IP address on its WAN interface. 
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="EnableIPv6" access="readWrite">
        <description>
          Enables or disables IPv6 support for the UPnP IGD service. 
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false" />
        </syntax>
       </parameter>
    </object>

    <profile name="UPnPDev:1" version="2.0">
      <object ref="Device.UPnP." requirement="present"/>
      <object ref="Device.UPnP.Device." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="UPnPMediaServer" requirement="readWrite"/>
        <parameter ref="UPnPMediaRenderer" requirement="readWrite"/>
        <parameter ref="UPnPWLANAccessPoint" requirement="readWrite"/>
        <parameter ref="UPnPQoSDevice" requirement="readWrite"/>
        <parameter ref="UPnPQoSPolicyHolder" requirement="readWrite"/>
        <parameter ref="UPnPIGD" requirement="readWrite"/>
      </object>
      <object ref="Device.UPnP.Device.Capabilities." requirement="present">
        <parameter ref="UPnPArchitecture" requirement="readOnly"/>
        <parameter ref="UPnPMediaServer" requirement="readOnly"/>
        <parameter ref="UPnPMediaRenderer" requirement="readOnly"/>
        <parameter ref="UPnPWLANAccessPoint" requirement="readOnly"/>
        <parameter ref="UPnPBasicDevice" requirement="readOnly"/>
        <parameter ref="UPnPQoSDevice" requirement="readOnly"/>
        <parameter ref="UPnPQoSPolicyHolder" requirement="readOnly"/>
        <parameter ref="UPnPIGD" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="UPnPDiscBasic:1" version="2.0">
      <object ref="Device.UPnP." requirement="present"/>
      <object ref="Device.UPnP.Discovery." requirement="present">
        <parameter ref="RootDeviceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.UPnP.Discovery.RootDevice.{i}."
          requirement="present">
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="UUID" requirement="readOnly"/>
        <parameter ref="USN" requirement="readOnly"/>
        <parameter ref="LeaseTime" requirement="readOnly"/>
        <parameter ref="Location" requirement="readOnly"/>
        <parameter ref="Server" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="UPnPDiscAdv:1" extends="UPnPDiscBasic:1" version="2.0">
      <object ref="Device.UPnP.Discovery." requirement="present">
        <parameter ref="DeviceNumberOfEntries" requirement="readOnly"/>
        <parameter ref="ServiceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.UPnP.Discovery.Device.{i}." requirement="present">
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="UUID" requirement="readOnly"/>
        <parameter ref="USN" requirement="readOnly"/>
        <parameter ref="LeaseTime" requirement="readOnly"/>
        <parameter ref="Location" requirement="readOnly"/>
        <parameter ref="Server" requirement="readOnly"/>
      </object>
      <object ref="Device.UPnP.Discovery.Service.{i}." requirement="present">
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="USN" requirement="readOnly"/>
        <parameter ref="LeaseTime" requirement="readOnly"/>
        <parameter ref="Location" requirement="readOnly"/>
        <parameter ref="Server" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="UPnPDiscAdv:2" base="UPnPDiscAdv:1" version="2.6">
      <object ref="Device.UPnP.Discovery.Device.{i}." requirement="present">
        <parameter ref="LastUpdate" requirement="readOnly"/>
        <parameter ref="Host" requirement="readOnly"/>
      </object>
      <object ref="Device.UPnP.Discovery.Service.{i}." requirement="present">
        <parameter ref="LastUpdate" requirement="readOnly"/>
        <parameter ref="Host" requirement="readOnly"/>
        <parameter ref="ParentDevice" requirement="readOnly"/>
      </object>
    </profile>
  </component>

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