<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC "" "reference.RFC.2119.xml">
]>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc rfcedstyle="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" consensus="yes" ipr="trust200902" number="7545"
     submissionType="IETF">
  <front>
    <title abbrev="PAWS">Protocol to Access White-Space (PAWS)
    Databases</title>

    <author fullname="Vincent Chen" initials="V." role="editor" surname="Chen">
      <organization>Google</organization>

      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>

          <city>Mountain View, CA</city>

          <code>94043</code>

          <country>United States</country>
        </postal>

        <email>vchen@google.com</email>
      </address>
    </author>

    <author fullname="Subir Das" initials="S." surname="Das">
      <organization>Applied Communication Sciences</organization>

      <address>
        <postal>
          <street>150 Mount Airy Road</street>

          <city>Basking Ridge</city>

          <region>NJ</region>

          <code>07920</code>

          <country>United States</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>sdas@appcomsci.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Lei Zhu" initials="L." surname="Zhu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone>+86 13910157020</phone>

        <facsimile/>

        <email>lei.zhu@huawei.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="John Malyar" initials="J." surname="Malyar">
      <organization abbrev="iconectiv">iconectiv (formerly Telcordia
      Interconnection Solutions)</organization>

      <address>
        <postal>
          <street>444 Hoes Lane/RRC 4E1106</street>

          <city>Piscataway</city>

          <region>NJ</region>

          <code>08854</code>

          <country>United States</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>jmalyar@iconectiv.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Peter J. McCann" initials="P." surname="McCann">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>400 Crossing Blvd, 2nd Floor</street>

          <city>Bridgewater</city>

          <region>NJ</region>

          <code>08807</code>

          <country>United States</country>
        </postal>

        <phone>+1 908 541 3563</phone>

        <facsimile/>

        <email>peter.mccann@huawei.com</email>

        <uri/>
      </address>
    </author>

    <date month="May" year="2015"/>

    <area>Application Area</area>

    <workgroup>PAWS</workgroup>

    <keyword>dynamic spectrum</keyword>

    <keyword>radio spectrum</keyword>

    <keyword>wireless spectrum</keyword>

    <keyword>spectrum</keyword>

    <keyword>spectrum database</keyword>

    <keyword>TV white space</keyword>

    <keyword>TVWS</keyword>

    <keyword>TVBD</keyword>

    <keyword>white space device</keyword>

    <keyword>WSD</keyword>

    <abstract>
      <t>Portions of the radio spectrum that are allocated to licensees are
      available for non-interfering use. This available spectrum is called
      "white space". Allowing secondary users access to available spectrum
      "unlocks" existing spectrum to maximize its utilization and to provide
      opportunities for innovation, resulting in greater overall spectrum
      utilization.</t>

      <t>One approach to managing spectrum sharing uses databases to report
      spectrum availability to devices. To achieve interoperability among
      multiple devices and databases, a standardized protocol must be defined
      and implemented. This document defines such a protocol, the "Protocol to
      Access White-Space (PAWS) Databases".</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This section provides some high-level introductory material. Readers
      are strongly encouraged to read <xref target="RFC6953">"Protocol to
      Access White-Space (PAWS) Databases: Use Cases and Requirements"</xref>
      for use cases, requirements, and additional background.</t>

      <t>A geospatial database can track available spectrum (in accordance
      with the rules of one or more regulatory domains) and make this
      information available to devices. This approach shifts the complexity of
      spectrum-policy conformance out of the device and into the database.
      This approach also simplifies adoption of policy changes, limiting
      updates to a handful of databases, rather than numerous devices. It
      opens the door for innovations in spectrum management that can
      incorporate a variety of parameters, including user location and time.
      In the future, it also can include other parameters, such as user
      priority, signal type and power, spectrum supply and demand, payment or
      micro-auction bidding, and more.</t>

      <t>In providing this service, a database records and updates information
      necessary to protect primary users -- for example, this information may
      include parameters such as a fixed transmitter's call sign, its
      geolocation, antenna height, power, and periods of operation. The rules
      that the database is required to follow, including its schedule for
      obtaining and updating protection information, protection rules, and
      information reported to devices, vary according to regulatory domain.
      Such variations, however, should be handled by each database and hidden
      from devices to the maximum extent possible.</t>

      <t>This specification defines an extensible protocol, built on top of
      HTTP and TLS, to obtain available spectrum from a geospatial database by
      a device with geolocation capability. It enables a device to operate in
      a regulatory domain that implements this protocol.</t>
    </section>

    <section title="Conventions and Terminology">
      <t/>

      <section title="Conventions Used in This Document">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref
        target="RFC2119">"Key words for use in RFCs to Indicate Requirement
        Levels" </xref>.</t>
      </section>

      <section title="Terminology">
        <t>
          <list style="hanging">
            <t hangText="Database or Spectrum Database:">A Database is an
            entity that contains current information about available spectrum
            at a given location and time, as well as other types of
            information related to spectrum availability and usage.</t>

            <t hangText="Device ID:">An identifier for a device.</t>

            <t hangText="EIRP:">Effective Isotropically Radiated Power</t>

            <t hangText="ETSI:">European Telecommunications Standards
            Institute (http://www.etsi.org)</t>

            <t hangText="FCC:">The U.S. Federal Communications Commission
            (http://www.fcc.gov)</t>

            <t hangText="Listing server:">A server that provides the URIs for
            one or more Spectrum Databases. A regulator, for example, may
            operate a Database Listing Server to publish the list of
            authorized Spectrum Databases for its regulatory domain.</t>

            <t hangText="Master Device:">A device that queries the Database,
            on its own behalf and/or on behalf of a slave device, to obtain
            available spectrum information.</t>

            <t hangText="Regulatory Domain:">A location where certain rules
            apply to the use of white-space spectrum, including the operation
            of Databases and devices involved in its use. A regulatory domain
            is normally defined by a unit of government for a particular
            country, but PAWS is agnostic as to how a regulatory domain is
            constructed.</t>

            <t hangText="Ruleset:">A ruleset represents a set of rules that
            governs the operation of white-space devices and Spectrum
            Databases. A regulatory authority can define its own set of rules
            or adopt an existing ruleset. When a Database or device is said to
            "support a ruleset", it means that it contains out-of-band
            knowledge of the rules and that its hardware and software
            implementations conform to those rules.</t>

            <t hangText="Ruleset Identifier:">A ruleset can be identified by
            an IANA-registered identifier (see <xref
            target="SectIanaRuleset">PAWS Ruleset ID Registry</xref>). When a
            Database or device indicates it supports a ruleset identifier, it
            means that it conforms to the rules associated with that
            identifier. A regulatory authority can define and register its own
            ruleset identifiers, or it can use a previously registered
            identifier if it adopts an existing ruleset.</t>

            <t hangText="Slave Device:">A device that queries the Database
            through a master device.</t>
          </list>
        </t>
      </section>
    </section>

    <section anchor="SectOverview" title="Protocol Overview">
      <t>A Master Device uses PAWS to obtain a schedule of available spectrum
      at its location. The security necessary to ensure the accuracy, privacy,
      and confidentiality of the device's location is described in the <xref
      target="SectSecurity">Security Considerations</xref>. This document
      assumes that the Master Device and the Database are connected to the
      Internet.</t>

      <t>A typical sequence of PAWS operations is outlined as follows. See
      <xref target="SectFunctionalities">"Protocol Functionalities"</xref> and
      <xref target="SectParameters">"Protocol Parameters"</xref> for
      details:</t>

      <t>
        <list style="numbers">
          <t>The Master Device obtains (statically or dynamically) the URI for
          a Database appropriate for its location, to which to send subsequent
          PAWS messages.</t>

          <t>The Master Device establishes an HTTPS session with the
          Database.</t>

          <t>The Master Device optionally sends an initialization message to
          the Database to exchange capabilities.</t>

          <t>If the Database receives an initialization message, it responds
          with an initialization-response message in the body of the HTTP
          response.</t>

          <t>The Database may require the Master Device to be registered
          before providing service.</t>

          <t>The Master Device sends an available-spectrum request message to
          the Database. The message may be on behalf of a Slave Device that
          made a request to the Master Device.</t>

          <t>If the Master Device is making a request on behalf of a Slave
          Device, the Master Device may verify with the Database that the
          Slave Device is permitted to operate.</t>

          <t>The Database responds with an available-spectrum response message
          in the body of the HTTP response.</t>

          <t>The Master Device may send a spectrum-usage notification message
          to the Database. The notification is purely informational; it
          notifies the Database what spectrum the Master Device intends to use
          and is not a request to the Database to get permission to use that
          spectrum. Some Databases may require spectrum-usage
          notification.</t>

          <t>If the Database receives a spectrum-usage notification message,
          it responds by sending the Master Device a spectrum-usage
          acknowledgement message. Since the notification is purely
          informational, the Master Device does not need to process the
          database response.</t>
        </list>
      </t>

      <t>Different regulatory domains may impose particular requirements, such
      as requiring Master Devices to register with the Database, performing
      Slave Device verification, and sending spectrum-usage notifications.</t>

      <section anchor="SectOverviewMultiRuleset" title="Multi-ruleset Support">
        <t>For a Master Device that supports multiple rulesets and operates
        with multiple Databases, PAWS supports the following sequence of
        operations for each request by the Master Device:</t>

        <t>
          <list style="numbers">
            <t>The Master Device includes in its request its location and
            optionally includes the identifier of all the rulesets it supports
            and any parameter values it might need for the request.</t>

            <t>The Database uses the device location and also may use the
            ruleset list to determine its response, for example, to select the
            list of required parameters.</t>

            <t>If required parameters are missing from the request, the
            Database responds with an error and a list of names of the missing
            parameters.</t>

            <t>The Master Device makes the request again, adding the missing
            parameter values.</t>

            <t>The Database responds to the request, including the identifier
            of the applicable ruleset.</t>

            <t>The Master Device uses the indicated ruleset to determine how
            to interpret the database response.</t>
          </list>
        </t>

        <t>NOTE: Some regulatory domains specify sets of requirements for
        device behavior that may be complex and not easily parameterized. The
        ruleset-id parameter provides a mechanism for the Database to inform
        the Master Device of an applicable ruleset, and, for devices with
        out-of-band knowledge of the particular regulatory domain
        requirements, to satisfy those requirements without having to specify
        the device-side behavior within the protocol. Ruleset identifiers will
        normally contain the name of the regulatory body that established the
        rules and version information, such as "FccTvBandWhiteSpace-2010".</t>

        <t>By separating the regulatory "authority" from the "ruleset-id", it
        allows the protocol to support multiple regulatory authorities that
        use the same device-side ruleset. It also allows support for a single
        authority to define multiple rulesets.</t>

        <t/>
      </section>
    </section>

    <section anchor="SectFunctionalities" title="Protocol Functionalities">
      <t>PAWS consists of several components. As noted below, some regulatory
      domains or database implementations may mandate the use of a component,
      even when its use is not mandated by PAWS.</t>

      <t>
        <list style="symbols">
          <t><xref target="SecDatabaseDiscovery">Database Discovery</xref> is
          a required component for the Master Device.</t>

          <t><xref target="SecInitialization">Initialization</xref> is a
          required component for the Database. Its use allows the Master
          Device to determine necessary information that has not been
          preconfigured.</t>

          <t><xref target="SecDeviceRegistration">Device Registration</xref>
          is an optional component for the Database. It can be implemented as
          a separate component or as part of the <xref
          target="SectAvailSpectrum">Available Spectrum Query</xref>
          component. It is used by the Master Device when the Database
          requires it. Note that some regulators require device registration
          for only specific device types, such as higher-power fixed (as
          opposed to mobile) devices, to allow them to contact the operators
          to resolve any interference issues.</t>

          <t><xref target="SectAvailSpectrum">Available Spectrum Query</xref>
          is a required component for the Master Device and the Database.</t>

          <t><xref target="SectSpectrumUseNotify">Spectrum Use Notify</xref>
          is an optional component for the Master Device and the Database.
          When it is required, the Database informs the Master Device via its
          response to the <xref target="SectAvailSpectrum">Available Spectrum
          Query</xref>.</t>

          <t><xref target="SecDeviceValidation">Device Validation</xref> as a
          separate component is optional for the Master Device and Database.
          When implemented by the Database, its use allows the Master Device
          to validate Slave Devices without having to use the full Available
          Spectrum Query.</t>
        </list>
      </t>

      <t>This section describes the protocol components and their messages.
      <xref target="SectParameters">"Protocol Parameters"</xref> contains a
      more thorough discussion of the parameters that make up the PAWS request
      and response messages. <xref target="SectEncoding">"Message
      Encoding"</xref> provides examples of message encodings. <xref
      target="SecHttpsBinding">"HTTPS Binding"</xref> describes the use of
      HTTPS (<xref target="RFC2818">"HTTP Over TLS"</xref>) for transferring
      PAWS messages and optional device authentication.</t>

      <t>The parameter tables in this section and <xref
      target="SectParameters">"Protocol Parameters"</xref> are for reference
      and contain the name of each parameter, the data type of each parameter,
      and whether the existence of the parameter is required for the protocol
      transaction in question. The diagrams are loosely based on the Unified
      Modeling Language (UML), and the data types are defined either in <xref
      target="SectParameters">"Protocol Parameters"</xref> or are one of the
      following primitive or structured types:</t>

      <t>
        <list style="hanging">
          <t hangText="string:">A string, as defined by <xref
          target="RFC7159">JSON</xref>, restricted to the UTF-8 encoding.</t>

          <t hangText="int:">A number, as defined by <xref
          target="RFC7159">JSON</xref>, without a fractional or exponent
          part.</t>

          <t hangText="float:">A number, as defined by <xref
          target="RFC7159">JSON</xref>.</t>

          <t hangText="boolean:">A boolean, as defined by <xref
          target="RFC7159">JSON</xref>.</t>

          <t hangText="list:">A structured type that represents a list of
          elements, as defined by <xref target="RFC7159">JSON</xref> array
          type. All elements of the list are of the same data type, which is
          indicated in its diagram and description. The diagram notation and
          description may include additional constraints, such as minimum or
          maximum number of elements.</t>
        </list>
      </t>

      <t>Also:<list style="symbols">
          <t>All parameter names are case sensitive. Unless stated otherwise,
          all string values are case sensitive.</t>

          <t>All timestamps are in UTC and are expressed using exactly the
          form, YYYY-MM-DDThh:mm:ssZ, as defined by <xref
          target="RFC3339">"Date and Time on the Internet:
          Timestamps"</xref>.</t>
        </list></t>

      <t>In some cases, specific rulesets may place additional requirements on
      message parameters. These additional requirements will be documented in
      the IANA <xref target="SectIanaRuleset">PAWS Ruleset ID Registry
      </xref>. When a request message sent to the Database has missing
      parameters, whether they are required by PAWS or the applicable ruleset,
      the Database returns the MISSING error (see <xref
      target="SectMissingError"/>), along with data indicating the missing
      parameters.</t>

      <t/>

      <section anchor="SecDatabaseDiscovery" title="Database Discovery">
        <section title="Preconfiguration">
          <t>The Master Device can be provisioned statically (preconfigured)
          with the URI of one or more Databases. For example, in a particular
          regulatory domain, there may be a number of certified Databases that
          any device operating in that domain is permitted to connect to, and
          those URIs can be preconfigured in the device.</t>

          <t>Listing Server Support: As an alternative to preconfiguring
          devices with a list of certified Databases, some regulatory domains
          support the preconfiguration of devices with the URI of a certified
          listing server, to which devices can connect to obtain the list of
          certified Databases. See <xref target="AppDBListingServer">"Database
          Listing Server Support"</xref> for further information.</t>
        </section>

        <section anchor="SecConfigUpdate"
                 title="Configuration Update: Database URI Changes">
          <t>To adapt to changes in the list of certified or approved
          Databases, the device needs to update its preconfigured list of
          Databases.</t>

          <t>A Database MAY change its URI, but before it changes its URI, it
          MUST indicate the upcoming change by including the URI of one or
          more alternate Databases using <xref
          target="SectDbUpdateSpec">DbUpdateSpec</xref> in its responses to
          devices. The Database MUST reply with DbUpdateSpec for a minimum of
          2 weeks before disabling the old URI. A device will update its
          preconfigured entry for the Database sending the DbUpdateSpec by
          replacing this entry with the alternate Databases listed in the
          DbUpdateSpec; the list of alternate Databases does not affect any
          other entries. Note that the ordering of Databases in the list does
          not imply any preference and does not need to remain the same for
          every request. The device SHOULD detect infinite redirection loops;
          if a suitable Database cannot be contacted, the device MUST treat
          this as equivalent to a response indicating no available spectrum.
          This database-change mechanism is used, for example, before a
          Database ceases operation; it is not intended to be used for dynamic
          load balancing.</t>
        </section>

        <section title="Error Handling">
          <t>The device SHOULD select another Database from its list of
          preconfigured Databases if:</t>

          <t>
            <list style="symbols">
              <t>The selected Database is unreachable or does not respond.</t>

              <t>The selected Database returns an UNSUPPORTED error (see <xref
              target="SectErrorCodes">"Error Codes"</xref>), which indicates
              the Database does not support the device (based on its device
              type, model, etc.) or supports none of the rulesets specified in
              the request.</t>
            </list>
          </t>

          <t>If a suitable Database cannot be contacted, the device MUST treat
          this as equivalent to a response indicating no available spectrum.
          If the device had previously contacted a Database to get available
          spectrum, but subsequently fails to contact a suitable Database, the
          spectrum the device is currently using can be used for as long as
          the spectrum data is valid. However, after that period, the device
          will no longer have valid spectrum to use. Some regulatory domains
          may have specific rules regarding how long the spectrum data remains
          valid in these cases.</t>
        </section>
      </section>

      <section title="PAWS Version">
        <t>PAWS version uses a "&lt;major&gt;.&lt;minor&gt;" numbering scheme
        to indicate versions of the protocol. The protocol versioning policy
        is intended to allow the device or Database to indicate the format of
        a message and its understanding of PAWS functionality defined by that
        version. No change is made to the version string for the addition of
        message components that only add to extensible parameter values. The
        &lt;minor&gt; number is incremented when the changes made to the
        protocol add functionalities (methods) but do not change the existing
        functionalities. The &lt;major&gt; number is incremented when
        incompatible changes are made to existing functionality.</t>

        <t>The current PAWS version is "1.0".</t>
      </section>

      <section anchor="SecInitialization" title="Initialization">
        <t>A Master Device SHOULD use the initialization procedure to exchange
        capability information with the Database whenever the Master Device
        powers up or initiates communication with the Database. The
        initialization response informs the Master Device of specific
        parameterized-rule values for each supported ruleset, such as
        threshold distances and time periods beyond which the device must
        update its available-spectrum data (see <xref
        target="SectRulesetInfo">"RuleSetInfo"</xref>). When
        parameterized-rule values are not preconfigured for the applicable
        ruleset at the specified location, a Master Device MUST use the
        initialization procedure.</t>

        <t>It is important to note that, when parameterized-rule values are
        preconfigured in a Master Device, they are preconfigured on a
        per-ruleset basis. That is, values preconfigured for one ruleset are
        not applicable to any other ruleset.</t>

        <t>For database implementations that require it, the initialization
        message also enables extra database-specific or ruleset-specific
        handshake parameters to be communicated before allowing
        available-spectrum requests.</t>

        <t>The Initialization request procedure is depicted in <xref
        target="FigInit"/>.<list style="symbols">
            <t><xref target="SectInitReq">INIT_REQ</xref> is the
            initialization request message</t>

            <t><xref target="SectInitResp">INIT_RESP</xref> is the
            initialization response message</t>
          </list></t>

        <figure anchor="FigInit">
          <artwork align="center"><![CDATA[
   +---------------+    +-------------------+
   | Master Device |    | Spectrum Database |
   +---------------+    +-------------------+
         |                     |
         |    INIT_REQ         |
         |-------------------->|
         |                     |
         |    INIT_RESP        |
         |<--------------------|
         |                     |]]></artwork>
        </figure>

        <section anchor="SectInitReq" title="INIT_REQ">
          <t>The initialization request message allows the Master Device to
          initiate exchange of capabilities with the Database.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|INIT_REQ                               |
+----------------------------+----------|
|deviceDesc:DeviceDescriptor | REQUIRED |
|location:GeoLocation        | REQUIRED |
|.......................................|
|*other:any                  | OPTIONAL |
+----------------------------+----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDesc:">The <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> for the device
              is REQUIRED. If the device descriptor does not contain any
              ruleset IDs, the Master Device is asking the Database to return
              a <xref target="SectRulesetInfo">RulesetInfo</xref> list that
              specifies the rulesets that it supports at the specified
              location.</t>

              <t hangText="location:">The <xref
              target="SectGeoLocation">GeoLocation</xref> of the device is
              REQUIRED. If the location is outside all regulatory domain
              supported by the Database, the Database MUST respond with an
              OUTSIDE_COVERAGE error (see <xref
              target="TableErrorCodes"/>).</t>

              <t hangText="other:">The Master Device MAY specify additional
              handshake parameters in the INIT_REQ message. The Database MUST
              ignore all parameters it does not understand. To simplify its
              initialization logic, a Master Device that supports multiple
              Databases and rulesets can include the union of all required
              parameters for all its supported rulesets. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters.</t>
            </list>
          </t>
        </section>

        <section anchor="SectInitResp" title="INIT_RESP">
          <t>The initialization response message communicates database
          parameters to the requesting device. This response is returned only
          when there is at least one ruleset. Otherwise, the Database returns
          an error response, as described in <xref
          target="SectInitReq">INIT_REQ</xref>.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|INIT_RESP                              |
+----------------------------+----------+   1..* +-------------+
|rulesetInfos:list           | REQUIRED |------->| RulesetInfo |
|databaseChange:DbUpdateSpec | OPTIONAL |        +-------------+
|.......................................|
|*other:any                  | OPTIONAL |
+----------------------------+----------+]]></artwork>
          </figure>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="rulesetInfos:">A <xref
              target="SectRulesetInfo">RulesetInfo </xref> list MUST be
              included in the response. Each RulesetInfo corresponds to a
              ruleset supported by the Database and is applicable to the
              location specified in the <xref
              target="SectInitReq">INIT_REQ</xref> message.</t>

              <t hangText="">If the device included a list of ruleset IDs in
              the DeviceDescriptor of its INIT_REQ message, each RulesetInfo
              in the response MUST match one of the specified ruleset IDs.</t>

              <t hangText="">If the DeviceDescriptor did not contain any
              ruleset IDs, the Database SHOULD include in the rulesetInfos
              list a RulesetInfo for each ruleset it supports at the specified
              location.</t>

              <t hangText="">If the Database does not support the device or
              supports none of the rulesets specified in the DeviceDescriptor,
              it MUST instead return an error with the UNSUPPORTED code (see
              <xref target="TableErrorCodes"/>) in the error response.</t>

              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              Master Device of a change to the database URI, providing one or
              more alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>

              <t hangText="other:">The Database MAY include additional
              handshake parameters in the <xref
              target="SectInitResp">INIT_RESP</xref> message. The Master
              Device MUST ignore all parameters it does not understand.
              Consult the <xref target="SectIanaParameters">PAWS Parameters
              Registry</xref> for possible additional parameters.</t>
            </list>
          </t>
        </section>
      </section>

      <section anchor="SecDeviceRegistration" title="Device Registration">
        <t>Some rulesets require a Master Device to send its registration
        information to the Database in order to establish certain operational
        parameters. FCC rules, for example, require that a 'Fixed Device'
        register its owner and operator contact information, its device
        identifier, its location, and its antenna height (see <xref
        target="FCC-CFR47-15H">FCC CFR47-15H</xref>).</t>

        <t>The Database MAY implement device registration as a separate Device
        Registration request, or as part of the available-spectrum request. If
        the Database does not implement a separate Device Registration
        request, it MUST return an error with the UNIMPLEMENTED code (see
        <xref target="TableErrorCodes"/>) in the error-response message.</t>

        <t>The Device Registration request procedure is depicted in <xref
        target="FigRegistration"/>.<list style="symbols">
            <t><xref target="SectRegReq">REGISTRATION_REQ</xref> is the
            device-registration request message</t>

            <t><xref target="SectRegResp">REGISTRATION_RESP</xref> is the
            device-registration response message</t>
          </list></t>

        <figure anchor="FigRegistration">
          <artwork align="center"><![CDATA[
   +---------------+        +-------------------+
   | Master Device |        | Spectrum Database |
   +---------------+        +-------------------+
         |                         |
         |    REGISTRATION_REQ     |
         |------------------------>|
         |                         |
         |    REGISTRATION_RESP    |
         |<------------------------|
         |                         |]]></artwork>
        </figure>

        <section anchor="SectRegReq" title="REGISTRATION_REQ">
          <t>The registration request message contains the required
          registration parameters. A parameter marked as optional may be
          required by some rulesets.</t>

          <figure>
            <artwork><![CDATA[
+-------------------------------------------+
|REGISTRATION_REQ                           |
+-------------------------------+-----------+
|deviceDesc:DeviceDescriptor    | REQUIRED  |
|location:GeoLocation           | REQUIRED  |
|deviceOwner:DeviceOwner        | OPTIONAL  |
|antenna:AntennaCharacteristics | OPTIONAL  |
|...........................................|
|*other:any                     | OPTIONAL  |
+-------------------------------+-----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDesc:">The <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> for the Master
              Device is REQUIRED. The ruleset IDs included in the
              DeviceDescriptor indicate the rulesets for which the device
              wishes to register.</t>

              <t hangText="location:">The <xref
              target="SectGeoLocation">GeoLocation</xref> for the device is
              REQUIRED. More precisely, this is the location at which the
              device intends to operate. If the location is outside all
              regulatory domains supported by the Database, the Database MUST
              respond with an OUTSIDE_COVERAGE error (see <xref
              target="TableErrorCodes"/>).</t>

              <t hangText="deviceOwner:">The <xref
              target="SectDeviceOwner">DeviceOwner</xref> information is
              OPTIONAL. Some rulesets may require deviceOwner information
              under certain conditions. See <xref
              target="SectIanaRuleset">PAWS Ruleset ID Registry</xref> for
              ruleset-specific requirements.</t>

              <t hangText="antenna:">The <xref
              target="SectAntenna">AntennaCharacteristics</xref> is
              OPTIONAL.</t>

              <t hangText="other:">Rulesets and database implementations may
              require additional registration parameters. To simplify its
              registration logic, the Master Device MAY send a union of the
              registration information required by all supported rulesets. The
              Database MUST ignore all parameters it does not understand.
              Consult the <xref target="SectIanaParameters">PAWS Parameters
              Registry</xref> for possible additional parameters.</t>
            </list>
          </t>
        </section>

        <section anchor="SectRegResp" title="REGISTRATION_RESP">
          <t>The registration response message acknowledges successful
          registration by including a RulesetInfo message for each ruleset in
          which the registration is accepted. If the Database accepts the
          registration for none of the specified rulesets, the Database MUST
          return the NOT_REGISTERED error (see <xref
          target="SectErrorCodes">"Error Codes"</xref>).</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|REGISTRATION_RESP                      |
+----------------------------+----------+   1..* +-------------+
|rulesetInfos:list           | REQUIRED |------->| RulesetInfo |
|databaseChange:DbUpdateSpec | OPTIONAL |        +-------------+
|............................|..........|
|*other:any                  | OPTIONAL |
+----------------------------+----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="rulesetInfos:">A <xref
              target="SectRulesetInfo">RulesetInfo </xref> list MUST be
              included in the response. Each entry corresponds to a ruleset
              for which the registration was accepted. The list MUST contain
              at least one entry.</t>

              <t hangText="">Each RulesetInfo in the response MUST match one
              of the ruleset IDs specified in the DeviceDescriptor of
              REGISTRATION_REQ.</t>

              <t hangText="">If the Database does not support the device or
              supports none of the rulesets specified in the DeviceDescriptor,
              it MUST instead return an error with the UNSUPPORTED code (see
              <xref target="TableErrorCodes"/>) in the error response.</t>

              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              Master Device of a change to the database URI, providing one or
              more alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>

              <t hangText="other:">Database implementations MAY return
              additional parameters in the registration response. The Master
              Device MUST ignore any parameters it does not understand.
              Consult the <xref target="SectIanaParameters">PAWS Parameters
              Registry</xref> for possible additional parameters.</t>
            </list>
          </t>
        </section>
      </section>

      <section anchor="SectAvailSpectrum" title="Available Spectrum Query">
        <t>To obtain the available spectrum from the Database, a Master Device
        sends a request that contains its geolocation and any parameters
        required by the ruleset (such as device identifier, capabilities, and
        characteristics). The Database returns a response that describes which
        frequencies are available, at what permissible operating power levels,
        and a schedule of when they are available.</t>

        <t>The Available Spectrum Query procedure is depicted in <xref
        target="FigAvailSpectrum"/>.</t>

        <t>
          <list style="symbols">
            <t><xref target="SectAvailSpectrumReq">AVAIL_SPECTRUM_REQ</xref>
            is the available-spectrum request message.</t>

            <t><xref target="SectAvailSpectrumResp">AVAIL_SPECTRUM_RESP</xref>
            is the available-spectrum response message.</t>

            <t><xref
            target="SectAvailSpectrumBatchReq">AVAIL_SPECTRUM_BATCH_REQ
            </xref> is an OPTIONAL batch version of the available-spectrum
            request message that allows multiple locations to be specified in
            the request.</t>

            <t><xref
            target="SectAvailSpectrumBatchResp">AVAIL_SPECTRUM_BATCH_RESP
            </xref> is the response message for the batch version of the
            available-spectrum request that contains available spectrum for
            each location in the request.</t>

            <t><xref target="SectSpectrumUseNotify">SPECTRUM_USE_NOTIFY</xref>
            is the spectrum-usage notification message.</t>

            <t><xref target="SectSpectrumUseResp">SPECTRUM_USE_RESP</xref> is
            the spectrum-usage acknowledgment message.</t>
          </list>
        </t>

        <figure anchor="FigAvailSpectrum">
          <artwork align="center"><![CDATA[
   +---------------+          +-------------------+
   | Master Device |          | Spectrum Database |
   +---------------+          +-------------------+
         |                            |
         |    AVAIL_SPECTRUM_REQ      |
         | (AVAIL_SPECTRUM_BATCH_REQ) |
         |--------------------------->|
         |                            |
         |    AVAIL_SPECTRUM_RESP     |
         | (AVAIL_SPECTRUM_BATCH_RESP)|
         |<---------------------------|
         |                            |
         |   (SPECTRUM_USE_NOTIFY)    |
         |--------------------------->|
         |                            |
         |    (SPECTRUM_USE_RESP)     |
         |<---------------------------|
         |                            |]]></artwork>
        </figure>

        <t/>

        <t>
          <list style="numbers">
            <t>First, the Master Device sends an available-spectrum request
            message to the Database.</t>

            <t>The Database MUST respond with an error using the
            NOT_REGISTERED code (see <xref target="TableErrorCodes"/>)
            if:<list style="symbols">
                <t>registration information is required, and</t>

                <t>the request does not include registration information,
                and</t>

                <t>the device has not previously registered with the
                Database</t>
              </list></t>

            <t>If the location specified in the request is outside the
            regulatory domain supported by the Database, the Database MUST
            respond with an OUTSIDE_COVERAGE error (see <xref
            target="TableErrorCodes"/>). If some, but not all, locations
            within a batch request are outside the regulatory domain supported
            by the Database, the Database MUST return an OK response with
            available spectrum for only the valid locations; otherwise, if all
            locations within a batch request are outside the regulatory
            domain, the Database MUST respond with an OUTSIDE_COVERAGE
            error.</t>

            <t>The Database MAY perform other validation of the request,
            (e.g., checking for missing required parameters or
            authorizations). If validation fails, the Database returns an
            appropriate <xref target="TableErrorCodes">error code</xref>. If
            the request is missing required parameters, the Database MUST
            respond with a MISSING error (see <xref
            target="TableErrorCodes"/>) and SHOULD include a list of the
            missing parameters.</t>

            <t>If the request is valid, the Database responds with an
            available-spectrum response message. If the ruleset requires that
            devices must report anticipated spectrum usage, the Database will
            indicate so in the response message.</t>

            <t>If the available-spectrum response indicates that the Master
            Device must send a spectrum-usage notification message, the Master
            Device sends the notification message to the Database. Even when
            not required by the Database, the Master Device MAY send a
            notification message.</t>

            <t>If the Database receives a spectrum-usage notification message,
            it MUST send a spectrum-usage acknowledgment message to the Master
            Device.</t>
          </list>
        </t>

        <t>The procedure for a Master Device to ask for available spectrum on
        behalf of a Slave Device is similar, except that the process is
        initiated by the Slave Device. The device identifier, capabilities,
        and characteristics communicated in the AVAIL_SPECTRUM_REQ message
        MUST be those of the Slave Device, and:<list style="symbols">
            <t>The "masterDeviceLocation" field specifying the location of the
            Master Device is REQUIRED.</t>

            <t>The "location" field specifying the location of the Slave
            Device is OPTIONAL, since the Slave Device may not have
            location-sensing capabilities.</t>
          </list></t>

        <t>Although the communication and protocol between the Slave Device
        and Master Device are outside the scope of this document (represented
        as dotted lines), the expected message sequence is shown in <xref
        target="FigAvailSpectrumSlave"/>.</t>

        <figure anchor="FigAvailSpectrumSlave">
          <artwork align="center"><![CDATA[
+------------+     +---------------+      +-------------------+
|Slave Device|     | Master Device |      | Spectrum Database |
+------------+     +---------------+      +-------------------+
    |                 |                           |
    | AVAIL_SPEC_REQ  |                           |
    |................>|                           |
    |                 |                           |
    |                 |    AVAIL_SPECTRUM_REQ     |
    |                 |-------------------------->|
    |                 |                           |
    |                 |    AVAIL_SPECTRUM_RESP    |
    |                 |<--------------------------|
    | AVAIL_SPEC_RESP |                           |
    |<................|                           |
    |                 |                           |
    | (SPECTRUM_USE)  |                           |
    |................>|   (SPECTRUM_USE_NOTIFY)   |
    |                 |-------------------------->|
    |                 |                           |
    |                 |    (SPECTRUM_USE_RESP)    |
    |                 |<--------------------------|
    |                 |                           |]]></artwork>
        </figure>

        <t/>

        <section anchor="SectAvailSpectrumReq" title="AVAIL_SPECTRUM_REQ">
          <t>The request message for the Available Spectrum Query protocol
          MUST include a geolocation. Rulesets may mandate that it be the
          device's current location or allow it to be an anticipated location.
          A parameter marked as optional may be required by some rulesets.</t>

          <figure>
            <artwork><![CDATA[
+----------------------------------------------------+
|AVAIL_SPECTRUM_REQ                                  |
+----------------------------------+-----------------+
|deviceDesc:DeviceDescriptor       | see description |
|location:GeoLocation              | see description |
|owner:DeviceOwner                 | OPTIONAL        |
|antenna:AntennaCharacteristics    | OPTIONAL        |
|capabilities:DeviceCapabilities   | OPTIONAL        |
|masterDeviceDesc:DeviceDescriptor | OPTIONAL        |
|masterDeviceLocation:GeoLocation  | see description |
|requestType:string                | OPTIONAL        |
|..................................|.................|
|*other:any                        | OPTIONAL        |
+----------------------------------+-----------------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDesc:">The <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> for the device
              requesting available spectrum. When the request is made by a
              Master Device on its own behalf, the descriptor is that of the
              Master Device, and it is REQUIRED. When the request is made on
              behalf of a Slave Device, the descriptor is that of the Slave
              Device, and it is REQUIRED if the "requestType" parameter is not
              specified. The deviceDesc parameter may be OPTIONAL for some
              values of requestType.</t>

              <t hangText="location:">The <xref
              target="SectGeoLocation">GeoLocation</xref> for the device
              requesting available spectrum. More precisely, this is the
              location at which the device intends to operate. When the
              request is made by the Master Device on its own behalf, the
              location is that of the Master Device, and it is REQUIRED. When
              the request is made by the Master Device on behalf of a Slave
              Device, the location is that of the Slave Device, and it is
              OPTIONAL (see also masterDeviceLocation). The location may be an
              anticipated position of the device to support mobile devices,
              but its use depends on the ruleset. If the location specifies a
              region, rather than a point, the Database MAY return an error
              with the UNIMPLEMENTED code (see <xref
              target="TableErrorCodes"/>), if it does not implement query by
              region.</t>

              <t hangText="">NOTE: Technically, this is the location of the
              radiation center of the device's antenna, but that distinction
              may be relevant only for fixed devices.</t>

              <t hangText="owner:">The <xref
              target="SectDeviceOwner">DeviceOwner</xref> information MAY be
              included to register the device with the Database. This enables
              the device to register and get spectrum-availability information
              in a single request. Some rulesets mandate registration for
              specific device types.</t>

              <t hangText="antenna:">The <xref
              target="SectAntenna">AntennaCharacteristics</xref> is
              OPTIONAL.</t>

              <t hangText="capabilities:">The Master Device MAY include its
              <xref target="SectDeviceCapabilities">DeviceCapabilities</xref>
              to limit the available-spectrum response to the spectrum that is
              compatible with its capabilities. The Database SHOULD NOT return
              spectrum that is not compatible with the specified
              capabilities.</t>

              <t hangText="masterDeviceDesc:">When the request is made by the
              Master Device on behalf of a Slave Device, the Master Device MAY
              provide its own descriptor.</t>

              <t hangText="masterDeviceLocation:">When the request is made by
              the Master Device on behalf of a Slave Device, the Master Device
              MUST provide its own <xref
              target="SectGeoLocation">GeoLocation</xref>.</t>

              <t hangText="requestType:">The request type is OPTIONAL; it may
              be used to modify the request, but its use depends on the
              applicable ruleset. The request type may be used, for example,
              to indicate that the response should include generic Slave
              Device parameters without having to specify the device
              descriptor for a specific device. When requestType is missing,
              the request is for a specific device (Master or Slave), so
              deviceDesc is REQUIRED. The maximum length of the value is 64
              octets. See the specifics in the <xref
              target="SectIanaRulesetInitial">Initial Registry Contents</xref>
              for the Ruleset ID Registry.</t>

              <t hangText="other:">Rulesets and database implementations may
              require additional request parameters. The Database MUST ignore
              all parameters it does not understand. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters.</t>
            </list>
          </t>
        </section>

        <section anchor="SectAvailSpectrumResp" title="AVAIL_SPECTRUM_RESP">
          <t>The response message for the Available Spectrum Query contains
          one or more <xref target="SectSpectrumSpec">SpectrumSpec</xref>
          elements, one for each ruleset supported at the location specified
          in the corresponding <xref
          target="SectAvailSpectrumReq">AVAIL_SPECTRUM_REQ</xref> message.
          Each SpectrumSpec element contains a list of one or more spectrum
          schedules, representing permissible power levels over time:<list
              style="symbols">
              <t>Each spectrum schedule specifies the permissible power level
              for a duration defined by a pair of start and stop times. The
              power levels refer to permissible EIRP over a resolution
              bandwidth.</t>

              <t>Within each list of schedules, event-time intervals MUST be
              disjoint and MUST be sorted in increasing time.</t>

              <t>A gap in the time schedule means no spectrum is available for
              that time interval.</t>
            </list></t>

          <t>Consider a Database that provides a schedule of available
          spectrum for the next 24 hours. If spectrum availability were to be
          different at different times of day, the response would contain a
          list of schedules, each transition representing some change to the
          spectrum availability. A device might use different strategies to
          select which spectrum to use, e.g.:<list style="symbols">
              <t>Always use the frequencies that permit the highest power</t>

              <t>Use the frequencies that are available for the longest period
              of time.</t>

              <t>Just use the first set of frequencies that matches its
              needs.</t>
            </list></t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|AVAIL_SPECTRUM_RESP                    |
+----------------------------+----------+
|timestamp:string            | REQUIRED |
|deviceDesc:DeviceDescriptor | REQUIRED |
|spectrumSpecs:list          | REQUIRED |-------+
|............................|..........|       |
|databaseChange:DbUpdateSpec | OPTIONAL |       |
|*other:any                  | OPTIONAL |       |
+----------------------------+----------+       | 1..*
                                                V
                           +-----------------------------------+
                           |SpectrumSpec                       |
                           +------------------------+----------+
                           |rulesetInfo:RulesetInfo | REQUIRED |
                           |spectrumSchedules:list  | REQUIRED |-+
                           |timeRange:EventTime     | OPTIONAL | |
                           |frequencyRanges:list    | OPTIONAL | |
                           |needsSpectrumReport:bool| OPTIONAL | |
                           |maxTotalBwHz:float      | OPTIONAL | |
                           |maxContiguousBwHz:float | OPTIONAL | |
                           +------------------------+----------+ |
                                            +--------------------+
                                            | 1..*
                                            V
                               +-------------------------------+
                               |SpectrumSchedule               |
                               +--------------------+----------+
                               |eventTime:EventTime | REQUIRED |
                               |spectra:list        | REQUIRED |
                               +--------------------+----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="timestamp:">Timestamp of the response is expressed
              in UTC using the form, YYYY&nbhy;MM&nbhy;DDThh:mm:ssZ, as
              defined by <xref target="RFC3339">"Date and Time on the
              Internet: Timestamps"</xref>. This can be used by the device as
              a reference for the start and stop times in the spectrum
              schedules.</t>

              <t hangText="deviceDesc:">The Database MUST include the <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> specified in the
              AVAIL_SPECTRUM_REQ message.</t>

              <t hangText="spectrumSpecs:">The <xref
              target="SectSpectrumSpec">SpectrumSpec</xref> list MUST include
              at least one entry. Each entry contains the schedules of
              available spectrum for a ruleset. The Database MAY return more
              than one SpectrumSpec to represent available spectrum for
              multiple rulesets at the specified location.</t>

              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              device of a change to the database URI, providing one or more
              alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>

              <t hangText="other:">Database implementations MAY return
              additional parameters in the response. The device MUST ignore
              any parameters that it does not understand. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters and requirements they place on
              the device.</t>
            </list>
          </t>

          <section anchor="SectUpdateRequirements" title="Update Requirements">
            <t>When the stop time specified in the schedule has been reached,
            the device:<list style="symbols">
                <t>MUST obtain a new spectrum-availability schedule, either by
                using the next one in the list (if provided) or making another
                <xref target="SectAvailSpectrum">Available Spectrum
                Query</xref>.</t>

                <t>If the device is unable to contact the Database to obtain a
                new schedule, it MUST treat this as equivalent to a response
                with no available spectrum.</t>
              </list></t>

            <t/>

            <t>Some rulesets also mandate that a device must obtain a new
            spectrum-availability schedule if the device moves beyond a
            threshold distance (established by the ruleset) from the actual
            location and all anticipated location(s) it reported in previous
            AVAIL_SPECTRUM_REQ or AVAIL_SPECTRUM_BATCH_REQ messages (see
            "maxLocationChange" in <xref
            target="SectRulesetInfo">RulesetInfo</xref>). If the device is
            unable to contact the Database to obtain a new schedule, it MUST
            treat this as equivalent to a response with no available
            spectrum.</t>

            <t>NOTE: The ruleset determines required device behavior when
            spectrum is no longer available. The ruleset also governs whether
            a device may request and use spectrum at anticipated locations
            beyond the threshold distance from its current location.</t>

            <t/>
          </section>
        </section>

        <section anchor="SectAvailSpectrumBatchReq"
                 title="AVAIL_SPECTRUM_BATCH_REQ">
          <t>The Database MAY implement the batch request that allows multiple
          locations to be specified. This enables a portable Master Device,
          for example, to get available spectrum for a sequence of anticipated
          locations using a single request. The Database interprets each
          location in the batch request as if it were an independent request
          and returns results consistent with multiple individual <xref
          target="SectAvailSpectrumReq">AVAIL_SPECTRUM_REQ</xref> messages,
          but it returns these results in a batched response (<xref
          target="SectAvailSpectrumBatchResp"/>). The request message for the
          batch Available Spectrum Query protocol MUST include at least one
          <xref target="SectGeoLocation">GeoLocation</xref>. If the Database
          does not implement batch requests, it MUST return an UNIMPLEMENTED
          error (see <xref target="TableErrorCodes"/>).</t>

          <t>NOTE: Whether anticipated locations are allowed depends on the
          specified ruleset. A parameter marked as optional may be required by
          some rulesets.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------------------+
|AVAIL_SPECTRUM_BATCH_REQ                           |
+---------------------------------+-----------------+
|deviceDesc:DeviceDescriptor      | see description |
|locations:list                   | REQUIRED        |--+
|owner:DeviceOwner                | OPTIONAL        |  |
|antenna:AntennaCharacteristics   | OPTIONAL        |  |
|capabilities:DeviceCapabilities  | OPTIONAL        |  |
|masterDeviceDesc:DeviceDescriptor| OPTIONAL        |  |
|masterDeviceLocation:GeoLocation | see description |  |
|requestType:string               | OPTIONAL        |  |
+.................................+.................+  |
|*other:any                       | OPTIONAL        |  |
+---------------------------------+-----------------+  |
                                                       |
                                                  1..* V
                                              +-------------+
                                              | GeoLocation |
                                              +-------------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDesc:">The <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> for the device
              requesting available spectrum. When the request is made by a
              Master Device on its own behalf, the descriptor is that of the
              Master Device, and it is REQUIRED. When the request is made on
              behalf of a Slave Device, the descriptor is that of the Slave
              Device, and it is REQUIRED if the "requestType" parameter is not
              specified. The deviceDesc parameter may be OPTIONAL for some
              values of requestType.</t>

              <t hangText="locations:">The <xref
              target="SectGeoLocation">GeoLocation</xref> list for the device
              is REQUIRED. This allows the device to specify its actual
              location plus additional anticipated locations. At least one
              location MUST be included. This specification places no upper
              limit on the number of locations, but the Database MAY restrict
              the number of locations it supports by returning a response with
              fewer locations than specified in the request. If the locations
              specify regions, rather than points, the Database MAY return an
              error with the UNIMPLEMENTED code (see <xref
              target="TableErrorCodes"/>), if it does not implement query by
              region. When the request is made by a Master Device on its own
              behalf, the locations are those of the Master Device. When the
              request is made by the Master Device on behalf of a Slave
              Device, the locations are those of the Slave Device (see also
              masterDeviceLocation).</t>

              <t hangText="owner:">The <xref
              target="SectDeviceOwner">DeviceOwner</xref> information MAY be
              included to register the device with the Database. This enables
              the device to register and get spectrum-availability information
              in a single request. Some rulesets mandate registration for
              specific device types.</t>

              <t hangText="antenna:">The <xref
              target="SectAntenna">AntennaCharacteristics</xref> is
              OPTIONAL.</t>

              <t hangText="capabilities:">The Master Device MAY include its
              <xref target="SectDeviceCapabilities">DeviceCapabilities</xref>
              to limit the available-spectrum response to the spectrum that is
              compatible with its capabilities. The Database SHOULD NOT return
              spectrum that is not compatible with the specified
              capabilities.</t>

              <t hangText="masterDeviceDesc:">When the request is made by the
              Master Device on behalf of a Slave Device, the Master Device MAY
              provide its own descriptor.</t>

              <t hangText="masterDeviceLocation:">When the request is made by
              the Master Device on behalf of a Slave Device, the Master Device
              MUST provide its own <xref
              target="SectGeoLocation">GeoLocation</xref>.</t>

              <t hangText="requestType:">The request type is an OPTIONAL
              parameter that may be used to modify the request, but its use
              depends on the applicable ruleset. The request type may be used,
              for example, to request generic Slave Device parameters without
              having to specify the device descriptor for a specific device.
              When the requestType parameter is missing, the request is for a
              specific device (Master or Slave), so deviceDesc is REQUIRED.
              The maximum length is 64 octets. See the ruleset specifics in
              the <xref target="SectIanaRulesetInitial">Initial Registry
              Contents</xref> for the Ruleset ID Registry.</t>

              <t hangText="other:">Rulesets and database implementations may
              require additional request parameters. The Database MUST ignore
              all parameters it does not understand. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters.</t>
            </list>
          </t>
        </section>

        <section anchor="SectAvailSpectrumBatchResp"
                 title="AVAIL_SPECTRUM_BATCH_RESP">
          <t>The response message for the batch Available Spectrum Query
          contains a schedule of available spectrum for the device at multiple
          locations.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|AVAIL_SPECTRUM_BATCH_RESP              |
+----------------------------+----------+
|timestamp:string            | REQUIRED |
|deviceDesc:DeviceDescriptor | REQUIRED |
|geoSpectrumSpecs:list       | REQUIRED |-------+
|............................|..........|       |
|databaseChange:DbUpdateSpec | OPTIONAL |       |
|*other:any                  | OPTIONAL |       |
+----------------------------+----------+       | 0..*
                                                V
                             +---------------------------------+
                             |GeoSpectrumSpec                  |
                             +----------------------+----------+
                             |location:GeoLocation  | REQUIRED |
                             |spectrumSpecs:list    | REQUIRED |
                             +----------------------+----------+]]></artwork>
          </figure>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="timestamp:">Timestamp of the response of the form,
              YYYY&nbhy;MM&nbhy;DDThh:mm:ssZ, as defined by <xref
              target="RFC3339">"Date and Time on the Internet:
              Timestamps"</xref>. This can be used by the device as a
              reference for the start and stop times in the spectrum
              schedules.</t>

              <t hangText="deviceDesc:">The Database MUST include the <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> specified in the
              AVAIL_SPECTRUM_BATCH_REQ message.</t>

              <t hangText="geoSpectrumSpecs:">The <xref
              target="SectGeoSpectrumSpec">geoSpectrumSpecs </xref> list is
              REQUIRED (although it MAY be empty if spectrum is unavailable).
              For each location, the Database MAY return one or more <xref
              target="SectSpectrumSpec">SpectrumSpecs</xref> to represent
              available spectrum for one or more rulesets. The Database MAY
              return available spectrum for fewer locations than requested.
              The order of the entries in the list is not significant, and the
              device MUST use the location value in each GeoSpectrumSpec entry
              to match available spectrum to a location.</t>

              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              device of a change to the database URI, providing one or more
              alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>

              <t hangText="other:">Database implementations MAY return
              additional parameters in the response. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters and requirements they place on
              the device.</t>
            </list>
          </t>

          <t/>

          <t>See <xref target="SectUpdateRequirements">"Update
          Requirements"</xref> for when the device must update its available
          spectrum data.</t>

          <t/>
        </section>

        <section anchor="SectSpectrumUseNotify" title="SPECTRUM_USE_NOTIFY">
          <t>The spectrum-use notification message indicates the spectrum
          anticipated to be used by the device.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------------------+
|SPECTRUM_USE_NOTIFY                                |
+---------------------------------+-----------------+
|deviceDesc:DeviceDescriptor      | REQUIRED        |
|location:GeoLocation             | see description |
|masterDeviceDesc:DeviceDescriptor| OPTIONAL        |
|masterDeviceLocation:GeoLocation | see description |
|spectra:list                     | REQUIRED        |--+
|...................................................|  |
|*other:any                       | OPTIONAL        |  |
+---------------------------------+-----------------+  | 0..*
                                                       V
                              +--------------------------------+
                              |Spectrum                        |
                              +---------------------+----------+
                              |resolutionBwHz:float | REQUIRED |
                              |profiles:list        | REQUIRED |
                              +---------------------+----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDesc:">The <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> for the device
              is REQUIRED.</t>

              <t hangText="location:">The <xref
              target="SectGeoLocation">GeoLocation</xref> for the device. When
              the notification is made by a Master Device on its own behalf,
              the location is that of the Master Device and is REQUIRED. When
              the notification is made by a Master Device on behalf of a Slave
              Device, the location is that of the Slave Device and is OPTIONAL
              but may be required by some rulesets.</t>

              <t hangText="spectra:">The <xref
              target="SectSpectrum">Spectrum</xref> list is REQUIRED and
              specifies the spectrum anticipated to be used by the device;
              this includes profiles of frequencies and power levels. The list
              MAY be empty, if the device decides not to use any spectrum. For
              consistency, the resolution bandwidth value, "resolutionBwHz",
              MUST match that from one of the <xref
              target="SectSpectrum">Spectrum</xref> elements in the
              corresponding AVAIL_SPECTRUM_RESP message, and the maximum power
              levels in the Spectrum element MUST be expressed as power (EIRP)
              over the specified "resolutionBwHz" value. The actual bandwidth
              to be used (as computed from the start and stop frequencies) MAY
              be different from the "resolutionBwHz" value. As an example,
              when the ruleset expresses maximum power spectral density in
              terms of maximum power over any 100&nbsp;kHz band, then the
              "resolutionBwHz" value should be set to 100&nbsp;kHz, even
              though the actual bandwidth used can be 20&nbsp;kHz.</t>

              <t hangText="masterDeviceDesc:">When the notification is made by
              the Master Device on behalf of a Slave Device, the Master Device
              MAY provide its own descriptor.</t>

              <t hangText="masterDeviceLocation:">When the notification is
              made by the Master Device on behalf of a Slave Device, the
              Master Device MUST include its own <xref
              target="SectGeoLocation">GeoLocation</xref>.</t>

              <t hangText="other:">Depending on the ruleset, other parameters
              may be required. To simplify its logic, the device MAY include
              the union of all parameters required by all supported rulesets.
              The Database MUST ignore all parameters it does not
              understand.</t>
            </list>
          </t>
        </section>

        <section anchor="SectSpectrumUseResp" title="SPECTRUM_USE_RESP">
          <t>The spectrum-use response message simply acknowledges receipt of
          the notification.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|SPECTRUM_USE_RESP                      |
+----------------------------+----------+
|databaseChange:DbUpdateSpec | OPTIONAL |
|.......................................|
|*other:any                  | OPTIONAL |
+----------------------------+----------+  ]]></artwork>
          </figure>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              device of a change to the database URI, providing one or more
              alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>

              <t hangText="other:">Database implementations MAY return
              additional parameters in the response. Consult the <xref
              target="SectIanaParameters">PAWS Parameters Registry</xref> for
              possible additional parameters.</t>
            </list>
          </t>
        </section>
      </section>

      <section anchor="SecDeviceValidation" title="Device Validation">
        <t>A Slave Device needs a Master Device to ask the Database on its
        behalf for available spectrum. Depending on the ruleset, the Master
        Device also must validate with the Database that the Slave Device is
        permitted to operate. When the ruleset allows a Master Device to
        "cache" the available spectrum for a period of time, the Master Device
        may use the simpler Device Validation component, instead of the full
        Available Spectrum Query component, to validate a Slave Device.</t>

        <t>When validating one or more Slave Devices, the Master Device sends
        the Database a request that includes the device identifier -- and any
        other parameters required by the ruleset -- for each Slave Device. The
        Database MUST return a response with an entry for each device to
        indicate whether it is permitted to use the spectrum.</t>

        <t>A typical sequence for using the Device Validation request is
        illustrated in <xref target="FigValidate"/>, where the Master Device
        already has a valid set of available spectrum for Slave Devices. Note
        that the communication and protocol between the Slave Device and
        Master Device are outside the scope of this document.<list
            style="symbols">
            <t><xref target="SectDevValidReq">DEV_VALID_REQ</xref> is the
            device-validation request message.</t>

            <t><xref target="SectDevValidResp">DEV_VALID_RESP</xref> is the
            device-validation response message.</t>
          </list></t>

        <figure anchor="FigValidate">
          <artwork align="center"><![CDATA[
+------------+     +---------------+      +-------------------+
|Slave Device|     | Master Device |      | Spectrum Database |
+------------+     +---------------+      +-------------------+
    |                 |                           |
    | AVAIL_SPEC_REQ  |                           |
    |................>|                           |
    |                 |                           |
    |                 |    DEV_VALID_REQ          |
    |                 |-------------------------->|
    |                 |                           |
    |                 |    DEV_VALID_RESP         |
    |                 |<--------------------------|
    | AVAIL_SPEC_RESP |                           |
    |<................|                           |
    |                 |                           |
    | (SPECTRUM_USE)  |                           |
    |................>|   (SPECTRUM_USE_NOTIFY)   |
    |                 |-------------------------->|
    |                 |                           |
    |                 |    (SPECTRUM_USE_RESP)    |
    |                 |<--------------------------|
 ]]></artwork>
        </figure>

        <section anchor="SectDevValidReq" title="DEV_VALID_REQ">
          <t>This request is used by a Master Device to determine which Slave
          Devices are permitted to operate.</t>

          <figure>
            <artwork><![CDATA[ 
+---------------------------------------------+
|DEV_VALID_REQ                                |
+----------------------------------+----------+
|deviceDescs:list                  | REQUIRED |---+
|masterDeviceDesc:DeviceDescriptor | OPTIONAL |   |
+----------------------------------+----------+   |
                                                  V 1..*
                                 +----------------------+
                                 |DeviceDescriptor      |
                                 +----------------------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceDescs:">A <xref
              target="SectDeviceDesc">DeviceDescriptor</xref> list is
              REQUIRED; it specifies the list of Slave Devices that are to be
              validated.</t>

              <t hangText="masterDeviceDesc:">The Master Device MAY provide
              its own descriptor.</t>
            </list>
          </t>
        </section>

        <section anchor="SectDevValidResp" title="DEV_VALID_RESP">
          <figure>
            <artwork><![CDATA[
+---------------------------------------+
|DEV_VALID_RESP                         |
+----------------------------+----------+
|deviceValidities:list       | REQUIRED |----
|databaseChange:DbUpdateSpec | OPTIONAL |   |
+----------------------------+----------+   |
                                            V 1..*
                         +---------------------------------------+
                         |DeviceValidity                         |
                         +----------------------------+----------+
                         |deviceDesc:DeviceDescriptor | REQUIRED |
                         |isValid:boolean             | REQUIRED |
                         |reason:string               | OPTIONAL |
                         +----------------------------+----------+]]></artwork>
          </figure>

          <t/>

          <t>Parameters:</t>

          <t>
            <list style="hanging">
              <t hangText="deviceValidities:">A <xref
              target="SectDeviceValidity">DeviceValidities</xref> list is
              REQUIRED to report the list of Slave Devices and whether each
              listed device is valid. The number of entries MUST match the
              number of <xref target="SectDeviceDesc">DeviceDescriptors</xref>
              listed in the DEV_VALID_REQ message.</t>

              <t hangText="databaseChange:">The Database MAY include a <xref
              target="SectDbUpdateSpec">DbUpdateSpec</xref> to notify the
              device of a change to the database URI, providing one or more
              alternate database URIs. The device needs to update its
              preconfigured entry for the responding Database with the
              alternate Databases listed in the DbUpdateSpec.</t>
            </list>
          </t>
        </section>
      </section>
    </section>

    <section anchor="SectParameters" title="Protocol Parameters">
      <t>This section presents more details of the parameters that make up the
      PAWS request and response messages. It also includes a subsection that
      defines response codes.</t>

      <section anchor="SectGeoLocation" title="GeoLocation">
        <t>GeoLocation is used to specify one of the following:</t>

        <t>
          <list style="symbols">
            <t>a single point with optional uncertainty</t>

            <t>a region described by a polygon</t>
          </list>
        </t>

        <t>These are represented using geometric shapes defined in Section 5
        of <xref target="RFC5491">"GEOPRIV Presence Information Data Format
        Location Object" </xref>, where:</t>

        <t>
          <list style="symbols">
            <t>A "point" with uncertainty is represented using the Ellipse
            shape.</t>

            <t>A region is represented using the Polygon shape.</t>
          </list>
        </t>

        <t>The coordinates are expressed using the <xref target="WGS-84">WGS84
        datum</xref>, and units are degrees or meters. GeoLocation MAY also
        include a confidence level, expressed as a percentage. The confidence
        and uncertainty parameters may be required by some rulesets (see also
        <xref target="RFC7459"/>).</t>

        <t>The data model for GeoLocation is illustrated below:</t>

        <figure>
          <artwork><![CDATA[
+------------------------------------+
|GeoLocation                         |
+------------------+-----------------+
|point:Ellipse     | see description |
|region:Polygon    | see description |
|confidence:int    | OPTIONAL        |
+------------------+-----------------+
Note: Point and region are mutually exclusive.  Exactly one must
be present.
 ]]></artwork>
        </figure>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|Ellipse                        |
+--------------------+----------+
|center:Point        | REQUIRED |--+
|semiMajorAxis:float | OPTIONAL |  |
|semiMinorAxis:float | OPTIONAL |  |
|orientation:float   | OPTIONAL |  |
+--------------------+----------+  v
                           +---------------------------+
                           |Point                      |
                           +----------------+----------+
                           |latitude:float  | REQUIRED |
                           |longitude:float | REQUIRED |
                           +----------------+----------+
     ]]></artwork>
        </figure>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|Polygon                        |
+-------------------+-----------+  4..* +---------------------------+
|exterior:list      | REQUIRED  |------>|Point                      |
+-------------------+-----------+       +----------------+----------+
                                        |latitude:float  | REQUIRED |
                                        |longitude:float | REQUIRED |
                                        +----------------+----------+
     ]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="point:">If present, it specifies the GeoLocation as a
            point. Paradoxically, a "point" is parameterized using an Ellipse,
            where the center represents the location of the point and the
            distances along the major and minor axes represent the
            uncertainty. The uncertainty values may be required, depending on
            the ruleset. Exactly one of "point" or "region" MUST be
            present.</t>

            <t hangText="region:">If present, it specifies the GeoLocation as
            a region. Exactly one of "point" or "region" MUST be present.</t>

            <t hangText="center:">The center refers to the location of a
            GeoLocation point and is represented as the center of an
            ellipse.</t>

            <t hangText="latitude, longitude:">Floating-point numbers that
            express the latitude and longitude in degrees using the <xref
            target="WGS-84">WGS84 datum</xref>.</t>

            <t hangText="semiMajorAxis, semiMinorAxis:">This OPTIONAL
            parameter expresses the location uncertainty, in meters. It is
            parameterized using distances along the major and minor axes of
            the ellipse. The default value for each parameter is 0.</t>

            <t hangText="orientation:">This defines the orientation of the
            ellipse, expressed as the rotation, in degrees, of the semi-major
            axis from North towards the East. For example, when the
            uncertainty is greatest along the North-South direction,
            orientation is 0 degrees; conversely, if the uncertainty is
            greatest along the East-West direction, orientation is 90 degrees.
            When orientation is not present, the default value is 0.</t>

            <t hangText="exterior:">When GeoLocation describes a region, the
            "exterior" parameter refers to a list of latitude and longitude
            points that represents the vertices of a polygon. The first and
            last points MUST be the same. Thus, a minimum of 4 points is
            required. The following polygon restrictions from <xref
            target="RFC5491"/> apply: <list style="symbols">
                <t>A connecting line SHALL NOT cross another connecting line
                of the same polygon.</t>

                <t>The vertices MUST be defined in a counter-clockwise
                direction, looking at them from above.</t>

                <t>The edges of a polygon are defined by the shortest path
                between two points in space (not a geodesic curve).
                Consequently, the length between two adjacent vertices SHOULD
                be restricted to a maximum of 130 km.</t>

                <t>Polygon shapes SHOULD be restricted to a maximum of 15
                vertices (16 points that includes the repeated vertex).</t>
              </list> Additionally, all vertices are assumed to be at the same
            altitude.</t>

            <t hangText="confidence:">The location confidence level, as a
            percentage, MAY be provided. When this parameter is not provided,
            the default value is 95. Valid values range from 0 to 100, but, in
            practice, 100% confidence is not achievable. The confidence value
            is meaningful only when GeoLocation refers to a point with
            uncertainty.</t>
          </list>
        </t>
      </section>

      <section anchor="SectDeviceDesc" title="DeviceDescriptor">
        <t>The device descriptor contains parameters that identify the
        specific device, such as its manufacturer serial number,
        manufacturer's ID, and any other device characteristics required by
        ruleset.</t>

        <figure>
          <artwork><![CDATA[
+--------------------------------+
|DeviceDescriptor                |
+---------------------+----------+
|serialNumber:string  | OPTIONAL |
|manufacturerId:string| OPTIONAL |
|modelId:string       | OPTIONAL |  1..*
|rulesetIds:list      | OPTIONAL |------>string
|.....................|..........|
|*other:any           | OPTIONAL |
+---------------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="serialNumber:">The manufacturer's device serial
            number is OPTIONAL, although rulesets typically require it. Its
            maximum length is 64 octets.</t>

            <t hangText="manufacturerId:">The manufacturer's ID is OPTIONAL
            but may be required by some rulesets. This represents the name of
            the device manufacturer, and therefore ought to be consistent
            across all devices from the same manufacturer and distinct from
            that of other manufacturers. Its maximum length is 64 octets.</t>

            <t hangText="modelId:">The device's model ID is OPTIONAL but may
            be required by some rulesets. Its maximum length is 64 octets.</t>

            <t hangText="rulesetIds:">The list of identifiers for rulesets
            supported by the device (see <xref
            target="SectIanaRuleset">Ruleset ID Registry</xref>). A Database
            MAY require that the device provides this list before servicing
            the device requests. If the Database supports none of the rulesets
            specified in the list, the Database MAY refuse to service the
            device requests. See <xref
            target="SectRulesetInfo">RulesetInfo</xref> for discussion on
            ruleset identifiers. If present, the list MUST contain at least
            one entry.</t>

            <t hangText="other:">Depending on the ruleset, other parameters
            may be required. The Database MUST ignore all parameters in the
            message it does not understand. See <xref
            target="SectIanaParameters">PAWS Parameters Registry</xref> for
            additional valid parameters and for the process for extending the
            message with more parameters. Additionally, see <xref
            target="SectIanaRuleset">PAWS Ruleset ID Registry</xref> for the
            valid set of parameters for each ruleset.</t>
          </list>
        </t>
      </section>

      <section anchor="SectAntenna" title="AntennaCharacteristics">
        <t>Antenna characteristics provide additional information, such as the
        antenna height, antenna type, etc. Whether antenna characteristics
        must be provided in a request depends on the device type and ruleset.
        Additionally, a parameter marked as optional may be required by some
        rulesets.</t>

        <figure>
          <artwork><![CDATA[
+------------------------------------+
|AntennaCharacteristics              |
+-------------------------+----------+
|height:float             | OPTIONAL |
|heightType:enum          | OPTIONAL |
|heightUncertainty:float  | OPTIONAL |
|.........................|..........|
|*characteristics:        | OPTIONAL |
|   various               |          |
+-------------------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="height:">The antenna height in meters. Note that the
            height may be negative.</t>

            <t hangText="heightType:">Valid values are:<list hangIndent="6"
                style="hanging">
                <t hangText="AGL">- Above Ground Level (default)</t>

                <t hangText="AMSL">- Above Mean Sea Level</t>
              </list></t>

            <t hangText="heightUncertainty:">The height uncertainty in
            meters.</t>
          </list>
        </t>

        <t>NOTE: Depending on the ruleset, additional antenna characteristics
        may be required, such as:<list style="symbols">
            <t>antenna direction</t>

            <t>antenna radiation pattern</t>

            <t>antenna gain</t>

            <t>antenna polarization</t>
          </list>These are not defined by the base protocol but may be added
        to the PAWS Parameters Registry, as needed.</t>
      </section>

      <section anchor="SectDeviceCapabilities" title="DeviceCapabilities">
        <t>Device capabilities provide additional information that may be used
        by the device to provide additional information to the Database that
        can help it to determine available spectrum. If the Database does not
        support device capabilities, it MUST ignore the parameter
        altogether.</t>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|DeviceCapabilities             |
+---------------------+---------+       
|frequencyRanges:list |OPTIONAL |--+
|.....................|.........|  |
|*other:any           |OPTIONAL |  |
+---------------------+---------+  | 0..*
                                   V
             +--------------------------------+
             |FrequencyRange                  |
             +----------------------+---------+
             |startHz:float         |REQUIRED |
             |stopHz:float          |REQUIRED |
             +----------------------+---------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="frequencyRanges:">Optional <xref
            target="SectFrequencyRange">FrequencyRange</xref> list. Each
            FrequencyRange element contains start and stop frequencies in
            which the device can operate. When specified, the Database SHOULD
            NOT return available spectrum that falls outside these ranges.</t>

            <t hangText="other">Consult the <xref
            target="SectIanaParameters">PAWS Parameters Registry</xref> for
            possible additional parameters. The Database MUST ignore all
            parameters it does not understand.</t>
          </list>
        </t>
      </section>

      <section anchor="SectDeviceOwner" title="DeviceOwner">
        <t>DeviceOwner contains information on device ownership that is
        provided as part of device registration. Some rulesets may require
        additional parameters.</t>

        <figure>
          <artwork><![CDATA[
+-----------------------------+
|DeviceOwner                  |
+------------------+----------+
|owner:vcard       | REQUIRED |
|operator:vcard    | OPTIONAL |
+------------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="owner:">The vCard contact information for the
            individual or business that owns the device is REQUIRED.</t>

            <t hangText="operator:">The vCard contact information for the
            device operator is OPTIONAL but may be required by specific
            rulesets.</t>
          </list>
        </t>

        <t>See <xref target="SectIanaRuleset">PAWS Ruleset ID Registry</xref>
        for ruleset-specific requirements on mandatory vCard properties.
        Depending on the ruleset, the Database may be required to validate the
        device-owner information. In these cases, the Database MUST respond
        with an INVALID_VALUE error (see <xref target="SectErrorCodes">"Error
        Codes"</xref>) if validation fails.</t>

        <t>All contact information MUST be expressed using the structure
        defined by the <xref target="RFC6350">"vCard Format Specification"
        </xref>, encoded in <xref target="RFC7095">JSON</xref>. Note that the
        vCard specification defines maximum lengths for each parameter.</t>
      </section>

      <section anchor="SectRulesetInfo" title="RulesetInfo">
        <t>RulesetInfo contains parameters for the ruleset of a regulatory
        domain that is communicated using the <xref
        target="SecInitialization">Initialization</xref>, <xref
        target="SecDeviceRegistration">Device Registration</xref>, and <xref
        target="SectAvailSpectrum">Available Spectrum Query</xref>
        components.</t>

        <figure>
          <artwork><![CDATA[ 
+------------------------------------------+
|RulesetInfo                               |
+------------------------------------------+
|authority:string        | REQUIRED        |
|rulesetId:string        | REQUIRED        |
|maxLocationChange:float | see description |
|maxPollingSecs:int      | see description |
|..........................................|
|*other:any              | OPTIONAL        |
+------------------------+-----------------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:<list style="hanging">
            <t hangText="authority:">A string that indicates the regulatory
            domain to which the ruleset applies is REQUIRED. It will normally
            be a 2-letter country code defined by <xref
            target="ISO3166-1">Country Codes - ISO 3166</xref>.</t>

            <t hangText="rulesetId:">The ID of a ruleset for the specified
            authority (see <xref target="SectIanaRuleset">Ruleset ID
            Registry</xref>). The device can use this to determine additional
            device behavior required by the associated ruleset. To define new
            ruleset IDs, see <xref target="SectExtensibilityRuleset">"Defining
            Ruleset Identifiers"</xref>.</t>

            <t hangText="maxLocationChange:">The maximum location change in
            meters is REQUIRED for the <xref
            target="SectInitResp">Initialization Response</xref>, but OPTIONAL
            otherwise. Some regulatory domains mandate that, when the device
            changes location by more than this specified distance, it contact
            the Database to get the available spectrum for the new location.
            If this value is provided by the Database within the context of an
            <xref target="SectAvailSpectrumResp">Available Spectrum
            Response</xref>, it takes precedence over the value within the
            <xref target="SectInitResp">Initialization Response</xref>.</t>

            <t hangText="maxPollingSecs:">The maximum duration, in seconds,
            between requests for available spectrum is REQUIRED for the <xref
            target="SectInitResp">Initialization Response</xref>, but OPTIONAL
            otherwise. The device MUST contact the Database to get available
            spectrum no less frequently than this duration. If this value is
            provided within the context of an <xref
            target="SectAvailSpectrumResp">Available Spectrum Response</xref>,
            it takes precedence over the value within the <xref
            target="SectInitResp">Initialization Response</xref>.</t>

            <t hangText="other:">Depending on the ruleset, other parameters
            may be required. The device MUST ignore all parameters in the
            message it does not understand. Consult the <xref
            target="SectIanaParameters">PAWS Parameters Registry</xref> for
            possible additional parameters.</t>
          </list></t>

        <t/>
      </section>

      <section anchor="SectDbUpdateSpec" title="DbUpdateSpec">
        <t>This element is provided by the Database to notify devices of an
        upcoming change to the database URI.</t>

        <t/>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|DbUpdateSpec                   |
+---------------------+---------+       +--------------------------+
|databases:list       |REQUIRED |------>|DatabaseSpec              |
+---------------------+---------+  1..* +---------------+----------+
                                        |name:string    | REQUIRED |
                                        |uri:string     | REQUIRED |
                                        +---------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="databases:">List of one or more <xref
            target="SectDatabaseSpec">DatabaseSpec</xref> entries. A device
            needs to update its preconfigured entry for the responding
            Database with the alternate Databases listed in the
            DbUpdateSpec.</t>
          </list>
        </t>
      </section>

      <section anchor="SectDatabaseSpec" title="DatabaseSpec">
        <t>This element contains the name and URI of a Database.</t>

        <figure>
          <artwork><![CDATA[
+--------------------------+
|DatabaseSpec              |
+---------------+----------+
|name:string    | REQUIRED |
|uri:string     | REQUIRED |
+---------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="name:">The display name. Its maximum length is 64
            octets.</t>

            <t hangText="uri:">The corresponding URI of the Database. Its
            maximum length is 1024 octets.</t>
          </list>
        </t>
      </section>

      <section anchor="SectSpectrumSpec" title="SpectrumSpec">
        <t>The SpectrumSpec element encapsulates the schedule of available
        spectrum for a ruleset.</t>

        <figure>
          <artwork><![CDATA[+---------------------------------------+
|SpectrumSpec                           |
+----------------------------+----------+
|rulesetInfo:RulesetInfo     | REQUIRED |
|spectrumSchedules:list      | REQUIRED |-----+
|timeRange:EventTime         | OPTIONAL |     |
|frequencyRanges:list        | OPTIONAL |     |
|needsSpectrumReport:boolean | OPTIONAL |     |
|maxTotalBwHz:float          | OPTIONAL |     |
|maxContiguousBwHz:float     | OPTIONAL |     |
+----------------------------+----------+     |
                                              | 1..*
                                              V
                                   +-------------------------------+
                                   |SpectrumSchedule               |
                                   +--------------------+----------+
                                   |eventTime:EventTime | REQUIRED |
                                   |spectra:list        | REQUIRED |
                                   +--------------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="rulesetInfo:"><xref
            target="SectRulesetInfo">RulesetInfo</xref> is REQUIRED to
            identify the regulatory domain and ruleset to which the spectrum
            schedule applies (see <xref target="SectIanaRuleset">Ruleset ID
            Registry </xref>). The device needs to use the corresponding
            ruleset to interpret the response. Values provided within
            rulesetInfo, such as maxLocationChange, take precedence over the
            values provided by the <xref
            target="SecInitialization">Initialization Procedure</xref>.</t>

            <t hangText="spectrumSchedules:">The <xref
            target="SectSpectrumSchedule">SpectrumSchedule</xref> list is
            REQUIRED. At least one schedule MUST be included. More than one
            schedule MAY be included to represent future changes to the
            available spectrum. How far in advance a schedule may be provided
            depends on the ruleset. If more than one schedule is included, the
            eventTime intervals MUST be disjoint and MUST be sorted in
            increasing time. A gap in the time schedule indicates no available
            spectrum during that time-interval gap.</t>

            <t hangText="timeRange:">The time range for which the
            specification is comprehensive is OPTIONAL. When specified, any
            gaps in time intervals within the spectrumSchedules element that
            overlap with the range specified by "timeRange" are interpreted by
            the device as time intervals in which there is no available
            spectrum.</t>

            <t hangText="frequencyRanges:">Specifying the frequency ranges for
            which the specification is comprehensive is OPTIONAL. It is a list
            of disjoint <xref
            target="SectFrequencyRange">FrequencyRange</xref> entries. When
            specified, it typically corresponds to the frequency ranges
            governed by the ruleset, e.g., for TV white space, the frequency
            ranges can correspond to the VHF and UHF bands of the associated
            regulatory domain. A device can combine this information with the
            available-spectrum specification within the spectrumSchedules
            element to distinguish between "unavailable spectrum" and
            "spectrum for which no information has been provided".</t>

            <t hangText="needsSpectrumReport:">The Database MAY return true
            for this parameter if spectrumSchedules list is non-empty;
            otherwise, the Database MAY omit this parameter altogether, in
            which case, the default value is false. If this parameter is
            present and its value is true, the device sends a <xref
            target="SectSpectrumUseNotify">SPECTRUM_USE_NOTIFY</xref> message
            to the Database; otherwise, the device SHOULD NOT send the
            SPECTRUM_USE_NOTIFY message. Some rulesets mandate this value be
            set to true.</t>

            <t hangText="maxTotalBwHz:">The Database MAY return a constraint
            on the maximum total bandwidth (in hertz) allowed, which may or
            may not be contiguous. Some rulesets mandate the Database to
            return this parameter. When present in the response, the device
            needs to apply this constraint to its spectrum-selection logic to
            ensure total bandwidth does not exceed this value.</t>

            <t hangText="maxContiguousBwHz:">The Database MAY return a
            constraint on the maximum contiguous bandwidth (in hertz) allowed.
            Some rulesets mandate the Database to return this parameter. When
            present in the response, the device needs to apply this constraint
            to its spectrum-selection logic to ensure no single block of
            spectrum has bandwidth that exceeds this value.</t>
          </list>
        </t>
      </section>

      <section anchor="SectSpectrumSchedule" title="SpectrumSchedule">
        <t>The SpectrumSchedule element combines <xref
        target="SectEventTime">EventTime</xref> with <xref
        target="SectSpectrum">Spectrum</xref> to define a time period in which
        the spectrum is valid.</t>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|SpectrumSchedule               |
+--------------------+----------+
|eventTime:EventTime | REQUIRED |        +--------------------+
|spectra:list        | REQUIRED |------->|Spectrum            |
+--------------------+----------+   0..* +--------------------+
                                         |resolutionBwHz:float|
                                         |profiles:list       |
                                         +--------------------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="eventTime:">The <xref
            target="SectEventTime">EventTime</xref> is REQUIRED to express
            "when" this specification is valid.</t>

            <t hangText="spectra:">The <xref
            target="SectSpectrum">Spectrum</xref> list is REQUIRED to specify
            the available spectrum and permissible power levels, one per
            resolutionBwHz. The list MAY be empty when there is no available
            spectrum.</t>
          </list>
        </t>
      </section>

      <section anchor="SectSpectrum" title="Spectrum">
        <t>Available spectrum can be characterized by an ordered list of
        spectrum profiles that defines permissible power levels over a set of
        frequency ranges. Each Spectrum element defines permissible power
        levels as maximum power spectral densities over a specified resolution
        bandwidth, "resolutionBwHz". Note that the spectrum profiles represent
        the "availability mask", as defined by the governing ruleset; they are
        not intended to encode device-level transmission-mask
        requirements.</t>

        <t>NOTE: Within the contexts of the <xref
        target="SectAvailSpectrumResp">AVAIL_SPECTRUM_RESP</xref>, <xref
        target="SectAvailSpectrumBatchResp">AVAIL_SPECTRUM_BATCH_RESP</xref>,
        and <xref target="SectSpectrumUseNotify">SPECTRUM_USE_NOTIFY</xref>
        messages, the power levels expressed within the Spectrum messages
        refer to EIRP. Future extensions of PAWS may use Spectrum in other
        contexts for other definitions of power levels.</t>

        <t>
          <list style="symbols">
            <t>To support a ruleset that defines different "wide-band" and
            "narrow-band" power levels, PAWS allows multiple Spectrum elements
            to be included in the available-spectrum response, each with a
            different resolution bandwidth.</t>

            <t>When multiple Spectrum elements are included in the response,
            each represents a constraint that the device must satisfy (logical
            AND).</t>

            <t>Each Spectrum element covers the range of frequencies governed
            by a ruleset, rather than splitting the frequencies across
            multiple Spectrum elements for the same resolution bandwidth.</t>

            <t>Each spectrum profile represents the maximum permissible power
            spectral density over a contiguous range of frequencies.</t>

            <t>When multiple spectrum profiles are included, they MUST be
            disjoint and MUST be ordered in non-decreasing frequency
            value.</t>

            <t>Gaps in frequencies between consecutive spectrum profiles
            represent unavailability for those frequencies.</t>
          </list>
        </t>

        <t>The following figure illustrates the Spectrum element and the
        SpectrumProfile list.</t>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|Spectrum                       |
+---------------------+---------+
|resolutionBwHz:float |REQUIRED |       
|profiles:list        |REQUIRED |---+
+---------------------+---------+   |  0..*
                                    V
              +-----------------------------+
              |SpectrumProfile              |
              +-------------------+---------+
              |list               |REQUIRED |
              +-------------------+---------+
                                    |
                                    V 2..*
               +--------------------------+
               |SpectrumProfilePoint      |
               +----------------+---------+
               |hz:float        |REQUIRED |
               |dbm:float       |REQUIRED |
               +----------------+---------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="resolutionBwHz:">This parameter defines the
            resolution bandwidth (in hertz) over which permissible power
            spectral density is defined. For example, FCC regulation would
            require one spectrum specification at a bandwidth of 6&nbsp;MHz,
            and ETSI regulation would require two specifications, at
            0.1&nbsp;MHz and 8&nbsp;MHz.</t>

            <t hangText="profiles: ">A <xref
            target="SectSpectrumProfile">SpectrumProfile</xref> list specifies
            permissible power levels over a set of frequency ranges. The list
            MAY be empty if there is no available spectrum.</t>
          </list>
        </t>

        <t>The following example shows permitted power spectral densities for
        a single resolution bandwidth of 6&nbsp;MHz (for illustrative purposes
        only):</t>

        <figure>
          <artwork><![CDATA[
[
  {
    "resolutionBwHz": 6e6,
    "profiles": [
      [
        {"hz": 5.18e8, "dbm": 30.0},
        {"hz": 5.30e8, "dbm": 30.0}
      ],
      ...
    ]
  }
]
 ]]></artwork>
        </figure>

        <t>This is interpreted as:<list style="symbols">
            <t>Over any 6&nbsp;MHz within the frequency range [518&nbsp;MHz,
            530&nbsp;MHz), maximum permitted power is 30.0 dBm (1000 mW)</t>
          </list></t>

        <t>Consider now an example with two different sets of permitted power
        spectral densities for the same set of frequencies over different
        resolution bandwidths (for illustrative purposes only):</t>

        <figure>
          <artwork><![CDATA[
[
  {
    "resolutionBwHz": 6e6,
    "profiles": [
      [
        {"hz": 5.18e8, "dbm": 30.0},
        {"hz": 5.30e8, "dbm": 30.0}
      ],
      ...
    ]
  },
  {
    "resolutionBwHz": 1e5,
    "profiles": [
      [
        {"hz": 5.18e8, "dbm": 27.0},
        {"hz": 5.30e8, "dbm": 27.0}
      ],
      ...
    ]
  }
]
 ]]></artwork>
        </figure>

        <t>This is interpreted as:</t>

        <t>
          <list style="symbols">
            <t>Over any 6 MHz within the frequency range [518 MHz, 530 MHz),
            maximum permitted power is 30.0 dBm (1000 mW), and</t>

            <t>Over any 100 kHz within the frequency range [518 MHz, 530 MHz),
            maximum permitted power is 27.0 dBm (500 mW)</t>
          </list>
        </t>

        <t>This would allow, for example, operating two 100 kHz sub-channels
        within the indicated 12 MHz range at 500 mW each, totaling 1000 mW. Of
        course, many combinations are possible, as long as they satisfy both
        conditions.</t>

        <t>The following example encodes multiple (two) spectrum profiles,
        each having a gap from 530 MHz to 536 MHz (for illustrative purposes
        only):</t>

        <figure>
          <artwork><![CDATA[
[
  {
    "resolutionBwHz": 6e6,
    "profiles": [
      [
        {"hz": 5.18e8, "dbm": 30.0},
        {"hz": 5.24e8, "dbm": 30.0},
        {"hz": 5.24e8, "dbm": 36.0},
        {"hz": 5.30e8, "dbm": 36.0}
      ],
      [
        {"hz": 5.36e8, "dbm": 30.0},
        {"hz": 5.42e8, "dbm": 30.0}
      ],
      ...
    ]
  },
  {
    "resolutionBwHz": 1e5,
    "profiles": [
      [
        {"hz": 5.18e8, "dbm": 27.0},
        {"hz": 5.24e8, "dbm": 27.0},
        {"hz": 5.24e8, "dbm": 30.0},
        {"hz": 5.30e8, "dbm": 30.0}
      ],
      [
        {"hz": 5.36e8, "dbm": 27.0},
        {"hz": 5.42e8, "dbm": 27.0}
      ],
      ...
    ]
  }
]
 ]]></artwork>
        </figure>

        <t/>
      </section>

      <section anchor="SectSpectrumProfile" title="SpectrumProfile">
        <t>A spectrum profile is characterized by an ordered list of
        (frequency, power) points that represents the shape of maximum
        permissible power levels over a range of frequencies as a piecewise
        linear curve.</t>

        <t>
          <list style="symbols">
            <t>It MUST contain a minimum of two entries.</t>

            <t>The entries in the list MUST be ordered in non-decreasing
            frequency values.</t>

            <t>Two consecutive points MAY have the same frequency value to
            represent a "step function".</t>

            <t>Three or more points MUST NOT share the same frequency
            value.</t>

            <t>The first frequency is inclusive; the last frequency is
            exclusive.</t>
          </list>
        </t>

        <t>NOTE: This encoding allows presentation of "ramps" where the slope
        of a line segment may be finite and non-zero.</t>

        <t>The following figure illustrates the SpectrumProfile element.</t>

        <figure>
          <artwork><![CDATA[
+-------------------------------+
|SpectrumProfile                |
+---------------------+---------+
|list                 |REQUIRED |---+
+---------------------+---------+   |  2..*
                                    V
              +--------------------------+
              |SpectrumProfilePoint      |
              +----------------+---------+
              |hz:float        |REQUIRED |
              |dbm:float       |REQUIRED |
              +----------------+---------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters of each point in the profile:</t>

        <t>
          <list style="hanging">
            <t hangText="hz:">The frequency, in hertz, at which the power
            level is defined.</t>

            <t hangText="dbm: ">The power level, expressed as dBm per
            resolution bandwidth, as defined by the resolutionBwHz element of
            the enclosing <xref target="SectSpectrum">Spectrum</xref>
            element.</t>
          </list>
        </t>

        <t/>
      </section>

      <section anchor="SectFrequencyRange" title="FrequencyRange">
        <t>FrequencyRange specifies a frequency range.</t>

        <figure>
          <artwork><![CDATA[
+--------------------------------+
|FrequencyRange                  |
+----------------------+---------+
|startHz:float         |REQUIRED |
|stopHz:float          |REQUIRED |
+----------------------+---------+
 ]]></artwork>
        </figure>

        <t/>

        <t>Parameters:<list style="hanging">
            <t hangText="startHz:">The inclusive start of the frequency range
            (in hertz) is REQUIRED.</t>

            <t hangText="stopHz:">The exclusive end of the frequency range (in
            hertz) is REQUIRED.</t>
          </list></t>

        <t/>
      </section>

      <section anchor="SectEventTime" title="EventTime">
        <t>The EventTime element specifies the start and stop times of an
        "event". This is used to indicate the time period for which a <xref
        target="SectSpectrum">Spectrum</xref> is valid.</t>

        <figure>
          <artwork><![CDATA[
+---------------------------+
|EventTime                  |
+-----------------+---------+
|startTime:string |REQUIRED |
|stopTime:string  |REQUIRED |
+-----------------+---------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="startTime:">The inclusive start of the event is
            REQUIRED.</t>

            <t hangText="stopTime:">The exclusive end of the event is
            REQUIRED.</t>
          </list>
        </t>

        <t>Both times are expressed using the format, YYYY-MM-DDThh:mm:ssZ, as
        defined by <xref target="RFC3339">"Date and Time on the Internet:
        Timestamps"</xref>. The times MUST be expressed using UTC.</t>

        <t>A device that does not have access to the current date and time
        MUST use the timestamp at the top level of the response message as a
        substitute for the current time (see <xref
        target="SectAvailSpectrumResp">"Available Spectrum Response"</xref>
        and <xref target="SectAvailSpectrumBatchResp">"Available Spectrum
        Batch Response"</xref>). For example,<list style="symbols">
            <t>(startTime - timestamp) gives the duration that a device must
            wait before the event becomes "active". If the value is zero or
            negative, the event is already active.</t>

            <t>If the event is already active, (stopTime - timestamp) is the
            duration that the event remains active. If the value is zero or
            negative, the event is no longer active and MUST be ignored.</t>
          </list></t>

        <t/>
      </section>

      <section anchor="SectGeoSpectrumSpec" title="GeoSpectrumSpec">
        <t>The GeoSpectrumSpec element encapsulates the available spectrum for
        a location. It is returned within an <xref
        target="SectAvailSpectrumBatchResp">AVAIL_SPECTRUM_BATCH_RESP</xref>
        batch response that contains multiple GeoSpectrumSpec entries, each
        matching a location provided in the batch request.</t>

        <figure>
          <artwork><![CDATA[+----------------------------------+
|GeoSpectrumSpec                   |
+-----------------------+----------+
|location:GeoLocation   | REQUIRED |
|spectrumSpecs:list     | REQUIRED |-------+
+-----------------------+----------+       |
                                           | 1..*
                                           V
                                   +--------------+
                                   | SpectrumSpec |
                                   +--------------+]]></artwork>
        </figure>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="location:">The <xref
            target="SectGeoLocation">GeoLocation</xref> identifies the
            location at which the spectrum schedule applies.</t>

            <t hangText="spectrumSpecs:">The <xref
            target="SectSpectrumSpec">SpectrumSpec</xref> list is REQUIRED. At
            least one entry MUST be included. Each entry represents schedules
            of available spectrum for a ruleset. More than one entry MAY be
            included to support multiple rulesets at a location.</t>
          </list>
        </t>
      </section>

      <section anchor="SectDeviceValidity" title="DeviceValidity">
        <t>The DeviceValidity element is used to indicate whether a device is
        valid. See <xref target="SectDevValidResp"/>.</t>

        <figure>
          <artwork><![CDATA[
+---------------------------------------+
|DeviceValidity                         |
+----------------------------+----------+
|deviceDesc:DeviceDescriptor | REQUIRED |
|isValid:boolean             | REQUIRED |
|reason:string               | OPTIONAL |
+----------------------------+----------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="deviceDesc:">The <xref
            target="SectDeviceDesc">DeviceDescriptor</xref> that was used to
            check for validity is REQUIRED.</t>

            <t hangText="isValid:">This is a REQUIRED boolean value that
            indicates whether the device is valid.</t>

            <t hangText="reason:">If the device identifier is not valid, the
            Database MAY include a reason. The reason MAY be in any language.
            Its maximum length is 128 octets.</t>
          </list>
        </t>
      </section>

      <section anchor="SectErrorCodes" title="Error Element">
        <t>If the Database responds to a PAWS request message with an error,
        it MUST include an Error element.</t>

        <figure>
          <artwork><![CDATA[
+----------------------------------+
|Error                             |
+----------------+-----------------+
|code:int        | REQUIRED        |
|message:string  | OPTIONAL        |
|data:any        | see description |
+----------------+-----------------+]]></artwork>
        </figure>

        <t/>

        <t>Parameters:</t>

        <t>
          <list style="hanging">
            <t hangText="code:">An integer code that indicates the error type
            is REQUIRED. Values MUST be within the range -32768 to 32767,
            inclusive.</t>

            <t hangText="message:">A description of the error is OPTIONAL. It
            MAY be in any language. Its maximum length is 128 octets.</t>

            <t hangText="data:">The Database MAY include additional data. For
            some errors, additional data may be required (see <xref
            target="TableErrorCodes"/>). The device MUST ignore any data
            parameters it does not understand.</t>
          </list>
        </t>

        <t>The following table lists predefined and reserved error codes. They
        are loosely grouped into the following categories:</t>

        <t>
          <list style="hanging">
            <t hangText="-100s:">Indicates compatibility issues, e.g., version
            mismatch, unsupported or unimplemented features.</t>

            <t hangText="-200s:">Indicates that the device request contains an
            error that needs to be modified before making another request.</t>

            <t hangText="-300s:">Indicates authorization-related issues.</t>
          </list>
        </t>

        <t>Values that are not defined explicitly in the <xref
        target="TableErrorCodes">Error Codes Table</xref> below are
        unassigned. To define new error codes, see <xref
        target="SectIanaError">PAWS Error Code Registry</xref>.</t>

        <texttable align="left" anchor="TableErrorCodes" style="headers"
                   title="Error Codes">
          <ttcol>Code</ttcol>

          <ttcol>Name</ttcol>

          <ttcol>Description and Additional Parameters</ttcol>

          <c>0</c>

          <c>(reserved)</c>

          <c/>

          <c>-100</c>

          <c>(reserved)</c>

          <c/>

          <c>-101</c>

          <c>VERSION</c>

          <c>The Database does not support the specified version of the
          message. &nbsp;This error does not use any additional data.</c>

          <c>-102</c>

          <c>UNSUPPORTED</c>

          <c>The Database does not support the device. &nbsp;For example, it
          supports none of the rulesets specified in the request or does not
          support the device, based on its device type, model, etc. &nbsp;This
          error does not use any additional data.</c>

          <c>-103</c>

          <c>UNIMPLEMENTED</c>

          <c>The Database does not implement the optional request or optional
          feature. &nbsp;This error does not use any additional data.</c>

          <c>-104</c>

          <c>OUTSIDE_COVERAGE</c>

          <c>The specified geolocation is outside the coverage area of the
          Database. &nbsp;The Database MAY include a <xref
          target="SectDbUpdateSpec">DbUpdateSpec</xref> to provide a list of
          alternate Databases that might be appropriate for the requested
          location. &nbsp;See <xref
          target="SectOutsideCoverageError">OUTSIDE_COVERAGE Error</xref> for
          more details.</c>

          <c>-105</c>

          <c>DATABASE_CHANGE</c>

          <c>The Database has changed its URI. &nbsp;The Database MAY include
          a <xref target="SectDbUpdateSpec">DbUpdateSpec</xref> in the error
          response to provide devices with one or more alternate database
          URIs. &nbsp;The device needs to update its preconfigured entry for
          the responding Database with the alternate Databases listed in the
          DbUpdateSpec. &nbsp;See <xref
          target="SectDatabaseChangeError">DATABASE_CHANGE Error</xref> for
          more details.</c>

          <c>-200</c>

          <c>(reserved)</c>

          <c/>

          <c>-201</c>

          <c>MISSING</c>

          <c>A required parameter is missing. &nbsp;The Database MUST include
          a list of the required parameter names. &nbsp;The Database MAY
          include only names of parameters that are missing, but MAY include a
          full list. Including the full list of missing parameters may reduce
          the number of re-queries from the device. &nbsp;See <xref
          target="SectMissingError">MISSING Error</xref> for more details.</c>

          <c>-202</c>

          <c>INVALID_VALUE</c>

          <c>A parameter value is invalid in some way. &nbsp;The Database
          SHOULD include a message indicating which parameter and why its
          value is invalid. &nbsp;This error does not use any additional
          data.</c>

          <c>-300</c>

          <c>(reserved)</c>

          <c/>

          <c>-301</c>

          <c>UNAUTHORIZED</c>

          <c>The device is not authorized to used the Database.
          &nbsp;Authorization may be determined by the ruleset or be dependent
          on prior arrangement between the device and Database. &nbsp;This
          error does not use any additional data.</c>

          <c>-302</c>

          <c>NOT_REGISTERED</c>

          <c>Device registration required, but the device is not registered.
          This error does not use any additional data.</c>

          <c>-32000 to -32768</c>

          <c>(reserved)</c>

          <c>Reserved for JSON-RPC error codes.</c>
        </texttable>

        <section anchor="SectOutsideCoverageError"
                 title="OUTSIDE_COVERAGE Error">
          <t>When the error code is OUTSIDE_COVERAGE, the Database MAY include
          an ErrorData element within its Error response as the "data"
          parameter, and, if present, the ErrorData contains a <xref
          target="SectDbUpdateSpec">DbUpdateSpec</xref> element that provides
          a list of alternate Databases that might be appropriate for the
          requested location.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------+
|Error                      |
+----------------+----------+
|code:int        | REQUIRED |
|message:string  | OPTIONAL |    +-----------------------------+
|data:ErrorData  | OPTIONAL |--->|ErrorData                    |
+----------------+----------+    +------------------+----------+
                                 |spec:DbUpdateSpec | OPTIONAL |
                                 +------------------+----------+
 ]]></artwork>
          </figure>

          <t/>
        </section>

        <section anchor="SectDatabaseChangeError"
                 title="DATABASE_CHANGE Error">
          <t>When the error code is DATABASE_CHANGE, the Database MAY include
          an ErrorData element within its Error response as the "data"
          parameter, and, if present, the ErrorData contains a <xref
          target="SectDbUpdateSpec">DbUpdateSpec</xref> element that provides
          a list of alternate Databases.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------+
|Error                      |
+----------------+----------+
|code:int        | REQUIRED |
|message:string  | OPTIONAL |    +-----------------------------+
|data:ErrorData  | OPTIONAL |--->|ErrorData                    |
+----------------+----------+    +------------------+----------+
                                 |spec:DbUpdateSpec | REQUIRED |
                                 +------------------+----------+
 ]]></artwork>
          </figure>

          <t/>
        </section>

        <section anchor="SectMissingError" title="MISSING Error">
          <t>When the error code is MISSING, the Database MUST include an
          ErrorData element within its Error response as the "data" parameter,
          and the ErrorData element MUST include a list of the missing
          required parameters and MAY include the list of all required
          parameters.</t>

          <figure>
            <artwork><![CDATA[
+---------------------------+
|Error                      |
+----------------+----------+
|code:int        | REQUIRED |
|message:string  | OPTIONAL |    +---------------------------+
|data:ErrorData  | REQUIRED |--->|ErrorData                  |
+----------------+----------+    +----------------+----------+ 1..*
                                 |parameters:list | REQUIRED |--+
                                 +----------------+----------+  |
                                                                v
                                                              string
                                  ]]></artwork>
          </figure>

          <t/>

          <t>Parameters:<list style="hanging">
              <t hangText="parameters:">List of one or more parameter names
              (strings). The name of a parameter is expressed using dotted
              notation, when appropriate, e.g., "deviceDesc.serialNumber".</t>
            </list></t>

          <t/>
        </section>
      </section>
    </section>

    <section anchor="SectEncoding" title="Message Encoding">
      <t>PAWS is encoded using <xref target="JSON-RPC">JSON-RPC</xref> (see
      also <xref target="RFC7159">"The JavaScript Object Notation (JSON) Data
      Interchange Format" </xref>). Each component described in <xref
      target="SectFunctionalities">Protocol Functionalities</xref> corresponds
      to one or more JSON-RPC methods. This section discusses how to encode
      the data models presented in Sections <xref format="counter"
      target="SectFunctionalities"/> and <xref format="counter"
      target="SectParameters"/> into JSON and provides some example encodings.
      The JSON examples may contain ellipses (...) to represent additional
      properties or elements that have been omitted in order to make the
      examples more concise.</t>

      <section title="JSON-RPC Binding">
        <t>The <xref target="JSON-RPC">JSON-RPC</xref> protocol consists of
        two basic objects, Request and Response:<list style="symbols">
            <t>The JSON-RPC Request object encapsulates a PAWS functionality
            (operation) and the request message.</t>

            <t>The JSON-RPC Response object encapsulates a PAWS response
            message and an Error element.</t>
          </list></t>

        <t>The Database and device MUST support JSON-RPC 2.0 encoding, with
        the restriction that the "id" parameter in the messages MUST be a
        string. The device should generate the "id" uniquely enough to allow
        the use of JSON-RPC batch.</t>

        <t>The JSON-RPC Request for PAWS has the following form:</t>

        <figure>
          <artwork><![CDATA[
{
  "jsonrpc": "2.0",
  "method": "spectrum.paws.methodName",
  "params": <PAWS_REQ>,
  "id": "idString"
}
 ]]></artwork>
        </figure>

        <t>where "method" is the name of a PAWS functionality (operation), and
        &lt;PAWS_REQ&gt; represents one of the PAWS request messages
        associated with the method (see Sections <xref format="counter"
        target="SecInitialization"/> through <xref format="counter"
        target="SecDeviceValidation"/>). Method names are defined with the
        prefix "spectrum.paws.".</t>

        <t>The non-error JSON-RPC Response for PAWS has the following
        form:</t>

        <figure>
          <artwork><![CDATA[
{
  "jsonrpc": "2.0",
  "result": <PAWS_RESP>,
  "id": "idString"
}
 ]]></artwork>
        </figure>

        <t>where &lt;PAWS_RESP&gt; represents one of the PAWS response
        messages associated with the method, and "id" is copied from the
        request.</t>

        <t>The error JSON-RPC Response for PAWS has the following form:</t>

        <figure>
          <artwork><![CDATA[
{
  "jsonrpc": "2.0",
  "error": {
    "code": -102,
    "message": "An appropriate error message.",
    "data": { ... }
  },
  "id": "idString"
}
 ]]></artwork>
        </figure>

        <t>where the "error" object corresponds to the <xref
        target="SectErrorCodes">Error Element</xref>, and "code" is an error
        code described in the same section. The Database SHOULD attempt to use
        the most specific applicable PAWS error code. When an accurate one is
        not available, it SHOULD fall back to standard JSON-RPC error codes as
        defined in the JSON-RPC specification. For example, if the Database
        receives invalid JSON from the device, it should respond with
        "-32700", signifying a parse error. As a last resort, the Database MAY
        send a suitable HTTP 5xx response.</t>

        <section title="Method Names">
          <t>Table 2 defines the method name, request object, and response
          object for each functionality defined in <xref
          target="SectFunctionalities">Protocol Functionalities</xref>.</t>

          <figure>
            <artwork><![CDATA[
+-------------------------------------------------------------------+
| Method Name                                                       |
|    Request                                                        |
|    Response                                                       |
+-------------------------------------------------------------------+
| spectrum.paws.init                                                |
|    INIT_REQ (Section 4.3.1)                                       |
|    INIT_RESP (Section 4.3.2)                                      |
|                                                                   |
| spectrum.paws.register                                            |
|    REGISTRATION_REQ (Section 4.4.1)                               |
|    REGISTRATION_RESP (Section 4.4.2)                              |
|                                                                   |
| spectrum.paws.getSpectrum                                         |
|    AVAIL_SPECTRUM_REQ (Section 4.5.1)                             |
|    AVAIL_SPECTRUM_RESP (Section 4.5.2)                            |
|                                                                   |
| spectrum.paws.getSpectrumBatch                                    |
|    AVAIL_SPECTRUM_BATCH_REQ (Section 4.5.3)                       |
|    AVAIL_SPECTRUM_BATCH_RESP (Section 4.5.4)                      |
|                                                                   |
| spectrum.paws.notifySpectrumUse                                   |
|    SPECTRUM_USE_NOTIFY (Section 4.5.5)                            |
|    SPECTRUM_USE_RESP (Section 4.5.6)                              |
|                                                                   |
| spectrum.paws.verifyDevice                                        |
|    DEV_VALID_REQ (Section 4.6.1)                                  |
|    DEV_VALID_RESP (Section 4.6.2)                                 |
+-------------------------------------------------------------------+

                     Table 2: Method Names
]]></artwork>
          </figure>
        </section>

        <section title="JSON Encoding of Data Models">
          <t><xref target="RFC7159">JSON</xref> encoding of the data models
          described in Sections <xref format="counter"
          target="SectFunctionalities"/> and <xref format="counter"
          target="SectParameters"/> is straightforward:</t>

          <t><list style="symbols">
              <t>Each data model describes the contents of a JSON object.</t>

              <t>Each parameter of a data model corresponds to a member of the
              corresponding JSON object:<list style="symbols">
                  <t>The parameter name of the data model is the same as the
                  member name of the JSON object.</t>

                  <t>The parameter data type describes the type of the member
                  value.</t>
                </list></t>

              <t>Primitive types map to JSON type, as described in <xref
              target="SectFunctionalities"/> and repeated here:<list
                  style="hanging">
                  <t hangText="string:">A JSON string, restricted to UTF-8
                  encoding</t>

                  <t hangText="int:">A JSON number, without a fractional or
                  exponent part</t>

                  <t hangText="float:">A JSON number</t>

                  <t hangText="boolean:">One of the JSON values, true or
                  false</t>
                </list></t>

              <t>The list type maps to a JSON array, except that all values in
              the array are of the same type.</t>

              <t>When the parameter data type refers to another data model,
              that data model describes a nested JSON object.</t>

              <t>The encoded JSON object for each of the Request and Response
              message listed in the Method Names Table (Table 2) also includes
              the following members:<list style="hanging">
                  <t hangText="type:">The name of the message, e.g.,
                  "INIT_REQ"</t>

                  <t hangText="version:">The PAWS version, e.g., "1.0"</t>
                </list></t>
            </list>See the following sections for examples.</t>
        </section>
      </section>

      <section title="Example Encoding: spectrum.paws.init Method">
        <t>An example of the "spectrum.paws.init" JSON-RPC request is shown
        below.</t>

        <figure>
          <artwork><![CDATA[
{
 "jsonrpc": "2.0",
 "method": "spectrum.paws.init",
 "params": {
  "type": "INIT_REQ",
  "version": "1.0",
  "deviceDesc": {
   "serialNumber": "XXX",
   "fccId": "YYY",
   "rulesetIds": ["FccTvBandWhiteSpace-2010"]
  },
  "location": {
   "point": {
    "center": {"latitude": 37.0, "longitude": -101.3}
   }
  }
 },
 "id": "xxxxxx"
}
 ]]></artwork>
        </figure>

        <t>An example of the corresponding JSON-RPC response is shown
        below.</t>

        <figure>
          <artwork><![CDATA[ 
{
 "jsonrpc": "2.0",
 "result": {
  "type": "INIT_RESP",
  "version": "1.0",
  "rulesetInfos": [
    {
      "authority": "us",
      "rulesetId": "FccTvBandWhiteSpace-2010",
      "maxLocationChange": 100,
      "maxPollingSecs": 86400
    }
  ]
 },
 "id": "xxxxxx"
}
 ]]></artwork>
        </figure>
      </section>

      <section title="Example Encoding: spectrum.paws.getSpectrum Method">
        <t>An example of the "spectrum.paws.getSpectrum" JSON-RPC request is
        shown below:</t>

        <figure>
          <artwork><![CDATA[
{
 "jsonrpc": "2.0",
 "method": "spectrum.paws.getSpectrum",
 "params": {
  "type": "AVAIL_SPECTRUM_REQ",
  "version": "1.0",
  "deviceDesc": {
   "serialNumber": "XXX",
   "fccId": "YYY",
   "rulesetIds": ["FccTvBandWhiteSpace-2010"]
  },
  "location": {
   "point": {
    "center": {"latitude": 37.0, "longitude": -101.3}
   }
  },
  "antenna": {"height": 10.2, "heightType": "AGL"}
 },
 "id": "xxxxxx"
}
 ]]></artwork>
        </figure>

        <t/>

        <t>The following example "spectrum.paws.getSpectrum" JSON-RPC response
        contains:</t>

        <t>
          <list style="symbols">
            <t>A schedule with two time ranges</t>

            <t>A spectrum profile for one resolution bandwidth (6 MHz)</t>

            <t>The power levels for two frequency segments:<list
                style="symbols">
                <t>From 518 MHz to 542 MHz</t>

                <t>From 620 MHz to 626 MHz</t>
              </list></t>

            <t>In practice, each "profiles" list contains (frequency, power)
            points to cover all frequencies governed by the associated
            ruleset. See <xref target="SectSpectrum">"Spectrum"</xref> for a
            more detailed discussion on the representation.</t>
          </list>
        </t>

        <figure>
          <artwork><![CDATA[
{
 "jsonrpc": "2.0",
 "result": {
  "type": "AVAIL_SPECTRUM_RESP",
  "version": "1.0",
  "timestamp": "2013-03-02T14:30:21Z",
  "deviceDesc": {
   "serialNumber": "XXX",
   "fccId": "YYY",
   "rulesetIds": ["FccTvBandWhiteSpace-2010"]
  },
  "spectrumSpecs": [
   {
    "rulesetInfo": {
      "authority": "us",
      "rulesetId": "FccTvBandWhiteSpace-2010"
    },
    "needsSpectrumReport": false,
    "spectrumSchedules": [
     {
      "eventTime": {
       "startTime": "2013-03-02T14:30:21Z",
       "stopTime": "2013-03-02T20:00:00Z"
      },
      "spectra": [
        {
         "resolutionBwHz": 6e6,
         "profiles": [
           ...
           [
            {"hz":5.18e8, "dbm":30.0},
            {"hz":5.36e8, "dbm":30.0},
            {"hz":5.36e8, "dbm":36.0},
            {"hz":5.42e8, "dbm":36.0}
           ],
           [
            {"hz":6.20e8, "dbm":30.0},
            {"hz":6.26e8, "dbm":30.0}
           ],
           ...
         ]
        }
      ]
     },
     {
      "eventTime": {
       "startTime": "2013-03-02T22:00:00Z",
       "stopTime": "2013-03-03T14:30:21Z"
      },
      "spectra": [
       ...
      ]
     }
    ]
   }
  ]
 },
 "id": "xxxxxx"
}
 ]]></artwork>
        </figure>

        <t/>

        <t>The following example "spectrum.paws.getSpectrum" JSON-RPC response
        includes a spectrum profile that contains specifications for two
        different bandwidth resolutions (6 MHz and 100 kHz):</t>

        <figure>
          <artwork><![CDATA[
{
 "jsonrpc": "2.0",
 "result": {
  "type": "AVAIL_SPECTRUM_RESP",
  "version": "1.0",
  "timestamp": "2013-03-02T14:30:21Z",
  "deviceDesc": {
   "serialNumber": "XXX",
   ...
  },
  "spectrumSpecs": [
   {
    "rulesetInfo": {
      "authority": "xx",
      ...
    },
    "needsSpectrumReport": false,
    "spectrumSchedules": [
     {
      "eventTime": {
       "startTime": "2013-03-02T14:30:21Z",
       "stopTime": "2013-03-02T20:00:00Z"
      },
      "spectra": [
        {
         "resolutionBwHz": 6e6,
         "profiles": [
           ...
           [
            {"hz":5.18e8, "dbm":30.0},
            {"hz":5.36e8, "dbm":30.0},
            {"hz":5.36e8, "dbm":36.0},
            {"hz":5.42e8, "dbm":36.0}
           ],
           [
            {"hz":6.20e8, "dbm":30.0},
            {"hz":6.26e8, "dbm":30.0}
           ],
           ...
         ]
        },
        {
         "resolutionBwHz": 1e5,
         "profiles": [
           ...
           [
            {"hz":5.18e8, "dbm":27.0},
            {"hz":5.36e8, "dbm":27.0},
            {"hz":5.36e8, "dbm":30.0},
            {"hz":5.42e8, "dbm":30.0}
           ],
           [
            {"hz":6.20e8, "dbm":27.0},
            {"hz":6.26e8, "dbm":27.0}
           ],
           ...
         ]
        }
      ]
     },
     {
      "eventTime": {
       "startTime": "2013-03-02T22:00:00Z",
       "stopTime": "2013-03-03T14:30:21Z"
      },
      "spectra": [
       ...
      ]
     }
    ]
   }
  ]
 },
 "id": "xxxxxx"
}
 ]]></artwork>
        </figure>
      </section>

      <section anchor="SectJsonDeviceOwner"
               title="Example Encoding: DeviceOwner vCard">
        <t>The <xref target="SectDeviceOwner">DeviceOwner</xref> data model
        contains member values that are JSON encodings of vCard, as described
        in <xref target="RFC7095">"jCard: The JSON format for vCard"</xref>.
        An example fragment is provided below:</t>

        <figure>
          <artwork><![CDATA[
  {
    ...
    "deviceOwner": {
      "owner": [
        "vcard", [
          ["version", {}, "text", "4.0"],
          ["kind", {}, "text", "org"],
          ["fn", {}, "text", "Racafrax, Inc."]
        ]
      ],
      "operator": [
        "vcard", [
          ["version", {}, "text", "4.0"],
          ["fn", {}, "text", "John Frax"],
          ["adr", {}, "text",
            ["", "", "100 Main Street",
             "Summersville", "CA", "90034", "USA"
            ]
          ],
          ["tel", {}, "uri", "tel:+1-213-555-1212"],
          ["email", {}, "text", "j.frax@rackafrax.com"]
        ]
      ]
    }
  }
 ]]></artwork>
        </figure>
      </section>
    </section>

    <section anchor="SecHttpsBinding" title="HTTPS Binding">
      <t>This section describes the use of <xref target="RFC2818">"HTTP Over
      TLS"</xref> (HTTPS) as the transfer mechanism for PAWS. TLS provides
      message integrity and confidentiality between the Master Device and the
      Database, but only when best current practices are adopted, including
      use of recommended cipher suites and modes of operation. Consequently,
      to improve PAWS security and interoperability, implementations of the
      Database and Master Device MUST follow best current practices defined by
      <xref target="RFC7525">"Recommendations for Secure Use of Transport
      Layer Security (TLS) and Datagram Transport Layer Security
      (DTLS)"</xref>.</t>

      <t>Depending on a prior relationship between a Database and device, the
      server MAY require client authentication, as described in the <xref
      target="RFC5246">"Transport Layer Security (TLS) Protocol"</xref>, to
      authenticate the device. When client authentication is required, the
      Database MUST specify, by prior arrangement, acceptable root
      Certification Authorities (CAs) to serve as trust anchors for device
      certificates.</t>

      <t>To enable Databases to handle large numbers of requests from large
      numbers of devices, the Database MAY support and devices SHOULD support
      <xref target="RFC5077">"Stateless TLS Session Resumption"</xref>.</t>

      <t>A PAWS request message is carried in the body of an HTTP POST
      request. A PAWS response message is carried in the body of an HTTP
      response. A PAWS response SHOULD include a Content-Length header.</t>

      <t>The POST method is the only method REQUIRED for PAWS. If a Database
      chooses to support GET, it MUST be an escaped URI, but the encoding of
      the URI is outside the scope of this document. The Database MAY refuse
      to support the GET request by returning an HTTP error code, such as 405
      (method not allowed).</t>

      <t>The Database MAY redirect a PAWS request by returning a HTTP 3xx
      response (as defined by Section 6.4 of <xref target="RFC7231">"HTTP/1.1:
      Semantics and Content"</xref>). The Database MUST provide the redirect
      URI in the Location header of the 3xx response, and the device MUST
      handle redirects by using the Location header provided by the Database.
      When redirecting, the device MUST observe the delay indicated by the
      Retry-After header. The device MUST authenticate the Database that
      returns the redirect response before following the redirect. Also, the
      device MUST authenticate the Database indicated in the redirect. Since
      the device may communicate with a Database (which it authenticated)
      without user interaction, when the response code is 301 (Moved
      Permanently), the device MAY redirect without asking a user for
      confirmation, even thought it is in response to an HTTP POST method.</t>

      <t>The Database SHOULD use HTTP status code "307 Temporary Redirect" to
      indicate that the device SHOULD resubmit the same request to an
      alternate URI. The device MAY revert to the original URI for the very
      next request, or it MAY continue to use the alternate URI for a period
      of time, e.g.,:</t>

      <t><list style="symbols">
          <t>For the remainder of its session, or</t>

          <t>For a fixed period of time, or</t>

          <t>Until power cycled, or</t>

          <t>Until it receives another redirect</t>
        </list>However, the device does not need to modify its stored list of
      URIs.</t>

      <t>For a minimum of two weeks before the URI of the Database changes
      permanently, it MUST use the database-change (<xref
      target="SectDbUpdateSpec">DbUpdateSpec</xref>) mechanism to notify
      devices, as described in <xref target="SecConfigUpdate">"Configuration
      Update: Database URI Changes" </xref>. After the Database has moved,
      requests to the original URI MAY return HTTP status code 301 (Moved
      Permanently) to indicate that the device SHOULD resubmit the request,
      and all future requests, to the indicated alternate URI.</t>

      <t/>
    </section>

    <section anchor="SectExtensibility" title="Extensibility">
      <t>This section describes procedures for extending PAWS. No extensions
      should be made that would return sensitive device-specific information
      in database responses.</t>

      <section anchor="SectExtensibilityRuleset"
               title="Defining Ruleset Identifiers">
        <t>A ruleset represents a set of device-side requirements for which
        the device has been certified. It typically corresponds to, but is not
        limited to, a set of rules that govern a specific set of radio
        spectrum for a regulatory domain.</t>

        <t>Ruleset identifiers are defined and registered in the Ruleset ID
        Registry following the procedure in <xref target="SectIanaRuleset"/>.
        Ruleset ID values MUST conform to the ruleset-id ABNF. If the Ruleset
        ID requires additional parameters, they are registered in the PAWS
        Parameters Registry, as described by <xref
        target="SectIanaParameters"/>. The ABNF syntax <xref
        target="RFC5234"/> is as follows.</t>

        <figure>
          <artwork type="ABNF"><![CDATA[
ruleset-id   = 1*64ruleset-char
ruleset-char = ALPHA / DIGIT / "_" / "."]]></artwork>
        </figure>

        <t/>

        <t>When defining a Ruleset ID:<list style="symbols">
            <t>It can be useful for the identifier to be descriptive of the
            set of rules that allow a device to operate within one or more
            regulatory domains. For example, it might include the name of a
            regulatory body or a certification process.</t>

            <t>The identifier SHOULD include some sort of version information,
            such as a year and/or version number.</t>

            <t>The maximum length of the identifier is 64 octets.</t>
          </list></t>
      </section>

      <section anchor="SectExtensibilityParameters"
               title="Defining New Message Parameters">
        <t>New request or response parameters for use with PAWS are defined
        and registered in the parameters registry following the procedure in
        <xref target="SectIanaParameters"/>.</t>

        <t>Parameter names MUST conform to the param-name ABNF, and parameter
        values syntax MUST be well-defined (e.g., using ABNF or a reference to
        the syntax of an existing parameter).</t>

        <figure>
          <artwork type="ABNF"><![CDATA[
param-name = 1*64name-char
name-char  = ALPHA / DIGIT / "_"]]></artwork>
        </figure>

        <t/>

        <t>Parameter names use lowerCamelCase by convention. The maximum
        length of a name is 64 octets.</t>

        <t>Unregistered vendor-specific parameter extensions that are not
        commonly applicable and are specific to the implementation details of
        the Database where they are used SHOULD use a vendor-specific prefix
        that is not likely to conflict with other registered values (e.g.,
        begin with 'companyname').</t>
      </section>

      <section anchor="SectExtensibilityError"
               title="Defining Additional Error Codes">
        <t>Additional error codes can be registered to extend the set listed
        in <xref target="SectErrorCodes"/>, following the procedures in <xref
        target="SectIanaError"/>. If the error code requires additional
        response parameters, they are registered in the PAWS Parameters
        Registry, as described by <xref target="SectIanaParameters"/>.</t>

        <t>By convention, the error code is a negative integer value, using
        one of the range of values defined in <xref
        target="SectErrorCodes">Error Codes </xref>. If an appropriate
        category does not exist, a value from a different range may be
        used.</t>

        <t/>
      </section>
    </section>

    <section anchor="SectIana" title="IANA Considerations">
      <t>There are three registries associated with PAWS:</t>

      <t>
        <list style="symbols">
          <t>
            <xref target="SectIanaRuleset">PAWS Ruleset ID Registry</xref>
          </t>

          <t>
            <xref target="SectIanaParameters">PAWS Parameter Registry</xref>
          </t>

          <t>
            <xref target="SectIanaError">PAWS Error Code Registry</xref>
          </t>
        </list>
      </t>

      <t/>

      <t>All registries use the Specification Required policy <xref
      target="RFC5226"/>, with a Designated Expert appointed by the IESG.
      Specific criteria that the Designated Expert should use in assessing
      registrations are given below in the description of each registry. The
      Designated Expert should take advice from the community through the
      paws@ietf.org mailing list, and the registrant is encouraged to post to
      the mailing list before formally requesting the registration from IANA.
      The intention is that new registrations will be accompanied by a
      published specification. But in order to allow for the allocation of
      values prior to publication of the specification, the Designated Expert
      can approve allocations once it seems clear that the specification will
      be published. Upon approval, IANA will post the registrations that are
      not intended to be published in an RFC.</t>

      <section anchor="SectIanaRuleset" title="PAWS Ruleset ID Registry">
        <t>This specification establishes the "PAWS Ruleset ID Registry".</t>

        <t>Ruleset type names for inclusion in PAWS messages are registered on
        the advice of one or more Designated Experts, with <xref
        target="RFC5226">Specification Required</xref>. The specification must
        include a reference to the regulatory domain to which it applies. To
        increase interoperability, it is more desirable to have fewer rulesets
        than to have many rulesets with small variations. Consequently, the
        Designated Expert should avoid duplication and should encourage the
        registrant to look for alternatives if there are only small variations
        from an existing ruleset. The Designated Expert should ensure that the
        proposed registration is complete with respect to its associated
        regulatory domain and may seek an expert familiar with those rules to
        participate in the review on the paws@ietf.org mailing list.</t>

        <t>The PAWS Ruleset ID Registry includes the following: 'Ruleset
        Identifier', 'Reference', and 'Template'. The Template column will
        include links to the registration templates, either posted by IANA or
        linked to the relevant sections of RFCs.</t>

        <section title="Registration Template">
          <t><list style="hanging">
              <t hangText="Ruleset identifier:">The name of the ruleset. See
              <xref target="SectExtensibilityRuleset"/> of RFC 7545 for the
              format requirements of this identifier.</t>

              <t hangText="Specification document(s):">Reference to the
              document that specifies the parameter, preferably including a
              URI that can be used to retrieve a copy of the document. An
              indication of the relevant sections also may be included but is
              not required.</t>

              <t hangText="Additional Parameter Requirements:">Listing of
              additional parameter requirements to associate with the ruleset.
              Note that new parameters are registered separately in the PAWS
              Parameters Registry, as described by <xref
              target="SectExtensibilityParameters"/>. Two types of additional
              parameter requirements are:<list style="symbols">
                  <t>Addition of new parameters to existing structures, or
                  modification of the REQUIRED and OPTIONAL requirements for
                  existing parameters.</t>

                  <t>Modification of requirements to existing parameter
                  values.</t>
                </list>For adding new parameters or modifying requirements of
              existing parameters, the registration should include a table for
              each affected structure that lists the structure's parameter
              changes. Each table should include a structure name in its
              heading and have the following columns:<list style="hanging">
                  <t hangText="Parameter name:">Name of the parameter added or
                  modified.</t>

                  <t hangText="Type:">Data type of the parameter value.</t>

                  <t hangText="Requirement:">Whether the parameter is REQUIRED
                  or OPTIONAL for the ruleset.</t>

                  <t hangText="Notes:">Any additional notes that might be
                  useful to implementors.</t>
                </list>For modifying requirements to existing parameter
              values, the registration should include a table for each
              affected structure that lists the structure's parameter changes.
              Each table should include a structure name in its heading and
              have the following columns:<list style="hanging">
                  <t hangText="Parameter name:">Name of the parameter.</t>

                  <t hangText="Type:">Data type of the parameter value.</t>

                  <t hangText="Additional requirements:">Additional
                  requirements on the parameter value.</t>
                </list></t>
            </list> IANA will post each registration template that is not
          intended to be published in an RFC.</t>

          <t>Note that the Additional Parameter Requirements section can be
          quite extensive, so it will not appear directly in the IANA Ruleset
          ID Registry table. The table, however, will contain a link to the
          full registration template for easy access to the additional
          requirements.</t>
        </section>

        <section anchor="SectIanaRulesetInitial"
                 title="Initial Registry Contents">
          <t>The PAWS Ruleset ID Registry enables protocol extensibility to
          support any regulatory domain and ruleset. The initial contents of
          the registry, however, include only FCC-specific and ETSI-specific
          entries, because, as of this writing, they are the only regulatory
          domains that have finalized rules. There is no intent to restrict
          the protocol to any particular set of authorities.</t>

          <t>The initial contents of the PAWS Ruleset ID Registry are listed
          below; each section corresponds to a single entry in the
          registry.</t>

          <section title="Federal Communications Commission (FCC)">
            <t>For the additional parameters that start with the "fcc" prefix,
            see <xref target="SectIanaParameterContents">PAWS Parameters
            Registry Initial Contents</xref> for more information.</t>

            <t>
              <list style="hanging">
                <t hangText="Ruleset identifier:">FccTvBandWhiteSpace-2010</t>

                <t hangText="Specification document(s):">This ruleset refers
                to the FCC rules for TV-band white-space operations
                established in the <xref target="FCC-CFR47-15H">Code of
                Federal Regulations (CFR), Title 47, Part 15, Subpart
                H</xref>.</t>
              </list>
            </t>

            <t>Additional Parameter Requirements</t>

            <t>Each of the following tables defines additional parameters for
            the indicated PAWS message. Note that the Requirement column lists
            FCC, not PAWS, requirements/optionality rules.</t>

            <t>The FCC requires registration of "Fixed Devices". Additionally,
            deviceOwner is required in the registration request:</t>

            <texttable>
              <preamble>
                <xref target="SectRegReq">Registration Request</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>deviceOwner</c>

              <c>
                <xref target="SectDeviceOwner">DeviceOwner</xref>
              </c>

              <c>REQUIRED</c>

              <c>For registering Fixed Devices</c>
            </texttable>

            <t/>

            <texttable>
              <preamble>
                <xref target="SectAvailSpectrumReq">Available Spectrum
                Request</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>deviceDesc</c>

              <c>
                <xref target="SectDeviceDesc">DeviceDescriptor</xref>
              </c>

              <c>REQUIRED</c>

              <c/>
            </texttable>

            <t/>

            <texttable>
              <preamble>
                <xref target="SectAvailSpectrumBatchReq">Available Spectrum
                Batch Request</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>deviceDesc</c>

              <c>
                <xref target="SectDeviceDesc">DeviceDescriptor</xref>
              </c>

              <c>REQUIRED</c>

              <c/>
            </texttable>

            <t/>

            <texttable>
              <preamble>
                <xref target="SectDeviceDesc">DeviceDescriptor</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>serialNumber</c>

              <c>string</c>

              <c>REQUIRED</c>

              <c>Specifies a device's serial number. &nbsp;See <xref
              target="SectDeviceDesc"/>.</c>

              <c>fccId</c>

              <c>string</c>

              <c>REQUIRED</c>

              <c>Specifies a device's <xref target="SectIanaParamFccid">FCC
              certification ID</xref>.</c>

              <c>fccTvbdDeviceType</c>

              <c>string</c>

              <c>REQUIRED</c>

              <c>Specifies the <xref target="SectIanaParamFccDeviceType">FCC
              Device Type</xref> of TV-band white-space device, as defined by
              the FCC rules.</c>
            </texttable>

            <t/>

            <t>The following table lists additional requirements for <xref
            target="SectDeviceOwner">DeviceOwner</xref> parameter values.</t>

            <texttable>
              <preamble>
                <xref target="SectDeviceOwner">DeviceOwner</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Additional Requirement</ttcol>

              <c>owner</c>

              <c>vCard</c>

              <c>The owner is required to contain the formatted name of an
              individual or organization using the "fn" property. &nbsp;When
              the name is that of an organization, the entry also is required
              to contain the "kind" property, with a value of "org".</c>

              <c>operator</c>

              <c>vCard</c>

              <c>The operator entry is required to contain the following
              properties for the contact person responsible for the device's
              operation: "fn", "adr", "tel", and "email".</c>
            </texttable>

            <t/>
          </section>

          <section title="European Telecommunications Standards Institute (ETSI)">
            <t>For the additional parameters that start with the "etsi"
            prefix, see <xref target="SectIanaParameterContents">PAWS
            Parameters Registry Initial Contents</xref> for more
            information.</t>

            <t>
              <list style="hanging">
                <t hangText="Ruleset identifier:">ETSI-EN-301-598-1.1.1</t>

                <t hangText="Specification document(s):">This ruleset refers
                to the <xref target="ETSI-EN-301-598">ETSI Harmonised
                Standard</xref> established by ETSI.</t>
              </list>
            </t>

            <t>Additional Parameter Requirements</t>

            <t>Each of the following tables defines additional parameters for
            the indicated PAWS message. Note that the Requirement column lists
            ETSI, not PAWS, requirements/optionality rules.</t>

            <figure>
              <artwork><![CDATA[
+-------------------------------------------------------------------+
| Parameter Name                                                    |
|    Type                                                           |
|    Requirement                                                    |
|    Notes                                                          |
+-------------------------------------------------------------------+
| serialNumber                                                      |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies a device's serial number (Section 5.2).              |
|                                                                   |
| manufacturerId                                                    |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies a device's manufacturer's identifier                 |
|     (Section 5.2).                                                |
|                                                                   |
| modelId                                                           |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies a device's model identifier (Section 5.2).           |
|                                                                   |
| etsiEnDeviceType                                                  |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies the device's ETSI device type (Section 9.2.2.3).     |
|                                                                   | 
| etsiEnDeviceEmissionsClass                                        |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies the device's ETSI device emissions class             |
|     (Section 9.2.2.4).                                            |
|                                                                   |
| etsiEnTechnologyId                                                |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies the device's ETSI technology ID (Section 9.2.2.5).   |
|                                                                   |
| etsiEnDeviceCategory                                              |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies the device's ETSI device category (Section 9.2.2.6). |
+-------------------------------------------------------------------+
]]></artwork>
            </figure>

            <texttable>
              <preamble>
                <xref target="SectAvailSpectrumReq">AVAIL_SPECTRUM_REQ</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>requestType</c>

              <c>string</c>

              <c>OPTIONAL</c>

              <c>Modifies the available-spectrum request type. &nbsp;If
              specified, the only valid value is, "Generic Slave", and the
              Database is required to respond with generic operating
              parameters for any Slave Device.</c>
            </texttable>

            <t/>

            <texttable>
              <preamble>
                <xref target="SectAvailSpectrumBatchReq">Available Spectrum
                Batch Request</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>requestType</c>

              <c>string</c>

              <c>OPTIONAL</c>

              <c>Modifies the available-spectrum request type. &nbsp;If
              specified, the only valid value is, "Generic Slave", and the
              Database is required to respond with generic operating
              parameters for any Slave Device.</c>
            </texttable>

            <t/>

            <t>The following tables define additional requirements for the
            <xref target="SectDeviceDesc">DeviceDescriptor</xref> and <xref
            target="SectRulesetInfo">RulesetInfo</xref> parameters that appear
            in the <xref
            target="SectAvailSpectrumResp">AVAIL_SPECTRUM_RESP</xref> and
            <xref
            target="SectAvailSpectrumBatchResp">AVAIL_SPECTRUM_BATCH_RESP</xref>
            messages. Note that this means the Database is modifying the
            DeviceDescriptor sent by the Master Device to return
            device-specific restrictions.</t>

            <figure>
              <artwork><![CDATA[
+-------------------------------------------------------------------+
| Parameter Name                                                    |
|    Type                                                           |
|    Requirement                                                    |
|    Notes                                                          |
+-------------------------------------------------------------------+
| needsSpectrumReport                                               |
|    boolean                                                        |
|    REQUIRED                                                       |
|    The Database is required to set this to true to indicate that  |
|     the device must report spectrum usage.                        |
|                                                                   |
| maxTotalBwHz                                                      |
|    float                                                          |
|    REQUIRED                                                       |
|    Specifies a constraint on total allowed bandwidth.             |
|                                                                   |
| maxContiguousBwHz                                                 |
|    float                                                          |
|    REQUIRED                                                       |
|    Specifies a constraint on total allowed contiguous             |
|     bandwidth.                                                    |
|                                                                   |
| etsiEnSimultaneousChannelOpera                                    |
|    string                                                         |
|    REQUIRED                                                       |
|    Specifies a constraint on simultaneous channel operation       |
|     (Section 9.2.2.7).  If it is not provided, the default value  |
|      is "0".                                                      |
+-------------------------------------------------------------------+
   ]]></artwork>
            </figure>

            <texttable>
              <preamble>
                <xref target="SectRulesetInfo">RulesetInfo</xref>
              </preamble>

              <ttcol>Parameter Name</ttcol>

              <ttcol>Type</ttcol>

              <ttcol>Requirement</ttcol>

              <ttcol>Notes</ttcol>

              <c>maxLocationChange</c>

              <c>float</c>

              <c>OPTIONAL</c>

              <c>Specifies a constraint on maximum location changes.</c>
            </texttable>
          </section>
        </section>
      </section>

      <section anchor="SectIanaParameters" title="PAWS Parameters Registry">
        <t>This specification establishes the "PAWS Parameters Registry".</t>

        <t>Additional parameters for inclusion in PAWS requests, responses, or
        sub-messages are registered on the advice of one or more Designated
        Experts, with <xref target="RFC5226">Specification
        Required</xref>.</t>

        <t>The Designated Expert should avoid duplication, i.e., avoid adding
        a new parameter when an existing one suffices. When a set of
        parameters is added in support of a new <xref
        target="SectIanaRuleset">ruleset</xref>, the parameters should share a
        common prefix that reflects the ruleset ID. The prefix may be omitted,
        of course, if a parameter has more general applicability. Similarly,
        when a parameter is not associated with a ruleset, the Designated
        Expert should ensure that the parameter name does not have a prefix
        that is used by existing ruleset parameters (e.g., "fcc", "etsi") or
        that is the initials of an organization that has not yet registered
        anything, but reasonably might.</t>

        <t>The PAWS Parameters Registry includes the following: 'Parameter
        name', 'Parameter usage location', and 'Specification
        document(s)'.</t>

        <section title="Registration Template">
          <t>
            <list style="hanging">
              <t hangText="Parameter name:">The name of the parameter (e.g.,
              "example").</t>

              <t hangText="Parameter usage location:">The location(s) where
              the parameter can be used. The possible locations are the named
              structures defined in <xref
              target="SectFunctionalities">"Protocol Functionalities"</xref>
              and <xref target="SectParameters">"Protocol
              Parameters"</xref>.</t>

              <t hangText="Specification document(s):">Reference to the
              document that specifies the parameter, preferably including a
              URI that can be used to retrieve a copy of the document. An
              indication of the relevant sections also may be included, but is
              not required.</t>
            </list>
          </t>
        </section>

        <section anchor="SectIanaParameterContents"
                 title="Initial Registry Contents">
          <t>The PAWS Parameters Registry enables protocol extensibility to
          support any regulatory domain and ruleset. The initial contents of
          the registry, however, include only FCC-specific and ETSI-specific
          entries, because, as of this writing, they are the only regulatory
          domains that have established rules. There is no intent to restrict
          the protocol to any particular set of authorities.</t>

          <t>The initial contents of the PAWS Parameters Registry are listed
          below; each section corresponds to a row of the registry.</t>

          <t/>

          <section anchor="SectIanaParamFccid" title="FCC ID">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">fccId</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">This document.
                Specifies the device's FCC certification identifier. A valid
                FCC ID is limited to 19 characters in the ASCII value range,
                as proposed in <xref target="FCC-Review-2012-10">FCC
                Administration Topics Review</xref>. For the purposes of the
                PAWS protocol, the maximum length of the fccId value is 32
                octets.</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamFccDeviceType" title="FCC Device Type">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">fccTvbdDeviceType</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">This document.
                Specifies the TV-band white-space device type, as defined by
                the FCC. Valid values are "FIXED", "MODE_1", and "MODE_2".</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamEtsiDeviceType"
                   title="ETSI Device Type">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">etsiEnDeviceType</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">Specifies the
                white-space device type, as defined by the <xref
                target="ETSI-EN-301-598">ETSI Harmonised Standard</xref>.
                Valid values are single-letter strings, such as "A", "B", etc.
                Consult the documentation for details about the device
                types.</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamEtsiDeviceClass"
                   title="ETSI Device Emissions Class">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">etsiEnDeviceEmissionsClass</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">Specifies the
                white-space device emissions class, as defined by the <xref
                target="ETSI-EN-301-598">ETSI Harmonised Standard</xref>, that
                characterizes the out-of-block emissions of the device. The
                values are represented by numeric strings, such as "1", "2",
                "3", etc. Consult the documentation for details about
                emissions classes.</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamEtsiTechnology"
                   title="ETSI Technology Identifier">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">etsiEnTechnologyId</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">Specifies the
                white-space device technology identifier, as defined by the
                <xref target="ETSI-EN-301-598">ETSI Harmonised
                Standard</xref>. The maximum length of the string value is 64
                octets. Consult the documentation for valid values.</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamEtsiDeviceCategory"
                   title="ETSI Device Category">
            <t>
              <list style="hanging">
                <t hangText="Parameter name:">etsiEnDeviceCategory</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectDeviceDesc">DeviceDescriptor</xref>
                </t>

                <t hangText="Specification document(s):">Specifies the
                white-space device category, as defined by the <xref
                target="ETSI-EN-301-598">ETSI Harmonised Standard</xref>.
                Valid values are the strings "master" and "slave". It is case
                insensitive.</t>
              </list>
            </t>
          </section>

          <section anchor="SectIanaParamEtsiSimul"
                   title="ETSI Simultaneous Channel Operation Restriction">
            <t>
              <list style="hanging">
                <t
                hangText="Parameter name:">etsiEnSimultaneousChannelOperationRestriction</t>

                <t hangText="Parameter usage location:">
                  <xref target="SectSpectrumSpec">SpectrumSpec</xref>
                </t>

                <t hangText="Specification document(s):">Specifies the
                constraint on the device maximum total EIRP, as defined by the
                <xref target="ETSI-EN-301-598">ETSI Harmonised
                Standard</xref>. The values are represented by numeric
                strings, such as "0", "1", etc. Consult the documentation for
                the specification of the power constraint corresponding to
                each parameter value.</t>
              </list>
            </t>
          </section>
        </section>
      </section>

      <section anchor="SectIanaError" title="PAWS Error Code Registry">
        <t>This specification establishes the "PAWS Error Code Registry".</t>

        <t>Additional error codes for inclusion in PAWS error messages are
        registered on the advice of one or more Designated Experts, with <xref
        target="RFC5226">Specification Required</xref>.</t>

        <t>Error codes are intended to be used for automated error handling by
        devices. Before approval, the Designated Expert should consider
        whether a device would handle the new error code differently from an
        existing error code, or whether the difference could be communicated
        effectively to the end-user via the "reason" parameter of the <xref
        target="SectErrorCodes">Error</xref> object.</t>

        <t>The PAWS Error Code Registry includes the following: 'Code',
        'Name', 'Description and Additional Parameters', and 'Specification
        Document(s)'.</t>

        <section title="Registration Template">
          <t>
            <list style="hanging">
              <t hangText="Code:">Integer value of the error code. The value
              MUST be an unassigned value in the range -32768 to 32767,
              inclusive.</t>

              <t hangText="Name:">Name of the error.</t>

              <t hangText="Description and Additional Parameters:">Description
              of the error and its associated parameters, if any. It also
              lists additional parameters that are returned in the data
              portion of the error (see <xref target="SectErrorCodes"/>). New
              parameters MUST be registered separately in the PAWS Parameters
              Registry, as described by <xref
              target="SectIanaParameters"/>.</t>
            </list>
          </t>
        </section>

        <section title="Initial Registry Contents">
          <t>Initial registry contents are defined in the <xref
          target="TableErrorCodes">Error Codes Table</xref>.</t>

          <t>The registry will also include the error-code categories
          describing -100s, -200s, and -300s as a note (see <xref
          target="SectErrorCodes">"Error Codes"</xref>).</t>
        </section>
      </section>
    </section>

    <section anchor="SectSecurity" title="Security Considerations">
      <t>PAWS is a protocol whereby a Master Device requests a schedule of
      available spectrum at its location (or location of its Slave Devices)
      before it (they) can operate using those frequencies. Whereas the
      information provided by the Database must be accurate and conform to the
      applicable ruleset, the Database cannot enforce, through the protocol,
      that a client device uses only the spectrum it provided. In other words,
      devices can put energy in the air and cause interference without asking
      the Database. Hence, PAWS security considerations do not include
      protection against malicious use of the white-space spectrum. For more
      detailed information on specific requirements and security
      considerations associated with PAWS, see <xref
      target="RFC6953">"Protocol to Access White-Space (PAWS) Databases: Use
      Cases and Requirements"</xref>.</t>

      <t>By using PAWS, the Master Device and the Database expose themselves
      to the following risks:<list style="symbols">
          <t>Accuracy: The Master Device receives incorrect
          spectrum-availability information.</t>

          <t>Privacy: <list style="symbols">
              <t>An unauthorized entity intercepts identifying data for the
              Master Device or its Slave Devices, such as serial number and
              location.</t>

              <t>Where Databases are required to take device registrations
              and/or maintain request logs, there could be unauthorized access
              to such information.</t>
            </list></t>
        </list></t>

      <t>Protection from these risks depends on the success of the following
      steps:</t>

      <t><list style="numbers">
          <t>The Master Device must determine the address of a proper
          Database.</t>

          <t>The Master Device must connect to the proper Database.</t>

          <t>The Database must determine or compute accurate
          spectrum-availability information.</t>

          <t>PAWS messages must be transmitted unmodified between the Database
          and the Master Device.</t>

          <t>PAWS messages must be encrypted between the Database and the
          Master Device to prevent exposing private information.</t>

          <t>For a Slave Device, the spectrum-availability information also
          must be transmitted unmodified and securely between the Master
          Device and the Slave Device.</t>

          <t>When a Listing Server is required, any attack that would prevent
          reaching a Listing Server would result in all devices relying on
          that Listing Server ceasing their use of any white space.</t>

          <t>No future extensions to PAWS can allow the return of sensitive
          information, such as device information or logs.</t>

          <t>The Database must not allow unauthorized access to device
          information and request logs and should publish and implement
          privacy policies regarding their use.</t>
        </list>Of these, only steps 1, 2, 4, 5, and 8 are within the scope of
      this document. This document addresses step 1 by allowing static
      provisioning of one or more trusted Databases; dynamic provisioning is
      out of scope. Step 3 is dependent on specific database implementations
      and rulesets and is outside the scope of this document. Step 6 requires
      a protocol between master and slave devices and is thus outside the
      scope of this document.</t>

      <t>Use of <xref target="RFC2818">"HTTP Over TLS"</xref>, assuming the
      PKI used is not compromised, ensures steps 2, 4, and 5, as detailed in
      the following sections:</t>

      <t>
        <list style="symbols">
          <t>
            <xref target="SectSecurityAuthentication">"Assurance of Proper
            Database"</xref>
          </t>

          <t>
            <xref target="SectSecurityIntegrity">"Protection against
            Modification"</xref>
          </t>

          <t>
            <xref target="SectSecurityEncryption">"Protection against
            Eavesdropping"</xref>
          </t>
        </list>
      </t>

      <t>Any specification for an alternate transport MUST define mechanisms
      that ensure each of these steps.</t>

      <t>In addition to the privacy risks described above, information
      provided in <xref target="SectDeviceDesc">DeviceDescriptor</xref> and
      <xref target="SectDeviceOwner">DeviceOwner</xref>, along with device
      location, may allow a database administrator to track the activity and
      location of a device and its user over time. Risks of secondary use of
      such tracking information, including sharing with third parties, require
      out-of-band mitigation, such as public statements or contractual terms.
      Furthermore, while it is understandable that regulators require
      DeviceOwner information for higher-power fixed white-space devices, for
      privacy concerns, regulators should not require DeviceOwner information
      for mobile devices. Similarly, regulators should require, and
      implementations should provide, device location at a level of
      granularity only as precise as necessary to support accurate database
      responses.</t>

      <section anchor="SectSecurityAuthentication"
               title="Assurance of Proper Database">
        <t>This document assumes that the Database is contacted using a domain
        name or an IP address. Using HTTP over TLS, the Database authenticates
        its identity, either as a domain name or IP address, to the Master
        Device by presenting a certificate containing that identifier as a
        "subjectAltName" (i.e., as a dNSName or IP address). If the Master
        Device has external information as to the expected identity or
        credentials of the proper Database (e.g., a certificate fingerprint),
        checks of the subjectAltName MAY be omitted. Note that in order for
        the presented certificate to be valid at the client, the client must
        be able to validate the certificate. In particular, the validation
        path of the certificate must end in one of the client's trust anchors,
        even if that trust anchor is the Database's certificate. A Master
        Device should allow for the fact that a Database can change its
        Certification Authorities (CAs) over time.</t>
      </section>

      <section anchor="SectSecurityIntegrity"
               title="Protection against Modification">
        <t>To prevent a PAWS response message from being modified en route,
        messages must be transmitted over an integrity-protected channel.
        Using HTTP over TLS, the channel will be protected by appropriate
        cipher suites.</t>
      </section>

      <section anchor="SectSecurityEncryption"
               title="Protection against Eavesdropping">
        <t>Using HTTP over TLS, messages protected by appropriate cipher
        suites are also protected from eavesdropping or otherwise unrestricted
        reading by unauthorized parties en route.</t>
      </section>

      <section title="Client Authentication Considerations ">
        <t>Although the Database can inform a device of available spectrum it
        can use, the Database cannot enforce that the Master Device uses only
        (or any of) those frequencies. Indeed, a malicious device can operate
        without ever contacting a Database. Note also that, whereas a
        malicious device may send fraudulent <xref
        target="SectSpectrumUseNotify">SPECTRUM_USE_NOTIFY</xref> messages, in
        the regulatory domains that have established rules, such notifications
        do not change the available-spectrum answers, so no harm can result
        from such messages. Consequently, client authentication is not
        required for the core PAWS (although it may be required by specific
        regulatory domains).</t>

        <t>Depending on a prior relationship between a Database and Master
        Device, the Database MAY require client authentication. TLS provides
        client authentication, but there are some considerations:</t>

        <t>
          <list style="symbols">
            <t>The Database must nominate acceptable CAs, and the Master
            Device must have a certificate rooted at one of those CAs.</t>

            <t>As indicated in Section 3.2 of <xref target="RFC2818">"HTTP
            Over TLS"</xref>, the TLS client authentication procedure only
            determines that the device has a certificate chain rooted in an
            appropriate CA (or a self-signed certificate). The Database would
            not know what the client identity ought to be, unless it has some
            external source of information. Distribution and management of
            such information, including revocation lists, are outside the
            scope of this document.</t>

            <t>Authentication schemes are secure only to the extent that
            secrets or certificates are kept secure. When there are a vast
            number of deployed devices using PAWS, the possibility that device
            keys will not leak becomes small. Implementations should consider
            how to manage the system in the eventuality that there is a
            leak.</t>
          </list>
        </t>
      </section>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.2818'?>

      <?rfc include='reference.RFC.3339'?>

      <?rfc include='reference.RFC.5077'?>

      <?rfc include='reference.RFC.5226'?>

      <?rfc include='reference.RFC.5234'?>

      <?rfc include='reference.RFC.5246'?>

      <?rfc include='reference.RFC.5491'?>

      <?rfc include='reference.RFC.6350'?>

      <?rfc include='reference.RFC.7095'?>

      <?rfc include='reference.RFC.7159'?>

      <?rfc include='reference.RFC.7231'?>

      <?rfc include='reference.RFC.7525'?>

      <reference anchor="JSON-RPC"
                 target="http://www.jsonrpc.org/specification">
        <front>
          <title>JSON-RPC 2.0 Specification</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.6953'?>

      <?rfc include='reference.RFC.7459'?>

      <reference anchor="ISO3166-1"
                 target="http://www.iso.org/iso/country_codes.htm">
        <front>
          <title>Country Codes</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="FCC-CFR47-15H"
                 target="http://www.ecfr.gov/cgi-bin/text-idx?rgn=div6&amp;view=text&amp;node=47:1.0.1.1.16.8">
        <front>
          <title>Electronic Code of Federal Regulations, Title 47, Part 15,
          Subpart H: Television Band Devices</title>

          <author>
            <organization>U. S. Government</organization>
          </author>

          <date day="6" month="December" year="2010"/>
        </front>
      </reference>

      <reference anchor="FCC-Review-2012-10"
                 target="http://transition.fcc.gov/bureaus/oet/ea/presentations/files/oct12/2b-TCB-Admin-Issues-Oct-2012-GT.pdf">
        <front>
          <title>Administration Topics Review</title>

          <author>
            <organization>Federal Communications Commission</organization>
          </author>

          <date day="9" month="October" year="2012"/>
        </front>
      </reference>

      <reference anchor="ETSI-EN-301-598"
                 target="http://www.etsi.org/deliver/etsi_en/301500_301599/301598/01.01.01_60/en_301598v010101p.pdf">
        <front>
          <title>ETSI EN 301 598 (V1.1.1): White Space Devices (WSD); Wireless
          Access Systems operating in the 470 MHz to 790 MHz TV broadcast
          band; Harmonized EN covering the essential requirements of article
          3.2 of the R&amp;TTE Directive</title>

          <author>
            <organization>European Telecommunication Standards Institute
            (ETSI)</organization>
          </author>

          <date month="April" year="2014"/>
        </front>
      </reference>

      <reference anchor="WGS-84"
                 target="http://earth&nbhy;info.nga.mil/GandG/publications/tr8350.2/tr8350_2.html">
        <front>
          <title>Department of Defense World Geodetic System 1984, Its
          Definition and Relationships with Local Geodetic Systems</title>

          <author>
            <organization>National Imagery and Mapping Agency</organization>
          </author>

          <date day="3" month="January" year="2000"/>
        </front>

        <seriesInfo name="NIMA" value="TR8350.2"/>

        <seriesInfo name="Third Edition," value="Amendment 1"/>
      </reference>
    </references>

    <section anchor="AppDBListingServer"
             title="Database Listing Server Support">
      <t>As discussed in <xref target="SecDatabaseDiscovery">"Database
      Discovery"</xref>, some regulatory domains support the preconfiguration
      of devices with the URI of a listing server, to which devices can
      connect to obtain a list of Databases certified by the regulatory
      domain. Regulatory domains may require the device to periodically
      contact the Database Listing Server to validate and/or update its list
      of certified Databases. If the device is unable to validate its list of
      certified Databases within the required period, regulatory rules may
      require the device to treat this inability as equivalent to the device
      having no available spectrum.</t>

      <t>A sample JSON response from a Database Listing Server might be
      represented as follows:</t>

      <figure>
        <artwork><![CDATA[
{
  "lastUpdateTime": "2014-06-28T10:00:00Z",
  "maxRefreshMinutes": 1440
  "dbs": [
    {
      "name": "Some Operator",
      "uris": [
        {
          "uri": "https://example.some.operator.com",
          "protocol": "paws"
        },
        ...
      ]
    },
    ...
  ]
}
 ]]></artwork>
      </figure>

      <t>The parameters in this sample message are:<list style="hanging">
          <t hangText="lastUpdateTime:">The time at which the database entries
          were last updated.</t>

          <t hangText="maxRefreshMinutes:">The maximum interval, expressed in
          minutes, that is allowed between device requests to the Database
          Listing Server.</t>

          <t hangText="dbs:">A list of entries for certified Databases, each
          containing the following<list style="hanging">
              <t hangText="name:">The name of the database operator.</t>

              <t hangText="uris:">One or more URIs for each Database, allowing
              a Database to support more than one protocol.</t>

              <t hangText="uri, protocol:">Each protocol supported by a
              certified Database is associated with a separate URI (PAWS
              protocol URI shown).</t>
            </list></t>
        </list></t>

      <t/>
    </section>

    <section numbered="no" title="Acknowledgments">
      <t>The authors gratefully acknowledge the contributions of: Gabor Bajko,
      Ray Bellis, Teco Boot, Nancy Bravin, Rex Buddenberg, Gerald Chouinard,
      Stephen Farrell, Michael Fitch, Joel M.&nbsp;Halpern, Daniel Harasty,
      Michael Head, Jussi Kahtava, Kalle Kulsmanen, Warren Kumari, Paul
      Lambert, Andy Lee, Anthony Mancuso, Basavaraj Patil, Scott Probasco,
      Brian Rosen, Andy Sago, Peter Stanforth, John Stine, and Juan Carlos
      Zuniga.</t>
    </section>

    <section anchor="SectContributors" numbered="no" title="Contributors">
      <t>This document draws heavily from draft-das-paws-protocol and
      draft-wei-paws-framework. The editor would like to specifically call out
      and thank the contributing authors of those two documents.</t>

      <figure>
        <artwork><![CDATA[
   Donald Joslyn
   Spectrum Bridge Inc.
   1064 Greenwood Blvd.
   Lake Mary, FL  32746
   United States
   EMail: d.joslyn@spectrumbridge.com


   Xinpeng Wei
   Huawei
   Phone: +86 13436822355
   EMail: weixinpeng@huawei.com
     ]]></artwork>
      </figure>
    </section>
  </back>
</rfc>
