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

  Copyright (c) 2010-2023, Broadband Forum

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

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

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

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

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

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

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

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

  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-17-0-wifi-usp"
    file="tr-181-2-17-0-wifi-usp.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="MACAddress"/>
  </import>

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

  <import file="tr-181-2-wifi.xml"
      spec="urn:broadband-forum-org:tr-181-2-17-wifi">
    <component name="WiFi"/>
    <component name="WiFiNeighboringWiFiDiagnosticsOutput"/>
    <component name="SpatialReuse"/>
    <component name="BigScanResult"/>
    <component name="AssociationEventData"/>
    <component name="DisassociationEventData"/>
    <component name="DisassociationLinkStats"/>
    <component name="FailedConnectionEventData"/>
    <component name="RemoteMeasurementRequestInput"/>
    <component name="RemoteMeasurementRequestOutput"/>
    <component name="CCAMeasurementInput"/>
    <component name="CCAMeasurementOutput"/>
    <component name="WiFi6"/>
  </import>
 
  <component name="WiFiChannelScanInput">

    <object name="OpClass.{i}." access="readWrite" minEntries="0"
        maxEntries="unbounded" version="2.15">
      <description>
        The Operating Classes for which this channel scan is requested.
      </description>

      <parameter name="OperatingClass" mandatory="true" access="readOnly">
        <description>
          The Operating Class per {{bibref|802.11-2020|Table E-4}} of the
          OpClass and Channel tuple scanned by the Radio. Note that the
          Operating Class identifies the band and channel width. For 2.4GHz and
          5GHz bands, only 20MHz Operating Classes are valid.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="255"/>
          </unsignedInt>
        </syntax>
      </parameter>
    </object>

    <object name="OpClass.{i}.Channel.{i}." access="readWrite" minEntries="0"
        maxEntries="unbounded" version="2.15">
      <description>
        The Channels for which this channel scan is requested.
      </description>

      <parameter name="Channel" mandatory="true" access="readOnly">
        <description>
          The Channel number of the Channel that is requested to be scanned.
        </description>
        <syntax>
          <unsignedInt>
            <range maxInclusive="255"/>
          </unsignedInt>
        </syntax>
      </parameter>
    </object>
    <component ref="WiFiScanInput"/>
  </component>

  <component name="WiFiScanInput">

    <parameter name="DwellTime" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The duration of the time to scan each channel in {{units}}. A value of
        50 {{units}} is suggested.
      </description>
      <syntax>
        <unsignedInt>
          <units value="milliseconds"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="DFSDwellTime" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The duration of time to scan each Dynamic Frequency Selection (DFS)
        channel in {{units}}. A value of at least one beacon interval,
        typically 100 {{units}}, is suggested.
      </description>
      <syntax>
        <unsignedInt>
          <units value="milliseconds"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="HomeTime" access="readWrite" version="2.15">
      <description>
        The time in {{units}} after which the driver has to go back to the
        original channel before scanning the next channel to avoid disruption.
        If this is omitted, or is not supported by the device, then it should
        be ignored.
      </description>
      <syntax>
        <unsignedInt>
          <units value="milliseconds"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="SSID" access="readWrite" version="2.15">
      <description>
        The Service Set Identifier (SSID) to scan. If omitted, then all SSIDs
        are scanned.
      </description>
      <syntax>
        <string/>
      </syntax>
    </parameter>
  </component>

  <component name="SteerWiFiBackhaulInput">

    <parameter name="TargetBSS" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        Basic Service Set Identifier (BSSID) of the target BSS which the
        associated device(s) is to be associated to.
      </description>
      <syntax>
        <dataType ref="MACAddress"/>
      </syntax>
    </parameter>

    <parameter name="Channel" access="readWrite" version="2.15">
      <description>
        The number of the Wi-Fi channel the backhaul BSS is to be associated
        to. If {{param}} is not specified, then the radio is to determine which
        channel to use to associate to the requested {{param|TargetBSS}}.
      </description>
      <syntax>
        <unsignedInt/>
      </syntax>
    </parameter>

    <parameter name="TimeOut" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The maximum timeout for this backhaul steering to occur in {{units}}.
      </description>
      <syntax>
        <unsignedInt>
          <units value="milliseconds"/>
        </unsignedInt>
      </syntax>
    </parameter>
  </component>

  <component name="BTMRequestInput">

    <parameter name="DisassociationImminent" access="readWrite"
        mandatory="true" version="2.15">
      <description>
        Indicates if the disassociation is imminent, as defined in
        {{bibref|802.11-2020|Section 9.6.13.9}}.
      </description>
      <syntax>
        <boolean/>
      </syntax>
    </parameter>

    <parameter name="DisassociationTimer" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The number of {{units}} until the AP sends a disassociation frame to
        this station. If {{param}}=0 then {{param}} is not used.
      </description>
      <syntax>
        <unsignedInt>
          <units value="beacon transmission times"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="BSSTerminationDuration" access="readWrite"
        mandatory="true" version="2.15">
      <description>
        The number of {{units}} for which the BSS is not present. If
        {{param}}=0 or if this input in not provided, then {{param}} is not
        used.
      </description>
      <syntax>
        <unsignedInt>
          <units value="minutes"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="ValidityInterval" access="readWrite" version="2.15">
      <description>
        The amount of time in {{units}} that the {{command}} is valid for. If
        {{param}}=0 or if this input in not provided, then {{param}} is not
        used.
      </description>
      <syntax>
        <unsignedInt>
          <units value="beacon intervals"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="SteeringTimer" access="readWrite" version="2.15">
      <description>
        The amount of time in {{units}} that this associated device is not
        allowed to return to the original BSS. If {{param}}=0 or if this input
        in not provided, then {{param}} is not used.
      </description>
      <syntax>
        <unsignedInt>
          <units value="beacon intervals"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="TargetBSS" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        BSSID of the target BSS which the associated device(s) is to be
        associated to.
      </description>
      <syntax>
        <dataType ref="MACAddress"/>
      </syntax>
    </parameter>
  </component> 

  <component name="DisassociateInput">

    <parameter name="DisassociationTimer" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The time for which the associated device is to be disassociated in
        {{units}}. If set to 0, then the associated device is blocked
        indefinately.
      </description>
      <syntax>
        <unsignedInt>
          <units value="minutes"/>
        </unsignedInt>
      </syntax>
    </parameter>

    <parameter name="ReasonCode" access="readWrite" mandatory="true"
        version="2.15">
      <description>
        The reason code for the request for the associated device to be
        disassociated, as defined in {{bibref|802.11-2020|Table 9-49}}.
      </description>
      <syntax>
        <unsignedInt/>
      </syntax>
    </parameter>

    <parameter name="Silent" access="readWrite" version="2.15">
      <description>
        An optional input, if true then this is a request for a Silent
        Disassociate, whereby the AP is to remove the station from its list of
        associated devices without sending a message to the station.

        If this input in not provided, then a value of {{false}} is assumed.
      </description>
      <syntax>
        <boolean/>
      </syntax>
    </parameter>
  </component>

  <component name="SetTrafficSeparation">

    <command name="SetTrafficSeparation()" async="true" version="2.15">
      <description>
        This command allows or disallows EasyMesh traffic separation
        {{bibref|EasyMesh|Section 19.1}}. If {{param|Enable}} is {{true}} then
        the parameters defining traffic separation details can also be input
        with this command.

        This command applies to all EasyMesh Agent devices in the Wi-Fi
        network.

        This command can configure
        {{object|#.Device.{i}.SSIDtoVIDMapping.{i}.}} and
        {{param|#.Device.{i}.TrafficSeparationAllowed}}.

        Status is to be returned after implementation or failed implementation
        on all agents/devices/APs in this Multi-AP network.
      </description>
      <input>
        <parameter name="Enable" mandatory="true" version="2.15">
          <description>
            : {{true}}: EasyMesh traffic separation is allowed.

            : {{false}}: EasyMesh traffic separation is not allowed.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <object name="SSIDtoVIDMapping.{i}." minEntries="0"
            maxEntries="unbounded" version="2.15">
          <description>
            The Service Set Identifier (SSID) to VLAN ID (VID) mapping for
            EasyMesh traffic separation {{bibref|EasyMesh}}. Consists of a
            table of pairs of {{param|SSID}} and corresponding {{param|VID}}.

            If this input is not provided, then existing
            {{object|##.Device.{i}.SSIDtoVIDMapping.{i}.}} apply.
          </description>
          <uniqueKey functional="true">
            <parameter ref="SSID"/>
          </uniqueKey>

          <parameter name="SSID">
            <description>
              The SSID name.
            </description>
            <syntax>
              <string/>
            </syntax>
          </parameter>

          <parameter name="VID">
            <description>
              The VLAN ID (VID).
            </description>
            <syntax>
              <unsignedInt>
                <range maxInclusive="4095"/>
              </unsignedInt>
            </syntax>
          </parameter>

        </object>

      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to allow or disallow
            EasyMesh traffic separation. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success">
                <description>
                  Indicates successful implementation on all agents/devices/APs
                  in this Multi-AP network.
                </description>
              </enumeration>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetServicePrioritization">

    <command name="SetServicePrioritization()" async="true" version="2.15">
      <description>
        This command allows or disallows EasyMesh service prioritization
        {{bibref|EasyMesh|Section 20}}. If {{param|Enable}} is {{true}} then
        the parameters defining service prioritization details can also be
        input with this command.

        This command can configure {{object|#.Device.{i}.SPRule.{i}.}},
        {{param|#.Device.{i}.DSCPMap}} and
        {{param|#.Device.{i}.ServicePrioritizationAllowed}}.

        This command applies to all EasyMesh Agent devices in the Wi-Fi
        network.

        Status is to be returned after implementation or failed implementation
        on all agents/devices/APs in this Multi-AP network.
      </description>
      <input>
        <parameter name="Enable" mandatory="true" version="2.15">
          <description>
            : {{true}}: EasyMesh service prioritization is allowed.

            : {{false}}: EasyMesh service prioritization is not allowed.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <object name="SPRule.{i}." minEntries="0" maxEntries="unbounded"
            version="2.15">
          <description>
            This object describes a list of service prioritization (SP) rules
            {{bibref|EasyMesh}}.

            If this input is not provided, then existing
            {{object|##.Device.{i}.SPRule.{i}.}} apply.
          </description>
          <uniqueKey functional="true">
            <parameter ref="ID"/>
          </uniqueKey>

          <parameter name="ID" version="2.15">
            <description>
              Service prioritization rule Identifier.
            </description>
            <syntax>
              <unsignedInt/>
            </syntax>
          </parameter>

          <parameter name="Precedence" version="2.15">
            <description>
              Rule Precedence - higher number means higher priority.
            </description>
            <syntax>
              <unsignedInt>
                <range maxInclusive="254"/>
              </unsignedInt>
            </syntax>
          </parameter>

          <parameter name="Output" version="2.15">
            <description>
              Rule Output. The value of, or method used to select the 802.1Q
              C-TAG Priority Code Point (PCP) output value.
            </description>
            <syntax>
              <unsignedInt>
                <range maxInclusive="9"/>
              </unsignedInt>
            </syntax>
          </parameter>

          <parameter name="AlwaysMatch" version="2.15">
            <description>
              Indicates if the rule always matches.
            </description>
            <syntax>
              <boolean/>
            </syntax>
          </parameter>
        </object>

        <parameter name="DSCPMap" version="2.15">
          <description>
            A hexadecimal string of 64 PCP values (one octet per value)
            corresponding to the DSCP markings 0x00 to 0x3F, ordered by
            increasing DSCP value. Each octet is in the range 0x00 - 0x07. This
            is used to select a PCP value if a Service Prioritization Rule
            specifies Rule Output: 0x08.

            If this input is not provided, then the existing
            {{param|#.Device.{i}.DSCPMap}} applies.
          </description>
          <syntax>
            <hexBinary>
              <size maxLength="64"/>
            </hexBinary>
          </syntax>
        </parameter>

      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to allow or disallow
            EasyMesh service prioritization. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success">
                 <description>
                   Indicates successful implementation on all agents/devices/APs
                   in this Multi-AP network
                 </description>
              </enumeration>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="ChannelScanRequest">

    <command name="ChannelScanRequest()" async="true" version="2.15">
      <description>
        Request to initiate a channel scan. The operating classes, and list of
        channels for each operating class, are input. If no operating class is
        provided to the input, then all available opclasses and channels are
        to be scanned. For 2.4GHz and 5GHz bands, only 20MHz operating classes
        are valid inputs.

        This command should result in updating
        {{object|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.ScanResult.}}
      </description>
      <input>

        <parameter name="OpClass">
          <description>
            The Operating Class per {{bibref|802.11-2020|Table E-4}}. For 2.4GHz
            and 5GHz bands, only 20MHz Operating Classes are valid. If this input
            is not provided, then all available opclasses and channels are to
            be scanned.

            Note that the operating class identifies the band, and channel
            width.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="ChannelList">
          <description>
            The channel numbers in this Operating Class for which the request
            to initiate a channel scan applies.
          </description>
          <syntax>
          <list/>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="ScanType" version="2.17">
          <description>
            Indicates the type of scan to perform. If this is omitted,
            or is not supported by the device, then it should be ignored.
            {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Interrupt_Radio"/>
              <enumeration value="Time_Sliced"/>
              <enumeration value="Spatial_Stream"/>
              <enumeration value="Unused_Radio"/>
            </string>
          </syntax>
        </parameter>

        <parameter name="DwellTime" version="2.17">
          <description>
            The duration of the time to scan each channel in {{units}}. A value
            of 50 {{units}} is suggested.

            If this is omitted, or is not supported by the device,
            then it should be ignored.
          </description>
          <syntax>
            <unsignedInt>
              <units value="milliseconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="DFSDwellTime" version="2.17">
          <description>
            The duration of time to scan each Dynamic Frequency Selection (DFS)
            channel in {{units}}. Note that this is the time to scan the channel,
            and is not the time to perform DFS. A value of at least one beacon
            interval, typically 100 {{units}}, is suggested. 

            If this is omitted, or is not supported by the device,
            then it should be ignored.
          </description>
          <syntax>
            <unsignedInt>
              <units value="milliseconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="HomeTime" version="2.17">
          <description>
            The time in {{units}} after which the driver has to go back to the
            original channel before scanning the next channel to avoid
            disruption. 

            If this is omitted, or is not supported by the device,
            then it should be ignored.
          </description>
          <syntax>
            <unsignedInt>
              <units value="milliseconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to initiate a channel
            scan. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="RadioEnable">

    <command name="RadioEnable()" async="true" version="2.15">
      <description>
        Request to enable or disable this radio.

        This command can result in updating {{param|Enabled}}.

        If the instance of this {{object}} is the same as
        {{object|Device.WiFi.Radio.{i}.}}, then this command has the same
        effect as writing to {{param|Device.WiFi.Radio.{i}.Enable}}.
      </description>
      <input>
        <parameter name="Enable" mandatory="true" version="2.15">
          <description>
            : {{true}}: this radio is to be enabled.

            : {{false}}: this radio is to be disabled.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to enable or disable
            this radio. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="WiFiRestart">

    <command name="WiFiRestart()" async="true" version="2.15">
      <description>
        Request a restart of the Wi-Fi subsystem.
      </description>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to restart the Wi-Fi
            subsystem. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetSTASteeringState">

    <command name="SetSTASteeringState()" async="true" version="2.15">
      <description>
        Disallow or allow EasyMesh {{bibref|EasyMesh}} controller-initiated
        station (STA) steering on this device.

        This command can configure {{param|STASteeringState}}.
      </description>
      <input>
        <parameter name="Disallowed" mandatory="true" version="2.15">
          <description>
            : {{true}}: EasyMesh controller-initiated station steering
              disallowed;

            : {{false}}: EasyMesh controller-initiated station steering
              allowed.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to allow or disallow
            EasyMesh controller-initiated station steering. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetTxPowerLimit">

    <command name="SetTxPowerLimit()" async="true" version="2.15">
      <description>
        This command sets the upper limit on transmit power
        {{param|TransmitPowerLimit}} for this radio and
        {{param|OperatingClass}}.

        This command can configure
        {{param|#.CurrentOperatingClassProfile.{i}.TransmitPowerLimit}}.
      </description>

      <input>

        <parameter name="TransmitPowerLimit" mandatory="true">
          <description>
            This is the upper limit on nominal transmit Equivalent
            Isotropically Radiated Power (EIRP) that this radio can use for the
            {{param|OperatingClass}}. In units of decibels relative to 1 mW
            {{units}}.
          </description>
          <syntax>
            <int>
              <range minInclusive="-128" maxInclusive="127"/>
              <units value="dBm"/>
            </int>
          </syntax>
        </parameter>

        <parameter name="OperatingClass" mandatory="true">
          <description>
            The Operating Class per {{bibref|802.11-2020|Table E-4}} of the
            radio. Note that the Operating Class identifies the band and
            channel width.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to set a transmit
            power limit. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="PreferredBackhauls">
    <object base="Device.WiFi.DataElements.Network." access="readOnly"
        minEntries="1" maxEntries="1">
      <parameter name="PreferredBackhaulsNumberOfEntries"
          access="readOnly" version="2.17">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.WiFi.DataElements.Network.PreferredBackhauls.{i}."
        access="readOnly" numEntriesParameter="PreferredBackhaulsNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.17">
      <description>
        This object specifies the preferred backhaul links as populated by
        {{command|#.SetPreferredBackhauls()}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="bSTAMACAddress"/>
      </uniqueKey>

      <parameter name="BackhaulMACAddress" access="readOnly" mandatory="true">
        <description>
          The MAC address of the BSS, or APMLD, or similar Ethernet
          interface, on this preferred backhaul link.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>

      <parameter name="bSTAMACAddress" access="readOnly" mandatory="true">
        <description>
          The MAC address of the backhaul Station STA (bSTA), or bSTAMLD,
          or similar Ethernet interface, on this preferred backhaul link.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>
    </object>
  </component>


  <component name="SetPreferredBackhauls">

    <command name="SetPreferredBackhauls()" async="true" version="2.15">
      <description>
        This command sets preferred backhaul links for EasyMesh
        {{bibref|EasyMesh}} backhaul.
      </description>
      <input>
        <object name="PreferredBackhauls.{i}." minEntries="1"
            maxEntries="unbounded" version="2.15">
          <description>
            Indicates preferred backhaul links for EasyMesh {{bibref|EasyMesh}}
            backhaul. Consists of a table of pairs of MAC addresses. For a
            WI-Fi connection pair, an entry contains the BSSID and bSTA MAC
            address. For a wired connection pair, an entry contains the
            interface MAC addresses. This command applies to all EasyMesh Agent
            devices in the Wi-Fi network.

            Status is to be returned after implementation or failed
            implementation on all agents/devices/APs in this Multi-AP network.
          </description>
          <uniqueKey functional="true">
            <parameter ref="bSTAMACAddress"/>
          </uniqueKey>

          <parameter name="BackhaulMACAddress" mandatory="true">
            <description>
              The MAC address of the BSS, or similar Ethernet interface, on
              this preferred backhaul link.
            </description>
            <syntax>
              <dataType ref="MACAddress"/>
            </syntax>
          </parameter>

          <parameter name="bSTAMACAddress" mandatory="true">
            <description>
              The MAC address of the backhaul STA (bSTA), or similar Ethernet
              interface, on this preferred backhaul link.
            </description>
            <syntax>
              <dataType ref="MACAddress"/>
            </syntax>
          </parameter>
        </object>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to set preferred
            backhaul links. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success">
                <description>
                  Indicates successful implementation of all preferred backhaul
                  links in this Multi-AP network.
                </description>
              </enumeration>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetSSID">

    <command name="SetSSID()" async="true" version="2.15">
      <description>
        This command specifies an {{param|SSID}} for use across this
        Wi-Fi Multi-AP network, or on this single-AP. Also specifies the
        {{param|PassPhrase}}, whether to add or remove this SSID, and specifies
        the {{param|Band}} for each {{param|SSID}}.

        This command applies to all EasyMesh Agent devices in the Wi-Fi
        network, or to this AP in the single-AP case.

        This command can be used to change any input parameter(s) if
        {{param|AddRemoveChange}} is set to {{enum|Change|AddRemoveChange}}.

        This command can configure {{object|#.SSID.{i}}}.

        Note that VLAN IDs (VIDs) can be configured per SSID with
        {{object|#.Device.{i}.SSIDtoVIDMapping.{i}}}.

        Status is to be returned after implementation or failed implementation
        on all agents/devices/APs in this Multi-AP network.
      </description>

      <input>

        <parameter name="SSID" mandatory="true">
          <description>
            The SSID for fronthaul use across this Wi-Fi Multi-AP network.
          </description>
          <syntax>
            <string/>
          </syntax>
        </parameter>

        <parameter name="Enable" version="2.17">
          <description>
            Enable or disable this {{param|SSID}}. Disable stops the use of
            this {{param|SSID}}, but the object is retained.

            : {{true}}: this {{param|SSID}} is to be enabled.

            : {{false}}: this {{param|SSID}} is to be disabled.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <parameter name="AddRemoveChange" mandatory="true" version="2.17">
          <description>
            Indicates whether to add, remove or change this {{param|SSID}}.
            {{enum}}

            Status is to be returned after implementation or failed
            implementation on all agents/devices/APs in this Multi-AP network.

            If set to {{enum|Change}}, then all input parameters for this
            {{param|SSID}} that do not have null values are to be changed.
          </description>
          <syntax>
            <string>
              <enumeration value="Add">
                <description>
                  Add this SSID.
                </description>
              </enumeration>
              <enumeration value="Remove">
                <description>
                  Remove this SSID.
                </description>
              </enumeration>
              <enumeration value="Change">
                <description>
                  Change this SSID.
                </description>
              </enumeration>
            </string>
          </syntax>
        </parameter>

        <parameter name="PassPhrase">
          <description>
            The WPA2 Passphrase and/or SAE password for this {{param|SSID}}.
          </description>
          <syntax>
            <string/>
          </syntax>
        </parameter>

       <parameter name="Band">
          <description>
            The band(s) for which this {{param|SSID}} applies. {{enum}}

            If this input is not provided, then a value of {{enum|All}}
            applies.
          </description>
          <syntax>
            <list/>
            <string>
              <enumeration value="All">
                <description>Applies to all bands</description>
              </enumeration>
              <enumeration value="2.4">
                <description>2.4 GHz band</description>
              </enumeration>
              <enumeration value="5">
                <description>The entire 5 GHz band</description>
              </enumeration>
              <enumeration value="6">
                <description>The entire 6 GHz band</description>
              </enumeration>
              <enumeration value="5_UNII_1">
                <description>5 GHz UNII-1 band, 5.15 to 5.25 GHz</description>
              </enumeration>
              <enumeration value="5_UNII_2">
                <description>5 GHz UNII-2 band, 5.25 to 5.725 GHz</description>
              </enumeration>
              <enumeration value="5_UNII_3">
                <description>5 GHz UNII-3 band, 5.725 to 5.85 GHz</description>
              </enumeration>
              <enumeration value="5_UNII_4">
                <description>5 GHz UNII-4 band, 5.85 to 5.925 GHz</description>
              </enumeration>
              <enumeration value="6_UNII_5">
                <description>
                  6 GHz UNII-5 band, 5.925 to 6.425 GHz
                </description>
              </enumeration>
              <enumeration value="6_UNII_6">
                <description>
                  6 GHz UNII-6 band, 6.425 to 6.525 GHz
                </description>
              </enumeration>
              <enumeration value="6_UNII_7">
                <description>
                  6 GHz UNII-7 band, 6.525 to 6.875 GHz
                </description>
              </enumeration>
              <enumeration value="6_UNII_8">
                <description>
                  6 GHz UNII-8 band, 6.875 to 7.125 GHz
                </description>
              </enumeration>
            </string>
          </syntax>
        </parameter>

        <parameter name="AKMsAllowed" version="2.17">
          <description>
            {{list}} List items indicate Authentication and Key Management (AKM)
            suites/security modes allowed on this BSS. {{enum}}
          </description>
          <syntax>
          <list/>
            <string>
              <enumeration value="psk"><description>
                "psk" indicates one or more of the PSK and FT-PSK AKMs defined
                in {{bibref|802.11-2020|Table 9-151}} typically at least
                "00-0F-AC:2" for interoperability.
                </description>
              </enumeration>
              <enumeration value="dpp"><description>
                "dpp" indicates one or more of the DPP and FT-DPP AKMs defined
                in {{bibref|EasyConnect|Section 8.4}}, typically at least
                "50-6F-9A:2" for interoperability.
              </description>
              </enumeration>
              <enumeration value="sae"><description>
                "sae" indicates one or more of the SAE and FT-SAE AKMs defined
                in {{bibref|802.11-2020|Table 9-151}} typically at least
                "00-0F-AC:8" for interoperability.
              </description>
              </enumeration>
              <enumeration value="psk+sae"/>
              <enumeration value="dpp+sae"/>
              <enumeration value="dpp+psk+sae"/>
              <enumeration value="SuiteSelector"><description>
              "SuiteSelector" indicates an AKM suite selector, the value of
               which is indicated in {{param|SuiteSelector}}.
              </description>
              </enumeration>
            </string>
          </syntax>
        </parameter>

      <parameter name="SuiteSelector" version="2.17">
        <description>
          AKM suite selector, the AKM suite selector (OUI and type) is
          encoded as a 4-octet hex-encoded value without internal
          delimiters, e.g. 506F9A02 {{bibref|802.11-2020|Table 9-151}}.

          This parameter applies if {{param|AKMsAllowed}} includes value
          "SuiteSelector". 
        </description>
        <syntax>
          <hexBinary>
            <size minLength="4" maxLength="4"/>
          </hexBinary>
        </syntax>
      </parameter>

        <parameter name="AdvertisementEnabled" version="2.17">
          <description>
            Indicates if the SSID is advertised in beacons, or not.

            : {{true}}: this {{param|SSID}} is to be advertised in beacons.

            : {{false}}: this {{param|SSID}} is not to be advertised in beacons.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <parameter name="MFPConfig" version="2.17">
          <description>
            Management Frame Protection (MFP) configuration. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Disabled"/>
              <enumeration value="Optional"/>
              <enumeration value="Required"/>
            </string>
          </syntax>
        </parameter>

        <parameter name="MobilityDomain" version="2.17">
          <description>
            The IEEE 802.11 mobility domain
            {{bibref|802.11-2020|Section 9.4.2.46}}.
          </description>
          <syntax>
            <list/>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>

        <parameter name="HaulType" version="2.17">
          <description>
            Indicates the use of this {{param|SSID}}. {{enum}}
          </description>
          <syntax>
            <list/>
            <string>
              <enumeration value="Fronthaul"/>
              <enumeration value="Backhaul"/>
            </string>
          </syntax>
        </parameter>

      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to set the SSID.
            {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success">
                <description>
                  Indicates successful implementation on all agents/devices/APs
                  in this Multi-AP network
                </description>
              </enumeration>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetDFSState">

    <command name="SetDFSState()" async="true" version="2.15">
      <description>
        Enables/disables the use of Dynamic Frequency Selection (DFS) channels
        on this device.

        This command can configure {{param|#.DFSEnable}}.
      </description>
      <input>
        <parameter name="DFSEnable" mandatory="true" version="2.15">
          <description>
            : {{true}}: the use of Dynamic Frequency Selection (DFS) channels
              is allowed;

            : {{false}}: the use of Dynamic Frequency Selection (DFS) channels
              is disallowed;
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to allow or disallow
            the use of Dynamic Frequency Selection (DFS) channels. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetAnticipatedChannelPreference">

    <command name="SetAnticipatedChannelPreference()" async="true"
        version="2.15">
      <description>
        This command requests to set the Anticipated Channel Preference. The
        operating classes, and list of channels for each operating class, are
        input.
      </description>
      <input>
        <parameter name="OpClass" mandatory="true">
          <description>
            The Operating Class per {{bibref|802.11-2020|Table E-4}}.

            Note that the operating class identifies the band and channel
            width.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="ChannelList" mandatory="true">
          <description>
            The channel numbers in this Operating Class.
          </description>
          <syntax>
            <list/>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to set the anticipated
            channel preference. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetMSCSDisallowed">

    <command name="SetMSCSDisallowed()" async="true" version="2.15">
      <description>
        This command disallows Mirrored Stream Classification Service (MSCS)
        service prioritization to particular STA(s). {{bibref|EasyMesh}}

        This command applies to all EasyMesh Agent devices in the Wi-Fi
        network.

        This command configures {{param|#.MSCSDisallowedStaList}}.
      </description>
      <input>
        <parameter name="MSCSDisallowedStaList" mandatory="true"
            version="2.15">
          <description>
            List of STAs for which MSCS operation is disallowed.
          </description>
          <syntax>
            <list/>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to disallow MSCS
            service prioritization to particular STA(s) {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetSCSDisallowed">

    <command name="SetSCSDisallowed()" async="true" version="2.15">
      <description>
        This command disallows Stream Classification Service (SCS) service
        prioritization to particular STA(s). {{bibref|EasyMesh}}

        This command applies to all EasyMesh Agent devices in the Wi-Fi
        network.

        This command can configure {{param|#.SCSDisallowedStaList}}.
      </description>
      <input>
        <parameter name="SCSDisallowedStaList" mandatory="true" version="2.15">
          <description>
            List of STAs for which SCS operation is disallowed.
          </description>
          <syntax>
            <list/>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to disallow SCS
            service prioritization to particular STA(s). {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetQMDescriptors">

    <command name="SetQMDescriptors()" async="true" version="2.15">
      <description>
        This command configures each of the descriptor elements for Mirrored
        Stream Classification Service (MSCS), Stream Classification Service
        (SCS), or QoS Management. {{bibref|EasyMesh}}.

        This command can configure {{object|QMDescriptor.{i}.}}.

        If {{param|Input.QMDescriptor.{i}.DescriptorElement}} is for SCS or
        MSCS, the AP adds/changes/removes the rule according to the descriptor
        element request type.

        If a {{param|Input.QMDescriptor.{i}.DescriptorElement}} is a QoS
        Management DSCP Policy, the AP sends it to the STA identified by the
        {{param|Input.QMDescriptor.{i}.ClientMAC}}.
      </description>
      <input>
        <object name="QMDescriptor.{i}." minEntries="1" maxEntries="unbounded"
            version="2.15">
          <description>
            This object contains a table of {{param|DescriptorElement}}.
          </description>
          <uniqueKey functional="true">
            <parameter ref="ClientMAC"/>
          </uniqueKey>

          <parameter name="BSSID" version="2.17">
            <description>
              The BSSID of BSS for which this descriptor applies.
            </description>
            <syntax>
              <dataType ref="MACAddress"/>
            </syntax>
          </parameter>

          <parameter name="ClientMAC" mandatory="true">
            <description>
              MAC address of the Station (STA) for which this descriptor
              applies.
            </description>
            <syntax>
              <dataType ref="MACAddress"/>
            </syntax>
          </parameter>
          <parameter name="DescriptorElement" mandatory="true">
            <description>
              The descriptor element. One of:

              : MSCS descriptor element (as described in
                {{bibref|802.11-2020|Section 9.4.2.243}}, or

              : SCS descriptor element (as described in
                {{bibref|802.11-2020|Section 9.4.2.121}}, or

              : QoS Management DSCP policy element (as described in
                {{bibref|802.11-2020|Section 9.4.2.94}} and
                {{bibref|RFC8325|Section 6.3}}).
            </description>
            <syntax>
              <hexBinary/>
            </syntax>
          </parameter>
        </object>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to configure
            descriptor elements. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="SetSpatialReuse">

    <command name="SetSpatialReuse()" async="true" version="2.15">
      <description>
        This command sets the spatial reuse configuration of this radio.
        Applies only to Wi-Fi 6 and possibly later generations of radios.

        Acronyms: Spatial Reuse Group (SRG), Overlapping Basic Service Set
        (OBSS), Preamble Detection (PD).

        This command can configure {{object|#.SpatialReuse.}}.

        If some input parameter(s) are not provided, then the corresponding
        existing parameter in {{object|#.SpatialReuse.}} applies.
      </description>
      <input>
        <component ref="SpatialReuse"/>
      </input>

      <output>
        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to set the spatial
            reuse configuration of this radio. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="ClientSteer">

    <command name="ClientSteer()" async="true" version="2.17">
      <description>
        Initiates an EasyMesh {{bibref|EasyMesh}} Controller initiated
        steering mandate request to steer a STA from one EasyMesh agent
        to another. 

        The steering mechanism is determined by the EasyMesh
        controller. Application of BTM or non BTM steering, 
        timing, failsafes, and command rejection are determined
        by the EasyMesh controller.

        The {{param|TargetBSSID}} should be an instance of a
        {{param|#.BSSID}}.
      </description>
      <input>

        <parameter name="TargetBSSID">
          <description>
            Basic Service Set Identifier (BSSID) or AP MLD MAC Address
            of the target BSS which the associated device(s) is to be
            steered to.

            Wildcard BSSID is represented by FFFFFFFFFFFF.
          </description>
          <syntax>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>

        <parameter name="RequestMode">
          <description>
            The request mode. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Steering_Opportunity"><description>
                  Request is a Steering Opportunity, indicated by 0 in
                  {{bibref|EasyMesh|Table 49}}.
                </description>
              </enumeration>
              <enumeration value="Steering_Mandate"><description>
                  Request is a Steering Mandate to trigger steering for
                  specific client STA(s), indicated by 1 in
                 {{bibref|EasyMesh|Table 49}}.
                </description>
              </enumeration>
            </string>
          </syntax>
        </parameter>

        <parameter name="BTMDisassociationImminent">
          <description>
            BTM disassociation imminent.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <parameter name="BTMAbridged">
          <description>
            BTM abridged.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <parameter name="LinkRemovalImminent">
          <description>
            Link removal imminent.
          </description>
          <syntax>
            <boolean/>
          </syntax>
        </parameter>

        <parameter name="SteeringOpportunityWindow">
          <description>
            Time period in {{units}} (from reception of the Steering Request
            message) for which the request is valid.
            If {{param|RequestMode}} is Steering_Mandate, then this is ignored.
          </description>
          <syntax>
            <unsignedInt>
              <units value="seconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="BTMDisassociationTimer">
          <description>
            Time period in {{units}} of the disassociation timer in the BTM Request.
          </description>
          <syntax>
            <unsignedInt>
              <units value="TUs"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="TargetBSSOperatingClass">
          <description>
            The Target BSS Operating Class per
            {{bibref|802.11-2020|Table E-4}}.

            If the {{param|TargetBSSID}} is set to "Wildcard BSSID", then this
            is ignored.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="TargetBSSChannel">
          <description>
            Target BSS channel number for channel on which the Target BSS is
            transmitting Beacon frames.

            If the {{param|TargetBSSID}} is set to "Wildcard BSSID", then then
            this is ignored.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="255"/>
            </unsignedInt>
          </syntax>
        </parameter>
      </input>

      <output>

        <parameter name="Status">
          <description>
            Indicates the response to the Wi-Fi backhaul steering request.
            {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>

      </output>
    </command>
  </component>

  <component name="FullScan">

    <command name="FullScan()" async="true" version="2.15">
      <description>
        This command represents a request to initiate a full scan on this
        radio, including all channels supported by this radio, for a specific
        {{param|DwellTime}} and {{param|HomeTime}}. This command will result in
        updating
        {{object|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.ScanResult.}}

        If the instance of this {{object}} is the same as
        {{object|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}}}, then
        this command is similar to,
        {{command|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.ChannelScanRequest()}}.
      </description>
      <input>
        <component ref="WiFiScanInput"/>
      </input>
      <output>

        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to initiate a full
            band scan. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Not_Ready"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Interface_Down"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
        <component ref="BigScanResult" version="2.15"/>
      </output>
    </command>
  </component>

  <component name="ThroughputTest">

    <command name="ThroughputTest()" version="2.17" async="true" >
      <description>
        This command represents a request to initiate a throughput (speed)
        test from a BSS to a STA.
      </description>
      <input>
        <parameter name="STAMACAddress">
          <description>
            MAC address of the STA that the throughput test is to be run to.
          </description>
          <syntax>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>

        <parameter name="VID">
          <description>
            The VLAN ID (VID) that the throughput test is to run on.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="4095"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="WMMUP">
          <description>
            Wi-Fi MultiMedia (WMM) User Priority {{bibref|AMB}}
            that the throughput test is to
            run on. A value of 8 indicates that the WMM UP is not specified.

            If WMM is not supported by the BSS and the STA, then this is
            ignored.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="8"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="TestDuration">
          <description>
            Duration of the throughput test in {{units}}. 
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="65535"/>
              <units value="milliseconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="TestDirection">
          <description>
            Direction to run the throughput test. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Downlink"/>
              <enumeration value="Uplink"/>
              <enumeration value="Roundtrip">
                <description>Both uplink and downlink.</description>
              </enumeration>
            </string>
          </syntax>
        </parameter>

      </input>
      <output>

        <parameter name="Status">
          <description>
            Indicates the type of outcome of the throughput test request.
            {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="LatencyTest">

    <command name="LatencyTest()" async="true" version="2.17">
      <description>
        This command represents a request to initiate a latency (delay)
        test set from a BSS to a STA. Each latency test set includes a
        number of individual echo tests. Each echo test result provides
        a sample of round-trip time.
      </description>
      <input>
        <parameter name="STAMACAddress">
          <description>
            MAC address of the STA that the latency test is to be run to.
          </description>
          <syntax>
            <dataType ref="MACAddress"/>
          </syntax>
        </parameter>

        <parameter name="VID">
          <description>
            The VLAN ID (VID) that the latency test is to run on.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="4095"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="WMMUP">
          <description>
            Wi-Fi MultiMedia (WMM) User Priority {{bibref|AMB}} that the
            latency test is to run on.
            A value of 8 indicates that the WMM UP is not specified.

            If WMM is not supported by the BSS and the STA, then this is
            ignored.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="8"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="NumberOfRepetitions">
          <description>
           Number of echo tests to run in the latency test set.

           If the value of this field is 0, then this field is ignored.
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="65535"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="Timeout">
          <description>
            If any echo test duration exceeds this time in {{units}},
            then the echo test is declared a failure. 

            A value of 0 indicates that no Timeout is specified. 
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="65535"/>
              <units value="milliseconds"/>
            </unsignedInt>
          </syntax>
        </parameter>

        <parameter name="DataBlockSize">
          <description>
            The size of each data block, in {{units}}, transmitted in each
            echo test.

            A value of 0 indicates that no DataBlockSize is specified. 
          </description>
          <syntax>
            <unsignedInt>
              <range maxInclusive="65535"/>
              <units value="bytes"/>
            </unsignedInt>
          </syntax>
        </parameter>

      </input>
      <output>

        <parameter name="Status">
          <description>
            Indicates the type of outcome of the latency test request. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="InitiateWPSPBC">

    <command name="InitiateWPSPBC()" async="true" version="2.17">
      <description>
        Initiates a Wi-Fi Protected Setup (WPS) Push Button Configuration
        (PBC) process as defined in {{bibref|WPS 2.0}} .
      </description>

      <output>

        <parameter name="Status">
          <description>
            Indicates the response to the request to start Wi-Fi Protected
            Setup (WPS) Push Button Configuration (PBC). {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
      </output>
    </command>
  </component>

  <component name="ChannelScan">

    <command name="ChannelScan()" async="true" version="2.15">
      <description>
        This parameter represents a request to initiate a channel scan on this
        radio on the given channel using a specific {{param|DwellTime}}. This
        command should result in updating
        {{object|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.ScanResult.}}

        If the instance of this {{object}} is the same as
        {{object|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}}}, then
        this command is similar to,
        {{command|Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.ChannelScanRequest()}}.
      </description>
      <input>
        <component ref="WiFiChannelScanInput"/>
      </input>
      <output>

        <parameter name="Status">
          <description>
            Indicates the type of outcome of the request to initiate a channel
            scan. {{enum}}
          </description>
          <syntax>
            <string>
              <enumeration value="Success"/>
              <enumeration value="Error_Not_Ready"/>
              <enumeration value="Error_Invalid_Input"/>
              <enumeration value="Error_Timeout"/>
              <enumeration value="Error_Interface_Down"/>
              <enumeration value="Error_Other" optional="true"/>
            </string>
          </syntax>
        </parameter>
        <component ref="BigScanResult" version="2.15"/>
      </output>
    </command>
  </component>

  <component name="WiFiUSP">

    <component ref="PreferredBackhauls"/>

    <object base="Device.WiFi.DataElements.Network." access="readOnly"
        minEntries="1" maxEntries="1">
      <component ref="SetTrafficSeparation"/>
      <component ref="SetServicePrioritization"/>
      <component ref="SetPreferredBackhauls"/>
      <component ref="SetSSID"/>
      <component ref="SetMSCSDisallowed"/>
      <component ref="SetSCSDisallowed"/>
    </object>

    <object base="Device.WiFi.DataElements.Network.Device.{i}."
        access="readOnly" minEntries="1" maxEntries="unbounded">
      <component ref="SetSTASteeringState"/>
      <component ref="SetDFSState"/>
      <component ref="SetAnticipatedChannelPreference"/>
      <component ref="InitiateWPSPBC"/>
    </object>

    <object base="Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}."
        access="readOnly" minEntries="1" maxEntries="unbounded">
      <component ref="ChannelScanRequest"/>
      <component ref="RadioEnable"/>
      <component ref="SetTxPowerLimit"/>
      <component ref="SetSpatialReuse"/>
      <component ref="WiFiRestart"/>
    </object>

    <object
        base="Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.BSS.{i}."
        access="readOnly" minEntries="1" maxEntries="unbounded">
      <component ref="SetQMDescriptors"/>
      <component ref="ThroughputTest"/>
      <component ref="LatencyTest"/>
    </object>

    <object
        base="Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.BSS.{i}.STA.{i}."
        access="readOnly" minEntries="1" maxEntries="unbounded">
      <component ref="ClientSteer"/>
    </object>

    <object base="Device.WiFi." access="readOnly" minEntries="1"
        maxEntries="1">

      <command name="NeighboringWiFiDiagnostic()" async="true" version="2.12">
        <description>
          This command defines access to other WiFi SSIDs that this device is
          able to receive.
        </description>
        <output>

          <parameter name="Status" version="2.13">
            <description>
              Indicates the availability of diagnostics data. {{enum}}

              If the value of this parameter is anything other than
              {{enum|Complete}}, the values of the other results parameters for
              this test are indeterminate.
            </description>
            <syntax>
              <string>
                <enumeration value="Canceled" optional="true"/>
                <enumeration value="Complete"/>
                <enumeration value="Error" optional="true"/>
              </string>
            </syntax>
          </parameter>
          <component ref="WiFiNeighboringWiFiDiagnosticsOutput" version="2.12"/>
        </output>
      </command>

      <command name="Reset()" version="2.12" async="false">
        <description>
          This command represents a request to reset or reboot the Wi-Fi
          sub-system without resetting or rebooting the device.
        </description>
      </command>
    </object>

    <object
        base="Device.WiFi.DataElements.Network.Device.{i}.MultiAPDevice.Backhaul."
        access="readOnly" minEntries="1" maxEntries="1">
      <command name="SteerWiFiBackhaul()" async="true" version="2.15">
        <description>
          This command requests the Wi-Fi backhaul link to be steered to
          associate to a different BSS when the device is working as a bridge
          in a mesh network. The device needs to already have the necessary
          credentials for the switch to happen.

          The {{param|TargetBSS}} should be an instance of a
          Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.BSS.{i}.BSSID.
        </description>
        <input>
          <component ref="SteerWiFiBackhaulInput"/>
        </input>
        <output>

          <parameter name="Status">
            <description>
              Indicates the response to the Wi-Fi backhaul steering request.
              {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Invalid_Input"/>
                <enumeration value="Error_Interface_Down"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>
    </object>

    <object
        base="Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.MultiAPRadio."
        access="readOnly" minEntries="1" maxEntries="1">
      <component ref="FullScan"/>
      <component ref="ChannelScan"/>
    </object>

    <object
        base="Device.WiFi.DataElements.Network.Device.{i}.Radio.{i}.BSS.{i}.STA.{i}.MultiAPSTA."
        access="readOnly" minEntries="1" maxEntries="1">

      <command name="Disassociate()" async="true">
        <description>
          This command represents a request to disassociate this associated
          device.
        </description>
        <input>
          <component ref="DisassociateInput"/>
        </input>
        <output>

          <parameter name="Status">
            <description>
              Indicates the response to the request to disassociate an
              associated device. {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Interface_Down"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>

      <command name="BTMRequest()" async="true">
        <description>
          This command requests initiation of a BSS Transition Management (BTM)
          request to influence this client's roaming behavior to another BSS as
          defined in {{bibref|802.11-2020|Section 9.6.13.9}}.
        </description>
        <input>
          <component ref="BTMRequestInput"/>
        </input>
        <output>

          <parameter name="Status">
            <description>
              Indicates the response to the BSS Transition Management (BTM)
              request. {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Invalid_Input"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Invalid_Mac"/>
                <enumeration value="Error_Interface_Down"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>
    </object>

    <object base="Device.WiFi.DataElements.AssociationEvent."
        access="readOnly" minEntries="1" maxEntries="1">
      <event name="Associated!" version="2.15">
        <description>
          The event is generated when an Associated Device (STA) associates to
          a BSS.
        </description>

        <component ref="AssociationEventData"/>

        <object name="WiFi6Capabilities." minEntries="1" maxEntries="1"
            version="2.16">
          <description>
            Describes the Wi-Fi 6 capabilities of the Associated Device (STA).
          </description>

          <component ref="WiFi6"/>
        </object>

      </event>
    </object>

    <object base="Device.WiFi.DataElements.DisassociationEvent."
        access="readOnly" minEntries="1" maxEntries="1">

      <event name="Disassociated!" version="2.15">
        <description>
          The event is generated when an Associated Device (STA) disassociates
          from a BSS.
        </description>
        <component ref="DisassociationEventData"/>

        <object name="DisassociationLinkStats.{i}."
            minEntries="0" maxEntries="unbounded" version="2.17">
          <description>
            This object describes the final per link stats of each affiliated STA
            on disassociation.

            Applies only to Multi-Link Device (MLD) links.

            EasyMesh {{bibref|EasyMesh}} source: Affiliated STA Traffic Stats.
          </description>

          <component ref="DisassociationLinkStats"/>
        </object>

      </event>
    </object>

    <object base="Device.WiFi.DataElements.FailedConnectionEvent."
        access="readOnly" minEntries="1" maxEntries="1">
      <event name="FailedConnection!" version="2.15">
        <description>
          The event is generated when an Associated Device (STA) fails to
          connect to a BSS.
        </description>

        <component ref="FailedConnectionEventData"/>
      </event>
    </object>

    <object base="Device.WiFi.Radio.{i}." access="readOnly" minEntries="0"
        maxEntries="unbounded">

      <command name="RemoteMeasurementRequest()" async="true" version="2.15">
        <description>
          This command requests initiation of a Remote Measurement request to
          retrieve measurement data from a BSS on this radio. Upon receipt of
          this request, this radio is to initiate a measurement of the output
          {{param|SignalStrength}} and {{param|Noise}} for the indicated input.
        </description>
        <input>
          <component ref="RemoteMeasurementRequestInput"/>
        </input>
        <output>
          <component ref="RemoteMeasurementRequestOutput"/>

          <parameter name="Status">
            <description>
              Indicates the response to the Remote Measurement request.
              {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Invalid_Input"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Invalid_Mac"/>
                <enumeration value="Error_Interface_Down"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>

      <command name="InitiateCCAMeasurement()" async="true" version="2.15">
        <description>
          This command represents a request to initiate a Clear Channel
          Assessment (CCA) measurement scan on this radio on the given channel
          using a specific {{param|DwellTime}}.
        </description>
        <input>
          <component ref="CCAMeasurementInput"/>
        </input>
        <output>
          <component ref="CCAMeasurementOutput"/>

          <parameter name="Status">
            <description>
              Indicates the response to the request to initiate a Clear Channel
              Assessment (CCA) measurement. {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Implemented"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Invalid_Input"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Interface_Down"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>
      <component ref="FullScan"/>
      <component ref="ChannelScan"/>
    </object>

    <object base="Device.WiFi.AccessPoint.{i}.WPS." access="readOnly"
        minEntries="1" maxEntries="1">

      <command name="InitiateWPSPBC()" async="true" version="2.15">
        <description>
          Initiates a Wi-Fi Protected Setup (WPS) Push Button Configuration
          (PBC) process as defined in {{bibref|WPS 2.0}} .
        </description>
        <output>

          <parameter name="Status">
            <description>
              Indicates the response to the request to start Wi-Fi Protected
              Setup (WPS) Push Button Configuration (PBC). {{enum}}
            </description>
            <syntax>
              <string>
                <enumeration value="Success"/>
                <enumeration value="Error_Not_Ready"/>
                <enumeration value="Error_Timeout"/>
                <enumeration value="Error_Other" optional="true"/>
              </string>
            </syntax>
          </parameter>
        </output>
      </command>
    </object>

    <object base="Device.WiFi.AccessPoint.{i}.Security." access="readOnly"
        minEntries="1" maxEntries="1">

      <command name="Reset()" version="2.12" async="false">
        <description>
          Reset this {{object|#}} instance's WiFi security settings to their
          factory default values. The affected settings include
          {{param|ModeEnabled}}, {{param|WEPKey}}, {{param|PreSharedKey}},
          {{param|KeyPassphrase}}, {{param|SAEPassphrase}}, and
          {{param|#.WPS.PIN}} (if applicable).

          If the command cannot be executed, the agent MUST reject the command.
          Possible failure reasons include a lack of default values or if
          {{param|ModeEnabled}} is an Enterprise type, i.e.
          {{enum|WPA-Enterprise|ModesSupported}},
          {{enum|WPA2-Enterprise|ModesSupported}},
          {{enum|WPA3-Enterprise|ModesSupported}}, or
          {{enum|WPA-WPA2-Enterprise|ModesSupported}}.
        </description>
      </command>

    </object>
  </component>

  <model name="WiFiUSP:2.16">
    <component ref="Root"/>
    <component ref="WiFi"/>
    <component ref="WiFiUSP"/>
  </model>
</dm:document>
