<?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.29 (Ruby 3.0.2) -->


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

]>

<?rfc strict="yes"?>
<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-toutain-core-sid-extension-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SID Extension">SID Extension to efficiently manipulate YANG Data Models</title>

    <author initials="J. A." surname="Fernandez" fullname="Javier A. Fernandez">
      <organization>Institut MINES TELECOM; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>javier-alejandro.fernandez@imt-atlantique.fr</email>
      </address>
    </author>
    <author initials="M." surname="Gudi" fullname="Manoj Gudi">
      <organization>Institut MINES TELECOM; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>manoj.gudi@imt-atlantique.net</email>
      </address>
    </author>
    <author initials="L." surname="Toutain" fullname="Laurent Toutain">
      <organization>Institut MINES TELECOM; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>Laurent.Toutain@imt-atlantique.fr</email>
      </address>
    </author>
    <author initials="V." surname="Vilímek" fullname="Vojtěch Vilímek">
      <organization>CZ.NIC</organization>
      <address>
        <postal>
          <street>Milesovska 1136/5</street>
          <city>13000 Praha</city>
          <country>Czech Republic</country>
        </postal>
        <email>vojtech.vilimek@nic.cz</email>
      </address>
    </author>

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

    
    <workgroup>core working group</workgroup>
    

    <abstract>


<?line 66?>

<!--
As the Internet of Things (IoT) systems are becoming more pervasive with their rapid adoption, they are also becoming more complex in their architecture. Hence, a tool is required to generate prototype code based on the YANG models for constrained devices {{RFC7228}}  to improve interoperability and increase the reusability of software components. A novel approach is introduced in this document to generate software prototypes (also called stubs) in the C language for the CORECONF protocol {{I-D.ietf-core-comi}} using YANG Schema Item iDentifiers (YANG SID {{I-D.ietf-core-sid}}). These stubs greatly reduce the complexity of navigating the CORECONF structure by abstracting the corresponding YANG SIDs.  This document elaborates on the procedure to generate YANG SIDs for a given YANG model of a system, which then generates C stubs using the tools developed by the authors with the help of an example (sensor.yang file).
-->
<t>TBD: to focus on sid extension to allow some manipulations of a CORECONF
datastore without the need to get the full YANG DM.</t>



    </abstract>



  </front>

  <middle>


<?line 74?>

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

<t>The YANG modeling language is very popular for node configuration and
retrieving the state of a device. XML and JSON are also two popular
formats to serialize data in conformance with the data model, notably
used by NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/> respectively. More
recently, a new serialization format has been published, allowing a more
compact representation of the information. This new format, CORECONF
<xref target="I-D.ietf-core-comi"/>, is based on CBOR and introduces an integer YANG
identifier, named SID, instead of a string.</t>

<t>The mapping between strings and integers is kept in a .sid file usually
generated by tools such as pyang.</t>

<t>This document presents some extensions to the sid file, itself defined
in YANG, that make it easier to convert between CBOR and JSON, as well
as to manipulate YANG Data Models in a constrained environment, without
referencing the full YANG module.</t>

</section>
<section anchor="yang-data-model"><name>YANG Data Model</name>

<t>YANG is a modeling language to structure information and check its
conformity. Each element of a YANG Data Model is identified through a
unique identifier. YANG is based on a hierarchical approach. During the
serialization phase, data is represented either in XML or JSON. In this
document we will use the JSON representation. <xref target="RFC7951"/> indicates how
to form a JSON structure conforming to a YANG Data Model:</t>

<t><list style="symbols">
  <t>Leaves are represented as JSON objects, the key being the leaf name.</t>
  <t>Lists are defined through arrays.</t>
  <t>Identityref is a string containing the identifier in the YANG naming
hierarchy for an identity.</t>
</list></t>

<t>The YANG Data Model, in <xref target="Fig-YDM"/>, is used to illustrate how data will
be serialized. It defines a container representing a physical object
able to perform several measurements. The physical object is battery
powered, has a status LED able to change color, and a list of attached
sensors returning an integer value.</t>

<figure title="Example of a YANG Data Model for sensors" anchor="Fig-YDM"><artwork><![CDATA[
<CODE BEGINS> file "sensor.yang"

module sensor {
  yang-version 1.1;
  namespace "http://sensorexample.in/sensor-example";
  prefix sen1;

  organization
    "Internet Engineering Task Force (IETF), CORE Working Group.";

  contact
    "CORE Working Group.";

  description
    "An illustrative YANG module used to demonstrate the
     serialization of a physical object with battery status,
     an LED indicator, and attached sensors.";

  revision 2026-11-02 {
    description
      "Initial revision.";
    reference
      "draft-toutain-core-sid-extension-00";
  }

  identity battery-indicator-base-type {
    description
      "Base identity for battery level indicators.";
  }

  identity high-level {
    base battery-indicator-base-type;
    description
      "Indicates a high battery level.";
  }

  identity med-level {
    base battery-indicator-base-type;
    description
      "Indicates a medium battery level.";
  }

  identity low-level {
    base battery-indicator-base-type;
    description
      "Indicates a low battery level.";
  }

  typedef battery-level {
    type identityref {
      base battery-indicator-base-type;
    }
    description
      "Represents the battery level using an identity.";
  }

  container sensorObject {
    description
      "Represents a physical object containing sensors.";

    leaf statusLED {
      type enumeration {
        enum green {
          value 0;
          description "Green LED indicator.";
        }
        enum yellow {
          value 1;
          description "Yellow LED indicator.";
        }
        enum red {
          value 2;
          description "Red LED indicator.";
        }
      }
      description
        "Indicates the status LED color.";
    }

    leaf battery {
      type battery-level;
      description
        "Indicates the battery level.";
    }

    list sensorReadings {
      key "index";
      description
        "Contains measurements from attached sensors.";

      leaf index {
        type uint8;
        description
          "Identifies the sensor reading.";
      }

      leaf sensorValue {
        type uint32;
        description
          "Contains the integer sensor measurement.";
      }
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

<t>The YANG tree regarding this Data Model is given in <xref target="Fig-YANG-tree"/>.
The tree displays the module hierarchy. For the module "sensor", a
container "sensorObject" contains two leaves ("statusLED", "battery")
and a list ("sensorReadings").</t>

<figure title="YANG tree associated to the DM." anchor="Fig-YANG-tree"><artwork><![CDATA[
$ pyang -f tree sensor.yang 
module: sensor
  +--rw sensorObject
     +--rw statusLED?        enumeration
     +--rw battery?          battery-level
     +--rw sensorReadings* [index]
        +--rw index          uint8
        +--rw sensorValue?   uint32
]]></artwork></figure>

</section>
<section anchor="json-serialization"><name>JSON serialization</name>

<t>An example of data, serialized with JSON, and conforming to the YANG
Data Model, is given in <xref target="Fig-JSON"/>. Embedded JSON Objects allow to
represent the hierarchy. The key of the outer JSON Object is composed of
the module name and the container name. The embedded JSON Object
associated to this contains the leaves as keys. The YANG list is
represented by a JSON array.</t>

<figure title="JSON serialization of the example data." anchor="Fig-JSON"><artwork><![CDATA[
{
  "sensor:sensorObject": {
    "statusLED": "green",
    "battery": "sensor:med-level",
    "sensorReadings": [
      {
        "index": 0,
        "sensorValue": 42
      },
      {
        "index": 1,
        "sensorValue": 22
      }
    ]
  }
}
]]></artwork></figure>

</section>
<section anchor="cbor-serialization"><name>CBOR Serialization</name>

<t>JSON notation is verbose for constrained networks and objects. To
optimize the size of the representation, <xref target="RFC9254"/> defines a CBOR
serialization, also used in CORECONF. YANG ASCII identifiers are
replaced by unique numbers.</t>

<t>In CORECONF, the map keys are positive integers, called SID, which
replace the ASCII identifiers and are unique.
<xref target="I-D.ietf-core-sid"/> defines the allocation process. Module developers
may ask for a SID range from their authority. For example, for an IETF
module, the IANA will allocate a SID range.</t>

<t><xref target="Fig-SID-Alloc"/> shows an example of this conversion. The range is
arbitrarily fixed between 60000 and 60099. Note that the module, the
identities, and the leaves have an assigned SID.</t>

<figure title="SID allocation for the example module." anchor="Fig-SID-Alloc"><artwork><![CDATA[
$ pyang --sid-generate-file=60000:100 --sid-list sensor.yang 

SID        Assigned to
---------  --------------------------------------------------
60000      module sensor
60001      identity battery-indicator-base-type
60002      identity high-level
60003      identity low-level
60004      identity med-level
60005      data /sensor:sensorObject
60006      data /sensor:sensorObject/battery
60007      data /sensor:sensorObject/sensorReadings
60008      data /sensor:sensorObject/sensorReadings/index
60009      data /sensor:sensorObject/sensorReadings/sensorValue
60010      data /sensor:sensorObject/statusLED

File sensor@unknown.sid created
Number of SIDs available : 100
Number of SIDs used : 11
]]></artwork></figure>

<t>To perform the allocation, the pyang utility generates a .sid file in
the JSON format, resulting in a YANG Data Model specified in
<xref target="I-D.ietf-core-sid"/>. <xref target="Fig-SID-file"/> gives an excerpt.</t>

<figure title="Excerpt of the .sid file." anchor="Fig-SID-file"><artwork><![CDATA[
{
  "assignment-range": [
    {
      "entry-point": 60000,
      "size": 100
    }
  ],
  "module-name": "sensor",
  "module-revision": "unknown",
  "item": [
    {
      "namespace": "module",
      "identifier": "sensor",
      "status": "unstable",
      "sid": 60000
    },
    {
      "namespace": "identity",
      "identifier": "battery-indicator-base-type",
      "status": "unstable",
      "sid": 60001
    },
    ...
]]></artwork></figure>

<t>The serialization in CBOR of the JSON example in <xref target="Fig-JSON"/> is given
in <xref target="Fig-CBOR"/>. Compared to the compacted representation of the JSON
structure (152 Bytes), the CORECONF structure is 24 bytes long. Although
the size is different, the structure remains the same. It is composed of
embedded CBOR Maps (equivalent of JSON Object). The first key is a SID
(60005 corresponds to the container). Embedded CBOR Maps use a delta
notation to encode the keys. The key 5 corresponds to SID 60005+5, thus
to the leaf "statusLED". Key 2 in the second CBOR Map corresponds to the
YANG list "sensorReadings", and the elements of the list are stored in a
CBOR Array.</t>

<t>Note that in this example, the enum for "statusLED" (60005+5) is an
integer and the identityref for "battery" (60005+1) is also an integer
pointing to the SID "med-level" (60004).</t>

<figure title="CBOR serialization of the example data." anchor="Fig-CBOR"><artwork><![CDATA[
b'a119ea65a305000119ea640282a2010002182aa201010216'

Diagnostic notation:
{60005: 
  {5: 0, 
   1: 60004, 
   2: [
     {1: 0, 
      2: 42}, 
     {1: 1, 
      2: 22}
     ]
  }
}
]]></artwork></figure>

</section>
<section anchor="conversion-between-json-and-cbor"><name>Conversion between JSON and CBOR</name>

<t>Even if the conversion between CBOR and JSON formats might look obvious,
including data compatible with a YANG Data Model is not so trivial. The
reason is that JSON uses ASCII identifiers for readability and CBOR
prefers integers for compactness. The <xref target="Tab-types"/> summarizes some YANG
types when coded in JSON (<xref target="RFC7951"/>) or CBOR (<xref target="RFC8949"/>).</t>

<texttable title="YANG basic types in JSON and CBOR." anchor="Tab-types">
      <ttcol align='left'>YANG</ttcol>
      <ttcol align='left'>JSON</ttcol>
      <ttcol align='left'>CBOR</ttcol>
      <c>int8, int16, int32, uint8, uint16, uint32</c>
      <c>number</c>
      <c>+int, -int</c>
      <c>int64, uint64</c>
      <c>string</c>
      <c>+int, -int</c>
      <c>decimal64</c>
      <c>string</c>
      <c>CBOR Tag 4</c>
      <c>binary</c>
      <c>base64</c>
      <c>byte array</c>
      <c>bits</c>
      <c>string</c>
      <c>array</c>
      <c>boolean</c>
      <c>boolean</c>
      <c>boolean</c>
      <c>identityref</c>
      <c>string</c>
      <c>+int</c>
      <c>enumeration</c>
      <c>string</c>
      <c>+int</c>
</texttable>

<t>The conversion from CBOR to JSON is not direct, since the YANG type
needs to be considered. For instance, an integer could be converted into
a number, an enum, or an identityref. Note that for union, the
conversion is simple since some CBOR Tags may be used to indicate how
the integer is converted, but outside of the union, for a single value,
there is no such clue.</t>

<t>In the other direction, a JSON string may correspond to a 64-bit
integer, an enumeration, or an identityref.</t>

<t>To perform the conversion, the YANG type must be known, but do not
appear in the SID file, a converter has to refer directly to the YANG
model, which is a more complex structure to parse.</t>

<t>SID extension propose to add this information directly in the sid file
but augmenting the YANG Data Model that defines it <xref target="RFC9595"/> (see
<xref target="Fig-SID-extension"/>). The augmentation is specified in the YANG
module of <xref target="sid-ext-yang"/>.</t>

<section anchor="sid-ext-model"><name>YANG Data Model of the SID Extension</name>

<t>The "type" container is added to each SID item that is a leaf. When the
"type" container is not present, the node is not a leaf and there is no
need for type conversion.</t>

<t>Its "base-type" leaf identifies the YANG built-in type of the leaf. The
sid-extension data model (cf. <xref target="sid-ext-yang"/>) defines an identityref
for each YANG built-in type. If the model uses a derived type, defined
by a typedef, "base-type" gives the built-in type it derives from, since
a typedef is not an item of the .sid file (<xref target="RFC9595"/>).</t>

<t>For a type derived from an identityref, "base-type" is "identityref" and
the "identityref" leaf gives the SID of the base identity. In the CBOR
notation, a pair "{ ...., SID1: value1, ...}" in the CBOR Map is
resolved by a first lookup in the .sid file for SID1, which returns that
the type is "identityref", and a second lookup for value1 in the
"identity" namespace, which returns the ASCII identifier.</t>

<t>For an enumeration, the "enumerate" container associates a value
("enum-value") with its name ("enum-name").</t>

<t>For bits, the "bits" container associates a position ("bit-position")
with its name ("bit-name").</t>

<t>The container "type" may contain several structures reflecting a
union, disambiguated by CORECONF through the use of CBOR tags.</t>

<figure title="SID file with the type extension." anchor="Fig-SID-extension"><artwork><![CDATA[
...
    {
      "namespace": "data",
      "identifier": "/sensor:sensorObject",
      "status": "unstable",
      "sid": 60005
    },
    {
      "namespace": "data",
      "identifier": "/sensor:sensorObject/battery",
      "status": "unstable",
      "sid": 60006,
      "ietf-sid-file-extension:type": {
        "base-type": "ietf-sid-file-extension:identityref",
        "identityref": 60001
      }
    },
    {
      "namespace": "data",
      "identifier": "/sensor:sensorObject/sensorReadings",
      "status": "unstable",
      "sid": 60007
    },
    {
      "namespace": "data",
      "identifier": "/sensor:sensorObject/sensorReadings/index",
      "status": "unstable",
      "sid": 60008,
      "ietf-sid-file-extension:type": {
        "base-type": "ietf-sid-file-extension:uint8"
      }
    },
    {
      "namespace": "data",
      "identifier": "/sensor:sensorObject/sensorReadings/sensorValue",
      "status": "unstable",
      "sid": 60009,
      "ietf-sid-file-extension:type": {
        "base-type": "ietf-sid-file-extension:uint32"
      }
    }
...
]]></artwork></figure>

</section>
</section>
<section anchor="navigating-the-coreconf-structure"><name>Navigating the CORECONF Structure</name>

<t>As we saw, the CORECONF data is structured as a tree. The
<xref target="Fig-coreconf-ex"/> gives an example for the example module described in
<xref target="Fig-YDM"/>. The numbers are the SIDs associated to the YANG Data Model.
<xref target="I-D.ietf-core-comi"/> defines how queries are made on this structure to
get the full tree or a sub tree.</t>

<figure title="SIDs in the CORECONF tree of the example module." anchor="Fig-coreconf-ex"><artwork><![CDATA[
                      sensorObject
                         60005
           battery     LED |    sensorReadings
                +----------+----------+
                |          |          |
              60006      60010      60007
                                      |
               +-----------+----------+-----------+ 
        index  |           |          |           |  sensorValue
        +---------+ +----------+ +----------+ +----------+     
        |         | |          | |          | |          |
        60008 60009 60008  60009 60008  60009 60008  60009                                 

]]></artwork></figure>

<t>Requesting the SID corresponding to the module (60005) will return the
full tree. Requesting "battery" leaf (60006) will return the leaf and
the associated value, while requesting "sensorReadings" (60007) will
return the subtree with all its values. Going deeper in this sub-tree
imposes the use of keys. For instance, to get a specific "sensorValue"
one must provide the key "index" (60008).</t>

<t>In <xref target="I-D.ietf-core-comi"/>, accessing a specific element within a YANG
list requires providing the corresponding list keys in the request (e.g.,
FETCH). While <xref target="Fig-coreconf-ex"/> illustrates a simple case involving a
single list, a data model may contain several nested lists, and each list
may require one or more keys. Determining which keys are required at each
level normally requires knowledge of the YANG Data Model.</t>

<section anchor="sid-ext-key-mapping"><name>YANG Data Model of the key mapping</name>

<t>To avoid requiring constrained devices to parse and store the full YANG
Data Model, we propose to embed a footprint of the Data Model into the
SID file through a key-mapping object. This object associates each list
SID with the SIDs of its key leaf nodes, preserving their order as
defined in the YANG Data Model.</t>

<figure title="key-mapping of the SID file." anchor="Fig-key-mapping"><sourcecode type="json"><![CDATA[
  "ietf-sid-file-extension:key-mapping": {
    "entry": [
      {
        "list-sid": 60007,
        "key-sids": [60008]
      }
    ]
  }
]]></sourcecode></figure>

<t>The "key-mapping" container is added at the "sid-file" level. It
contains a list of "entry" objects. Each entry gives, in "list-sid", the
SID of a YANG list and, in "key-sids", the array of the SIDs acting as
YANG keys for that YANG list. The "key-mapping" container indicates:</t>

<t><list style="symbols">
  <t>that a SID is a YANG list, since its value appears as the "list-sid"
of an entry.</t>
  <t>the number of elements in the corresponding "key-sids" array indicates
how many items are involved as a YANG list key. The value for these
items can be taken from the request.</t>
  <t>the array also indicates, in the order of the YANG keys, which SIDs
contain the value that must be compared to the YANG list key sent in
the request.</t>
</list></t>

<t>With the information contained in the "key-mapping" structure, it is
possible to browse any CORECONF structure and return the appropriate
requested SID without the need to go back to the original YANG file.</t>

</section>
</section>


  </middle>

  <back>



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



<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="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="RFC7228">
  <front>
    <title>Terminology for Constrained-Node Networks</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="M. Ersue" initials="M." surname="Ersue"/>
    <author fullname="A. Keranen" initials="A." surname="Keranen"/>
    <date month="May" year="2014"/>
    <abstract>
      <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7228"/>
  <seriesInfo name="DOI" value="10.17487/RFC7228"/>
</reference>

<reference anchor="RFC7951">
  <front>
    <title>JSON Encoding of Data Modeled with YANG</title>
    <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
    <date month="August" year="2016"/>
    <abstract>
      <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7951"/>
  <seriesInfo name="DOI" value="10.17487/RFC7951"/>
</reference>

<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="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="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="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="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="I-D.ietf-core-sid">
   <front>
      <title>YANG Schema Item iDentifier (YANG SID)</title>
      <author fullname="Michel Veillette" initials="M." surname="Veillette">
         <organization>Trilliant Networks Inc.</organization>
      </author>
      <author fullname="Alexander Pelov" initials="A." surname="Pelov">
         <organization>IMT Atlantique</organization>
      </author>
      <author fullname="Ivaylo Petrov" initials="I." surname="Petrov">
         <organization>Google Switzerland GmbH</organization>
      </author>
      <author fullname="Carsten Bormann" initials="C." surname="Bormann">
         <organization>Universität Bremen TZI</organization>
      </author>
      <author fullname="Michael Richardson" initials="M." surname="Richardson">
         <organization>Sandelman Software Works</organization>
      </author>
      <date day="22" month="December" year="2023"/>
      <abstract>
	 <t>   YANG Schema Item iDentifiers (YANG SID) are globally unique 63-bit
   unsigned integers used to identify YANG items, as a more compact
   method to identify YANG items that can be used for efficiency and in
   constrained environments (RFC 7228).  This document defines the
   semantics, the registration, and assignment processes of 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.


   // The present version (–24) is intended to address the remaining
   // IESG comments.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-core-sid-24"/>
   
</reference>


<reference anchor="I-D.ietf-core-comi">
   <front>
      <title>CoAP Management Interface (CORECONF)</title>
      <author fullname="Michel Veillette" initials="M." surname="Veillette">
         <organization>Trilliant Networks Inc.</organization>
      </author>
      <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         <organization>consultant</organization>
      </author>
      <author fullname="Alexander Pelov" initials="A." surname="Pelov">
         <organization>IMT Atlantique</organization>
      </author>
      <author fullname="Andy Bierman" initials="A." surname="Bierman">
         <organization>YumaWorks</organization>
      </author>
      <author fullname="Carsten Bormann" initials="C." surname="Bormann">
         <organization>Universität Bremen TZI</organization>
      </author>
      <date day="2" month="November" year="2026"/>
      <abstract>
	 <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>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-core-comi-22"/>
   
</reference>




    </references>




<?line 568?>

<section anchor="sid-ext-yang"><name>YANG Module for the SID File Extension</name>

<t>The module below augments the "ietf-sid-file" module of <xref target="RFC9595"/>
using the structure augmentation of <xref target="RFC8791"/>. It adds the type
information to each SID item and a key-mapping at the "sid-file" level.</t>

<figure title="YANG module extending the SID file" anchor="Fig-sid-ext-yang"><sourcecode type="yang"><![CDATA[
<CODE BEGINS> file "ietf-sid-file-extension@2026-07-19.yang"
module ietf-sid-file-extension {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-sid-file-extension";
  prefix sid-ext;

  import ietf-sid-file {
    prefix sid;
    reference "RFC 9595";
  }

  import ietf-yang-structure-ext {
    prefix sx;
    reference "RFC 8791";
  }

  organization "Personal contribution";
  contact
    "Editor: Laurent Toutain
      <mailto:laurent.toutain@imt-atlantique.fr>

             Javier A. Fernandez
             <mailto:javier-alejandro.fernandez@imt-atlantique.fr>

             Vojtěch Vilímek
             <mailto:vojtech.vilimek@nic.cz>";
  description
    "Augmentation of ietf-sid-file to add type information
     per item and key-mapping at the sid-file level.";

  revision 2026-07-19 {
    description "IETF 126 Hackathon refinements.";
    reference
      "draft-toutain-core-sid-extension-00";
  }

  revision 2026-04-28 {
    description "Initial revision.";
    reference
      "draft-toutain-core-sid-extension-00";
  }

  // it may be better if NETMOD created a YANG Module
  // with identities for built-in types

  identity yang-base-type {
    description "Base identity for all YANG built-in types.";
  }

  identity anydata {
    base yang-base-type;
    description "YANG built-in type anydata.";
  }

  identity anyxml {
    base yang-base-type;
    description "YANG built-in type anyxml.";
  }

  identity binary {
    base yang-base-type;
    description "YANG built-in type binary.";
  }

  identity boolean {
    base yang-base-type;
    description "YANG built-in type boolean.";
  }

  identity decimal64 {
    base yang-base-type;
    description "YANG built-in type decimal64.";
  }

  identity empty {
    base yang-base-type;
    description "YANG built-in type empty.";
  }

  identity identityref {
    base yang-base-type;
    description "YANG built-in type identityref.";
  }

  identity instance-identifier {
    base yang-base-type;
    description "YANG built-in type instance-identifier.";
  }

  identity int8 {
    base yang-base-type;
    description "YANG built-in type int8.";
  }

  identity int16 {
    base yang-base-type;
    description "YANG built-in type int16.";
  }

  identity int32 {
    base yang-base-type;
    description "YANG built-in type int32.";
  }

  identity int64 {
    base yang-base-type;
    description "YANG built-in type int64.";
  }

  identity leafref {
    base yang-base-type;
    description "YANG built-in type leafref.";
  }

  identity string {
    base yang-base-type;
    description "YANG built-in type string.";
  }

  identity uint8 {
    base yang-base-type;
    description "YANG built-in type uint8.";
  }

  identity uint16 {
    base yang-base-type;
    description "YANG built-in type uint16.";
  }

  identity uint32 {
    base yang-base-type;
    description "YANG built-in type uint32.";
  }

  identity uint64 {
    base yang-base-type;
    description "YANG built-in type uint64.";
  }

  identity union {
    base yang-base-type;
    description "YANG built-in type union.";
  }

  typedef yang-type {
    type identityref {
      base yang-base-type;
    }
    description
      "An identityref that selects one of the YANG built-in types
       defined in this module.";
  }

  // --- Augmentation 1: within the grouping, via its point of use ---
  sx:augment-structure "/sid:sid-file/sid:item" {
    // This augmentation targets the expanded list inside the /sid:sid-file/sid:item,
    // the /sid:sid-file is sx:structure, not grouping (even through it is defined inside grouping)
    description
      "Adds type information to each SID item.";
    container type {
      description
        "Type information of the YANG node identified by the SID.";
      leaf base-type {
        type yang-type;
        description "YANG built-in type of the node.";
      }
      leaf identityref {
        type uint64;
        description "SID of the referenced identity.";
      }
      container enumerate {
        description
          "Enumeration item information, used when the SID
           identifies an enumeration item.";
        leaf enum-value {
          type uint32;
          description "Value of the enumeration item.";
        }
        leaf enum-name {
          type string;
          description "Name of the enumeration item.";
        }
      }
      container bits {
        description
          "Bit item information, used when the SID identifies
           a bit item.";
        leaf bit-position {
          type uint32;
          description "Position of the bit item.";
        }
        leaf bit-name {
          type string;
          description "Name of the bit item.";
        }
      }
    }
  }

  // --- Augmentation 2: at the sid-file level, excluding items ---
  sx:augment-structure "/sid:sid-file" {
    description
      "Adds key-mapping at the sid-file level.";
    container key-mapping {
      description
        "Maps each list SID to the ordered list of SIDs
         of its key leaves.";
      list entry {
        key "list-sid";
        description
          "Key information for one YANG list.";
        leaf list-sid {
          type sid:sid;
          description "SID of the list node.";
        }
        leaf-list key-sids {
          type sid:sid;
          ordered-by user;
          description "SIDs of the key leaves, in key order.";
        }
      }
    }
  }
}
<CODE ENDS>
]]></sourcecode></figure>


</section>


  </back>

<!-- ##markdown-source:
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
W8kJjg28AAqOX+iLtbf7lxdEMi13Jhe0jygFpCuuiaa2w4ylRqLSbqMb+HlA
EpQkxk+hDoTJOyCLqtRNdWSTG4HXLqljCoUrLIAz7DTfX67a2lu0IEPyJPg/
PVFqZ+f3PG34LWyD8kAoUf+mKKdJPO5fflO/BlJj7Rp6kZsXye1UuzYZZzle
UQ/kdEEKuPj24Pz8+O1fdPhDiWr1x05Oj47/Veu1x57VHzs7Pj178/b7g1d/
Oq49tt947Pzg/E9nmNpZgzbYVX52WMh7UWtbKT90g3NGa8+GWaNrz+61wXVd
CuvPPm17lq2vNbj7jWddD8z1OeDqJpdR/hCVpdeiG7zQnR/eR4Mf3g/2f3hv
ovkP75+5Py5BlaI6+jOCmpgp2qn6httmvsBiculw+QKLx/GMeKGHt8+Vogyr
dQxu4fXt5zQL/VDX0Gbvrb1qkbRFvsaLklNT4Uk2n+DCGprWHm1ZRR1ddvSQ
TQ6BNQ7xsMFsg78bm6wzb/+yA/z6kHRYEv3UvAC7SmW+H74TPPX8bHoJKD4s
Q3ktTQUpwkZXXPvJfNTeUwgfciNI7F9gU8L+SM/gGDPq4c7dW++8bBL9tC3J
WM1Bi0l6bdsUEzQYRGMCMo+qpGQN5bkFdJSR/oiuQa9UsDZ5e09Y2/uFWHNN
lj4De5s5455RJwPJECcSatLAwKd/evVKGpvejV954m09k1ixyKFrDejP721L
nq5tyaftSEsO/9rGfHo7q0+j/w3y638lK+z/Ula4o6nXr7EJn3w03PMuuHGD
EUPe2v0CxtIhZ7XAvzfuGuz+4l12rdc+Q+R94tl8zzvVMqob0GP0njZrHbBN
XFYP9J9SVMPxO5YInPR6pV6ZEsxVykiF+YPNPnnH7W3Evel3lMzhAszSpSGL
uXLgbF+KFX9eyn5ASz5yZd0+3l4csQnLddOwZy5x/WGLSvLQ945d5qYnDTLR
/uTeFFfUpgYtaGomQnn+Po8+NIL9B+NUPf0X7UNxR6DBxUjgWgxO5xW7kKZq
Z6M81fkvpfFEJMuX6iQW3MUWLfm80eAyB6p8SDUy6DAZm4cPyVuyDjfYBPaI
ceIrpV5vkbMEG4FghPWChM0Ff87Htdp6ZjtC/W0C2qU+ECeBb1yAOEQfnksJ
jnO9hqJ/bGuqvq62vUni9F24QPcMxTGCnv+OHEJqoAKVYiVk8X/bdqPgtGF/
ctgSy/r/mt1uGZ/oEOAyoyJophZYgJHt8Iu09vcyEGEtL1uIQWh/TomLd/Ct
xJSd7GJGxoVhzKXOI4fs1HbYc6eDG865EKUclTguQndWWILX2lXETZW/aJf2
Ev9RJwuo0HiA/a+3iU9hGxM+loIz5lo6w3hZCJvwEIiu5jJ7iDuG5xd6zOQI
Q8Wk16KZePn6sLmGh/LJJva6KoIQpzPnSnWnb/jSBRFQliYUaMkNf8PBf5sM
ZErsJLfeklY3XcEThiewmMvOrsxXPgQyVfWB6FBFCnSFEzaHzxZdivedVSKs
mFNyNmBXyiKzpTV1sKzX4Pfkeu4TX5yBoQ+7Uv8p06Nh0AlOExSVBBZ0YQnj
QhzVgkP2Pi8wxonIu0CiuGDotBgJd0YNnuLnVDALmCL2oPbtbmUfLDFdhBU4
zEUFB/ULFVPl0Fr/o5YvfFKYh9rsVKl7nlEQBC6ILmzfaWlykpui9FkixKez
kPGxm4uLn4hOgjUcF0HeyIW05RXUCeXFpTQxi/QFM/GF3vINzzj3CaeFwxLT
RPnUHf168v/WWHEaMEWEPqPpGH3a0kxtczX7UVEOMNjIF8JMKCksl5AT7wGo
ilWOIaHwU+t0TmAPouan/15WOaqEWOfaFZrlz06CTKF4WoWiJSwhVVJCSu7+
DFYwwfAmvwqUA7bPolgrGaWAZj1qxk11qMC28WVPinYyp/DCyASgfmMt8Zmk
TIfDHXpQ4jJhtG2bS5aqwsyqpFmwVI/i+Qjl5ogdlpJJmNd+itPXFwWFktIF
iJrfMtDwwxfSlcJ+9LEZxraxo3rXVv5qoU8D8+3K7mzFxtIwXHhcNAsBm+XG
XBFfxw6s3J1lEnqmnBEYvyvbhOdfgQYcnhCCAfq8LaKOSi6bnbd8C1NCfj0N
0FcMuzZiMbq0gISzXD4kWeu+8xxGmG3oLmWlp6CUSr5sCosrsFSYQJNgrqeZ
OmBBK0WnItHSF4aqPPnDnDQjOOPq2aM0X/koBJmdvrRUU2YoNgC2BfdwjoWx
b9YsWLi79ByLajrVMBiZSz1eI1uEMkW63FW4XhrJharIZXE9Viuf6XRfsGDt
mjNSsFqndJW4uevkTlyAFY367NI2r2xh0Sgx73uz6fRnYFMbQ5W0iHE1txvw
4htfFrUcsxTGT9b2yVDq9TAa7780TQeVg6b/yNFDSWTBz5ZGE+xRa0ORXtiq
1r68eusO0WJH2Q4b0iwnkw29aKjGWSYkaQO21tKnA2NlNbIhqQZxupRKUs9w
XD9Z/+wq1WBS1B/ZmY5m6RDKTYp9si2+bUtR2775KjWXHHSlI8qhsqBVUKf2
Ip504CbJOVlJ8BlK+8Ey7KVaFRF3NfCA4EX77TzbvIEEDfrbFlJyL8WNwUty
BQuDikkc278xtjpEVOEv1GhZotw2N8Z+GHUyWcDR7gH2rapKos1+pioMJ3e2
ER5aHIyp+ie76ajiSxe0L2AvZlUJ+9XHVgEdxecY0GS6FTzW1Z28s40Tno1I
VcCHL8jV+ELP+qgIbW0rap+w1Tmh7Q8GZ5/kix/STte/iB94Wr746qtt32e6
bEwWU7BkuTt03CO27KiAmX6Z2fvhZLf1A7Ih+Dvj6JJzg9opHqfcjpnojABu
ORtgGa2SLJpu6xcwXbtx/UvzPolnqy03hW1Zr6ZLfXylqN2FZR0ZOuv9KDUa
ri+WpjelF6YXOGG3Rnw4gGzXwMCndRx3sGWlh7Fdz5hjJre5cgGThB+5IKvb
fpGi8Z1kqqFu+VKA70eFQ+TYEJuYm79z44y9oAm4dRP45sC427jJyOuokmEK
TAFk8hPV26+0L/Bm/Qte8R89EAGgNtHe/7MvXbE+b3vBq08jd/1LOt3bnvbS
0N43s8dG9tLC3vaul6713K7+x9tb1UrC+mbTPrVuUW17gn1p25ObYA/WcY8z
DLC8jl2a8xpD5b4bdztH3Yx2XKrp/wAY2pszBYsAAA==

-->

</rfc>

