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

  Copyright (c) 2010-2021, 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-8"
    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-8
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-1-8.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-15-0-bulkdata"
    file="tr-181-2-15-0-bulkdata.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="Alias" ref="_AliasCommon"/>
    <dataType name="URL"/>
  </import>

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

  <component name="BulkData">

    <object name="Device.BulkData." access="readOnly" minEntries="1"
        maxEntries="1" version="2.5">
      <description>
        This object provides bulk data collection capabilities and global
        collection settings that affect the entire device.

        Bulk Data utilizes various solutions (e.g., IPDR, HTTP) to collect data
        from devices and transfer the data to a collection server.

        The IPDR solution is based on a service specification described in
        {{bibref|TR-232}}.

        The HTTP solution is based on transfer mechanisms described in
        {{template|BULK-DATA-HTTP-REF}}.

        {{template|BULK-DATA-OPT-SOLNS}}

        The Bulk Data Collection Profiles are measured over a reporting
        interval (which can be aligned with absolute time) and are made
        available to the collection server.
      </description>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables all collection profiles.

          If {{false}}, bulk data will not be collected or reported.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          Indicates the status of the Bulk Data Collection mechanism.
        </description>
        <syntax>
          <string>
            <enumeration value="Enabled">
              <description>
                Bulk Data Collection is enabled and working as intended.
              </description>
            </enumeration>
            <enumeration value="Disabled">
              <description>Bulk Data Collection is disabled.</description>
            </enumeration>
            <enumeration value="Error" optional="true">
              <description>
                Bulk Data Collection is enabled, but there is an error
                condition preventing the successful collection of bulk data.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="MinReportingInterval" access="readOnly">
        <description>
          Minimum reporting interval in {{units}} that the CPE is capable of
          supporting.

          A value of 0 indicates no minimum reporting interval.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="Protocols" access="readOnly">
        <description>
          Represents the IPDR and transport protocols that this device is
          capable of supporting.
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="HTTP">
              <description>
                Hypertext Transfer Protocol {{bibref|RFC2616}}
              </description>
            </enumeration>
            <enumeration value="MQTT">
              <description>
                Message Queuing Telemetry Transport {{bibref|MQTT31}},
                {{bibref|MQTT311}}, and {{bibref|MQTT50}}
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="EncodingTypes" access="readOnly">
        <description>
          Represents the Encoding Types for the protocols that this device is
          capable of supporting.
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="CSV">
              <description>
                Comma Separated Values. Used with the HTTP Protocol.
                {{bibref|RFC4180}}
              </description>
            </enumeration>
            <enumeration value="JSON">
              <description>
                JavaScript Object Notation. Used with the HTTP Protocol.
                {{bibref|RFC7159}}
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="ParameterWildCardSupported" access="readOnly"
          version="2.10">
        <description>
          When {{true}}, the Device supports the use of wildcards to determine
          the parameters that are reported using a Profile.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="MaxNumberOfProfiles" access="readOnly">
        <description>
          The maximum number of profiles that can exist at any given time.
          Specifically, the maximum number of {{object|Profile.{i}.}} instances
          that the Controller can create.

          If the value of this parameter is -1, then it means that the CPE
          doesn't have a limit to the number of profiles that can exist.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="MaxNumberOfParameterReferences" access="readOnly">
        <description>
          The maximum number of parameters that can be referenced via the bulk
          data collection mechanism. Specifically, the maximum number of
          parameters that can be referenced via
          {{param|Profile.{i}.Parameter.{i}.Reference}} across all Profile and
          Parameter instances (including the expansion of partial paths within
          the Reference parameter).

          If the value of this parameter is -1, then it means that the CPE
          doesn't have a limit to the number of parameter that can be
          referenced via the bulk data collection mechanism.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
          </int>
        </syntax>
      </parameter>

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

    <object name="Device.BulkData.Profile.{i}." access="readWrite"
        numEntriesParameter="ProfileNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.5">
      <description>
        A set of Bulk Data Collection profiles.

        Each profile represents a bulk data report, including its own timing
        configuration, communications configuration, and set of parameters.
        This allows the Controller to configure multiple reports to be
        generated at different times for different sets of data.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables this specific bulk data profile.

          If {{false}}, this profile will not be collected or reported.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Alias" access="readWrite">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>

      <parameter name="Name" access="readWrite" version="2.10">
        <description>
          The name of the profile.
        </description>
        <syntax>
          <string>
            <size maxLength="255"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="NumberOfRetainedFailedReports" access="readWrite"
          version="2.10">
        <description>
          The number of failed reports to be retained and transmitted (in
          addition to the current report) at the end of the current reporting
          interval.

          If the value of the {{param|EncodingType}} parameter is modified any
          outstanding failed reports are deleted.

          If the CPE cannot retain the number of failed reports from previous
          reporting intervals while transmitting the report of the current
          reporting interval, then the oldest failed reports are deleted until
          the CPE is able to transmit the report from the current reporting
          interval.

          A value of 0 indicates that failed reports are not to be retained for
          transmission in the next reporting interval.

          A value of -1 indicates that the CPE will retain as many failed
          reports as possible.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1"/>
          </int>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Protocol" access="readWrite">
        <description>
          The Bulk Data Protocol being used for this collection profile.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="#.Protocols"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="EncodingType" access="readWrite">
        <description>
          The Bulk Data encoding type being used for this collection profile.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="#.EncodingTypes"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ReportingInterval" access="readWrite">
        <description>
          The reporting interval in {{units}}. Each report is generated based
          on this interval and {{param|TimeReference}}.

          The CPE MAY reject a request to set {{param}} to less than
          {{param|#.MinReportingInterval}}.

          Reporting intervals MUST begin every {{param}} {{units}}.

          If {{param}} is changed while collection is enabled, the first
          reporting interval begins immediately.

          For example, if {{param}} is 86400 (a day) and if
          {{param|TimeReference}} is set to UTC midnight on some day (in the
          past, present, or future) then the CPE will generate (and transmit)
          its report at midnight every 24 hours.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1"/>
            <units value="seconds"/>
          </unsignedInt>
          <default type="object" value="86400"/>
        </syntax>
      </parameter>

      <parameter name="TimeReference" access="readWrite">
        <description>
          An absolute time reference in UTC to determine when will be
          transmitted. Each reporting interval MUST complete at this reference
          time plus or minus an integer multiple of
          {{param|ReportingInterval}}, unless unable to due to higher
          prioritized operations.

          {{param}} is used only to set the "phase" of the reporting intervals.
          The actual value of {{param}} can be arbitrarily far into the past or
          future.

          If {{param}} is changed while collection of bulk data is enabled, the
          first reporting interval begins immediately.

          The Unknown Time value as defined in {{bibref|TR-106}} indicates that
          no particular time reference is specified. That is, the CPE MAY
          locally choose the time reference, and is required only to adhere to
          the specified reporting intervals.

          If absolute time is not available to the CPE, its reporting interval
          behavior MUST be the same as if the {{param}} parameter was set to
          the Unknown Time value.

          For example, if {{param|ReportingInterval}} is 86400 (a day) and if
          {{param}} is set to UTC midnight on some day (in the past, present,
          or future) then the CPE will generate (and transmit, if in a "ITPush"
          mode) its report at midnight every 24 hours.

          Note that, if {{param}} is set to a time other than the Unknown Time,
          the first reporting interval (which has to begin immediately) will
          almost certainly be shorter than {{param|ReportingInterval}}). This
          is why {{param}} is defined in terms of when reporting intervals
          complete rather than start.
        </description>
        <syntax>
          <dateTime/>
          <default type="object" value="0001-01-01T00:00:00Z"/>
        </syntax>
      </parameter>

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

    <object name="Device.BulkData.Profile.{i}.Parameter.{i}."
        access="readWrite" numEntriesParameter="ParameterNumberOfEntries"
        minEntries="0" maxEntries="unbounded" dmr:noUniqueKeys="true"
        version="2.5">
      <description>
        Bulk data parameter table.

        Each entry in this table represents a parameter (or set of parameters
        if a partial path is provided) to be collected and reported.
      </description>

      <parameter name="Name" access="readWrite" version="2.10">
        <description>
          Name of the parameter in the report body.

          If the value of this parameter is {{empty}}, then the value of the
          {{param|Reference}} parameter is used as the name.

          When the value {{param|Reference}} parameter contains wildcards
          and/or partial parameter names, the rules for determining the value
          of this parameter are specified in {{template|BULK-DATA-WILD-REF}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Reference" access="readWrite">
        <description>
          Represents the parameter(s) that are part of this Bulk Data
          collection profile. The value MUST be a path name of a parameter or
          an object.

          When the {{param|##.ParameterWildCardSupported}} parameter has a
          value of {{true}}, patterns for instance identifiers are permitted
          with wildcards (an "*" character) in place of instance identifiers;
          any attempt to set the value otherwise MUST be rejected by the CPE.

          In the case where an Object Path is specified, the
          sub-objects of the resolved pattern and contained parameters will be
          part of the bulk data collected and reported. If the path name refers
          to an object then it MUST end with a '.'.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.BulkData.Profile.{i}.CSVEncoding." access="readOnly"
        minEntries="1" maxEntries="1" version="2.10">
      <description>
        This object defines the properties to be used when the
        {{object|##.Profile}} object's {{param|#.EncodingType}} parameter value
        is {{enum|CSV|##.EncodingTypes}}.
      </description>

      <parameter name="FieldSeparator" access="readWrite">
        <description>
          Field separator to use when encoding CSV data.
        </description>
        <syntax>
          <string/>
          <default type="object" value=","/>
        </syntax>
      </parameter>

      <parameter name="RowSeparator" access="readWrite">
        <description>
          Row separator to use when encoding CSV data.
        </description>
        <syntax>
          <string/>
          <default type="object" value=" "/>
        </syntax>
      </parameter>

      <parameter name="EscapeCharacter" access="readWrite">
        <description>
          Escape character to use when encoding CSV data.
        </description>
        <syntax>
          <string/>
          <default type="object" value="&quot;"/>
        </syntax>
      </parameter>

      <parameter name="ReportFormat" access="readWrite">
        <description>
          This parameter describes the formatting used for reports defined by
          this profile as described in {{template|BULK-DATA-CSV-REF}}.

          Note: This parameter is encoded as a token in the BBF-Report-Format
          header field and MUST NOT include spaces or other characters excluded
          from token characters defined in {{bibref|RFC2616}}.
        </description>
        <syntax>
          <string>
            <enumeration value="ParameterPerRow">
              <description>
                Reports are formatted with each parameter formatted as a row
                entry.
              </description>
            </enumeration>
            <enumeration value="ParameterPerColumn">
              <description>
                Reports are formatted with each parameter formatted as a column
                entry.
              </description>
            </enumeration>
          </string>
          <default type="object" value="ParameterPerColumn"/>
        </syntax>
      </parameter>

      <parameter name="RowTimestamp" access="readWrite">
        <description>
          The format of the timestamp to use for data inserted into the row.
        </description>
        <syntax>
          <string>
            <enumeration value="Unix-Epoch">
              <description>
                Timestamp is inserted using the UNIX epoch time (milliseconds
                since Jan 1, 1970 UTC) timestamp format. If the CPE is unable
                to acquire a time, then the time that has elapsed since the
                last reboot of the device is used.
              </description>
            </enumeration>
            <enumeration value="ISO-8601">
              <description>
                Timestamp is inserted using the ISO-8601 timestamp
                format{{template|BULK-DATA-TIMESTAMP}}.
              </description>
            </enumeration>
            <enumeration value="None">
              <description>Timestamp is not inserted in the row.</description>
            </enumeration>
          </string>
          <default type="object" value="Unix-Epoch"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.BulkData.Profile.{i}.JSONEncoding." access="readOnly"
        minEntries="1" maxEntries="1" version="2.10">
      <description>
        This object defines the properties to be used when the
        {{object|##.Profile}} object's {{param|#.EncodingType}} parameter value
        is {{enum|JSON|##.EncodingTypes}}.
      </description>

      <parameter name="ReportFormat" access="readWrite">
        <description>
          This parameter describes the formatting used for the report as
          described in {{template|BULK-DATA-JSON-REF}}.

          Note: This parameter is encoded as a token in the BBF-Report-Format
          header field and MUST NOT include spaces or other characters excluded
          from token characters defined in {{bibref|RFC2616}}.
        </description>
        <syntax>
          <string>
            <enumeration value="ObjectHierarchy">
              <description>
                Reports are formatted with each object in the object hierarchy
                of the data model encoded as a corresponding hierarchy of JSON
                Objects with the parameters of the object specified as
                name/value pairs of the JSON Object.
              </description>
            </enumeration>
            <enumeration value="NameValuePair">
              <description>
                Reports are formatted with each parameter of the data model
                encoded as a corresponding array of JSON Objects with the
                parameters specified as name/value pairs.
              </description>
            </enumeration>
          </string>
          <default type="object" value="ObjectHierarchy"/>
        </syntax>
      </parameter>

      <parameter name="ReportTimestamp" access="readWrite">
        <description>
          The format of timestamp to use for the JSON Object named
          "CollectionTime" as described in {{template|BULK-DATA-JSON-REF}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Unix-Epoch">
              <description>
                Timestamp is inserted using the UNIX epoch time (milliseconds
                since Jan 1, 1970 UTC) timestamp format. If the CPE is unable
                to acquire a time, then the time that has elapsed since the
                last reboot of the device is used.
              </description>
            </enumeration>
            <enumeration value="ISO-8601">
              <description>
                Timestamp is inserted using the ISO-8601 timestamp
                format{{template|BULK-DATA-TIMESTAMP}}.
              </description>
            </enumeration>
            <enumeration value="None">
              <description>Timestamp is not inserted.</description>
            </enumeration>
          </string>
          <default type="object" value="Unix-Epoch"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.BulkData.Profile.{i}.HTTP." access="readOnly"
        minEntries="1" maxEntries="1" version="2.10">
      <description>
        This object defines the properties to be used when transporting bulk
        data using the HTTP/HTTPS protocol. This object is used when the
        {{param|#.Protocol}} parameter has a value of
        {{enum|HTTP|##.Protocols}}. For authentication purposes the CPE MUST
        support HTTP Basic and Digest Access Authentication as defined in
        {{bibref|RFC2616}}.
      </description>

      <parameter name="URL" access="readWrite">
        <description>
          The {{datatype}} for the collection server to receive the Bulk Data
          transmitted by the CPE.
        </description>
        <syntax>
          <dataType ref="URL"/>
        </syntax>
      </parameter>

      <parameter name="Username" access="readWrite">
        <description>
          Username used to authenticate the CPE when making a connection to the
          collection server.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Password" access="readWrite">
        <description>
          Password used to authenticate the CPE when making a connection to the
          collection server.
        </description>
        <syntax hidden="true">
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="CompressionsSupported" access="readOnly">
        <description>
          Indicates the HTTP Compression mechanism(s) supported by this CPE for
          the purposes of transferring bulk data.
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="GZIP">
              <description>
                As defined in {{bibref|RFC2616|Section 3.5}}
              </description>
            </enumeration>
            <enumeration value="Compress">
              <description>
                As defined in {{bibref|RFC2616|Section 3.5}}
              </description>
            </enumeration>
            <enumeration value="Deflate">
              <description>
                As defined in {{bibref|RFC2616|Section 3.5}}
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="Compression" access="readWrite">
        <description>
          The value of this parameter represents the HTTP Compression mechanism
          to be used by the CPE when transferring data to the collection
          server.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="CompressionsSupported"
                nullValue="None"/>
          </string>
          <default type="object" value="None"/>
        </syntax>
      </parameter>

      <parameter name="MethodsSupported" access="readOnly">
        <description>
          Indicates the HTTP method(s) supported by this CPE for the purposes
          of transferring bulk data.
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="POST">
              <description>
                As defined in {{bibref|RFC2616|Section 9.5}}
              </description>
            </enumeration>
            <enumeration value="PUT">
              <description>
                As defined in {{bibref|RFC2616|Section 9.6}}
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="Method" access="readWrite">
        <description>
          The value of this parameter represents the HTTP method to be used by
          the CPE when transferring data to the collection server.
        </description>
        <syntax>
          <string>
            <enumerationRef targetParam="MethodsSupported"/>
          </string>
          <default type="object" value="POST"/>
        </syntax>
      </parameter>

      <parameter name="UseDateHeader" access="readWrite">
        <description>
          When {{true}}, the CPE encodes the HTTP Date Header
          {{bibref|RFC2616|Section 14.18}} in the HTTP client request.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="true"/>
        </syntax>
      </parameter>

      <parameter name="RetryEnable" access="readWrite">
        <description>
          When {{true}}, the CPE retries unsuccessful attempts to transfer
          data.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="RetryMinimumWaitInterval" access="readWrite">
        <description>
          Configures the data transfer retry wait interval, in seconds, as
          specified in {{template|BULK-DATA-HTTP-RETRY-REF}}.

          The device MUST use a random value between {{param}} and ({{param}} *
          {{param|RetryIntervalMultiplier}} / 1000) as the first retry wait
          interval. Other values in the retry pattern MUST be calculated using
          this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="5"/>
        </syntax>
      </parameter>

      <parameter name="RetryIntervalMultiplier" access="readWrite">
        <description>
          Configures the retry interval multiplier as specified in
          {{template|BULK-DATA-HTTP-RETRY-REF}}.

          This value is expressed in units of 0.001. Hence the values of the
          multiplier range between 1.000 and 65.535.

          The device MUST use a random value between
          {{param|RetryMinimumWaitInterval}} and
          ({{param|RetryMinimumWaitInterval}} * {{param}} / 1000) as the first
          retry wait interval. Other values in the retry pattern MUST be
          calculated using this value as a starting point.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1000" maxInclusive="65535"/>
          </unsignedInt>
          <default type="object" value="2000"/>
        </syntax>
      </parameter>

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

      <parameter name="PersistAcrossReboot" access="readWrite" version="2.12">
        <description>
          Determines whether or not data transfers that have failed are
          required to be persisted across reboots.

          If {{param}} is {{true}}, then failed data transfers MUST be
          persisted across reboots.

          If {{param}} is {{false}}, then failed data transfers are not
          required to be persisted across reboots.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}."
        access="readWrite"
        numEntriesParameter="RequestURIParameterNumberOfEntries" minEntries="0"
        maxEntries="unbounded" dmr:noUniqueKeys="true" version="2.10">
      <description>
        This object represents an instance of a parameter to be used in the
        report header used as part of the HTTP Request-URI transmitted by the
        CPE to the collection server using the Request-URI in addition to the
        parameters required by {{template|BULK-DATA-HTTP-QUERY-REF}}.
      </description>

      <parameter name="Name" access="readWrite">
        <description>
          Name of the Request-URI parameter.

          If {{param}} is {{empty}}, the name of the Request-URI parameter is
          the value of {{param|Reference}}.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Reference" access="readWrite">
        <description>
          The value MUST be the path name of a parameter to be used as the
          Request-URI parameter.

          If the value of this parameter is empty, then this object is not
          encoded in the report header.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.BulkData.Profile.{i}.MQTT." access="readOnly"
        minEntries="1" maxEntries="1" version="2.15">
      <description>
        This object defines the properties to be used when transporting bulk
        data using the MQTT protocol. This object is used when the
        {{param|#.Protocol}} parameter has a value of
        {{enum|MQTT|##.Protocols}}.
      </description>

      <parameter name="Reference" access="readWrite">
        <description>
          A reference to the MQTT Client used by this Bulk Data Collection
          Profile when communicating via the MQTT Protocol.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent=".MQTT.Client."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="PublishTopic" access="readWrite">
        <description>
          The topic name the Agent MUST use when sending the Bulk Data report.
        </description>
        <syntax>
          <string>
            <size maxLength="65535"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="PublishQoS" access="readWrite">
        <description>
          The Agent MUST use this QoS value when sending the Bulk Data report.

          If the referenced MQTT Client uses MQTT 5.0 and the MQTT server only
          indicates support for a QoS value in the CONNACK Maximum QoS property
          lower than this QoS value, the Agent MUST use the highest QoS value
          that is supported by the server.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="2"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="PublishRetain" access="readWrite">
        <description>
          If set to {{true}} the Agent MUST set the RETAIN flag in MQTT PUBLISH
          messages carrying the Bulk Data report to 1, unless the MQTT server
          sent Retain Available = 0 (MQTT 5.0) in its CONNACK (in which case,
          the Agent MUST set the RETAIN flag to 0).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <profile name="BulkDataColl:1" version="2.5">
      <object ref="Device.BulkData." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="MinReportingInterval" requirement="readOnly"/>
        <parameter ref="Protocols" requirement="readOnly"/>
        <parameter ref="EncodingTypes" requirement="readOnly"/>
        <parameter ref="ProfileNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.BulkData.Profile.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Alias" requirement="readWrite"/>
        <parameter ref="Protocol" requirement="readWrite"/>
        <parameter ref="EncodingType" requirement="readWrite"/>
        <parameter ref="ReportingInterval" requirement="readWrite"/>
        <parameter ref="TimeReference" requirement="readWrite"/>
        <parameter ref="ParameterNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.BulkData.Profile.{i}.Parameter.{i}."
          requirement="createDelete">
        <parameter ref="Reference" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="BulkDataReports:1" extends="BulkDataColl:1" version="2.10">
      <object ref="Device.BulkData." requirement="present">
        <parameter ref="ParameterWildCardSupported" requirement="readOnly"/>
      </object>
      <object ref="Device.BulkData.Profile.{i}." requirement="createDelete">
        <parameter ref="Name" requirement="readWrite"/>
        <parameter ref="NumberOfRetainedFailedReports" requirement="readWrite"/>
      </object>
      <object ref="Device.BulkData.Profile.{i}.Parameter.{i}."
          requirement="createDelete">
        <parameter ref="Name" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="BulkDataJSONEncoding:1" extends="BulkDataColl:1"
        version="2.10">
      <object ref="Device.BulkData.Profile.{i}.JSONEncoding."
          requirement="present">
        <parameter ref="ReportFormat" requirement="readWrite"/>
        <parameter ref="ReportTimestamp" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="BulkDataCSVEncoding:1" extends="BulkDataColl:1"
        version="2.10">
      <object ref="Device.BulkData.Profile.{i}.CSVEncoding."
          requirement="present">
        <parameter ref="FieldSeparator" requirement="readWrite"/>
        <parameter ref="RowSeparator" requirement="readWrite"/>
        <parameter ref="EscapeCharacter" requirement="readWrite"/>
        <parameter ref="ReportFormat" requirement="readWrite"/>
        <parameter ref="RowTimestamp" requirement="readWrite"/>
      </object>
    </profile>

    <profile name="BulkDataHTTP:1" extends="BulkDataColl:1" version="2.10">
      <object ref="Device.BulkData.Profile.{i}.HTTP." requirement="present">
        <parameter ref="URL" requirement="readWrite"/>
        <parameter ref="Username" requirement="readWrite"/>
        <parameter ref="Password" requirement="readWrite"/>
        <parameter ref="CompressionsSupported" requirement="readOnly"/>
        <parameter ref="Compression" requirement="readWrite"/>
        <parameter ref="MethodsSupported" requirement="readOnly"/>
        <parameter ref="Method" requirement="readWrite"/>
        <parameter ref="UseDateHeader" requirement="readWrite"/>
        <parameter ref="RetryEnable" requirement="readWrite"/>
        <parameter ref="RetryMinimumWaitInterval" requirement="readWrite"/>
        <parameter ref="RetryIntervalMultiplier" requirement="readWrite"/>
        <parameter ref="RequestURIParameterNumberOfEntries"
            requirement="readOnly"/>
      </object>
      <object ref="Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}."
          requirement="createDelete">
        <parameter ref="Name" requirement="readWrite"/>
        <parameter ref="Reference" requirement="readWrite"/>
      </object>
    </profile>
  </component>

  <model name="BulkData:2.15">
    <component ref="Root"/>
    <component ref="BulkData"/>
  </model>
</dm:document>
