<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<!-- You want a table of contents -->
<?rfc symrefs="yes"?>
<!-- Use symbolic labels for references -->
<?rfc sortrefs="yes"?>
<!-- This sorts the references -->
<?rfc iprnotified="no" ?>
<!-- Change to "yes" if someone has disclosed IPR for the draft -->
<?rfc compact="yes"?>
<rfc category="std" docName="draft-zhu-anima-lightweight-grasp-01"
     ipr="pre5378Trust200902">
  <front>
    <title abbrev="LW-GRASP">Lightweight GeneRic Autonomic Signaling
    Protocol</title>

    <author fullname="Longwei Zhu" initials="L." surname="Zhu">
      <organization abbrev="BUPT">Beijing University of Posts and
      Telecommunications</organization>

      <address>
        <postal>
          <street>No. 10 Xitucheng Road</street>

          <city>Haidian District, Beijing</city>

          <country>China</country>
        </postal>

        <email>lwzhu@bupt.edu.cn</email>
      </address>
    </author>

    <author fullname="Sheng Jiang" initials="S." surname="Jiang">
      <organization abbrev="BUPT">Beijing University of Posts and
      Telecommunications</organization>

      <address>
        <postal>
          <street>No. 10 Xitucheng Road</street>

          <city>Haidian District, Beijing</city>

          <country>China</country>
        </postal>

        <email>shengjiang@bupt.edu.cn</email>
      </address>
    </author>

    <area>Operations and Management</area>

    <workgroup>ANIMA</workgroup>

    <abstract>
      <t>This document proposes the UDP-based Lightweight GeneRic Autonomic
      Signaling Protocol (LW-GRASP), which is designed to be a lightweight
      version of the GeneRic Autonomic Signaling Protocol(GRASP, or the
      standard GRASP), with shortened messages and a built-in reliability
      mechanism. LW-GRASP can work reliably over UDP, making it suitable for
      the IoT, where lightweight and resource-constrained devices dominate.
      Furthermore, this document also discusses the potential way to adapt the
      LW-GRASP to work on the network without IP connectivity.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>In the IoT that has developed rapidly in recent years, the
      traditional centralized and human-centered network management methods
      have gradually shown defects such as low efficiency and high operating
      costs due to the growth in the number, heterogeneity, diversity, and the
      increasingly uncertain distribution of devices. Autonomic Network<xref
      target="RFC8993"/> empowers networks and devices with self-management
      capabilities, enabling them to self-configure, self-optimize,
      self-recover, and self-protect without human intervention, effectively
      improving the stability and reliability of the network, which meets the
      development needs and trends of the IoT and is essential for
      implementing IoT applications such as smart homes, smart cities, and
      industrial IoT.</t>

      <t>As a new network management solution for TCP/IP networks, the
      Autonomic Network does not intend to break the existing IP-based network
      architecture. So does the GRASP<xref target="RFC8990"/>, the signaling
      protocol in the Autonomic Network. While located between the transport
      layer and the application layer, GRASP provides reliable and efficient
      services for nodes in the Autonomic Network, like parameter discovery,
      exchange, and negotiation, based on the TCP/IP protocols. Since it does
      not provide reliability mechanisms such as error detection,
      retransmission, and flow control<xref target="RFC8990"/>, GRASP must
      depend on the reliability mechanisms provided by the transport layer,
      particularly its synchronization and negotiation procedures based on one
      or more round(s) of message interaction. It is specified in <xref
      target="RFC8990"/> that GRASP unicast messages MUST use the reliable
      transport layer protocol, e.g., TCP.</t>

      <t>However, the reliability provided by TCP is not free. GRASP must
      tolerate the inevitable additional latency, control overhead, and memory
      consumption caused by complex reliability mechanisms of TCP, e.g., the
      resource consumption and control overhead associated with establishing,
      maintaining, and closing TCP connections. In addition, the size of the
      TCP/IP stack on which GRASP relies and the memory resources required to
      run it are not negligible, e.g., running a standard full TCP/IP stack
      requires at least tens to hundreds of KBs of data and code memory, and
      even TCP/IP stacks specifically designed and implemented for
      resource-constrained devices require tens of KBs of memory. However, the
      resource-constrained device typically has only about 50KB of memory<xref
      target="RFC7228"/>. Obviously, in the IoT networks dominated by
      resource-constrained devices with limited CPU, memory, and power
      resources, the resource footprint of the TCP/IP stack and its execution,
      especially the TCP, is likely to be a limiting factor in the deployment
      of the Autonomic Network and GRASP. Therefore, making GRASP lightweight
      and removing its dependence on TCP or even IP is of great significance
      for the deployment and promotion of GRASP in the IoT. In addition,
      considering the generally short length of interaction messages between
      IoT nodes, it is also necessary to shorten the length of GRASP messages
      with the best efforts, especially the control fields, which can also
      reduce the overhead of nodes in processing, parsing, and sending GRASP
      messages.</t>

      <t>Considering the demand for self-management and the
      resource-constrained feature of IoT devices, this document proposes the
      UDP-based Lightweight GRASP (LW-GRASP). By reducing the length of fixed
      fields, and adding a built-in reliability mechanism with the
      acknowledgment and retransmission capability, LW-GRASP can provide
      reliable signaling services without relying on TCP. In addition, to
      better address the need for self-management of the IoT, the possible
      IP-independent extension is discussed, which can extend the use of
      LW-GRASP to networks without IP connectivity.</t>
    </section>

    <section anchor="requirements" title="Requirements">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
      "SHALL&nbsp;NOT", "SHOULD", "SHOULD&nbsp;NOT", "RECOMMENDED",
      "NOT&nbsp;RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
      interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
      target="RFC8174"/> when, and only when, they appear in all capitals, as
      shown here.</t>
    </section>

    <section anchor="reliability-mechannism"
             title="Built-in reliability mechanism">
      <t>LW-GRASP is designed to be UDP-based to avoid the additional control
      overhead and memory consumption caused by TCP, thus matching the
      capabilities of IoT nodes. Meanwhile, to ensure reliability, the
      LW-GRASP introduces a message-oriented built-in reliability
      mechanism.</t>

      <t>LW-GRASP uses the 16-bit random number called Nonce to implement the
      acknowledgment and retransmission mechanism for messages to avoid
      interaction failures caused by message losses. However, as discussed in
      <xref target="lw-grasp-msg"/>, not all LW-GRASP messages require
      acknowledgment, such as multicast messages. The LW-GRASP messages that
      require acknowledgment are referred to in this document as confirmable
      messages, and the others that do not require acknowledgment are referred
      to as non-confirmable messages. The transmission of confirmable messages
      MUST use the reliability mechanism defined in this section, while
      non-confirmable messages do not.</t>

      <section anchor="reliable-transmission"
               title="Reliable transmission for confirmable LW-GRASP messages">
        <t>When sending a confirmable message, the LW-GRASP sender MUST
        generate a 16-bit random Nonce and append the Nonce to the message.
        Upon receipt of a confirmable message, the receiver MUST acknowledge
        immediately using the same Nonce as that of the received, or wait for
        a post-order message in the same direction and piggyback acknowledge
        with this message within the LW_GRASP_ACK_DELAYED_TIME. The latter is
        the delayed acknowledgment, if there is no corresponding message to be
        sent within the LW_GRASP_ACK_DELAYED_TIME, an ACK message MUST be sent
        immediately. LW-GRASP defines two new options, i.e., the REQ-ACK
        option and the ACK option. The REQ-ACK option is used to carry the
        Nonce generated by LW-GRASP for a specific confirmable message and
        MUST be added to this message as an option. The ACK option also
        contains a Nonce for acknowledging a corresponding confirmable
        message, which MUST be added as an option to an ACK message (immediate
        acknowledgment) or a post-order message in the same direction (delayed
        acknowledgment). The REQ-ACK option, the ACK option, and the ACK
        message are defined in <xref target="req-ack-option"/>, <xref
        target="ack-option"/>, and <xref target="lw-grasp-msg"/>,
        respectively.</t>

        <t>The Nonce can be regarded as the unique identifier of a confirmable
        message before it is acknowledged. Thus, the LW-GRASP nodes MUST avoid
        Nonce conflicts among unacknowledged confirmable messages.
        Specifically, the Nonce SHOULD be generated by a pseudo-random number
        generator (PRNG) based on the locally generated unique seed to avoid
        the conflict of Nonce generated by different nodes in the same
        network. Meanwhile, the LW-GRASP instance SHOULD create and maintain a
        Nonce cache to record the Nonce used by confirmable messages. After
        generating a Nonce for a message, the LW-GRASP MUST check whether it
        conflicts with an existing entry in the Nonce cache, and if it
        doesn't, it SHOULD record the Nonce in the cache. Otherwise, the Nonce
        for the confirmable message MUST be regenerated. After the GRASP node
        receives a message with an ACK option(or more than one ACK option), it
        SHOULD first extract the Nonce from it and check whether there is a
        corresponding entry with the same Nonce value in the Nonce cache; if
        not, the received message SHOULD be directly ignored. Otherwise, the
        GRASP node SHOULD mark the Nonce entry as acknowledged and delete it
        when the corresponding LW-GRASP session is completed. It is worth
        emphasizing that confirmable messages marked as acknowledged SHOULD
        also be considered by the aforementioned Nonce conflict detection.</t>

        <t>The LW-GRASP sender MUST set the retransmission timer when sending
        a confirmable message; see <xref target="retransmission-timeout"/> for
        details on setting the timeout. If the LW-GRASP confirmable message
        does not get an acknowledgment within the retransmission timeout, then
        the message MUST be retransmitted. The retransmission message SHOULD
        keep the Nonce the same as the original message. However, when a
        confirmable message has been accepted and processed by the receiver
        but is retransmitted due to lost acknowledgment, the LW-GRASP can not
        identify the retransmission message and will repeatedly process it,
        which can be dangerous. Thus, the LW-GRASP receiver SHOULD record and
        cache the Nonces of confirmable messages that have been received and
        processed for each LW-GRASP session until it is completed and check
        whether the Nonce of each arriving message conflicts with the cached
        Nonces, if it doesn't, then accept and process it. Otherwise, which
        means the message is a retransmission message, LW-GRASP SHOULD discard
        it and send acknowledgment, to avoid duplicated processing of the
        retransmission and original messages due to the loss of the
        acknowledgment.</t>

        <t>The delayed acknowledgment mechanism can reduce the communication
        cost caused by the ACK message, but its waiting time may cause
        unnecessary delay, which reduces the efficiency of communication. In
        the actual LW-GRASP implementation, users SHOULD be allowed to enable
        or completely disable delayed acknowledgment according to their
        needs.</t>
      </section>

      <section anchor="retransmission-timeout"
               title="Retransmission and retransmission timeout">
        <t>The retransmission timeout for reliable transmission of LW-GRASP
        messages is LW_GRASP_RETRANS_TIMEOUT. If the LW-GRASP message is not
        acknowledged within the retransmission timeout and the number of
        retransmissions does not reach MAX_RETRANS, the message MUST be
        retransmitted and the retransmission timer SHOULD be reset, the
        retransmission timeout SHOULD be incremented to twice, and the number
        of retransmissions SHOULD be incremented by 1. If the LW-GRASP message
        is not acknowledged within the retransmission timeout and the number
        of retransmissions exceeds MAX_RETRANS, the retransmission MUST be
        discarded, and the transmission fails.</t>
      </section>
    </section>

    <section anchor="lw-grasp-definition" title="Lightweight GRASP definition">
      <t>LW-GRASP has made modifications to the standard GRASP by reducing the
      fixed fields and introducing a message-oriented built-in reliability
      mechanism with the acknowledgment and retransmission capability based on
      Nonce. To achieve this, LW-GRASP redefines the Objective option in
      standard GRASP as the LW-Objective option and defines a new message
      named ACK message, along with two new options named REQ-ACK option and
      ACK option. However, LW-GRASP does not modify the discovery,
      negotiation, synchronization, and flooding procedures, as well as the
      defined options (except for the Objective option) of the standard GRASP.
      In addition, LW-GRASP still adheres to the High-Level Deployment Model
      and High-Level Design defined for GRASP, so as not to affect the
      signaling service provided by the protocol. In order to differentiate
      from standard GRASP, LW-GRASP instances SHOULD listen for messages using
      a new well-known port, LW_GRASP_LISTEN_PORT (TBD1).</t>

      <section anchor="lw-grasp-msg-format"
               title="Lightweight GRASP message format">
        <t>Like standard GRASP, LW-GRASP messages continue to be transmitted
        in Concise Binary Object Representation (CBOR)<xref target="RFC8949"/>
        and be described using Concise Data Definition Language (CDDL)<xref
        target="RFC8610"/>. The session-id in the LW-GRASP message is
        shortened from 32 bits to 16 bits to minimize the length of the
        message, while the meanings of the other fields are still consistent
        with the standard GRASP message. In fragmentary CDDL, a LW-GRASP
        message follows the pattern:<figure>
            <artwork><![CDATA[
 lw-grasp-message = (message .within message-structure) / noop-message
 message-structure = [LW_MESSAGE_TYPE, session-id, ?initiator,
                      *lw-grasp-option]
 LW_MESSAGE_TYPE = 0..255
 session-id = 0..65535 ; up to 16 bits
 lw-grasp-option = any
 ]]></artwork>
          </figure></t>
      </section>

      <section anchor="lw-grasp-option" title="Lightweight GRASP option">
        <section anchor="lw-objective-option" title="LW-Objective option">
          <t>In fragmentary CDDL, a LW-GRASP Objective option follows the
          pattern:<figure>
              <artwork><![CDATA[
 lw-objective = [objective-num, objective-flags, loop-count, 
                 ?objective-value]
 objective-num = 0..255
 objective-value = any
 loop-count = 0..255
 objective-flags = uint .bits objective-flag
 objective-flag = &(
     F_DISC:    0; valid for discovery
     F_NEG:     1; valid for negotiation
     F_SYNCH:   2; valid for synchronization
     F_NEG_DRY: 3; negotiation is a dry run
 )
 ]]></artwork>
            </figure>Instead of using the text string with indefinite length
          (i.e., objective-name) as the unique identifier for the Objective
          option, the LW-Objective option is uniquely identified by an 8-bit
          number (i.e., objective-num), with the remaining fields keeping
          consistent with the Objective option in standard GRASP. The first
          two bits of objective-num indicate the LW-Objective type (00, 01,
          and 10 stand for generic LW-Objective; 11 stands for privately
          defined LW-Objective), and represent the number of LW-Objective
          together with the remaining six bits. Each generic LW-Objective MUST
          be assigned a unique objective number and be made public to all
          LW-GRASP nodes when it's registered. When a private LW-Objective is
          defined, it MUST also be assigned a uniquely distinguishable
          objective number and be made public within the specific private
          domain.</t>

          <t>In LW-GRASP, the identifier of the LW-Objective option is changed
          from the text string with indefinite length to the 8-bit number,
          which can minimize the length of the LW-Objective option, and also
          can avoid the additional communication cost caused by excessively
          long objective-name text strings, and the overhead of byte-by-byte
          comparison and identification of objective-name in the standard
          GRASP.</t>
        </section>

        <section anchor="req-ack-option" title="REQ-ACK option">
          <t>The REQ-ACK option is used to indicate that the message MUST be
          acknowledged by the receiver. When a message needs acknowledgment
          (i.e., the confirmable message), the sender MUST generate the
          REQ-ACK option and add it to the message to request the receiver to
          acknowledge. The REQ-ACK option MUST NOT be allowed to appear in the
          non-confirmable message (like the Discovery message and the Flood
          Synchronization message) to avoid a large number of ACK messages in
          a short time. In fragmentary CDDL, a REQ-ACK option follows the
          pattern:<figure>
              <artwork><![CDATA[ 
 req-ack-option = [O_REQ_ACK, Nonce]
 Nonce = 0..65535
 ]]></artwork>
            </figure>Nonce is a 16-bit random number and MUST avoid local
          conflicts. The Nonce generation and conflict prevention mechanisms
          are described in <xref target="reliable-transmission"/>.</t>
        </section>

        <section anchor="ack-option" title="ACK option">
          <t>LW-GRASP also defines an ACK option for acknowledging messages
          carrying a REQ-ACK option. Upon receiving a message with the REQ-ACK
          option, as specified in <xref target="reliable-transmission"/>, the
          LW-GRASP receiver MUST either promptly send an ACK message with a
          corresponding ACK option; or wait a while for a post-order message
          in the same direction to be sent and add the ACK option to that
          message to piggyback acknowledge. The ACK option MUST only be
          allowed to appear in confirmable messages, as discussed in <xref
          target="lw-grasp-msg"/>. In fragmentary CDDL, an ACK option follows
          the pattern:</t>

          <t><figure>
              <artwork><![CDATA[
 ack-option = [O_ACK, Nonce]
 Nonce = 0..65535; same as the req-ack option
 ]]></artwork>
            </figure>Where, the Nonce MUST be the same as the Nonce in the
          corresponding REQ-ACK option.</t>
        </section>
      </section>

      <section anchor="lw-grasp-msg" title="Lightweight GRASP message">
        <t>LW-GRASP reserves all the message types and values of the standard
        GRASP, as well as the definitions of each related field. LW-GRASP
        extends its unicast messages to allow them to carry the REQ-ACK option
        or the ACK option, enabling LW-GRASP to implement a built-in
        reliability mechanism.</t>

        <t>All unicast messages used in the three procedures of discovery,
        negotiation, and synchronization of LW-GRASP MUST be acknowledged to
        ensure the reliability and operational efficiency of the interactions.
        At the same time, these unicast messages are allowed to carry zero or
        more ACK option(s) to acknowledge the confirmable message belonging to
        the same or different interaction session(s). In addition, Invalid
        messages are used to respond to invalid messages and contain related
        diagnostic information which if lost may affect the subsequent message
        interactions, thus its acknowledgment is necessary and MUST carry a
        REQ-ACK option. Similarly, the Invalid message can also carry zero or
        more ACK option(s) for acknowledgment.</t>

        <t>The Discovery message and Flood Synchronization message that is
        multicast, as well as the NOOP message that does not contain actual
        information, are not allowed to carry the REQ-ACK option or the ACK
        option, i.e., non-confirmable message, whose definition is the same as
        the standard GRASP and will not be repeated here. The CDDL definitions
        for messages with extension( i.e. the confirmable message) for
        reliability are defined as follows:<figure>
            <artwork><![CDATA[
 response-message = [M_RESPONSE, session-id, initiator, ttl,
                     req-ack-option, *ack-option,
                    (+locator-option // divert-option), ?objective]
 ttl = 0..4294967295 ; in milliseconds
 
 request-negotiation-message = [M_REQ_NEG, session-id, req-ack-option,
                                *ack-option, objective]
 
 request-synchronization-message = [M_REQ_SYN, session-id,
                                    req-ack-option,
                                    *ack-option, objective]
 
 negotiation-message = [M_NEGOTIATE, session-id, req-ack-option,
                        *ack-option,objective]
 
 end-message = [M_END, session-id, req-ack-option, *ack-option,
                accept-option / decline-option]
 
 wait-message = [M_WAIT, session-id, req-ack-option, *ack-option,
                 waiting-time]
 waiting-time = 0..4294967295 ; in milliseconds
 
 synch-message = [M_SYNCH, session-id, req-ack-option, *ack-option,
                  objective]
 
 invalid-message = [M_INVALID, session-id, req-ack-option, *ack-option,
                    ?any]
 ]]></artwork>
          </figure>In addition, LW-GRASP defines an ACK message for immediate
        acknowledgment. In fragmentary CDDL, an ACK message follows the
        pattern:<figure>
            <artwork><![CDATA[
 ack-message = [M_ACK, ack-option]
 ]]></artwork>
          </figure>The Nonce in the ACK option must be the same as the
        corresponding REQ-ACK option.</t>
      </section>

      <section anchor="lw-grasp-constants" title="Lightweight GRASP constants">
        <t><list style="symbols">
            <t>LW_GRASP_LISTEN_PORT(TBD1)<vspace blankLines="1"/>A well-known
            UDP user port that every LW-GRASP-enabled network device MUST
            listen to for UDP-based messages.</t>

            <t>LW_GRASP_ACK_DELAYED_TIME(200 milliseconds)<vspace
            blankLines="1"/>The default maximum waiting time for delayed
            acknowledgment.</t>

            <t>LW_GRASP_RETRANS_TIMEOUT(2000 milliseconds)<vspace
            blankLines="1"/>The default timeout is used to determine that a
            LW-GRASP confirmable message needs to be resent.</t>

            <t>MAX_RETRANS(3)<vspace blankLines="1"/>The default maximum times
            of retransmission for confirmable messages.</t>
          </list> In addition, the constants for LW-GRASP also contain the
        ALL_LW_GRASP_NEIGHBORS, LW_GRASP_DEF_TIMEOUT, LW_GRASP_DEF_LOOPCT,
        LW_GRASP_DEF_MAX_SIZE, whose definitions and values are respectively
        same as the ALL_GRASP_NEIGHBORS, GRASP_DEF_TIMEOUT, GRASP_DEF_LOOPCT,
        GRASP_DEF_MAX_SIZE in GRASP<xref target="RFC8990"/>.</t>
      </section>
    </section>

    <section anchor="ip-indepent" title="IP-independent discussion">
      <t>In some IoT scenarios where the need for self-management is urgent,
      resource-constrained devices in it may not or choose not to support IP
      connectivity. Therefore, to improve the generality of LW-GRASP and
      better support the self-management requirements of the IoT, it is
      necessary to further discuss how LW-GRASP adapts to networks without the
      IP connection.</t>

      <section anchor="lw-grasp-adapts-to-non-IP"
               title="How LW-GRASP adapts to networks without IP">
        <t>The GRASP and its lightweight version LW-GRASP can only work in IP
        networks, due to the Locator options used by them. The Locator option
        is used to locate resources, services, devices, and interfaces on the
        network and is the basis for GRASP and LW-GRASP discovery,
        negotiation, and synchronization procedures. All the four Locator
        options defined in <xref target="RFC8990"/> have unique identification
        capabilities only within an IP network: O_IPv6_LOCATOR,
        O_IPv4_LOCATOR, O_FQDN_LOCATOR, O_URI_LOCATOR, which respectively
        depend on the IPv6 address, IPv4 address, Fully Qualified Domain Name
        (FQDN), and Uniform Resource identifier (URI) for identification and
        location.</t>

        <t>Therefore, to enable the LW-GRASP to work without the IP connection
        and provide services to LW-GRASP-enabled nodes, it's necessary to
        select an identifier(such as the MAC address in the Ethernet) based on
        the environment and define a new Locator option in the LW-GRASP to
        identify and locate a device, interface, resource, or service that can
        remove dependence of the LW-GRASP on IP.</t>

        <t>Using LW-GRASP without the IP connection requires not only the
        definition of new Locator options but also the identification of
        LW-GRASP so that network nodes and devices can recognize LW-GRASP
        messages encapsulated in specific bearer protocol messages. For
        example, <xref target="RFC8990"/> designs GRASP as a user program,
        using a well-known port to identify GRASP messages. In practice, the
        protocol identification of LW-GRASP should be chosen and extended by
        the bearer protocol on which it depends, which is out of the scope of
        this document.</t>
      </section>

      <section anchor="lw-grasp-over-ble"
               title="An example: Exchange LW-GRASP over BLE">
        <t>In the IoT, where the need for self-management is more urgent, the
        memory, energy, and computation overheads associated with IP
        connectivity and transmission may be unacceptable for its
        resource-constrained devices. In addition, considering the episodic
        feature of information interactions between IoT devices, some
        resource-constrained devices may prefer to use low-power and
        low-bandwidth network connections based on technologies such as
        Bluetooth Low Energy and Zigbee rather than IP connections. This
        section discusses how LW-GRASP adapts to BLE environments without IP
        connectivity.</t>

        <t>The core protocol used to establish and manage communication
        between devices in BLE is the Generic Attribute Profile (GATT, Volume
        3 PART G in <xref target="BTCorev5.4"/>), which defines how data is
        transferred between two BLE devices based on the concepts of Services
        and Characteristics. In BLE, data is transferred and stored in the
        form of Characteristics, and the Service is a collection of
        Characteristics, both identified by a unique numeric ID called UUID.
        GATT is at the top layer of the BLE stack and can provide API
        interfaces directly to the upper-layer applications, so it is possible
        to discuss the LW-GRASP-over-GATT to exchange LW-GRASP over BLE.</t>

        <t>LW-GRASP-over-GATT can define and use one or more GATT
        Characteristic(s) to transport LW-GRASP messages. With the unique
        identification UUID of the GATT Characteristic, the device can easily
        recognize whether the transmitted data is a LW-GRASP message or not.
        Regarding address identification, BLE devices use a 48-bit device
        address as a device identifier<xref target="BTCorev5.4"/>. As
        described in <xref target="lw-grasp-adapts-to-non-IP"/>, the
        LW-GRASP-over-GATT should define and register a new Locator option
        based on this identifier.</t>

        <t>However, since the read/write semantics of the GATT characteristic
        do not fully match the semantics of the actions associated with the
        LW-GRASP interaction procedures, how to bridge this gap is an
        important step in realizing LW-GRASP-over-GATT. In addition, BLE
        provides both reliable ("write without response", "notify") and
        unreliable ("write with response", "indicate") data transmission, and
        how to choose between the two modes of data transmission for
        LW-GRASP-over-GATT needs to be carefully considered.</t>
      </section>
    </section>

    <section anchor="iana-considerations" title="IANA Considerations">
      <t>This document defines the Lightweight GeneRic Autonomic Signaling
      Protocol (LW-GRASP).</t>

      <t>As specified in <xref target="lw-grasp-constants"/>, the IANA is
      requested to assign a USER PORT(LW_GRASP_LISTEN_PORT, TBD1) for use by
      LW-GRASP over UDP.</t>

      <t>Like the standard GRASP, LW-GRASP also requires IANA to create the
      "Lightweight GeneRic Autonomic Signaling Protocol (LW-GRASP) Parameters"
      registry. The "Lightweight GeneRic Autonomic Signaling Protocol
      (LW-GRASP) Parameters" should also include two subregistries: "LW-GRASP
      Messages and Options" and "LW-GRASP Objective Numbers".</t>

      <t>The "LW-GRASP Messages and Options" MUST retain all the entries in
      the "GRASP Messages and Options" subregistry assigned for the standard
      GRASP, and MUST also add three entries for the new message named
      "M_ACK", and the two new options named "O_REQ_ACK" and "O_ACK", whose
      initial values assigned by this document are like the following:<figure>
          <artwork><![CDATA[ 
 M_ACK = 10
 O_REQ_ACK = 107
 O_ACK = 108
 ]]></artwork>
        </figure></t>

      <t>The initial numbers for the "LW-GRASP Objective Numbers" subregistry
      assigned by this document are like the following:<figure>
          <artwork><![CDATA[ 
 0-9 for Experimental
 10-255 Unassigned
 ]]></artwork>
        </figure></t>
    </section>

    <section anchor="sec-considerations" title="Security Considerations">
      <t>As a lightweight version of GRASP, LW-GRASP must attach importance to
      the security considerations of GRASP discussed in <xref
      target="RFC8990"/>. In addition, given the limited capabilities and weak
      tamper resistance of constrained nodes, as well as their possible
      exposure to insecure environments, security issues associated with
      constrained nodes must not be ignored by the external secure
      infrastructure (e.g., the ACP) on which the LW-GRASP is based, e.g., the
      constrained code space and CPU for implementing cryptographic
      primitives.</t>
    </section>
  </middle>

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

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

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

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

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

      <reference anchor="BTCorev5.4"
                 target="https://www.bluetooth.com/specifications/specs/core-specification-5-4/">
        <front>
          <title>BLUETOOTH CORE SPECIFICATION Version 5.4</title>

          <author fullname="">
            <organization>Bluetooth Special Interest Group</organization>
          </author>

          <date day="31" month="January" year="2023"/>
        </front>
      </reference>
    </references>

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

      <?rfc include='reference.RFC.8993'?>
    </references>
  </back>
</rfc>
