| < draft-ietf-core-yang-cbor-03.txt | draft-ietf-core-yang-cbor-04.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force M. Veillette, Ed. | Internet Engineering Task Force M. Veillette, Ed. | |||
| Internet-Draft Trilliant Networks Inc. | Internet-Draft Trilliant Networks Inc. | |||
| Intended status: Standards Track A. Pelov, Ed. | Intended status: Standards Track A. Pelov, Ed. | |||
| Expires: May 4, 2017 Acklio | Expires: August 11, 2017 Acklio | |||
| A. Somaraju | A. Somaraju | |||
| Tridonic GmbH & Co KG | Tridonic GmbH & Co KG | |||
| R. Turner | R. Turner | |||
| Landis+Gyr | Landis+Gyr | |||
| A. Minaburo | A. Minaburo | |||
| Acklio | Acklio | |||
| October 31, 2016 | February 07, 2017 | |||
| CBOR Encoding of Data Modeled with YANG | CBOR Encoding of Data Modeled with YANG | |||
| draft-ietf-core-yang-cbor-03 | draft-ietf-core-yang-cbor-04 | |||
| Abstract | Abstract | |||
| This document defines encoding rules for serializing configuration | This document defines encoding rules for serializing configuration | |||
| data, state data, RPC input and RPC output, Action input, Action | data, state data, RPC input and RPC output, Action input, Action | |||
| output and notifications defined within YANG modules using the | output and notifications defined within YANG modules using the | |||
| Concise Binary Object Representation (CBOR) [RFC7049]. | Concise Binary Object Representation (CBOR) [RFC7049]. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on May 4, 2017. | This Internet-Draft will expire on August 11, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. CBOR diagnostic notation . . . . . . . . . . . . . . . . 4 | 2.1. YANG Schema Item iDentifier (SID) . . . . . . . . . . . . 4 | |||
| 3. Properties of the CBOR Encoding . . . . . . . . . . . . . . . 5 | 2.2. CBOR diagnostic notation . . . . . . . . . . . . . . . . 5 | |||
| 4. Encoding of YANG Data Node Instances . . . . . . . . . . . . 6 | 3. Properties of the CBOR Encoding . . . . . . . . . . . . . . . 6 | |||
| 4.1. The 'leaf' Data Node . . . . . . . . . . . . . . . . . . 6 | 4. Encoding of YANG Data Node Instances . . . . . . . . . . . . 7 | |||
| 4.2. The 'container' Data Node . . . . . . . . . . . . . . . . 6 | 4.1. The 'leaf' Data Node . . . . . . . . . . . . . . . . . . 7 | |||
| 4.2.1. SIDs as keys . . . . . . . . . . . . . . . . . . . . 7 | 4.2. The 'container' Data Node . . . . . . . . . . . . . . . . 7 | |||
| 4.2.2. Member names as keys . . . . . . . . . . . . . . . . 8 | 4.2.1. SIDs as keys . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.3. The 'leaf-list' Data Node . . . . . . . . . . . . . . . . 9 | 4.2.2. Member names as keys . . . . . . . . . . . . . . . . 9 | |||
| 4.4. The 'list' Data Node . . . . . . . . . . . . . . . . . . 9 | 4.3. The 'leaf-list' Data Node . . . . . . . . . . . . . . . . 10 | |||
| 4.4. The 'list' Data Node . . . . . . . . . . . . . . . . . . 10 | ||||
| 4.4.1. SIDs as keys . . . . . . . . . . . . . . . . . . . . 10 | 4.4.1. SIDs as keys . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.4.2. Member names as keys . . . . . . . . . . . . . . . . 13 | 4.4.2. Member names as keys . . . . . . . . . . . . . . . . 13 | |||
| 4.5. The 'anydata' Data Node . . . . . . . . . . . . . . . . . 14 | 4.5. The 'anydata' Data Node . . . . . . . . . . . . . . . . . 14 | |||
| 4.6. The 'anyxml' Data Node . . . . . . . . . . . . . . . . . 15 | 4.6. The 'anyxml' Data Node . . . . . . . . . . . . . . . . . 16 | |||
| 5. Representing YANG Data Types in CBOR . . . . . . . . . . . . 15 | 5. Representing YANG Data Types in CBOR . . . . . . . . . . . . 16 | |||
| 5.1. The unsigned integer Types . . . . . . . . . . . . . . . 15 | 5.1. The unsigned integer Types . . . . . . . . . . . . . . . 16 | |||
| 5.2. The integer Types . . . . . . . . . . . . . . . . . . . . 15 | 5.2. The integer Types . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.3. The 'decimal64' Type . . . . . . . . . . . . . . . . . . 16 | 5.3. The 'decimal64' Type . . . . . . . . . . . . . . . . . . 17 | |||
| 5.4. The 'string' Type . . . . . . . . . . . . . . . . . . . . 16 | 5.4. The 'string' Type . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.5. The 'boolean' Type . . . . . . . . . . . . . . . . . . . 17 | 5.5. The 'boolean' Type . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.6. The 'enumeration' Type . . . . . . . . . . . . . . . . . 17 | 5.6. The 'enumeration' Type . . . . . . . . . . . . . . . . . 18 | |||
| 5.7. The 'bits' Type . . . . . . . . . . . . . . . . . . . . . 18 | 5.7. The 'bits' Type . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.8. The 'binary' Type . . . . . . . . . . . . . . . . . . . . 18 | 5.8. The 'binary' Type . . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.9. The 'leafref' Type . . . . . . . . . . . . . . . . . . . 19 | 5.9. The 'leafref' Type . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.10. The 'identityref' Type . . . . . . . . . . . . . . . . . 19 | 5.10. The 'identityref' Type . . . . . . . . . . . . . . . . . 21 | |||
| 5.10.1. SIDs as identityref . . . . . . . . . . . . . . . . 20 | 5.10.1. SIDs as identityref . . . . . . . . . . . . . . . . 21 | |||
| 5.10.2. Name as identityref . . . . . . . . . . . . . . . . 20 | 5.10.2. Name as identityref . . . . . . . . . . . . . . . . 22 | |||
| 5.11. The 'empty' Type . . . . . . . . . . . . . . . . . . . . 21 | 5.11. The 'empty' Type . . . . . . . . . . . . . . . . . . . . 22 | |||
| 5.12. The 'union' Type . . . . . . . . . . . . . . . . . . . . 21 | 5.12. The 'union' Type . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.13. The 'instance-identifier' Type . . . . . . . . . . . . . 22 | 5.13. The 'instance-identifier' Type . . . . . . . . . . . . . 24 | |||
| 5.13.1. SIDs as instance-identifier . . . . . . . . . . . . 22 | 5.13.1. SIDs as instance-identifier . . . . . . . . . . . . 24 | |||
| 5.13.2. Names as instance-identifier . . . . . . . . . . . . 25 | 5.13.2. Names as instance-identifier . . . . . . . . . . . . 27 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 7.1. Tags Registry . . . . . . . . . . . . . . . . . . . . . . 26 | 7.1. Tags Registry . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 26 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 27 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 29 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 27 | 9.2. Informative References . . . . . . . . . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 1. Introduction | 1. Introduction | |||
| The specification of the YANG 1.1 data modelling language [RFC7950] | The specification of the YANG 1.1 data modelling language [RFC7950] | |||
| defines an XML encoding for data instances, i.e. contents of | defines an XML encoding for data instances, i.e. contents of | |||
| configuration datastores, state data, RPC inputs and outputs, action | configuration datastores, state data, RPC inputs and outputs, action | |||
| inputs and outputs, and event notifications. | inputs and outputs, and event notifications. | |||
| A new set of encoding rules has been defined to allow the use of the | A new set of encoding rules has been defined to allow the use of the | |||
| same data models in environments based on the JavaScript Object | same data models in environments based on the JavaScript Object | |||
| skipping to change at page 3, line 44 ¶ | skipping to change at page 3, line 45 ¶ | |||
| o action | o action | |||
| o anydata | o anydata | |||
| o anyxml | o anyxml | |||
| o data node | o data node | |||
| o data tree | o data tree | |||
| o feature | ||||
| o identity | ||||
| o module | o module | |||
| o notification | o notification | |||
| o RPC | o RPC | |||
| o schema node | o schema node | |||
| o schema tree | o schema tree | |||
| o submodule | o submodule | |||
| The following terms are defined in [RFC7951]: | The following terms are defined in [RFC7951]: | |||
| o member name | o member name | |||
| o name of an identity | o name of an identity | |||
| o namespace-qualified | o namespace-qualified | |||
| This specification also makes use of the following terminology: | This specification also makes use of the following terminology: | |||
| o child: A schema node defined within a collection such as a | o child: A schema node defined within a collection such as a | |||
| container, a list, a case, a notification, an RPC input, an RPC | container, a list, a case, a notification, an RPC input, an RPC | |||
| output, an action input, an action output. | output, an action input, an action output. | |||
| o delta : Difference between the SID assigned to the current schema | o delta: Difference between the current SID and a reference SID. A | |||
| node and the SID assigned to the parent. | reference SID is defined for each context for which deltas are | |||
| used. | ||||
| o item: A schema node, an identity, a module, a submodule or a | ||||
| feature defined using the YANG modeling language. | ||||
| o parent: The collection in which a schema node is defined. | o parent: The collection in which a schema node is defined. | |||
| o structured identifier or SID: Unsigned integer used to identify | o YANG Schema Item iDentifier (SID): Unsigned integer used to | |||
| different YANG items. | identify different YANG items. | |||
| 2.1. CBOR diagnostic notation | 2.1. YANG Schema Item iDentifier (SID) | |||
| Some of the items defined in YANG [RFC7950] require the use of a | ||||
| unique identifier. In both NETCONF [RFC6241] and RESTCONF [RFC8040], | ||||
| these identifiers are implemented using names. To allow the | ||||
| implementation of data models defined in YANG in constrained devices | ||||
| and constrained networks, a more compact method to identify YANG | ||||
| items is required. This compact identifier, called YANG Schema Item | ||||
| iDentifier (SID), is encoded using an unsigned integer. The | ||||
| following items are identified using SIDs: | ||||
| o identities | ||||
| o data nodes | ||||
| o RPCs and associated input(s) and output(s) | ||||
| o actions and associated input(s) and output(s) | ||||
| o notifications and associated information | ||||
| o YANG modules, submodules and features | ||||
| To minimize its size, in certain positions, SIDs are represented | ||||
| using a (signed) delta from a reference SID and the current SID. | ||||
| Conversion from SIDs to deltas and back to SIDs are stateless | ||||
| processes solely based on the data serialized or deserialized. | ||||
| Mechanisms and processes used to assign SIDs to YANG items and to | ||||
| guarantee their uniqueness is outside the scope of the present | ||||
| specification. If SIDs are to be used, the present specification is | ||||
| used in conjunction with a specification defining this management. | ||||
| One example for such a specification is under development as | ||||
| [I-D.ietf-core-sid]. | ||||
| 2.2. CBOR diagnostic notation | ||||
| Within this document, CBOR binary contents are represented using an | Within this document, CBOR binary contents are represented using an | |||
| equivalent textual form called CBOR diagnostic notation as defined in | equivalent textual form called CBOR diagnostic notation as defined in | |||
| [RFC7049] section 6. This notation is used strictly for | [RFC7049] section 6. This notation is used strictly for | |||
| documentation purposes and is never used in the data serialization. | documentation purposes and is never used in the data serialization. | |||
| Table 1 below provides a summary of this notation. | Table 1 below provides a summary of this notation. | |||
| +----------+------+--------------------------+-----------+----------+ | +----------+------+--------------------------+-----------+----------+ | |||
| | CBOR | CBOR | Diagnostic notation | Example | CBOR | | | CBOR | CBOR | Diagnostic notation | Example | CBOR | | |||
| | content | type | | | encoding | | | content | type | | | encoding | | |||
| skipping to change at page 5, line 38 ¶ | skipping to change at page 6, line 38 ¶ | |||
| | Null | 7/22 | null | null | f6 | | | Null | 7/22 | null | null | f6 | | |||
| | Not | 7/23 | undefined | undefined | f7 | | | Not | 7/23 | undefined | undefined | f7 | | |||
| | assigned | | | | | | | assigned | | | | | | |||
| +----------+------+--------------------------+-----------+----------+ | +----------+------+--------------------------+-----------+----------+ | |||
| Table 1: CBOR diagnostic notation summary | Table 1: CBOR diagnostic notation summary | |||
| The following extensions to the CBOR diagnostic notation are | The following extensions to the CBOR diagnostic notation are | |||
| supported: | supported: | |||
| o Comments can be added to the end of each line. Any characters | o Any text within and including a pair of slashes is considered a | |||
| after a Pound sign ('#') outside of a string, up to the end of the | comment. | |||
| line, are treated as a comment. | ||||
| o Deltas are represented as numbers preceded by a '+' or '-' sign. | o Deltas are visualized as numbers preceded by a '+' or '-' sign. | |||
| The use of the '+' sign for positive deltas represents an | The use of the '+' sign for positive deltas represents an | |||
| extension to the CBOR diagnostic notation as defined by [RFC7049] | extension to the CBOR diagnostic notation as defined by [RFC7049] | |||
| section 6. | section 6. | |||
| 3. Properties of the CBOR Encoding | 3. Properties of the CBOR Encoding | |||
| This document defines CBOR encoding rules for YANG schema trees and | This document defines CBOR encoding rules for YANG schema trees and | |||
| their subtrees. | their subtrees. | |||
| Basic schema nodes such as leaf, leaf-list, list, anydata and anyxml | Basic schema nodes such as leaf, leaf-list, list, anydata and anyxml | |||
| can be encoded standalone. In this case, only the value of this | can be encoded standalone. In this case, only the value of this | |||
| schema node is encoded in CBOR. Identification of this value needs | schema node is encoded in CBOR. Identification of this value needs | |||
| to be provided by some external means when required. | to be provided by some external means when required. | |||
| A collection such as container, list instance, notification, RPC | A collection such as container, list instance, notification, RPC | |||
| input, RPC output, action input and action output is serialized using | input, RPC output, action input and action output is serialized using | |||
| a CBOR map in which each child schema node is encoded using a key and | a CBOR map in which each child schema node is encoded using a key and | |||
| a value. This specification supports two type of keys; SID as | a value. This specification supports two type of CBOR keys; YANG | |||
| defined in [I-D.ietf-core-sid] and member names as defined in | Schema Item iDentifier (SID) as defined in Section 2.1 and member | |||
| [RFC7951]. Each of these key type is encoded using a specific CBOR | names as defined in [RFC7951]. Each of these key types is encoded | |||
| type which allows their interpretation during the deserialization | using a specific CBOR type which allows their interpretation during | |||
| process. The end user of this mapping specification (e.g. RESFCONF, | the deserialization process. The end user of this mapping | |||
| CoMI) can mandate the use of a specific key type. | specification (e.g. RESTCONF [RFC8040], CoMI [I-D.ietf-core-comi]) | |||
| can mandate the use of a specific key type. | ||||
| In order to minimize the size of the encoded data, the proposed | In order to minimize the size of the encoded data, the proposed | |||
| mapping avoid any unnecessary meta-information beyond those natively | mapping avoids any unnecessary meta-information beyond those natively | |||
| supported by CBOR. For instance, CBOR tags are used solely in the | supported by CBOR. For instance, CBOR tags are used solely in the | |||
| case of the union datatype to distinguish explicitly the use of | case of anyxml data nodes and the union datatype to distinguish | |||
| different YANG datatypes encoded using the same CBOR major type. | explicitly the use of different YANG datatypes encoded using the same | |||
| CBOR major type. | ||||
| It is expected that application entities generating and decoding CBOR | ||||
| contents have enough knowledge about the information processed in | ||||
| order to perform the expected task without the need of such extra | ||||
| meta-information. | ||||
| 4. Encoding of YANG Data Node Instances | 4. Encoding of YANG Data Node Instances | |||
| Schema node instances defined using the YANG modeling language are | Schema node instances defined using the YANG modeling language are | |||
| encoded using CBOR [RFC7049] based on the rules defined in this | encoded using CBOR [RFC7049] based on the rules defined in this | |||
| section. We assume that the reader is already familiar with both | section. We assume that the reader is already familiar with both | |||
| YANG [RFC7950] and CBOR [RFC7049]. | YANG [RFC7950] and CBOR [RFC7049]. | |||
| 4.1. The 'leaf' Data Node | 4.1. The 'leaf' Data Node | |||
| Leafs MUST be encoded based on the encoding rules specified in | Leafs MUST be encoded based on the encoding rules specified in | |||
| Section 5. | Section 5. | |||
| 4.2. The 'container' Data Node | 4.2. The 'container' Data Node | |||
| Collections such as containers, list instances, notifications, RPC | Collections such as containers, list instances, notifications, RPC | |||
| inputs, RPC outputs, action inputs and action outputs MUST be encoded | inputs, RPC outputs, action inputs and action outputs MUST be encoded | |||
| using a CBOR map data item (major type 5). A map is comprised of | using a CBOR map data item (major type 5). A map is comprised of | |||
| pairs of data items, with each data item consisting of a key and a | pairs of data items, with each data item consisting of a key and a | |||
| value. Each key within the CBOR map is set to a data node | value. Each key within the CBOR map is set to a data node | |||
| identifier, each value is set to the value of this data node | identifier, each value is set to the value of this data node instance | |||
| instance. | according to the instance datatype. | |||
| This specification supports two type of keys; SID as defined in | This specification supports two type of CBOR keys; SID as defined in | |||
| [I-D.ietf-core-sid] encoded using CBOR unsigned or signed integers | Section 2.1 encoded as deltas and member names as defined in | |||
| and member names as defined in [RFC7951] encoded using CBOR text | [RFC7951] encoded using CBOR text strings. The use of CBOR byte | |||
| strings. The use of CBOR byte strings for keys is reserved for | strings for keys is reserved for future extensions. | |||
| future extensions. | ||||
| 4.2.1. SIDs as keys | 4.2.1. SIDs as keys | |||
| Keys implemented using SIDs MUST be encoded using a CBOR unsigned | Keys implemented using SIDs MUST be encoded using a CBOR unsigned | |||
| integer (major type 0) or CBOR signed integer (major type 1), | integer (major type 0) or CBOR negative integer (major type 1), | |||
| depending on the actual value. Keys are set to the delta of the | depending on the actual value. Keys are represented as the delta of | |||
| associated SID, delta values are computed as follows: | the associated SID, delta values are computed as follows: | |||
| o The delta value is equal to the SID of the current schema node | o The delta value is equal to the SID of the current schema node | |||
| minus the SID of the parent schema node. When no parent exists in | minus the SID of the parent schema node. When no parent exists in | |||
| the context of use of this container, the delta is set to the SID | the context of use of this container, the delta is set to the SID | |||
| of the current schema node (a parent with SID equal to zero is | of the current schema node (i.e., a parent with SID equal to zero | |||
| assumed). | is assumed). | |||
| o Delta values may result in a negative number, clients and servers | o Delta values may result in a negative number, clients and servers | |||
| MUST support negative deltas. | MUST support both unsigned and negative deltas. | |||
| The following example shows the encoding of the 'system' container | The following example shows the encoding of a 'system' container | |||
| using the SIDs defined in [I-D.ietf-core-sid] Appendix C. | instance. | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| typedef date-and-time { | typedef date-and-time { | |||
| type string { | type string { | |||
| pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-] | pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-] | |||
| \d{2}:\d{2})'; | \d{2}:\d{2})'; | |||
| } | } | |||
| } | } | |||
| container system { | container clock { | |||
| leaf hostname { | leaf current-datetime { | |||
| type inet:domain-name; | type date-and-time; | |||
| } | ||||
| container clock { | ||||
| leaf current-datetime { | ||||
| type date-and-time; | ||||
| } | ||||
| leaf boot-datetime { | leaf boot-datetime { | |||
| type date-and-time; | type date-and-time; | |||
| } | ||||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: | CBOR diagnostic notation: | |||
| { | { | |||
| 1717 : { # clock (SID 1717) | 1717 : { / clock (SID 1717) / | |||
| +2 : "2015-10-02T14:47:24Z-05:00", # current-datetime (SID 1719) | +2 : "2015-10-02T14:47:24Z-05:00", / current-datetime (SID 1719) / | |||
| +1 : "2015-09-15T09:12:58Z-05:00" # boot-datetime (SID 1718) | +1 : "2015-09-15T09:12:58Z-05:00" / boot-datetime (SID 1718) / | |||
| } | ||||
| } | } | |||
| } | ||||
| CBOR encoding: | CBOR encoding: | |||
| a1 # map(1) | a1 # map(1) | |||
| 19 06b5 # unsigned(1717) | 19 06b5 # unsigned(1717) | |||
| a2 # map(2) | a2 # map(2) | |||
| 02 # unsigned(2) | 02 # unsigned(2) | |||
| 78 1a # text(26) | 78 1a # text(26) | |||
| 323031352d31302d30325431343a34373a32345a2d30353a3030 | 323031352d31302d30325431343a34373a32345a2d30353a3030 | |||
| 01 # unsigned(1) | 01 # unsigned(1) | |||
| skipping to change at page 8, line 35 ¶ | skipping to change at page 9, line 25 ¶ | |||
| 4.2.2. Member names as keys | 4.2.2. Member names as keys | |||
| Keys implemented using member names MUST be encoded using a CBOR text | Keys implemented using member names MUST be encoded using a CBOR text | |||
| string data item (major type 3). A namespace-qualified member name | string data item (major type 3). A namespace-qualified member name | |||
| MUST be used for all members of a top-level collection, and then also | MUST be used for all members of a top-level collection, and then also | |||
| whenever the namespaces of the schema node and its parent are | whenever the namespaces of the schema node and its parent are | |||
| different. In all other cases, the simple form of the member name | different. In all other cases, the simple form of the member name | |||
| MUST be used. Names and namespaces are defined in [RFC7951] section | MUST be used. Names and namespaces are defined in [RFC7951] section | |||
| 4. | 4. | |||
| The following example shows the encoding of the 'system' container | The following example shows the encoding of a 'system' container | |||
| using names. This example is described in Section 4.2.1. | instance using names. This example is described in Section 4.2.1. | |||
| CBOR diagnostic notation: | CBOR diagnostic notation: | |||
| { | { | |||
| "ietf-system:clock" : { | "ietf-system:clock" : { | |||
| "current-datetime" : "2015-10-02T14:47:24Z-05:00", | "current-datetime" : "2015-10-02T14:47:24Z-05:00", | |||
| "boot-datetime" : "2015-09-15T09:12:58Z-05:00" | "boot-datetime" : "2015-09-15T09:12:58Z-05:00" | |||
| } | } | |||
| } | } | |||
| skipping to change at page 9, line 24 ¶ | skipping to change at page 10, line 11 ¶ | |||
| 626f6f742d6461746574696d65 # "boot-datetime" | 626f6f742d6461746574696d65 # "boot-datetime" | |||
| 78 1a # text(26) | 78 1a # text(26) | |||
| 323031352d30392d31355430393a31323a35385a2d30353a3030 | 323031352d30392d31355430393a31323a35385a2d30353a3030 | |||
| 4.3. The 'leaf-list' Data Node | 4.3. The 'leaf-list' Data Node | |||
| A leaf-list MUST be encoded using a CBOR array data item (major type | A leaf-list MUST be encoded using a CBOR array data item (major type | |||
| 4). Each entry of this array MUST be encoded using the rules defined | 4). Each entry of this array MUST be encoded using the rules defined | |||
| by the YANG type specified. | by the YANG type specified. | |||
| The following example shows the encoding the 'search' leaf-list | The following example shows the encoding a 'search' leaf-list | |||
| containing the two entries, "ietf.org" and "ieee.org". | instance containing the two entries, "ietf.org" and "ieee.org". | |||
| Definition example [RFC7317]: | Definition example [RFC7317]: | |||
| typedef domain-name { | typedef domain-name { | |||
| type string { | type string { | |||
| length "1..253"; | length "1..253"; | |||
| pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9].) | pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9].) | |||
| *([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.? | *([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.? | |||
| )|\.'; | )|\.'; | |||
| } | } | |||
| skipping to change at page 10, line 7 ¶ | skipping to change at page 10, line 43 ¶ | |||
| 4.4. The 'list' Data Node | 4.4. The 'list' Data Node | |||
| A list MUST be encoded using a CBOR array data item (major type 4). | A list MUST be encoded using a CBOR array data item (major type 4). | |||
| Each list instance within this CBOR array is encoded using a CBOR map | Each list instance within this CBOR array is encoded using a CBOR map | |||
| data item (major type 5) based on the same rules as a YANG container | data item (major type 5) based on the same rules as a YANG container | |||
| as defined in Section 4.2. | as defined in Section 4.2. | |||
| 4.4.1. SIDs as keys | 4.4.1. SIDs as keys | |||
| The follwoing example show the encoding a the 'server' list using the | The following example show the encoding of a 'server' list instance | |||
| SIDs defined in [I-D.ietf-core-sid] Appendix C. It is important to | using SIDs. It is important to note that the protocol or method | |||
| note that the protocol or method using this mapping may carry a | using this mapping may carry a parent SID or may have the knowledge | |||
| parent SID or may have the knowledge of this parent SID based on its | of this parent SID based on its context. In these cases, delta | |||
| context. In these cases, delta encoding can be performed based on | encoding can be performed based on this parent SID which minimizes | |||
| this parent SID which minimizes the size of the encoded data. | the size of the encoded data. | |||
| The following example shows the encoding of the 'server' list | ||||
| containing two enties. SIDs used in this example are defined in | ||||
| [I-D.ietf-core-sid] Appendix C. It is important to note that the | ||||
| protocol or method using this mapping may carry a parent SID or may | ||||
| have the knowledge of this parent SID based on its context. In these | ||||
| cases, delta encoding can be performed based on this parent SID which | ||||
| minimizes the size of the encoded data. | ||||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| list server { | list server { | |||
| key name; | key name; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| } | } | |||
| choice transport { | choice transport { | |||
| skipping to change at page 12, line 7 ¶ | skipping to change at page 12, line 7 ¶ | |||
| leaf prefer { | leaf prefer { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: | CBOR diagnostic notation: | |||
| [ | [ | |||
| { | { | |||
| 1755 : "NRC TIC server", # name (SID 1755) | 1755 : "NRC TIC server", / name (SID 1755) / | |||
| 1757 : { # udp (SID 1757) | 1757 : { / udp (SID 1757) / | |||
| +1 : "tic.nrc.ca", # address (SID 1758) | +1 : "tic.nrc.ca", / address (SID 1758) / | |||
| +2 : 123 # port (SID 1759) | +2 : 123 / port (SID 1759) / | |||
| }, | }, | |||
| 1753 : 0, # association-type (SID 1753) | 1753 : 0, / association-type (SID 1753) / | |||
| 1754 : false, # iburst (SID 1754) | 1754 : false, / iburst (SID 1754) / | |||
| 1756 : true # prefer (SID 1756) | 1756 : true / prefer (SID 1756) / | |||
| }, | }, | |||
| { | { | |||
| 1755 : "NRC TAC server", # name (SID 1755) | 1755 : "NRC TAC server", / name (SID 1755) / | |||
| 1757 : { # udp (SID 1757) | 1757 : { / udp (SID 1757) / | |||
| +1 : "tac.nrc.ca" # address (SID 1758) | +1 : "tac.nrc.ca" / address (SID 1758) / | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| CBOR encoding: | CBOR encoding: | |||
| 82 # array(2) | 82 # array(2) | |||
| a5 # map(5) | a5 # map(5) | |||
| 19 06db # unsigned(1755) | 19 06db # unsigned(1755) | |||
| 6e # text(14) | 6e # text(14) | |||
| skipping to change at page 13, line 7 ¶ | skipping to change at page 13, line 7 ¶ | |||
| 6e # text(14) | 6e # text(14) | |||
| 4e52432054414320736572766572 # "NRC TAC server" | 4e52432054414320736572766572 # "NRC TAC server" | |||
| 19 06dd # unsigned(1757) | 19 06dd # unsigned(1757) | |||
| a1 # map(1) | a1 # map(1) | |||
| 01 # unsigned(1) | 01 # unsigned(1) | |||
| 6a # text(10) | 6a # text(10) | |||
| 7461632e6e72632e6361 # "tac.nrc.ca" | 7461632e6e72632e6361 # "tac.nrc.ca" | |||
| 4.4.2. Member names as keys | 4.4.2. Member names as keys | |||
| The following example shows the encoding of the 'server' list using | The following example shows the encoding of a 'server' list instance | |||
| names. This example is described in Section 4.4.1. | using names. This example is described in Section 4.4.1. | |||
| CBOR diagnostic notation: | CBOR diagnostic notation: | |||
| [ | [ | |||
| { | { | |||
| "ietf-system:name" : "NRC TIC server", | "ietf-system:name" : "NRC TIC server", | |||
| "ietf-system:udp" : { | "ietf-system:udp" : { | |||
| "address" : "tic.nrc.ca", | "address" : "tic.nrc.ca", | |||
| "port" : 123 | "port" : 123 | |||
| }, | }, | |||
| skipping to change at page 15, line 11 ¶ | skipping to change at page 15, line 11 ¶ | |||
| o Keys of any inner data nodes MUST be set to valid deltas or member | o Keys of any inner data nodes MUST be set to valid deltas or member | |||
| names. | names. | |||
| o The CBOR array MUST contain either unique scalar values (as a | o The CBOR array MUST contain either unique scalar values (as a | |||
| leaf-list, see Section 4.3), or maps (as a list, see Section 4.4). | leaf-list, see Section 4.3), or maps (as a list, see Section 4.4). | |||
| o Values MUST follow the encoding rules of one of the datatypes | o Values MUST follow the encoding rules of one of the datatypes | |||
| listed in Section 5. | listed in Section 5. | |||
| The following example shows a possible use of anydata. In this | ||||
| example, an anydata is used to define a data node containing a | ||||
| notification event, this data node can be part of a YANG list to | ||||
| create an event logger. | ||||
| Definition example: | ||||
| anydata event; | ||||
| This example also assumes the assistance of the following | ||||
| notification. | ||||
| module example-port { | ||||
| ... | ||||
| notification example-port-fault { # SID 2600 | ||||
| leaf port-name { # SID 2601 | ||||
| type string; | ||||
| } | ||||
| leaf port-fault { # SID 2601 | ||||
| type string; | ||||
| } | ||||
| } | ||||
| } | ||||
| CBOR diagnostic notation: | ||||
| { | ||||
| 2601 : "0/4/21", / port-name / | ||||
| 2602 : "Open pin 2" / port-fault / | ||||
| } | ||||
| CBOR encoding: | ||||
| a2 # map(2) | ||||
| 19 0a29 # unsigned(2601) | ||||
| 66 # text(6) | ||||
| 302f342f3231 # "0/4/21" | ||||
| 19 0a2a # unsigned(2602) | ||||
| 6a # text(10) | ||||
| 4f70656e2070696e2032 # "Open pin 2" | ||||
| 4.6. The 'anyxml' Data Node | 4.6. The 'anyxml' Data Node | |||
| An anyxml schema node is used to serialize an arbitrary CBOR content, | An anyxml schema node is used to serialize an arbitrary CBOR content, | |||
| i.e., its value can be any CBOR binary object. | i.e., its value can be any CBOR binary object. anyxml value may | |||
| contain CBOR data items tagged with one of the tag listed in | ||||
| Section 7.1, these tags shall be supported. | ||||
| The following example shows a valid CBOR encoded instance. | ||||
| Definition example from [RFC7951]: | ||||
| anyxml bar; | ||||
| CBOR diagnostic notation: [true, null, true] | ||||
| CBOR encoding: 83 f5 f6 f5 | ||||
| 5. Representing YANG Data Types in CBOR | 5. Representing YANG Data Types in CBOR | |||
| The CBOR encoding of an instance of a leaf or leaf-list data node | ||||
| depends on the built-in type of that data node. The following sub- | ||||
| section defined the CBOR encoding of each built-in type supported by | ||||
| YANG as listed in [RFC7950] section 4.2.4. Each subsection shows an | ||||
| example value assigned to a data node instance of the discussed | ||||
| built-in type. | ||||
| 5.1. The unsigned integer Types | 5.1. The unsigned integer Types | |||
| Leafs of type uint8, uint16, uint32 and uint64 MUST be encoded using | Leafs of type uint8, uint16, uint32 and uint64 MUST be encoded using | |||
| a CBOR unsigned integer data item (major type 0). | a CBOR unsigned integer data item (major type 0). | |||
| The following example shows the encoding of leaf 'mtu' set to 1280 | The following example shows the encoding of a 'mtu' leaf instance set | |||
| bytes. | to 1280 bytes. | |||
| Definition example from [RFC7277]: | Definition example from [RFC7277]: | |||
| leaf mtu { | leaf mtu { | |||
| type uint16 { | type uint16 { | |||
| range "68..max"; | range "68..max"; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: 1280 | CBOR diagnostic notation: 1280 | |||
| CBOR encoding: 19 0500 | CBOR encoding: 19 0500 | |||
| 5.2. The integer Types | 5.2. The integer Types | |||
| Leafs of type int8, int16, int32 and int64 MUST be encoded using | Leafs of type int8, int16, int32 and int64 MUST be encoded using | |||
| either CBOR unsigned integer (major type 0) or CBOR signed integer | either CBOR unsigned integer (major type 0) or CBOR negative integer | |||
| (major type 1), depending on the actual value. | (major type 1), depending on the actual value. | |||
| The following example shows the encoding of leaf 'timezone-utc- | The following example shows the encoding of a 'timezone-utc-offset' | |||
| offset' set to -300 minutes. | leaf instance set to -300 minutes. | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| leaf timezone-utc-offset { | leaf timezone-utc-offset { | |||
| type int16 { | type int16 { | |||
| range "-1500 .. 1500"; | range "-1500 .. 1500"; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: -300 | CBOR diagnostic notation: -300 | |||
| CBOR encoding: 39 012b | CBOR encoding: 39 012b | |||
| 5.3. The 'decimal64' Type | 5.3. The 'decimal64' Type | |||
| Leafs of type decimal64 MUST be encoded using a decimal fraction as | Leafs of type decimal64 MUST be encoded using a decimal fraction as | |||
| defined in [RFC7049] section 2.4.3. | defined in [RFC7049] section 2.4.3. | |||
| The following example shows the encoding of leaf 'my-decimal' set to | The following example shows the encoding of a 'my-decimal' leaf | |||
| 2.57. | instance set to 2.57. | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| leaf my-decimal { | leaf my-decimal { | |||
| type decimal64 { | type decimal64 { | |||
| fraction-digits 2; | fraction-digits 2; | |||
| range "1 .. 3.14 | 10 | 20..max"; | range "1 .. 3.14 | 10 | 20..max"; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: 4([-2, 257]) | CBOR diagnostic notation: 4([-2, 257]) | |||
| CBOR encoding: c4 82 21 19 0101 | CBOR encoding: c4 82 21 19 0101 | |||
| 5.4. The 'string' Type | 5.4. The 'string' Type | |||
| Leafs of type string MUST be encoded using a CBOR text string data | Leafs of type string MUST be encoded using a CBOR text string data | |||
| item (major type 3). | item (major type 3). | |||
| The following example shows the encoding of leaf 'name' set to | The following example shows the encoding of a 'name' leaf instance | |||
| "eth0". | set to "eth0". | |||
| Definition example from [RFC7223]: | Definition example from [RFC7223]: | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| } | } | |||
| CBOR diagnostic notation: "eth0" | CBOR diagnostic notation: "eth0" | |||
| CBOR encoding: 64 65746830 | CBOR encoding: 64 65746830 | |||
| 5.5. The 'boolean' Type | 5.5. The 'boolean' Type | |||
| Leafs of type boolean MUST be encoded using a CBOR true (major type | Leafs of type boolean MUST be encoded using a CBOR true (major type | |||
| 7, additional information 21) or false data item (major type 7, | 7, additional information 21) or false data item (major type 7, | |||
| additional information 20). | additional information 20). | |||
| The following example shows the encoding of leaf 'enabled' set to | The following example shows the encoding of an 'enabled' leaf | |||
| 'true'. | instance set to 'true'. | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| } | } | |||
| CBOR diagnostic notation: true | CBOR diagnostic notation: true | |||
| CBOR encoding: f5 | CBOR encoding: f5 | |||
| 5.6. The 'enumeration' Type | 5.6. The 'enumeration' Type | |||
| Leafs of type enumeration MUST be encoded using a CBOR unsigned | Leafs of type enumeration MUST be encoded using a CBOR unsigned | |||
| integer (major type 0) or CBOR signed integer (major type 1), | integer (major type 0) or CBOR negative integer (major type 1), | |||
| depending on the actual value. Enumeration values are either | depending on the actual value. Enumeration values are either | |||
| explicitly assigned using the YANG statement 'value' or automatically | explicitly assigned using the YANG statement 'value' or automatically | |||
| assigned based on the algorithm defined in [RFC7950] section 9.6.4.2. | assigned based on the algorithm defined in [RFC7950] section 9.6.4.2. | |||
| The following example shows the encoding of leaf 'oper-status' set to | The following example shows the encoding of an 'oper-status' leaf | |||
| 'testing'. | instance set to 'testing'. | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| leaf oper-status { | leaf oper-status { | |||
| type enumeration { | type enumeration { | |||
| enum up { value 1; } | enum up { value 1; } | |||
| enum down { value 2; } | enum down { value 2; } | |||
| enum testing { value 3; } | enum testing { value 3; } | |||
| enum unknown { value 4; } | enum unknown { value 4; } | |||
| enum dormant { value 5; } | enum dormant { value 5; } | |||
| skipping to change at page 18, line 17 ¶ | skipping to change at page 19, line 33 ¶ | |||
| Leafs of type bits MUST be encoded using a CBOR byte string data item | Leafs of type bits MUST be encoded using a CBOR byte string data item | |||
| (major type 2). Bits position are either explicitly assigned using | (major type 2). Bits position are either explicitly assigned using | |||
| the YANG statement 'position' or automatically assigned based on the | the YANG statement 'position' or automatically assigned based on the | |||
| algorithm defined in [RFC7950] section 9.7.4.2. | algorithm defined in [RFC7950] section 9.7.4.2. | |||
| Bits position 0 to 7 are assigned to the first byte within the byte | Bits position 0 to 7 are assigned to the first byte within the byte | |||
| string, bits 8 to 15 to the second byte, and subsequent bytes are | string, bits 8 to 15 to the second byte, and subsequent bytes are | |||
| assigned similarly. Within each byte, bits are assigned from least | assigned similarly. Within each byte, bits are assigned from least | |||
| to most significant. | to most significant. | |||
| The following example shows the encoding of leaf 'mybits' with the | The following example shows the encoding of a 'mybits' leaf instance | |||
| 'disable-nagle' and '10-Mb-only' flags set. | with the 'disable-nagle' and '10-Mb-only' flags set. | |||
| Definition example from [RFC7950]: | Definition example from [RFC7950]: | |||
| leaf mybits { | leaf mybits { | |||
| type bits { | type bits { | |||
| bit disable-nagle { | bit disable-nagle { | |||
| position 0; | position 0; | |||
| } | } | |||
| bit auto-sense-speed { | bit auto-sense-speed { | |||
| position 1; | position 1; | |||
| skipping to change at page 18, line 37 ¶ | skipping to change at page 20, line 4 ¶ | |||
| bit auto-sense-speed { | bit auto-sense-speed { | |||
| position 1; | position 1; | |||
| } | } | |||
| bit 10-Mb-only { | bit 10-Mb-only { | |||
| position 2; | position 2; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: h'05' | CBOR diagnostic notation: h'05' | |||
| CBOR encoding: 41 05 | CBOR encoding: 41 05 | |||
| 5.8. The 'binary' Type | 5.8. The 'binary' Type | |||
| Leafs of type binary MUST be encoded using a CBOR byte string data | Leafs of type binary MUST be encoded using a CBOR byte string data | |||
| item (major type 2). | item (major type 2). | |||
| The following example shows the encoding of leaf 'aes128-key' set to | The following example shows the encoding of an 'aes128-key' leaf | |||
| 0x1f1ce6a3f42660d888d92a4d8030476e. | instance set to 0x1f1ce6a3f42660d888d92a4d8030476e. | |||
| Definition example: | Definition example: | |||
| leaf aes128-key { | leaf aes128-key { | |||
| type binary { | type binary { | |||
| length 16; | length 16; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: h'1f1ce6a3f42660d888d92a4d8030476e' | CBOR diagnostic notation: h'1f1ce6a3f42660d888d92a4d8030476e' | |||
| CBOR encoding: 50 1f1ce6a3f42660d888d92a4d8030476e | CBOR encoding: 50 1f1ce6a3f42660d888d92a4d8030476e | |||
| 5.9. The 'leafref' Type | 5.9. The 'leafref' Type | |||
| Leafs of type leafref MUST be encoded using the rules of the schema | Leafs of type leafref MUST be encoded using the rules of the schema | |||
| node referenced by the 'path' YANG statement. | node referenced by the 'path' YANG statement. | |||
| The following example shows the encoding of leaf 'interface-state- | The following example shows the encoding of an 'interface-state-ref' | |||
| ref' set to the value "eth1". | leaf instance set to "eth1". | |||
| Definition example from [RFC7223]: | Definition example from [RFC7223]: | |||
| typedef interface-state-ref { | typedef interface-state-ref { | |||
| type leafref { | type leafref { | |||
| path "/interfaces-state/interface/name"; | path "/interfaces-state/interface/name"; | |||
| } | } | |||
| } | } | |||
| container interfaces-state { | container interfaces-state { | |||
| skipping to change at page 19, line 50 ¶ | skipping to change at page 21, line 30 ¶ | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: "eth1" | CBOR diagnostic notation: "eth1" | |||
| CBOR encoding: 64 65746831 | CBOR encoding: 64 65746831 | |||
| 5.10. The 'identityref' Type | 5.10. The 'identityref' Type | |||
| This specification supports two approaches for encoding identityref, | This specification supports two approaches for encoding identityref, | |||
| a SID as defined in [I-D.ietf-core-sid] or a name as defined in | a YANG Schema Item iDentifier (SID) as defined in Section 2.1 or a | |||
| [RFC7951] section 6.8. | name as defined in [RFC7951] section 6.8. | |||
| 5.10.1. SIDs as identityref | 5.10.1. SIDs as identityref | |||
| SIDs are globally unique and may be used as identityref. This | When schema nodes of type identityref are implemented using SIDs, | |||
| approach is both compact and simple to implement. When SIDs are | they MUST be encoded using a CBOR unsigned integer data item (major | |||
| used, identityref MUST be encoded using a CBOR unsigned integer data | type 0). (Note that no delta mechanism is employed for SIDs as | |||
| item (major type 0) and set to a SID allocated from a registered SID | identityref.) | |||
| range. | ||||
| The following example shows the encoding of leaf 'type' set to the | The following example shows the encoding of a 'type' leaf instance | |||
| value 'iana-if-type:ethernetCsmacd' (SID 1180). | set to the value 'iana-if-type:ethernetCsmacd' (SID 1180). | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| identity interface-type { | identity interface-type { | |||
| } | } | |||
| identity iana-interface-type { | identity iana-interface-type { | |||
| base interface-type; | base interface-type; | |||
| } | } | |||
| skipping to change at page 21, line 15 ¶ | skipping to change at page 22, line 50 ¶ | |||
| CBOR diagnostic notation: "iana-if-type:ethernetCsmacd" | CBOR diagnostic notation: "iana-if-type:ethernetCsmacd" | |||
| CBOR encoding: 78 1b | CBOR encoding: 78 1b | |||
| 69616e612d69662d747970653a65746865726e657443736d616364 | 69616e612d69662d747970653a65746865726e657443736d616364 | |||
| 5.11. The 'empty' Type | 5.11. The 'empty' Type | |||
| Leafs of type empty MUST be encoded using the CBOR null value (major | Leafs of type empty MUST be encoded using the CBOR null value (major | |||
| type 7, additional information 22). | type 7, additional information 22). | |||
| The following example shows the encoding of leaf 'is-router' when | The following example shows the encoding of a 'is-router' leaf | |||
| present. | instance when present. | |||
| Definition example from [RFC7277]: | Definition example from [RFC7277]: | |||
| leaf is-router { | leaf is-router { | |||
| type empty; | type empty; | |||
| } | } | |||
| CBOR diagnostic notation: null | CBOR diagnostic notation: null | |||
| CBOR encoding: f6 | CBOR encoding: f6 | |||
| skipping to change at page 21, line 45 ¶ | skipping to change at page 23, line 32 ¶ | |||
| o bits | o bits | |||
| o enumeration | o enumeration | |||
| o identityref | o identityref | |||
| o instance-identifier | o instance-identifier | |||
| See Section 7.1 for more information about these CBOR tags. | See Section 7.1 for more information about these CBOR tags. | |||
| The following example shows the encoding of leaf 'ip-address' when | The following example shows the encoding of an 'ip-address' leaf | |||
| set to "2001:db8:a0b:12f0::1". | instance when set to "2001:db8:a0b:12f0::1". | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| typedef ipv4-address { | typedef ipv4-address { | |||
| type string { | type string { | |||
| pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3} | pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3} | |||
| ([0-9][1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N} | ([0-9][1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N} | |||
| \p{L}]+)?'; | \p{L}]+)?'; | |||
| } | } | |||
| } | } | |||
| skipping to change at page 22, line 42 ¶ | skipping to change at page 24, line 42 ¶ | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| CBOR diagnostic notation: "2001:db8:a0b:12f0::1" | CBOR diagnostic notation: "2001:db8:a0b:12f0::1" | |||
| CBOR encoding: 74 323030313a6462383a6130623a313266303a3a31 | CBOR encoding: 74 323030313a6462383a6130623a313266303a3a31 | |||
| 5.13. The 'instance-identifier' Type | 5.13. The 'instance-identifier' Type | |||
| This specification supports two approaches for encoding an instance- | This specification supports two approaches for encoding an instance- | |||
| identifier, one based on SIDs as defined in [I-D.ietf-core-sid] and | identifier, one based on YANG Schema Item iDentifier (SID) as defined | |||
| one based on names as defined in [RFC7951] section 6.11. | in Section 2.1 and one based on names as defined in [RFC7951] section | |||
| 6.11. | ||||
| 5.13.1. SIDs as instance-identifier | 5.13.1. SIDs as instance-identifier | |||
| SIDs uniquely identify a data node. In the case of a single instance | SIDs uniquely identify a data node. In the case of a single instance | |||
| data node, a data node defined at the root of a YANG module or | data node, a data node defined at the root of a YANG module or | |||
| submodule or data nodes defined within a container, the SID is | submodule or data nodes defined within a container, the SID is | |||
| sufficient to identify this instance. | sufficient to identify this instance. | |||
| In the case of a data node member of a YANG list, a SID is combined | In the case of a data node member of a YANG list, a SID is combined | |||
| with the list key(s) to identify each instance within the YANG | with the list key(s) to identify each instance within the YANG | |||
| skipping to change at page 23, line 27 ¶ | skipping to change at page 25, line 27 ¶ | |||
| item (major type 0) and set to the targeted data node SID. | item (major type 0) and set to the targeted data node SID. | |||
| o The following entries MUST contain the value of each key required | o The following entries MUST contain the value of each key required | |||
| to identify the instance of the targeted data node. These keys | to identify the instance of the targeted data node. These keys | |||
| MUST be ordered as defined in the 'key' YANG statement, starting | MUST be ordered as defined in the 'key' YANG statement, starting | |||
| from top level list, and follow by each of the subordinate | from top level list, and follow by each of the subordinate | |||
| list(s). | list(s). | |||
| *First example:* | *First example:* | |||
| The following example shows the encoding of a leaf of type instance- | The following example shows the encoding of a leaf instance of type | |||
| identifier which identify the data node "/system/contact" (SID 1737). | instance-identifier which identifies the data node "/system/contact" | |||
| (SID 1737). | ||||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| container system { | container system { | |||
| leaf contact { | leaf contact { | |||
| type string; | type string; | |||
| } | } | |||
| leaf hostname { | leaf hostname { | |||
| type inet:domain-name; | type inet:domain-name; | |||
| } | } | |||
| } | } | |||
| CBOR diagnostic notation: 1737 | CBOR diagnostic notation: 1737 | |||
| CBOR encoding: 19 06c9 | CBOR encoding: 19 06c9 | |||
| *Second example:* | *Second example:* | |||
| The following example shows the encoding of a leaf of type instance- | The following example shows the encoding of a leaf instance of type | |||
| identifier which identify the data node instance | instance-identifier which identify the data node instance | |||
| "/system/authentication/user/authorized-key/key-data" (SID 1730) for | "/system/authentication/user/authorized-key/key-data" (SID 1730) for | |||
| user name "bob" and authorized-key "admin". | user name "bob" and authorized-key "admin". | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| list user { | list user { | |||
| key name; | key name; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| skipping to change at page 24, line 44 ¶ | skipping to change at page 26, line 46 ¶ | |||
| 83 # array(3) | 83 # array(3) | |||
| 19 06c2 # unsigned(1730) | 19 06c2 # unsigned(1730) | |||
| 63 # text(3) | 63 # text(3) | |||
| 626f62 # "bob" | 626f62 # "bob" | |||
| 65 # text(5) | 65 # text(5) | |||
| 61646d696e # "admin" | 61646d696e # "admin" | |||
| *Third example:* | *Third example:* | |||
| The following example shows the encoding of a leaf of type instance- | The following example shows the encoding of a leaf instance of type | |||
| identifier which identify the list instance "/system/authentication/ | instance-identifier which identify the list instance | |||
| user" (SID 1726) corresponding to the user name "jack". | "/system/authentication/user" (SID 1726) corresponding to the user | |||
| name "jack". | ||||
| CBOR diagnostic notation: [1726, "jack"] | CBOR diagnostic notation: [1726, "jack"] | |||
| CBOR encoding: | CBOR encoding: | |||
| 82 # array(2) | 82 # array(2) | |||
| 19 06be # unsigned(1726) | 19 06be # unsigned(1726) | |||
| 64 # text(4) | 64 # text(4) | |||
| 6a61636b # "jack" | 6a61636b # "jack" | |||
| 5.13.2. Names as instance-identifier | 5.13.2. Names as instance-identifier | |||
| The use of names as instance-identifier is defined in [RFC7951] | The use of names as instance-identifier is defined in [RFC7951] | |||
| skipping to change at page 26, line 47 ¶ | skipping to change at page 28, line 47 ¶ | |||
| | | | datatype | | | | | | datatype | | | |||
| +-----+---------------------+---------------------------+-----------+ | +-----+---------------------+---------------------------+-----------+ | |||
| // RFC Ed.: update Tag values using allocated tags if needed and | // RFC Ed.: update Tag values using allocated tags if needed and | |||
| remove this note // RFC Ed.: replace XXXX with RFC number and remove | remove this note // RFC Ed.: replace XXXX with RFC number and remove | |||
| this note | this note | |||
| 8. Acknowledgments | 8. Acknowledgments | |||
| This document has been largely inspired by the extensive works done | This document has been largely inspired by the extensive works done | |||
| by Andy Bierman and Peter van der Stok on [I-D.vanderstok-core-comi]. | by Andy Bierman and Peter van der Stok on [I-D.ietf-core-comi]. | |||
| [RFC7951] has also been a critical input to this work. The authors | [RFC7951] has also been a critical input to this work. The authors | |||
| would like to thank the authors and contributors to these two drafts. | would like to thank the authors and contributors to these two drafts. | |||
| The authors would also like to acknowledge the review, feedback, and | The authors would also like to acknowledge the review, feedback, and | |||
| comments from Ladislav Lhotka and Juergen Schoenwaelder. | comments from Ladislav Lhotka and Juergen Schoenwaelder. | |||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | ||||
| and A. Bierman, Ed., "Network Configuration Protocol | ||||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | ||||
| <http://www.rfc-editor.org/info/rfc6241>. | ||||
| [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | |||
| October 2013, <http://www.rfc-editor.org/info/rfc7049>. | October 2013, <http://www.rfc-editor.org/info/rfc7049>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <http://www.rfc-editor.org/info/rfc7950>. | <http://www.rfc-editor.org/info/rfc7950>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-core-comi] | ||||
| Stok, P., Bierman, A., Veillette, M., and A. Pelov, "CoAP | ||||
| Management Interface", draft-ietf-core-comi-00 (work in | ||||
| progress), January 2017. | ||||
| [I-D.ietf-core-sid] | [I-D.ietf-core-sid] | |||
| Somaraju, A., Veillette, M., Pelov, A., Turner, R., and A. | Somaraju, A., Veillette, M., Pelov, A., Turner, R., and A. | |||
| Minaburo, "YANG Schema Item iDentifier (SID)", draft-ietf- | Minaburo, "YANG Schema Item iDentifier (SID)", draft-ietf- | |||
| core-sid-00 (work in progress), October 2016. | core-sid-00 (work in progress), October 2016. | |||
| [I-D.vanderstok-core-comi] | ||||
| Stok, P., Bierman, A., Veillette, M., and A. Pelov, "CoAP | ||||
| Management Interface", draft-vanderstok-core-comi-10 (work | ||||
| in progress), October 2016. | ||||
| [RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March | Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March | |||
| 2014, <http://www.rfc-editor.org/info/rfc7159>. | 2014, <http://www.rfc-editor.org/info/rfc7159>. | |||
| [RFC7223] Bjorklund, M., "A YANG Data Model for Interface | [RFC7223] Bjorklund, M., "A YANG Data Model for Interface | |||
| Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | |||
| <http://www.rfc-editor.org/info/rfc7223>. | <http://www.rfc-editor.org/info/rfc7223>. | |||
| [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | |||
| Constrained-Node Networks", RFC 7228, | Constrained-Node Networks", RFC 7228, | |||
| skipping to change at page 28, line 13 ¶ | skipping to change at page 30, line 17 ¶ | |||
| <http://www.rfc-editor.org/info/rfc7277>. | <http://www.rfc-editor.org/info/rfc7277>. | |||
| [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for | [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for | |||
| System Management", RFC 7317, DOI 10.17487/RFC7317, August | System Management", RFC 7317, DOI 10.17487/RFC7317, August | |||
| 2014, <http://www.rfc-editor.org/info/rfc7317>. | 2014, <http://www.rfc-editor.org/info/rfc7317>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | |||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | RFC 7951, DOI 10.17487/RFC7951, August 2016, | |||
| <http://www.rfc-editor.org/info/rfc7951>. | <http://www.rfc-editor.org/info/rfc7951>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | ||||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
| <http://www.rfc-editor.org/info/rfc8040>. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Michel Veillette (editor) | Michel Veillette (editor) | |||
| Trilliant Networks Inc. | Trilliant Networks Inc. | |||
| 610 Rue du Luxembourg | 610 Rue du Luxembourg | |||
| Granby, Quebec J2J 2V2 | Granby, Quebec J2J 2V2 | |||
| Canada | Canada | |||
| Phone: +14503750556 | Phone: +14503750556 | |||
| Email: michel.veillette@trilliantinc.com | Email: michel.veillette@trilliantinc.com | |||
| End of changes. 66 change blocks. | ||||
| 177 lines changed or deleted | 273 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||