<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-conditional-attributes-13" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <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-13"/>
    <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="July" day="06"/>
    <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 MAY 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, 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>Hannes Tschofenig and Mert Ocak highlighted syntactical corrections in the usage of pmax and pmin in a query. David Navarro proposed allowing for pmax to be equal to pmin. Jaime Jiménez, Marco Tiloca and Ines Robles provided extensive reviews. Suggestions from Klaus Hartke aided greatly in clarifying how conditional parameters work with CoAP Observe. Security considerations were improved based on authors' observations in <xref section="2.2" sectionFormat="of" target="I-D.irtf-t2trg-amplification-attacks"/>.</t>
    </section>
    <section numbered="false" anchor="changelog" removeInRFC="true">
      <name>Changelog</name>
      <t>draft-ietf-core-conditional-attributes-13
* Added support for discovery with "if=" interface type
* Clarified no-op handling of unsupported parameters
* Minor corrections and clarifications</t>
      <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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
7htu0Pv/Pg1jT1C/AAA=

-->

</rfc>
