<?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.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-conditional-attributes-14" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Conditional Query Parameters for CoAP Observe">Conditional Query Parameters for CoAP Observe</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-14"/>
    <author initials="B." surname="Silverajan" fullname="Bilhanan Silverajan">
      <organization>Tampere University</organization>
      <address>
        <postal>
          <street>Kalevantie 4</street>
          <city>Tampere</city>
          <code>33100</code>
          <country>Finland</country>
        </postal>
        <email>bilhanan.silverajan@tuni.fi</email>
      </address>
    </author>
    <author initials="M." surname="Koster" fullname="Michael Koster">
      <organization>Dogtiger Labs</organization>
      <address>
        <postal>
          <street>524 H Street</street>
          <city>Antioch, CA</city>
          <code>94509</code>
          <country>USA</country>
        </postal>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Soloway" fullname="Alan Soloway">
      <organization>Qualcomm Technologies, Inc.</organization>
      <address>
        <postal>
          <street>5775 Morehouse Drive</street>
          <city>San Diego</city>
          <code>92121</code>
          <country>USA</country>
        </postal>
        <email>asoloway@qti.qualcomm.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="14"/>
    <area>Applications</area>
    <workgroup>CoRE Working Group</workgroup>
    <abstract>
      <?line 74?>

<t>This specification defines Conditional Notification and Control Query Parameters compatible with CoAP Observe (RFC7641).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-conditional-attributes/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        core Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/conditional-attributes"/>.</t>
    </note>
  </front>
  <middle>
    <?line 78?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>IETF Standards for Internet of Things (IoT) communication in constrained environments define the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, a RESTful application protocol, as well as a set of related information standards that may be used to represent machine data and machine metadata in REST interfaces.</t>
      <t>This specification defines Conditional Notification and Control Parameters for use with CoAP Observe <xref target="RFC7641"/>.</t>
    </section>
    <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.
<?line -6?>
      </t>
      <t>This specification requires readers to be familiar with all the terms and concepts that are discussed in <xref target="RFC7252"/> and <xref target="RFC7641"/>.  This specification makes use of the following additional terminology:</t>
      <dl>
        <dt>Notification Band:</dt>
        <dd>
          <t>A resource value range that  may be bounded by a minimum and maximum value or may be unbounded having either a minimum or maximum value.</t>
        </dd>
        <dt>"xs:boolean" and "xs:decimal" types:</dt>
        <dd>
          <t>Data types from XML Schema <xref target="W3C.REC-xmlschema-2-20041028"/>, used in this document to describe boolean and scalar values in CoAP resources. The "xs:" prefix notation is used solely for type indication and does not imply the use of XML or XML Schema in protocol encoding.</t>
        </dd>
      </dl>
    </section>
    <section anchor="conditional_parameters">
      <name>Conditional Query Parameters</name>
      <t>This specification defines conditional query parameters (or more simply, "conditional parameters" in this document) for use with CoRE Observe <xref target="RFC7641"/>. Conditional parameters provide fine-grained control of notification and synchronization of resource states. A CoAP client conveys conditional parameters as metadata using the query component of a CoAP URI. A conditional parameter can be represented as a "name=value" query parameter or simply a "name" without a value. A conditional parameter can be one of two kinds: A conditional notification parameter, or a conditional control parameter. Multiple conditional parameters in a query component are separated with an ampersand "&amp;". Support for conditional parameters is OPTIONAL and is determined on a per-resource basis. A resource that is observable MAY support the conditional parameters defined in this document. A resource that supports them MAY advertise this using the "core.conditional" interface type.</t>
      <t>This specification also defines conditional query parameters as parameters that apply to scalar and boolean values in CoAP resources. While complex data structures (e.g., SenML, CBOR arrays, or other structured formats) are commonly used in IoT systems, this document does not provide explicit guidance on how conditional parameters should interact with these formats.</t>
      <t>This specification assumes that there are finite quantization effects in the internal or external updates to the value representing the state of a resource; specifically, that a resource state may be updated at any time with any valid value. We therefore avoid any continuous-time assumptions in the description of the conditional parameters and instead use the phrase "sampled value" to refer to a member of a sequence of values that may be internally observed from the resource state over time.</t>
      <section anchor="overview">
        <name>Overview</name>
        <t>If a CoAP client is interested in obtaining all the state representations of a resource from a CoAP server as they change, the client is able to do so by using CoAP Observe. If a CoAP client is instead interested in receiving only state representations fulfilling certain constraints (such as a minimum/maximum value), it can do so by indicating conditional parameters as query parameters in its request to a CoAP server, when registering its interest in observing a resource.</t>
        <t>The usage of conditional parameters employs the notion of resource state projection. This is an idea that aligns with established practices employed by RESTful API designs that allow clients to retrieve specific representations or subsets of a resource’s data, enhancing efficiency and flexibility.</t>
        <t>In constrained environments, CoAP clients can employ resource state projections as a technique to reduce unnecessary data transfer in constrained environments. By using Observe with query parameters, the client requests the server to project a new state from the current resource representation and deliver only a subset of updates, based on the received requests. When a server receives a request containing conditional query parameters from a client, the server maintains a projected resource state separate from a resource state requested without conditional query parameters.</t>
        <t>The mechanism can be explained in the following subsections in terms of registration, operation and cancellation.</t>
      </section>
      <section anchor="advertising-support-for-conditional-parameters">
        <name>Advertising Support for Conditional Parameters</name>
        <t>A resource that supports the conditional parameters MAY advertise this by including the interface description <xref target="RFC6690"/> "core.conditional" as a target attribute (if="core.conditional") in its link description. A client that
discovers this interface type on a resource can therefore use conditional parameters with that resource.</t>
        <t>The "core.conditional" interface type MAY be used together with other target attributes, including a resource type ("rt=") and the observable attribute ("obs") <xref target="RFC7641"/>. For example:</t>
        <artwork><![CDATA[
</temperature>;rt="core.s";if="core.conditional";obs
]]></artwork>
        <t>Advertising the "core.conditional" interface type is OPTIONAL. A resource MAY support the conditional parameters defined in this document without advertising this interface type; for example, the applicable interpretation of the query component may be established by another specification or by the context in
which the resource is used. Conversely, advertising this interface type does not by itself guarantee that any particular conditional parameter is supported; a resource that advertises it handles conditional parameters it does not support as described in <xref target="server-processing"/>.</t>
        <t>This document does not define a mechanism for discovering which individual conditional parameters a resource supports; such fine-grained discovery can be defined in future specifications.</t>
      </section>
      <section anchor="registration">
        <name>Registration</name>
        <t>In this example, three CoAP endpoints are shown: Clients A and B are interested in obtaining updates to state representations describing the current CO2 level, provided by a CoAP Server.</t>
        <t>In <xref target="fig-reg-client-a"/>, Client A uses CoAP Observe to register its interest in receiving all updates to the CO2 resource state from the Server.</t>
        <figure anchor="fig-reg-client-a">
          <name>Client A registers and receives one notification of the current state and one state update.</name>
          <artwork><![CDATA[
ClientA         ClientB                   Server
   │               │                        │
   │               │                     ( CO2 )
   │ GET /CO2      │                        │
   │ Token: 0x42   │                        │
   │ Observe: 0    │                        │
   +───────────────┼───────────────────────>│
   │               │                        │
   │               │                        │
   │               │           2.05 Content │
   │               │            Token: 0x42 │
   │               │            Observe: 12 │
   │               │         Payload: "600" │
   │<──────────────┼────────────────────────+
   │               │                        │
   │               │                        │
   │               │           2.05 Content │
   │               │            Token: 0x42 │
   │               │            Observe: 23 │
   │               │         Payload: "800" │
   │<──────────────┼────────────────────────+
   │               │                        │

]]></artwork>
        </figure>
        <t>Client B, on the other hand is interested in receiving only a subset of updates from the Server. In <xref target="fig-reg-client-b"/>, Client B is depicted using CoAP Observe with a conditional parameter to register its interest in receiving specific updates to the CO2 resource state from the Server. The Server provides a representation of the current state and creates a new state projection registering Client B's interest.</t>
        <figure anchor="fig-reg-client-b">
          <name>Client B registers with conditional parameters, and receives one notification of the current state and a state projection is created.</name>
          <artwork><![CDATA[
ClientA         ClientB                   Server
   │               │                        │
   │               │                     ( CO2 )
   │               │                        │
   │               │                        │
   │               │ GET /CO2?c.gt=1000     │
   │               │ Token: 0x66            │
   │               │ Observe: 0             │
   │               +───────────────────────>│
   │               │                        │
   │               │           2.05 Content │
   │               │            Token: 0x66 │
   │               │            Observe: 20 │      Resource State
   │               │         Payload: "800" │        Projection
   │               │<───────────────────────+    ..................
   │               │                        +--->. /CO2?c.gt=1000 .
   │               │                        │    ..................
   │               │                        │             .
   │               │                        │             .
   │               │                        │             .

]]></artwork>
        </figure>
      </section>
      <section anchor="operation">
        <name>Operation</name>
        <t>In subsequent interactions for providing state updates, the Server will continue to provide all state updates to Client A, while Client B receives state updates fulfilling the conditions specified by the conditional parameter.</t>
        <figure anchor="fig-operation">
          <name>Clients A and B receiving CO2 state updates from the Server, without and with conditional parameters, respectively.</name>
          <artwork><![CDATA[
ClientA         ClientB                   Server
   │               │                        │
   │               │                     ( CO2 )
   │               │                        │
   │               │                        │      Resource State
   │               │                        │        Projection
   │               │                        │    ..................
   │               │                        +--->. /CO2?c.gt=1000 .
   │               │                        │    ..................
   │               │                        │             .
   │               │           2.05 Content │             .
   │               │            Token: 0x42 │             .
   │               │            Observe: 29 │             .
   │               │        Payload: "1000" │             .
   │<──────────────┼────────────────────────+             .
   │               │                        │             .
   │               │           2.05 Content │             .
   │               │            Token: 0x66 │             .
   │               │            Observe: 23 │             .
   │               │        Payload: "1100" │             .
   │               │<───────────────────────┤-------------+
   │               │                        │             .
   │               │           2.05 Content │             .
   │               │            Token: 0x42 │             .
   │               │            Observe: 33 │             .
   │               │        Payload: "1100" │             .
   │<──────────────┼────────────────────────+             .
   │               │                        │             .

]]></artwork>
        </figure>
      </section>
      <section anchor="cancellation">
        <name>Cancellation</name>
        <t>A client that wishes to cancel an existing registration can do so in accordance with Section 3.6 of <xref target="RFC7641"/>. If a client wishes to explicitly cancel an existing registration by issuing a GET request, it MUST also additionally supply the original URI containing the conditional parameters that was conveyed to the server during the registration. This is depicted in <xref target="fig-cancellation"/> for Client B.</t>
        <figure anchor="fig-cancellation">
          <name>Client B explicitly cancelling an existing registration.</name>
          <artwork><![CDATA[
ClientA         ClientB                   Server
   │               │                        │
   │               │                     ( CO2 )
   │               │                        │
   │               │                        │      Resource State
   │               │                        │        Projection
   │               │                        │    ..................
   │               │                        +--->. /CO2?c.gt=1000 .
   │               │                        │    ..................
   │               │                        │             .
   │               │                        │             .
   │               │ GET /CO2?c.gt=1000     │             .
   │               │ Token: 0x66            │             .
   │               │ Observe: 1             │             .
   │               +────────────────────────┤------------>.             
   │               │                        │             .
   │               │                        │             .
   │               │           2.05 Content │             .
   │               │            Token: 0x66 │             .
   │               │         Payload: "900" │             .
   │               │<───────────────────────┤-------------+
   │               │                        │              
   │               │                        │              
   │               │                        │              

]]></artwork>
        </figure>
      </section>
      <section anchor="conditional-notification-parameters">
        <name>Conditional Notification Parameters</name>
        <t>Conditional Notification Parameters define the conditions that trigger a notification. Conditional Notification Parameters SHOULD be evaluated on all potential notifications from a resource, whether resulting from an internal server-driven sampling process or from external update requests to the server.</t>
        <t>The set of Conditional Notification Parameters defined here allows a client to control how often a notification is received and how much a representation state should change in order to trigger a notification. One or more Conditional Notification Parameters MAY be included in an Observe request.</t>
        <t>Conditional Notification Parameters are defined below:</t>
        <table anchor="notificationparameters">
          <name>Conditional Notification Parameters</name>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Name</th>
              <th align="left">Value Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Greater Than</td>
              <td align="left">c.gt</td>
              <td align="left">xs:decimal</td>
            </tr>
            <tr>
              <td align="left">Less Than</td>
              <td align="left">c.lt</td>
              <td align="left">xs:decimal</td>
            </tr>
            <tr>
              <td align="left">Change Step</td>
              <td align="left">c.st</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Notification Band</td>
              <td align="left">c.band</td>
              <td align="left">(none)</td>
            </tr>
            <tr>
              <td align="left">Edge</td>
              <td align="left">c.edge</td>
              <td align="left">xs:boolean</td>
            </tr>
          </tbody>
        </table>
        <section anchor="gt">
          <name>Greater Than (c.gt)</name>
          <t>When present, Greater Than indicates the upper limit value the sampled value SHOULD cross before triggering a notification. A notification is sent whenever the sampled value crosses the specified upper limit value, relative to the last reported value, and the time for "c.pmin" has elapsed since the last notification. The sampled value is sent in the notification. If the value continues to rise, no notifications are generated as a result of "c.gt". If the value drops below the upper limit value then a notification is sent, subject again to the "c.pmin" time.</t>
          <t>The Greater Than parameter MUST be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="lt">
          <name>Less Than (c.lt)</name>
          <t>When present, Less Than indicates the lower limit value the resource value SHOULD cross before triggering a notification. A notification is sent whenever the sampled value crosses the specified lower limit value, relative to the last reported value, and the time for "c.pmin" has elapsed since the last notification. The sampled value is sent in the notification. If the value continues to fall no notifications are generated as a result of "c.lt". If the value rises above the lower limit value then a new notification is sent, subject to the "c.pmin" time.</t>
          <t>The Less Than parameter MUST be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="st">
          <name>Change Step (c.st)</name>
          <t>When present, Change step indicates how much the value representing a resource state SHOULD change before triggering a notification, compared to the previous resource state. Upon reception of a query including the "c.st" parameter, the current resource state representing the most recently sampled value is reported, and then set as the last reported value (last_rep_v). When a subsequent sampled value or update of the resource state differs from the last reported state by an amount, positive or negative, greater than or equal to "c.st", and the time for "c.pmin" has elapsed since the last notification, a notification is sent and the last reported value is updated to the new resource state sent in the notification. The change step MUST be greater than zero, otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request".</t>
          <t>The Change Step parameter MUST be supported on resources with a scalar numeric value.</t>
          <t>Note: due to sampling and other constraints, e.g., "c.pmin", the change in resource states received in two sequential notifications may differ by more than "c.st".</t>
        </section>
        <section anchor="band">
          <name>Notification Band (c.band)</name>
          <t>The Notification Band parameter allows a bounded or unbounded (based on a minimum or maximum) value range that may trigger multiple notifications. This enables use cases where different ranges result in differing behaviour. For example, in monitoring the temperature of machinery, whilst the temperature is in the normal operating range, only periodic updates are needed. However as the temperature moves to more abnormal ranges, more frequent state updates may be sent to clients.</t>
          <t>Without a notification band, a transition across a Less Than (c.lt), or Greater Than (c.gt) limit only generates one notification.  This means that it is not possible to describe a case where multiple notifications are sent so long as the limit is exceeded.</t>
          <t>The "c.band" parameter works as a modifier to the behaviour of "c.gt" and "c.lt". Its use is determined only by its presence, as this parameter takes no value. Therefore, if "c.band" is present in a query, "c.gt", "c.lt", or both, MUST be included.</t>
          <t>When "c.band" is present with "c.lt" but without "c.gt", the lower bound for the notification band (notification band minimum) is defined. Notifications occur when the resource value is equal to or above the notification band minimum. No maximum values exist for the band.</t>
          <t>When "c.band" is present with "c.gt" but without "c.lt", the upper bound for the notification band (notification band maximum) is defined. Notifications occur when the resource value is equal to or below the notification band maximum. No minimum values exist for the band.</t>
          <t>If "c.band" is specified and the value of "c.gt" is less than that of "c.lt", in-band notification occurs. That is, notification occurs whenever the resource value is between the "c.gt" and "c.lt" values, including equal to "c.gt" or "c.lt".</t>
          <t>If "c.band" is specified and the value of "c.gt" is greater than that of "c.lt", out-of-band notification occurs. That is, notification occurs when the resource value is not between the "c.gt" and "c.lt" values, excluding equal to "c.gt" and "c.lt".</t>
          <t>The Notification Band parameter MUST be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="edge">
          <name>Edge (c.edge)</name>
          <t>When present, the Edge parameter indicates interest for receiving notifications of either the falling edge or the rising edge transition of a boolean resource state. When the value of the "c.edge" parameter is 0 (False), the server notifies the client each time a resource state changes from True to False. When the value of the "c.edge" parameter is 1 (True), the server notifies the client each time a resource state changes from False to True.</t>
          <t>The "c.edge" parameter MUST be supported on resources with a boolean value.</t>
        </section>
      </section>
      <section anchor="conditional-control-parameters">
        <name>Conditional Control Parameters</name>
        <t>Conditional Control Parameters define the time intervals between consecutive notifications as well as the cadence of the evaluation of the conditions that trigger a notification. Conditional Control Parameters can be used to configure the internal server-driven sampling process for performing evaluations of the conditions of a resource. One or more Conditional Control Parameters MAY be included in an Observe request.</t>
        <t>Conditional Control Parameters are defined below:</t>
        <table anchor="controlparameters">
          <name>Conditional Control Parameters</name>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Name</th>
              <th align="left">Value Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Minimum Period (s)</td>
              <td align="left">c.pmin</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Maximum Period (s)</td>
              <td align="left">c.pmax</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Minimum Evaluation Period (s)</td>
              <td align="left">c.epmin</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Maximum Evaluation Period (s)</td>
              <td align="left">c.epmax</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Confirmable Notification</td>
              <td align="left">c.con</td>
              <td align="left">xs:boolean</td>
            </tr>
          </tbody>
        </table>
        <section anchor="pmin">
          <name>Minimum Period (c.pmin)</name>
          <t>When present, Minimum Period indicates the minimum time, in seconds, between two consecutive notifications (whether or not the resource state has changed). The value is a floating-point number, allowing for sub-second precision (e.g., 0.5 for half a second or 0.01 for 10 milliseconds). If a server does not support sub-second intervals, it MAY round the value up to the nearest supported resolution. In the absence of this parameter, the minimum period is up to the server. Minimum Period MUST be greater than zero, otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request".</t>
          <t>A server MAY update the resource state with the last sampled value that occurred during the "c.pmin" interval, after the "c.pmin" interval expires.</t>
          <t>Note: due to finite quantization effects, the time between notifications may be greater than "c.pmin" even when the sampled value changes within the "c.pmin" interval. "c.pmin" may or may not be used to drive the internal sampling process.</t>
        </section>
        <section anchor="pmax">
          <name>Maximum Period (c.pmax)</name>
          <t>When present, Maximum Period indicates the maximum time, in seconds, between two consecutive notifications (regardless of whether or not the resource state has changed). The value is a floating-point number, allowing for sub-second precision (e.g., 0.5 for half a second or 0.01 for 10 milliseconds). If a server does not support sub-second intervals, it MAY round the value up to the nearest supported resolution. In the absence of this parameter, the maximum period is up to the server. Maximum Period MUST be greater than zero and MUST be greater than or equal to Minimum Period (if present), otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request".</t>
        </section>
        <section anchor="epmin">
          <name>Minimum Evaluation Period (c.epmin)</name>
          <t>When present, Minimum Evaluation Period indicates the minimum time, in seconds, the client recommends to the server to wait between two consecutive evaluations of the conditions of a resource, since the client has no interest in the server doing more frequent evaluations. The value is a floating-point number, allowing for sub-second precision (e.g., 0.5 for half a second or 0.01 for 10 milliseconds). If a server does not support sub-second intervals, it MAY round the value up to the nearest supported resolution. When the value of Minimum Evaluation Period expires after the previous evaluation, the server MAY immediately perform a new evaluation. In the absence of this parameter, the minimum evaluation period is not defined and thus not used by the server. The server MAY use "c.pmin", if defined, as a guidance on the desired evaluation cadence. Minimum Evaluation Period MUST be greater than zero, otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request".</t>
        </section>
        <section anchor="epmax">
          <name>Maximum Evaluation Period (c.epmax)</name>
          <t>When present, Maximum Evaluation Period indicates the maximum time, in seconds, the server MAY wait between two consecutive evaluations of the conditions of a resource. The value is a floating-point number, allowing for sub-second precision (e.g., 0.5 for half a second or 0.01 for 10 milliseconds). If a server does not support sub-second intervals, it MAY round the value up to the nearest supported resolution. When the value of Maximum Evaluation Period expires after the previous evaluation, the server MUST immediately perform a new evaluation. In the absence of this parameter, the maximum evaluation period is not defined and thus not used by the server. Maximum Evaluation Period MUST be greater than zero and MUST be greater than Minimum Evaluation Period (if present), otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request".</t>
        </section>
        <section anchor="con">
          <name>Confirmable Notification (c.con)</name>
          <t>When present with a value of 1 (True), Confirmable Notification indicates that a notification MUST be confirmable, i.e., the server MUST send the notification in a confirmable CoAP message, to request an acknowledgement from the client. When present with a value of 0 (False), Confirmable Notification indicates a notification can be confirmable or non-confirmable, i.e., it can be sent in a confirmable or a non-confirmable CoAP message.</t>
        </section>
      </section>
      <section anchor="server-processing">
        <name>Server processing of Conditional Parameters</name>
        <t>Conditional Notification Parameters and Conditional Control Parameters may be present in the same query. However, they are not defined at multiple prioritization levels. The server sends a notification whenever any of the parameter conditions are met, upon which it updates its last notification value and time to prepare for the next notification. When Conditional Notification Parameters and Conditional Control Parameters are present in the same query, notifications may be subjected to the presence of a Conditional Control Parameter such as "c.pmin" or "c.pmax". Only one notification occurs when there are multiple conditions being met at the same time. As a general example, the pseudocode illustrated in <xref target="pseudocode"/> shows one way to determine when a notification is to be sent.</t>
        <t>A resource that receives a conditional parameter it does not support MUST treat that parameter as having
no effect on the observation, and MUST process the remainder of the request as usual. Such a request MUST NOT be rejected solely because a conditional parameter is not supported. For example, if a client sends "GET /temp?c.gt=25&amp;c.newthing=5" (Observe), and the server supports "c.gt" but does not support "c.newthing", the server returns the usual "2.05 Content" with an Observe option after successfully processing the request, exactly as if only "c.gt" had been sent.</t>
      </section>
    </section>
    <section anchor="Implementation">
      <name>Implementation Considerations</name>
      <t>If a conditional parameter is provided with an inappropriate data type (e.g., "c.edge=10" where "c.edge" is expected to be boolean), the server MUST reject the request with 4.00 Bad Request.</t>
      <t>When "c.pmax" and "c.pmin" are equal, the expected behaviour is that notifications will be sent every (c.pmin == c.pmax) seconds. However, these notifications can only be fulfilled by the server on a best effort basis. Because "c.pmin" and "c.pmax" are designed as acceptable tolerance bounds for sending state updates, a query from an interested client containing equal "c.pmin" and "c.pmax" values must not be seen as a hard real-time scheduling contract between the client and the server.</t>
      <t>The use of the notification band minimum and maximum allows for a synchronization whenever a change in the resource value occurs. Theoretically, this could occur in-line with the server internal sample period or as defined by the "c.epmin" and "c.epmax" values for determining the resource value. Implementors SHOULD consider the resolution needed before updating the resource, e.g., updating the resource when a temperature sensor value changes by 0.001 degree versus 1 degree.</t>
      <t>When a server has multiple observations with different measurement cadences as defined by the "c.epmin" and "c.epmax" values, the server MAY evaluate all observations when performing the measurement of any one observation.</t>
      <t>An implementation might choose to apply conditions like c.gt or c.lt to the v (value) field in SenML-based resources. However, this behavior is not defined in this document. Implementers are encouraged to consider how such formats may be adapted in their specific deployments. Future extensions or additional mechanisms may provide explicit guidance on supporting conditional parameters for complex data structures as well as data structures having multiple records.</t>
      <t>This specification defines conditional parameters that can be used with CoAP Observe relationships between CoAP clients and CoAP servers. However, it is recognised that the presence of one or more proxies between a client and a server can interfere with clients receiving resource updates, if a proxy does not supply resource representations when the value remains unchanged (e.g., if "c.pmax" is set, and the server sends multiple updates when the resource state contains the same value). A server SHOULD use the Max-Age option to mitigate this, by setting Max-Age to be less than or equal to "c.pmax".</t>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The security considerations in <xref section="11" sectionFormat="of" target="RFC7252"/> apply.</t>
      <t>Additionally, the security considerations in <xref section="7" sectionFormat="of" target="RFC7641"/> also apply, particularly towards mitigating amplification attacks.</t>
      <t>As noted in <xref section="2.2" sectionFormat="of" target="I-D.irtf-t2trg-amplification-attacks"/>, an attacker could craft GET requests combining observations with conditional parameters such as c.pmax or c.epmax with values that are below a minimum implementation-specific threshold. If a server receives such a request and is unwilling to register the observer client, the server MAY silently ignore the registration request and process the GET request as usual.  The resulting response MUST NOT include an Observe Option, the absence of which signals to the client that it will not be added to the list of observers by the server.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA:</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <t>This document establishes the "Conditional parameters" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      <t>Each entry in the registry must include:</t>
      <ul spacing="normal">
        <li>
          <t>Name: This is the human-readable name and description of the conditional parameter,</t>
        </li>
        <li>
          <t>Parameter: This is the short name, as used in query parameters,</t>
        </li>
        <li>
          <t>Value Type: The value type of the parameter (if any),</t>
        </li>
        <li>
          <t>Reference: The link to reference documentation, which must give details describing the conditional notification or control parameter and how it is to be processed.</t>
        </li>
      </ul>
      <t>Initial entries in this subregistry are as follows:</t>
      <table anchor="conditionalparameters-registry">
        <name>New Conditional Parameters registry</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Parameter</th>
            <th align="left">Value Type</th>
            <th align="left">Change Controller</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Minimum Period (s)</td>
            <td align="left">c.pmin</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Maximum Period (s)</td>
            <td align="left">c.pmax</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Minimum Evaluation Period (s)</td>
            <td align="left">c.epmin</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Maximum Evaluation Period (s)</td>
            <td align="left">c.epmax</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Confirmable Notification</td>
            <td align="left">c.con</td>
            <td align="left">xs:boolean</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Greater Than</td>
            <td align="left">c.gt</td>
            <td align="left">xs:decimal</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Less Than</td>
            <td align="left">c.lt</td>
            <td align="left">xs:decimal</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Change Step</td>
            <td align="left">c.st</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Notification Band</td>
            <td align="left">c.band</td>
            <td align="left">(none)</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Edge</td>
            <td align="left">c.edge</td>
            <td align="left">xs:boolean</td>
            <td align="left">IETF</td>
            <td align="left">RFC XXXX</td>
          </tr>
        </tbody>
      </table>
      <t>The IANA policy for future additions to the subregistry is Expert Review, as described in <xref target="RFC8126"/>. The evaluation of a registration
request should consider the following points:</t>
      <ul spacing="normal">
        <li>
          <t>Clarity and correctness of registrations. Experts are expected to check the clarity of purpose and use of the new conditional parameters and associated query parameters, which have to be clearly defined in the corresponding reference documentation. Conditional parameters that do not meet these objectives of clarity and completeness MUST NOT be registered.</t>
        </li>
        <li>
          <t>Point squatting is to be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that a new conditional parameter is likely to be used in deployments and is not going to duplicate one that is already registered. To reduce the potential for conflict with commonly used query parameter names, it is strongly recommended that new entry names be prepended with "c." (such as entries described in <xref target="conditionalparameters-registry"/>).</t>
        </li>
      </ul>
      <t>This document also registers the following entry in the "Interface Description (if=) Link Target Attribute Values" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      <table anchor="conditionalparameters-interface">
        <name>Interface Type for Conditional Parameters Support</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">core.conditional</td>
            <td align="left">Advertisement of support for conditional parameters</td>
            <td align="left">RFC XXXX</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <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="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="W3C.REC-xmlschema-2-20041028" target="https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/">
          <front>
            <title>XML Schema Part 2: Datatypes Second Edition</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <date day="28" month="October" year="2004"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/>
          <seriesInfo name="W3C" value="REC-xmlschema-2-20041028"/>
        </reference>
        <reference anchor="RFC2119">
          <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">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.irtf-t2trg-amplification-attacks">
          <front>
            <title>Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
              <organization>Energy Harvesting Solutions</organization>
            </author>
            <date day="18" month="June" year="2025"/>
            <abstract>
              <t>   Protecting Internet of Things (IoT) devices against attacks is not
   enough.  IoT deployments need to make sure that they are not used for
   Distributed Denial-of-Service (DDoS) attacks.  DDoS attacks are
   typically done with compromised devices or with amplification attacks
   using a spoofed source address.  This document gives examples of
   different theoretical amplification attacks using the Constrained
   Application Protocol (CoAP).  The goal with this document is to raise
   awareness and to motivate generic and protocol-specific
   recommendations on the usage of CoAP.  Some of the discussed attacks
   can be mitigated by not using NoSec or by using the Echo option.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-amplification-attacks-05"/>
        </reference>
      </references>
    </references>
    <?line 455?>

<section anchor="pseudocode">
      <name>Pseudocode: Processing Conditional Parameters</name>
      <t>This appendix is informative. It describes the possible logic of how a server processes conditional parameters to determine when to send a notification to a client.</t>
      <t>Note: The pseudocode is not exhaustive nor should it be treated as reference code. It depicts a subset of the conditional parameters described in this specification.</t>
      <figure anchor="figattrint">
        <name>Pseudocode showing the logic for processing conditional parameters</name>
        <artwork><![CDATA[
// struct Resource {
//
//  bool band;
//  int pmin;
//  int pmax;
//  int epmin;
//  int epmax;
//  int st;
//  int gt;
//  int lt;
//  
//  time_t last_sampled_time;
//  time_t last_rep_time;

//  int curr_state;
//  int prev_state;   
//
//  ...
//
// };


boolean is_notifiable( Resource * r ) {

  time_t curr_time = get_current_time();

  #define BAND_EXISTS ( r->band )

  #define LT_EXISTS ( r->lt )
  #define GT_EXISTS ( r->gt )
   
  #define EPMIN_TRUE ( curr_time - r->last_sampled_time >= r->epmin )
  #define EPMAX_TRUE ( curr_time - r->last_sampled_time > r->epmax )
    
  #define PMIN_TRUE ( curr_time - r->last_reported_time >= r->pmin )
  #define PMAX_TRUE ( curr_time - r->last_reported_time > r->pmax )

  #define LT_TRUE ( r->curr_state < r->lt ^ r->prev_state < r->lt )
  #define GT_TRUE ( r->curr_state > r->gt ^ r->prev_state > r->gt )

  #define ST_TRUE ( abs( r->curr_state - r->prev_state ) >= r->st )

  #define INBAND_TRUE ( gt < lt && \\
                       (gt <= curr_state && curr_state <= lt ))
  #define OUTOFBAND_TRUE ( lt < gt && \\
                           (gt < curr_state || curr_state < lt ))
    
  #define BANDMIN_TRUE ( r->lt <= r->curr_state)
  #define BANDMAX_TRUE (r->curr_state <= r->gt)


  if PMAX_TRUE {
        return true;
  }
    
  if PMIN_TRUE {
      if !BAND_EXISTS {
          if LT_TRUE || GT_TRUE || ST_TRUE {
              return true;
          }
      }
      else {
       if ( (BANDMIN_TRUE && !GT_EXISTS) || \
            (BANDMAX_TRUE && !LT_EXISTS) || \
             INBAND_TRUE || \
             OUTOFBAND_TRUE ) {
           return true;
       }
      }
  }

  return false;
    
}

]]></artwork>
      </figure>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This appendix is informative. It provides some examples of the use of Conditional Parameters.</t>
      <t>Note: For brevity, only the method or response code is shown in the header field.</t>
      <section anchor="minimum-period-cpmin-example">
        <name>Minimum Period (c.pmin) example</name>
        <figure anchor="figbindexp1">
          <name>Client registers and receives one notification of the current state and one of a new state state when c.pmin time expires.</name>
          <artwork><![CDATA[
        Observed   CLIENT  SERVER     Actual
    t   State         |      |         State
        ____________  |      |  ____________
    1                 |      |
    2    unknown      |      |     18.5 Cel
    3                 +----->|                  Header: GET
    4                 | GET  |                   Token: 0x4a
    5                 |      |                Uri-Path: temperature
    6                 |      |               Uri-Query: c.pmin="10"
    7                 |      |                 Observe: 0 (register)
    8                 |      |
    9   ____________  |<-----+                  Header: 2.05
   10                 | 2.05 |                   Token: 0x4a
   11    18.5 Cel     |      |                 Observe: 9
   12                 |      |                 Payload: "18.5"
   13                 |      |  ____________
   14                 |      |
   15                 |      |     23 Cel
   16                 |      |
   17                 |      |
   18                 |      |
   19                 |      |  ____________
   20   ____________  |<-----+                  Header: 2.05
   21                 | 2.05 |     26 Cel        Token: 0x4a
   22    26 Cel       |      |                 Observe: 20
   23                 |      |                 Payload: "26"
   24                 |      |
   25                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="maximum-period-cpmax-example">
        <name>Maximum Period (c.pmax) example</name>
        <figure anchor="figbindexp2">
          <name>Client registers and receives one notification of the current state, one of a new state and one of an unchanged state when c.pmax time expires.</name>
          <artwork><![CDATA[
        Observed   CLIENT  SERVER     Actual
    t   State         |      |         State
        ____________  |      |  ____________
    1                 |      |
    2    unknown      |      |     18.5 Cel
    3                 +----->|                  Header: GET
    4                 | GET  |                   Token: 0x4a
    5                 |      |                Uri-Path: temperature
    6                 |      |               Uri-Query: c.pmax="20"
    7                 |      |                 Observe: 0 (register)
    8                 |      |
    9   ____________  |<-----+                  Header: 2.05
   10                 | 2.05 |                   Token: 0x4a
   11    18.5 Cel     |      |                 Observe: 9
   12                 |      |                 Payload: "18.5"
   13                 |      |
   14                 |      |
   15                 |      |  ____________
   16   ____________  |<-----+                  Header: 2.05
   17                 | 2.05 |     23 Cel        Token: 0x4a
   18    23 Cel       |      |                 Observe: 16
   19                 |      |                 Payload: "23"
   20                 |      |
   21                 |      |
   22                 |      |
   23                 |      |
   24                 |      |
   25                 |      |
   26                 |      |
   27                 |      |
   28                 |      |
   29                 |      |
   30                 |      |
   31                 |      |
   32                 |      |
   33                 |      |
   34                 |      |   
   35                 |      |
   36                 |      |  ____________
   37   ____________  |<-----+                  Header: 2.05
   38                 | 2.05 |     23 Cel        Token: 0x4a
   39    23 Cel       |      |                 Observe: 37
   40                 |      |                 Payload: "23"
   41                 |      |
   42                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="greater-than-cgt-example">
        <name>Greater Than (c.gt) example</name>
        <figure anchor="figbindexp3">
          <name>Client registers and receives one notification of the current state and one of a new state when it passes through the greater than threshold of 25.</name>
          <artwork><![CDATA[
     Observed   CLIENT  SERVER     Actual
 t   State         |      |         State
     ____________  |      |  ____________
 1                 |      |
 2    unknown      |      |     18.5 Cel
 3                 +----->|                  Header: GET 
 4                 | GET  |                   Token: 0x4a
 5                 |      |                Uri-Path: temperature
 6                 |      |               Uri-Query: c.gt=25
 7                 |      |                 Observe: 0 (register)
 8                 |      |
 9   ____________  |<-----+                  Header: 2.05 
10                 | 2.05 |                   Token: 0x4a
11    18.5 Cel     |      |                 Observe: 9
12                 |      |                 Payload: "18.5"
13                 |      |                 
14                 |      |
15                 |      |  ____________
16   ____________  |<-----+                  Header: 2.05 
17                 | 2.05 |     26 Cel        Token: 0x4a
18    26 Cel       |      |                 Observe: 16
29                 |      |                 Payload: "26"
20                 |      |                 
21                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="greater-than-cgt-and-period-max-cpmax-example">
        <name>Greater Than (c.gt) and Period Max (c.pmax) example</name>
        <figure anchor="figbindexp4">
          <name>Client registers and receives one notification of the current state, one when c.pmax time expires, and one of a new state when it passes through the greater than threshold of 25.</name>
          <artwork><![CDATA[
     Observed   CLIENT  SERVER     Actual
 t   State         |      |         State
     ____________  |      |  ____________
 1                 |      |
 2    unknown      |      |     18.5 Cel
 3                 +----->|                  Header: GET 
 4                 | GET  |                   Token: 0x4a
 5                 |      |                Uri-Path: temperature
 6                 |      |         Uri-Query: c.pmax=20&c.gt=25
 7                 |      |                 Observe: 0 (register)
 8                 |      |
 9   ____________  |<-----+                  Header: 2.05 
10                 | 2.05 |                   Token: 0x4a
11    18.5 Cel     |      |                 Observe: 9
12                 |      |                 Payload: "18.5"
13                 |      |                 
14                 |      |
15                 |      |
16                 |      |
17                 |      |
18                 |      |
19                 |      |
20                 |      |
21                 |      |
22                 |      |
23                 |      |
24                 |      |
25                 |      |
26                 |      |
27                 |      |
28                 |      |
29                 |      |  ____________
30   ____________  |<-----+                  Header: 2.05
31                 | 2.05 |     23 Cel        Token: 0x4a
32    23 Cel       |      |                 Observe: 30
33                 |      |                 Payload: "23"
34                 |      |                 
35                 |      |
36                 |      |  ____________
37   ____________  |<-----+                  Header: 2.05 
38                 | 2.05 |     26 Cel        Token: 0x4a
39    26 Cel       |      |                 Observe: 37
40                 |      |                 Payload: "26"
41                 |      |                 
42                 |      |
]]></artwork>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank Christian Amsüss, Carsten Bormann, Esko Dijk, Klaus Hartke, Jaime Jiménez, John Mattsson, David Navarro, Mert Ocak, Ines Robles, Marco Tiloca and Hannes Tschofenig for discussions, feedback and reviews of this document.</t>
    </section>
    <section numbered="false" anchor="changelog" removeInRFC="true">
      <name>Changelog</name>
      <t>draft-ietf-core-conditional-attributes-14</t>
      <ul spacing="normal">
        <li>
          <t>Minor edits for clarification and language</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-13</t>
      <ul spacing="normal">
        <li>
          <t>Added support for discovery with "if=" interface type</t>
        </li>
        <li>
          <t>Clarified no-op handling of unsupported parameters</t>
        </li>
        <li>
          <t>Minor corrections and clarifications</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-12</t>
      <ul spacing="normal">
        <li>
          <t>Added "xs:boolean" and "xs:decimal" types in Terminology</t>
        </li>
        <li>
          <t>Added avoidance of complex data structures in Section 3</t>
        </li>
        <li>
          <t>Extra text regarding resource state projection in Section 3.1</t>
        </li>
        <li>
          <t>Implementation Considerations now discusses SenML as well as if= interface descriptions.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-11</t>
      <ul spacing="normal">
        <li>
          <t>Title of the document changed, and conditional attributes are now called conditional query parameters for accuracy.</t>
        </li>
        <li>
          <t>Clarifying decimal support for conditional control parameters.</t>
        </li>
        <li>
          <t>Text for error handling of type mismatches added</t>
        </li>
        <li>
          <t>Editorial fixes</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-10</t>
      <ul spacing="normal">
        <li>
          <t>Rectifying text and a table column in IANA Considerations, that version -09 erroneously omitted.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-09</t>
      <ul spacing="normal">
        <li>
          <t>IANA Considerations section updated</t>
        </li>
        <li>
          <t>Editorial and formatting fixes</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-08</t>
      <ul spacing="normal">
        <li>
          <t>Various editorial fixes and corrections based on review comments on mailing list from Marco Tiloca.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-07</t>
      <ul spacing="normal">
        <li>
          <t>Expanded how conditional attributes work with Observe in sections 3.1 to 3.4</t>
        </li>
        <li>
          <t>Addressed early review from IoT Directorate</t>
        </li>
        <li>
          <t>Security Considerations section expanded</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-06</t>
      <ul spacing="normal">
        <li>
          <t>Removed code block from Section 3.5</t>
        </li>
        <li>
          <t>Added an appendix containing pseudocode for server processing.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-05</t>
      <ul spacing="normal">
        <li>
          <t>Multiple (mostly editorial) clarifications and updates based on review comments on mailing list from Marco Tiloca.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-04</t>
      <ul spacing="normal">
        <li>
          <t>Reference code updated to include behaviour for edge attribute.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-03</t>
      <ul spacing="normal">
        <li>
          <t>Attribute names updated to create uniqueness for use as conditional observe attributes.</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-02</t>
      <ul spacing="normal">
        <li>
          <t>Clarifications on usage and value of the band parameter</t>
        </li>
        <li>
          <t>Implementation considerations for proxies added</t>
        </li>
        <li>
          <t>Security considerations added</t>
        </li>
        <li>
          <t>IANA considerations added</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-01</t>
      <ul spacing="normal">
        <li>
          <t>Clarifications on True and False values for Edge and Con Attributes</t>
        </li>
        <li>
          <t>Alan Soloway added as author</t>
        </li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-00</t>
      <ul spacing="normal">
        <li>
          <t>Conditional Atttributes section from draft-ietf-core-dynlink-13 separated into own WG draft</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="C." surname="Groves" fullname="Christian Groves">
        <organization/>
        <address>
          <postal>
            <country>Australia</country>
          </postal>
          <email>cngroves.std@gmail.com</email>
        </address>
      </contact>
      <contact initials="Z." surname="Shelby" fullname="Zach Shelby">
        <organization>ARM</organization>
        <address>
          <postal>
            <city>Vuokatti</city>
            <country>Finland</country>
          </postal>
          <email>zach.shelby@arm.com</email>
        </address>
      </contact>
      <contact initials="M." surname="Vial" fullname="Matthieu Vial">
        <organization>Schneider-Electric</organization>
        <address>
          <postal>
            <city>Grenoble</city>
            <country>France</country>
          </postal>
          <email>matthieu.vial@schneider-electric.com</email>
        </address>
      </contact>
      <contact initials="J." surname="Zhu" fullname="Jintao Zhu">
        <organization>Huawei</organization>
        <address>
          <postal>
            <city>Xi’an, Shaanxi Province</city>
            <country>China</country>
          </postal>
          <email>jintao.zhu@huawei.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
q2T7PdNruje2zjAuOAtf0393P53cE0eKJ7nf6upXXPv6+9YL8Q1B9ACPYajt
3Y5p4BGN6GjrXXchqfG93jU0n78ukvFLWS0O/BgP6uN+89O+PrCL36FVeKA9
rA+HuztD6uOTjefh35y3Zaw15sCf9nZCrx+IFnI/58rUrXYWyBjJh413d1qf
fM8lvjeA8i5RikH4hqt7QC33epfUeuHdJAIjEVh323TVT8+7XYTE/9Dra0hl
b99Q824/QdDrflzT6/VY3H1wgyXtIdZui/K9rv3toXzvvsWmaKF8b6/1yfUo
39uhpuuQ1vhxON+7TxjfW4/EvX4kBqJrioG+F6vdRkXzD3JnLLk/3e2lOtEb
jVF97ELar8nKRpnXl6L8s9Bo/PwDCA158XC497PQ6Fndjyw03ldMtEQOUsGt
oduFfp8/76/hzyxlgk+uh+7u/WslUOPH48/7QyuRuhv3yhzvdT9mr5Ec7ykb
BMmyta/XS/W99dtsrx+m+Hp/PdT210Ntfz3U9tdDbb8faoLvE9lfD7j9dayu
uSP2EYy33RH7XUDedEfsP2h9cv2O2P8Em97tR0/rRWtH3F2PvLtrkNehsex9
QI1l1KWu+FpM5oWiNtQYedFWY7pKsd5MhdlMf7mZ8rKZ5rIOSRvrLLdUWGCT
3V5deW9d5XaKCiWgDT6AhrKOb95WNxGD22smt1RL3kcnWWvFNn4G69STzXWT
WysmMIHr1JJes1HrJDezGUEnWSM8Wy9Cg3GNNtJ6MVinm3Rw4v2fwHYkdptg
hqu+b6PI6zmH0TaqvurQauxg714vN8ZhTLUF4OA3MDR/5tZ/N9y6bVDu7Xz0
M8cOl/S3z7EH69yM63yM6xyMa2y7dcxyLW9cZ7Sts9jWmWvrbLV1hto6K22d
ibZWxAS8Z//WLtdOK24j64UNvJuaLjuDNZZf60Vot6w3CsOfwTr7cHPj8NaW
IUzgOruwVyXRRuHNVBIwCm9pEYJKssYcbL0Y3NA4vPvBjcM+e2/0Y2gsgzug
NARlhkpcICcLqfjhL7P8lzoPUNbVArO+8SJxDmCW2VtxtCjw2lHo/nBZ/td/
ljDNI1mUeHXlIzw2zrKROC7f5uJx8oe3I/HbVNal+EYW1VtY7m8kru83yfK/
/m+m/gR/54sMtKSqKktMXnksz5JYPJdnssDCbs8wOPpFJKGbJ5gF+yrHi2Gw
zloR5eI0SfNIEoy+gVHh/WkZLfKZyhIuYIbhtXVJicAjMVMqxmg7jSWMtS1t
bpTNVEbwcPR8ms/FHawyZf666gDTu4NC4b0tSVbMIoBajKmB40RVszEGJY69
E/ixNFGc5Xj3LoZfP0sw1E3FWLKHghIxsjhI0Eph6FrO1WDznvex50NKZfMD
HinSmOpPcPBrMnuoS8FyGOPlSpmAcLoJIcvH+UrA0uNU12WqM1djzQUT2GXo
+HEuUYSh0f5iys3nv+fmP3TR/TrP3iUrDGnKlGd0SpGIOWDo0jaVZ7nJ5J71
5mhTmjvnhO5Dy+OLqsDSAxe0pWURBynIvPFW9o7zoPVkF9qvr5gCG87QIwxN
6fV+kjjgw0OHl5mGERSbwm4XYXeKzMkwGxuVrB1MIx227kI1XHtd1epcYEEK
FX7VjMjnEhiYhyijy4mlnEsEmUkn6Yu3bWWXldjBKcIdP+XacD7lUY7cMimX
soowCZETNRFjlCNJUeTJhboBke0MKLEOsMdTJqRzfjqXPYnytF4SjjtyPEcc
Yo5ZoYjo8c4DmnSm8rrEslLLpKJSQxvPZ+cBzqcrm7TUFKavXwvWLPkamqVO
KrgZCHY+HVBOYsEFDkNA+gkhXO7KXPXFfFNwsH2FQk4sZUKIooxZKv3ic+fN
qXfnkwFtwpWkGH0MSe6hU7y6idmYyQDmCpo8V9iMKKv2J3eZGxSUoyg4XUTP
n6b5JD8FEYVrzLEOF3zdlx9vsKDM5DZf1H2mNJQRMYc2TQEsb3kGjn/cc5wr
c6FYXrkcL2KaK/A0KudNNhcRoCQj1zZFDLbwckUAjaWB7Qbv5jweXergJ6GE
uwM/75XB5l1AaFLAXfEl4huYFGZ7ucFoLDFtigXni3jDRaRRgfxLsOyxuYSD
qo6FIfI6V9wj1RvMYm/g5K+95AY2PlZLJAwEt8BMg1t72sKnUWhBxwVSXQ7i
nj6xN74174kddb7beE273Wuie25wAXzJjFeLiDL/dDVBhxJUMg5BFRInIOSx
IB4LAKwGRQrq5hMivu8HKsIYlq2YXU6U2+wxvsww8xr0K/gOAc9lJfA+rvNM
fPs1Nxj8f+hka9rqvgAA

-->

</rfc>
