<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.18 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-nipc-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="NIPC">An Application Layer Interface for Non-IP device control (NIPC)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-nipc-00"/>
    <author initials="B." surname="Brinckman" fullname="Bart Brinckman">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <city>Brussels</city>
          <country>Belgium</country>
        </postal>
        <email>bbrinckm@cisco.com</email>
      </address>
    </author>
    <author initials="R." surname="Mohan" fullname="Rohit Mohan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>rohitmo@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Sanford" fullname="Braeden Sanford">
      <organization>Philips</organization>
      <address>
        <postal>
          <city>Cambridge</city>
          <country>USA</country>
        </postal>
        <email>braeden.sanford@philips.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="24"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>This memo specifies RESTful application layer interface for gateways 
providing operations against non-IP devices. The described interface is
extensible. This memo initially describes Bluetooth Low Energy and 
Zigbee as they are the most commonly deployed.</t>
    </abstract>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Use cases in building management, healthcare, workplaces, manufacturing,
logistics and hospitality have introduced low-power devices into these 
environments. These devices typically do not support IP-based 
interfaces, hence there is a need for gateway functions to allow these
devices to communicate with the applications that manage them.</t>
      <figure anchor="gw">
        <name>Gateway for non-IP Devices</name>
        <artwork><![CDATA[
                                                               
    +-------------+              +---------+              +--------+
    | Application |<------------>| Gateway |<------------>| Non-IP |                     
    |    app      |   IP-based   |         |    Non-IP    | Device |
    +-------------+   Operation  +---------+   Operation  +--------+                 

]]></artwork>
      </figure>
      <t>In abscence of a standard describing how applications communicate with 
such non-IP devices, vertically integrated infrastructure prolifilates
and applications have bespoke integrations with that infrastructure for 
every use case. The Application interfaces are non-standard. This 
stunts the eco-system growth. At the same time, wireless access points 
have been deployed nearly everywhere, many of which have soft or 
separate radios that can transmit and receive different frame types,
such as <xref target="BLE53"/> and <xref target="Zigbee22"/>.  To avoid the need for parallel
infrastructure and bespoke application integration, a standardized 
gateway function is necessary.</t>
      <t>The gateway provides at a minimum the following functions:</t>
      <ul spacing="normal">
        <li>
          <t>authentication and authorization of application clients that
will access devices</t>
        </li>
        <li>
          <t>the ability to onboard devices that are intended to be deployed 
within the use case</t>
        </li>
        <li>
          <t>maintenance of an inventory of onboarded devices that are intended to
access and be accessed by the deployment and applications.</t>
        </li>
        <li>
          <t>interfaces that allow for bi-directional communication to non-IP
devices</t>
        </li>
        <li>
          <t>one or more channels to process requests, responses, and asymmetric
communciations with the non-IP radio resources (Access Points) 
in the system.</t>
        </li>
      </ul>
      <t>Combined with a provisioning interface such as
<xref target="I-D.shahzad-scim-device-model"/>, this specification supports
these aspects, specifically focusing on providing bi-directional 
communication with non-IP devices.</t>
      <figure anchor="arch">
        <name>Basic Architecture</name>
        <artwork><![CDATA[
                            +-----------------------------------+
                            |                                   |
    +-----------+   Request |  +---------+                      |
    | onboarding|------------->|  SCIM   |                      |
    |    app    |<-------------| Server  |                      |
    +-----------+  Ctrl Endpt  +---------+                      |
                            |                                   |
    +-----------+           |  +------------+  +-------+  +--+  |
    |  Control  |>...REST...|.>|            |..|  AP   |..|D |  |
    |     &     |           |  |   Gateway  |  +-------+  +--+  |
    | Telemetry |<...MQTT...|.<|            |                   |
    |    Apps   |           |  +------------+                   |
    +-----------+           |                                   |
                            |       Network Deployment          |
                            +-----------------------------------+

]]></artwork>
      </figure>
      <t><xref target="arch"/> shows us the application layer gateway (ALG), an access
point (AP), and a device (D) in the enterprise environment.  The role
of the ALG is to provide a application gateway to non-IP devices
connecting into one or more AP. Applications implementing this memo can
leverage RESTful interfaces to communicate with these devices and 
subscribe to streaming data or broadcasts levering MQTT.</t>
      <t>The flow of operations are as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>The operator of the network deployment authorizes application(s) to
perform operations on the Gateway. This happens out of band and may
be accomplished by means of exchanging tokens or public keys. 
Authorization can be role-based:<br/>
a. Authorize an onboarding application against a SCIM endpoint
supported by the gateway.<br/>
b. Provision and authorize applications that may control devices.<br/>
c. Provision and authorize applications that may receive telemetry.</t>
        </li>
        <li>
          <t>The authorized application can now provision one or more devices on
the gateway leveraging SCIM.</t>
        </li>
      </ol>
      <t>Steps 1 and 2 are not within the scope of this specification, but are
provided for context.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authorized application can perform RESTful calls to the gateway
in order to establish bi-directional communication to one or more
devices. Optionally, set up a publish/subcribe topic to receive
streaming data from a device (telemetry interface).</t>
        </li>
        <li>
          <t>Optionally, an application can receive streaming data on a pub/sub 
topic configured by the control interface (telemetry interface).</t>
        </li>
      </ol>
      <t>Step 3 and 4 are the subject of this memo.</t>
      <t>This specification is organized into three sections:</t>
      <ul spacing="normal">
        <li>
          <t>Basic non-IP control functions described in narrative.</t>
        </li>
        <li>
          <t>Extensibility of the interfaces.</t>
        </li>
        <li>
          <t>A specification that can be mapped to a publication/subscribe
interface, such as MQTT.</t>
        </li>
        <li>
          <t>Examples of use cases leveraging both BLE and Zigbee-based devices.</t>
        </li>
        <li>
          <t>OpenAPI definitions for the control interface and Protobuf definitions 
for the streaming data interface</t>
        </li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="non-ip-control-functions">
      <name>Non-IP Control Functions</name>
      <t>This section will describe a standardized protocol-agnostic interface 
that allows the application to establish bi-directional communication 
with a non-IP device, such as a BLE or Zigbee device. The interface 
will be supported on a gateway as show in <xref target="arch"/>.</t>
      <section anchor="approach">
        <name>Approach</name>
        <t>In non-IP protocols such as BLE or Zigbee, a number of basic operations
are defined that are similar across protocols. Examples of 
this are read and write data. Devices may choose to implement all of the
operations or a subset. For example in BLE a device may choose to 
implement a binding, but could also allow connection without a binding. 
In this memo we have therefore defined a control interface that exposes
these basic operations with a communications protocol-agnostic schema,
with protocol specific extensions to transmit and receive 
attributes that are specific to the communications protocol supported 
by the device. This enables extensions  to integrate new
non-ip communications protocols, without the need to update the base
schema.</t>
        <figure anchor="schema">
          <name>Extensible Schema</name>
          <artwork><![CDATA[
    ID
     - device/group attributes
        |
        |> BLE
        |     - BLE attributes
        |
        |> Zigbee
              - Zigbee attributes

]]></artwork>
        </figure>
        <t>As shown in <xref target="schema"/>, the control interface addresses device and group
objects as IDs, hence the requirement to declare a device to the gateway
before addressing a NIPC operation to the device. This is done by 
means of SCIM. A NIPC operation can either be performed against a 
device-id or a group-id. The gateway will leverage information from the 
SCIM object to execute a specific NIPC operation. For example, keying 
material found in the SCIM object may be required to connect to a
device. Please refer to <xref target="I-D.shahzad-scim-device-model"/> for more 
information on SCIM device objects.</t>
        <t>Apart from enabling bi-directional communication with non-ip devices,
NIPC also allows an application to register pub/sub topics in order to
support a programmable data streaming interface.</t>
        <section anchor="common-base-schema">
          <name>Common base schema</name>
          <t>As described, most operations are executed against a device or a group.
Control operations refer to either of these as "Object" with an ID as an
identifier. The common schema for Object is defined as follows:</t>
          <table anchor="objectdef">
            <name>Definition of an Object</name>
            <thead>
              <tr>
                <th align="left">Attribute</th>
                <th align="left">Req</th>
                <th align="left">Type</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">id</td>
                <td align="left">T</td>
                <td align="left">uuid</td>
                <td align="left">12345678-1234-5678-1234-56789abcdef4</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">T</td>
                <td align="left">enum</td>
                <td align="left">device</td>
              </tr>
              <tr>
                <td align="left">technology</td>
                <td align="left">F</td>
                <td align="left">enum</td>
                <td align="left">ble</td>
              </tr>
            </tbody>
          </table>
          <t>where-</t>
          <ul spacing="normal">
            <li>
              <t>id is the id returned in the response when registering a device 
against a SCIM server.</t>
            </li>
            <li>
              <t>type is either "group" or "device".</t>
            </li>
            <li>
              <t>technology is the radio technology extension(s) supported by the 
device, in this memo either "ble" or "zigbee".</t>
            </li>
          </ul>
        </section>
        <section anchor="protocol-extensions">
          <name>Protocol extensions</name>
          <t>An object can support one or more communications protocols. These 
attributes must be described in a protocol object, for example a "ble"
or a "zigbee" object.</t>
          <table anchor="protext">
            <name>Protocol extensions</name>
            <thead>
              <tr>
                <th align="left">Attribute</th>
                <th align="left">Req</th>
                <th align="left">Type</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">ble</td>
                <td align="left">T</td>
                <td align="left">object</td>
                <td align="left">an object with BLE-specific attributes</td>
              </tr>
              <tr>
                <td align="left">zigbee</td>
                <td align="left">T</td>
                <td align="left">object</td>
                <td align="left">an object with Zigbee-specific attributes</td>
              </tr>
            </tbody>
          </table>
          <t>where-</t>
          <ul spacing="normal">
            <li>
              <t>"ble" is an object containing attributes that are specific to the BLE
protocol.</t>
            </li>
            <li>
              <t>"zigbee" is an object containing attributes that are specific to the
Zigbee protocol.</t>
            </li>
            <li>
              <t>Other protocol extensions can be added</t>
            </li>
          </ul>
        </section>
        <section anchor="response">
          <name>Response</name>
          <t>As most operations have a common base schema, so do responses. As 
mandatory, a status is returned, optionally also device id and request 
id.</t>
          <t>Success response:</t>
          <table anchor="success">
            <name>Success response</name>
            <thead>
              <tr>
                <th align="left">Attribute</th>
                <th align="left">Req</th>
                <th align="left">Type</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">status</td>
                <td align="left">T</td>
                <td align="left">enum</td>
                <td align="left">SUCCESS</td>
              </tr>
              <tr>
                <td align="left">id</td>
                <td align="left">F</td>
                <td align="left">uuid</td>
                <td align="left">12345678-1234-5678-1234-56789abcdef4</td>
              </tr>
              <tr>
                <td align="left">requestID</td>
                <td align="left">F</td>
                <td align="left">uuid</td>
                <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
              </tr>
            </tbody>
          </table>
          <t>Failure response:</t>
          <table anchor="failure">
            <name>Failure response</name>
            <thead>
              <tr>
                <th align="left">Attribute</th>
                <th align="left">Req</th>
                <th align="left">Type</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">status</td>
                <td align="left">T</td>
                <td align="left">enum</td>
                <td align="left">SUCCESS</td>
              </tr>
              <tr>
                <td align="left">errorCode</td>
                <td align="left">T</td>
                <td align="left">int</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="left">reason</td>
                <td align="left">T</td>
                <td align="left">string</td>
                <td align="left">"Not Found"</td>
              </tr>
              <tr>
                <td align="left">requestID</td>
                <td align="left">F</td>
                <td align="left">uuid</td>
                <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
              </tr>
            </tbody>
          </table>
          <t>where-</t>
          <ul spacing="normal">
            <li>
              <t>status is the status of the request, either "SUCCESS" or "FAILURE". 
In case of failure an error code and reason are added</t>
            </li>
            <li>
              <t>id is the id the operation was executed against, found in the request</t>
            </li>
            <li>
              <t>requestID is a correlation ID that can be used for end-to-end 
tracing.</t>
            </li>
            <li>
              <t>errorCode is a numerical value representing the error</t>
            </li>
            <li>
              <t>reason is a human readable explanation of why the error occurred</t>
            </li>
          </ul>
        </section>
        <section anchor="categories-of-operations-supported">
          <name>Categories of operations supported</name>
          <t>The common operations are categorized in common categories that describe 
high level sets of functionalities. Each of the NIPC operations belong 
to a category. The categories are:</t>
          <ul spacing="normal">
            <li>
              <t>/connectivity: Allows an application to establish connectivity with
a device (if so required by the technology)</t>
            </li>
            <li>
              <t>/data: Allows applications to exchange data with a device</t>
            </li>
            <li>
              <t>/registrations: Allows an application to make registrations in the 
network, for example to register a pub/sub topic</t>
            </li>
            <li>
              <t>/extensions: This is a category of operations that leverage basic 
connectivity, data or registration operations, but are optimized for
application usage, allowing applications to perform functions with a
reduced number of round-trips. An example of this is the the bulk
operation, allowing to send multiple operations is one operation. 
This category also allows for further extensions based on the basic 
operations.</t>
            </li>
          </ul>
        </section>
        <section anchor="connecting-to-the-non-ip-control-interface">
          <name>Connecting to the Non-IP Control Interface</name>
          <t>NIPC makes use of RESTful HTTP<xref target="RFC9114"/>.  The connection endpoint is
provided out of band, most likely through the SCIM devices model 
extension, in which an authorized application can be registered for a
SCIM object. Similarly authentication of the interface can be specified
using that SCIM interface. It may be based on a device certificate or 
an authorization token.</t>
        </section>
      </section>
      <section anchor="connectivity">
        <name>Connectivity</name>
        <t>/connectivity</t>
        <t>Connectivity elements are elements that allow operations that establish
or tear down associations &amp; connectivity with devices. They also allow
discovery of services that can be accessed during the connection.</t>
        <section anchor="binding">
          <name>Binding</name>
          <t>/connectivity/binding</t>
          <t>The binding element allows an application to request a binding or 
association to a device.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Create binding: POST</t>
            </li>
            <li>
              <t>Return active bindings: GET</t>
            </li>
            <li>
              <t>Delete binding: DELETE</t>
            </li>
          </ul>
          <section anchor="create-a-binding">
            <name>Create a Binding</name>
            <t>Method: POST /connectivity/binding</t>
            <t>Description: Creates a binding with a device</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/></t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="return-active-bindings">
            <name>Return active bindings</name>
            <t>Method: GET /connectivity/binding</t>
            <t>Description: Returns one or more bindings, based on ids provided in
parameters (none = return all)</t>
            <t>Parameters: 
One of following options:
 - None: return all bindings this application made
 - single id: return binding for this id
 - comma separated ids: return bindings for multiple ids</t>
            <t>Response: An Array of bindings with contents as  shown in
<xref target="bindingresponse"/> below or <xref target="failure"/> for failed responses.</t>
            <table anchor="bindingresponse">
              <name>Binding response</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">status</td>
                  <td align="left">T</td>
                  <td align="left">enum</td>
                  <td align="left">SUCCESS</td>
                </tr>
                <tr>
                  <td align="left">requestID</td>
                  <td align="left">F</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">bindings</td>
                  <td align="left">T</td>
                  <td align="left">array</td>
                  <td align="left">Array of BLE or Zigbee ids</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="delete-a-binding">
            <name>Delete a binding</name>
            <t>Method: DELETE /connectivity/binding</t>
            <t>Description: Delete one or more bindings, based on ids provided in
parameters</t>
            <t>Parameters: 
One of following options:
 - None: delete all bindings this application made
 - single id: delete binding for this id
 - comma separated ids: delete bindings for multiple ids</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="binding-by-id">
          <name>Binding by id</name>
          <t>/connectivity/binding//id/{id}</t>
          <t>The binding by id element allows an application to request a binding or 
association to a device by id, which provides a simpler interface than 
standard binding element, but pertains to a single device only.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Create binding by id: POST</t>
            </li>
            <li>
              <t>Return active binding by id: GET</t>
            </li>
            <li>
              <t>Delete binding by id: DELETE</t>
            </li>
          </ul>
          <section anchor="create-a-binding-by-id">
            <name>Create a Binding by id</name>
            <t>Method: POST /connectivity/binding/id/{id}</t>
            <t>Description: Creates a binding by id</t>
            <t>Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="return-active-binding-by-id">
            <name>Return active binding by id</name>
            <t>Method: GET /connectivity/binding//id/{id}</t>
            <t>Description: Returns a binding by id 
Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed 
responses.</t>
          </section>
          <section anchor="delete-binding-by-id">
            <name>Delete binding by id</name>
            <t>Method: DELETE /connectivity/binding/id/{id}</t>
            <t>Description: Delete a binding by id</t>
            <t>Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="connection">
          <name>Connection</name>
          <t>/connectivity/connection</t>
          <t>The connection element allows an application to request to connect to 
a device.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Connect to a device: POST</t>
            </li>
            <li>
              <t>Return active connections: GET</t>
            </li>
            <li>
              <t>Disconnect a device: DELETE</t>
            </li>
          </ul>
          <section anchor="connect-to-a-device">
            <name>Connect to a device</name>
            <t>Method: POST /connectivity/connection</t>
            <t>Description: Connect to a device</t>
            <t>Parameters: None</t>
            <t>Request Body: 
 - an Object, as defined in <xref target="objectdef"/> 
 - optionally a set of services to be discovered. These are supplied
   in protocol-specific extensions, as defined in <xref target="protext"/>.
   In the case of BLE, service discovery is performed when connecting to
   a device. Optionally, service discovery may be limited to services 
   defined in the "ble" protocol extension. The services to be 
   discovered can be added in an array, as well as optional caching 
   parameters. Please see table below <xref target="servdisc"/> for a definition of
   the content of the BLE protocol extension for limited service 
   discovery</t>
            <table anchor="servdisc">
              <name>Service Discovery</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">services</td>
                  <td align="left">T</td>
                  <td align="left">array</td>
                  <td align="left">Array of serviceIDs to be discovered</td>
                </tr>
                <tr>
                  <td align="left">cached</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">no</td>
                </tr>
                <tr>
                  <td align="left">cacheIdlePurge</td>
                  <td align="left">F</td>
                  <td align="left">int</td>
                  <td align="left">3600</td>
                </tr>
                <tr>
                  <td align="left">autoUpdate</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">yes</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>"services" is an array of services defined by their serviceIDs.</t>
              </li>
              <li>
                <t>"cached" refers to whether the services need to be cached for 
subsequent connects, in order not to perform service discovery on
each request.</t>
              </li>
              <li>
                <t>"cacheIdlepurge" defines how long the cache should be maintained 
before purging</t>
              </li>
              <li>
                <t>some devices support notifications on changes in services, 
"autoUpdate" allows the network to update services based on 
notification (on by default)</t>
              </li>
            </ul>
            <t>Response: Success responses include standard success response attributes
as defined in <xref target="success"/> and also include cwan array of supported 
services. This array of supported services in turn contains an array of 
charateristics, which in turn contains an array of descriptors, as shown 
<xref target="services"/>. For a description of the attributes found in this array, 
please refer to <xref target="servresp"/> below. Please refer to <xref target="failure"/> for 
failed responses.</t>
            <figure anchor="services">
              <name>Services</name>
              <artwork><![CDATA[
    services
     - serviceID
        |
        |> characteristics
            - charactericID
            - flags
               |
               |> Descriptors
                   - descriptorID
]]></artwork>
            </figure>
            <t>Attributes in the array of services:</t>
            <table anchor="servresp">
              <name>Service Discovery Response Attributes</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">serviceID</td>
                  <td align="left">F</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">characteristicID</td>
                  <td align="left">F</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">flags</td>
                  <td align="left">F</td>
                  <td align="left">enum</td>
                  <td align="left">write</td>
                </tr>
                <tr>
                  <td align="left">descriptorID</td>
                  <td align="left">F</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="return-active-connections">
            <name>Return active connections</name>
            <t>Method: GET /connectivity/connection</t>
            <t>Description: Returns one or more active connections, based on ids 
provided in parameters (none = return all).</t>
            <t>Parameters: 
One of following options:
 - None: return all active connections for this application 
 - single id: return connection status for this id
 - comma separated ids: return connection status for multiple ids</t>
            <t>Response: An Array of connections with attributes as defined in 
<xref target="connresponse"/> or in case of a failed response, the attributes in 
<xref target="failure"/>.</t>
            <table anchor="connresponse">
              <name>Connection response</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">status</td>
                  <td align="left">T</td>
                  <td align="left">enum</td>
                  <td align="left">SUCCESS</td>
                </tr>
                <tr>
                  <td align="left">requestID</td>
                  <td align="left">F</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">connections</td>
                  <td align="left">T</td>
                  <td align="left">array</td>
                  <td align="left">Array of connections</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="disconnect-a-device">
            <name>Disconnect a device</name>
            <t>Method: DELETE /connectivity/connection</t>
            <t>Description: Disconnect one or more devices, based on ids provided in
parameters</t>
            <t>Parameters: 
One of following options:
 - None: Disconnect all devices for connections this application made
 - single id: disconnect device with id
 - comma separated ids: disconnect multiple devices with ids</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="connections-by-id">
          <name>Connections by id</name>
          <t>/connectivity/connection/id/{id}</t>
          <t>The connection by id element allows an application to request a
connection to a device by id, which provides a simpler interface than 
standard connection element, but pertains to a single device only.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Connect device by id: POST</t>
            </li>
            <li>
              <t>Return connection state by id: GET</t>
            </li>
            <li>
              <t>Disconnect device by id: DELETE</t>
            </li>
          </ul>
          <section anchor="connect-device-by-id">
            <name>Connect device by id</name>
            <t>Method: POST /connectivity/connection/id/{id}</t>
            <t>Description: Creates a connection by id</t>
            <t>Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="return-connection-state-by-id">
            <name>Return connection state by id</name>
            <t>Method: GET /connectivity/connection/id/{id}</t>
            <t>Description: Returns connection state by id 
Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="delete-connection-by-id">
            <name>Delete connection by id</name>
            <t>Method: DELETE /connectivity/connection/id/{id}</t>
            <t>Description: Delete a binding by id</t>
            <t>Parameters: id</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="discover-services-supported-by-a-device">
          <name>Discover services supported by a device</name>
          <t>/connectivity/services</t>
          <t>The services element allows an application to request a service 
discovery for a device, possibly to update a cache</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Discover services: GET</t>
            </li>
          </ul>
          <section anchor="discover-services-supported-by-a-device-1">
            <name>Discover services supported by a device</name>
            <t>Method: GET /connectivity/service</t>
            <t>Description: Discover services supported by a device, this updates 
cache in case services caching is enabled for a connection.</t>
            <t>Parameters: an Object as defined in <xref target="objectdef"/>  and optionally a set
of services to be discovered in case not all services should be
discovered. These services need to be provided in protocol-specific 
extensions as defined in <xref target="protext"/>. The services to be discovered can
be added in this extension in an array, as well as optional caching
parameters, as described in <xref target="servdisc"/>.</t>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with an array of supported services characteristics and 
descriptors, as shown in <xref target="services"/>, with attributes defined in 
<xref target="servresp"/>. 
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
        </section>
        <section anchor="discover-services-supported-by-a-device-by-id">
          <name>Discover services supported by a device by id</name>
          <t>/connectivity/services/id/{id}</t>
          <t>The services element allows an application to request a service 
discovery for a device by id, possibly to update a cache</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Discover services by id: GET</t>
            </li>
          </ul>
          <section anchor="discover-services-supported-by-a-device-by-id-1">
            <name>Discover services supported by a device by id</name>
            <t>Method: GET /connectivity/service/id/{id}</t>
            <t>Description: Discover services supported by a device, this updates 
cache in case services caching is enabled for a connection. This method
does not support partial service discovery, all services are discovered.</t>
            <t>Parameters: an Object id</t>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with an array of supported services, characteristics and 
descriptors, as shown in <xref target="services"/>, with attributes defined in 
<xref target="servresp"/>. 
Failure Response is the standard response as defined in <xref target="failure"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="data">
        <name>Data</name>
        <t>/data</t>
        <t>Data elements are elements that allow operations to exchange data with
a device. This could be reading or writing attributes or enabling 
streaming data.</t>
        <section anchor="attribute">
          <name>Attribute</name>
          <t>/data/attribute</t>
          <t>The attribute element allows an application get an attribute value,
write, update or delete a value.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Write value: POST</t>
            </li>
            <li>
              <t>Update value: PUT</t>
            </li>
            <li>
              <t>Read value: GET</t>
            </li>
            <li>
              <t>Delete value: DELETE</t>
            </li>
          </ul>
          <section anchor="writing-a-value">
            <name>Writing a value</name>
            <t>Method: POST /data/attribute</t>
            <t>Description: Writes a value to an attribute</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/>, a value to be 
written, as defined in <xref target="value"/> below and an attribute definition in
a protocol extension from <xref target="protext"/>. The protocol extension for BLE
is defined in <xref target="bleattr"/> below. The protocol extension for Zigbee is 
defined in <xref target="zigbeeattr"/> below.</t>
            <table anchor="value">
              <name>Value</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">value</td>
                  <td align="left">T</td>
                  <td align="left">array</td>
                  <td align="left">100</td>
                </tr>
                <tr>
                  <td align="left">forcedResponse</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">no</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>value is the value to be written</t>
              </li>
              <li>
                <t>forcedresponse requests a specific response behavior of the device</t>
              </li>
            </ul>
            <t>Contents of the BLE protocol extension defining an attribute:</t>
            <table anchor="bleattr">
              <name>BLE Attribute</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">serviceID</td>
                  <td align="left">T</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">characteristicID</td>
                  <td align="left">T</td>
                  <td align="left">uuid</td>
                  <td align="left">abcd0987-1234-5678-1234-56789abcdef4</td>
                </tr>
                <tr>
                  <td align="left">long</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">no</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>serviceID defines the Service</t>
              </li>
              <li>
                <t>characteristic ID defines the service characteristic</t>
              </li>
              <li>
                <t>long is an optional attribute that allows to force a write type</t>
              </li>
            </ul>
            <t>Contents of the Zigbee protocol extension defining an attribute:</t>
            <table anchor="zigbeeattr">
              <name>Zigbee Attribute</name>
              <thead>
                <tr>
                  <th align="left"> </th>
                  <th align="left">endpointID</th>
                  <th align="left">T</th>
                  <th align="left">int</th>
                  <th align="left">16</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left"> </td>
                  <td align="left">clusterID</td>
                  <td align="left">T</td>
                  <td align="left">int</td>
                  <td align="left">6</td>
                </tr>
                <tr>
                  <td align="left"> </td>
                  <td align="left">attributeID</td>
                  <td align="left">T</td>
                  <td align="left">int</td>
                  <td align="left">12</td>
                </tr>
                <tr>
                  <td align="left"> </td>
                  <td align="left">type</td>
                  <td align="left">T</td>
                  <td align="left">int</td>
                  <td align="left">1</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>endpointID defines the Zigbee endpoint that contains a cluster of 
attributes</t>
              </li>
              <li>
                <t>clusterID defines the Zigbee cluster that contains the attribute</t>
              </li>
              <li>
                <t>attributeID defines the Zigbee attribute</t>
              </li>
              <li>
                <t>type defines the Zigbee attribute type</t>
              </li>
            </ul>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with optionally the value written as shown in <xref target="value"/>.
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
          <section anchor="updating-a-value">
            <name>Updating a value</name>
            <t>Method: PUT /data/attribute</t>
            <t>Description: Updates a value to an attribute</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/>, a value to be 
written, as defined in <xref target="value"/> and an attribute definition in
a protocol extension from <xref target="protext"/>. The protocol extension for BLE
is defined in <xref target="bleattr"/>. The protocol extension for Zigbee is 
defined in <xref target="zigbeeattr"/>.</t>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with optionally the value written as shown in <xref target="value"/>.
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
          <section anchor="read-an-attribute">
            <name>Read an attribute</name>
            <t>Method: GET /data/attribute</t>
            <t>Description: Reads an attribute from a device</t>
            <t>Parameters: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension for
Zigbee is defined in <xref target="zigbeeattr"/>.</t>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with the value read as shown in <xref target="value"/>.
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
          <section anchor="clear-the-value-from-an-attribute">
            <name>clear the value from an attribute</name>
            <t>Method: DELETE /data/attribute</t>
            <t>Description: Clear the value from an attribute of a device</t>
            <t>Parameters: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension for
Zigbee is defined in <xref target="zigbeeattr"/>.</t>
            <t>Response: A successful response will contain success attributes from 
<xref target="success"/> with the optionally the value as null as shown in <xref target="value"/>.
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
        </section>
        <section anchor="subscription">
          <name>Subscription</name>
          <t>/data/subscription</t>
          <t>The subscription element allows an application to ask a device to start
streaming data attached to a certain attribute.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Start a subscription data stream: POST</t>
            </li>
            <li>
              <t>Update a subscription data stream value: PUT</t>
            </li>
            <li>
              <t>Get status of a subscription data stream: GET</t>
            </li>
            <li>
              <t>Stop a subscription data stream: DELETE</t>
            </li>
          </ul>
          <section anchor="starting-a-subscription-data-stream">
            <name>Starting a subscription data stream</name>
            <t>Method: POST /data/subscription</t>
            <t>Description: Start a subcription data stream pertaining to a specific 
attribute</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension 
for Zigbee is defined in <xref target="zigbeeattr"/>. Optionally a pub/sub topic can
be included in the request as defined in <xref target="topic"/> below. Including a
topic allows the app to skip the topic registration process.</t>
            <t>Topic attributes:</t>
            <table anchor="topic">
              <name>Topic</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">topic</td>
                  <td align="left">F</td>
                  <td align="left">string</td>
                  <td align="left">"enterprise/hospital/pulse"</td>
                </tr>
                <tr>
                  <td align="left">dataFormat</td>
                  <td align="left">F</td>
                  <td align="left">enum</td>
                  <td align="left">"default"</td>
                </tr>
                <tr>
                  <td align="left">replay</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">no</td>
                </tr>
                <tr>
                  <td align="left">forced_ack</td>
                  <td align="left">F</td>
                  <td align="left">boolean</td>
                  <td align="left">no</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>topic is the pub/sub topic the subscription can be consumed on</t>
              </li>
              <li>
                <t>dataFormat is the data format in which the pub/sub topic is delivered</t>
              </li>
              <li>
                <t>replay is a boolean which defines whether data should be replayed in 
case of application disconnection</t>
              </li>
              <li>
                <t>forced ack ignores the attribute definition and forces packet ack
behavior to the device</t>
              </li>
            </ul>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="updating-a-subscription-data-stream">
            <name>Updating a subscription data stream</name>
            <t>Method: PUT /data/subscription</t>
            <t>Description: Update parameters of a subscription data stream pertaining
to a specific attribute</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension 
for Zigbee is defined in <xref target="zigbeeattr"/>. Optionally a pub/sub topic can
be included in the request as defined in <xref target="topic"/>.</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="get-status-of-a-subscription-data-stream">
            <name>Get status of a subscription data stream</name>
            <t>Method: GET /data/subscription</t>
            <t>Description: Gets the status of a subscription data stream, success if
active, failure if not active</t>
            <t>Parameters: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension 
for Zigbee is defined in <xref target="zigbeeattr"/>. Optionally a pub/sub topic can
be included in the request as defined in <xref target="topic"/>.</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="stop-a-subscription-data-stream">
            <name>stop a subscription data stream</name>
            <t>Method: DELETE /data/subscription</t>
            <t>Description: stops a subscription data stream</t>
            <t>Parameters: an Object as defined in <xref target="objectdef"/> and an attribute 
definition in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE is defined in <xref target="bleattr"/>. The protocol extension 
for Zigbee is defined in <xref target="zigbeeattr"/>. Optionally a pub/sub topic can
be included in the request as defined in <xref target="topic"/>.</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="subscriptions-by-id">
          <name>Subscriptions by id</name>
          <t>/data/subscription/id/{id}</t>
          <t>The subscription by id element allows an application to operate on all
subscriptions of a specific id.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Return active subscriptions by id: GET</t>
            </li>
            <li>
              <t>Terminate all subscriptions of an id: DELETE</t>
            </li>
          </ul>
          <section anchor="return-active-subscriptions-by-id">
            <name>Return active subscriptions by id</name>
            <t>Method: GET /data/subscription/id/{id}</t>
            <t>Description: Returns connection state by id</t>
            <t>Parameters: id</t>
            <t>Response: Success response as defines in <xref target="success"/> and an object 
called "subscriptions" which contains an Array of active subscriptions.
Each of these include an object as defined in <xref target="objectdef"/> and a 
subscription attribute definition in a protocolextension from 
<xref target="protext"/>. The protocol extension for BLE is defined in <xref target="bleattr"/>. 
The protocol extension for Zigbee is defined in <xref target="zigbeeattr"/>. 
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
          <section anchor="stop-active-subscriptions-by-id">
            <name>Stop active subscriptions by id</name>
            <t>Method: DELETE /data/subscription/id/{id}</t>
            <t>Description: Delete active subscriptions for an id</t>
            <t>Parameters: id</t>
            <t>Response: Success response as defines in <xref target="success"/> and an object 
called "subscriptions" which contains an Array of active subscriptions.
Each of these include an object as defined in <xref target="objectdef"/> and a 
subscription attribute definition in a protocolextension from 
<xref target="protext"/>. The protocol extension for BLE is defined in <xref target="bleattr"/>. 
The protocol extension for Zigbee is defined in <xref target="zigbeeattr"/>. 
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
        </section>
        <section anchor="subscriptions-by-topic">
          <name>Subscriptions by topic</name>
          <t>/data/subscription/topic/{topic}</t>
          <t>The subscription by topic element allows an application to operate on
all subscriptions of a specific topic.</t>
          <t>Operations: 
 - Return active subscriptions by topic: GET
 - Terminate all subscriptions active on a topic: DELETE</t>
          <section anchor="return-active-subscriptions-by-topic">
            <name>Return active subscriptions by topic</name>
            <t>Method: GET /data/subscription/topic/{topic}</t>
            <t>Description: Returns connection state by topic</t>
            <t>Parameters: topic</t>
            <t>Response: Success response as defines in <xref target="success"/> and an object 
called "subscriptions" which contains an Array of active subscriptions.
Each of these include an object as defined in <xref target="objectdef"/> and a 
subscription attribute definition in a protocolextension from 
<xref target="protext"/>. The protocol extension for BLE is defined in <xref target="bleattr"/>. 
The protocol extension for Zigbee is defined in <xref target="zigbeeattr"/>. 
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
          <section anchor="stop-active-subscriptions-by-topic">
            <name>Stop active subscriptions by topic</name>
            <t>Method: DELETE /data/subscription/topic/{topic}</t>
            <t>Description: Delete all active subscriptions for a topic</t>
            <t>Parameters: topic</t>
            <t>Response: Success response as defines in <xref target="success"/> and an object 
called "subscriptions" which contains an Array of active subscriptions.
Each of these include an object as defined in <xref target="objectdef"/> and a 
subscription attribute definition in a protocolextension from 
<xref target="protext"/>. The protocol extension for BLE is defined in <xref target="bleattr"/>. 
The protocol extension for Zigbee is defined in <xref target="zigbeeattr"/>. 
Failure Response is the standard response as defined in <xref target="failure"/></t>
          </section>
        </section>
        <section anchor="broadcast">
          <name>Broadcast</name>
          <t>/data/broadcast</t>
          <t>The broadcast element allows an application to broadcast a message to a
specific device. Note that broadcasts can be heard by other devices on 
the same L2 network.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Broadcast message: POST</t>
            </li>
          </ul>
          <section anchor="broadcasting-a-message">
            <name>Broadcasting a message</name>
            <t>Method: POST /data/broadcast</t>
            <t>Description: Broadcasts a message to a device</t>
            <t>Parameters: None</t>
            <t>Request Body: an Object as defined in <xref target="objectdef"/> along with broadcast
parameters, defined below in <xref target="broadcastparams"/>. Defining broadcast 
attributes is mandatory and is done by adding an array of broadcast 
attributes in a protocol extension from <xref target="protext"/>. The protocol 
extension for BLE broadcasts is defined in <xref target="blebcastattr"/> below.</t>
            <t>Broadcast parameters:</t>
            <table anchor="broadcastparams">
              <name>Broadcast parameters</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">cycle</td>
                  <td align="left">T</td>
                  <td align="left">enum</td>
                  <td align="left">single</td>
                </tr>
                <tr>
                  <td align="left">broadcastTime</td>
                  <td align="left">F</td>
                  <td align="left">int</td>
                  <td align="left">30</td>
                </tr>
                <tr>
                  <td align="left">broadcastInterval</td>
                  <td align="left">F</td>
                  <td align="left">int</td>
                  <td align="left">5</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>cycle determines the repetitiveness of the broadcast, and is either
single or repeat</t>
              </li>
              <li>
                <t>broadcastTime is the maximum time in seconds the broadcast should 
run</t>
              </li>
              <li>
                <t>broadcastInterval is the time between broadcasts in seconds</t>
              </li>
            </ul>
            <t>Protocol-specific extensions are supplied to identify the attributes to 
be broadcasted.</t>
            <table anchor="blebcastattr">
              <name>BLE Broadcast Attribute</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">adType</td>
                  <td align="left">T</td>
                  <td align="left">byte</td>
                  <td align="left">ff</td>
                </tr>
                <tr>
                  <td align="left">adData</td>
                  <td align="left">T</td>
                  <td align="left">byte</td>
                  <td align="left">4c00</td>
                </tr>
              </tbody>
            </table>
            <t>where-</t>
            <ul spacing="normal">
              <li>
                <t>adType is the BLE advertisement attribute type</t>
              </li>
              <li>
                <t>adData is the BLE advertisement attribute data</t>
              </li>
            </ul>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
      </section>
      <section anchor="registrations">
        <name>Registrations</name>
        <t>/registation</t>
        <t>Registration elements are elements that do not directly execute
operations on devices but register attributes on the gateway that
support operations, such attributes are topics for data streaming and
files to write files.</t>
        <section anchor="topic-registration">
          <name>Topic registration</name>
          <t>/registration/topic</t>
          <t>The topic registration element allows an application to register a pub/
sub topic for the data interface. By activating a subscription on one 
or more device(s), the application can then publish streaming data to 
that topic.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Register a topic: POST</t>
            </li>
            <li>
              <t>Update a topic: PUT</t>
            </li>
            <li>
              <t>Get configuration of one or more topics: GET</t>
            </li>
            <li>
              <t>Delete a topic: DELETE</t>
            </li>
          </ul>
          <section anchor="registering-a-topic">
            <name>Registering a topic</name>
            <t>Method: POST /registration/topic</t>
            <t>Description: Register a pub/sub topic</t>
            <t>Parameters: None</t>
            <t>Request Body: A topic, including data apps that can subscribe to the 
topic as defined in <xref target="topic"/> and protocol-specific extensions as per 
<xref target="protext"/> that describe the attributes that will be reported on the
topic. In the case of BLE, these are either BLE subscription attributes
as in <xref target="bleattr"/>, device connection status, or Broadcast 
(advertisement) data as in <xref target="blebcastattr"/>.
For Zigbee, these are Zigbee attributes as described in <xref target="zigbeeattr"/>.</t>
            <t>Response: See <xref target="success"/> with a topic name as in <xref target="topicname"/> below 
for success, and <xref target="failure"/> for failed responses.</t>
            <t>Topic name that was registered:</t>
            <table anchor="topicname">
              <name>Topic Name</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">topic</td>
                  <td align="left">T</td>
                  <td align="left">string</td>
                  <td align="left">"enterprise/hospital/pulse"</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="updating-a-topic">
            <name>Updating a topic</name>
            <t>Method: PUT /registration/topic</t>
            <t>Description: Update a pub/sub topic</t>
            <t>Parameters: None</t>
            <t>Request Body: A topic, including data apps that can subscribe to the 
topic as defined in <xref target="topic"/> and protocol-specific extensions as per 
<xref target="protext"/> that describe the attributes that will be reported on the
topic. In the case of BLE, these are either BLE subscription attributes
as in <xref target="bleattr"/>, device connection status, or Broadcast 
(advertisement) data as in <xref target="blebcastattr"/>.
For Zigbee, these are Zigbee attributes as described in <xref target="zigbeeattr"/>.</t>
            <t>Response: See <xref target="success"/> with a topic name as in <xref target="topicname"/> below 
for success, and <xref target="failure"/> for failed responses.</t>
          </section>
          <section anchor="get-configuration-of-one-or-more-topics">
            <name>Get configuration of one or more topics</name>
            <t>Method: GET /registration/topic</t>
            <t>Description: Gets the configuration of one or more topics</t>
            <t>Parameters: A topic name. Multiple topics can be added by 
comma-separated attributes.</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
          <section anchor="delete-one-or-more-topics">
            <name>Delete one or more topics</name>
            <t>Method: DELETE /registration/topic</t>
            <t>Description: Delete one or more topics</t>
            <t>Parameters: A topic name. Multiple topics can be added by 
comma-separated attributes.</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
        </section>
        <section anchor="topic-registrations-by-id">
          <name>Topic registrations by id</name>
          <t>/registration/topic/id/{id}</t>
          <t>The topic registration by id element allows an application to get or 
delete topic registrations for a specific id.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Return active topics by id: GET</t>
            </li>
            <li>
              <t>Delete all topics for an id: DELETE</t>
            </li>
          </ul>
          <section anchor="return-active-topics-by-id">
            <name>Return active topics by id</name>
            <t>Method: GET /registration/topic/id/{id}</t>
            <t>Description: Returns active topics by id</t>
            <t>Parameters: id</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
          <section anchor="delete-active-topics-by-id">
            <name>Delete active topics by id</name>
            <t>Method: DELETE /registration/topic/id/{id}</t>
            <t>Description: Deletes active topics by id, will delete all topics that
are associated with a specific object id.</t>
            <t>Parameters: id</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
        </section>
        <section anchor="topic-registrations-by-data-app">
          <name>Topic registrations by data app</name>
          <t>/registration/topic/data-app/{data-app}</t>
          <t>The topic registration by data-app element allows an application to get
or delete topic registrations for which a specific data-application is
registered.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Return active topics by data-app: GET</t>
            </li>
            <li>
              <t>Delete all topics for an data-app: DELETE</t>
            </li>
          </ul>
          <section anchor="return-active-topics-by-data-app">
            <name>Return active topics by data-app</name>
            <t>Method: GET /registration/topic/data-app/{data-app}</t>
            <t>Description: Returns active topics by data-app</t>
            <t>Parameters: data-app</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
          <section anchor="delete-active-topics-by-data-app">
            <name>Delete active topics by data-app</name>
            <t>Method: DELETE /registration/topic/data-app/{data-app}</t>
            <t>Description: Deletes active topics by data-app, will delete all topics
the specified data app is registered for.</t>
            <t>Parameters: data-app</t>
            <t>Response: A success response as in <xref target="success"/> with a "topics" object
containing an array of returned topics names with attribute defined in
<xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
        </section>
        <section anchor="topic-registrations-by-topic-name">
          <name>Topic registrations by topic name</name>
          <t>/registration/topic/{topic}</t>
          <t>The topic registration by topic element allows an application to get or 
delete a topic registration by topic name.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Return active topics by topic name: GET</t>
            </li>
            <li>
              <t>Delete all topics for a topic name: DELETE</t>
            </li>
          </ul>
          <section anchor="return-active-topics-by-topic-name">
            <name>Return active topics by topic name</name>
            <t>Method: GET /registration/topic/{topic}</t>
            <t>Description: Returns active topics by topic name</t>
            <t>Parameters: topic</t>
            <t>Response: A success response as in <xref target="success"/> with a topic name as 
defined in <xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
          <section anchor="delete-active-topics-by-topic-name">
            <name>Delete active topics by topic name</name>
            <t>Method: DELETE /registration/topic/{topic}</t>
            <t>Description: Deletes active topics by topic name</t>
            <t>Parameters: topic</t>
            <t>Response: A success response as in <xref target="success"/> with a topic name as 
defined in <xref target="topicname"/>.
For failed responses see <xref target="failure"/>.</t>
          </section>
        </section>
        <section anchor="file-registration">
          <name>File registration</name>
          <t>/registration/file</t>
          <t>The file registration element allows an application to register a file.
a file can be used in operations to devices (such as an attribute)</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Register a file: POST</t>
            </li>
            <li>
              <t>Update a file: PUT</t>
            </li>
            <li>
              <t>Check if a file exists: GET</t>
            </li>
            <li>
              <t>Delete a file: DELETE</t>
            </li>
          </ul>
          <section anchor="registering-a-file">
            <name>Registering a file</name>
            <t>Method: POST /registration/file</t>
            <t>Description: Register a file</t>
            <t>Parameters: None</t>
            <t>Request Body: a file or URL point to a file, as described in <xref target="file"/>
below.</t>
            <t>File definition:</t>
            <table anchor="file">
              <name>File</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">filename</td>
                  <td align="left">T</td>
                  <td align="left">string</td>
                  <td align="left">"firmware.dat"</td>
                </tr>
                <tr>
                  <td align="left">file</td>
                  <td align="left">F</td>
                  <td align="left">binary</td>
                  <td align="left">file</td>
                </tr>
                <tr>
                  <td align="left">bindings</td>
                  <td align="left">F</td>
                  <td align="left">string</td>
                  <td align="left">"https://domain.com/firmware.dat"</td>
                </tr>
              </tbody>
            </table>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="updating-a-file">
            <name>Updating a file</name>
            <t>Method: PUT /registration/file</t>
            <t>Description: Update a file</t>
            <t>Parameters: None</t>
            <t>Request Body: a file or URL point to a file, as described in <xref target="file"/>
below.</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
          <section anchor="check-presence-of-a-registered-file">
            <name>check presence of a registered file</name>
            <t>Method: GET /registration/file</t>
            <t>Description: Check the presence of a specific file or get all files if
no file name os present in parameters</t>
            <t>Parameters: filename</t>
            <t>Response: Success as in <xref target="success"/> including a "filesnames" object with
an array of file names as shown in <xref target="filename"/> or a Failure Response
as described in <xref target="failure"/>.</t>
            <t>A filenames object with an Array of file names:</t>
            <table anchor="filename">
              <name>File name</name>
              <thead>
                <tr>
                  <th align="left">Attribute</th>
                  <th align="left">Req</th>
                  <th align="left">Type</th>
                  <th align="left">Example</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">filename</td>
                  <td align="left">T</td>
                  <td align="left">string</td>
                  <td align="left">"firmware.dat"</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="delete-a-registered-file">
            <name>delete a registered file</name>
            <t>Method: DELETE /registration/file</t>
            <t>Description: Delete a registered file</t>
            <t>Parameters: filename</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
        <section anchor="file-registrations-by-file-name">
          <name>file registrations by file name</name>
          <t>/registration/file/{filename}</t>
          <t>The file registration by file name element allows an application to get
or delete file registrations by file name.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Return file registrations by file name: GET</t>
            </li>
            <li>
              <t>Delete file registrations by file name: DELETE</t>
            </li>
          </ul>
          <section anchor="return-file-registrations-by-file-name">
            <name>Return file registrations by file name</name>
            <t>Method: GET /registration/file/{filename}</t>
            <t>Description: Checks the presence of a file and returns its name</t>
            <t>Parameters: filename</t>
            <t>Response: Success as in <xref target="success"/> including a file name as shown in
<xref target="filename"/> or a Failure Response as described in <xref target="failure"/>.</t>
          </section>
          <section anchor="delete-file-registrations-by-file-name">
            <name>Delete file registrations by file name</name>
            <t>Method: DELETE /registration/file/{filename}</t>
            <t>Description: Delete file registrations by file name</t>
            <t>Parameters: filename</t>
            <t>Response: See <xref target="success"/> for success, and <xref target="failure"/> for failed
responses.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="nipc-extensibility">
      <name>NIPC Extensibility</name>
      <t>NIPC is extensible in two ways:</t>
      <ul spacing="normal">
        <li>
          <t>Protocol extensions: Protocol extensions can extend NIPC with support
for new non-IP protocols</t>
        </li>
        <li>
          <t>interface extensions: Interface extensions allow extensions that 
leverage compound statements of basic elements to simplify common 
operations for applications.</t>
        </li>
      </ul>
      <section anchor="protocol-extensions-1">
        <name>Protocol extensions</name>
        <t>As described in <xref target="schema"/> the NIPC interface supports protocol specific
extensions that allow bi-directional communication of attributes
that are specific to the protocol supported 
by the device. This allows for extensions to the schema to 
integrate new non-ip communications protocols, 
without the need to update the base schema.</t>
        <figure anchor="extschema">
          <name>Extended Schema</name>
          <artwork><![CDATA[
    ID
     - device/group attributes
        |
        |> BLE
        |     - BLE attributes
        |
        |> Zigbee
        |     - Zigbee attributes
        |
        |> Protocol extension
        |     - Protocol extension attributes

]]></artwork>
        </figure>
        <t>As shown in <xref target="extschema"/>, a protocol extension can be added by adding
a new technology specific extension to the schema.</t>
        <t>This is performed by adding the new protocol to the technology enum in
the base objext definition <xref target="objectdef"/></t>
        <t>Furthermore, the protocol objects need to be extended with the new
protocol as well. Protocol objects will be extended as follows:</t>
        <table anchor="newprotext">
          <name>Adding Protocol extensions</name>
          <thead>
            <tr>
              <th align="left">Attribute</th>
              <th align="left">Req</th>
              <th align="left">Type</th>
              <th align="left">Example</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ble</td>
              <td align="left">T</td>
              <td align="left">object</td>
              <td align="left">an object with BLE-specific attributes</td>
            </tr>
            <tr>
              <td align="left">zigbee</td>
              <td align="left">T</td>
              <td align="left">object</td>
              <td align="left">an object with Zigbee-specific attributes</td>
            </tr>
            <tr>
              <td align="left">newProtocol</td>
              <td align="left">T</td>
              <td align="left">object</td>
              <td align="left">an object with newProtocol-specific attr</td>
            </tr>
          </tbody>
        </table>
        <t>In the new protocol object, protocol specific attributes can be added.</t>
      </section>
      <section anchor="interface-extensions">
        <name>Interface extensions</name>
        <t>/extensions</t>
        <t>The interface extension elements are freely extendible interfaces. These
elements leverage the basic NIPC defined elements and combine them in 
compound statements in order to streamline application operation against
devices, make operations more expediant and convenient in one API call.
In principle they do not add any basic functionality. In
the OpenAPI model <xref target="openAPI"/> below, we have defined a few example 
extensions, and we will describe them here at a high level to provide 
some context on other possible extensions.</t>
        <section anchor="write-file">
          <name>Write file</name>
          <t>/extension/write/file</t>
          <t>This extension make use of multiple write operations (attribute post)
to write an entire file to an attribute. The interface allows the 
application to define the chunk size.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Write file: POST</t>
            </li>
          </ul>
        </section>
        <section anchor="read-conditional-file">
          <name>Read conditional file</name>
          <t>/extension/read/conditional</t>
          <t>This extension performs a read operation sequentially for a defined 
amount of time until a specified value is read.</t>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Read Conditional: POST</t>
            </li>
          </ul>
        </section>
        <section anchor="bulk">
          <name>Bulk</name>
          <t>/extension/bulk</t>
          <t>This extension allows you to create a compound operation made out of 
multiple connection and data operations that are to be executed 
sequentially until they all succeed or there is a failure.
Supported operations are:</t>
          <ul spacing="normal">
            <li>
              <t>/extension/connection/create</t>
            </li>
            <li>
              <t>/extension/connection/delete</t>
            </li>
            <li>
              <t>/extension/attribute/read</t>
            </li>
            <li>
              <t>/extension/attribute/write</t>
            </li>
            <li>
              <t>/extension/attribute/write/file</t>
            </li>
            <li>
              <t>/extension/attribute/write/blob</t>
            </li>
            <li>
              <t>/extension/attribute/read/conditional</t>
            </li>
          </ul>
          <t>Operations:</t>
          <ul spacing="normal">
            <li>
              <t>Bulk: POST</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="publishsubscribe-interface">
      <name>Publish/Subscribe Interface</name>
      <t>The publish/subscribe interface, or data streaming interface, is an MQTT
publishing interface. Pub/sub topics can be created and managed by means
of the /register/topic NIPC element.</t>
      <t>In this memo we propose the data format to be protocol buffers, as 
fully described in the <xref target="proto"/> protobuf definition.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section contains a few examples on how applications can leverage 
NIPC operations to communicate with BLE and Zigbee devices.</t>
      <section anchor="ble-advertisement">
        <name>BLE Advertisement</name>
        <t>In this example, we will onboard a device, and setup an advertisement
subscription topic for that device.</t>
        <t>The sequence of operations for this are:</t>
        <ul spacing="normal">
          <li>
            <t>Onboard a device using the SCIM Interface (out of scope of this
memo)</t>
          </li>
          <li>
            <t>Register a topic with the device id to subscribe to advertisements
POST /register/topic</t>
          </li>
          <li>
            <t>Subscribe to the topic from the data receiver app 
MQTT subscribe topic</t>
          </li>
        </ul>
      </section>
      <section anchor="ble-attribute-readwrite">
        <name>BLE Attribute Read/Write</name>
        <t>In this example, we will connect to a BLE device (BLE device does not
require binding) and read and write from an attribute</t>
        <t>The sequence of operations for this are:</t>
        <ul spacing="normal">
          <li>
            <t>Onboard a device using the SCIM Interface (out of scope of this
memo)</t>
          </li>
          <li>
            <t>Connect to the BLE device
POST /connectivity/connection</t>
          </li>
          <li>
            <t>Read an attribute from the BLE device
GET /data/attribute</t>
          </li>
          <li>
            <t>Write to an attribute on the BLE device
POST /data/attribute</t>
          </li>
          <li>
            <t>Disconnect from the BLE device
DELETE /connectivity/connection</t>
          </li>
        </ul>
      </section>
      <section anchor="zigbee-attribute-readwrite">
        <name>Zigbee Attribute Read/Write</name>
        <t>In this example, we will bind a zigbee device to a Zigbee mesh
and read and write from an attribute</t>
        <t>The sequence of operations for this are:</t>
        <ul spacing="normal">
          <li>
            <t>Onboard a device using the SCIM Interface (out of scope of this
memo)</t>
          </li>
          <li>
            <t>Bind the Zigbee device
POST /connectivity/binding</t>
          </li>
          <li>
            <t>Read an attribute from the Zigbee device
GET /data/attribute</t>
          </li>
          <li>
            <t>Write to an attribute on the Zigbee device
POST /data/attribute</t>
          </li>
          <li>
            <t>Disconnect from the Zigbee device
DELETE /connectivity/connection</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.shahzad-scim-device-model" target="https://datatracker.ietf.org/doc/html/draft-shahzad-scim-device-model-05" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.shahzad-scim-device-model.xml">
          <front>
            <title>Device Schema Extensions to the SCIM model</title>
            <author fullname="Muhammad Shahzad" initials="M." surname="Shahzad">
              <organization>North Carolina State University</organization>
            </author>
            <author fullname="HASSAN IQBAL" initials="H." surname="Hassan">
              <organization>North Carolina State University</organization>
            </author>
            <author fullname="Eliot Lear" initials="E." surname="Lear">
              <organization>Cisco Systems</organization>
            </author>
            <date day="2" month="June" year="2023"/>
            <abstract>
              <t>The initial core schema for SCIM (System for Cross Identity Management) was designed for provisioning users. This memo specifies schema extensions that enables provisioning of devices, using various underlying bootstrapping systems, such as Wifi EasyConnect, RFC 8366 vouchers, and BLE passcodes.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-shahzad-scim-device-model-05"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9114" target="https://www.rfc-editor.org/info/rfc9114" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9114.xml">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BLE53">
          <front>
            <title>Bluetooth Core Specification, Version 5.3</title>
            <author>
              <organization>Bluetooth SIG</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="Zigbee22">
          <front>
            <title>zigbee Specification, Version 22 1.0</title>
            <author>
              <organization>Connectivity Standards Alliance</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1589?>

<section anchor="openapi-definition">
      <name>OpenAPI definition</name>
      <t>The following non-normative model is provide for convenience of
the implementor.</t>
      <figure anchor="openAPI">
        <sourcecode markers="true" name="openapi.yml"><![CDATA[
{::include nipc-openapi/NIPC_REST.yaml}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="protobuf-definition">
      <name>Protobuf definition</name>
      <t>The following non-normative protocol buffer definition is provide for 
convenience of the implementor.</t>
      <figure anchor="proto">
        <sourcecode markers="true" name="data_app.proto"><![CDATA[
{::include proto/data_app.proto}
]]></sourcecode>
      </figure>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3PcRpLg9/oVdXTEhhTubkqyPR4zZh1LkZSXF3pwRGon
7i4uJtBANRsnNNALoEW1Rc1vv3zVC0A/SEu2xmPF7pgNoLKysvJdWVXj8Vi1
eVuYI31c6uPlssjTpM2rUj9P1qbW52Vr6lmSGj2rav2yKsfnFzoz73J4klZl
W1eFfvDy/OLkoUqm09q8O9L4S2VVWiYLgJrVyawd56adjZMmm43LfJmOHz1S
zWq6yJsGerpaL+G787OrZwq6NtdVvT7STZsplS/rI93Wq6Z98ujRD4+eqLdm
fVPV2RGjVZp2fIrglWrapMz+nhRVCaDKSi3zI/1/2iod6aaq29rMGvhrvcA/
/q9SyaqdV/WR0mOtNPzLy+ZIP53op3Vepm8XSUlPGf+nSd12XlT19ZE+yZu0
0pfrpjWLhh6neQuIPwV0G1PIo2oFJMKnprjOVwt6aBZJXhxpoBYB/Y8UIU3S
Ct6OPTqvJ/pFNY9QeV3N8zZ4ugGPBsZr2iP9+PtH+m+mafVV0gDq+rTO3xlB
KwNwP3z3+JtvA8wv4Zv/WTUmxvzN5XGIdY04LKoNSAMNAQpwShZSsE5MZsro
DaF+Mc+LfBkS7yRZAFWy6+04TBngpGGA/7FkOISNyvHZAlj4nYEJ1k+fn333
zRG1FjZ/WqxMW1XtXJ9UtdGXS5PmM2H6kf4vUyNP6u8m31Ajxyr0byz/lQF4
UJfnP9GrDBj4SD959OQx/Pzf+fXUmCdPou5/poebun3yRD+ePNrd80lVliaF
QQLZ9CUyf1JnjT4uijwpUxPh8vh7pdR4PNbJFFgjSUFcruZ5oxdmUemG8TCN
fn12eTVbFToJdEBBOiCPdMA1gL1J1o1Wy7p6l2d5ea2rpampRaOT6wRYoQUh
DFRFM9FXcwM/mrTOpyYLQOaNMu9bUzb5tDD4mcUsL/M2T4pi7Zo1AcGfVzf6
rDT19VrD4LViWuuk0e3cwDOYWfhDLypABfhiUZUEaFlUa5NNmB6LPMsKA8T5
CvVJXWWrFMeg1JsGlFvSQId5qaervKBBggwl12Zhynak5yYp2nkK3Yw0aKS3
ywLGAjoGvlnBsNoVyPb1SBXVdd60edoQkvOqWeZtUuCczZN3BqlAvQJBiupm
vKxugNpCMXxZ4RgAF2XKd3ldldg3k7Ix7rt2vYTpIjpVQPVWN6vlEpSePr8Y
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
6IPcuoT7z8xUX3WWsIfpuFm4t66LD5JyxDY46800Rad0l6Xc8gHYC9Uca1X2
/JDJ73ZGNom59amGhR3fjuHt4Qf711bBtx/tJf7Kn7OxSfrlUjs/UbYDBypv
lHfZ76YfLKzdWsJ/uZ+usN/v1hiD9N1Pezhaxxzr+/598O1mTdKn8hZ9spvQ
G3WLbbBJw/BSlr0I0QkUX8cd3rbYVS6/t6napGK8xzWsZKIilWHFsmepSsep
SLZCYxfwLhrDt9ulM6JP91MaIZV2qY3tlSlbQO+qC7gL+8URnOqH259S2Ieo
s0XctxVQ/NMSiGTsGXwWM3RXqDBpzrI06317lyQ4tp4o/m90J3dedk4Cs+sF
DzjhH+9QfzgsYVE3A/lqeczp6pO5wX1DM3muzXtoPZCd5kZbktNMmy25af5g
U2qaOt+jHoA/hFl98/q5ltM/Knk8dF4kPv/4UcneQqVokn0dyxe6JRCxJu7e
lImc5fXiBlzvCczppu18FlDwxG7Ay8ukpmOr4vdbAPVulOxuUpy37bI5OjzM
KrzHZQLh/WEPSc6NUp+SFsXpOPg8978G6dUOb/ayqwOsGUnLr8GYn4ECKcn2
Ep6bMpUjCUK/KaJK3yAOUIW1BW2AjKC6KMISgY4DBMvNq475TJUVvyOurhpp
T7sqNx0T74RgqLyubxp8MjtB+YB+yR2zPpwcoxh4bw6fpnNmgO2Yr0pIdLeK
TA3MZmBMjh3mTdh3VLnn+/59ayAr7+FSyDM7drcS4pzKjdw56JAMMOjpRki7
OesTbRbquQbkB7kJH/IpDj3LbXIvQhB3zQHswGirp76jbddR2Pl5x4PYp49d
OiqiXl9dNQP6imDjnNbi2OdtM+SkWsB310B+sgLdonbrliFLscGT35tsG4Vn
M+X262Ifan2SGh398vziBJQfrSVO8yJv10rRM3/GON7aiHsEbyp9k6zxLhHk
y4teqSUgOvCQ3HD6mXFnpLKl9AYr2xC30tzosirH5xdupZOOlPN3YYS9nA88
leN+gwe0yIkdFOYdyOA1LoAtlnT1GW1+WNgzDqdJ4wN1Cg7oKg4sfcO1lIpP
DAjCBwqXvV7AKwOp3Glg9GC0+ietg/uwSGiN1jBJ/DCFLo0vULUegOoOjQc8
zcdcGZXzWe+A8Kq0CgtF0i/IcqvahHtfRIRtX/6iO74ZMT4bWbQiDj9EhoHw
qKjuB4dzTftv7LzmyxgzPz68QhA5olq1cmcgVx/KucZUD0kneBN4d50c3dZm
730bC5qH13W1WkanEjp76f76kQ6BCxx3AkDVcTva8ZJyr2lvpXm4dZ85epD6
n4RQg+vn4L0lN1t+EmBcALykx3QNXeR5uRZ8LN9AnXR3HZELryGWxjlsTTov
q6K6Xut+AULMAWj0iFuiS299JTdP8o1HQVoHXVAhMih1N/no7L1vw10SUZk6
BJ+rGusRcAl1FLM0fxZd2WAssdyxV4CPci3kCoWJnw4Lw1ZMOABJI1ct9ZzN
+5W/Djib9yt/tc7m1HdkPU1xnG+DfStEB5CAcf+0DrpfCwBxqcRegFgehmAh
ICC1pesuQMGnMTRxf+G91LtYMThmFhvQwygRUtESMV8ld0331G1IglA0rK4f
skHggYY/rugCgt5nca3rrDaGilqRpcTUSpNG7h1RroGzZCIZWPiE9sOm6Tzk
Eq+LWkzhKX67oGNvhsxfbm+kpbPRsIKzwDah1+sMn06ucaNUq9wFZYvkrQkN
I5UwmPdLk+UJetGERfnOlLlEpFjqcHxxrnFH1gQnZAlhT8rlDHOztrW+QGlo
vJYhzlalmDfwTrAwiRQDONYlglpU4IyjPuDftg5nBEKs58k7v0wArqNBB4HF
LzCn7C7dGLtW4mumFhrrrzWaTT3Pr+c0AaSx5NoXrejqXLql+n1L9bNUFyV3
bYTMIUHM31yRcMgth1Q77NKg0f0uROQVV2G5S9O41jgg/QO/LgKdtw+VK0hG
96ts81qczs5Zr7wdxrNpcCSY6sQ+TEguJZqvyrfgJv1sBjdA+UEGO5/4GFHc
ipCLs9KjAp5ZeRh80aOFGJSG4tAkC3hTLlvO6cSL4EJx9GWSBbA93yGOuyTg
77zwuRWT+ePcEejgiAj3E49ZOK6nq+JtNIwpPeigLoRdVyukZUp3mNG9IyKU
fih4055GfwhPWXYzHhTNIbvSkl2Y0rbOnbVxVCRPNxYHhOGhk6jxPmWIF7Dy
j2rFa8MHa0nYMFGXzh0MOoI+uIA7GHBw/RcPbPN7jpw77x03EgdsfEn8vP0t
i9D2T6ZFNd2KQMyCA/v7YH4tA0AIdcEV8IeXrq7TGQc2AlIif+gLP528UeVj
Z1NB8JKPcX/x16srJUCiDybYt69QdZaKJyEjRlkkJVgM8sAWJgG7JNuYDm0i
h5ef2JCIAZmIsaRrcBYV6kZQeKBXTO/wNncLFpvP6Wo2sxdMqdkKeS6KfrA5
l6lWoKnpv9Ak8Ow4KhUnCYwoi1EjnB8cRR4oc9rdgTegh0EZ0cIZTI5p4yUg
H5EY5wIRycSjFzNHipveHYdVqZ5EgsXImZCqnFa4idTfTYRQG9NicFLGu3Di
HcHh3o3E3pk4sVdDoSBzoqUTjMo93sYy6KsOAmA+rOt9eXL+InBeHoieaVIA
yTvccgpgcN4fDu3T8F6zwM7Jr46KmqMRErhw2cqxHB1f2i2GFhLgrk3HaxDf
GjwEkGoUEBxKRNQlLXnaaXKWELX2IRmjLbNlL7GkRQVsL+N6EPxtb4FSeEgS
mlJZtXkoua6EZU12APXPQP4N5+/ED89uA5M9wm5aNlzlqJ3h65/e3Qc1cBK4
9r5Ax+uw27GGsBmAEVw1uqH3HbdSss/evRNhP/7AqYaZ+DlUCswsAm9hGlz/
+ML54CkOo/W3JGxlAntL5w4O6IG6FxNsQGhPPui13nkH81f6EpwjwGiNwtGA
G+92KF49PWUDdH788njwLUwMxNYQmaRv6UMbhngLJgsN7gpmzH+VZCyxgIPD
ldzd52wvXuYgibiCwhu6DBjVZ1XbpNc/1F9OXp2e6adnP52/vPyRNh7qA4x7
kmU+WS+KAwiLj+yxFGW+TMfy8hCt399fn11eTdYQ4X0UQGcvTwHMP3xeycZQ
7Nb0jfP2oXWcgOhQi3i8Kh6wvtOAkS/+DoZgQv1FY6Ynh/EHGwcrb9X/B0q0
VexmzAAA

-->

</rfc>
