<?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  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-coap-over-gatt-03" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>CoAP over GATT (Bluetooth Low Energy Generic Attributes)</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-coap-over-gatt-03"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="14"/>
    <workgroup>CoRE</workgroup>
    <keyword>CoAP, bluetooth, gatt</keyword>
    <abstract>
      <t>Interaction from computers and cell phones to constrained devices is limited by the different network technologies used,
and by the available APIs.
This document describes a transport for the Constrained Application Protocol (CoAP) that uses Bluetooth GATT (Generic Attribute Profile)
and its use cases.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this document takes place on the
  CORE Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/">https://mailarchive.ietf.org/arch/browse/core/</eref>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://gitlab.com/chrysn/coap-over-gatt/-/tree/master">https://gitlab.com/chrysn/coap-over-gatt/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> can be used with different network and transport technologies,
for example UDP on 6LoWPAN networks.</t>
      <t>Not all those network technologies are available at end user devices in the vicinity of the constrained devices,
which inhibits direct communication and necessitates the use of gateway devices or cloud services.
In particular, 6LoWPAN is not available at all in typical end user devices,
and while 6LoWPAN-over-BLE (IPSP, the Internet Protocol Support Profile of Bluetooth Low Energy (BLE), <xref target="RFC7668"/>) might be compatible from a radio point of view,
many operating systems or platforms lack support for it,
especially in a user-accessible way.</t>
      <t>As a workaround to access constrained CoAP devices from end user devices,
this document describes a way encapsulate generic CoAP exchanges in Bluetooth GATT (Generic Attribute Profile).
This is explicitly not designed as means of communication between two devices in full control of themselves --
those should rather build an IP based network and transport CoAP as originally specified.
It is intended as a means for an application to escape the limitations of its environment,
with a special focus on web applications that use the Web Bluetooth <xref target="webbluetooth"/>.
In that, it is similar to CoAP-over-WebSockets <xref target="RFC8323"/>.
GATT, which has read and write semantics, is not a perfect match for CoAP's request/response semantics;
this specification bridges the gap in order to make CoAP transportable over what is sometimes the only available protocol.</t>
      <section anchor="application-example">
        <name>Application example</name>
        <t>Consider a network of home automation light bulbs and switches,
which internally uses CoAP on a 6LoWPAN network
and whose basic pairing configuration can be done without additional electronic devices.</t>
        <t>Without CoAP-over-GATT,
an application that offers advanced configuration requires the use of a dedicated gateway device
or a router that is equipped and configured to forward between the 6LoWPAN and the local network.
In practice, this is often delivered as a wired gateway device and a custom app.</t>
        <t>With CoAP-over-GATT,
the light bulbs can advertise themselves via BLE,
and the configuration application can run as a web site.
The user navigates to that web site, and it asks permission to contact the light bulbs using Web Bluetooth.
The web application can then exchange CoAP messages directly with the light bulb,
and have it proxy requests to other devices connected in the 6LoWPAN network.</t>
        <t>For browsers that do not support Web Bluetooth,
the same web application can be packaged into an native application
consisting of a proxy process that forwards requests received via CoAP-over-WebSockets on the loopback interface to CoAP-over-GATT,
and a browser view that runs the original web application in a configuration to use WebSockets rather than CoAP-over-GATT.</t>
        <t>That connection is no replacement when remote control of the system is desired
(in which case, again, a router is required that translates 6LoWPAN to the rest of the network),
but suffices for many commissioning tasks.</t>
      </section>
      <section anchor="alternatives">
        <name>Alternatives</name>
        <t>Several approaches were considered, but considered unsuitable for the intended use cases:</t>
        <ul spacing="normal">
          <li>CoAP over 6LoWPAN over BLE (BLE IPSP):
While this is the natural choice for transporting CoAP over BLE,
it is unavailable on typical end user devices.
There is no clear path toward how that would be integrated in platforms like Android or iOS,
and even if it were, creating a network connection to a nearby device from within an application might not be possible (if how WLAN networks are managed is any indication).</li>
          <li>
            <t>GoldenGate <xref target="goldengate"/>:
This introduces significant network overhead,
and burdens the end user device application with shipping a full network stack
that is executed in a position where it can not integrate fully with the operating system's network stack.  </t>
            <t>
Moreover, this places a retransmission layer on top of a partially reliable transport (GATT),
duplicating effort and possibly aggravating congestion situations.</t>
          </li>
          <li>
            <t>CoAP over UDP over SLIP over GATT UART <xref target="nefzger"/>:
This is similar to the GoldenGate approach,
but built on the GATT UART provided with Nordic Semiconductor's libraries<!-- https://learn.adafruit.com/introducing-adafruit-ble-bluetooth-low-energy-friend/uart-service -->.  </t>
            <t>
This shares the network stack duplication and retransmission concerns of GoldenGate.</t>
          </li>
          <li>slipmux <xref target="I-D.bormann-t2trg-slipmux"/> over BLE GATT UART service:
This is similar to the previous item;
the stack duplication concern is addressed,
but retransmissions are still active atop of a service that already provides some reliability.</li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
    </section>
    <section anchor="protocol-description">
      <name>Protocol description</name>
      <section anchor="gatt-basics">
        <name>Boundary conditions: GATT properties</name>
        <t>[ This section may be shortened in later iterations,
but is kept around while the protocol is being developed
to easily fix mistakes made from wrong assumptions. ]</t>
        <t>CoAP-over-GATT has different properties than UDP transported over the Internet:</t>
        <ul spacing="normal">
          <li>
            <t>Messages sent by one party are received by the other party in the order in which they are sent.
There is no re-ordering.  </t>
            <t>
(There is also a total order on messages sent by any party,
but that property is not useful because it's often not accessible through the Bluetooth stacks.)</t>
          </li>
          <li>
            <t>There is limited reliabiliy built into the protocol.  </t>
            <t>
Data transmissions initiated by the data source can be
unreliable ("write without response", "notify")
or reliable ("write with response", "indicate").  </t>
            <t>
The caveat with their relability is that acknowledgements are sent by the BLE stack,
without consulting with the application.
(This is not only done for simplicity but also for power efficiency:
There is only a short time window in which the data source is listening for confirmations).
Thus, these confirmations can not serve to acknowledge that the a CoAP request contained in the event was read, understood and is being processed.  </t>
            <t>
The reliability mechanisms are still useful, though:
Both "write" and "notify"/"indicate" update the GATT characteristic's state,
and while a slow application may miss data when sent in fast succession,
it is reasonable to expect from the BLE stack to deliver the last data to the application
when no more data is sent.</t>
          </li>
          <li>
            <t>Reads and writes may be subtly confused:
When a characteristic is written to,
and it is read before the BLE server application has had time to interact with its BLE stack,
the written value may be echoed back at read time.  </t>
            <t>
This is likely not problematic when "notify"/"indicate" is used
instead of polling reads,
but it seems prudent to take precautions.</t>
          </li>
        </ul>
      </section>
      <section anchor="requests-and-responses">
        <name>Requests and responses</name>
        <t>CoAP-over-GATT uses a GATT Characteristics to transport requst and response messages.
Similar CoAP-over-UDP it offers both reliable and unreliable transfer and message deduplication,
but as GATT's properties (see <xref target="gatt-basics"/>) differ from UDP's,
it uses a different serialization and a different kind of message IDs.</t>
        <t>Tokens are used like with other CoAP transports,
and allow keeping multiple requests active at the same time.</t>
        <t>A GATT server announces service of UUID 8df804b7-3300-496d-9dfa-f8fb40a236bc (abbreviated US in this document),
with one or more characteristics of UUID 3d4190a8-f322-4ff8-93fa-8d7bed520333 (abbreviated UC)
through BLE advertisements from a BLE peripheral (typically a constrained device),
which are discovered by a BLE central (typically an end user device).
The server and client roles of CoAP and GATT are independent of each other:
either BLE participant can send requests in a CoAP client role.</t>
        <section anchor="message-sub-layer">
          <name>Message sub-layer</name>
          <t>At its CoAP-over-GATT characteristic, each party maintains a single bit Message ID (initialized at 1 when a connection is created),
and the last Message ID sent by the peer (initialized at 0 when a connection is created).</t>
          <t>Messages are serialized as GATT values.
The GATT client sends a message by writing it to the characteristic (reliably using the "write with response" or unreliably using "write without response" operation);
the GATT server sends them reliably using an "indicate" or unreliably "notify" event.
The serialization format is the same for all, and illustrated in <xref target="fig-message"/>:</t>
          <figure anchor="fig-message">
            <name>Components of a message</name>
            <artwork><![CDATA[
0   1   2   3   4       8       16      varying
+---+---+---+---+-------+-------+-------+---------+----+---------+
| R | M | C | A |  TKL  |  Code | Token | Options | ff | Payload |
+---+---+---+---+-------+-------+-------+---------+----+---------+
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>a single message description byte,
compose of 4 bits R (Role), M (Message ID), C (Confirm) and A (Acknowledge ID),
followed by 4 bits of token length (TKL).</li>
            <li>
              <t>Code, token, options, payload marker and payload as in <xref target="RFC7252"/>.  </t>
              <t>
Unlike there, there is no 16-bit Message ID field
(a similar role is taken by bits M and A),
and in empty messages,
the code is not sent.</t>
            </li>
          </ul>
          <t>The bits are set as follows:</t>
          <ul spacing="normal">
            <li>The R bit is always set to 0 by the GATT server,
and to 1 by the GATT client.</li>
            <li>The Message ID bit is always set to the current Message ID of the sender.</li>
            <li>The Confirm bit is set if the sender asks the peer to acknowledge that the message has been noted.</li>
            <li>The Acknowledge ID is always set to the peer's last sent Message ID that had the Confirm bit set.</li>
          </ul>
          <t>When receiving a message with the C bit set,
the recipient MUST eventually send a response message with radio reliability.</t>
        </section>
        <section anchor="using-the-message-sub-layer">
          <name>Using the message sub-layer</name>
          <t>[ This section reflects ongoing experimentation with the above serialization format and rules.
Senders may use other patterns as long as they do not stall their peer by not sending any messages after the Confirm bit was set. ]</t>
          <t>To send a message unreliably in terms of CoAP transmission,
a sender sets its latest Message ID in the M bit, sets C to 0, and populates the remaining bits per the rules above.
It then sends the message unreliably on the radio
(it may be sent reliably, especially when the peer set the C bit before).
After a CoAP-unreliable message, the sender may send more CoAP-unreliable messages.
It should avoid sending multiple messages in the same connection event.</t>
          <t>To send a message reliably in terms of CoAP transmission,
a sender sets its latest Message ID in the M bit, sets C to 1, and populates the remaining bits per the rules above.
It thens ends the message reliably on the radio
(it may send unreliably if a message is expected from the peer soon, but then needs to be prepared to send the same message again).
After sending that message,
the sender does not send any other message until a message is received with A equal to the sent message's M bit.
The sender may need to send the very same message again if no earlier transmission of the message happened reliably.
[ Do we need to give timing guidance here? Probably not, because it only happens if there is some expectation in the first place. ]
The sender may cancel the transmission by sending an empty message with the same M and C bits,
or by sending different message with these bits (which are then all unreliable transmissions).</t>
          <t>When receiving a message with the C bit set,
it is up to the recipient when to send the radio-reliable message.
If it is expected that a radio-reliable message will be sent soon,
it is permissible and useful to send unrelated unreliable messages that already account for the set C bit in their A bit.</t>
        </section>
        <section anchor="message-deduplication">
          <name>Message deduplication</name>
          <t>CoAP-over-GATT participants MUST ignore a message arriving at a characteristic
if it is identical to the one received previously in the same connection.
(The first message is never ignored).</t>
          <t>Note that it is not possible to send two identical consecutive messages unreliably.
When sending identical requests, the sender may vary the token.
Sending identical responses generally is rarely significant, even with the generalized <xref target="I-D.bormann-core-responses"/>,
because the mechanism to make responses "non-matching" in that document's terminology typically incurs variation.
When it does not, but the repetition is still significant, sending the messages reliably becomes necessary.</t>
        </section>
        <section anchor="requests-and-responses-1">
          <name>Requests and responses</name>
          <t>CoAP requests and responses are built on the message sub-layer
as they are in <xref target="RFC7252"/>:
requests are sent with a token chosen by the CoAP client,
and the CoAP server sends a response with the same token.</t>
          <t>Responses and message-layer acknowledgments can happen in the same message.
Unlike in <xref target="RFC7252"/>, there is no association between a request and its message ID:
Any message may serve as an acknowledgement;
it is always only the token that matches requests to responses.</t>
        </section>
        <section anchor="fragmentation">
          <name>Fragmentation</name>
          <t>Attribute values are limited to 512 Bytes (<xref target="bluetooth52"/> Part F Section 3.2.9),
practically limiting blockwise operation (<xref target="RFC7959"/>) to size exponents to 4 (resulting in a block size of 256 byte).
Even smaller messages might enhance the transfer efficiency
when they avoid fragmentation at the L2CAP level. [ TBD: Verify: ]</t>
        </section>
        <section anchor="multiple-characteristics">
          <name>Multiple characteristics</name>
          <t>If a server provides multiple OC typed characteristics,
multiple messages can be sent without waiting for individual confirmation.
This is similar to using RFC7252 with NSTART &gt; 1,
and may be used by the GATT client if the GATT server lists multiple UC characteristics.
The GATT server can send messages only through characteristics on which the GATT client enabled "indicate" or "notify";
if the GATT client does not support multiple characteristics,
it will just pick any and only enable them on that one.</t>
          <t>Each characteristic has its independent message ID bits.
All characteristics of a service share a single token space,
and responses need not necessarily be sent on the characteristic the request was sent on.</t>
          <t>The use of muliple characteristics is primarily practical
when large amounts of data are to be transferred.
These transfers can utilize much of BLE's bandwidth
because they make it easy to send much data within a single BLE connection event.</t>
        </section>
        <section anchor="development-directions">
          <name>Development directions</name>
          <ul spacing="normal">
            <li>
              <t>Is there any good reason to allow read operations?  </t>
              <t>
A GATT client that is waiting for a Confirm bit to be acknowledged might attempt a Read
(for the case that the confirmation arrived in an unreliable message),
but might just as well perform the last write again.  </t>
              <t>
Reading would be more efficient (because it can happen without application intervention, and no data is sent),
but the added complexity might not be worth the enhancements.</t>
            </li>
            <li>
              <t>Fragmentation.
If the current approach of requiring devices to support large MTU sizes turns out to be impractical,
or if GATT level fragmentation vastly outperforms CoAP fragmentation,
it may be necessary to use composite reads and writes on GATT.  </t>
              <t>
Care has to be taken to use only operations supported by <xref target="webbluetooth"/>: that API does not expose reads with offsets.  </t>
              <t>
Offset based fragmentation may also be incompatible with the write-with-response approach suggested for reliability.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="addresses">
        <name>Addresses</name>
        <t>The URI scheme associated with CoAP over GATT is "coap+gatt".
The default value of Uri-Host is the MAC address of the CoAP server,
in hexadecimal encoding, with the dash character ("-") separating the bytes.
[ Some bikeshedding is expected on these details. ]</t>
        <t>User information and port are always absent with this scheme.</t>
        <t>Assembling the URI of a request for the discovery resource of a BLE device with the MAC address 00:11:22:33:44:55 would thus be assembled, under the rules of <xref section="6.4" sectionFormat="of" target="RFC7252"/>, to <tt>coap+gatt://00-11-22-33-44-55/.well-known/core</tt>.</t>
        <t>Locally defined host or service name registries may be used to create names
that are more suitable for human interaction.
For DNS, which is widely used for this purpose,
no record types are registered that map to Bluetooth MAC addresses at the time of writing.</t>
        <t>Note that on some platforms (e.g. Web Bluetooth <xref target="webbluetooth"/>),
the peer's or the own address may not be known application.
They may come up with an application-internal registered name component
(e. g. <tt>coap+gatt://id-SomeInternalIdentifier/.well-known/core</tt>),
but must be aware that those can not be expressed towards anything outside the local stack --
the same way they would avoid using IPv6 zone identifiers or URIs whose host name is <tt>localhost</tt>.</t>
        <section anchor="scheme-free-alternative">
          <name>Scheme-free alternative</name>
          <t>As an alternative to the abovementioned scheme,
a zone in .arpa could be registered to use addresses like</t>
          <artwork><![CDATA[
coap://001122334455.ble.arpa/.well-known/core
]]></artwork>
          <t>where the .ble.arpa address do not resolve to any IP addresses.</t>
          <t>[ Accepting this will require a .arpa registering IANA consideration to replace the URI one. ]</t>
        </section>
        <section anchor="use-with-persistent-addresses">
          <name>Use with persistent addresses</name>
          <t>When services are meant to provide long-lived and universally usable URIs,
addresses based on MAC addresses can be impractical,
because they fluctuate on hardware changes.
(Moreover, privacy mechanisms on the device or the platform can render them unusable even before hardware changes).</t>
          <t>In the absence of a usable host or service name registry,
implementers may opt for non-GATT addresses right away.
<xref target="I-D.ietf-core-transport-indication"/> provides the means to advertise a different canonical address,
and to announce availability of that advertised service on the present transport, CoAP-over-GATT.
If the device is not generally reachable,
the canonical address might also be unreachable (see <xref target="I-D.ietf-core-transport-indication"/> section "Unreachable canonical origin address").</t>
          <t>When long-lived addresses circumvent privacy preserving measures,
considerations concering the tracking of devices [ are TBD along the lines of "don't make it discoverable to unauthorized sources, and in case of doubt let the peer show its credentials first" ].</t>
        </section>
      </section>
      <section anchor="compression-and-reinterpretation-of-non-coap-characteristics">
        <name>Compression and reinterpretation of non-CoAP characteristics</name>
        <t>The use of SCHC is being evaluated in combination with CoAP-over-GATT;
the device can use the characteristic UUID to announce the static context used.</t>
        <t>Together with non-traditional response forms (<xref target="I-D.bormann-core-responses"/>
and contexts that expand, say, a numeric value 0x1234 to a message like</t>
        <t><tt>
2.05 Content
Response-For: GET /temperature
Content-Format: application/senml+cbor
Payload (in JSON-ish equivalent):
[
    {1 /* unit */: "K", 2 /* value */: 0x1234}
]
</tt></t>
        <t>This enables a different use case than dealing with limited environments:
Accessing BLE devices via CoAP without application specific gateways.
Any required information about the application can be expressed in the SCHC context.</t>
      </section>
      <section anchor="additional-use-of-advertisements">
        <name>Additional use of advertisements</name>
        <t>In the current specification,
advertisements are used to indicate that CoAP-over-GATT is being used.</t>
        <t>Two more uses of them are being considered:</t>
        <ul spacing="normal">
          <li>
            <t>Some resource metadata might already be transported in advertisements.  </t>
            <t>
These would need to be compact (in the order of magnitude of 10 bytes or less),
and could contain data otherwise only discovered by querying the .well-known/core resource,
or (hashes of) AS and audience values for ACE
to facilitate connection creation with a device known by its managed identity.</t>
          </li>
          <li>
            <t>Advertisements could contain broadcast CoAP messages.  </t>
            <t>
Given that these non-traditional responses can not have embedded requests (as defined in <xref target="I-D.bormann-core-responses"/>) due to size contraints,
a mechanism such as <xref target="I-D.ietf-core-observe-multicast-notifications"/> could be used to distribute some consensus request.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <section anchor="uniform-resource-identifier-uri-schemes">
        <name>Uniform Resource Identifier (URI) Schemes</name>
        <t>IANA is asked to enter a new scheme into the "Uniform Resource Identifier (URI) Schemes" registry set up in <xref target="RFC7595"/>:</t>
        <ul spacing="normal">
          <li>URI Scheme: "coap+gatt"</li>
          <li>Description: CoAP over Bluetooth GATT (sharing the footnote of coap+tcp)</li>
          <li>Well-Known URI Support: yes, analogous to <xref target="RFC7252"/></li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>All data received over GATT is considered untrusted;
secure communication can be achieved using OSCORE <xref target="RFC8613"/>.</t>
      <t>Physical proximity can not be inferred from this means of communication.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD</t>
      <t>in particular Hauke / and process his input</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <author fullname="T. Hardie" initials="T." surname="Hardie">
              <organization/>
            </author>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes.  It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7668">
          <front>
            <title>IPv6 over BLUETOOTH(R) Low Energy</title>
            <author fullname="J. Nieminen" initials="J." surname="Nieminen">
              <organization/>
            </author>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen">
              <organization/>
            </author>
            <author fullname="M. Isomaki" initials="M." surname="Isomaki">
              <organization/>
            </author>
            <author fullname="B. Patil" initials="B." surname="Patil">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="C. Gomez" initials="C." surname="Gomez">
              <organization/>
            </author>
            <date month="October" year="2015"/>
            <abstract>
              <t>Bluetooth Smart is the brand name for the Bluetooth low energy feature in the Bluetooth specification defined by the Bluetooth Special Interest Group.  The standard Bluetooth radio has been widely implemented and available in mobile phones, notebook computers, audio headsets, and many other devices.  The low-power version of Bluetooth is a specification that enables the use of this air interface with devices such as sensors, smart meters, appliances, etc.  The low-power variant of Bluetooth has been standardized since revision 4.0 of the Bluetooth specifications, although version 4.1 or newer is required for IPv6.  This document describes how IPv6 is transported over Bluetooth low energy using IPv6 over Low-power Wireless Personal Area Network (6LoWPAN) techniques.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7668"/>
          <seriesInfo name="DOI" value="10.17487/RFC7668"/>
        </reference>
        <reference anchor="webbluetooth" target="https://webbluetoothcg.github.io/web-bluetooth/">
          <front>
            <title>Web Bluetooth</title>
            <author initials="R." surname="Grant">
              <organization/>
            </author>
            <author initials="O." surname="Ruiz-Henríquez">
              <organization/>
            </author>
            <date year="2020" month="February" day="24"/>
          </front>
        </reference>
        <reference anchor="goldengate" target="https://fitbit.github.io/golden-gate/">
          <front>
            <title>Golden Gate</title>
            <author initials="" surname="Fitbit, Inc">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="nefzger" target="https://www.maibornwolff.de/en/blog/talk-coap-me-iot-over-bluetooth-low-energy">
          <front>
            <title>Talk CoAP to me – IoT over Bluetooth Low Energy</title>
            <author initials="" surname="Matthias Nefzger">
              <organization/>
            </author>
            <date year="2021" month="March" day="01"/>
          </front>
        </reference>
        <reference anchor="RFC8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="S. Lemay" initials="S." surname="Lemay">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan">
              <organization/>
            </author>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor">
              <organization/>
            </author>
            <date month="February" year="2018"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP.  The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports.  It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks.  Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates.  In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS).  These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs.  In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers.  Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations.  Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="bluetooth52" target="https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=478726">
          <front>
            <title>Bluetooth Core Specification v5.2</title>
            <author>
              <organization/>
            </author>
            <date year="2019" month="December" day="31"/>
          </front>
        </reference>
        <reference anchor="I-D.bormann-t2trg-slipmux">
          <front>
            <title>Slipmux: Using an UART interface for diagnostics, configuration, and packet transfer</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Tobias Kaupat" initials="T." surname="Kaupat">
              <organization>Lobaro UG</organization>
            </author>
            <date day="4" month="November" year="2019"/>
            <abstract>
              <t>   Many research and maker platforms for Internet of Things
   experimentation offer a serial interface.  This is often used for
   programming, diagnostic output, as well as a crude command interface
   ("AT interface").  Alternatively, it is often used with SLIP
   (RFC1055) to transfer IP packets only.

   The present report describes how to use a single serial interface for
   diagnostics, configuration commands and state readback, as well as
   packet transfer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-slipmux-03"/>
        </reference>
        <reference anchor="I-D.bormann-core-responses">
          <front>
            <title>CoAP: Non-traditional response forms</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="3" month="February" year="2022"/>
            <abstract>
              <t>   In CoAP as defined by RFC 7252, responses are always unicast back to
   a client that posed a request.  The present memo describes two forms
   of responses that go beyond that model.  These descriptions are not
   intended as advocacy for adopting these approaches immediately, they
   are provided to point out potential avenues for development that
   would have to be carefully evaluated.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-01"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Protocol Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] to express
   alternative transports available to a device, and to optimize
   exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-02"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-05"/>
        </reference>
      </references>
    </references>
    <section anchor="change-log">
      <name>Change log</name>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>Message format extended by a leading byte, the option to have a token.
This enables role reversal and concurrent requests.</li>
        <li>The UC identifier was changed to reflect the incompatible change in protocol.</li>
        <li>A section on used BLE properties was added.</li>
        <li>A section providing outlook on other data for advertisements was added.</li>
      </ul>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>Point out (possibly conflicting) development directions.</li>
        <li>Describe URI scheme more completely, including persistent addresses.</li>
        <li>Aim for standards track.</li>
        <li>Describe rejeced alternative approaches.</li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>Add note on SCHC possibilities.</li>
      </ul>
    </section>
    <section anchor="other-todos">
      <name>Other ToDos</name>
      <ul spacing="normal">
        <li>
          <t>Future proofness?
          </t>
          <ul spacing="normal">
            <li>https://www.ti.com/lit/ml/slyp707/slyp707.pdf mentiones EATT for interleaving ATT -- looks like it's just for multiple applications, can we be one application?</li>
            <li>Same source: MTU can change over time. (Hopefully issue <eref target="https://gitlab.com/chrysn/coap-over-gatt/-/issues/1#note_518745553">https://gitlab.com/chrysn/coap-over-gatt/-/issues/1#note_518745553</eref> handles that transparently) -- queued writes? long writes?</li>
            <li>GATT caching seems not to be harmful.</li>
          </ul>
        </li>
      </ul>
      <!-- investigate: HOGP (HID over GATT) may be good teaching material -->

</section>
    <section anchor="sketch">
      <name>-03 sketch</name>
      <ul spacing="normal">
        <li>
          <t>single prefix byte
          </t>
          <ul spacing="normal">
            <li>"reliable" is always only radio-reliable, doesn't mean ready-to-process</li>
            <li>unprocessed: assume (demand) latest msg is reliably processed</li>
            <li>tkl nibble</li>
            <li>
              <t>1-bit msgid
              </t>
              <ul spacing="normal">
                <li>
                  <t>NONish msgs don't change msgid          </t>
                  <t>
both radio-reliable and radio-unreliable msgs can be NONish</t>
                </li>
                <li>
                  <t>CONish msgs do change msgid, and block characteristic in that direction until ACKed          </t>
                  <t>
CONish are best sent radio-reliably, and that reliability plus guaranteed processing of latest state means that no GATT level retransmissions need to be done (no timer mgmt: it'll work eventually, although timer would detect broken / thread-crashed peer)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>1-bit "please ACK" (aka "ready for changing MID?"), which places onus on peer to send a radio-reliable msg back      </t>
              <t>
ACKs can end cycle of tell-me-its-done b/c they're radio-reliable, eventually processed, and if the ACKer later sends more (esp. non-empty) msgs, they'd still ACK</t>
            </li>
            <li>
              <t>bits "is-ack, ack-what"? that'd fill up the initial byte.
              </t>
              <ul spacing="normal">
                <li>can do with single-ack bit? it wouldn't flip until ACK requested...</li>
              </ul>
            </li>
            <li>need bit for who-sent to recognize own state? (that'd only be needed if read is done) and would excede init'l byte</li>
            <li>~NSTART &gt; 1 (precisely: &gt;1 un-acked CON in flight, indep of reqs): "trunking" via multiple chars</li>
            <li>ACKs as write or notify: these may stall if got lost; party may do them if it knows it'll send radio-relible msg anyway. (then, may be elided altogether, but sending them allows the original sender to send more if we're lucky and it gets through)</li>
            <li>minimal subset: echo this-or-that-bit, always send new msgid and ask for next OK and block</li>
          </ul>
        </li>
      </ul>
      <t>bits:</t>
      <t><tt>
Party YourMID PleaseAck MyMid | 4 TKL | token* | msg
</tt></t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA71863LjRpbmfzxFrupHiW6CuteFnnGtrCrbWtdFUVKtY2Nm
og0CSRIjEOAiAbHosjrmHeY59g3237zJPsme75yTCYBS2b2xG9vRZUkkkJdz
/c4lM47jqMmbwk7N3kV1fmWqO1ubH89vbsz+90Vrm6pqluZttTFvSlsvtuZH
Sz/z1Jw3TZ3P2sa60V6UVWmZrGiMrE7mTZysXGudi9OqtvSfZB1j1HiRNE18
eBLl63pqmrp1zfHh4cvD48g1SZn9NSmq0vIXNkqTZmpck0WbxdRcVB/fRLcb
/HJ+NTYzv6yxwYhR0jbLqp5GsclLRw9NzPnK/cf/dC4yRlZ1saxz1+RJ2fsm
rdqyqbdTc07rqPOEPrKrJC+mJvVP/2fdxyStVlFZ1aukye/slJ78+MPF8+Oz
Y//r2cuzaZSX891Hnj17gV83dhbWjL+NUYr/YmcmEJm/8Hsx/L9YfxrZ2ceJ
+bFOyubxbz9MzMc2/y3+yZb1f/yP/97a3/j7LGlopuPD48P48Dg+PuUPZaV+
mp9u3r2dmmXTrN304KC/2nQxWeTNsp1N8gpfxOGbA3p3URWZLReYoL+rH/lj
8yN9/ud7+iFvZnkzNpdlOtlZ75+udM7v9lYoC4KcWayvtPPfFrYeLO4mKW5Z
jkxTmZU1/+vf/t1cVjci9o8J/J9v4R0J4TJPnHkv8w23cUQSHx8e/TnZN5sJ
yd+sqstNVcznk8we2PJgVlSLg4YWLXq0snFeNaJOgRdxUW1i61dLgvfi5PhE
ZfDFsyP/6/OXZy93JDMMIbIcqNQR4oJU2FyvbZrPc1LKvCrN3dnkeLDHo5fx
0XF88tger17/MNximHFS1YsDshurpDxYkvoXtnb096YsqiSjzyeJW35+Rb/8
Nc/+8fT5i+fHzyL6XxzHJpmRxiZpE0WXZWPxG5Y1r6sVafVqTTapdoaGNKkt
CrNekllxYHdalXgxL21mMnuXp/Rx7kyRr/KGPpptTbO0Jsvnc1vbsiH5aTZV
fWsamy7LihiR0wuts9k4wuj6fHJHViOZFdacX126SXSzpDFp3e0KY2TWpWQn
6cWELFtSunVVNyASv3vRW9H5el14El/VVVOlVWH2IaojejZpMLPrcUZs9ANz
jHfneWFHvMa84RWbNKGXJ0K+VZ4RtaPoCSldU1dZK/T78iTv/Xkf0Ub+/gV+
+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

-->

</rfc>
