<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-core-comi-22" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="CORECONF">CoAP Management Interface (CORECONF)</title>

    <author initials="M." surname="Veillette" fullname="Michel Veillette" role="editor">
      <organization>Trilliant Networks Inc.</organization>
      <address>
        <postal>
          <street>610 Rue du Luxembourg</street>
          <city>Granby</city>
          <region>Quebec</region>
          <code>J2J 2V2</code>
          <country>Canada</country>
        </postal>
        <email>michel.veillette@trilliant.com</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok" role="editor">
      <organization>consultant</organization>
      <address>
        <phone>+31625097806</phone>
        <email>stokcons@kpnmail.nl</email>
        <uri>https://vanderstok.tech</uri>
      </address>
    </author>
    <author initials="A." surname="Pelov" fullname="Alexander Pelov" role="editor">
      <organization>IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Châtaigneraie</street>
          <city>Cesson-Sevigne</city>
          <code>35510</code>
          <country>France</country>
        </postal>
        <email>alexander.pelov@imt-atlantique.fr</email>
      </address>
    </author>
    <author initials="A." surname="Bierman" fullname="Andy Bierman">
      <organization>YumaWorks</organization>
      <address>
        <postal>
          <street>685 Cochran St.</street> <street>Suite #160</street>
          <city>Simi Valley</city>
          <region>CA</region>
          <code>93065</code>
          <country>USA</country>
        </postal>
        <email>andy@yumaworks.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>

    <date year="2026" month="November" day="02"/>

    <area>Web and Internet Transport</area>
    <workgroup>CoRE</workgroup>
    

    <abstract>


<?line 99?>

<t>This document describes a network management interface for constrained devices
and networks, called CoAP Management Interface (CORECONF). The Constrained Application
Protocol (CoAP) is used to access datastore and data node resources specified
in YANG, or SMIv2 converted to YANG. CORECONF uses the YANG to CBOR mapping and converts
YANG identifier strings to numeric identifiers for payload size reduction.
CORECONF extends the set of YANG based
protocols, NETCONF and RESTCONF, with the capability to manage constrained devices
and networks.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://core-wg.github.io/comi/draft-ietf-core-comi.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-comi/"/>.
      </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/comi"/>.</t>
    </note>


  </front>

  <middle>


<?line 110?>

<section anchor="introduction"><name>Introduction</name>

<t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> is designed for
Machine to Machine (M2M) applications such as smart energy, smart city, and building control.
Constrained devices need to be managed in an automatic fashion to handle
the large quantities of devices that are expected in
future installations. Messages between devices need to be as small and
infrequent as possible. The implementation
complexity and runtime resources need to be as small as possible.</t>

<t>This specification describes the CoAP Management Interface (CORECONF) which uses CoAP methods
to access structured data defined in YANG <xref target="RFC7950"/>. This specification is
complementary to <xref target="RFC8040"/> which describes a REST-like interface
called RESTCONF, which uses HTTP methods to access structured data
defined in YANG.</t>

<t>The use of standardized data models specified in a standardized language, such
as YANG, promotes interoperability between devices and applications from
different manufacturers.</t>

<t>CORECONF and RESTCONF are intended to work in a stateless client-server fashion.
They use a single round-trip to complete a single editing transaction, where
NETCONF needs multiple round trips.</t>

<t>To promote small messages, CORECONF uses a YANG to CBOR mapping
<xref target="RFC9254"/> and numeric identifiers <xref target="RFC9595"/>
to minimize CBOR payloads and URI length.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The following terms are defined in the YANG data modeling language <xref target="RFC7950"/>: action, anydata, anyxml, client, container, data model, data node, identity, instance identifier, leaf, leaf-list, list, module, RPC, schema node, server, submodule.</t>

<t>The following terms are defined in <xref target="RFC6241"/>: configuration data, datastore, state data.</t>

<t>The following term is defined in <xref target="RFC9595"/>: YANG schema item identifier (YANG SID, often shortened to simply SID).</t>

<t>The following terms are defined in the CoAP protocol <xref target="RFC7252"/>: Confirmable Message, Content-Format, Endpoint.</t>

<t>The following terms are defined in this document:</t>

<dl>
  <dt>data node resource:</dt>
  <dd>
    <t>a CoAP resource that models a YANG data node.</t>
  </dd>
  <dt>datastore resource:</dt>
  <dd>
    <t>a CoAP resource that models a YANG datastore.</t>
  </dd>
  <dt>event stream resource:</dt>
  <dd>
    <t>a CoAP resource used by clients to observe YANG notifications.</t>
  </dd>
  <dt>notification instance:</dt>
  <dd>
    <t>An instance of a schema node of type notification, specified in a YANG module
implemented by the server. The instance is generated in the server at the occurrence
of the corresponding event and reported by an event stream resource.</t>
  </dd>
  <dt>list instance identifier:</dt>
  <dd>
    <t>Handle used to identify a YANG data node that is an instance of a YANG "list",
specified with the values of the key leaves of the list.</t>
  </dd>
  <dt>single instance identifier:</dt>
  <dd>
    <t>Handle used to identify a specific data node which can be instantiated only
once. This includes data nodes defined at the root of a YANG module and
data nodes defined within a container. This excludes data nodes defined
within a list or any children of these data nodes.</t>
  </dd>
  <dt>instance-identifier:</dt>
  <dd>
    <t>List instance identifier or single instance identifier.</t>
  </dd>
  <dt>instance-value:</dt>
  <dd>
    <t>The value assigned to a data node instance. Instance-values are serialized into
the payload according to the rules defined in <xref section="4" sectionFormat="of" target="RFC9254"/>.
In a yang-instances data item, the reference SID applying to the
instance-value is provided by the SID in the corresponding instance-identifier.</t>
  </dd>
</dl>

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

<?line -18?>

</section>
<section anchor="example-syntax"><name>Example syntax</name>

<t>CBOR is used to encode CORECONF request and response payloads. The CBOR syntax
of the YANG payloads is specified in <xref target="RFC9254"/>, based on <xref target="RFC8949"/>
and <xref target="RFC8742"/>.
The payload examples are
notated in Diagnostic notation (defined in <xref section="8" sectionFormat="of" target="RFC8949"/> and
<xref section="G" sectionFormat="of" target="RFC8610"/>), which
can be automatically converted to CBOR.</t>

<t>The examples in this document use the YANG modules defined in <xref target="RFC7317"/> and <xref target="RFC8343"/> where these
contain the necessary nodes, and purpose-written modules where they do not. The SIDs
appearing in the examples are illustrative; the SIDs actually assigned to the
module defined by this document are given in <xref target="ietf-coreconf-sid"/>.</t>

</section>
</section>
<section anchor="comi-architecture"><name>CORECONF Architecture</name>

<t>This section describes the CORECONF architecture to use CoAP for reading and
modifying the content of datastore(s) used for the management of the instrumented
node.</t>

<figure title="Abstract CORECONF architecture" anchor="archit"><artset><artwork  type="svg" align="left"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="536" viewBox="0 0 536 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 8,112 L 8,144" fill="none" stroke="black"/>
<path d="M 8,192 L 8,272" fill="none" stroke="black"/>
<path d="M 80,144 L 80,184" fill="none" stroke="black"/>
<path d="M 128,192 L 128,272" fill="none" stroke="black"/>
<path d="M 256,64 L 256,104" fill="none" stroke="black"/>
<path d="M 320,192 L 320,368" fill="none" stroke="black"/>
<path d="M 336,256 L 336,288" fill="none" stroke="black"/>
<path d="M 336,320 L 336,352" fill="none" stroke="black"/>
<path d="M 440,144 L 440,184" fill="none" stroke="black"/>
<path d="M 512,256 L 512,288" fill="none" stroke="black"/>
<path d="M 512,320 L 512,352" fill="none" stroke="black"/>
<path d="M 528,32 L 528,64" fill="none" stroke="black"/>
<path d="M 528,112 L 528,144" fill="none" stroke="black"/>
<path d="M 528,192 L 528,368" fill="none" stroke="black"/>
<path d="M 8,32 L 528,32" fill="none" stroke="black"/>
<path d="M 8,64 L 528,64" fill="none" stroke="black"/>
<path d="M 8,112 L 528,112" fill="none" stroke="black"/>
<path d="M 8,144 L 528,144" fill="none" stroke="black"/>
<path d="M 8,192 L 128,192" fill="none" stroke="black"/>
<path d="M 320,192 L 528,192" fill="none" stroke="black"/>
<path d="M 128,208 L 152,208" fill="none" stroke="black"/>
<path d="M 296,208 L 312,208" fill="none" stroke="black"/>
<path d="M 136,224 L 152,224" fill="none" stroke="black"/>
<path d="M 296,224 L 320,224" fill="none" stroke="black"/>
<path d="M 136,254 L 168,254" fill="none" stroke="black"/><path d="M 136,258 L 168,258" fill="none" stroke="black"/>
<path d="M 288,254 L 312,254" fill="none" stroke="black"/><path d="M 288,258 L 312,258" fill="none" stroke="black"/>
<path d="M 336,256 L 512,256" fill="none" stroke="black"/>
<path d="M 8,272 L 128,272" fill="none" stroke="black"/>
<path d="M 336,288 L 512,288" fill="none" stroke="black"/>
<path d="M 336,320 L 512,320" fill="none" stroke="black"/>
<path d="M 336,352 L 512,352" fill="none" stroke="black"/>
<path d="M 320,368 L 528,368" fill="none" stroke="black"/>
<polygon class="arrowhead" points="448,184 436,178.4 436,189.6" fill="black" transform="rotate(90,440,184)"/>
<polygon class="arrowhead" points="320,256 308,250.4 308,261.6" fill="black" transform="rotate(0,312,256)"/>
<polygon class="arrowhead" points="320,208 308,202.4 308,213.6" fill="black" transform="rotate(0,312,208)"/>
<polygon class="arrowhead" points="304,224 292,218.4 292,229.6" fill="black" transform="rotate(180,296,224)"/>
<polygon class="arrowhead" points="264,104 252,98.4 252,109.6" fill="black" transform="rotate(90,256,104)"/>
<polygon class="arrowhead" points="160,208 148,202.4 148,213.6" fill="black" transform="rotate(0,152,208)"/>
<polygon class="arrowhead" points="144,256 132,250.4 132,261.6" fill="black" transform="rotate(180,136,256)"/>
<polygon class="arrowhead" points="144,224 132,218.4 132,229.6" fill="black" transform="rotate(180,136,224)"/>
<polygon class="arrowhead" points="88,184 76,178.4 76,189.6" fill="black" transform="rotate(90,80,184)"/>
<g class="text">
<text x="160" y="52">SMIv2</text>
<text x="240" y="52">specification</text>
<text x="340" y="52">(optional)</text>
<text x="400" y="52">(2)</text>
<text x="196" y="132">YANG</text>
<text x="272" y="132">specification</text>
<text x="352" y="132">(1)</text>
<text x="36" y="180">Client</text>
<text x="348" y="180">Server</text>
<text x="88" y="212">Request</text>
<text x="180" y="212">CoAP</text>
<text x="244" y="212">request(3)</text>
<text x="380" y="212">Indication</text>
<text x="88" y="228">Confirm</text>
<text x="180" y="228">CoAP</text>
<text x="248" y="228">response(3)</text>
<text x="372" y="228">Response</text>
<text x="488" y="228">(4)</text>
<text x="212" y="260">Security</text>
<text x="264" y="260">(7)</text>
<text x="396" y="276">Datastore(s)</text>
<text x="488" y="276">(5)</text>
<text x="368" y="340">Event</text>
<text x="432" y="340">stream(s)</text>
<text x="488" y="340">(6)</text>
</g>
</svg>
</artwork><artwork  type="ascii-art" align="left"><![CDATA[
+----------------------------------------------------------------+
|                SMIv2 specification (optional) (2)              |
+------------------------------+---------------------------------+
                               |
                               v
+----------------------------------------------------------------+
|                     YANG specification  (1)                    |
+--------+--------------------------------------------+----------+
         |                                            |
 Client  v                              Server        v
+--------------+                       +-------------------------+
|      Request +--> CoAP request(3) -->|  Indication             |
|      Confirm |<-- CoAP response(3)<--+  Response         (4)   |
|              |                       |                         |
|              |<==== Security (7) ===>| +---------------------+ |
+--------------+                       | | Datastore(s)    (5) | |
                                       | +---------------------+ |
                                       |                         |
                                       | +---------------------+ |
                                       | | Event stream(s) (6) | |
                                       | +---------------------+ |
                                       +-------------------------+
]]></artwork></artset></figure>

<t><xref target="archit"/> is a high-level representation of the main elements of the CORECONF management
architecture. The different numbered components of <xref target="archit"/> are discussed according to the component number.</t>

<dl>
  <dt>(1) YANG specification:</dt>
  <dd>
    <t>contains a set of named and versioned modules.</t>
  </dd>
  <dt>(2) SMIv2 specification:</dt>
  <dd>
    <t>Optional part that consists of a named module which, specifies a set of variables and "conceptual tables". There
is an algorithm to translate SMIv2 specifications to YANG specifications.</t>
  </dd>
  <dt>(3) CoAP request/response messages:</dt>
  <dd>
    <t>The CORECONF client sends request messages to and receives response messages
from the CORECONF server.</t>
  </dd>
  <dt>(4) Request, Indication, Response, Confirm:</dt>
  <dd>
    <t>Processes performed by the CORECONF clients and servers.</t>
  </dd>
  <dt>(5) Datastore:</dt>
  <dd>
    <t>A resource used to access configuration data, state data, RPCs, and
 actions. A CORECONF server supports a single unified datastore.
 Multiple datastores, for instance as those defined by Network
 Management Datastore Architecture (NMDA) <xref target="RFC8342"/>, are out of scope
 of this specification.</t>
  </dd>
  <dt>(6) Event stream:</dt>
  <dd>
    <t>A resource used to get real-time notifications. A CORECONF server may support multiple Event streams serving different purposes such as normal monitoring, diagnostic, syslog, security monitoring.</t>
  </dd>
  <dt>(7) Security:</dt>
  <dd>
    <t>The server <bcp14>MUST</bcp14> prevent unauthorized users from reading or writing any CORECONF
resources. CORECONF relies on security protocols such as DTLS <xref target="RFC6347"/><xref target="RFC9147"/> or OSCORE <xref target="RFC8613"/> to secure CoAP communications.</t>
  </dd>
</dl>

<section anchor="major-differences"><name>Major differences between RESTCONF and CORECONF</name>

<t>CORECONF is a RESTful protocol for small devices where saving bytes to
transport a message is very important. Contrary to RESTCONF, many design
decisions are motivated by the
saving of bytes. Consequently, CORECONF is not a RESTCONF over CoAP protocol,
but differs more significantly from RESTCONF.</t>

<section anchor="major-differences-coap"><name>Differences due to CoAP and its efficient usage</name>

<t><list style="symbols">
  <t>CORECONF uses CoAP/UDP as transport protocol and CBOR as payload format
<xref target="RFC9254"/>. RESTCONF uses HTTP/TCP as transport
protocol and JSON or XML as payload formats.</t>
  <t>CORECONF uses the methods FETCH and iPATCH to access data nodes.
RESTCONF uses instead the HTTP method PATCH and the HTTP method GET with the "fields" Query parameter.</t>
  <t>RESTCONF uses the HTTP methods HEAD, and OPTIONS, which are not supported by CoAP.</t>
  <t>CORECONF does not support "insert" query parameter (first, last, before, after)
and the "point" query parameter which are supported by RESTCONF.</t>
  <t>CORECONF does not support the "start-time" and "stop-time" query parameters
to retrieve past notifications.</t>
</list></t>

<t>Other CoAP transports (such as CoAP over TCP or WebSockets <xref target="RFC8323"/>) are out
of scope for this document.</t>

</section>
<section anchor="major-differences-cbor"><name>Differences due to the use of CBOR</name>

<t><list style="symbols">
  <t>CORECONF encodes YANG identifier strings as numbers, where RESTCONF does not.</t>
  <t>CORECONF also differs in the handling of default values, only 'report-all' and 'trim' options are supported.</t>
</list></t>

</section>
</section>
<section anchor="id-compression"><name>Compression of YANG identifiers</name>

<t>In the YANG specification, items are identified with a name string. In order
to significantly reduce the size of identifiers used in CORECONF, numeric
 identifiers called YANG Schema Item iDentifier (YANG SID or simply SID) are used instead.</t>

<section anchor="instance-identifier"><name>Instance-identifiers</name>

<t>Instance-identifiers are used to uniquely identify data node instances within a datastore. This YANG built-in type is defined in <xref section="9.13" sectionFormat="of" target="RFC7950"/>. An instance-identifier is composed of the data node identifier (i.e., a SID) and, for data nodes within list(s), the keys used to index within these list(s).</t>

<t>In CORECONF, instance-identifiers are carried in the payload of FETCH
and PATCH requests.
They are encoded in CBOR
based on the rules defined in <xref section="6.13.1" sectionFormat="of" target="RFC9254"/>.</t>

</section>
</section>
<section anchor="media-type"><name>Media-Types</name>

<t>CORECONF uses Media-Types based on the YANG to CBOR mapping specified
in <xref target="RFC9254"/>.</t>

<t>The following new Media-Types based on CBOR sequences <xref target="RFC8742"/> are defined in this document:</t>

<dl>
  <dt>application/yang-identifiers+cbor-seq:</dt>
  <dd>
    <t>This Media-Type represents a CBOR YANG document containing a list of instance-identifiers used to target specific data node instances within a datastore.</t>
  </dd>
  <dt/>
  <dd>
    <t>FORMAT: CBOR sequence of instance-identifiers</t>
  </dd>
  <dt/>
  <dd>
    <t>The message payload of Media-Type 'application/yang-identifiers+cbor-seq' is encoded using a CBOR sequence.
Each item of this CBOR sequence contains an instance-identifier encoded as defined in <xref section="6.13.1" sectionFormat="of" target="RFC9254"/>.</t>
  </dd>
  <dt>application/yang-instances+cbor-seq:</dt>
  <dd>
    <t>This Media-Type represents a CBOR YANG document containing a list of data node instances.
Each data node instance is identified by its associated instance-identifier.</t>
  </dd>
  <dt/>
  <dd>
    <t>FORMAT: CBOR sequence of CBOR maps of instance-identifier, instance-value</t>
  </dd>
  <dt/>
  <dd>
    <t>The message payload of Media-Type 'application/yang-instances+cbor-seq' is encoded using a CBOR sequence.
Each item within this CBOR sequence contains a CBOR map carrying an instance-identifier and associated instance-value.
Instance-identifiers are encoded using the rules defined in <xref section="6.13.1" sectionFormat="of" target="RFC9254"/>, instance-values are encoded using the rules
defined in <xref section="4" sectionFormat="of" target="RFC9254"/>.
The reference SID applying to the instance-value is provided by the
SID in the instance-identifier.</t>
  </dd>
  <dt/>
  <dd>
    <t>In the position of an instance-value, the CBOR undefined value (0xf7)
indicates the absence of a value.
Its precise meaning depends on the method, as specified in
<xref target="fetch"/> and <xref target="ipatch-operation"/>.
The CBOR null value (0xf6) is a valid
instance-value for a leaf of type 'empty' (see <xref section="6.11" sectionFormat="of" target="RFC9254"/>).</t>
  </dd>
  <dt/>
  <dd>
    <t>When present in an iPATCH request payload, this Media-Type carry a list of data node instances to be replaced, created, or deleted.
For each data node instance D, for which the instance-identifier is the same as a data node instance I, in the targeted datastore resource: the value of D replaces the value of I.  When the value of D is undefined, the data node instance I is removed.  When the targeted datastore resource does not contain a data node instance with the same instance-identifier as D, a new instance is created with the same instance-identifier and value as D (unless the value of D is undefined).</t>
  </dd>
</dl>

<t>The following examples show the payload of each of the three Media-Types in
diagnostic notation, using data from the examples in <xref target="datastore-example"/>.</t>

<t>A part of a datastore, in application/yang-data+cbor; id=sid, which is defined
in <xref target="RFC9254"/> and is used for the datastore as a whole (<xref target="datastore-access"/>):</t>

<figure><artwork><![CDATA[
{
  1721 : {                      / Clock (SID 1721) /
    2: "2016-10-26T12:16:31Z"   / current-datetime (SID 1723) /
  }
}
]]></artwork></figure>

<t>A leaf and a list entry identified in application/yang-identifiers+cbor-seq.
The two items of the CBOR sequence are separated by a comma:</t>

<figure><artwork><![CDATA[
1723,            / current-datetime (SID 1723) /
[1533, "eth0"]   / interface (SID 1533) with name = "eth0" /
]]></artwork></figure>

<t>Two data node instances in application/yang-instances+cbor-seq. Each item of
the CBOR sequence is a map of one instance-identifier and its instance-value:</t>

<figure><artwork><![CDATA[
{
  1723 : "2016-10-26T12:16:31Z"   / current-datetime (SID 1723) /
},
{
  1755 : true                     / enabled (SID 1755) /
}
]]></artwork></figure>

<t>The different Media-Type usages are summarized in the table below:</t>

<texttable align="left" title="Summary of Media-Type Usages" anchor="tbl-mt-uses">
      <ttcol align='left'>Method</ttcol>
      <ttcol align='left'>Resource</ttcol>
      <ttcol align='left'>Media-Type</ttcol>
      <c>FETCH request</c>
      <c>datastore</c>
      <c>application/yang-identifiers+cbor-seq</c>
      <c>FETCH response</c>
      <c>datastore</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>iPATCH request</c>
      <c>datastore</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>iPATCH response</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>GET request</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>GET response</c>
      <c>datastore</c>
      <c>application/yang-data+cbor; id=sid</c>
      <c>PUT request</c>
      <c>datastore</c>
      <c>application/yang-data+cbor; id=sid</c>
      <c>PUT response</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>POST request</c>
      <c>datastore</c>
      <c>application/yang-data+cbor; id=sid</c>
      <c>POST response</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>DELETE request</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>DELETE response</c>
      <c>datastore</c>
      <c>N/A</c>
      <c>GET request</c>
      <c>event stream</c>
      <c>N/A</c>
      <c>GET response</c>
      <c>event stream</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>FETCH request</c>
      <c>event stream</c>
      <c>application/yang-identifiers+cbor-seq</c>
      <c>FETCH response</c>
      <c>event stream</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>POST request</c>
      <c>rpc, action</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>POST response</c>
      <c>rpc, action</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>any error <br />response</c>
      <c>any</c>
      <c>application/yang-data+cbor; id=sid</c>
</texttable>

<t>No Media-Type (N/A) is used if the method request or response does not
carry a payload.</t>

</section>
<section anchor="unified-datastore"><name>Unified datastore</name>

<t>CORECONF supports a simple datastore model consisting of a single unified datastore. This datastore provides access to both configuration and operational data. Configuration updates performed on this datastore are reflected immediately or with a minimal delay as operational data.</t>

<t>More complex datastore models such as the Network Management Datastore
Architecture (NMDA) as defined by <xref target="RFC8342"/> are out of scope of the
present specification.</t>

<t>Characteristics of the unified datastore are summarized in the table below:</t>

<texttable align="left" title="Characteristics of the Unified Datastore" anchor="tbl-ud">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>Name</c>
      <c>unified</c>
      <c>YANG modules</c>
      <c>all modules</c>
      <c>YANG nodes</c>
      <c>all data nodes ("config true" and "config false")</c>
      <c>Access</c>
      <c>read-write</c>
      <c>How applied</c>
      <c>changes applied in place immediately or with a minimal delay</c>
      <c>Protocols</c>
      <c>CORECONF</c>
      <c>Defined in</c>
      <c>"ietf-coreconf"</c>
</texttable>

</section>
</section>
<section anchor="coap-interface"><name>CoAP Interface</name>

<t>This document specifies a Management Interface. CoAP endpoints that
implement the CORECONF management protocol, support
at least one discoverable management resource of resource type (rt): core.c.ds.
The path of the discoverable management resource is left to implementers to
select (see <xref target="discovery"/>).</t>

<t>YANG data node instances are accessible by performing FETCH and iPATCH
operations on the datastore resource.</t>

<t>CORECONF also supports event stream resources used to observe notification instances.
Event stream resources can be discovered using resource type (rt): core.c.es.</t>

<t>The description of the CORECONF management interface is shown in the table below:</t>

<texttable align="left" title="Resources, example paths, and resource types (rt)" anchor="tbl-resources">
      <ttcol align='left'>CoAP resource</ttcol>
      <ttcol align='left'>Example path</ttcol>
      <ttcol align='left'>rt</ttcol>
      <c>Datastore resource</c>
      <c>/c</c>
      <c>core.c.ds</c>
      <c>Default event stream resource</c>
      <c>/s</c>
      <c>core.c.es</c>
</texttable>

<t>The path values in the table are example ones. On discovery, the server makes
the actual path values known for these resources.</t>

<t>The methods used by CORECONF are:</t>

<texttable align="left" title="CoAP Methods in CORECONF" anchor="tbl-methods">
      <ttcol align='left'>Operation</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>FETCH</c>
      <c>Retrieve specific data nodes within a datastore resource or event stream resource</c>
      <c>iPATCH</c>
      <c>Idempotently create, replace, and delete data node(s) within a datastore resource</c>
      <c>POST</c>
      <c>Invoke an RPC or action</c>
      <c>GET</c>
      <c>Retrieve the datastore resource or event stream resource</c>
      <c>PUT</c>
      <c>Create or replace a datastore resource</c>
      <c>DELETE</c>
      <c>Delete a datastore resource</c>
</texttable>

<section anchor="data-retrieval"><name>Data Retrieval</name>

<t>One or more data nodes can be retrieved by the client.
The operation is mapped to the FETCH method defined in <xref section="2" sectionFormat="of" target="RFC8132"/>.</t>

<t>There are two additional query parameters for the FETCH method:</t>

<texttable align="left" title="Query Parameters for FETCH" anchor="tbl-query-fetch">
      <ttcol align='left'>query parameters</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>c</c>
      <c>Control selection of configuration and non-configuration data nodes (GET and FETCH)</c>
      <c>d</c>
      <c>Control retrieval of default values.</c>
</texttable>

<section anchor="content"><name>Using the 'c' query parameter</name>

<t>The 'c' (content) option controls how descendant nodes of the
requested data nodes will be processed in the reply.</t>

<t>The allowed values are:</t>

<texttable align="left" title="Values for the 'c' query parameter" anchor="tbl-c-values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>c</c>
      <c>Return only configuration descendant data nodes</c>
      <c>n</c>
      <c>Return only non-configuration descendant data nodes</c>
      <c>a</c>
      <c>Return all descendant data nodes</c>
</texttable>

<t>This option is only allowed for GET and FETCH methods on datastore and
data node resources.  A 4.02 (Bad Option) error is returned if used for other
methods or resource types.</t>

<t>If this query parameter is not present, the default value is "a" (the quotes
are added for readability, but they are not part of the payload).</t>

</section>
<section anchor="dquery"><name>Using the 'd' query parameter</name>

<t>The 'd' (with-defaults) option controls how the default values of the
descendant nodes of the requested data nodes will be processed.</t>

<t>The allowed values are:</t>

<texttable align="left" title="Values for the 'd' query parameter" anchor="tbl-d-values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>a</c>
      <c>All data nodes are reported. Defined as 'report-all' in <xref section="3.1" sectionFormat="of" target="RFC6243"/>.</c>
      <c>t</c>
      <c>Data nodes set to the YANG default are not reported. Defined as 'trim' in <xref section="3.2" sectionFormat="of" target="RFC6243"/>.</c>
</texttable>

<t>If the target of a GET or FETCH method is a data node that represents a leaf
that has a default value, and the leaf has not been given a value by any
client yet, the server <bcp14>MUST</bcp14> return the default value of the leaf.</t>

<t>If the target of a GET or FETCH method is a data node that represents a
container or list that has child resources with default values,
and these have not been given a value yet, the server <bcp14>MUST NOT</bcp14> return the
child resource if <spanx style="verb">d</spanx>=<spanx style="verb">t</spanx>, and <bcp14>MUST</bcp14> return the child resource if <spanx style="verb">d</spanx>=<spanx style="verb">a</spanx>.</t>

<t>If this query parameter is not present, the default value is "t" (the quotes are
added for readability, but they are not part of the payload).</t>

</section>
<section anchor="fetch"><name>FETCH</name>

<t>The FETCH method is used to retrieve one or more instance-values.
The FETCH request payload contains the list of instance-identifiers of the data node instances requested.</t>

<t>The return response payload contains a list of data node instance-values in the same order as requested.
A CBOR undefined value (0xf7) is returned for each data node requested by the client, not supported by the server or not currently instantiated.</t>

<t>For compactness, indexes of the list instance identifiers returned by the FETCH response <bcp14>SHOULD</bcp14> be elided, only the SID is provided.
That means that the client is responsible for remembering the full
instance-identifiers in its request since no key values will be in the
response.
This approach may also help reduce implementation complexity since the format of each entry within the CBOR sequence of the FETCH response is identical to the format of the corresponding GET response.</t>

<figure title="Generic format of FETCH interchange"><sourcecode type="coap"><![CDATA[
FETCH <datastore resource>  / Request /
Content-Format: TBD2 (application/yang-identifiers+cbor-seq)

/ CBOR sequence of instance-identifiers /

2.05 Content  / Response /
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of SID, instance-value /
]]></sourcecode></figure>

<section anchor="fetch-example"><name>FETCH examples</name>

<t>This example uses the current-datetime leaf from module ietf-system <xref target="RFC7317"/>
and the interface list from module ietf-interfaces <xref target="RFC8343"/>.
In this example the value of current-datetime (SID 1723) and the interface
list (SID 1533) instance identified with name="eth0" are queried.</t>

<figure><sourcecode type="coap"><![CDATA[
FETCH /c
Content-Format: TBD2 (application/yang-identifiers+cbor-seq)

1723,            / current-datetime (SID 1723) /
[1533, "eth0"]   / interface (SID 1533) with name = "eth0" /

2.05 Content
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{
  1723 : "2014-10-26T12:16:31Z" / current-datetime (SID 1723) /
},
{
  1533 : {
     4 : "eth0",              / name (SID 1537) /
     1 : "Ethernet adaptor",  / description (SID 1534) /
     5 : 1880,                / type (SID 1538), identity /
                              / ethernetCsmacd (SID 1880) /
     2 : true,                / enabled (SID 1535) /
    11 : 3             / oper-status (SID 1544), value is testing /
  }
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="data-editing"><name>Data Editing</name>

<t>CORECONF allows datastore contents to be created, modified and deleted using
CoAP methods.</t>

<section anchor="DataOrdering"><name>Data Ordering</name>

<t>A CORECONF server <bcp14>MUST</bcp14> preserve the relative order of all user-ordered list
and leaf-list entries that are received in a single edit request.
As per <xref target="RFC9254"/>, these YANG data node types are encoded as CBOR
arrays, so messages will preserve their order.</t>

</section>
<section anchor="post-operation"><name>POST</name>

<t>The CoAP POST operation is used in CORECONF for the
invocation of "ACTION" and "RPC" resources.
Refer to <xref target="rpc"/> for details on "ACTION" and "RPC" resources.</t>

</section>
<section anchor="ipatch-operation"><name>iPATCH</name>

<t>One or multiple data node instances are replaced with the idempotent
CoAP iPATCH method <xref target="RFC8132"/>.</t>

<t>There are no query parameters for the iPATCH method.</t>

<t>The processing of one iPATCH request is atomic, as required by
<xref section="3" sectionFormat="of" target="RFC8132"/>: the server applies the whole set of operations
carried in the request, or none of them.
If the request cannot be applied in full, the datastore is left unmodified
and an error response is returned, as specified in <xref target="error-handling"/>.
The server is free to choose how it achieves atomicity; one way is to
validate the datastore that would result from the edit and to apply the
change only if that validation succeeds, as described in
<xref section="8" sectionFormat="of" target="RFC7950"/>.
This needs only a transient buffer holding the datastore that would result
from the edit.</t>

<t>Atomicity is a property of a single request.
A client that needs the operations of an edit to be independent of each
other sends them as separate iPATCH requests; a client that needs them to
succeed or fail together sends them in one request.</t>

<t>The result of an iPATCH request is the same as if its operations were applied
one after another, in the order in which they appear in the payload.
For example, an operation can set a leaf of a list entry that an earlier
operation of the same request has created. Constraints between data nodes,
such as a leafref, are validated on the datastore that results from the whole
request, so they can also refer to a data node instance that a later operation
creates.
The server is free to apply the operations internally in any other way, as
long as that result is obtained.</t>

<t>A successful iPATCH request is answered with 2.04 (Changed), including when
the request creates or deletes data node instances: the target of the request
is the datastore resource, which already exists.</t>

<t>The processing of the iPATCH command is specified by Media-Type application/yang-instances+cbor-seq.
In summary, if the CBOR patch payload contains a data node instance that is not present
in the target, this instance is added. If the target contains the specified instance,
the content of this instance is replaced with the value of the payload.
A CBOR undefined value (0xf7) indicates the removal of an existing data node instance.</t>

<figure title="Generic format of iPATCH interchange"><sourcecode type="coap"><![CDATA[
iPATCH <datastore resource>  / Request /
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of instance-identifier, instance-value /

2.04 Changed  / Response /
]]></sourcecode></figure>

<section anchor="ipatch-example"><name>iPATCH example</name>

<t>In this example, a CORECONF client requests the following operations:</t>

<t><list style="symbols">
  <t>Set "/ietf-system:system/ntp/enabled" (SID 1755) to true.</t>
  <t>Remove the server "tac.nrc.ca" from the "/ietf-system:system/ntp/server" (SID 1756) list.</t>
  <t>Add/set the server "tic.nrc.ca" in the list "/ietf-system:system/ntp/server" (SID 1756).</t>
</list></t>

<figure><sourcecode type="coap"><![CDATA[
iPATCH /c
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{
  1755 : true                   / enabled (SID 1755) /
},
{
  [1756, "tac.nrc.ca"] : undefined  / server (SID 1756) /
},
{
  [1756, "tic.nrc.ca"] : {      / server (SID 1756) /
    3 : "tic.nrc.ca",           / name (SID 1759) /
    4 : true,                   / prefer (SID 1760) /
    5 : {                       / udp (SID 1761) /
      1 : "132.246.11.231"      / address (SID 1762) /
    }
  }
}

2.04 Changed
]]></sourcecode></figure>

<t>A data node instance is deleted using an iPATCH with an undefined value, as seen in this example.</t>

</section>
</section>
</section>
<section anchor="datastore-access"><name>Full datastore access</name>

<t>The methods GET, PUT, POST, and DELETE can be used to request, replace, create,
and delete a whole datastore respectively.</t>

<figure title="Generic format of full datastore GET interchange"><sourcecode type="coap"><![CDATA[
GET <datastore resource>

2.05 Content
Content-Format: 140 (application/yang-data+cbor; id=sid)

/ CBOR map of SID, instance-value /
]]></sourcecode></figure>

<figure title="Generic format of full datastore PUT interchange"><sourcecode type="coap"><![CDATA[
PUT <datastore resource>
Content-Format: 140 (application/yang-data+cbor; id=sid)

/ CBOR map of SID, instance-value /

2.04 Changed
]]></sourcecode></figure>

<figure title="Generic format of full datastore POST interchange"><sourcecode type="coap"><![CDATA[
POST <datastore resource>
Content-Format: 140 (application/yang-data+cbor; id=sid)

/  CBOR map of SID, instance-value /

2.01 Created
]]></sourcecode></figure>

<figure title="Generic format of full datastore DELETE interchange"><sourcecode type="coap"><![CDATA[
DELETE <datastore resource>

2.02 Deleted
]]></sourcecode></figure>

<t>The content of the CBOR map represents the complete datastore of the server
at the GET indication or after a successful processing of a PUT or POST request.</t>

<section anchor="datastore-example"><name>Full datastore examples</name>

<t>The example uses the interface list from module ietf-interfaces <xref target="RFC8343"/> and
the clock container from module ietf-system <xref target="RFC7317"/>.
We assume that the datastore contains two modules ietf-system (SID 1700) and
ietf-interfaces (SID 1500); they contain the 'interface' list (SID 1533) with
one instance and the 'clock' container (SID 1721). After invocation of GET, a
CBOR map with data nodes from these two modules is returned:</t>

<figure><sourcecode type="coap"><![CDATA[
GET /c

2.05 Content
Content-Format: 140 (application/yang-data+cbor; id=sid)

{
  1721 : {                      / Clock (SID 1721) /
    2: "2016-10-26T12:16:31Z",  / current-datetime (SID 1723) /
    1: "2014-10-05T09:00:00Z"   / boot-datetime (SID 1722) /
  },
  1533 : [
    {                           / interface (SID 1533) /
       4 : "eth0",              / name (SID 1537) /
       1 : "Ethernet adaptor",  / description (SID 1534) /
       5 : 1880,                / type (SID 1538), identity: /
                                / ethernetCsmacd (SID 1880) /
       2 : true,                / enabled (SID 1535) /
      11 : 3             / oper-status (SID 1544), value is testing /
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="event-stream"><name>Event stream</name>

<t>Event notification is an essential function for the management of servers.
CORECONF allows notifications specified in YANG <xref section="7.16" sectionFormat="of" target="RFC7950"/> to be
reported to a list
of clients. The path for the default event stream can be discovered as
described in <xref target="coap-interface"/>. The server <bcp14>MAY</bcp14> support additional event
stream resources to address different notification needs.</t>

<t>Reception of notification instances is enabled with the CoAP Observe
<xref target="RFC7641"/> function. Clients subscribe to the notifications by sending a
GET request with an "Observe" option to the stream resource.</t>

<t>Each response payload carries zero or more notifications. A message without
any notification is useful as the response that establishes a subscription
(a GET with an Observe option of 0), for example when the server has nothing
to report yet. Sending such a message otherwise is discouraged.
When multiple notifications are reported, they <bcp14>MUST</bcp14> be ordered starting from
the newest notification at index zero. Note that this could lead to
notifications being sent multiple times, which increases the probability for
the client to receive them, but it might potentially lead to messages that
exceed the MTU of a single CoAP packet. If such cases could arise, implementers
should make sure appropriate fragmentation is available - for example the one
described in <xref target="block"/>.</t>

<t>The format of notifications is a CBOR sequence, where each item in
the sequence is a single notification as described in <xref section="4.2.1" sectionFormat="of" target="RFC9254"/>.
(Accordingly, a message without any notification is an empty CBOR sequence,
 i.e., zero bytes.)</t>

<figure title="Generic format of event-stream GET interchange"><sourcecode type="coap"><![CDATA[
GET <stream-resource>
Observe: 0

2.05 Content
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of instance-identifier, instance-value /
]]></sourcecode></figure>

<t>The sequence of data node instances may contain identical items which have
been generated at different times.</t>

<t>A CORECONF server that can no longer provide the notifications of a stream
resource sends a notification with an appropriate error response code (4.xx or
5.xx) and removes the client from the list of observers, as specified in
<xref section="3.2" sectionFormat="of" target="RFC7641"/>. An error that affects a single notification instance does not by
itself terminate the stream. A client that observes the termination reports the
failure to its user agent; whether it re-observes the stream is outside the scope
of this document.</t>

<t>An example implementation is:</t>

<ul empty="true"><li>
  <t>Every time an event is generated, the generated notification instance is
appended to the chosen stream(s). After an aggregation period, which may be
limited by the maximum number of notifications supported,
the content of the instance is sent to all clients observing the modified stream.</t>
</li></ul>

<section anchor="filtering-notifications"><name>Filtering Notifications</name>

<t>If only a subset of all possible notifications is of interest, a FETCH
operation can be performed with a request payload of type
application/yang-identifiers+cbor-seq that indicates which subset.</t>

<figure title="Generic format of event-stream FETCH interchange"><sourcecode type="coap"><![CDATA[
FETCH <stream-resource>
Observe: 0
Content-Format: TBD2 (application/yang-identifiers+cbor-seq)

/ CBOR sequence of instance-identifiers /

2.05 Content
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of instance-identifier, instance-value /
]]></sourcecode></figure>

<t>When filtering is not supported by a CORECONF server, the request
payload can be ignored: all event notifications are then reported
independently of the presence and content of the request payload.</t>

</section>
<section anchor="event-stream-example"><name>Notify Examples</name>

<t>Let suppose the server generates the example-port-fault event as defined below.</t>

<figure><sourcecode type="yang"><![CDATA[
module example-port {
  yang-version 1.1;
  namespace "https://example.com/ns/example-port";
  prefix "port";

  notification example-port-fault {   // SID 60010
    description
      "Event generated if a hardware fault is detected";
    leaf port-name {                  // SID 60011
      type string;
    }
    leaf port-fault {                 // SID 60012
      type string;
    }
  }
}
]]></sourcecode></figure>

<t>In this example the default event stream resource path /s is an example
location discovered with a request similar to <xref target="discovery-ex-es"/>. By executing a
GET with Observe 0 on the default event stream resource the client receives the
following response:</t>

<figure><sourcecode type="coap"><![CDATA[
GET /s
Observe: 0

2.05 Content
Observe: 12
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{
  60010 : {             / example-port-fault (SID 60010) /
    1 : "0/4/21",       / port-name (SID 60011) /
    2 : "Open pin 2"    / port-fault (SID 60012) /
  }
},
{
  60010 : {             / example-port-fault (SID 60010) /
    1 : "1/4/21",       / port-name (SID 60011) /
    2 : "Open pin 5"    / port-fault (SID 60012) /
  }
}

]]></sourcecode></figure>

<t>In the example, the request returns a success response with the contents
of the last two generated events. Consecutively the server will regularly
notify the client when a new event is generated.</t>

<t>A client that wants to filter notifications can use a FETCH payload:</t>

<figure><sourcecode type="coap"><![CDATA[
FETCH /s
Observe: 0
Content-Format: TBD2 (application/yang-identifiers+cbor-seq)

60010 / CBOR sequence with one notification identifier /

2.05 Content
Observe: 12
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{
  60010 : {             / example-port-fault (SID 60010) /
    1 : "0/4/21",       / port-name (SID 60011) /
    2 : "Open pin 2"    / port-fault (SID 60012) /
  }
},
{
  60010 : {             / example-port-fault (SID 60010) /
    1 : "1/4/21",       / port-name (SID 60011) /
    2 : "Open pin 5"    / port-fault (SID 60012) /
  }
}
]]></sourcecode></figure>

<t>Note that the notifications in this example are identical to the
unfiltered example as they are all using identifier SID 60010 and this
is included in the filter.</t>

</section>
</section>
<section anchor="rpc"><name>RPC and Action statements</name>

<t>The YANG "action" and "RPC" statements specify the execution of a Remote
Procedure Call (RPC) in the server.  It is invoked using a POST method to
an "Action" or "RPC" resource instance.</t>

<t>The request payload contains the values assigned to the input container when specified.
The response payload contains the values of the output container when specified.
Both the input and output containers are encoded in CBOR using the rules defined in
<xref section="4.2.1" sectionFormat="of" target="RFC9254"/>.</t>

<t>The returned success response code is 2.04 Changed.</t>

<figure title="Generic format of RPC and action POST interchange"><sourcecode type="coap"><![CDATA[
POST <datastore resource>
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of instance-identifier, instance-value /

2.04 Changed
Content-Format: TBD3 (application/yang-instances+cbor-seq)

/ CBOR sequence of CBOR maps of instance-identifier, instance-value /
]]></sourcecode></figure>

<section anchor="rpc-example"><name>RPC Example</name>

<t>This example is based on <xref section="3.6.1" sectionFormat="of" target="RFC8040"/>, abbreviated and
annotated with SIDs as follows:</t>

<figure><sourcecode type="yang"><![CDATA[
module example-ops {
  yang-version 1.1;
  namespace "https://example.com/ns/example-ops";
  prefix "ops";

  rpc reboot {                          // SID 61000
    description "Reboot operation.";
    input {                             // SID 61009
      leaf delay {                      // SID 61001
        type uint32;
        units "seconds";
        default 0;
        description
          "Number of seconds to wait before initiating the
           reboot operation.";
      }
    }
  }
}
]]></sourcecode></figure>

<t>This example invokes the 'reboot' RPC  (SID 61000).</t>

<figure><sourcecode type="coap"><![CDATA[
POST /c
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{ 61000:
  {
    1 : 77
  }
}

2.04 Changed
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{ 61000:
  {}
}
]]></sourcecode></figure>

<t>The 'reboot' RPC has no output, so the instance-value is an empty CBOR map.
The output of an RPC or action is an internal node and is always encoded as a
CBOR map (<xref section="4.2" sectionFormat="of" target="RFC9254"/>). The absence marker of
<xref target="media-type"/> is not used here: it only marks the absence or removal of a data
node instance, and an RPC or action output is neither. A yang-instances payload
is still returned, because its key (the SID of the RPC, or the
instance-identifier of the action) identifies which invocation the response
belongs to.</t>

</section>
<section anchor="action-example"><name>Action Example</name>

<t>The example is based on the YANG action "reset" as defined in <xref section="7.15.3" sectionFormat="of" target="RFC7950"/>
and annotated below with SIDs.</t>

<figure><sourcecode type="yang"><![CDATA[
module example-server-farm {
  yang-version 1.1;
  namespace "urn:example:server-farm";
  prefix "sfarm";

  import ietf-yang-types {
    prefix "yang";
  }

  list server {                        // SID 60000
    key name;
    leaf name {                        // SID 60001
      type string;
    }
    action reset {                     // SID 60002
      input {                          // SID 60008
        leaf reset-at {                // SID 60003
          type yang:date-and-time;
          mandatory true;
        }
      }
      output {                         // SID 60009
        leaf reset-finished-at {       // SID 60004
          type yang:date-and-time;
          mandatory true;
        }
      }
    }
  }
}
]]></sourcecode></figure>

<t>This example invokes the 'reset' action  (SID 60002),
of the server instance with name equal to "myserver".</t>

<figure><sourcecode type="coap"><![CDATA[
POST /c
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{ [60002, "myserver"]:
  {
    1 : "2016-02-08T14:10:08Z" / reset-at (SID 60003) /
  }
}

2.04 Changed
Content-Format: TBD3 (application/yang-instances+cbor-seq)

{ [60002, "myserver"]:
  {
    2 : "2016-02-08T14:10:11Z" / reset-finished-at (SID 60004)/
  }
}
]]></sourcecode></figure>

</section>
<section anchor="no-input-example"><name>Invocation without input</name>

<t>An RPC or an action is invoked without input in two cases: its input has no
mandatory data node and the client leaves the input out, or its YANG definition
has no input at all. In both cases the request is still a payload of
application/yang-instances+cbor-seq: the instance-identifier identifies the RPC
or the action, and the instance-value is an empty map. The input of an RPC or
an action is encoded as a CBOR map (<xref section="4.2" sectionFormat="of" target="RFC9254"/>), and an
empty one has no data nodes in it.</t>

<t>The 'reboot' RPC of <xref target="rpc-example"/> can be invoked without input, because its
'delay' leaf has a default value:</t>

<figure><artwork><![CDATA[
REQ:  POST </c>
      (Content-Format: application/yang-instances+cbor-seq)

{ 61000:
  {}
}
RES:  2.04 Changed
      (Content-Format: application/yang-instances+cbor-seq)

{ 61000:
  {}
}
]]></artwork></figure>

<t>In the module of <xref target="action-example"/>, a second action 'restart' is added to the
'server' list. It has neither input nor output:</t>

<figure><artwork><![CDATA[
  list server {                        // SID 60000
    ...
    action restart {                   // SID 60005
      description "Restart the server.";
    }
  }
]]></artwork></figure>

<t>It is invoked on the server instance with name equal to "myserver":</t>

<figure><artwork><![CDATA[
REQ:  POST </c>
      (Content-Format: application/yang-instances+cbor-seq)

{ [60005, "myserver"]:
  {}
}
RES:  2.04 Changed
      (Content-Format: application/yang-instances+cbor-seq)

{ [60005, "myserver"]:
  {}
}
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="block"><name>Use of Block-wise Transfers</name>

<t>The CoAP protocol provides reliability by acknowledging the UDP datagrams.
However, when large pieces of data need to be transported, datagrams get
fragmented, thus creating constraints on the resources in the client, server
and intermediate routers. The block option <xref target="RFC7959"/> allows the transport
of the total payload in individual blocks of which the
size can be adapted to the underlying transport sizes such as: (UDP datagram
size ~64KiB, IPv6 MTU of 1280, IEEE 802.15.4 payload of 60-80 bytes). Each
block is individually acknowledged to guarantee reliability.</t>

<t>Notice that the Block mechanism splits the data at fixed positions,
such that individual data fields may become fragmented. Therefore, assembly
of multiple blocks may be required to process complete data fields.</t>

<t>Beware of race conditions. In case blocks are filled one at a time, care should
be taken that the whole and consistent data representation is sent in multiple blocks sequentially
without interruption. On the server, values might change, lists might get re-ordered,
extended or reduced. When these actions happen during the serialization of
the contents of the resource, the transported results do not correspond with
a state having occurred in the server; or worse the returned values are inconsistent.
For example: array length does not correspond with the actual number of items.
It may be advisable to use Indefinite-length CBOR arrays and maps,
which are foreseen for data streaming purposes.
(Note that the outer structure of yang-identifiers and yang-instances
is a CBOR sequence, which already behaves similar to an
indefinite-length encoded array.)</t>

</section>
<section anchor="discovery"><name>Application Discovery</name>

<t>Two application discovery mechanisms are supported by CORECONF, the YANG library
data model as defined by <xref target="I-D.ietf-core-yang-library"/> and
the CORE resource discovery <xref target="RFC6690"/>.
Implementers may choose to implement one or the other or both.</t>

<section anchor="yang-library"><name>YANG library</name>

<t>The YANG library data model <xref target="I-D.ietf-core-yang-library"/> provides a high-level description of the resources available. The YANG library contains the
list of modules, features, and deviations supported by the CORECONF server.
From this information, CORECONF clients can infer the list of data nodes supported
and the interaction model to be used to access them. This module also contains
the list of datastores implemented.</t>

<t>As described in <xref target="RFC6690"/>, the location of the YANG library can be found by
sending a GET request to
"/.well-known/core" including a resource type (RT) parameter with the value
"core.c.yl". Upon success, the return payload will contain the root resource
of the YANG library module.</t>

<t>The following example assumes that the SID of the YANG library is 2351 (<spanx style="verb">kv</spanx> after
encoding as specified in <xref target="id-compression"/>) and that the server uses /c as
datastore resource path.</t>

<figure><sourcecode type="coap"><![CDATA[
GET /.well-known/core?rt=core.c.yl

RES: 2.05 Content
Content-Format: 40 (application/link-format)
</c/kv>;rt="core.c.yl"
]]></sourcecode></figure>

</section>
<section anchor="resource-discovery"><name>Resource Discovery</name>

<t>As some CoAP interfaces and services might not support the YANG library
interface and still be interested to discover resources that are available,
implementations <bcp14>MAY</bcp14> choose to support discovery of all available
resources using "/.well-known/core" as defined by <xref target="RFC6690"/>.</t>

<section anchor="datastore-discovery"><name>Datastore Resource Discovery</name>

<t>The presence and location of (path to) each datastore implemented by the CORECONF server
can be discovered by sending a GET request to "/.well-known/core" including a
resource type (RT) parameter with the value "core.c.ds".</t>

<t>Upon success, the return payload contains the list of datastore resources.</t>

<t>Each datastore returned is further qualified using the "ds" Link-Format attribute.
This attribute is set to the SID assigned to the datastore identity.
When a unified datastore is implemented, the ds attribute is set to 1029 as
specified in <xref target="ietf-coreconf-sid"/>.
For other examples of datastores, see the Network Management Datastore Architecture (NMDA) <xref target="RFC8342"/>.</t>

<figure><sourcecode type="abnf"><![CDATA[
link-extension    = ( "ds" "=" sid )
                    ; SID assigned to the datastore identity
sid               = 1*DIGIT
]]></sourcecode></figure>

<t>The following example assumes that the server uses /c as datastore resource
path.</t>

<figure title="Discovery Example: Data Store" anchor="discovery-ex-ds"><artwork type="coap" align="left"><![CDATA[
GET /.well-known/core?rt=core.c.ds

2.05 Content
Content-Format: 40 (application/link-format)

</c>; rt="core.c.ds";ds=1029
]]></artwork></figure>

</section>
<section anchor="datanode-discovery"><name>Data node Resource Discovery</name>

<t>If implemented, the presence and location of (path to) each data node
implemented by the CORECONF server are discovered by sending a GET request to
"/.well-known/core" including a resource type (RT) parameter with the value
"core.c.dn".</t>

<t>Upon success, the return payload contains the SID assigned to each data node
and their location.</t>

<t>The example below shows the discovery of the presence and location of
data nodes. Data nodes '/ietf-system:system-state/clock/boot-datetime' (SID 1722)
and '/ietf-system:system-state/clock/current-datetime' (SID 1723) are returned.
The example assumes that the server uses /c as datastore resource path.</t>

<figure title="Discovery Example: Data Node" anchor="discovery-ex-dn"><artwork type="coap" align="left"><![CDATA[
GET /.well-known/core?rt=core.c.dn

2.05 Content
Content-Format: 40 (application/link-format)

</c/a6>;rt="core.c.dn",
</c/a7>;rt="core.c.dn"
]]></artwork></figure>

<t>Without additional filtering, the list of data nodes may become prohibitively
long. If this is the case implementations <bcp14>SHOULD</bcp14> support a way to obtain all
links using multiple GET requests (for example through some form of
pagination).</t>

</section>
<section anchor="event-stream-resource-discovery"><name>Event stream Resource Discovery</name>

<t>The presence and location of (path to) each event stream implemented by the CORECONF server are
discovered by sending a GET request to "/.well-known/core" including a resource type (RT)
parameter with the value "core.c.es".</t>

<t>Upon success, the return payload contains the list of event stream resources.</t>

<t>The following example assumes that the server uses /s as the default event stream
resource.</t>

<figure title="Discovery Example: Event Stream" anchor="discovery-ex-es"><artwork type="coap" align="left"><![CDATA[
GET /.well-known/core?rt=core.c.es

2.05 Content
Content-Format:  40 (application/link-format)
</s>;rt="core.c.es"
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="error-handling"><name>Error Handling</name>

<t>In case a request is received which cannot be processed properly, the CORECONF server <bcp14>MUST</bcp14> return an error response. This error response <bcp14>MUST</bcp14> contain a CoAP 4.xx or 5.xx response code.
Requests that result in an error response <bcp14>MUST NOT</bcp14> have an effect on
the datastore.</t>

<t>Errors returned by a CORECONF server can be broken into two categories, those associated with the CoAP protocol itself and those generated during the validation of the YANG data model constraints as described in <xref section="8" sectionFormat="of" target="RFC7950"/>.</t>

<t>The following list of common CoAP errors should be implemented by CORECONF servers. This list is not exhaustive, other errors defined by CoAP and associated RFCs may be applicable.</t>

<t><list style="symbols">
  <t>Error 4.01 (Unauthorized) is returned by the CORECONF server when the CORECONF client is not authorized to perform the requested action on the targeted resource (i.e., data node, datastore, rpc, action or event stream).</t>
  <t>Error 4.02 (Bad Option) is returned by the CORECONF server when one or more CoAP options are unknown or malformed.</t>
  <t>Error 4.04 (Not Found) is returned by the CORECONF server when the CORECONF client is requesting a non-instantiated resource (i.e., data node, datastore, rpc, action or event stream).</t>
  <t>Error 4.05 (Method Not Allowed) is returned by the CORECONF server when the CORECONF client is requesting a method not supported on the targeted resource. (e.g., GET on an rpc, PUT or POST on a data node with "config" set to false).</t>
  <t>Error 4.08 (Request Entity Incomplete) is returned by the CORECONF server if one or multiple blocks of a block transfer request is missing, see <xref target="RFC7959"/> for more details.</t>
  <t>Error 4.13 (Request Entity Too Large) may be returned by the CORECONF server during a block transfer request, see <xref target="RFC7959"/> for more details.</t>
  <t>Error 4.15 (Unsupported Content-Format) is returned by the CORECONF server when the Content-Format used in the request does not match those specified in <xref target="media-type"/>.</t>
</list></t>

<t>The CORECONF server <bcp14>MUST</bcp14> also enforce the different constraints associated with the YANG data models implemented. These constraints are described in <xref section="8" sectionFormat="of" target="RFC7950"/>. These errors are reported using the CoAP error code 4.00 (Bad Request) and may have the following error container, defined as a YANG data structure <xref target="RFC8791"/>, as payload. The YANG definition and associated .sid file are available in <xref target="ietf-coreconf-yang"/> and <xref target="ietf-coreconf-sid"/>. The error container is encoded using the encoding rules of a YANG data template as defined in <xref section="5" sectionFormat="of" target="RFC9254"/>.</t>

<figure><artwork><![CDATA[
module: ietf-coreconf

  structure error:
    +-- error-tag          identityref
    +-- error-app-tag?     identityref
    +-- error-data-node?   instance-identifier
    +-- error-message?     string
]]></artwork></figure>

<t>The following 'error-tag' and 'error-app-tag' are defined by the ietf-coreconf YANG module, these tags are implemented as YANG identity and can be extended as needed.</t>

<t><list style="symbols">
  <t>error-tag 'operation-failed' is returned by the CORECONF server when the operation request cannot be processed successfully.  <list style="symbols">
      <t>error-app-tag 'malformed-message' is returned by the CORECONF server when the payload received from the CORECONF client does not contain a well-formed CBOR content as defined in <xref target="RFC8949"/> or does not comply with the CBOR structure defined within this document.</t>
      <t>error-app-tag 'data-not-unique' is returned by the CORECONF server when the validation of the 'unique' constraint of a list or leaf-list fails.</t>
      <t>error-app-tag 'too-many-elements' is returned by the CORECONF server when the validation of the 'max-elements' constraint of a list or leaf-list fails.</t>
      <t>error-app-tag 'too-few-elements' is returned by the CORECONF server when the validation of the 'min-elements' constraint of a list or leaf-list fails.</t>
      <t>error-app-tag 'must-violation' is returned by the CORECONF server when the restrictions imposed by a 'must' statement are violated.</t>
      <t>error-app-tag 'duplicate' is returned by the CORECONF server when a client tries to create a duplicate list or leaf-list entry.</t>
    </list></t>
  <t>error-tag 'invalid-value' is returned by the CORECONF server when the CORECONF client tries to update or create a leaf with a value encoded using an invalid CBOR datatype or if the 'range', 'length', 'pattern' or 'require-instance' constraint is not fulfilled.  <list style="symbols">
      <t>error-app-tag 'invalid-datatype' is returned by the CORECONF server when CBOR encoding does not follow the rules set by the YANG Build-In type or when the value is incompatible with it (e.g., a value greater than 127 for an int8, undefined enumeration).</t>
      <t>error-app-tag 'not-in-range' is returned by the CORECONF server when the validation of the 'range' property fails.</t>
      <t>error-app-tag 'invalid-length' is returned by the CORECONF server when the validation of the 'length' property fails.</t>
      <t>error-app-tag 'pattern-test-failed' is returned by the CORECONF server when the validation of the 'pattern' property fails.</t>
    </list></t>
  <t>error-tag 'missing-element' is returned by the CORECONF server when the operation requested by a CORECONF client fails to comply with the 'mandatory' constraint defined. The 'mandatory' constraint is enforced for leafs and choices, unless the node or any of its ancestors have a 'when' condition or 'if-feature' expression that evaluates to 'false'.  <list style="symbols">
      <t>error-app-tag 'missing-key' is returned by the CORECONF server to further qualify a missing-element error. This error is returned when the CORECONF client tries to create or list instance, without all the 'key' specified or when the CORECONF client tries to delete a leaf listed as a 'key'.</t>
      <t>error-app-tag 'missing-input-parameter' is returned by the CORECONF server when the input parameters of an RPC or action are incomplete.</t>
    </list></t>
  <t>error-tag 'unknown-element' is returned by the CORECONF server when the CORECONF client tries to access a data node of a YANG module not supported, of a data node associated with an 'if-feature' expression evaluated to 'false' or to a 'when' condition evaluated to 'false'.</t>
  <t>error-tag 'bad-element' is returned by the CORECONF server when the CORECONF client tries to create data nodes for more than one case in a choice.</t>
  <t>error-tag 'data-missing' is returned by the CORECONF server when a data node required to accept the request is not present.  <list style="symbols">
      <t>error-app-tag 'instance-required' is returned by the CORECONF server when a leaf of type 'instance-identifier' or 'leafref' marked with require-instance set to 'true' refers to an instance that does not exist.</t>
      <t>error-app-tag 'missing-choice' is returned by the CORECONF server when no nodes exist in a mandatory choice.</t>
    </list></t>
  <t>error-tag 'error' is returned by the CORECONF server when an unspecified error has occurred.</t>
</list></t>

<t>For example, the CORECONF server might return the following error.</t>

<figure><sourcecode type="coap"><![CDATA[
4.00 Bad Request
Content-Format: 140 (application/yang-data+cbor; id=sid)

{
  1024 : {
    4 : 1011,        / error-tag (SID 1028) /
                     /   = invalid-value (SID 1011) /
    1 : 1018,        / error-app-tag (SID 1025) /
                     /   = not-in-range (SID 1018) /
    2 : 1740,        / error-data-node (SID 1026) /
                     /   = timezone-utc-offset (SID 1740) /
    3 : "maximum value exceeded" / error-message (SID 1027) /
  }
}
]]></sourcecode></figure>

<!-- Note that we do not
use application/yang-instances+cbor-seq here, as we don't have an instance.
-->

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>For secure network management, it is important to restrict access to configuration variables
only to authorized parties. CORECONF re-uses the security mechanisms already available to CoAP,
this includes DTLS <xref target="RFC9147"/><xref target="RFC6347"/> and OSCORE <xref target="RFC8613"/> for protected access to
resources, as well as suitable authentication and authorization mechanisms, for
example those defined in ACE OAuth <xref target="RFC9200"/>.</t>

<t>All the security considerations of <xref target="RFC7252"/>, <xref target="RFC7959"/>, <xref target="RFC8132"/> and
<xref target="RFC7641"/> apply to this document as well. The use of NoSec (<xref section="9" sectionFormat="of" target="RFC7252"/>), when OSCORE
is not used, is <bcp14>NOT RECOMMENDED</bcp14>.</t>

<t>In addition, mechanisms for authentication and authorization may need to be
selected if not provided with the CoAP security mode.</t>

<t>As <xref target="RFC9254"/> and <xref target="RFC4648"/> are used for payload and SID
encoding, the security considerations of those documents also need to be
well-understood.</t>

<t>The YANG module specified in this document defines a schema for data that is
designed to be accessed via CORECONF itself. Which secure transports are mandatory to implement is
an open issue (see <xref target="open-issues"/>).</t>

<t>The module does not define any configuration or state data nodes and the usual analysis of which subtrees and data nodes are sensitive or
vulnerable to write or read operations does not apply to it.</t>

<t>What does deserve attention is the content a server places in the error
structure (<xref target="error-handling"/>).
The 'error-data-node' leaf carries an instance-identifier, and 'error-message'
carries free text. A server that returns either to a client that is not
authorized to see the corresponding part of the datastore discloses the shape
of its data model, and possibly the existence of specific instances, through
the error path. A server <bcp14>SHOULD</bcp14> limit the detail it reports in an error
response to what the requesting client is authorized to read.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<section anchor="resource-type-rt-link-target-attribute-values-registry"><name>Resource Type (rt=) Link Target Attribute Values Registry</name>

<t>This document adds the following resource type to the "Resource Type (rt=) Link Target Attribute Values", within the "Constrained RESTful Environments (CoRE) Parameters" registry.</t>

<texttable align="left" title="Resource Types" anchor="tbl-rt">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>core.c.ds</c>
      <c>YANG datastore</c>
      <c>RFC XXXX</c>
      <c>core.c.dn</c>
      <c>YANG data node</c>
      <c>RFC XXXX</c>
      <c>core.c.yl</c>
      <c>YANG module library</c>
      <c>RFC XXXX</c>
      <c>core.c.es</c>
      <c>YANG event stream</c>
      <c>RFC XXXX</c>
</texttable>

<t>// RFC Ed.: replace RFC XXXX with this RFC number and remove this note.</t>

</section>
<section anchor="coap-content-formats-registry"><name>CoAP Content-Formats Registry</name>

<t>This document adds the following Content-Formats from the Expert
Review range (0-255) to the "CoAP Content-Formats", within the "Constrained RESTful Environments (CoRE) Parameters" registry.</t>

<texttable align="left" title="Content Formats" anchor="tbl-ct">
      <ttcol align='left'>Media Type</ttcol>
      <ttcol align='left'>Content Coding</ttcol>
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>application/yang-identifiers+cbor-seq</c>
      <c>&#160;</c>
      <c>TBD2</c>
      <c>RFC XXXX</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>&#160;</c>
      <c>TBD3</c>
      <c>RFC XXXX</c>
</texttable>

<t>// RFC Ed.: replace TBD2 (suggested: 141) and TBD3 (suggested: 142) with assigned IDs and remove this note.  (There is no TBD1, that was already defined in RFC 9254.)
// RFC Ed.: replace RFC XXXX with this RFC number and remove this note.</t>

</section>
<section anchor="media-types-registry"><name>Media Types Registry</name>

<t>This document adds the following media types to the "Media Types" registry.</t>

<texttable align="left" title="Media Types" anchor="tbl-mt">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Template</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>yang-identifiers+cbor-seq</c>
      <c>application/yang-identifiers+cbor-seq</c>
      <c>RFC XXXX</c>
      <c>yang-instances+cbor-seq</c>
      <c>application/yang-instances+cbor-seq</c>
      <c>RFC XXXX</c>
</texttable>

<t>Each of these media types share the following information:</t>

<t><list style="symbols">
  <t>Subtype name: &lt;as listed in table&gt;</t>
  <t>Required parameters: N/A</t>
  <t>Optional parameters: N/A</t>
  <t>Encoding considerations: binary</t>
  <t>Security considerations: See the Security Considerations section of RFC XXXX</t>
  <t>Interoperability considerations: N/A</t>
  <t>Published specification: RFC XXXX</t>
  <t>Applications that use this media type: CORECONF</t>
  <t>Fragment identifier considerations: N/A</t>
  <t>Additional information:</t>
</list></t>

<figure><artwork><![CDATA[
*  Deprecated alias names for this type: N/A

*  Magic number(s): N/A

*  File extension(s): N/A

*  Macintosh file type code(s): N/A
]]></artwork></figure>

<t><list style="symbols">
  <t>Person &amp; email address to contact for further information: iesg&amp;ietf.org</t>
  <t>Intended usage: COMMON</t>
  <t>Restrictions on usage: N/A</t>
  <t>Author: Michel Veillette</t>
  <t>Change Controller: IETF</t>
  <t>Provisional registration?  No</t>
</list></t>

<t>// RFC Ed.: replace RFC XXXX with this RFC number and remove this note.</t>

</section>
<section anchor="yang-namespace-and-module-name-registration"><name>YANG Namespace and Module Name Registration</name>

<t>This document registers the following XML namespace URN in the "IETF XML
Registry", following the format defined in <xref target="RFC3688"/>:</t>

<t>URI: please assign urn:ietf:params:xml:ns:yang:ietf-coreconf</t>

<t>Registrant Contact: The IESG.</t>

<t>XML: N/A, the requested URI is an XML namespace.</t>

<t>Reference:    RFC XXXX</t>

<t>IANA is requested to register the following YANG module in the "YANG Module Names" registry <xref target="RFC6020"/>:</t>

<t>Name: ietf-coreconf</t>

<t>Namespace: urn:ietf:params:xml:ns:yang:ietf-coreconf</t>

<t>Prefix: coreconf</t>

<t>Reference: RFC XXXX</t>

<t>// RFC Ed.: please replace XXXX with RFC number and remove this note</t>

<t>The YANG module and SID file are in <xref target="ietf-coreconf-yang"/> and
<xref target="ietf-coreconf-sid"/>, respectively.</t>

</section>
<section anchor="yang-sid-range-assignment"><name>YANG SID Range Assignment</name>

<t>IANA has assigned the following SID range to the "ietf-coreconf" YANG module in
the "IETF YANG-SID Ranges" registry, following the procedure of <xref section="6.4.2" sectionFormat="of" target="RFC9595"/>. IANA is requested to update the reference of this entry to this
document:</t>

<t>Entry Point: 1000</t>

<t>Size: 100</t>

<t>Module Name: ietf-coreconf</t>

<t>Reference: RFC XXXX</t>

<t>The SID file in <xref target="ietf-coreconf-sid"/> assigns SIDs from this range, and this
document depends on those values: <xref target="datastore-discovery"/> uses the SID of the
"unified" datastore identity.</t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC3688">
  <front>
    <title>The IETF XML Registry</title>
    <author fullname="M. Mealling" initials="M." surname="Mealling"/>
    <date month="January" year="2004"/>
    <abstract>
      <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="81"/>
  <seriesInfo name="RFC" value="3688"/>
  <seriesInfo name="DOI" value="10.17487/RFC3688"/>
</reference>
<reference anchor="RFC6020">
  <front>
    <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <date month="October" year="2010"/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6020"/>
  <seriesInfo name="DOI" value="10.17487/RFC6020"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC6241">
  <front>
    <title>Network Configuration Protocol (NETCONF)</title>
    <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
    <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6241"/>
  <seriesInfo name="DOI" value="10.17487/RFC6241"/>
</reference>
<reference anchor="RFC6243">
  <front>
    <title>With-defaults Capability for NETCONF</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="B. Lengyel" initials="B." surname="Lengyel"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>The Network Configuration Protocol (NETCONF) defines ways to read and edit configuration data from a NETCONF server. In some cases, part of this data may not be set by the NETCONF client, but rather a default value known to the server is used instead. In many situations the NETCONF client has a priori knowledge about default data, so the NETCONF server does not need to save it in a NETCONF configuration datastore or send it to the client in a retrieval operation reply. In other situations the NETCONF client will need this data from the server. Not all server implementations treat this default data the same way. This document defines a capability-based extension to the NETCONF protocol that allows the NETCONF client to identify how defaults are processed by the server, and also defines new mechanisms for client control of server processing of default data. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6243"/>
  <seriesInfo name="DOI" value="10.17487/RFC6243"/>
</reference>
<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>
<reference anchor="RFC8742">
  <front>
    <title>Concise Binary Object Representation (CBOR) Sequences</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
      <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8742"/>
  <seriesInfo name="DOI" value="10.17487/RFC8742"/>
</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="RFC7950">
  <front>
    <title>The YANG 1.1 Data Modeling Language</title>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <date month="August" year="2016"/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7950"/>
  <seriesInfo name="DOI" value="10.17487/RFC7950"/>
</reference>
<reference anchor="RFC7959">
  <front>
    <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
    <date month="August" year="2016"/>
    <abstract>
      <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
      <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
      <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7959"/>
  <seriesInfo name="DOI" value="10.17487/RFC7959"/>
</reference>
<reference anchor="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="RFC8132">
  <front>
    <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
    <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
    <date month="April" year="2017"/>
    <abstract>
      <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
      <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8132"/>
  <seriesInfo name="DOI" value="10.17487/RFC8132"/>
</reference>
<reference anchor="RFC8791">
  <front>
    <title>YANG Data Structure Extensions</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="M. Björklund" initials="M." surname="Björklund"/>
    <author fullname="K. Watsen" initials="K." surname="Watsen"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8791"/>
  <seriesInfo name="DOI" value="10.17487/RFC8791"/>
</reference>
<reference anchor="RFC9254">
  <front>
    <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
    <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
    <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
    <author fullname="A. Pelov" initials="A." surname="Pelov"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <date month="July" year="2022"/>
    <abstract>
      <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
      <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9254"/>
  <seriesInfo name="DOI" value="10.17487/RFC9254"/>
</reference>
<reference anchor="RFC9595">
  <front>
    <title>YANG Schema Item iDentifier (YANG SID)</title>
    <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
    <author fullname="A. Pelov" initials="A." role="editor" surname="Pelov"/>
    <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>YANG Schema Item iDentifiers (YANG SIDs) are globally unique 63-bit unsigned integers used to identify YANG items. SIDs provide a more compact method for identifying those YANG items that can be used efficiently, notably in constrained environments (RFC 7228). This document defines the semantics, registration processes, and assignment processes for YANG SIDs for IETF-managed YANG modules. To enable the implementation of these processes, this document also defines a file format used to persist and publish assigned YANG SIDs.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9595"/>
  <seriesInfo name="DOI" value="10.17487/RFC9595"/>
</reference>
<reference anchor="RFC8342">
  <front>
    <title>Network Management Datastore Architecture (NMDA)</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
    <author fullname="P. Shafer" initials="P." surname="Shafer"/>
    <author fullname="K. Watsen" initials="K." surname="Watsen"/>
    <author fullname="R. Wilton" initials="R." surname="Wilton"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8342"/>
  <seriesInfo name="DOI" value="10.17487/RFC8342"/>
</reference>

<reference anchor="I-D.ietf-core-yang-library">
   <front>
      <title>Constrained YANG Module Library</title>
      <author fullname="Michel Veillette" initials="M." surname="Veillette">
         <organization>Trilliant Networks Inc.</organization>
      </author>
      <author fullname="Ivaylo Petrov" initials="I." surname="Petrov">
         <organization>Acklio</organization>
      </author>
      <date day="11" month="January" year="2021"/>
      <abstract>
	 <t>   This document describes a constrained version of the YANG library
   that provides information about the YANG modules, datastores, and
   datastore schemas used by a constrained network management server
   (e.g., a CORECONF server).

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-core-yang-library-03"/>
   
</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 title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8040">
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="K. Watsen" initials="K." surname="Watsen"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8040"/>
  <seriesInfo name="DOI" value="10.17487/RFC8040"/>
</reference>
<reference anchor="RFC6347">
  <front>
    <title>Datagram Transport Layer Security Version 1.2</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="January" year="2012"/>
    <abstract>
      <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6347"/>
  <seriesInfo name="DOI" value="10.17487/RFC6347"/>
<annotation> This specification is obsoleted by <xref target='RFC9147'/>.</annotation></reference>
<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="RFC8343">
  <front>
    <title>A YANG Data Model for Interface Management</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
      <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
      <t>This document obsoletes RFC 7223.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8343"/>
  <seriesInfo name="DOI" value="10.17487/RFC8343"/>
</reference>
<reference anchor="RFC7317">
  <front>
    <title>A YANG Data Model for System Management</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <date month="August" year="2014"/>
    <abstract>
      <t>This document defines a YANG data model for the configuration and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7317"/>
  <seriesInfo name="DOI" value="10.17487/RFC7317"/>
</reference>
<reference anchor="RFC8613">
  <front>
    <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
    <author fullname="G. Selander" initials="G." surname="Selander"/>
    <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
    <author fullname="F. Palombini" initials="F." surname="Palombini"/>
    <author fullname="L. Seitz" initials="L." surname="Seitz"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
      <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8613"/>
  <seriesInfo name="DOI" value="10.17487/RFC8613"/>
</reference>
<reference anchor="RFC9147">
  <front>
    <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="April" year="2022"/>
    <abstract>
      <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
      <t>This document obsoletes RFC 6347.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9147"/>
  <seriesInfo name="DOI" value="10.17487/RFC9147"/>
</reference>
<reference anchor="RFC9200">
  <front>
    <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
    <author fullname="L. Seitz" initials="L." surname="Seitz"/>
    <author fullname="G. Selander" initials="G." surname="Selander"/>
    <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9200"/>
  <seriesInfo name="DOI" value="10.17487/RFC9200"/>
</reference>
<reference anchor="RFC8323">
  <front>
    <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="S. Lemay" initials="S." surname="Lemay"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="K. Hartke" initials="K." surname="Hartke"/>
    <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
    <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
    <date month="February" year="2018"/>
    <abstract>
      <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
      <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8323"/>
  <seriesInfo name="DOI" value="10.17487/RFC8323"/>
</reference>



    </references>


<?line 1621?>

<section anchor="ietf-coreconf-yang"><name>ietf-coreconf YANG module</name>

<t>This appendix is normative.</t>

<figure title="ietf-coreconf YANG module" anchor="yang-ietf-coreconf"><sourcecode type="yang" name="ietf-coreconf@2026-03-02.yang" markers="true"><![CDATA[
module ietf-coreconf {
  yang-version 1.1;

  namespace "urn:ietf:params:xml:ns:yang:ietf-coreconf";
  prefix coreconf;

  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }

  import ietf-yang-structure-ext {
    prefix sx;
    description
      "This import statement provides the structure extension
       statement of the YANG Data Structure Extension.";
    reference "RFC 8791: YANG Data Structure Extension";
  }

  organization
    "IETF CoRE Working Group";

  contact
    "WG Web:   <https://datatracker.ietf.org/wg/core/>
     WG List:  <mailto:core@ietf.org>

     Michel Veillette
     <mailto:michel.veillette@trilliant.com>

     Alexander Pelov
     <mailto:alexander.pelov@imt-atlantique.fr>

     Peter van der Stok
     <mailto:stokcons@kpnmail.nl>

     Andy Bierman
     <mailto:andy@yumaworks.com>

     Carsten Bormann
     <mailto:cabo@tzi.org>";

  description
    "This module contains the different definitions required
     by the CORECONF protocol.

     Copyright (c) 2026 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX;
     see the RFC itself for full legal notices.";

  revision 2026-03-02 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: CoAP Management Interface (CORECONF)";
  }

  identity unified {
    base ds:datastore;
    description
      "Identifier of the unified configuration and operational
       state datastore.";
  }

  identity error-tag {
    description
      "Base identity for error-tag.";
  }

  identity operation-failed {
    base error-tag;
    description
      "Returned by the CORECONF server when the operation request
       can't be processed successfully.";
  }

  identity invalid-value {
    base error-tag;
    description
      "Returned by the CORECONF server when the CORECONF client tries
       to update or create a leaf with a value encoded using an
       invalid CBOR datatype or if the 'range', 'length',
       'pattern' or 'require-instance' constraint is not
       fulfilled.";
  }

  identity missing-element {
    base error-tag;
    description
      "Returned by the CORECONF server when the operation requested
       by a CORECONF client fails to comply with the 'mandatory'
       constraint defined. The 'mandatory' constraint is
       enforced for leafs and choices, unless the node or any of
       its ancestors have a 'when' condition or 'if-feature'
       expression that evaluates to 'false'.";
  }

  identity unknown-element {
    base error-tag;
    description
      "Returned by the CORECONF server when the CORECONF client tries
       to access a data node of a YANG module not supported, of a
       data node associated with an 'if-feature' expression
       evaluated to 'false' or to a 'when' condition evaluated
       to 'false'.";
  }

  identity bad-element {
    base error-tag;
    description
      "Returned by the CORECONF server when the CORECONF client tries
       to create data nodes for more than one case in a choice.";
  }

  identity data-missing {
    base error-tag;
    description
      "Returned by the CORECONF server when a data node required to
       accept the request is not present.";
  }

  identity error {
    base error-tag;
    description
      "Returned by the CORECONF server when an unspecified error has
      occurred.";
  }

  identity error-app-tag {
    description
      "Base identity for error-app-tag.";
  }

  identity malformed-message {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the payload received
       from the CORECONF client don't contain a well-formed CBOR
       content as defined in [RFC8949] or don't
       comply with the CBOR structure defined within this
       document.";
  }

  identity data-not-unique {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'unique' constraint of a list or leaf-list fails.";
  }

  identity too-many-elements {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'max-elements' constraint of a list or leaf-list fails.";
  }

  identity too-few-elements {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'min-elements' constraint of a list or leaf-list fails.";
  }

  identity must-violation {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the restrictions
       imposed by a 'must' statement are violated.";
  }

  identity duplicate {
    base error-app-tag;
    description
      "Returned by the CORECONF server when a client tries to create
       a duplicate list or leaf-list entry.";
  }

  identity invalid-datatype {
    base error-app-tag;
    description
      "Returned by the CORECONF server when CBOR encoding is
       incorrect or when the value encoded is incompatible with
       the YANG Built-In type. (e.g., value greater than 127
       for an int8, undefined enumeration).";
  }

  identity not-in-range {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'range' property fails.";
  }

  identity invalid-length {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'length' property fails.";
  }

  identity pattern-test-failed {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the validation of the
       'pattern' property fails.";
  }

  identity missing-key {
    base error-app-tag;
    description
      "Returned by the CORECONF server to further qualify a
       missing-element error. This error is returned when the
       CORECONF client tries to create a list instance, without all
       the 'key' specified or when the CORECONF client tries to
       delete a leaf listed as a 'key'.";
  }

  identity missing-input-parameter {
    base error-app-tag;
    description
      "Returned by the CORECONF server when the input parameters
       of a RPC or action are incomplete.";
  }

  identity instance-required {
    base error-app-tag;
    description
      "Returned by the CORECONF server when a leaf of type
       'instance-identifier' or 'leafref' marked with
       require-instance set to 'true' refers to an instance
       that does not exist.";
  }

  identity missing-choice {
    base error-app-tag;
    description
      "Returned by the CORECONF server when no nodes exist in a
       mandatory choice.";
  }

  sx:structure error {
    description
      "Optional payload of a 4.00 Bad Request CoAP error.";

    leaf error-tag {
      type identityref {
        base error-tag;
      }
      mandatory true;
      description
        "The enumerated error-tag.";
    }

    leaf error-app-tag {
      type identityref {
        base error-app-tag;
      }
      description
        "The application-specific error-tag.";
    }

    leaf error-data-node {
      type instance-identifier;
      description
        "When the error reported is caused by a specific data node,
         this leaf identifies the data node in error.";
    }

    leaf error-message {
      type string;
      description
        "A message describing the error.";
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="ietf-coreconf-sid"><name>ietf-coreconf .sid file</name>

<t>This appendix is normative.</t>

<figure title="ietf-coreconf SID file" anchor="yang-ietf-coreconf-sid"><sourcecode type="yang" name="ietf-coreconf@2026-03-02.sid" markers="true"><![CDATA[
{
  "ietf-sid-file:sid-file": {
    "module-name": "ietf-coreconf",
    "module-revision": "2026-03-02",
    "assignment-range": [
      {
        "entry-point": "1000",
        "size": "100"
      }
    ],
    "item": [
      {
        "namespace": "module",
        "identifier": "ietf-coreconf",
        "sid": "1000"
      },
      {
        "namespace": "identity",
        "identifier": "bad-element",
        "sid": "1001"
      },
      {
        "namespace": "identity",
        "identifier": "data-missing",
        "sid": "1002"
      },
      {
        "namespace": "identity",
        "identifier": "data-not-unique",
        "sid": "1003"
      },
      {
        "namespace": "identity",
        "identifier": "duplicate",
        "sid": "1004"
      },
      {
        "namespace": "identity",
        "identifier": "error",
        "sid": "1005"
      },
      {
        "namespace": "identity",
        "identifier": "error-app-tag",
        "sid": "1006"
      },
      {
        "namespace": "identity",
        "identifier": "error-tag",
        "sid": "1007"
      },
      {
        "namespace": "identity",
        "identifier": "instance-required",
        "sid": "1008"
      },
      {
        "namespace": "identity",
        "identifier": "invalid-datatype",
        "sid": "1009"
      },
      {
        "namespace": "identity",
        "identifier": "invalid-length",
        "sid": "1010"
      },
      {
        "namespace": "identity",
        "identifier": "invalid-value",
        "sid": "1011"
      },
      {
        "namespace": "identity",
        "identifier": "malformed-message",
        "sid": "1012"
      },
      {
        "namespace": "identity",
        "identifier": "missing-choice",
        "sid": "1013"
      },
      {
        "namespace": "identity",
        "identifier": "missing-element",
        "sid": "1014"
      },
      {
        "namespace": "identity",
        "identifier": "missing-input-parameter",
        "sid": "1015"
      },
      {
        "namespace": "identity",
        "identifier": "missing-key",
        "sid": "1016"
      },
      {
        "namespace": "identity",
        "identifier": "must-violation",
        "sid": "1017"
      },
      {
        "namespace": "identity",
        "identifier": "not-in-range",
        "sid": "1018"
      },
      {
        "namespace": "identity",
        "identifier": "operation-failed",
        "sid": "1019"
      },
      {
        "namespace": "identity",
        "identifier": "pattern-test-failed",
        "sid": "1020"
      },
      {
        "namespace": "identity",
        "identifier": "too-few-elements",
        "sid": "1021"
      },
      {
        "namespace": "identity",
        "identifier": "too-many-elements",
        "sid": "1022"
      },
      {
        "namespace": "identity",
        "identifier": "unified",
        "sid": "1029"
      },
      {
        "namespace": "identity",
        "identifier": "unknown-element",
        "sid": "1023"
      },
      {
        "namespace": "data",
        "identifier": "/ietf-coreconf:error",
        "sid": "1024"
      },
      {
        "namespace": "data",
        "identifier": "/ietf-coreconf:error/error-app-tag",
        "sid": "1025"
      },
      {
        "namespace": "data",
        "identifier": "/ietf-coreconf:error/error-data-node",
        "sid": "1026"
      },
      {
        "namespace": "data",
        "identifier": "/ietf-coreconf:error/error-message",
        "sid": "1027"
      },
      {
        "namespace": "data",
        "identifier": "/ietf-coreconf:error/error-tag",
        "sid": "1028"
      }
    ]
  }
}
]]></sourcecode></figure>

</section>
<section anchor="example-sids"><name>SIDs used in the examples</name>

<t>The SIDs in the examples of this document are illustrative. This annex lists
them by module, so that an example can be followed from one section to the
next. A node has the same SID in every example in which it appears.</t>

<t>The data examples use the modules ietf-interfaces <xref target="RFC8343"/> and ietf-system
<xref target="RFC7317"/>. The examples of an RPC, an action and notifications use three
small modules written for this document, because the two standard modules
define no action and no notification.</t>

<t>ietf-interfaces, and the identity ethernetCsmacd of iana-if-type:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>module ietf-interfaces</c>
      <c>1500</c>
      <c><xref target="datastore-example"/></c>
      <c>interface (list)</c>
      <c>1533</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>description</c>
      <c>1534</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>enabled</c>
      <c>1535</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>name</c>
      <c>1537</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>type</c>
      <c>1538</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>oper-status</c>
      <c>1544</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
      <c>ethernetCsmacd</c>
      <c>1880</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/></c>
</texttable>

<t>ietf-system:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>module ietf-system</c>
      <c>1700</c>
      <c><xref target="datastore-example"/></c>
      <c>timezone-utc-offset</c>
      <c>1740</c>
      <c><xref target="error-handling"/></c>
      <c>clock (container)</c>
      <c>1721</c>
      <c><xref target="datastore-example"/></c>
      <c>boot-datetime</c>
      <c>1722</c>
      <c><xref target="datastore-example"/>, <xref target="datanode-discovery"/></c>
      <c>current-datetime</c>
      <c>1723</c>
      <c><xref target="fetch-example"/>, <xref target="datastore-example"/>, <xref target="datanode-discovery"/></c>
      <c>ntp/enabled</c>
      <c>1755</c>
      <c><xref target="ipatch-example"/></c>
      <c>ntp/server (list)</c>
      <c>1756</c>
      <c><xref target="ipatch-example"/></c>
      <c>name (of a server)</c>
      <c>1759</c>
      <c><xref target="ipatch-example"/></c>
      <c>prefer (of a server)</c>
      <c>1760</c>
      <c><xref target="ipatch-example"/></c>
      <c>udp (of a server)</c>
      <c>1761</c>
      <c><xref target="ipatch-example"/></c>
      <c>address (of udp)</c>
      <c>1762</c>
      <c><xref target="ipatch-example"/></c>
</texttable>

<t>The YANG library, as assumed in <xref target="yang-library"/>:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>YANG library</c>
      <c>2351</c>
      <c><xref target="yang-library"/></c>
</texttable>

<t>ietf-coreconf, defined in <xref target="ietf-coreconf-sid"/>:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>error</c>
      <c>1024</c>
      <c><xref target="error-handling"/></c>
      <c>error-app-tag</c>
      <c>1025</c>
      <c><xref target="error-handling"/></c>
      <c>error-data-node</c>
      <c>1026</c>
      <c><xref target="error-handling"/></c>
      <c>error-message</c>
      <c>1027</c>
      <c><xref target="error-handling"/></c>
      <c>error-tag</c>
      <c>1028</c>
      <c><xref target="error-handling"/></c>
      <c>invalid-value</c>
      <c>1011</c>
      <c><xref target="error-handling"/></c>
      <c>not-in-range</c>
      <c>1018</c>
      <c><xref target="error-handling"/></c>
</texttable>

<t>The module example-ops, used for the RPC:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>reboot (RPC)</c>
      <c>61000</c>
      <c><xref target="rpc-example"/></c>
      <c>delay</c>
      <c>61001</c>
      <c><xref target="rpc-example"/></c>
      <c>input</c>
      <c>61009</c>
      <c><xref target="rpc-example"/></c>
</texttable>

<t>The module example-server-farm, used for the action:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>server (list)</c>
      <c>60000</c>
      <c><xref target="action-example"/></c>
      <c>name</c>
      <c>60001</c>
      <c><xref target="action-example"/></c>
      <c>reset (action)</c>
      <c>60002</c>
      <c><xref target="action-example"/></c>
      <c>reset-at</c>
      <c>60003</c>
      <c><xref target="action-example"/></c>
      <c>reset-finished-at</c>
      <c>60004</c>
      <c><xref target="action-example"/></c>
      <c>restart (action)</c>
      <c>60005</c>
      <c><xref target="no-input-example"/></c>
      <c>input</c>
      <c>60008</c>
      <c><xref target="action-example"/></c>
      <c>output</c>
      <c>60009</c>
      <c><xref target="action-example"/></c>
</texttable>

<t>The module example-port, used for notifications:</t>

<texttable>
      <ttcol align='left'>Node</ttcol>
      <ttcol align='left'>SID</ttcol>
      <ttcol align='left'>Used in</ttcol>
      <c>example-port-fault</c>
      <c>60010</c>
      <c><xref target="event-stream-example"/></c>
      <c>port-name</c>
      <c>60011</c>
      <c><xref target="event-stream-example"/></c>
      <c>port-fault</c>
      <c>60012</c>
      <c><xref target="event-stream-example"/></c>
</texttable>

</section>
<section removeInRFC="true" anchor="open-issues"><name>Open Issues</name>

<t>The following issues are not resolved in this revision and are planned for
discussion at IETF 127 (see <eref target="https://github.com/core-wg/comi/issues">https://github.com/core-wg/comi/issues</eref>):</t>

<t><list style="symbols">
  <t>How a SID is encoded in a URI path segment, and whether CORECONF supports
discovery of individual data nodes through such URIs, or only through FETCH
and the YANG library (issue #19, pull request #26).</t>
  <t>Whether the Content-Format Option is required on a POST to the datastore
resource, where the same method is used both to create the datastore and to
invoke an RPC or action (issue #29).</t>
  <t>Which security mechanisms a CORECONF implementation is required to support.</t>
</list></t>

</section>
<section numbered="false" anchor="list-of-figures"><name>List of Figures</name>

<dl spacing="compact" indent="11">
  <dt><xref target="archit"/>:</dt>
  <dd>
    <t><xref format="title" target="archit"/></t>
  </dd>
  <dt><xref target="discovery-ex-ds"/>:</dt>
  <dd>
    <t><xref format="title" target="discovery-ex-ds"/></t>
  </dd>
  <dt><xref target="discovery-ex-dn"/>:</dt>
  <dd>
    <t><xref format="title" target="discovery-ex-dn"/></t>
  </dd>
  <dt><xref target="discovery-ex-es"/>:</dt>
  <dd>
    <t><xref format="title" target="discovery-ex-es"/></t>
  </dd>
  <dt><xref target="yang-ietf-coreconf"/>:</dt>
  <dd>
    <t><xref format="title" target="yang-ietf-coreconf"/></t>
  </dd>
  <dt><xref target="yang-ietf-coreconf-sid"/>:</dt>
  <dd>
    <t><xref format="title" target="yang-ietf-coreconf-sid"/></t>
  </dd>
</dl>

</section>
<section numbered="false" anchor="list-of-tables"><name>List of Tables</name>

<dl spacing="compact" indent="11">
  <dt><xref target="tbl-mt-uses"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-mt-uses"/></t>
  </dd>
  <dt><xref target="tbl-ud"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-ud"/></t>
  </dd>
  <dt><xref target="tbl-resources"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-resources"/></t>
  </dd>
  <dt><xref target="tbl-methods"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-methods"/></t>
  </dd>
  <dt><xref target="tbl-query-fetch"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-query-fetch"/></t>
  </dd>
  <dt><xref target="tbl-c-values"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-c-values"/></t>
  </dd>
  <dt><xref target="tbl-d-values"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-d-values"/></t>
  </dd>
  <dt><xref target="tbl-rt"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-rt"/></t>
  </dd>
  <dt><xref target="tbl-ct"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-ct"/></t>
  </dd>
  <dt><xref target="tbl-mt"/>:</dt>
  <dd>
    <t><xref format="title" target="tbl-mt"/></t>
  </dd>
</dl>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>We are very grateful to <contact fullname="Bert Greevenbosch"/> who was one of the original authors
of the CORECONF specification.</t>

<t><contact fullname="Mehmet Ersue"/> and <contact fullname="Bert Wijnen"/> explained the encoding aspects of PDUs transported
under SNMP.
<contact fullname="Koen Zandberg"/>'s implementation input motivated massively simplifying
(and fixing) the URI construction for GET/PUT/POST requests.</t>

<t>The specification has further benefited from comments (alphabetical order) by
<contact fullname="Rodney Cummings"/>,
<contact fullname="Dee Denteneer"/>,
<contact fullname="Esko Dijk"/>,
<contact fullname="Klaus Hartke"/>,
<contact fullname="Michael van Hartskamp"/>,
<contact fullname="Tanguy Ropitault"/>,
<contact fullname="Jürgen Schönwälder"/>,
<contact fullname="Anuj Sehgal"/>,
<contact fullname="Zach Shelby"/>,
<contact fullname="Hannes Tschofenig"/>,
<contact fullname="Michael Verschoor"/>,
<contact fullname="Vojtech Vilimek"/>,
and
<contact fullname="Thomas Watteyne"/>.</t>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="I." surname="Petrov" fullname="Ivaylo Petrov">
      <organization>Google</organization>
      <address>
        <email>ivaylopetrov@google.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
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

-->

</rfc>

