| < draft-ietf-core-yang-cbor-18.txt | draft-ietf-core-yang-cbor-19.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 I. Petrov, Ed. | Intended status: Standards Track I. Petrov, Ed. | |||
| Expires: 23 June 2022 Google Switzerland GmbH | Expires: 21 September 2022 Google Switzerland GmbH | |||
| A. Pelov | A. Pelov | |||
| Acklio | Acklio | |||
| C. Bormann | C. Bormann | |||
| Universität Bremen TZI | Universität Bremen TZI | |||
| M. Richardson | M. Richardson | |||
| Sandelman Software Works | Sandelman Software Works | |||
| 20 December 2021 | 20 March 2022 | |||
| CBOR Encoding of Data Modeled with YANG | CBOR Encoding of Data Modeled with YANG | |||
| draft-ietf-core-yang-cbor-18 | draft-ietf-core-yang-cbor-19 | |||
| Abstract | Abstract | |||
| Based on the Concise Binary Object Representation (CBOR, RFC 8949), | Based on the Concise Binary Object Representation (CBOR, RFC 8949), | |||
| this document defines encoding rules for representing configuration | this document defines encoding rules for representing configuration | |||
| data, state data, parameters and results of Remote Procedure Call | data, state data, parameters and results of Remote Procedure Call | |||
| (RPC) operations or actions, and notifications, defined using YANG | (RPC) operations or actions, and notifications, defined using YANG | |||
| (RFC 7950). | (RFC 7950). | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 41 ¶ | skipping to change at page 1, line 41 ¶ | |||
| 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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 23 June 2022. | This Internet-Draft will expire on 21 September 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Revised BSD License text as | extracted from this document must include Revised BSD License text as | |||
| described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Revised BSD License. | provided without warranty as described in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Properties of the CBOR Encoding . . . . . . . . . . . . . . . 5 | 3. Properties of the CBOR Encoding . . . . . . . . . . . . . . . 5 | |||
| 3.1. CBOR diagnostic notation . . . . . . . . . . . . . . . . 6 | 3.1. CBOR diagnostic notation . . . . . . . . . . . . . . . . 6 | |||
| 3.2. YANG Schema Item iDentifier . . . . . . . . . . . . . . . 8 | 3.2. YANG Schema Item iDentifier . . . . . . . . . . . . . . . 8 | |||
| 3.3. Name . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. Name . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4. Encoding of Representation Nodes . . . . . . . . . . . . . . 10 | 4. Encoding of Representation Nodes . . . . . . . . . . . . . . 11 | |||
| 4.1. The 'leaf' . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1. The 'leaf' . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.1.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 11 | 4.1.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 11 | |||
| 4.1.2. Using names in keys . . . . . . . . . . . . . . . . . 11 | 4.1.2. Using names in keys . . . . . . . . . . . . . . . . . 12 | |||
| 4.2. The 'container' and other nodes from the data tree . . . 12 | 4.2. The 'container' and other nodes from the data tree . . . 12 | |||
| 4.2.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 13 | 4.2.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 13 | |||
| 4.2.2. Using names in keys . . . . . . . . . . . . . . . . . 14 | 4.2.2. Using names in keys . . . . . . . . . . . . . . . . . 14 | |||
| 4.3. The 'leaf-list' . . . . . . . . . . . . . . . . . . . . . 15 | 4.3. The 'leaf-list' . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.3.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 15 | 4.3.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 15 | |||
| 4.3.2. Using names in keys . . . . . . . . . . . . . . . . . 16 | 4.3.2. Using names in keys . . . . . . . . . . . . . . . . . 16 | |||
| 4.4. The 'list' and 'list' entries . . . . . . . . . . . . . . 16 | 4.4. The 'list' and 'list' entries . . . . . . . . . . . . . . 16 | |||
| 4.4.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 17 | 4.4.1. Using SIDs in keys . . . . . . . . . . . . . . . . . 17 | |||
| 4.4.2. Using names in keys . . . . . . . . . . . . . . . . . 19 | 4.4.2. Using names in keys . . . . . . . . . . . . . . . . . 19 | |||
| 4.5. The 'anydata' . . . . . . . . . . . . . . . . . . . . . . 21 | 4.5. The 'anydata' . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| skipping to change at page 3, line 4 ¶ | skipping to change at page 3, line 4 ¶ | |||
| 5.2. Using names in keys . . . . . . . . . . . . . . . . . . . 27 | 5.2. Using names in keys . . . . . . . . . . . . . . . . . . . 27 | |||
| 6. Representing YANG Data Types in CBOR . . . . . . . . . . . . 28 | 6. Representing YANG Data Types in CBOR . . . . . . . . . . . . 28 | |||
| 6.1. The unsigned integer Types . . . . . . . . . . . . . . . 28 | 6.1. The unsigned integer Types . . . . . . . . . . . . . . . 28 | |||
| 6.2. The integer Types . . . . . . . . . . . . . . . . . . . . 29 | 6.2. The integer Types . . . . . . . . . . . . . . . . . . . . 29 | |||
| 6.3. The 'decimal64' Type . . . . . . . . . . . . . . . . . . 29 | 6.3. The 'decimal64' Type . . . . . . . . . . . . . . . . . . 29 | |||
| 6.4. The 'string' Type . . . . . . . . . . . . . . . . . . . . 30 | 6.4. The 'string' Type . . . . . . . . . . . . . . . . . . . . 30 | |||
| 6.5. The 'boolean' Type . . . . . . . . . . . . . . . . . . . 30 | 6.5. The 'boolean' Type . . . . . . . . . . . . . . . . . . . 30 | |||
| 6.6. The 'enumeration' Type . . . . . . . . . . . . . . . . . 31 | 6.6. The 'enumeration' Type . . . . . . . . . . . . . . . . . 31 | |||
| 6.7. The 'bits' Type . . . . . . . . . . . . . . . . . . . . . 32 | 6.7. The 'bits' Type . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.8. The 'binary' Type . . . . . . . . . . . . . . . . . . . . 34 | 6.8. The 'binary' Type . . . . . . . . . . . . . . . . . . . . 34 | |||
| 6.9. The 'leafref' Type . . . . . . . . . . . . . . . . . . . 34 | 6.9. The 'leafref' Type . . . . . . . . . . . . . . . . . . . 35 | |||
| 6.10. The 'identityref' Type . . . . . . . . . . . . . . . . . 35 | 6.10. The 'identityref' Type . . . . . . . . . . . . . . . . . 35 | |||
| 6.10.1. SIDs as identityref . . . . . . . . . . . . . . . . 35 | 6.10.1. SIDs as identityref . . . . . . . . . . . . . . . . 35 | |||
| 6.10.2. Name as identityref . . . . . . . . . . . . . . . . 36 | 6.10.2. Name as identityref . . . . . . . . . . . . . . . . 36 | |||
| 6.11. The 'empty' Type . . . . . . . . . . . . . . . . . . . . 36 | 6.11. The 'empty' Type . . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.12. The 'union' Type . . . . . . . . . . . . . . . . . . . . 37 | 6.12. The 'union' Type . . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.13. The 'instance-identifier' Type . . . . . . . . . . . . . 38 | 6.13. The 'instance-identifier' Type . . . . . . . . . . . . . 38 | |||
| 6.13.1. SIDs as instance-identifier . . . . . . . . . . . . 39 | 6.13.1. SIDs as instance-identifier . . . . . . . . . . . . 39 | |||
| 6.13.2. Names as instance-identifier . . . . . . . . . . . . 42 | 6.13.2. Names as instance-identifier . . . . . . . . . . . . 42 | |||
| 7. Content-Types . . . . . . . . . . . . . . . . . . . . . . . . 43 | 7. Content-Types . . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 9.1. Media-Types Registry . . . . . . . . . . . . . . . . . . 45 | 9.1. Media-Types Registry . . . . . . . . . . . . . . . . . . 45 | |||
| 9.2. CoAP Content-Formats Registry . . . . . . . . . . . . . . 45 | 9.2. CoAP Content-Formats Registry . . . . . . . . . . . . . . 46 | |||
| 9.3. CBOR Tags Registry . . . . . . . . . . . . . . . . . . . 46 | 9.3. CBOR Tags Registry . . . . . . . . . . . . . . . . . . . 46 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 47 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 47 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 47 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 47 | 10.2. Informative References . . . . . . . . . . . . . . . . . 48 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 49 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 1. Introduction | 1. Introduction | |||
| The specification of the YANG 1.1 data modeling language [RFC7950] | The specification of the YANG 1.1 data modeling 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. | |||
| skipping to change at page 4, line 41 ¶ | skipping to change at page 4, line 41 ¶ | |||
| The following term is defined in [RFC8040]: | The following term is defined in [RFC8040]: | |||
| * yang-data extension | * yang-data extension | |||
| The following term is defined in [RFC8791]: | The following term is defined in [RFC8791]: | |||
| * YANG data structure | * YANG data structure | |||
| This specification also makes use of the following terminology: | This specification also makes use of the following terminology: | |||
| * YANG Schema Item iDentifier (YANG SID or simply SID): Unsigned | * YANG Schema Item iDentifier (YANG SID or simply SID): 63-bit | |||
| integer used to identify different YANG items. | unsigned integer used to identify different YANG items. | |||
| * delta: Difference between the current YANG SID and a reference | * delta: Difference between the current YANG SID and a reference | |||
| YANG SID. A reference YANG SID is defined for each context for | YANG SID. A reference YANG SID is defined for each context for | |||
| which deltas are used. | which deltas are used. | |||
| * absolute SID: YANG SID not encoded as a delta. This is usually | * absolute SID: YANG SID not encoded as a delta. This is usually | |||
| called out explicitly only in positions where normally a delta | called out explicitly only in positions where normally a delta | |||
| would be found. | would be found. | |||
| * representation tree: a YANG data tree, possibly enclosed by a | * representation tree: a YANG data tree, possibly enclosed by a | |||
| skipping to change at page 5, line 43 ¶ | skipping to change at page 5, line 43 ¶ | |||
| A representation node such as container, list entry, YANG data | A representation node such as container, list entry, YANG data | |||
| structure, notification, RPC input, RPC output, action input, or | structure, notification, RPC input, RPC output, action input, or | |||
| action output is serialized using a CBOR map in which each schema | action output is serialized using a CBOR map in which each schema | |||
| node defined within is encoded using a key and a value. This | node defined within is encoded using a key and a value. This | |||
| specification supports two types of CBOR keys; YANG Schema Item | specification supports two types of CBOR keys; YANG Schema Item | |||
| iDentifier (YANG SID) as defined in Section 3.2 and names as defined | iDentifier (YANG SID) as defined in Section 3.2 and names as defined | |||
| in Section 3.3. Each of these key types is encoded using a specific | in Section 3.3. Each of these key types is encoded using a specific | |||
| CBOR type which allows their interpretation during the | CBOR type which allows their interpretation during the | |||
| deserialization process. Protocols or mechanisms implementing this | deserialization process. Protocols or mechanisms implementing this | |||
| specification can mandate the use of a specific key type. | specification can mandate the use of a specific key type or allow the | |||
| generator to choose freely per key. | ||||
| In order to minimize the size of the encoded data, the mapping avoids | In order to minimize the size of the encoded data, the mapping avoids | |||
| any unnecessary meta-information beyond that directly provided by the | any unnecessary meta-information beyond that directly provided by the | |||
| CBOR basic generic data model (Section 2 of [RFC8949]). For | CBOR basic generic data model (Section 2 of [RFC8949]). For | |||
| instance, CBOR tags are used solely in the case of an absolute SID, | instance, CBOR tags are used solely in the case of an absolute SID, | |||
| anyxml data nodes, or the union datatype, to distinguish explicitly | anyxml data nodes, or the union datatype, to distinguish explicitly | |||
| the use of different YANG datatypes encoded using the same CBOR major | the use of different YANG datatypes encoded using the same CBOR major | |||
| type. | type. | |||
| Unless specified otherwise by the protocol or mechanism implementing | Unless specified otherwise by the protocol or mechanism implementing | |||
| skipping to change at page 8, line 14 ¶ | skipping to change at page 8, line 14 ¶ | |||
| 3.2. YANG Schema Item iDentifier | 3.2. YANG Schema Item iDentifier | |||
| Some of the items defined in YANG [RFC7950] require the use of a | Some of the items defined in YANG [RFC7950] require the use of a | |||
| unique identifier. In both Network Configuration Protocol (NETCONF) | unique identifier. In both Network Configuration Protocol (NETCONF) | |||
| [RFC6241] and RESTCONF [RFC8040], these identifiers are implemented | [RFC6241] and RESTCONF [RFC8040], these identifiers are implemented | |||
| using text strings. To allow the implementation of data models | using text strings. To allow the implementation of data models | |||
| defined in YANG in constrained devices and constrained networks, a | defined in YANG in constrained devices and constrained networks, a | |||
| more compact method to identify YANG items is required. This compact | more compact method to identify YANG items is required. This compact | |||
| identifier, called YANG Schema Item iDentifier, is an unsigned | identifier, called YANG Schema Item iDentifier, is an unsigned | |||
| integer. The following items are identified using YANG SIDs (often | integer limited to 63 bits of range (i.e., 0..9223372036854775807 or | |||
| shortened to SIDs): | 0..0x7fffffffffffffff). The following items are identified using | |||
| YANG SIDs (often shortened to SIDs): | ||||
| * identities | * identities | |||
| * data nodes | * data nodes | |||
| * RPCs and associated input(s) and output(s) | * RPCs and associated input(s) and output(s) | |||
| * actions and associated input(s) and output(s) | * actions and associated input(s) and output(s) | |||
| * YANG data structures | * YANG data structures | |||
| skipping to change at page 8, line 46 ¶ | skipping to change at page 8, line 47 ¶ | |||
| To minimize their size, SIDs used as keys in CBOR maps are encoded | To minimize their size, SIDs used as keys in CBOR maps are encoded | |||
| using deltas, i.e., signed (negative or unsigned) integers that are | using deltas, i.e., signed (negative or unsigned) integers that are | |||
| added to the reference SID applying to the map. The reference SID of | added to the reference SID applying to the map. The reference SID of | |||
| an outermost map is zero, unless a different reference SID is | an outermost map is zero, unless a different reference SID is | |||
| unambiguously conferred from the environment in which the outermost | unambiguously conferred from the environment in which the outermost | |||
| map is used. The reference SID of a map that is most directly | map is used. The reference SID of a map that is most directly | |||
| embedded in a map entry with a name-based key is zero. For all other | embedded in a map entry with a name-based key is zero. For all other | |||
| maps, the reference SID is the SID computed for the map entry it is | maps, the reference SID is the SID computed for the map entry it is | |||
| most directly embedded in. (The embedding may be indirect if an | most directly embedded in. (The embedding may be indirect if an | |||
| array intervenes, e.g., in a YANG list.) Where absolute SIDs are | array intervenes, e.g., in a YANG list.) Where absolute SIDs are | |||
| desired in map key positions where a bare integer implies a delta, | desired in map key positions (where a bare integer implies a delta), | |||
| they may be encoded using CBOR tag 47 (as defined in Section 9.3). | they need to be identified as absolute SID values by using CBOR tag | |||
| number 47 (as defined in Section 4.2.1). | ||||
| Thus, conversion from SIDs to deltas and back to SIDs is a stateless | Thus, conversion from SIDs to deltas and back to SIDs is a stateless | |||
| process solely based on the data serialized or deserialized combined | process solely based on the data serialized or deserialized combined | |||
| with, potentially, an outermost reference SID unambiguously conferred | with, potentially, an outermost reference SID unambiguously conferred | |||
| by the environment. | by the environment. | |||
| Mechanisms and processes used to assign SIDs to YANG items and to | Mechanisms and processes used to assign SIDs to YANG items and to | |||
| guarantee their uniqueness are outside the scope of the present | guarantee their uniqueness are outside the scope of the present | |||
| specification. If SIDs are to be used, the present specification is | specification. If SIDs are to be used, the present specification is | |||
| used in conjunction with a specification defining this management. | used in conjunction with a specification defining this management. A | |||
| [I-D.ietf-core-sid] is the definitive way to assign SID values for | related document, [I-D.ietf-core-sid], is intended to serve as the | |||
| YANG modules managed by the IETF. With YANG modules managed by non- | definitive way to assign SID values for YANG modules managed by the | |||
| IETF entities, use of [I-D.ietf-core-sid] is RECOMMENDED. The | IETF, and recommends itself for YANG modules managed by non-IETF | |||
| present specification has been designed to allow different methods of | entities, as well. The present specification has been designed to | |||
| assignment to be used within separate domains. | allow different methods of assignment to be used within separate | |||
| domains. | ||||
| To provide implementations with a way to internally indicate the | To provide implementations with a way to internally indicate the | |||
| absence of a SID, the SID value 0 is reserved and will not be | absence of a SID, the SID value 0 is reserved and will not be | |||
| allocated; it is not used in interchange. | allocated; it is not used in interchange. | |||
| 3.3. Name | 3.3. Name | |||
| This specification also supports the encoding of YANG item | This specification also supports the encoding of YANG item | |||
| identifiers as text strings, similar to those used by the JSON | identifiers as text strings, similar to those used by the JSON | |||
| Encoding of Data Modeled with YANG [RFC7951]. This approach can be | Encoding of Data Modeled with YANG [RFC7951]. This approach can be | |||
| skipping to change at page 10, line 8 ¶ | skipping to change at page 10, line 10 ¶ | |||
| ABNF syntax [RFC5234] of a name is shown in Figure 1, where the | ABNF syntax [RFC5234] of a name is shown in Figure 1, where the | |||
| production for "identifier" is defined in Section 14 of [RFC7950]. | production for "identifier" is defined in Section 14 of [RFC7950]. | |||
| name = [identifier ":"] identifier | name = [identifier ":"] identifier | |||
| Figure 1: ABNF Production for a simple or namespace qualified name | Figure 1: ABNF Production for a simple or namespace qualified name | |||
| A namespace qualified name MUST be used for all members of a top- | A namespace qualified name MUST be used for all members of a top- | |||
| level CBOR map and then also whenever the namespaces of the | level CBOR map and then also whenever the namespaces of the | |||
| representation node and its parent node are different. In all other | representation node and its parent node are different. In all other | |||
| cases, the simple form of the name SHOULD be used. | cases, the simple form of the name MUST be used. | |||
| Definition example: | Definition example: | |||
| module example-foomod { | module example-foomod { | |||
| container top { | container top { | |||
| leaf foo { | leaf foo { | |||
| type uint8; | type uint8; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 13, line 28 ¶ | skipping to change at page 13, line 28 ¶ | |||
| leaf boot-datetime { | leaf boot-datetime { | |||
| type date-and-time; | type date-and-time; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 4.2.1. Using SIDs in keys | 4.2.1. Using SIDs in keys | |||
| In the context of containers and other nodes from the data tree, CBOR | In the context of containers and other nodes from the data tree, CBOR | |||
| map keys within inner CBOR maps can be encoded using deltas or | map keys within inner CBOR maps can be encoded using deltas (bare | |||
| absolute SIDs (tag 47). | integers) or absolute SIDs (tagged with tag number 47). | |||
| Delta values are computed as follows: | Delta values are computed as follows: | |||
| * In the case of a 'container', deltas are equal to the SID of the | * In the case of a 'container', deltas are equal to the SID of the | |||
| current representation node minus the SID of the parent | current representation node minus the SID of the parent | |||
| 'container'. | 'container'. | |||
| * In the case of a 'list', deltas are equal to the SID of the | * In the case of a 'list', deltas are equal to the SID of the | |||
| current representation node minus the SID of the parent 'list'. | current representation node minus the SID of the parent 'list'. | |||
| skipping to change at page 16, line 51 ¶ | skipping to change at page 16, line 51 ¶ | |||
| item (major type 4). Each list entry within this CBOR array is | item (major type 4). Each list entry within this CBOR array is | |||
| encoded using a CBOR map data item (major type 5) based on the | encoded using a CBOR map data item (major type 5) based on the | |||
| encoding rules of a collection as defined in Section 4.2. | encoding rules of a collection as defined in Section 4.2. | |||
| It is important to note that this encoding rule also applies to a | It is important to note that this encoding rule also applies to a | |||
| 'list' representation node instance that has a single entry. | 'list' representation node instance that has a single entry. | |||
| The following examples show the encoding of a 'server' list using | The following examples show the encoding of a 'server' list using | |||
| SIDs or names. | SIDs or names. | |||
| Definition example from [RFC7317]: | Definition example simplified from [RFC7317]: | |||
| list server { | list server { | |||
| key name; | key name; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| } | } | |||
| choice transport { | choice transport { | |||
| case udp { | case udp { | |||
| container udp { | container udp { | |||
| skipping to change at page 22, line 8 ¶ | skipping to change at page 22, line 8 ¶ | |||
| An anydata serves as a container for an arbitrary set of | An anydata serves as a container for an arbitrary set of | |||
| representation nodes that otherwise appear as normal YANG-modeled | representation nodes that otherwise appear as normal YANG-modeled | |||
| data. An anydata representation node instance is encoded using the | data. An anydata representation node instance is encoded using the | |||
| same rules as a container, i.e., CBOR map. The requirement that | same rules as a container, i.e., CBOR map. The requirement that | |||
| anydata content can be modeled by YANG implies the following: | anydata content can be modeled by YANG implies the following: | |||
| * CBOR map keys of any inner representation nodes MUST be set to | * CBOR map keys of any inner representation nodes MUST be set to | |||
| valid deltas or names. | valid deltas or names. | |||
| * The CBOR array MUST contain either unique scalar values (as a | * CBOR arrays MUST contain either unique scalar values (as a leaf- | |||
| leaf-list, see Section 4.3), or maps (as a list, see Section 4.4). | list, see Section 4.3), or maps (as a list, see Section 4.4). | |||
| * CBOR map values MUST follow the encoding rules of one of the | * CBOR map values MUST follow the encoding rules of one of the | |||
| datatypes listed in Section 4. | datatypes listed in Section 4. | |||
| The following example shows a possible use of an anydata. In this | The following example shows a possible use of an anydata. In this | |||
| example, an anydata is used to define a representation node | example, an anydata is used to define a representation node | |||
| containing a notification event; this representation node can be part | containing a notification event; this representation node can be part | |||
| of a YANG list to create an event logger. | of a YANG list to create an event logger. | |||
| Definition example: | Definition example: | |||
| skipping to change at page 23, line 29 ¶ | skipping to change at page 23, line 29 ¶ | |||
| 18 4D # unsigned(77) | 18 4D # unsigned(77) | |||
| A2 # map(2) | A2 # map(2) | |||
| 01 # unsigned(1) | 01 # unsigned(1) | |||
| 66 # text(6) | 66 # text(6) | |||
| 302F342F3231 # "0/4/21" | 302F342F3231 # "0/4/21" | |||
| 02 # unsigned(2) | 02 # unsigned(2) | |||
| 6A # text(10) | 6A # text(10) | |||
| 4F70656E2070696E2032 # "Open pin 2" | 4F70656E2070696E2032 # "Open pin 2" | |||
| In some implementations, it might be simpler to use the absolute SID | In some implementations, it might be simpler to use the absolute SID | |||
| encoding (tag 47) for the anydata root element. CBOR diagnostic | encoding (tag number 47) for the anydata root element. CBOR | |||
| notation: | diagnostic notation: | |||
| { | { | |||
| 60123 : { / last-event (SID 60123) / | 60123 : { / last-event (SID 60123) / | |||
| 47(60200) : { / event-port-fault (SID 60200) / | 47(60200) : { / event-port-fault (SID 60200) / | |||
| 1 : "0/4/21", / port-name (SID 60201) / | 1 : "0/4/21", / port-name (SID 60201) / | |||
| 2 : "Open pin 2" / port-fault (SID 60202) / | 2 : "Open pin 2" / port-fault (SID 60202) / | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 24, line 26 ¶ | skipping to change at page 24, line 26 ¶ | |||
| 66 # text(6) | 66 # text(6) | |||
| 302F342F3231 # "0/4/21" | 302F342F3231 # "0/4/21" | |||
| 6A # text(10) | 6A # text(10) | |||
| 706F72742D6661756C74 # "port-fault" | 706F72742D6661756C74 # "port-fault" | |||
| 6A # text(10) | 6A # text(10) | |||
| 4F70656E2070696E2032 # "Open pin 2" | 4F70656E2070696E2032 # "Open pin 2" | |||
| 4.6. The 'anyxml' | 4.6. The 'anyxml' | |||
| An anyxml representation node is used to serialize an arbitrary CBOR | An anyxml representation node is used to serialize an arbitrary CBOR | |||
| content, i.e., its value can be any CBOR binary object. An anyxml | content, i.e., its value can be any CBOR binary object. (The "xml" | |||
| value MAY contain CBOR data items tagged with one of the tags listed | in the name is a misnomer that only applied to YANG-XML [RFC7950].) | |||
| in Section 9.3. The tags listed in Section 9.3 SHALL be supported. | An anyxml value MAY contain CBOR data items tagged with one of the | |||
| tags listed in Section 9.3. The tags listed in Section 9.3 SHALL be | ||||
| supported. | ||||
| The following example shows a valid CBOR encoded anyxml | The following example shows a valid CBOR encoded anyxml | |||
| representation node instance consisting of a CBOR array containing | representation node instance consisting of a CBOR array containing | |||
| the CBOR simple values 'true', 'null' and 'true'. | the CBOR simple values 'true', 'null' and 'true'. | |||
| Definition example from [RFC7951]: | Definition example from [RFC7951]: | |||
| module bar-module { | module bar-module { | |||
| ... | ... | |||
| anyxml bar; # SID 60000 | anyxml bar; # SID 60000 | |||
| skipping to change at page 27, line 38 ¶ | skipping to change at page 27, line 38 ¶ | |||
| 03 # unsigned(3) | 03 # unsigned(3) | |||
| 70 # text(16) | 70 # text(16) | |||
| 4D6178696D756D206578636565646564 # "Maximum exceeded" | 4D6178696D756D206578636565646564 # "Maximum exceeded" | |||
| 5.2. Using names in keys | 5.2. Using names in keys | |||
| The yang-data extensions encoded using names are carried in a CBOR | The yang-data extensions encoded using names are carried in a CBOR | |||
| map containing a single item pair. The key of this item is set to | map containing a single item pair. The key of this item is set to | |||
| the namespace qualified name of the yang-data extension container; | the namespace qualified name of the yang-data extension container; | |||
| the value is set to the CBOR encoding of this container as defined in | the value is set to the CBOR encoding of this container as defined in | |||
| Section 3.3. | Section 4.2. | |||
| This example shows a serialization example of the yang-errors yang- | This example shows a serialization example of the yang-errors yang- | |||
| data extension as defined in [I-D.ietf-core-comi] using names as | data extension as defined in [I-D.ietf-core-comi] using names as | |||
| defined Section 3.3. | defined Section 3.3. | |||
| CBOR diagnostic notation: | CBOR diagnostic notation: | |||
| { | { | |||
| "ietf-coreconf:error" : { | "ietf-coreconf:error" : { | |||
| "error-tag" : "invalid-value", | "error-tag" : "invalid-value", | |||
| skipping to change at page 31, line 9 ¶ | skipping to change at page 31, line 9 ¶ | |||
| } | } | |||
| CBOR diagnostic notation: true | CBOR diagnostic notation: true | |||
| CBOR encoding: F5 | CBOR encoding: F5 | |||
| 6.6. The 'enumeration' Type | 6.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 negative 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, or exceptionally as a tagged text | |||
| explicitly assigned using the YANG statement 'value' or automatically | string (see below). Enumeration values are either explicitly | |||
| assigned based on the algorithm defined in Section 9.6.4.2 of | assigned using the YANG statement 'value' or automatically assigned | |||
| [RFC7950]. | based on the algorithm defined in Section 9.6.4.2 of [RFC7950]. | |||
| The following example shows the encoding of an 'oper-status' leaf | The following example shows the encoding of an 'oper-status' leaf | |||
| representation node instance set to 'testing'. | representation node 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; } | |||
| skipping to change at page 32, line 16 ¶ | skipping to change at page 32, line 16 ¶ | |||
| Keeping in mind that bit positions are either explicitly assigned | Keeping in mind that bit positions are either explicitly assigned | |||
| using the YANG statement 'position' or automatically assigned based | using the YANG statement 'position' or automatically assigned based | |||
| on the algorithm defined in Section 9.7.4.2 of [RFC7950], each | on the algorithm defined in Section 9.7.4.2 of [RFC7950], each | |||
| element of type bits could be seen as a set of bit positions (or | element of type bits could be seen as a set of bit positions (or | |||
| offsets from position 0), that have a value of either 1, which | offsets from position 0), that have a value of either 1, which | |||
| represents the bit being set or 0, which represents that the bit is | represents the bit being set or 0, which represents that the bit is | |||
| not set. | not set. | |||
| Leafs of type bits MUST be encoded either using a CBOR array or byte | Leafs of type bits MUST be encoded either using a CBOR array or byte | |||
| string (major type 2). In case CBOR array representation is used, | string (major type 2), or exceptionally as a tagged text string (see | |||
| each element is either a positive integer (major type 0 with value 0 | below). In case CBOR array representation is used, each element is | |||
| being disallowed) that can be used to calculate the offset of the | either a positive integer (major type 0 with value 0 being | |||
| next byte string, or a byte string (major type 2) that carries the | disallowed) that can be used to calculate the offset of the next byte | |||
| information whether certain bits are set or not. The initial offset | string, or a byte string (major type 2) that carries the information | |||
| value is 0 and each unsigned integer modifies the offset value of the | whether certain bits are set or not. The initial offset value is 0 | |||
| next byte string by the integer value multiplied by 8. For example, | and each unsigned integer modifies the offset value of the next byte | |||
| if the bit offset is 0 and there is an integer with value 5, the | string by the integer value multiplied by 8. For example, if the bit | |||
| first byte of the byte string that follows will represent bit | offset is 0 and there is an integer with value 5, the first byte of | |||
| positions 40 to 47 both ends included. If the byte string has a | the byte string that follows will represent bit positions 40 to 47 | |||
| second byte, it will carry information about bits 48 to 55 and so on. | both ends included. If the byte string has a second byte, it will | |||
| Within each byte, bits are assigned from least to most significant. | carry information about bits 48 to 55 and so on. Within each byte, | |||
| After the byte string, the offset is modified by the number of bytes | bits are assigned from least to most significant. After the byte | |||
| in the byte string multiplied by 8. Bytes with no bits set (zero | string, the offset is modified by the number of bytes in the byte | |||
| bytes) at the end of the byte string are never generated: If they | string multiplied by 8. Bytes with no bits set (zero bytes) at the | |||
| would occur at the end of the array, the zero bytes are simply | end of the byte string are never generated: If they would occur at | |||
| omitted; if they occur at the end of a byte string preceding an | the end of the array, the zero bytes are simply omitted; if they | |||
| integer, the zero bytes are removed and the integer adjusted upwards | occur at the end of a byte string preceding an integer, the zero | |||
| by the number of zero bytes removed. An example follows. | bytes are removed and the integer adjusted upwards by the number of | |||
| zero bytes removed. An example follows. | ||||
| The following example shows the encoding of an 'alarm-state' leaf | The following example shows the encoding of an 'alarm-state' leaf | |||
| representation node instance with the 'critical' (position 3), | representation node instance with the 'critical' (position 3), | |||
| 'warning' (position 8) and 'indeterminate' (position 128) flags set. | 'warning' (position 8) and 'indeterminate' (position 128) flags set. | |||
| typedef alarm-state { | typedef alarm-state { | |||
| type bits { | type bits { | |||
| bit unknown; | bit unknown; | |||
| bit under-repair; | bit under-repair; | |||
| bit critical; | bit critical; | |||
| skipping to change at page 33, line 30 ¶ | skipping to change at page 33, line 30 ¶ | |||
| leaf alarm-state { | leaf alarm-state { | |||
| type alarm-state; | type alarm-state; | |||
| } | } | |||
| CBOR diagnostic notation: [h'0401', 14, h'01'] | CBOR diagnostic notation: [h'0401', 14, h'01'] | |||
| CBOR encoding: 83 42 0401 0E 41 01 | CBOR encoding: 83 42 0401 0E 41 01 | |||
| In a number of cases the array would only need to have one element -- | In a number of cases the array would only need to have one element -- | |||
| a byte string with a few bytes inside. For this case, it is expected | a byte string with a few bytes inside. For this case, it is REQUIRED | |||
| to omit the array element and have only the byte array that would | to omit the array element and have only the byte array that would | |||
| have been inside. To illustrate this, let us consider the same | have been inside. To illustrate this, let us consider the same | |||
| example YANG definition, but this time encoding only 'under-repair' | example YANG definition, but this time encoding only 'under-repair' | |||
| and 'critical' flags. The result would be | and 'critical' flags. The result would be | |||
| CBOR diagnostic notation: h'06' | CBOR diagnostic notation: h'06' | |||
| CBOR encoding: 41 06 | CBOR encoding: 41 06 | |||
| Elements in the array MUST be either byte strings that do not end in | Elements in the array MUST be either byte strings that do not end in | |||
| a zero byte, or positive unsigned integers, where byte strings and | a zero byte, or positive unsigned integers, where byte strings and | |||
| integers MUST alternate, i.e., adjacent byte strings or adjacent | integers MUST alternate, i.e., adjacent byte strings or adjacent | |||
| integers are an error. An array with a single byte string MUST | integers are an error. An array with a single byte string MUST | |||
| instead be encoded as just that byte string. An array with a single | instead be encoded as just that byte string. An array with a single | |||
| positive integer is an error. | positive integer is an error. Note that a recipient can handle | |||
| trailing zero bytes in the byte strings using the normal rules | ||||
| without any issue, so an implementation MAY silently accept them. | ||||
| Values of 'bits' types defined in a 'union' type MUST be encoded | Values of 'bits' types defined in a 'union' type MUST be encoded | |||
| using a CBOR text string data item (major type 3) and MUST contain a | using a CBOR text string data item (major type 3) and MUST contain a | |||
| space-separated sequence of names of 'bits' that are set (see also | space-separated sequence of names of 'bits' that are set (see also | |||
| Section 6.12). The encoding MUST be enclosed by the bits CBOR tag as | Section 6.12). The encoding MUST be enclosed by the bits CBOR tag as | |||
| specified in Section 9.3. | specified in Section 9.3. | |||
| The following example shows the encoding of an 'alarm-state' leaf | The following example shows the encoding of an 'alarm-state' leaf | |||
| representation node instance defined using a union type with the | representation node instance defined using a union type with the | |||
| 'under-repair' and 'critical' flags set. | 'under-repair' and 'critical' flags set. | |||
| skipping to change at page 35, line 33 ¶ | skipping to change at page 35, line 41 ¶ | |||
| } | } | |||
| CBOR diagnostic notation: "eth1" | CBOR diagnostic notation: "eth1" | |||
| CBOR encoding: 64 65746831 | CBOR encoding: 64 65746831 | |||
| 6.10. The 'identityref' Type | 6.10. The 'identityref' Type | |||
| This specification supports two approaches for encoding identityref: | This specification supports two approaches for encoding identityref: | |||
| as a YANG Schema Item iDentifier as defined in Section 3.2, or as a | as a YANG Schema Item iDentifier as defined in Section 3.2, or as a | |||
| name as defined in Section 6.8 of [RFC7951]. | name as defined in Section 6.8 of [RFC7951]. See Section 6.12 for an | |||
| exceptional case when this representation needs to be tagged. | ||||
| 6.10.1. SIDs as identityref | 6.10.1. SIDs as identityref | |||
| When representation nodes of type identityref are implemented using | When representation nodes of type identityref are implemented using | |||
| SIDs, they MUST be encoded using a CBOR unsigned integer data item | SIDs, they MUST be encoded using a CBOR unsigned integer data item | |||
| (major type 0). (Note that, as they are not used in the position of | (major type 0). (Note that, as they are not used in the position of | |||
| CBOR map keys, no delta mechanism is employed for SIDs used for | CBOR map keys, no delta mechanism is employed for SIDs used for | |||
| identityref.) | identityref.) | |||
| The following example shows the encoding of a 'type' leaf | The following example shows the encoding of a 'type' leaf | |||
| representation node instance set to the value 'iana-if- | representation node instance set to the value 'iana-if- | |||
| type:ethernetCsmacd' (SID 1880). | type:ethernetCsmacd' (SID 1880). | |||
| Definition example from [RFC7317]: | Definition example from [RFC7317]: | |||
| identity interface-type { | identity interface-type { | |||
| } | } | |||
| identity iana-interface-type { | identity iana-interface-type { | |||
| skipping to change at page 38, line 46 ¶ | skipping to change at page 38, line 46 ¶ | |||
| } | } | |||
| CBOR diagnostic notation: "2001:db8:a0b:12f0::1" | CBOR diagnostic notation: "2001:db8:a0b:12f0::1" | |||
| CBOR encoding: 74 323030313A6462383A6130623A313266303A3A31 | CBOR encoding: 74 323030313A6462383A6130623A313266303A3A31 | |||
| 6.13. The 'instance-identifier' Type | 6.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 YANG Schema Item iDentifier as defined in | identifier, one based on YANG Schema Item iDentifier as defined in | |||
| Section 3.2 and one based on names as defined in Section 3.3. | Section 3.2 and one based on names as defined in Section 3.3. See | |||
| Section 6.12 for an exceptional case when this representation needs | ||||
| to be tagged. | ||||
| 6.13.1. SIDs as instance-identifier | 6.13.1. SIDs as instance-identifier | |||
| SIDs uniquely identify a schema node. In the case of a single | SIDs uniquely identify a schema node. In the case of a single | |||
| instance schema node, i.e., a schema node defined at the root of a | instance schema node, i.e., a schema node defined at the root of a | |||
| YANG module or submodule or schema nodes defined within a container, | YANG module or submodule or schema nodes defined within a container, | |||
| the SID is sufficient to identify this instance (representation | the SID is sufficient to identify this instance (representation | |||
| node). (Note that no delta mechanism is employed for SIDs used for | node). (Note that no delta mechanism is employed for SIDs used for | |||
| identityref, see Section 6.10.1.) | identityref, see Section 6.10.1.) | |||
| skipping to change at page 43, line 42 ¶ | skipping to change at page 43, line 42 ¶ | |||
| CBOR encoding: | CBOR encoding: | |||
| 78 34 # text(52) | 78 34 # text(52) | |||
| 2F696574662D73797374656D3A73797374656D2F61757468656E74696361 | 2F696574662D73797374656D3A73797374656D2F61757468656E74696361 | |||
| 74696F6E2F757365725B6E616D653D276A61636B275D | 74696F6E2F757365725B6E616D653D276A61636B275D | |||
| 7. Content-Types | 7. Content-Types | |||
| This specification defines the media-type application/yang-data+cbor, | This specification defines the media-type application/yang-data+cbor, | |||
| which can be used without parameters or with the parameter id=name or | which can be used without parameters or with the id parameter set to | |||
| id=sid. | either name or sid. | |||
| This media-type represents a YANG-CBOR document containing a | This media-type represents a YANG-CBOR document containing a | |||
| representation tree. If the media-type parameter id is present, | representation tree. If the media-type parameter id is present, | |||
| depending on its value, each representation node is identified by its | depending on its value, each representation node is identified by its | |||
| associated namespace qualified name as defined in Section 3.3 | associated namespace qualified name as defined in Section 3.3 | |||
| (id=name), or by its associated YANG SID (represented as a SID delta | (id=name), or by its associated YANG SID (represented, e.g., in CBOR | |||
| or via tag 47) as defined in Section 3.2 (id=sid), respectively. If | map keys as a SID delta or via tag number 47) as defined in | |||
| no id parameter is given, both forms may be present. | Section 3.2 (id=sid), respectively. If no id parameter is given, | |||
| both forms may be present. | ||||
| The format of an application/yang-data+cbor representation is that of | The format of an application/yang-data+cbor representation is that of | |||
| a CBOR map, mapping names and/or SIDs (as defined above) into | a CBOR map, mapping names and/or SIDs (as defined above) into | |||
| instance values (using the rules defined in Section 4). | instance values (using the rules defined in Section 4). | |||
| It is not foreseen at this point that the valid set of values for the | It is not foreseen at this point that the valid set of values for the | |||
| id parameter will extend beyond name, sid, or being unset; if that | id parameter will extend beyond name, sid, or being unset; if that | |||
| does happen, any new value is foreseen to be of the form | does happen, any new value is foreseen to be of the form | |||
| [a-z][a-z0-9]*(-[a-z0-9]+)*. | [a-z][a-z0-9]*(-[a-z0-9]+)*. | |||
| skipping to change at page 44, line 38 ¶ | skipping to change at page 44, line 38 ¶ | |||
| * application/yang-data+cbor -- for use by more complex applications | * application/yang-data+cbor -- for use by more complex applications | |||
| that can benefit from the increased efficiency of SID identifiers | that can benefit from the increased efficiency of SID identifiers | |||
| but also need to integrate databases of YANG modules before SID | but also need to integrate databases of YANG modules before SID | |||
| mappings are defined for them. | mappings are defined for them. | |||
| All three content-types are based on the same representation | All three content-types are based on the same representation | |||
| mechanisms, parts of which are simply not used in the first and | mechanisms, parts of which are simply not used in the first and | |||
| second case. | second case. | |||
| How the use of one of these content types is selected in a transfer | ||||
| protocol is outside the scope of this specification. The last | ||||
| paragraph of Section 5.2 of [RFC8040] discusses how to indicate and | ||||
| request the usage of specific content-types in RESTCONF. Similar | ||||
| mechanisms are available in CoAP [RFC7252] using the Content-Format | ||||
| and Accept Options; [I-D.ietf-core-comi] demonstrates specifics on | ||||
| how Content-Format may be used to indicate the id=sid case. | ||||
| 8. Security Considerations | 8. Security Considerations | |||
| The security considerations of [RFC8949] and [RFC7950] apply. | The security considerations of [RFC8949] and [RFC7950] apply. | |||
| This document defines an alternative encoding for data modeled in the | This document defines an alternative encoding for data modeled in the | |||
| YANG data modeling language. As such, this encoding does not | YANG data modeling language. As such, this encoding does not | |||
| contribute any new security issues in addition to those identified | contribute any new security issues in addition to those identified | |||
| for the specific protocol or context for which it is used. | for the specific protocol or context for which it is used. | |||
| To minimize security risks, software on the receiving side SHOULD | To minimize security risks, software on the receiving side SHOULD | |||
| reject all messages that do not comply to the rules of this document | reject all messages that do not comply to the rules of this document | |||
| and reply with an appropriate error message to the sender. | and reply with an appropriate error message to the sender. | |||
| For instance, when the 'id' parameter to the media type is used, it | ||||
| is important to properly reject identifiers of the other type, to | ||||
| avoid scenarios where different implementations interpret a given | ||||
| content in different ways. | ||||
| When SIDs are in use, the interpretation of encoded data not only | When SIDs are in use, the interpretation of encoded data not only | |||
| relies on having the right YANG modules, but also on having the right | relies on having the right YANG modules, but also on having the right | |||
| SID mapping information. Management and evolution of that mapping | SID mapping information. Management and evolution of that mapping | |||
| information therefore requires the same care as the management and | information therefore requires the same care as the management and | |||
| evolution of the YANG modules themselves. The procedures in | evolution of the YANG modules themselves. The procedures in | |||
| [I-D.ietf-core-sid] are RECOMMENDED for this purpose. | [I-D.ietf-core-sid] are being defined with this in mind. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| 9.1. Media-Types Registry | 9.1. Media-Types Registry | |||
| This document adds the following Media-Type to the "Media Types" | This document adds the following Media-Type to the "Media Types" | |||
| registry. | registry. | |||
| +================+============================+===========+ | +================+============================+===========+ | |||
| | Name | Template | Reference | | | Name | Template | Reference | | |||
| skipping to change at page 47, line 12 ¶ | skipping to change at page 47, line 35 ¶ | |||
| Table 4: CBOR tags defined by this specification | Table 4: CBOR tags defined by this specification | |||
| // RFC Ed.: please replace RFC XXXX with RFC number and remove this | // RFC Ed.: please replace RFC XXXX with RFC number and remove this | |||
| note | note | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [I-D.ietf-core-sid] | ||||
| Veillette, M., Pelov, A., Petrov, I., Bormann, C., and M. | ||||
| Richardson, "YANG Schema Item iDentifier (YANG SID)", Work | ||||
| in Progress, Internet-Draft, draft-ietf-core-sid-18, 18 | ||||
| November 2021, <https://www.ietf.org/archive/id/draft- | ||||
| ietf-core-sid-18.txt>. | ||||
| [IANA.cbor-tags] | [IANA.cbor-tags] | |||
| IANA, "Concise Binary Object Representation (CBOR) Tags", | IANA, "Concise Binary Object Representation (CBOR) Tags", | |||
| <https://www.iana.org/assignments/cbor-tags>. | <https://www.iana.org/assignments/cbor-tags>. | |||
| [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, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
| <https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [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, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7951>. | ||||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | ||||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8040>. | ||||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | ||||
| Interchange Format", STD 90, RFC 8259, | ||||
| DOI 10.17487/RFC8259, December 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8259>. | ||||
| [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
| Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
| Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
| JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
| June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
| [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data | ||||
| Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | ||||
| June 2020, <https://www.rfc-editor.org/info/rfc8791>. | ||||
| [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
| DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
| <https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
| 10.2. Informative References | 10.2. Informative References | |||
| [I-D.ietf-core-comi] | [I-D.ietf-core-comi] | |||
| Veillette, M., Stok, P. V. D., Pelov, A., Bierman, A., and | Veillette, M., Stok, P. V. D., Pelov, A., Bierman, A., and | |||
| I. Petrov, "CoAP Management Interface (CORECONF)", Work in | I. Petrov, "CoAP Management Interface (CORECONF)", Work in | |||
| Progress, Internet-Draft, draft-ietf-core-comi-11, 17 | Progress, Internet-Draft, draft-ietf-core-comi-11, 17 | |||
| January 2021, <https://www.ietf.org/archive/id/draft-ietf- | January 2021, <https://www.ietf.org/archive/id/draft-ietf- | |||
| core-comi-11.txt>. | core-comi-11.txt>. | |||
| [I-D.ietf-core-sid] | ||||
| Veillette, M., Pelov, A., Petrov, I., Bormann, C., and M. | ||||
| Richardson, "YANG Schema Item iDentifier (YANG SID)", Work | ||||
| in Progress, Internet-Draft, draft-ietf-core-sid-18, 18 | ||||
| November 2021, <https://www.ietf.org/archive/id/draft- | ||||
| ietf-core-sid-18.txt>. | ||||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [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, | |||
| DOI 10.17487/RFC7228, May 2014, | DOI 10.17487/RFC7228, May 2014, | |||
| <https://www.rfc-editor.org/info/rfc7228>. | <https://www.rfc-editor.org/info/rfc7228>. | |||
| [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | ||||
| Application Protocol (CoAP)", RFC 7252, | ||||
| DOI 10.17487/RFC7252, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7252>. | ||||
| [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, <https://www.rfc-editor.org/info/rfc7317>. | 2014, <https://www.rfc-editor.org/info/rfc7317>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7951>. | ||||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | ||||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8040>. | ||||
| [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | ||||
| Interchange Format", STD 90, RFC 8259, | ||||
| DOI 10.17487/RFC8259, December 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8259>. | ||||
| [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | |||
| Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8343>. | <https://www.rfc-editor.org/info/rfc8343>. | |||
| [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management", | [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management", | |||
| RFC 8344, DOI 10.17487/RFC8344, March 2018, | RFC 8344, DOI 10.17487/RFC8344, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8344>. | <https://www.rfc-editor.org/info/rfc8344>. | |||
| [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data | ||||
| Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | ||||
| June 2020, <https://www.rfc-editor.org/info/rfc8791>. | ||||
| Acknowledgments | 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.ietf-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 Jürgen Schönwälder. | comments from Ladislav Lhotka and Jürgen Schönwälder. | |||
| End of changes. 43 change blocks. | ||||
| 94 lines changed or deleted | 124 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/ | ||||