| rfc9595.original | rfc9595.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force M. V. Veillette, Ed. | Internet Engineering Task Force (IETF) M. Veillette, Ed. | |||
| Internet-Draft Trilliant Networks Inc. | Request for Comments: 9595 Trilliant Networks Inc. | |||
| Intended status: Standards Track A. Pelov, Ed. | Category: Standards Track A. Pelov, Ed. | |||
| Expires: 24 June 2024 IMT Atlantique | ISSN: 2070-1721 IMT Atlantique | |||
| I. Petrov, Ed. | I. Petrov, Ed. | |||
| Google Switzerland GmbH | Google Switzerland GmbH | |||
| C. Bormann | C. Bormann | |||
| Universität Bremen TZI | Universität Bremen TZI | |||
| M. Richardson | M. Richardson | |||
| Sandelman Software Works | Sandelman Software Works | |||
| 22 December 2023 | July 2024 | |||
| YANG Schema Item iDentifier (YANG SID) | YANG Schema Item iDentifier (YANG SID) | |||
| draft-ietf-core-sid-24 | ||||
| Abstract | Abstract | |||
| YANG Schema Item iDentifiers (YANG SID) are globally unique 63-bit | YANG Schema Item iDentifiers (YANG SIDs) are globally unique 63-bit | |||
| unsigned integers used to identify YANG items, as a more compact | unsigned integers used to identify YANG items. SIDs provide a more | |||
| method to identify YANG items that can be used for efficiency and in | compact method for identifying those YANG items that can be used | |||
| constrained environments (RFC 7228). This document defines the | efficiently, notably in constrained environments (RFC 7228). This | |||
| semantics, the registration, and assignment processes of YANG SIDs | document defines the semantics, registration processes, and | |||
| for IETF managed YANG modules. To enable the implementation of these | assignment processes for YANG SIDs for IETF-managed YANG modules. To | |||
| processes, this document also defines a file format used to persist | enable the implementation of these processes, this document also | |||
| and publish assigned YANG SIDs. | defines a file format used to persist and publish assigned YANG SIDs. | |||
| // The present version (–24) is intended to address the remaining | ||||
| // IESG comments. | ||||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-core-sid/. | ||||
| Discussion of this document takes place on the Constrained RESTful | ||||
| Environments Working Group mailing list (mailto:core@ietf.org), which | ||||
| is archived at https://mailarchive.ietf.org/arch/browse/core/. | ||||
| Subscribe at https://www.ietf.org/mailman/listinfo/core/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/core-wg/yang-cbor. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 24 June 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9595. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 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 | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Terminology and Notation . . . . . . . . . . . . . . . . 5 | 1.1. Terminology and Notation | |||
| 2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Objectives | |||
| 2.1. Technical Objectives . . . . . . . . . . . . . . . . . . 7 | 2.1. Technical Objectives | |||
| 2.2. Module evolution, versioning . . . . . . . . . . . . . . 7 | 2.2. Module Evolution and Versioning | |||
| 2.3. Solution Components and Derived Objectives . . . . . . . 8 | 2.3. Solution Components and Derived Objectives | |||
| 2.4. Parties and Roles . . . . . . . . . . . . . . . . . . . . 8 | 2.4. Parties and Roles | |||
| 3. ".sid" file lifecycle . . . . . . . . . . . . . . . . . . . . 11 | 3. ".sid" File Lifecycle | |||
| 4. ".sid" file format . . . . . . . . . . . . . . . . . . . . . 12 | 4. ".sid" File Format | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 5. Security Considerations | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 6. IANA Considerations | |||
| 6.1. YANG Namespace Registration . . . . . . . . . . . . . . . 21 | 6.1. YANG Namespace Registration | |||
| 6.2. Register ".sid" File Format Module . . . . . . . . . . . 21 | 6.2. ".sid" File Format Module Registration | |||
| 6.3. Create new IANA Registry: "YANG SID Mega-Range" | 6.3. New IANA Registry: YANG-SID Mega-Ranges | |||
| registry . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.3.1. Structure | |||
| 6.3.2. Allocation Policy | ||||
| 6.3.1. Structure . . . . . . . . . . . . . . . . . . . . . . 22 | 6.3.2.1. First Allocation | |||
| 6.3.2. Allocation policy . . . . . . . . . . . . . . . . . . 22 | 6.3.2.2. Consecutive Allocations | |||
| 6.3.2.1. First allocation . . . . . . . . . . . . . . . . 23 | 6.3.3. Initial Contents of the Registry | |||
| 6.3.2.2. Consecutive allocations . . . . . . . . . . . . . 23 | 6.4. New IANA Registry: IETF YANG-SID Ranges | |||
| 6.3.3. Initial contents of the Registry . . . . . . . . . . 23 | 6.4.1. Structure | |||
| 6.4. Create a new IANA Registry: IETF YANG SID Range Registry | 6.4.2. Allocation Policy | |||
| (managed by IANA) . . . . . . . . . . . . . . . . . . . . 23 | 6.4.3. Publication of the ".sid" File | |||
| 6.4.1. Structure . . . . . . . . . . . . . . . . . . . . . . 24 | 6.4.4. Initial Contents of the Registry | |||
| 6.4.2. Allocation policy . . . . . . . . . . . . . . . . . . 24 | 6.5. New IANA Registry: IETF YANG-SID Modules | |||
| 6.4.3. Publication of the ".sid" file . . . . . . . . . . . 25 | 6.5.1. Structure | |||
| 6.4.4. Initial contents of the registry . . . . . . . . . . 26 | 6.5.2. Allocation Policy | |||
| 6.5. Create new IANA Registry: "IETF YANG SID Registry" . . . 28 | 6.5.3. Recursive Allocation of YANG SIDs at Document Adoption | |||
| 6.5.1. Structure . . . . . . . . . . . . . . . . . . . . . . 28 | 6.5.4. Initial Contents of the Registry | |||
| 6.5.2. Allocation policy . . . . . . . . . . . . . . . . . . 28 | 6.6. Media Type and Content-Format Registration | |||
| 6.5.3. Recursive Allocation of YANG SID Range at Document | 6.6.1. Media Type application/yang-sid+json | |||
| Adoption . . . . . . . . . . . . . . . . . . . . . . 29 | 6.6.2. CoAP Content-Format | |||
| 6.5.4. Initial contents of the registry . . . . . . . . . . 30 | 7. References | |||
| 6.6. Register Media Type and Content-Format . . . . . . . . . 30 | 7.1. Normative References | |||
| 6.6.1. Media Type application/yang-sid+json . . . . . . . . 30 | 7.2. Informative References | |||
| 6.6.2. CoAP Content-Format . . . . . . . . . . . . . . . . . 31 | Appendix A. ".sid" File Example | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | Appendix B. SID Autogeneration | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 32 | Appendix C. ".sid" File Lifecycle | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 33 | C.1. ".sid" File Creation | |||
| Appendix A. ".sid" file example . . . . . . . . . . . . . . . . 35 | C.2. ".sid" File Update | |||
| Appendix B. SID auto generation . . . . . . . . . . . . . . . . 44 | Appendix D. Keeping a ".sid" File in a YANG Instance Data File | |||
| Appendix C. ".sid" file lifecycle . . . . . . . . . . . . . . . 46 | Acknowledgments | |||
| C.1. ".sid" File Creation . . . . . . . . . . . . . . . . . . 46 | Contributors | |||
| C.2. ".sid" File Update . . . . . . . . . . . . . . . . . . . 47 | Authors' Addresses | |||
| Appendix D. Keeping a SID File in a YANG Instance Data file . . 48 | ||||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| 1. Introduction | 1. Introduction | |||
| 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 the Network Configuration Protocol | |||
| [RFC6241] and RESTCONF [RFC8040], these identifiers are implemented | (NETCONF) [RFC6241] and RESTCONF [RFC8040], these identifiers are | |||
| using names. To allow the implementation of data models defined in | implemented using names. To allow the implementation of data models | |||
| YANG in constrained devices [RFC7228] and constrained networks, a | defined in YANG in constrained devices [RFC7228] and constrained | |||
| more compact method to identify YANG items is required. This compact | networks, a more compact method to identify YANG items is required. | |||
| identifier, called YANG Schema Item iDentifier or YANG SID (or simply | This compact identifier, called the YANG Schema Item iDentifier or | |||
| SID in this document and when the context is clear), is encoded using | YANG SID (or simply SID in this document and when the context is | |||
| a 63-bit unsigned integer. The limitation to 63-bit unsigned | clear), is encoded using a 63-bit unsigned integer. The limitation | |||
| integers allows SIDs to be manipulated more easily on platforms that | to 63-bit unsigned integers allows SIDs to be manipulated more easily | |||
| might otherwise lack 64-bit unsigned arithmetic. The loss of a | on platforms that might otherwise lack 64-bit unsigned arithmetic. | |||
| single bit of range is not significant given the size of the | The loss of a single bit of range is not significant, given the size | |||
| remaining space. | of the remaining space. | |||
| The following items are identified using SIDs: | The following items are identified using SIDs: | |||
| * identities | * identities | |||
| * data nodes (Note: including those nodes defined by the 'rc:yang- | * data nodes (note: including those nodes defined by the 'rc:yang- | |||
| data' [RFC8040] and 'sx:structure' [RFC8791] extensions.) | data' extension [RFC8040] and the 'sx:structure' extension | |||
| [RFC8791]) | ||||
| * remote procedure calls (RPCs) and associated input(s) and | * remote procedure calls (RPCs) and associated input(s) and | |||
| output(s) | output(s) | |||
| * actions and associated input(s) and output(s) | * actions and associated input(s) and output(s) | |||
| * notifications and associated information | * notifications and associated information | |||
| * YANG modules and features | * YANG modules and features | |||
| It is possible that some protocols use only a subset of the assigned | It is possible that some protocols will use only a subset of the | |||
| SIDs, for example, for protocols equivalent to NETCONF [RFC6241] like | assigned SIDs; for example, for protocols other than NETCONF | |||
| [I-D.ietf-core-comi] the transportation of YANG module SIDs might be | [RFC6241] that provide access to YANG-modeled data, such as | |||
| unnecessary. Other protocols might need to be able to transport this | [CORE-COMI], the transport of YANG module SIDs might be unnecessary. | |||
| information, for example protocols related to discovery such as | Other protocols might need to be able to transport this information | |||
| Constrained YANG Module Library [I-D.ietf-core-yang-library]. | -- for example, protocols related to discovery such as the | |||
| Constrained YANG Module Library [YANG-LIBRARY]. | ||||
| SIDs are globally unique integers. A registration system is used in | SIDs are globally unique integers. A registration system is used in | |||
| order to guarantee their uniqueness. SIDs are registered in blocks | order to guarantee their uniqueness. SIDs are registered in blocks | |||
| called "SID ranges". Once considered "stable", SIDs are assigned | called "SID ranges". Once they are considered "stable", SIDs are | |||
| permanently. Items introduced by a new revision of a YANG module are | assigned permanently. Items introduced by a new revision of a YANG | |||
| added to the list of SIDs already assigned. This is discussed in | module are added to the list of SIDs already assigned. This is | |||
| more detail in Section 2. | discussed in more detail in Section 2. | |||
| Assignment of SIDs to YANG items is usually automated as discussed in | The assignment of SIDs to YANG items is usually automated as | |||
| Appendix B, which also discusses some cases where manual | discussed in Appendix B, which also discusses some cases where manual | |||
| interventions may be appropriate. | interventions may be appropriate. | |||
| Section 3 provides more details about the registration process of | Section 3 provides more details about the registration processes for | |||
| YANG modules and associated SIDs. To enable the implementation of | YANG modules and associated SIDs. To enable the implementation of | |||
| this registry, Section 4 defines a standard file format used to store | these processes, Section 4 defines a standard file format used to | |||
| and publish SIDs. | store and publish SIDs. | |||
| IETF managed YANG modules that need to allocate SIDs use the IANA | IETF-managed YANG modules that need to allocate SIDs will use the | |||
| mechanism specified in this document. YANG modules created by other | IANA mechanisms specified in this document. See Section 6 for | |||
| parties allocate SID ranges using the IANA allocation mechanisms via | details. YANG modules created by other parties allocate SID ranges | |||
| Mega-Ranges (see Section 6.3); within the Mega-Range allocation, | using the IANA allocation mechanisms via Mega-Ranges (see | |||
| those other parties are free to make up their own mechanism. | Section 6.3); within the Mega-Range allocation, those other parties | |||
| are free to make up their own mechanism. | ||||
| Among other uses, YANG SIDs are particularly useful to obtain a | Among other uses, YANG SIDs are particularly useful for obtaining a | |||
| compact encoding for YANG-CBOR [RFC9254]. At the time of writing, a | compact encoding for YANG-CBOR [RFC9254]. At the time of writing, a | |||
| tool for automated ".sid" file generation is available as part of the | tool for automated ".sid" file generation is available as part of the | |||
| open-source project PYANG [PYANG]. | open-source project PYANG [PYANG]. | |||
| 1.1. Terminology and Notation | 1.1. Terminology and Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | [BCP14] (RFC 2119) (RFC 8174) when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The following terms are defined in [RFC7950]: | The following terms are defined in [RFC7950]: | |||
| * action | * action | |||
| * feature | * feature | |||
| * module | * module | |||
| skipping to change at page 5, line 38 ¶ | skipping to change at line 200 ¶ | |||
| * RPC | * RPC | |||
| * schema node | * schema node | |||
| * schema tree | * schema tree | |||
| * submodule | * submodule | |||
| This specification also makes use of the following terminology: | This specification also makes use of the following terminology: | |||
| * item: A schema node, an identity, a module, or a feature defined | item: A schema node, an identity, a module, or a feature defined | |||
| using the YANG modeling language. | using the YANG modeling language. | |||
| * YANG Schema Item iDentifier (YANG SID or simply SID): Unsigned | YANG Schema Item iDentifier (YANG SID or simply SID): Unsigned | |||
| integer used to identify different YANG items (cf. Section 3.2 of | integer used to identify different YANG items (cf. Section 3.2 of | |||
| [RFC9254]). | [RFC9254]). | |||
| * YANG Name: Text string used to identify different YANG items (cf. | YANG name: Text string used to identify different YANG items | |||
| Section 3.3 of [RFC9254]). | (cf. Section 3.3 of [RFC9254]). | |||
| 2. Objectives | 2. Objectives | |||
| The overriding objective of the SID assignment and registration | The overriding objective of the SID assignment and registration | |||
| system is to ensure global interoperability of protocols that employ | system is to ensure global interoperability of protocols that employ | |||
| SIDs in order to communicate about data modeled in YANG. This | SIDs in order to communicate about data modeled in YANG. This | |||
| objective poses certain requirements on the stability of SIDs while | objective poses certain requirements on the stability of SIDs while | |||
| at the same time not hindering active evolution of the YANG modules | at the same time not hindering active evolution of the YANG modules | |||
| the SIDs are intended to support. | the SIDs are intended to support. | |||
| Additional objectives include: | Additional objectives include: | |||
| * enabling the developer of a YANG module to also be the originating | * enabling the developer of a YANG module to also be the originating | |||
| entity for the SIDs pertaining to that module. | entity for the SIDs pertaining to that module. | |||
| * making it easy for YANG developers to obtain SIDs. | * making it easy for YANG developers to obtain SIDs. | |||
| * enabling other developers to define SIDs for a module where the | * enabling other developers to define SIDs for a module where the | |||
| developer of the module is not interested in assigning the SIDs. | developer of the module is not interested in assigning the SIDs. | |||
| * keeping an assignment regime that keeps short (2..4 byte) SIDs | * keeping an assignment regime that keeps short SIDs (2..4 bytes) | |||
| readily available for the applications that would benefit from | readily available for the applications that would benefit from | |||
| them while at the same time employing the vast 63-bit SID space to | them while at the same time employing the vast 63-bit SID space to | |||
| facilitate permissionless actions. | facilitate permissionless actions. | |||
| * enabling multiple entities to provide services that support the | * enabling multiple entities to provide services that support the | |||
| assignment of SIDs. | assignment of SIDs. | |||
| * maintaining some locality in the assignment of SIDs so the | * maintaining some locality in the assignment of SIDs so the | |||
| efficiencies of the SID delta mechanism can be fully employed. | efficiencies of the SID delta mechanism can be fully employed. | |||
| * enabling various software components to deal in terms of SIDs | * enabling various software components to operate in terms of SIDs | |||
| without having complete information about other parties in the | without having complete information about other parties in the | |||
| communication process. | communication process. | |||
| While IANA ultimately maintains the registries that govern SIDs for | While IANA ultimately maintains the registries that govern SIDs for | |||
| IETF-defined modules, various support tools (such as, at the time of | IETF-defined modules, various support tools (such as, at the time of | |||
| writing, the YANG Catalog [yangcatalog]) need to provide the support | writing, the YANG Catalog [yangcatalog]) need to provide the support | |||
| to enable SID assignment and use for modules still in IETF | to enable SID assignment and use for modules still in IETF | |||
| development. Developers of open-source or proprietary YANG modules | development. Developers of open-source or proprietary YANG modules | |||
| also need to be able to serve as such entities autonomously, possibly | also need to be able to serve as such entities autonomously, possibly | |||
| forming alliances independent of the IETF, while still fitting in the | forming alliances independent of the IETF, while still fitting in the | |||
| overall SID number space managed by IANA. Obviously, this process | overall SID number space managed by IANA. Obviously, this process | |||
| has a number of parallels to the management of IP addresses, but also | has a number of parallels to the management of IP addresses but is | |||
| is very different. | also very different. | |||
| 2.1. Technical Objectives | 2.1. Technical Objectives | |||
| As discussed in the introduction, SIDs are intended as globally | As discussed in the Introduction, SIDs are intended as globally | |||
| unique (unsigned) integers. | unique (unsigned) integers. | |||
| Specifically, this means that: | Specifically, this means that: | |||
| *Objective 1* (MUST): any 63-bit unsigned integer is either | *Objective 1* (MUST): Any 63-bit unsigned integer either (1) is | |||
| unassigned as a SID or immutably maps to EXACTLY one YANG name. | unassigned as a SID or (2) immutably maps to EXACTLY one YANG | |||
| Only the transition from unassigned to that immutable mapping is | name. Only the transition from unassigned to that immutable | |||
| defined. | mapping is defined. | |||
| This enables a recipient of a data structure employing SIDs to | This enables a recipient of a data structure employing SIDs to | |||
| translate them into the globally meaningful YANG names that the | translate them into the globally meaningful YANG names that the | |||
| existing encodings of YANG data such as YANG-XML [RFC7950] and YANG- | existing encodings of YANG data such as YANG-XML [RFC7950] and YANG- | |||
| JSON [RFC7951] employ today. | JSON [RFC7951] employ today. | |||
| The term YANG name is not defined outside this document, and YANG has | The term "YANG name" is not defined outside this document, and YANG | |||
| a complex system of names and entities that can have those names. | has a complex system of names and entities that can have those names. | |||
| Instead of defining the term technically, this set of objectives uses | Instead of defining the term technically, this set of objectives uses | |||
| it in such a way that the overall objectives of YANG-SID can be | it in such a way that the overall objectives of YANG SID can be | |||
| achieved. | achieved. | |||
| A desirable objective is that: | A desirable objective is that: | |||
| *Objective 2* (SHOULD): any YANG name in active use has one SID | *Objective 2* (SHOULD): Any YANG name in active use has one SID | |||
| assigned. | assigned. | |||
| This means that: | This means that: | |||
| 1. There should not be YANG names without SIDs assigned | 1. There should not be YANG names without SIDs assigned. | |||
| 2. YANG names should not have multiple SIDs assigned | 2. YANG names should not have multiple SIDs assigned. | |||
| These objectives are unattainable in full, because YANG names are not | These objectives are unattainable in full, because YANG names are not | |||
| necessarily born with a SID assignment, and because entirely | necessarily born with a SID assignment and because entirely | |||
| autonomous entities might decide to assign SIDs for the same YANG | autonomous entities might decide to assign SIDs for the same YANG | |||
| name without communicating ("like ships in the night"). Note that as | name without communicating ("like ships in the night"). Note that as | |||
| long as this autonomy is maintained, any single observer will have | long as this autonomy is maintained, any single observer will have | |||
| the impression that Objective 2 is attained. Only when entities that | the impression that Objective 2 is attained. Only when entities that | |||
| have acted autonomously start communicating, a deviation is observed. | have acted autonomously start communicating will a deviation be | |||
| observed. | ||||
| 2.2. Module evolution, versioning | 2.2. Module Evolution and Versioning | |||
| YANG modules evolve (see Section 11 of [RFC7950], Section 4.27 of | YANG modules evolve (see Section 11 of [RFC7950] and Section 4.27 of | |||
| [RFC8407]). The technical objectives listed above are states in | RFC 8407 [BCP216]). The technical objectives listed above are stated | |||
| terms that are independent of this evolution. | in terms that are independent of this evolution. | |||
| However, some modules are still in a very fluid state, and the | However, some modules are still in a very fluid state, and the | |||
| assignment of permanent SIDs to the YANG names created in them is | assignment of permanent SIDs to the YANG names created in them is | |||
| less desirable. This is not only true for new modules, but also for | less desirable. This is true not only for new modules but also for | |||
| emerging new revisions of existing stable modules. | emerging new revisions of existing stable modules. | |||
| *Objective 3* (MUST): the SID management system is independent of | *Objective 3* (MUST): The SID management system is independent of | |||
| any module versioning. | any module versioning. | |||
| 2.3. Solution Components and Derived Objectives | 2.3. Solution Components and Derived Objectives | |||
| A registration system is used in order to guarantee the uniqueness of | A registration system is used in order to guarantee the uniqueness of | |||
| SIDs. To be able to provide some autonomy in allocation (and avoid | SIDs. To be able to provide some autonomy in allocation (and avoid | |||
| information disclosure where it is not desirable), SIDs are | information disclosure where it is not desirable), SIDs are | |||
| registered in blocks called "SID ranges". | registered in blocks called "SID ranges". | |||
| SIDs are assigned permanently. | SIDs are assigned permanently. | |||
| Items introduced by a new revision of a YANG module are added to the | Items introduced by a new revision of a YANG module are added to the | |||
| list of SIDs already assigned. | list of SIDs already assigned. | |||
| 2.4. Parties and Roles | 2.4. Parties and Roles | |||
| In the YANG development process, we can discern a number of parties | In the YANG development process, we can discern a number of parties | |||
| that are concerned with a YANG module: | that are concerned with a YANG module: | |||
| module controller: | module controller: | |||
| The owner of the YANG module, i.e., the controller about its | The owner of the YANG module, i.e., the controller of the module's | |||
| evolution. | evolution. | |||
| registration entity: | registration entity: | |||
| The controller of the module namespace, specifically also of the | The controller of the module namespace, specifically also of the | |||
| prefixes that are in common use. (This is not a required party.) | prefixes that are in common use. (This is not a required party.) | |||
| module repository: | module repository: | |||
| An entity that supplies modules to module users. This can be | An entity that supplies modules to module users. This can be an | |||
| "official" (e.g., IANA for IETF modules) or unofficial (e.g., the | "official" entity (e.g., IANA for IETF modules) or an "unofficial" | |||
| YANG Catalog [yangcatalog]). Not all repositories are in a | entity (e.g., the YANG Catalog [yangcatalog]). Not all | |||
| position to act as a registry, i.e., as a permanent record for the | repositories are in a position to act as a registry, i.e., as a | |||
| information they supply; these repositories need to recur to | permanent record for the information they supply; these | |||
| module owners as a stable source. | repositories need to recur to module owners as a stable source. | |||
| module user: | module user: | |||
| An entity that uses a module, after obtaining it from the module | An entity that uses a module, after obtaining it from the module | |||
| controller or a module repository. | controller or a module repository. | |||
| This set of parties needs to evolve to take on the additional roles | This set of parties needs to evolve to take on the additional roles | |||
| that the SID assignment process requires: | that the SID assignment process requires: | |||
| SID assigner: | SID assigner: | |||
| An entity that assigns SIDs for a module. Objective 2 aims at | An entity that assigns SIDs for a module. Objective 2 aims at | |||
| having only one SID assigner for each module. SID assigners | having only one SID assigner for each module. SID assigners | |||
| preferably stay the same over a module development process; | preferably stay the same over a module development process; | |||
| however this specification provides SID files to ensure an | however, this specification provides ".sid" files to ensure an | |||
| organized handover. | organized handover. | |||
| SID range registries: | SID range registry: | |||
| The entities that supply a SID assigner with SID ranges that they | An entity that supplies a SID assigner with SID ranges that it can | |||
| can use in assigning SIDs for a module. (In this specification, | use in assigning SIDs for a module. (In this specification, there | |||
| there is a structure with mega-ranges and individual SID ranges; | is a structure with Mega-Ranges and individual SID ranges; this is | |||
| this is not relevant here.) | not relevant here.) | |||
| SID repository: | SID repository: | |||
| An entity that supplies SID assignments to SID users, usually in | An entity that supplies SID assignments to SID users, usually in | |||
| the form of a SID file. | the form of a ".sid" file. | |||
| SID users: | SID user: | |||
| The module user that uses the SIDs provided by a SID assigner for | The module user that uses the SIDs provided by a SID assigner for | |||
| a YANG module. SID users need to find SID assigners (or at least | a YANG module. SID users need to find SID assigners (or at least | |||
| their SID assignments). | their SID assignments). | |||
| During the introduction of SIDs, the distribution of the SID roles to | As the use of SIDs with YANG data models is introduced, the | |||
| the existing parties for a YANG module will evolve. | distribution of the SID roles to the existing parties for a YANG | |||
| module will evolve. | ||||
| The desirable end state of this evolution is shown in Table 1. | The desirable end state of this evolution is shown in Table 1. | |||
| +====================+======================================+ | +====================+======================================+ | |||
| | Role | Party | | | Role | Party | | |||
| +====================+======================================+ | +====================+======================================+ | |||
| | SID assigner | module developer | | | SID assigner | module developer | | |||
| +--------------------+--------------------------------------+ | +--------------------+--------------------------------------+ | |||
| | SID range registry | (as discussed in this specification) | | | SID range registry | (as discussed in this specification) | | |||
| +--------------------+--------------------------------------+ | +--------------------+--------------------------------------+ | |||
| | SID repository | module repository | | | SID repository | module repository | | |||
| +--------------------+--------------------------------------+ | +--------------------+--------------------------------------+ | |||
| | SID user | module user (naturally) | | | SID user | module user (naturally) | | |||
| +--------------------+--------------------------------------+ | +--------------------+--------------------------------------+ | |||
| Table 1: Roles and Parties: Desired End State | Table 1: Roles and Parties: Desired End State | |||
| This grouping of roles and parties puts the module developer into a | This grouping of roles and parties puts the module developer in a | |||
| position where it can achieve the objectives laid out in this section | position where it can achieve the objectives laid out in this section | |||
| (a "type-1", "SID-guiding" module controller). (While a third party | (a "type-1", "SID-guiding" module controller). (While a third party | |||
| might theoretically assign additional SIDs and conflict with | might theoretically assign additional SIDs and conflict with | |||
| objective 2, there is very little reason to do so if SID files are | Objective 2, there is very little reason to do so if ".sid" files are | |||
| always provided by the module developer with the module.) | always provided by the module developer with the module.) | |||
| The rest of this section is concerned with the transition to this end | The rest of this section is concerned with the transition to this end | |||
| state. | state. | |||
| For existing modules, there is no SID file. The entity that stands | For existing modules, there is no ".sid" file. The entity that | |||
| in as the SID assigner is not specified. This situation has the | stands in as the SID assigner is not specified. This situation has | |||
| highest potential of a conflict with objective 2. | the highest potential for conflict with Objective 2. | |||
| Similarly, for new module development, the module owner may not have | Similarly, for new module development, the module owner may not have | |||
| heard about SIDs or not be interested in assigning them (e.g., | heard about SIDs or may not be interested in assigning them (e.g., | |||
| because of lack of software or procedures within their organization). | because of lack of software or procedures within their organization). | |||
| For these two cases (which we will call type-3, "SID-oblivious" | For these two cases (which we will collectively call "type-3", "SID- | |||
| module controller), module repositories can act as a mediator, giving | oblivious" module controller), module repositories can act as a | |||
| SID users access to a SID assigner that is carefully chosen to be a | mediator, giving SID users access to a SID assigner that is carefully | |||
| likely choice by other module repositories as well, maximizing the | chosen to be a likely choice by other module repositories as well, | |||
| likelihood of achieving objective 2. | maximizing the likelihood of achieving Objective 2. | |||
| If the module controller has heard about SIDs, but is not assigning | If a module controller has heard about SIDs but is not assigning them | |||
| them yet, it can designate a SID assigner instead. This can lead to | yet, it can designate a SID assigner instead. This can lead to a | |||
| a stable, unique set of SID assignments being provided indirectly by | stable, unique set of SID assignments being provided indirectly by a | |||
| a (type-2, "SID-aware") module developer. Entities offering | ("type-2", "SID-aware") module developer. Entities offering | |||
| designated SID assigner services could make these available in an | designated SID assigner services could make these available in an | |||
| easy-to-use way, e.g., via a Web interface. | easy-to-use way, e.g., via a web interface. | |||
| The entity acting as a SID assigner minimally needs to record the SID | The entity acting as a SID assigner minimally needs to record the SID | |||
| range it uses for the SID assignment. If the SID range registry can | range it uses for the SID assignment. If the SID range registry | |||
| record the module name and revision, and the assignment processes | employed can record the module name and revision and if the | |||
| (including the software used) are stable, the SID assigner can | assignment processes (including the software used) are stable, the | |||
| theoretically reconstruct its assignments, but this is an invitation | SID assigner can theoretically reconstruct its assignments, but this | |||
| for implementation bugs. | could invite implementation bugs. | |||
| SID assigners attending to a module in development (not yet stable) | SID assigners attending to a module in development (not yet stable) | |||
| need to decide whether SIDs for a new revision are re-assigned from | need to decide whether SIDs for a new revision are reassigned from | |||
| scratch ("clean-slate") or use existing assignments from a previous | scratch ("clean slate") or use existing assignments from a previous | |||
| revision as a base, only assigning new SIDs for new names. Once a | revision as a base, only assigning new SIDs for new names. Once a | |||
| module is declared stable, its SID assignments SHOULD be declared | module is declared stable, its SID assignments SHOULD be declared | |||
| stable as well (the exception being that, for existing YANG modules, | stable as well (except that, for existing YANG modules, some review | |||
| some review may be needed before this is done). | may be needed before this is done). | |||
| This specification does not further discuss how mediating entities | This specification does not further discuss how mediating entities | |||
| such as designated SID assigners or SID repositories could operate; | such as designated SID assigners or SID repositories could operate; | |||
| instead, it supplies objectives for their operation. | instead, it supplies objectives for their operation. | |||
| 3. ".sid" file lifecycle | 3. ".sid" File Lifecycle | |||
| YANG is a language designed to model data accessed using one of the | YANG is a language designed to model data accessed using one of the | |||
| compatible protocols (e.g. NETCONF [RFC6241], RESTCONF [RFC8040] and | compatible protocols (e.g., NETCONF [RFC6241], RESTCONF [RFC8040], | |||
| CORECONF [I-D.ietf-core-comi]). A YANG module defines hierarchies of | and the CoAP Management Interface (CORECONF) [CORE-COMI]). A YANG | |||
| data, including configuration, state data, RPCs, actions and | module defines hierarchies of data, including configuration, state | |||
| notifications. | data, RPCs, actions, and notifications. | |||
| Many YANG modules are not created in the context of constrained | Many YANG modules are not created in the context of constrained | |||
| applications. YANG modules can be implemented using NETCONF | applications. YANG modules can be implemented using NETCONF | |||
| [RFC6241] or RESTCONF [RFC8040] without the need to assign SIDs. | [RFC6241] or RESTCONF [RFC8040] without the need to assign SIDs. | |||
| As needed, authors of YANG modules can assign SIDs to their YANG | As needed, authors of YANG modules can assign SIDs to their YANG | |||
| modules. In order to do that, they should first obtain a SID range | modules. In order to do that, they should first obtain a SID range | |||
| from a registry and use that range to assign or generate SIDs to | from a registry and use that range to assign or generate SIDs to | |||
| items of their YANG module. The assignments can then be stored in a | items in their YANG module. The assignments can then be stored in a | |||
| ".sid" file. For example on how this could be achieved, please refer | ".sid" file. For an example of how this could be achieved, please | |||
| to Appendix C. | refer to Appendix C. | |||
| Items introduced by a new revision of a YANG module are added to the | Items introduced by a new revision of a YANG module are added to the | |||
| list of SIDs already assigned. When this is done during development | list of SIDs already assigned. When this is done during the | |||
| of a new protocol document, it may be necessary to make provisional | development of a new protocol document, it may be necessary to make | |||
| assignments. They may get changed, revised or withdrawn during the | provisional assignments. They may get changed, revised, or withdrawn | |||
| development of a new standard. These provisional assignments are | during the development of a new standard. These provisional | |||
| marked with a status of "unstable", so that they can be removed and | assignments are marked with a status of "unstable", so that they can | |||
| the SID number possibly be reassigned for a different YANG schema | be removed and the SID number possibly reassigned for a different | |||
| name/path later during development. When the specification is | YANG schema name/path later in the development process. When the | |||
| advanced to a final document, then the assignment is marked with a | specification is advanced to a final document, the assignment is | |||
| status of "stable". During a period of development starting from a | marked with a status of "stable". During a period of development | |||
| published specification, two variants of the SID file should be made | starting from a published specification, two variants of the ".sid" | |||
| available by the tooling involved in that development: (1) a | file should be made available by the tooling involved in that | |||
| "published" SID file with the existing stable SID assignments only | development: (1) a "published" ".sid" file with the existing stable | |||
| (which the development effort should keep stable), as well as (2) an | SID assignments only (which the development effort should keep | |||
| "unpublished" SID file that also contains the unstable SID | stable), as well as (2) an "unpublished" ".sid" file that also | |||
| assignments. | contains the unstable SID assignments. | |||
| Registration of the ".sid" file associated to a YANG module is | Registration of the ".sid" file associated with a YANG module is | |||
| optional but recommended, in order to promote interoperability | optional but recommended; doing so will promote interoperability | |||
| between devices and to avoid duplicate allocation of SIDs to a single | between devices and avoid duplicate allocation of SIDs to a single | |||
| YANG module. Different registries might have different requirements | YANG module. Different registries might have different requirements | |||
| for the registration and publication of the ".sid" files. For a | for the registration and publication of the ".sid" files. For a | |||
| diagram of one of the possibilities, please refer to the activity | diagram of one possible scenario, please refer to the activity | |||
| diagram on Figure 4 in Appendix C. | diagram shown in Figure 4 in Appendix C. | |||
| Each time a YANG module or one of its imported module(s) or included | Each time a YANG module, one or more of its imported modules, or one | |||
| submodule(s) is updated, a new ".sid" file MAY be created if the new | or more of its included submodules are updated, a new ".sid" file MAY | |||
| or updated items will need SIDs. All the SIDs present in the | be created if the new or updated items will need SIDs. All the SIDs | |||
| previous version of the ".sid" file MUST be present in the new | present in a previous version of the ".sid" file that was in active | |||
| version as well. The creation of this new version of the ".sid" file | use MUST be present in the new version as well. The creation of this | |||
| SHOULD be performed using an automated tool. | new version of the ".sid" file SHOULD be performed using an automated | |||
| tool. | ||||
| If a new revision requires more SIDs than initially allocated, a new | If a new revision requires more SIDs than initially allocated, a new | |||
| SID range MUST be added to the 'assignment-range' as defined in | SID range MUST be added to the 'assignment-range' item as defined in | |||
| Section 4. These extra SIDs are used for subsequent assignments. | Section 4. These extra SIDs are used for subsequent assignments. | |||
| For an example of this update process, see activity diagram Figure 5 | For an example of this update process, see the activity diagram shown | |||
| in Appendix C. | in Figure 5 in Appendix C. | |||
| 4. ".sid" file format | 4. ".sid" File Format | |||
| ".sid" files are used to persist and publish SIDs assigned to the | ".sid" files are used to persist and publish SIDs assigned to the | |||
| different YANG items of a specific YANG module. | different YANG items in a specific YANG module. | |||
| It has the following structure: | The following tree diagram [BCP215] provides an overview of the data | |||
| model: | ||||
| module: ietf-sid-file | module: ietf-sid-file | |||
| structure sid-file: | structure sid-file: | |||
| +-- module-name yang:yang-identifier | +-- module-name yang:yang-identifier | |||
| +-- module-revision? revision-identifier | +-- module-revision? revision-identifier | |||
| +-- sid-file-version? sid-file-version-identifier | +-- sid-file-version? sid-file-version-identifier | |||
| +-- sid-file-status? enumeration | +-- sid-file-status? enumeration | |||
| +-- description? string | +-- description? string | |||
| +-- dependency-revision* [module-name] | +-- dependency-revision* [module-name] | |||
| | +-- module-name yang:yang-identifier | | +-- module-name yang:yang-identifier | |||
| | +-- module-revision revision-identifier | | +-- module-revision revision-identifier | |||
| +-- assignment-range* [entry-point] | +-- assignment-range* [entry-point] | |||
| | +-- entry-point sid | | +-- entry-point sid | |||
| | +-- size uint64 | | +-- size uint64 | |||
| +-- item* [namespace identifier] | +-- item* [namespace identifier] | |||
| +-- status? enumeration | +-- status? enumeration | |||
| +-- namespace enumeration | +-- namespace enumeration | |||
| +-- identifier union | +-- identifier union | |||
| +-- sid sid | +-- sid sid | |||
| Figure 1: YANG tree for ietf-sid-file | ||||
| The following YANG module defines the structure of this file, | Figure 1: YANG Tree for 'ietf-sid-file' | |||
| encoding is performed in JSON [RFC8259] using the rules defined in | ||||
| [RFC7951]. It references ietf-yang-types defined in [RFC6991] and | ||||
| ietf-yang-structure-ext defined in [RFC8791]. | ||||
| RFC Ed.: please update the date of the module and Copyright if needed | The following YANG module defines the structure of ".sid" files. | |||
| and remove this note. | Encoding is performed in JSON [STD90] using the rules defined in | |||
| [RFC7951]. This module imports 'ietf-yang-types' [RFC6991] and | ||||
| 'ietf-yang-structure-ext' [RFC8791]. It also references [STD68], | ||||
| [RFC7950], and [BCP216]. | ||||
| <CODE BEGINS> file "ietf-sid-file@2023-10-27.yang" | <CODE BEGINS> file "ietf-sid-file@2024-06-17.yang" | |||
| module ietf-sid-file { | module ietf-sid-file { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-sid-file"; | namespace "urn:ietf:params:xml:ns:yang:ietf-sid-file"; | |||
| prefix sid; | prefix sid; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference "RFC 6991: Common YANG Data Types."; | reference | |||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | } | |||
| import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
| prefix sx; | prefix sx; | |||
| reference "RFC 8791: YANG Data Structure Extensions."; | reference | |||
| "RFC 8791: YANG Data Structure Extensions"; | ||||
| } | } | |||
| organization | organization | |||
| "IETF Core Working Group"; | "IETF CORE Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/core/> | "WG Web: <https://datatracker.ietf.org/wg/core/> | |||
| WG List: <mailto:core@ietf.org> | WG List: <mailto:core@ietf.org> | |||
| Editor: Michel Veillette | Editor: Michel Veillette | |||
| <mailto:michel.veillette@trilliant.com> | <mailto:michel.veillette@trilliant.com> | |||
| Editor: Andy Bierman | Editor: Andy Bierman | |||
| <mailto:andy@yumaworks.com> | <mailto:andy@yumaworks.com> | |||
| Editor: Alexander Pelov | Editor: Alexander Pelov | |||
| <mailto:a@ackl.io> | <mailto:alexander.pelov@imt-atlantique.fr> | |||
| Editor: Ivaylo Petrov | Editor: Ivaylo Petrov | |||
| <mailto:ivaylopetrov@google.com>"; | <mailto:ivaylopetrov@google.com>"; | |||
| description | description | |||
| "Copyright (c) 2023 IETF Trust and the persons identified as | "This module defines the structure of the '.sid' files. | |||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject to | ||||
| the license terms contained in, the Revised BSD License set | ||||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX | Each '.sid' file contains the mapping between each | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | string identifier defined by a YANG module and a | |||
| for full legal notices. | corresponding numeric value called a YANG SID. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
| This module defines the structure of the .sid files. | Copyright (c) 2024 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | ||||
| Each .sid file contains the mapping between each | Redistribution and use in source and binary forms, with or | |||
| string identifier defined by a YANG module and a | without modification, is permitted pursuant to, and subject to | |||
| corresponding numeric value called YANG SID."; | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| revision 2023-10-27 { | This version of this YANG module is part of RFC 9595; see | |||
| the RFC itself for full legal notices."; | ||||
| revision 2024-06-17 { | ||||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "[RFC XXXX] YANG Schema Item iDentifier (YANG SID)"; | "RFC 9595: YANG Schema Item iDentifier (YANG SID)"; | |||
| } | } | |||
| typedef revision-identifier { | typedef revision-identifier { | |||
| type string { | type string { | |||
| pattern '[0-9]{4}-[0-9]{2}-[0-9]{2}'; | pattern '[0-9]{4}-[0-9]{2}-[0-9]{2}'; | |||
| } | } | |||
| description | description | |||
| "Represents a date in YYYY-MM-DD format."; | "Represents a date in YYYY-MM-DD format."; | |||
| } | } | |||
| typedef sid-file-version-identifier { | typedef sid-file-version-identifier { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Represents the version of a .sid file."; | "Represents the version of a '.sid' file."; | |||
| } | } | |||
| typedef sid { | typedef sid { | |||
| type uint64 { | type uint64 { | |||
| range "0..9223372036854775807"; | range "0..9223372036854775807"; | |||
| } | } | |||
| description | description | |||
| "YANG Schema Item iDentifier"; | "YANG Schema Item iDentifier."; | |||
| reference | reference | |||
| "[RFC XXXX] YANG Schema Item iDentifier (YANG SID)"; | "RFC 9595: YANG Schema Item iDentifier (YANG SID)"; | |||
| } | } | |||
| typedef schema-node-path { | typedef schema-node-path { | |||
| type string { | type string { | |||
| pattern | pattern | |||
| '/[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*' + | '/[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*' + | |||
| '(/[a-zA-Z_][a-zA-Z0-9\-_.]*(:[a-zA-Z_][a-zA-Z0-9\-_.]*)?)*'; | '(/[a-zA-Z_][a-zA-Z0-9\-_.]*(:[a-zA-Z_][a-zA-Z0-9\-_.]*)?)*'; | |||
| } | } | |||
| description | description | |||
| "A schema-node path is an absolute YANG schema node identifier | "A schema-node path is an absolute YANG schema-node | |||
| as defined by the YANG ABNF rule absolute-schema-nodeid, | identifier as defined by the YANG ABNF rule | |||
| except that module names are used instead of prefixes. | 'absolute-schema-nodeid', except that module names are used | |||
| instead of prefixes. | ||||
| This string additionally follows the following rules: | This string additionally follows the following rules: | |||
| o The leftmost (top-level) data node name is always in the | - The leftmost (top-level) data node name is always in the | |||
| namespace-qualified form. | namespace-qualified form. | |||
| o Any subsequent schema node name is in the | - Any subsequent schema-node name is in the | |||
| namespace-qualified form if the node is defined in a module | namespace-qualified form if the node is defined in a | |||
| other than its parent node, and the simple form is used | module other than its parent node. Otherwise, the | |||
| otherwise. No predicates are allowed."; | simple form is used. No predicates are allowed."; | |||
| reference | reference | |||
| "RFC 7950, The YANG 1.1 Data Modeling Language; | "RFC 5234 (STD 68): Augmented BNF for Syntax Specifications: | |||
| Section 6.5: Schema Node Identifier;"; | ABNF | |||
| RFC 7950: The YANG 1.1 Data Modeling Language, | ||||
| Section 6.5: Schema Node Identifier"; | ||||
| } | } | |||
| sx:structure sid-file { | sx:structure sid-file { | |||
| uses sid-file-contents; | uses sid-file-contents; | |||
| } | } | |||
| grouping sid-file { | grouping sid-file { | |||
| description "A grouping that contains a YANG container | description | |||
| representing the file structure of a .sid files."; | "A grouping that contains a YANG container | |||
| representing the file structure of a '.sid' file."; | ||||
| container sid-file { | container sid-file { | |||
| description | description | |||
| "A wrapper container that together with the sx:structure | "A wrapper container that together with the 'sx:structure' | |||
| extension marks the YANG data structures inside as not being | extension marks the YANG data structures inside as not | |||
| intended to be implemented as part of a configuration | being intended to be implemented as part of a | |||
| datastore or as an operational state within the server."; | configuration datastore or as an operational state within | |||
| the server."; | ||||
| uses sid-file-contents; | uses sid-file-contents; | |||
| } | } | |||
| } | } | |||
| grouping sid-file-contents { | grouping sid-file-contents { | |||
| description | description | |||
| "A grouping that defines the contents of a container that | "A grouping that defines the contents of a container that | |||
| represents the file structure of a .sid files."; | represents the file structure of a '.sid' file."; | |||
| leaf module-name { | leaf module-name { | |||
| type yang:yang-identifier; | type yang:yang-identifier; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Name of the YANG module associated with this .sid file."; | "Name of the YANG module associated with this | |||
| '.sid' file."; | ||||
| } | } | |||
| leaf module-revision { | leaf module-revision { | |||
| type revision-identifier; | type revision-identifier; | |||
| description | description | |||
| "Revision of the YANG module associated with this .sid | "Revision of the YANG module associated with this '.sid' | |||
| file. | file. | |||
| This leaf is not present if no revision statement is | This leaf is not present if no revision statement is | |||
| defined in the YANG module."; | defined in the YANG module."; | |||
| } | } | |||
| leaf sid-file-version { | leaf sid-file-version { | |||
| type sid-file-version-identifier; | type sid-file-version-identifier; | |||
| default 0; | default 0; | |||
| description | description | |||
| "Optional leaf that specifies the version number of the | "Optional leaf that specifies the version number of the | |||
| .sid file. .sid files and the version sequence are | '.sid' file. '.sid' files and the version sequence are | |||
| specific to a given YANG module revision. This number | specific to a given YANG module revision. This number | |||
| starts at zero when there is a new YANG module revision and | starts at zero when there is a new YANG module revision | |||
| increases monotonically. This number can distinguish | and increases monotonically. This number can distinguish | |||
| updates to the .sid file which are the result of new | updates to the '.sid' file - for instance, as the result | |||
| processing, or the result of reported errata."; | of new processing or reported errata."; | |||
| } | } | |||
| leaf sid-file-status { | leaf sid-file-status { | |||
| type enumeration { | type enumeration { | |||
| enum unpublished { | enum unpublished { | |||
| description | description | |||
| "This .sid file is unpublished [RFC8407], also called | "This '.sid' file is unpublished (BCP 216) and is | |||
| a work-in-progress or workfile. | also called a work-in-progress or workfile. | |||
| This may be when it accompanies an unpublished YANG | This may be when it accompanies an unpublished YANG | |||
| module, or when only the .sid file itself is | module or when only the '.sid' file itself is | |||
| unpublished. | unpublished. | |||
| The 'item' list MAY contain entries with a status | The 'item' list MAY contain entries with a status | |||
| value of 'unstable'."; | value of 'unstable'."; | |||
| } | reference | |||
| enum published { | "RFC 8407 (BCP 216): Guidelines for Authors and | |||
| description | Reviewers of Documents Containing | |||
| "This .sid file is published, for a published YANG | YANG Data Models"; | |||
| module. The 'item' list MUST NOT contain entries with | } | |||
| a status value of 'unstable'."; | enum published { | |||
| } | description | |||
| "This '.sid' file is published. This status | ||||
| applies to '.sid' files for published YANG modules. | ||||
| The 'item' list MUST NOT contain entries with a | ||||
| status value of 'unstable'."; | ||||
| } | ||||
| } | } | |||
| default published; | default "published"; | |||
| description | description | |||
| "Optional leaf that specifies the status of the | "Optional leaf that specifies the status of the | |||
| .sid file."; | '.sid' file."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Free-form meta information about the generated file. It | "Free-form meta-information about the generated file. It | |||
| might include .sid file generation tool and time among | might include a '.sid' file generation tool and time, | |||
| other things."; | among other things."; | |||
| } | } | |||
| list dependency-revision { | list dependency-revision { | |||
| key "module-name"; | key "module-name"; | |||
| description | description | |||
| "Information about the revision used during the .sid file | "Information about the revision used during the | |||
| generation of each YANG module that the module in | '.sid' file generation of each dependency, i.e., each | |||
| 'module-name' imported."; | YANG module that the YANG module associated with this | |||
| '.sid' file imported."; | ||||
| leaf module-name { | leaf module-name { | |||
| type yang:yang-identifier; | type yang:yang-identifier; | |||
| description | description | |||
| "Name of the YANG module, dependency of 'module-name', | "YANG module name of this dependency."; | |||
| for which revision information is provided."; | ||||
| } | } | |||
| leaf module-revision { | leaf module-revision { | |||
| type revision-identifier; | type revision-identifier; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Revision of the YANG module, dependency of | "Revision of the YANG module of this dependency."; | |||
| 'module-name', for which revision information is | ||||
| provided."; | ||||
| } | } | |||
| } | } | |||
| list assignment-range { | list assignment-range { | |||
| key "entry-point"; | key "entry-point"; | |||
| description | description | |||
| "YANG SID range(s) allocated to the YANG module identified | "YANG-SID Range(s) allocated to the YANG module | |||
| by 'module-name' and 'module-revision'. | identified by 'module-name' and 'module-revision'. | |||
| - The YANG SID range first available value is entry-point | - The first available value in the YANG-SID Range is | |||
| and the last available value in the range is | 'entry-point', and the last available value in the | |||
| (entry-point + size - 1). | range is ('entry-point' + size - 1). | |||
| - The YANG SID ranges specified by all assignment-ranges | - The YANG-SID Ranges specified by all | |||
| MUST NOT overlap."; | 'assignment-range' entries MUST NOT overlap."; | |||
| leaf entry-point { | leaf entry-point { | |||
| type sid; | type sid; | |||
| description | description | |||
| "Lowest YANG SID available for assignment."; | "Lowest YANG SID available for assignment."; | |||
| } | } | |||
| leaf size { | leaf size { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| skipping to change at page 18, line 25 ¶ | skipping to change at line 807 ¶ | |||
| "Number of YANG SIDs available for assignment."; | "Number of YANG SIDs available for assignment."; | |||
| } | } | |||
| } | } | |||
| list item { | list item { | |||
| key "namespace identifier"; | key "namespace identifier"; | |||
| unique "sid"; | unique "sid"; | |||
| description | description | |||
| "Each entry within this list defines the mapping between | "Each entry within this list defines the mapping between | |||
| a YANG item string identifier and a YANG SID. This list | a YANG item string identifier and a YANG SID. This list | |||
| MUST include a mapping entry for each YANG item defined by | MUST include a mapping entry for each YANG item defined | |||
| the YANG module identified by 'module-name' and | by the YANG module identified by 'module-name' and | |||
| 'module-revision'."; | 'module-revision'."; | |||
| leaf status { | leaf status { | |||
| type enumeration { | type enumeration { | |||
| enum stable { | enum stable { | |||
| value 0; | value 0; | |||
| description "This SID allocation has been published as | description | |||
| the stable allocation for the given | "This SID allocation has been published as the | |||
| namespace and identifier."; | stable allocation for the given namespace and | |||
| identifier."; | ||||
| } | } | |||
| enum unstable { | enum unstable { | |||
| value 1; | value 1; | |||
| description "This SID allocation has been done during a | description | |||
| development process; it is not yet stable."; | "This SID allocation has been done during a | |||
| development process; it is not yet stable."; | ||||
| } | } | |||
| enum obsolete { | enum obsolete { | |||
| value 2; | value 2; | |||
| description "This SID allocation is no longer in use. | description | |||
| It is recorded to avoid reallocation of | "This SID allocation is no longer in use. It is | |||
| its SID value."; | recorded to avoid reallocation of its SID value."; | |||
| } | } | |||
| } | } | |||
| default stable; | default "stable"; | |||
| description | description | |||
| "The status field contains information about the stability | "The status field contains information about the | |||
| of the allocation. For each specific SID value, over time | stability of the allocation. For each specific SID | |||
| it can only transition from unstable to stable, | value, over time it can only transition from | |||
| and possibly from stable to obsolete."; | 'unstable' to 'stable', and possibly from 'stable' to | |||
| 'obsolete'."; | ||||
| } | } | |||
| leaf namespace { | leaf namespace { | |||
| type enumeration { | type enumeration { | |||
| enum module { | enum module { | |||
| value 0; | value 0; | |||
| description | description | |||
| "All module and submodule names share the same | "All module and submodule names share the same | |||
| global module identifier namespace."; | global module identifier namespace."; | |||
| } | } | |||
| enum identity { | enum identity { | |||
| value 1; | value 1; | |||
| description | description | |||
| "All identity names defined in a module and its | "All identity names defined in a module and its | |||
| submodules share the same identity identifier | submodules share the same identity identifier | |||
| namespace."; | namespace."; | |||
| } | } | |||
| enum feature { | enum feature { | |||
| value 2; | value 2; | |||
| description | description | |||
| "All feature names defined in a module and its | "All feature names defined in a module and its | |||
| submodules share the same feature identifier | submodules share the same feature identifier | |||
| namespace."; | namespace."; | |||
| } | } | |||
| enum data { | enum data { | |||
| value 3; | value 3; | |||
| description | description | |||
| "The namespace for all data nodes, as defined in | "The namespace for all data nodes, as defined in | |||
| YANG."; | YANG."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Namespace of the YANG item for this mapping entry."; | "Namespace of the YANG item for this mapping entry."; | |||
| } | } | |||
| leaf identifier { | leaf identifier { | |||
| type union { | type union { | |||
| type yang:yang-identifier; | type yang:yang-identifier; | |||
| type schema-node-path; | type schema-node-path; | |||
| } | } | |||
| description | description | |||
| "String identifier of the YANG item for this mapping | "String identifier of the YANG item for this mapping | |||
| entry. | entry. | |||
| If the corresponding 'namespace' field is 'module', | If the corresponding 'namespace' field is 'module', | |||
| 'feature', or 'identity', then this field MUST | 'feature', or 'identity', then this field MUST | |||
| contain a valid YANG identifier string. | contain a valid YANG identifier string. | |||
| If the corresponding 'namespace' field is 'data', | If the corresponding 'namespace' field is 'data', | |||
| then this field MUST contain a valid schema-node | then this field MUST contain a valid schema-node | |||
| path."; | path."; | |||
| } | } | |||
| leaf sid { | leaf sid { | |||
| type sid; | type sid; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "YANG SID assigned to the YANG item for this mapping | "YANG SID assigned to the YANG item for this mapping | |||
| entry."; | entry."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| Figure 2: YANG module ietf-sid-file | Figure 2: YANG Module 'ietf-sid-file' | |||
| 5. Security Considerations | 5. Security Considerations | |||
| This document defines a new type of identifier used to encode data | This document defines a new type of identifier used to encode data | |||
| that are modeled in YANG [RFC7950]. This new identifier maps | that are modeled in YANG [RFC7950]. This new identifier maps | |||
| semantic concepts to integers, and if the source of this mapping is | semantic concepts to integers, and if the source of this mapping is | |||
| not trusted, then new security risks might occur if an attacker can | not trusted, then new security risks might occur if an attacker can | |||
| control the mapping. | control the mapping. | |||
| At the time of writing, it is expected that the SID files will be | At the time of writing, it is expected that the ".sid" files will be | |||
| processed by a software developer, within a software development | processed by a software developer, within a software development | |||
| environment. Developers are advised to only import SID files from | environment. Developers are advised to only import ".sid" files from | |||
| authoritative sources. IANA is the authoritative source for IETF | authoritative sources. IANA is the authoritative source for IETF- | |||
| managed YANG modules. | managed YANG modules. | |||
| Conceptually, SID files could be processed by less-constrained target | Conceptually, ".sid" files could be processed by less-constrained | |||
| systems such as network management systems. Such systems need to | target systems such as network management systems. Such systems need | |||
| take extra care to make sure that they are only processing SID files | to take extra care to make sure that they are only processing ".sid" | |||
| from authoritative sources, as authoritative as the YANG modules that | files from authoritative sources that are as authoritative as the | |||
| they are using. | YANG modules that they are using. | |||
| SID files are identified with and can employ _dereferenceable | ".sid" files are identified with and can employ _dereferenceable | |||
| identifiers_, i.e., identifiers that could lead implementations in | identifiers_, i.e., identifiers that could lead implementations in | |||
| certain situations to automatically perform a remote access the | certain situations to automatically perform remote access, the target | |||
| target of which is indicated at least partially by those identifiers. | of which is indicated at least partially by those identifiers. This | |||
| This can give an attacker information from and/or control over such | can give an attacker information from and/or control over such | |||
| accesses, which can have security and privacy implications. Please | accesses, which can have security and privacy implications. Please | |||
| also see Sections 5 and 6 of [I-D.bormann-t2trg-deref-id] for further | also see Sections 6 and 7 of [DEREF-ID] for further considerations | |||
| considerations that may be applicable. | that may be applicable. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| 6.1. YANG Namespace Registration | 6.1. YANG Namespace Registration | |||
| This document registers the following XML namespace URN in the "IETF | This document registers the following XML namespace URN in the "IETF | |||
| XML Registry", following the format defined in [RFC3688]: | XML Registry", following the format defined in [BCP81]: | |||
| URI: please assign urn:ietf:params:xml:ns:yang:ietf-sid-file | ||||
| Registrant Contact: The IESG. | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| Reference: RFC XXXX | ||||
| // RFC Ed.: please replace XXXX with RFC number and remove this note | URI: urn:ietf:params:xml:ns:yang:ietf-sid-file | |||
| Registrant Contact: The IESG. | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| Reference: RFC 9595 | ||||
| 6.2. Register ".sid" File Format Module | 6.2. ".sid" File Format Module Registration | |||
| This document registers one YANG module in the "YANG Module Names" | This document registers one YANG module in the "YANG Module Names" | |||
| registry [RFC6020]: | registry [RFC6020]: | |||
| * name: ietf-sid-file | Name: ietf-sid-file | |||
| Namespace: urn:ietf:params:xml:ns:yang:ietf-sid-file | ||||
| * namespace: urn:ietf:params:xml:ns:yang:ietf-sid-file | Prefix: sid | |||
| Reference: RFC 9595 | ||||
| * prefix: sid | ||||
| * reference: RFC XXXX | ||||
| // RFC Ed.: please replace XXXX with RFC number and remove this note | ||||
| 6.3. Create new IANA Registry: "YANG SID Mega-Range" registry | 6.3. New IANA Registry: YANG-SID Mega-Ranges | |||
| The name of this registry is "YANG SID Mega-Range". This registry is | The name of this registry is "YANG-SID Mega-Ranges". This registry | |||
| used to record the delegation of the management of a block of SIDs to | is used to record the delegation of the management of a block of SIDs | |||
| third parties (such as SDOs or registrars). | to a third party (such as Standards Development Organizations (SDOs) | |||
| or registrars). | ||||
| 6.3.1. Structure | 6.3.1. Structure | |||
| Each entry in this registry must include: | Each entry in this registry must include: | |||
| * The entry point (first SID) of the registered SID block. | * The entry point (first SID) of the registered SID block. | |||
| * The size of the registered SID block. The size SHOULD be one | * The size of the registered SID block. The size SHOULD be one | |||
| million (1 000 000) SIDs, it MAY exceptionally be a multiple of | million (1,000,000) SIDs, but in exceptional cases, it MAY be a | |||
| 1 000 000. | multiple of 1,000,000. | |||
| * The policy of SID range allocations: Public, Private or Both. | * The policy of SID range allocations: Public, Private, or both. | |||
| * The contact information of the requesting organization including: | * The contact information of the requesting organization, including | |||
| the following: | ||||
| - Organization name | - Organization name. | |||
| - URL | - URL. | |||
| 6.3.2. Allocation policy | 6.3.2. Allocation Policy | |||
| The IANA policy for future additions to this registry is "Expert | The IANA policy for future additions to this registry is "Expert | |||
| Review" [RFC8126]. | Review" (Section 4.5 of RFC 8126 [BCP26]). | |||
| An organization requesting to manage a YANG SID Range (and thus have | An organization requesting to manage a YANG-SID Range (and thus have | |||
| an entry in the YANG SID Mega-Range Registry), must ensure the | an entry in the "YANG-SID Mega-Ranges" registry) must ensure the | |||
| following capacities: | following capacities: | |||
| * The capacity to manage and operate a YANG SID Range Registry. A | * The capacity to manage and operate a registry of YANG-SID Ranges. | |||
| YANG SID Range Registry MUST provide the following information for | A registry of YANG-SID Ranges MUST provide the following | |||
| all YANG SID Ranges allocated by the Registry: | information for all YANG-SID Ranges allocated by the registry: | |||
| - Entry Point of allocated YANG SID Range | - The entry point of the allocated YANG-SID Range. | |||
| - Size of allocated YANG SID Range | - The size of the allocated YANG-SID Range. | |||
| - Type: Public or Private | - Type: Public or Private. | |||
| o Public Ranges MUST include at least a reference to the YANG | o Public ranges MUST include at least a reference to the YANG | |||
| module and ".sid" files for that YANG SID Range (e.g., | module and ".sid" files for that YANG-SID Range (e.g., see | |||
| compare Section 6.4.3 for the IETF YANG SID registry). | Section 6.4.3 as an example for how this is handled for the | |||
| "IETF YANG-SID Ranges" registry). | ||||
| o Private Ranges MUST be marked as "Private" | o Private ranges MUST be marked as "Private". | |||
| * A Policy of allocation, which clearly identifies if the YANG SID | * A policy of allocation, which clearly identifies whether the YANG- | |||
| Range allocations would be Private, Public or Both. | SID Range allocations would be Private, Public, or both. | |||
| * Technical capacity to provide or refer to ".sid" files in a way | * Technical capacity to provide or refer to ".sid" files in a way | |||
| that meets the security objective of data integrity for these | that meets the security objective of data integrity for these | |||
| files (see also Section 5). | files (see also Section 5). | |||
| * Technical capacity to ensure the sustained operation of the | * Technical capacity to ensure the sustained operation of the | |||
| registry for a period of at least 5 years. If Private | registry for a period of at least 5 years. If registrations in | |||
| Registrations are allowed, the period must be of at least 10 | the Private category are allowed, the period must be at least 10 | |||
| years. | years. | |||
| If a size of the allocation beyond 1 000 000 is desired, the | If a size of the allocation beyond 1,000,000 is desired, the | |||
| organization must demonstrate the sustainability of the technical | organization must demonstrate the sustainability of the technical | |||
| approach for utilizing this size of allocation and how it does not | approach for utilizing this size of allocation and how it does not | |||
| negatively impact the overall usability of the SID allocation | negatively impact the overall usability of the SID allocation | |||
| mechanisms; such allocations are preferably placed in the space above | mechanisms; such allocations are preferably placed in the space above | |||
| 4 295 000 000 (64-bit space). | 4,295,000,000 (64-bit space). | |||
| 6.3.2.1. First allocation | 6.3.2.1. First Allocation | |||
| For a first allocation to be provided, the requesting organization | For a first allocation to be provided, the requesting organization | |||
| must demonstrate a functional registry infrastructure. | must demonstrate a functional registry infrastructure. | |||
| 6.3.2.2. Consecutive allocations | 6.3.2.2. Consecutive Allocations | |||
| On subsequent allocation request(s), the organization must | On one or more subsequent allocation requests, the organization must | |||
| demonstrate the exhaustion of the prior range. These conditions need | demonstrate the exhaustion of the prior range. These conditions need | |||
| to be asserted by the assigned expert(s). | to be asserted by the assigned expert(s). | |||
| If that extra-allocation is done within 3 years from the last | If such a request for an additional allocation is made within 3 years | |||
| allocation, the experts need to discuss this request on the CORE | of the last allocation, the experts need to discuss this request on | |||
| working group mailing list and consensus needs to be obtained before | the CORE Working Group mailing list and consensus needs to be | |||
| allocating a new Mega-Range. | obtained before allocating a new Mega-Range. | |||
| 6.3.3. Initial contents of the Registry | 6.3.3. Initial Contents of the Registry | |||
| The initial entry in this registry is allocated to IANA: | This registry contains the following initial entry: | |||
| +=======+=========+============+==============+==================+ | +=====+=========+==========+============+=========================+ | |||
| | Entry | Size | Allocation | Organization | URL | | |Entry|Size |Allocation|Organization| URL | | |||
| | Point | | | name | | | |Point| | |Name | | | |||
| +=======+=========+============+==============+==================+ | +=====+=========+==========+============+=========================+ | |||
| | 0 | 1000000 | Public | IANA | https://iana.org | | |0 |1,000,000|Public |IANA | <https://www.iana.org/> | | |||
| +-------+---------+------------+--------------+------------------+ | +-----+---------+----------+------------+-------------------------+ | |||
| Table 2 | Table 2: YANG-SID Mega-Ranges Registry: Initial Assignment | |||
| 6.4. Create a new IANA Registry: IETF YANG SID Range Registry (managed | 6.4. New IANA Registry: IETF YANG-SID Ranges | |||
| by IANA) | ||||
| The name of this registry is "IETF YANG-SID Ranges". This registry | ||||
| is used to record information related to the assignment of SID Ranges | ||||
| (e.g., entry point and size) to YANG modules identified by module | ||||
| name. | ||||
| 6.4.1. Structure | 6.4.1. Structure | |||
| Each entry in this registry must include: | Each entry in this registry must include: | |||
| * The SID range entry point. | * The SID range entry point. | |||
| * The SID range size. | * The SID range size. | |||
| * The YANG module name. | * The YANG module name. | |||
| * Document reference. | * A document reference (the document making the registration). | |||
| 6.4.2. Allocation policy | 6.4.2. Allocation Policy | |||
| The first million SIDs assigned to IANA is subdivided as follows: | The first million SIDs assigned to IANA are subdivided as follows: | |||
| * The range of 0 to 999 (size 1000) is subject to "IESG Approval" as | 1. The range of 0 to 999 (size 1,000) is subject to "IESG Approval" | |||
| defined in [RFC8126]; of these, SID value 0 has been reserved for | as defined in Section 4.10 of RFC 8126 [BCP26]; of these, SID | |||
| implementations to internally signify the absence of a SID number | value 0 has been reserved for implementations to internally | |||
| and does not occur in interchange. | signify the absence of a SID number and does not occur in | |||
| interchange. | ||||
| * The ranges of 1000 to 59,999 (size 59,000) and 100,000 to 299,999 | 2. The ranges of 1,000 to 59,999 (size 59,000) and 100,000 to | |||
| (size 200,000) are designated for YANG modules defined in RFCs. | 299,999 (size 200,000) are designated for YANG modules defined in | |||
| RFCs. | ||||
| - The IANA policy for additions to this registry is either: | a. The IANA policy for additions to this registry is: | |||
| o "Expert Review" [RFC8126] in case the ".sid" file comes from | i. "Expert Review" (Section 4.5 of RFC 8126 [BCP26]) if the | |||
| a YANG module from an existing RFC, or | ".sid" file comes from a YANG module from an existing | |||
| RFC. | ||||
| o "RFC Required" [RFC8126] otherwise. | ii. "RFC Required" (Section 4.7 of RFC 8126 [BCP26]) | |||
| otherwise. | ||||
| - The Expert MUST verify that the YANG module for which this | b. The expert MUST verify that the YANG module for which this | |||
| allocation is made has an RFC (existing RFC) OR is on track to | allocation is made has an RFC (existing RFC) OR is on track | |||
| become RFC (early allocation with a request from the WG chairs | to become an RFC (Early Allocation with a request from the | |||
| as defined by [BCP100]). | working group chairs as defined by [BCP100]). | |||
| * The range of 60,000 to 99,999 (size 40,000) is reserved for | 3. The range of 60,000 to 99,999 (size 40,000) is reserved for | |||
| experimental YANG modules. This range MUST NOT be used in | experimental YANG modules. This range MUST NOT be used in | |||
| operational deployments since these SIDs are not globally unique | operational deployments, since these SIDs are not globally unique | |||
| which limit their interoperability. The IANA policy for this | and their interoperability is therefore limited. The IANA policy | |||
| range is "Experimental use" [RFC8126]. | for this range is "Experimental Use" (Section 4.2 of RFC 8126 | |||
| [BCP26]). | ||||
| * The range of 300,000 to 999,999 (size 900,000) is "Reserved" as | 4. The range of 300,000 to 999,999 (size 700,000) is "Reserved" as | |||
| defined in [RFC8126]. | defined in Section 6 of RFC 8126 [BCP26]. | |||
| +=============+=========+==========================+ | +=============+=========+=============================+ | |||
| | Entry Point | Size | IANA policy | | | Entry Point | Size | IANA Policy | | |||
| +=============+=========+==========================+ | +=============+=========+=============================+ | |||
| | 0 | 1,000 | IESG Approval | | | 0 | 1,000 | IESG Approval | | |||
| +-------------+---------+--------------------------+ | +-------------+---------+-----------------------------+ | |||
| | 1,000 | 59,000 | RFC Required | | | 1,000 | 59,000 | RFC and Expert Review | | |||
| +-------------+---------+--------------------------+ | | | | Required (see item 2 above) | | |||
| | 60,000 | 40,000 | Experimental/Private use | | +-------------+---------+-----------------------------+ | |||
| +-------------+---------+--------------------------+ | | 60,000 | 40,000 | Reserved for Experimental | | |||
| | 100,000 | 200,000 | RFC Required | | | | | Use | | |||
| +-------------+---------+--------------------------+ | +-------------+---------+-----------------------------+ | |||
| | 300,000 | 700,000 | Reserved | | | 100,000 | 200,000 | RFC and Expert Review | | |||
| +-------------+---------+--------------------------+ | | | | Required (see item 2 above) | | |||
| +-------------+---------+-----------------------------+ | ||||
| | 300,000 | 700,000 | Reserved | | ||||
| +-------------+---------+-----------------------------+ | ||||
| Table 3 | Table 3: IETF YANG-SID Ranges Registry: Policies | |||
| for IETF Ranges | ||||
| The size of the SID range allocated for a YANG module is recommended | The size of the SID range allocated for a YANG module is recommended | |||
| to be a multiple of 50 and to be at least 33% above the current | to be a multiple of 50 and to be at least 33% above the current | |||
| number of YANG items. This headroom allows assignment within the | number of YANG items. This headroom allows assignments within the | |||
| same range of new YANG items introduced by subsequent revisions. The | same range of new YANG items introduced by subsequent revisions. The | |||
| SID range size SHOULD NOT exceed 1000; a larger size may be requested | SID range size SHOULD NOT exceed 1,000; a larger size may be | |||
| by the authors if this recommendation is considered insufficient. It | requested by the authors if this recommendation is considered | |||
| is important to note that an additional SID range can be allocated to | insufficient. It is important to note that an additional SID range | |||
| an existing YANG module if the initial range is exhausted; this then | can be allocated to an existing YANG module if the initial range is | |||
| just leads to slightly less efficient representation. | exhausted; this then just leads to a slightly less efficient | |||
| representation. | ||||
| In case a SID range is allocated for an existing RFC through the | If a SID range is allocated for an existing RFC through the "Expert | |||
| "Expert Review" policy, the Document reference field for the given | Review" policy (Section 4.5 of RFC 8126 [BCP26]), the Reference field | |||
| allocation should point to the RFC that the YANG module is defined | for the given allocation should point to the RFC that the YANG module | |||
| in. | is defined in. | |||
| In case a SID range is required before publishing the RFC due to | If a SID range is required before publishing the RFC due to | |||
| implementations needing stable SID values, early allocation as | implementations needing stable SID values, Early Allocation as | |||
| defined in [BCP100] can be employed for the "RFC Required" range | defined in [BCP100] can be employed for the "RFC Required" range | |||
| (Section 2 of [BCP100]). | (Section 2 of RFC 7120 [BCP100]). | |||
| 6.4.3. Publication of the ".sid" file | 6.4.3. Publication of the ".sid" File | |||
| During publication of an RFC, IANA contacts the designated expert | During an RFC's publication process, IANA contacts the designated | |||
| team ("the team"), who are responsible for delivering a final SID | expert team ("the team"), who are responsible for delivering a final | |||
| file for each module defined by the RFC. For a type-3 developer | ".sid" file for each module defined by the RFC. For a type-3 | |||
| (SID-oblivious, see Section 2.4), the team creates a new SID file | developer (SID-oblivious; see Section 2.4), the team creates a new | |||
| from each YANG module, see below. For a type-2 (SID-aware) | ".sid" file from each YANG module; see below. For a type-2 (SID- | |||
| developer, the team first obtains the existing draft SID file from a | aware) developer, the team first obtains the existing draft ".sid" | |||
| stable reference in the approved draft; for a type-1 (SID-guiding) | file from a stable reference in the approved draft; for a type-1 | |||
| developer, the team extracts the SID file from the approved draft. | (SID-guiding) developer, the team extracts the ".sid" file from the | |||
| approved draft. | ||||
| The team uses a tool to generate a final SID file from each YANG | The team uses a tool to generate a final ".sid" file from each YANG | |||
| module; the final SID file has all SID assignments set to "stable" | module; the final ".sid" file has all SID assignments set to "stable" | |||
| and the SID file status set to "published". A published ".sid" file | and the ".sid" file status set to "published". A published ".sid" | |||
| MUST NOT contain SID assignments with an unstable status. | file MUST NOT contain SID assignments with a status of "unstable". | |||
| For the cases other than type-3 (SID-oblivious), the team feeds the | For the cases other than type-3 (SID-oblivious), the team feeds the | |||
| existing draft SID file as an input ("reference SID file") to the | existing draft ".sid" file as an input ("reference ".sid" file") to | |||
| tool so that the changes resulting from re-generation are minimal. | the tool so that the changes resulting from regeneration are minimal. | |||
| For YANG modules that are revisions of previously published modules, | For YANG modules that are revisions of previously published modules, | |||
| any existing published SID file needs to serve as reference SID file | any existing published ".sid" file needs to serve as a reference | |||
| for the tool, either during generation of the revised draft (type-1, | ".sid" file for the tool, during generation of either the revised | |||
| type-2) or during generation of the final SID file (type-3). | draft ".sid" file (type-1, type-2) or the final ".sid" file (type-3). | |||
| In any case, the team checks the generated file, including for | In any case, the team checks the generated file, including checking | |||
| validity as a SID file, for consistency with the SID range | for validity as a ".sid" file, for consistency with the SID range | |||
| allocations, for full coverage of the YANG items in YANG module, and | allocations, for full coverage of the YANG items in the YANG module, | |||
| for the best achievable consistency with the existing draft SID file. | and for the best achievable consistency with the existing draft | |||
| ".sid" file. | ||||
| The designated experts then give the SID file to IANA to publish into | The designated experts then give the ".sid" file to IANA to publish | |||
| the YANG SID Registry (Section 6.5) along with the YANG module. | in the "IETF YANG-SID Modules" registry (Section 6.5) along with the | |||
| YANG module. | ||||
| The ".sid" file MUST NOT be published as part of the RFC: the IANA | The ".sid" file MUST NOT be published as part of the RFC: the IANA | |||
| Registry is authoritative and a link to it is to be inserted in the | registry is authoritative, and a link to it is to be inserted in the | |||
| RFC. (Note that the present RFC is an exception to this rule as the | RFC. (Note that the present RFC is an exception to this rule, as the | |||
| SID file also serves as an example for exposition.) RFCs that need | ".sid" file also serves as an example for exposition.) Internet- | |||
| SIDs assigned to their new modules for use in the text of the | Drafts that need SIDs assigned to their new modules for use in the | |||
| document, e.g., for examples, need to alert the RFC editor in the | text of the document, e.g., for examples, need to alert the RFC | |||
| draft text that this is the case. Such RFCs cannot be produced by | Editor in the draft text that this is the case. Such RFCs cannot be | |||
| type-3 (SID-oblivious) developers: the SIDs used in the text need to | produced by type-3 (SID-oblivious) developers: the SIDs used in the | |||
| be assigned in the existing draft SID file, and the designated expert | text need to be assigned in the existing draft ".sid" file, and the | |||
| team needs to check that the assignments in the final SID file are | designated expert team needs to check that the assignments in the | |||
| consistent with the usage in the RFC text or that the approved draft | final ".sid" file are consistent with the usage in the RFC text or | |||
| test is changed appropriately. | that the approved draft text is changed appropriately. | |||
| 6.4.4. Initial contents of the registry | 6.4.4. Initial Contents of the Registry | |||
| Initial entries in this registry are as follows: | Initial entries in this registry are as follows: | |||
| +=======+====+==============+======================================+ | +=============+======+=============================+=============+ | |||
| | Entry |Size| Module name | Document reference | | | Entry Point | Size | Module Name | Reference | | |||
| | Point | | | | | +=============+======+=============================+=============+ | |||
| +=======+====+==============+======================================+ | | 0 | 1 | (Reserved: not a valid SID) | RFC 9595 | | |||
| | 0 | 1| (Reserved: | RFCXXXX | | +-------------+------+-----------------------------+-------------+ | |||
| | | | not a valid | | | | 1,000 | 100 | ietf-coreconf | RFC 9595, | | |||
| | | | SID) | | | | | | | [CORE-COMI] | | |||
| +-------+----+--------------+--------------------------------------+ | +-------------+------+-----------------------------+-------------+ | |||
| | 1000 | 100| ietf- | [I-D.ietf-core-comi] | | | 1,100 | 50 | ietf-yang-types | [RFC6991] | | |||
| | | | coreconf | | | +-------------+------+-----------------------------+-------------+ | |||
| +-------+----+--------------+--------------------------------------+ | | 1,150 | 50 | ietf-inet-types | [RFC6991] | | |||
| | 1100 | 50| ietf-yang- | [RFC6991] | | +-------------+------+-----------------------------+-------------+ | |||
| | | | types | | | | 1,200 | 50 | iana-crypt-hash | [RFC7317] | | |||
| +-------+----+--------------+--------------------------------------+ | +-------------+------+-----------------------------+-------------+ | |||
| | 1150 | 50| ietf-inet- | [RFC6991] | | | 1,250 | 50 | ietf-netconf-acm | [STD91] | | |||
| | | | types | | | +-------------+------+-----------------------------+-------------+ | |||
| +-------+----+--------------+--------------------------------------+ | | 1,300 | 50 | ietf-sid-file | RFC 9595 | | |||
| | 1200 | 50| iana-crypt- | [RFC7317] | | +-------------+------+-----------------------------+-------------+ | |||
| | | | hash | | | | 1,500 | 100 | ietf-interfaces | [RFC8343] | | |||
| +-------+----+--------------+--------------------------------------+ | +-------------+------+-----------------------------+-------------+ | |||
| | 1250 | 50| ietf- | [RFC8341] | | | 1,600 | 100 | ietf-ip | [RFC8344] | | |||
| | | | netconf-acm | | | +-------------+------+-----------------------------+-------------+ | |||
| +-------+----+--------------+--------------------------------------+ | | 1,700 | 100 | ietf-system | [RFC7317] | | |||
| | 1300 | 50| ietf-sid- | RFCXXXX | | +-------------+------+-----------------------------+-------------+ | |||
| | | | file | | | | 1,800 | 400 | iana-if-type | [RFC7224] | | |||
| +-------+----+--------------+--------------------------------------+ | +-------------+------+-----------------------------+-------------+ | |||
| | 1500 | 100| ietf- | [RFC8343] | | ||||
| | | | interfaces | | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 1600 | 100| ietf-ip | [RFC8344] | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 1700 | 100| ietf-system | [RFC7317] | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 1800 | 400| iana-if-type | [RFC7224] | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 2400 | 50| ietf-voucher | [RFC8366] | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 2450 | 50| ietf- | [I-D.ietf-anima-constrained-voucher] | | ||||
| | | | constrained- | | | ||||
| | | | voucher | | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| | 2500 | 50| ietf- | [I-D.ietf-anima-constrained-voucher] | | ||||
| | | | constrained- | | | ||||
| | | | voucher- | | | ||||
| | | | request | | | ||||
| +-------+----+--------------+--------------------------------------+ | ||||
| Table 4 | ||||
| // RFC Ed.: replace XXXX with RFC number assigned to this draft. | Table 4: IETF YANG-SID Ranges Registry: Initial Range Assignments | |||
| For allocation, RFC publication of the YANG module is required as per | For allocation, RFC publication of the YANG module is required as per | |||
| [RFC8126]. The YANG module must be registered in the "YANG module | the "RFC Required" policy defined in Section 4.7 of RFC 8126 [BCP26]. | |||
| Name" registry according to the rules specified in Section 14 of | The YANG module must be registered in the "YANG Module Names" | |||
| [RFC6020]. | registry according to the rules specified in Section 14 of [RFC6020]. | |||
| 6.5. Create new IANA Registry: "IETF YANG SID Registry" | 6.5. New IANA Registry: IETF YANG-SID Modules | |||
| The name of this registry is "IETF YANG SID Registry". This registry | The name of this registry is "IETF YANG-SID Modules". This registry | |||
| is used to record the allocation of SIDs for individual YANG module | is used to record the allocation of SIDs for individual YANG module | |||
| items. | items. | |||
| 6.5.1. Structure | 6.5.1. Structure | |||
| Each entry in this registry must include: | Each entry in this registry must include: | |||
| * The YANG module name. This module name must be present in the | * The YANG module name. This module name must be present in the | |||
| "Name" column of the "YANG Module Names" registry. | "Name" column of the "YANG Module Names" registry. | |||
| * A URI for the associated ".yang" file. This file link must be | * A URI for the associated ".yang" file. This file link must be | |||
| present in the "File" column of the "YANG Module Names" registry. | present in the "File" column of the "YANG Module Names" registry. | |||
| * The URI for the ".sid" file which defines the allocation. The | * The URI for the ".sid" file that defines the allocation. The | |||
| ".sid" file is stored by IANA. | ".sid" file is stored by IANA. | |||
| * The number of actually allocated SIDs in the ".sid" file. | * The number of actually allocated SIDs in the ".sid" file. | |||
| 6.5.2. Allocation policy | 6.5.2. Allocation Policy | |||
| The allocation policy is Expert review. The Expert MUST ensure that | The allocation policy is "Expert Review" (Section 4.5 of RFC 8126 | |||
| the following conditions are met: | [BCP26]). The expert MUST ensure that the following conditions are | |||
| met: | ||||
| * The ".sid" file has a valid structure: | * The ".sid" file has a valid structure: | |||
| - The ".sid" file MUST be a valid JSON file following the | - The ".sid" file MUST be a valid JSON file following the | |||
| structure of the module defined in RFCXXXX (RFC Ed: replace XXX | structure of the module defined in this document. | |||
| with RFC number assigned to this draft). | ||||
| * The ".sid" file allocates individual SIDs ONLY in the YANG SID | * The ".sid" file allocates individual SIDs ONLY in the YANG-SID | |||
| Ranges for this YANG module (as allocated in the IETF YANG SID | Ranges for this YANG module (as allocated in the "IETF YANG-SID | |||
| Range Registry): | Ranges" registry): | |||
| - All SIDs in this ".sid" file MUST be within the ranges | - All SIDs in this ".sid" file MUST be within the ranges | |||
| allocated to this YANG module in the "IETF YANG SID Range | allocated to this YANG module in the "IETF YANG-SID Ranges" | |||
| Registry". | registry. | |||
| * If another ".sid" file has already allocated SIDs for this YANG | * If another ".sid" file has already allocated SIDs for this YANG | |||
| module (e.g. for older or newer versions of the YANG module), the | module (e.g., for older or newer versions of the YANG module), the | |||
| YANG items are assigned the same SIDs as in the other ".sid" file. | YANG items are assigned the same SIDs as those in the other ".sid" | |||
| file. | ||||
| * If there is an older version of the ".sid" file, all allocated | * If there is an older version of the ".sid" file, all allocated | |||
| SIDs from that version are still present in the current version of | SIDs from that version are still present in the current version of | |||
| the ".sid" file. | the ".sid" file. | |||
| 6.5.3. Recursive Allocation of YANG SID Range at Document Adoption | 6.5.3. Recursive Allocation of YANG SIDs at Document Adoption | |||
| Due to the difficulty in changing SID values during IETF document | Due to the difficulty in changing SID values during IETF document | |||
| processing, it is expected that most documents will ask for SID range | processing, it is expected that most documents will ask for SID range | |||
| allocations using Early Allocations [BCP100]. The details of the | allocations using Early Allocations [BCP100]. The details of the | |||
| Early Allocation to be requested, including the timeline envisioned, | Early Allocation to be requested, including the timeline envisioned, | |||
| should be included in any Working Group Adoption call. Prior to | should be included in any working group adoption call. Prior to | |||
| Working Group Adoption, an internet draft author can use the | working group adoption, an Internet-Draft author can use the | |||
| experimental SID range (as per Section 6.4.2) for their SIDs | experimental SID range (as per Section 6.4.2) for their SID | |||
| allocations or other values that do not create ambiguity with other | allocations or other values that do not create ambiguity with other | |||
| SID uses (for example they can use a range that comes from a non-IANA | SID uses (for example, they can use ranges and SIDs registered in a | |||
| managed "YANG SID Mega-Range" registry). | non-IANA-managed registry that is based on a YANG-SID Mega-Range | |||
| assignment). | ||||
| After Working Group Adoption, any modification of a ".sid" file is | After working group adoption, any modification of a ".sid" file is | |||
| expected to be discussed on the mailing list of the appropriate | expected to be discussed on the mailing lists of the appropriate | |||
| Working Groups. Specific attention should be paid to implementers' | working groups. Specific attention should be paid to implementers' | |||
| opinion after Working Group Last Call if a SID value is to change its | opinions after Working Group Last Call if a SID value is to change | |||
| meaning. In all cases, a ".sid" file and the SIDs associated with it | its meaning. In all cases, a ".sid" file and the SIDs associated | |||
| are subject to change before the publication of an internet draft as | with it are subject to change before the publication of an Internet- | |||
| an RFC. | Draft as an RFC. | |||
| During the early use of SIDs, many existing, previously published | As the concept of SIDs is first used, many existing, previously | |||
| YANG modules will not have SID allocations. For an allocation to be | published YANG modules will not have SID allocations. For an | |||
| useful the included YANG modules may also need to have SID | allocation to be useful, the included YANG modules may also need to | |||
| allocations made, in a process that will generally analogous to that | have SID allocations made, in a process that will generally be | |||
| in Section 6.4.3 for the type-3 (SID-oblivious) case. | analogous to that in Section 6.4.3 for the type-3 (SID-oblivious) | |||
| case. | ||||
| The Expert Reviewer who performs the (Early) Allocation analysis will | The expert reviewer who performs the (Early) Allocation analysis will | |||
| need to go through the list of included YANG modules and perform SID | need to go through the list of included YANG modules and perform SID | |||
| allocations for those modules as well. | allocations for those modules as well. | |||
| * If the document is a published RFC, then the allocation of SIDs | * If the document is a published RFC, then the allocation of SIDs | |||
| for its referenced YANG modules is permanent. The Expert Reviewer | for its referenced YANG modules is permanent. The expert reviewer | |||
| provides the generated ".sid" file to IANA for registration. | provides the generated ".sid" file to IANA for registration. | |||
| * If the document is an unprocessed Internet-Draft adopted in a WG, | * If the document is an unprocessed Internet-Draft adopted in a | |||
| then an Early Allocation is performed for this document as well. | working group, then an Early Allocation is performed for this | |||
| Early Allocations require approval by an IESG Area Director. An | document as well. Early Allocations require approval by an IESG | |||
| early allocation which requires additional allocations will list | area director. An Early Allocation that requires additional | |||
| the other allocations in its description, and will be cross-posted | allocations will list the other allocations in its description and | |||
| to the mailing lists of any other working groups concerned. | will be cross-posted to the mailing lists of any other working | |||
| groups concerned. | ||||
| * A YANG module which references a module in a document which has | * A YANG module that references a module in a document that has not | |||
| not yet been adopted by any working group will be unable to | yet been adopted by any working group will be unable to perform an | |||
| perform an Early Allocation for that other document until it is | Early Allocation for that other document until it is adopted by a | |||
| adopted by a working group. As described in [BCP100], an AD | working group. As described in Section 3 of RFC 7120 [BCP100], a | |||
| Sponsored document acts as if it had a working group. The | shepherding AD will stand in for the working group chairs if the | |||
| approving AD may also exempt a document from this policy by | document is not the product of an IETF working group, effectively | |||
| agreeing to AD Sponsor the document. | allowing the AD to exempt a document from this policy. | |||
| At the end of the IETF process all the dependencies of a given module | At the end of the IETF process, all the dependencies of a given | |||
| for which SIDs are assigned, should also have SIDs assigned. Those | module for which SIDs are assigned should also have SIDs assigned. | |||
| dependencies' assignments should be permanent (not Early Allocation). | Those dependencies' assignments should be permanent (not Early | |||
| Allocation). | ||||
| A previously SID-allocated YANG module which changes its references | A previously SID-allocated YANG module that changes its references to | |||
| to include a YANG module for which there is no SID allocation needs | include a YANG module for which there is no SID allocation needs to | |||
| to repeat the Early Allocation process. | repeat the Early Allocation process. | |||
| [BCP100] defines a time limit for the validity of Early Allocations, | [BCP100] defines a time limit for the validity of Early Allocations, | |||
| after which they expire unless they are renewed. [BCP100] also says: | after which they expire unless they are renewed. Section 3.3 of RFC | |||
| 7120 [BCP100] also says: | ||||
| | Note that if a document is submitted for review to the IESG and at | | Note that if a document is submitted for review to the IESG, and | |||
| | the time of submission some early allocations are valid (not | | at the time of submission some Early Allocations are valid (not | |||
| | expired), these allocations should not be expired while the | | expired), these allocations must not be considered to have expired | |||
| | document is under IESG consideration or waiting in the RFC | | while the document is under IESG consideration or is awaiting | |||
| | Editor's queue after approval by the IESG. | | publication in the RFC Editor's queue after approval by the IESG. | |||
| | | ||||
| | -- RFC7120 (BCP100), Section 3.3 | ||||
| | https://www.rfc-editor.org/rfc/rfc7120.html#section-3.3 | ||||
| 6.5.4. Initial contents of the registry | 6.5.4. Initial Contents of the Registry | |||
| None. | At the time of writing, this registry does not contain any entries. | |||
| 6.6. Register Media Type and Content-Format | 6.6. Media Type and Content-Format Registration | |||
| 6.6.1. Media Type application/yang-sid+json | 6.6.1. Media Type application/yang-sid+json | |||
| 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 | | |||
| +===============+===========================+===========+ | +===============+===========================+===========+ | |||
| | yang-sid+json | application/yang-sid+json | RFC XXXX | | | yang-sid+json | application/yang-sid+json | RFC 9595 | | |||
| +---------------+---------------------------+-----------+ | +---------------+---------------------------+-----------+ | |||
| Table 5: SID File Media-Type Registration | Table 5: ".sid" File Media Type Registration | |||
| // RFC Ed.: please replace RFC XXXX with this RFC number and remove | ||||
| this note. | ||||
| Type name: application | Type name: application | |||
| Subtype name: yang-sid+json | Subtype name: yang-sid+json | |||
| Required parameters: N/A | Required parameters: N/A | |||
| Optional parameters: N/A | Optional parameters: N/A | |||
| Encoding considerations: binary (UTF-8) | Encoding considerations: binary (UTF-8) | |||
| Security considerations: see Section 5 of RFC XXXX | ||||
| Published specification: RFC XXXX | Security considerations: See Section 5 of RFC 9595. | |||
| Applications that use this media type: applications that need to | ||||
| Published specification: RFC 9595 | ||||
| Applications that use this media type: Applications that need to | ||||
| obtain YANG SIDs to interchange YANG-modeled data in a concise and | obtain YANG SIDs to interchange YANG-modeled data in a concise and | |||
| efficient representation | efficient representation. | |||
| Fragment identifier considerations: The syntax and semantics of | Fragment identifier considerations: The syntax and semantics of | |||
| fragment identifiers specified for "application/yang-sid+json" is | fragment identifiers specified for "application/yang-sid+json" is | |||
| as specified for "application/json". (At publication of this | as specified for "application/json". (At publication of this | |||
| document, there is no fragment identification syntax defined for | document, there is no fragment identification syntax defined for | |||
| "application/json".) | "application/json".) | |||
| Additional information: | ||||
| Magic number(s): N/A | Additional information: | |||
| File extension(s): .sid | Magic number(s): N/A | |||
| File extension(s): .sid | ||||
| Macintosh file type code(s): N/A | ||||
| Macintosh file type code(s): N/A | ||||
| Person & email address to contact for further information: CORE WG | Person & email address to contact for further information: CORE WG | |||
| mailing list (core@ietf.org), or IETF Applications and Real-Time | mailing list (core@ietf.org) or IETF Applications and Real-Time | |||
| Area (art@ietf.org) | Area (art@ietf.org) | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: none | Restrictions on usage: none | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| 6.6.2. CoAP Content-Format | 6.6.2. CoAP Content-Format | |||
| This document adds the following Content-Format to the "CoAP Content- | This document adds the following Content-Format to the "CoAP Content- | |||
| Formats", within the "Constrained RESTful Environments (CoRE) | Formats" registry within the "Constrained RESTful Environments (CoRE) | |||
| Parameters" registry, where TBD1 comes from the "IETF Review" 256-999 | Parameters" group of registries, where 260 has been assigned from the | |||
| range. | "IETF Review" (256-9,999) range (see Section 4.8 of RFC 8126 | |||
| [BCP26]). | ||||
| +===========================+================+======+===========+ | ||||
| | Content Type | Content Coding | ID | Reference | | ||||
| +===========================+================+======+===========+ | ||||
| | application/yang-sid+json | - | TBD1 | RFC XXXX | | ||||
| +---------------------------+----------------+------+-----------+ | ||||
| Table 6: SID File Content-format Registration | +===========================+================+=====+===========+ | |||
| | Content Type | Content Coding | ID | Reference | | ||||
| +===========================+================+=====+===========+ | ||||
| | application/yang-sid+json | - | 260 | RFC 9595 | | ||||
| +---------------------------+----------------+-----+-----------+ | ||||
| // RFC Ed.: please replace TBD1 with the assigned ID, remove the | Table 6: ".sid" File Content-Format Registration | |||
| requested range, and remove this note. | ||||
| // RFC Ed.: please replace RFC XXXX with this RFC number and remove | ||||
| this note. | ||||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.1. Normative References | |||
| [BCP100] Cotton, M., "Early IANA Allocation of Standards Track Code | [BCP100] Best Current Practice 100, | |||
| <https://www.rfc-editor.org/info/bcp100>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Cotton, M., "Early IANA Allocation of Standards Track Code | ||||
| Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | |||
| 2014, <https://www.rfc-editor.org/rfc/rfc7120>. | 2014, <https://www.rfc-editor.org/info/rfc7120>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [BCP14] Best Current Practice 14, | |||
| <https://www.rfc-editor.org/info/bcp14>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| 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/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [BCP81] Best Current Practice 81, | ||||
| <https://www.rfc-editor.org/info/bcp81>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | ||||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/rfc/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [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/rfc/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [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/rfc/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [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, | |||
| <https://www.rfc-editor.org/rfc/rfc7951>. | <https://www.rfc-editor.org/info/rfc7951>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | June 2020, <https://www.rfc-editor.org/info/rfc8791>. | |||
| [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [STD68] Internet Standard 68, | |||
| <https://www.rfc-editor.org/info/std68>. | ||||
| At the time of writing, this STD comprises the following: | ||||
| Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
| Specifications: ABNF", STD 68, RFC 5234, | ||||
| DOI 10.17487/RFC5234, January 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5234>. | ||||
| [STD90] Internet Standard 90, | ||||
| <https://www.rfc-editor.org/info/std90>. | ||||
| At the time of writing, this STD comprises the following: | ||||
| Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | ||||
| Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
| DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
| [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/rfc/rfc8791>. | ||||
| 7.2. Informative References | 7.2. Informative References | |||
| [I-D.bormann-t2trg-deref-id] | [BCP215] Best Current Practice 215, | |||
| Bormann, C. and C. Amsüss, "The "dereferenceable | <https://www.rfc-editor.org/info/bcp215>. | |||
| identifier" pattern", Work in Progress, Internet-Draft, | At the time of writing, this BCP comprises the following: | |||
| draft-bormann-t2trg-deref-id-02, 19 December 2023, | ||||
| <https://datatracker.ietf.org/doc/html/draft-bormann- | ||||
| t2trg-deref-id-02>. | ||||
| [I-D.ietf-anima-constrained-voucher] | Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| Richardson, M., Van der Stok, P., Kampanakis, P., and E. | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| Dijk, "Constrained Bootstrapping Remote Secure Key | <https://www.rfc-editor.org/info/rfc8340>. | |||
| Infrastructure (BRSKI)", Work in Progress, Internet-Draft, | ||||
| draft-ietf-anima-constrained-voucher-22, 21 November 2023, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-anima- | ||||
| constrained-voucher-22>. | ||||
| [I-D.ietf-core-comi] | [BCP216] Best Current Practice 216, | |||
| Veillette, M., Van der Stok, P., Pelov, A., Bierman, A., | <https://www.rfc-editor.org/info/bcp216>. | |||
| and C. Bormann, "CoAP Management Interface (CORECONF)", | At the time of writing, this BCP comprises the following: | |||
| Work in Progress, Internet-Draft, draft-ietf-core-comi-16, | ||||
| 4 September 2023, <https://datatracker.ietf.org/doc/html/ | ||||
| draft-ietf-core-comi-16>. | ||||
| [I-D.ietf-core-yang-library] | Bierman, A., "Guidelines for Authors and Reviewers of | |||
| Veillette, M. and I. Petrov, "Constrained YANG Module | Documents Containing YANG Data Models", BCP 216, RFC 8407, | |||
| Library", Work in Progress, Internet-Draft, draft-ietf- | DOI 10.17487/RFC8407, October 2018, | |||
| core-yang-library-03, 11 January 2021, | <https://www.rfc-editor.org/info/rfc8407>. | |||
| [BCP26] Best Current Practice 26, | ||||
| <https://www.rfc-editor.org/info/bcp26>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8126>. | ||||
| [CORE-COMI] | ||||
| Veillette, M., Ed., van der Stok, P., Ed., Pelov, A., Ed., | ||||
| Bierman, A., and C. Bormann, Ed., "CoAP Management | ||||
| Interface (CORECONF)", Work in Progress, Internet-Draft, | ||||
| draft-ietf-core-comi-18, 23 July 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-core- | <https://datatracker.ietf.org/doc/html/draft-ietf-core- | |||
| yang-library-03>. | comi-18>. | |||
| [PYANG] Bjorklund, M., "An extensible YANG validator and converter | [DEREF-ID] Bormann, C. and C. Amsüss, "The 'dereferenceable | |||
| in python", <https://github.com/mbj4668/pyang>. | identifier' pattern", Work in Progress, Internet-Draft, | |||
| draft-bormann-t2trg-deref-id-03, 2 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-bormann- | ||||
| t2trg-deref-id-03>. | ||||
| [PYANG] Björklund, M., "An extensible YANG validator and converter | ||||
| in python", commit 25f69e8, March 2024, | ||||
| <https://github.com/mbj4668/pyang>. | ||||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <https://www.rfc-editor.org/rfc/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [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/rfc/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", | [RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", | |||
| RFC 7224, DOI 10.17487/RFC7224, May 2014, | RFC 7224, DOI 10.17487/RFC7224, May 2014, | |||
| <https://www.rfc-editor.org/rfc/rfc7224>. | <https://www.rfc-editor.org/info/rfc7224>. | |||
| [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/rfc/rfc7228>. | <https://www.rfc-editor.org/info/rfc7228>. | |||
| [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/rfc/rfc7317>. | 2014, <https://www.rfc-editor.org/info/rfc7317>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <https://www.rfc-editor.org/rfc/rfc8126>. | ||||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | ||||
| Access Control Model", STD 91, RFC 8341, | ||||
| DOI 10.17487/RFC8341, March 2018, | ||||
| <https://www.rfc-editor.org/rfc/rfc8341>. | ||||
| [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/rfc/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/rfc/rfc8344>. | <https://www.rfc-editor.org/info/rfc8344>. | |||
| [RFC8366] Watsen, K., Richardson, M., Pritikin, M., and T. Eckert, | ||||
| "A Voucher Artifact for Bootstrapping Protocols", | ||||
| RFC 8366, DOI 10.17487/RFC8366, May 2018, | ||||
| <https://www.rfc-editor.org/rfc/rfc8366>. | ||||
| [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | ||||
| Documents Containing YANG Data Models", BCP 216, RFC 8407, | ||||
| DOI 10.17487/RFC8407, October 2018, | ||||
| <https://www.rfc-editor.org/rfc/rfc8407>. | ||||
| [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
| "Handling Long Lines in Content of Internet-Drafts and | "Handling Long Lines in Content of Internet-Drafts and | |||
| RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8792>. | <https://www.rfc-editor.org/info/rfc8792>. | |||
| [RFC9195] Lengyel, B. and B. Claise, "A File Format for YANG | [RFC9195] Lengyel, B. and B. Claise, "A File Format for YANG | |||
| Instance Data", RFC 9195, DOI 10.17487/RFC9195, February | Instance Data", RFC 9195, DOI 10.17487/RFC9195, February | |||
| 2022, <https://www.rfc-editor.org/rfc/rfc9195>. | 2022, <https://www.rfc-editor.org/info/rfc9195>. | |||
| [RFC9254] Veillette, M., Ed., Petrov, I., Ed., Pelov, A., Bormann, | [RFC9254] Veillette, M., Ed., Petrov, I., Ed., Pelov, A., Bormann, | |||
| C., and M. Richardson, "Encoding of Data Modeled with YANG | C., and M. Richardson, "Encoding of Data Modeled with YANG | |||
| in the Concise Binary Object Representation (CBOR)", | in the Concise Binary Object Representation (CBOR)", | |||
| RFC 9254, DOI 10.17487/RFC9254, July 2022, | RFC 9254, DOI 10.17487/RFC9254, July 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9254>. | <https://www.rfc-editor.org/info/rfc9254>. | |||
| [STD91] Internet Standard 91, | ||||
| <https://www.rfc-editor.org/info/std91>. | ||||
| At the time of writing, this STD comprises the following: | ||||
| Bierman, A. and M. Bjorklund, "Network Configuration | ||||
| Access Control Model", STD 91, RFC 8341, | ||||
| DOI 10.17487/RFC8341, March 2018, | ||||
| <https://www.rfc-editor.org/info/rfc8341>. | ||||
| [YANG-LIBRARY] | ||||
| Veillette, M., Ed. and I. Petrov, Ed., "Constrained YANG | ||||
| Module Library", Work in Progress, Internet-Draft, draft- | ||||
| ietf-core-yang-library-03, 11 January 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-core- | ||||
| yang-library-03>. | ||||
| [yangcatalog] | [yangcatalog] | |||
| "YANG Catalog", <https://yangcatalog.org>. | "YANG Catalog", <https://yangcatalog.org>. | |||
| Appendix A. ".sid" file example | Appendix A. ".sid" File Example | |||
| The following ".sid" file (ietf-system@2014-08-06.sid) has been | The following ".sid" file ('ietf-system@2014-08-06.sid') has been | |||
| generated using the following yang modules: | generated using the following YANG modules: | |||
| * ietf-system@2014-08-06.yang (defined in [RFC7317]) | * 'ietf-system@2014-08-06.yang' (defined in [RFC7317]) | |||
| * ietf-yang-types@2013-07-15.yang (defined in [RFC6991]) | * 'ietf-yang-types@2013-07-15.yang' (defined in [RFC6991]) | |||
| * ietf-inet-types@2013-07-15.yang (defined in [RFC6991]) | * 'ietf-inet-types@2013-07-15.yang' (defined in [RFC6991]) | |||
| * ietf-netconf-acm@2018-02-14.yang (defined in [RFC8341]) | * 'ietf-netconf-acm@2018-02-14.yang' (defined in [STD91]) | |||
| * iana-crypt-hash@2014-08-06.yang (defined in [RFC7317]) | * 'iana-crypt-hash@2014-08-06.yang' (defined in [RFC7317]) | |||
| For purposes of exposition, line breaks have been introduced below in | For purposes of exposition, per [RFC8792], line breaks have been | |||
| some JSON strings that represent overly long identifiers. | introduced below in some JSON strings that represent overly long | |||
| identifiers. | ||||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| { | { | |||
| "ietf-sid-file:sid-file": { | "ietf-sid-file:sid-file": { | |||
| "module-name": "ietf-system", | "module-name": "ietf-system", | |||
| "module-revision": "2014-08-06", | "module-revision": "2014-08-06", | |||
| "description": "Example sid file", | "description": "Example '.sid' file", | |||
| "dependency-revision": [ | "dependency-revision": [ | |||
| { | { | |||
| "module-name": "ietf-yang-types", | "module-name": "ietf-yang-types", | |||
| "module-revision": "2013-07-15" | "module-revision": "2013-07-15" | |||
| }, | }, | |||
| { | { | |||
| "module-name": "ietf-inet-types", | "module-name": "ietf-inet-types", | |||
| "module-revision": "2013-07-15" | "module-revision": "2013-07-15" | |||
| }, | }, | |||
| { | { | |||
| skipping to change at page 44, line 41 ¶ | skipping to change at line 2078 ¶ | |||
| { | { | |||
| "namespace": "data", | "namespace": "data", | |||
| "identifier": "/ietf-system:system/radius/server/udp/shared-\ | "identifier": "/ietf-system:system/radius/server/udp/shared-\ | |||
| secret", | secret", | |||
| "sid": "1774" | "sid": "1774" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 3: Example .sid file (ietf-system, with extra line-breaks) | Figure 3: Example ".sid" File ('ietf-system', with Extra Line Breaks) | |||
| Appendix B. SID auto generation | Appendix B. SID Autogeneration | |||
| Assignment of SIDs to YANG items SHOULD be automated. The | The assignment of SIDs to YANG items SHOULD be automated. The | |||
| recommended process to assign SIDs is as follows: | recommended process to assign SIDs is as follows: | |||
| 1. A tool extracts the different items defined for a specific YANG | 1. A tool extracts the different items defined for a specific YANG | |||
| module. | module. | |||
| 2. The list of items is sorted in alphabetical order, 'namespace' in | 2. The list of items is sorted in alphabetical order. 'namespace' | |||
| descending order, 'identifier' in ascending order. The | entries are sorted in descending order, and 'identifier' entries | |||
| 'namespace' and 'identifier' formats are described in the YANG | are sorted in ascending order. The 'namespace' and 'identifier' | |||
| module 'ietf-sid-file' defined in Section 4. | formats are described in the YANG module 'ietf-sid-file' defined | |||
| in Section 4. | ||||
| 3. SIDs are assigned sequentially from the entry point up to the | 3. SIDs are assigned sequentially from the entry point up to the | |||
| size of the registered SID range. This approach is recommended | size of the registered SID range. This approach is recommended | |||
| to minimize the serialization overhead, especially when delta | to minimize the serialization overhead, especially when the delta | |||
| between a reference SID and the current SID is used by protocols | between a reference SID and the current SID is used by protocols | |||
| aiming to reduce message size. | aiming to reduce message size. | |||
| 4. If the number of items exceeds the SID range(s) allocated to a | 4. If the number of items exceeds the SID range(s) allocated to a | |||
| YANG module, an extra range is added for subsequent assignments. | YANG module, an extra range is added for subsequent assignments. | |||
| 5. The "dependency-revision" should reflect the revision numbers of | 5. The 'dependency-revision' list item should reflect the revision | |||
| each YANG module that the YANG module imports at the moment of | numbers of each YANG module that the YANG module imports at the | |||
| the generation. | moment of file generation. | |||
| When updating a YANG module that is in active use, the existing SID | When updating a YANG module that is in active use, the existing SID | |||
| assignments are maintained. (In contrast, when evolving an early | assignments are maintained. (In contrast, when evolving an early | |||
| draft that has not yet been adopted by a community of developers, SID | version of an Internet-Draft that has not yet been adopted by a | |||
| assignments are often better done from scratch after a revision.) If | community of developers, SID assignments are often better done from | |||
| the name of a schema node changes, but the data remain structurally | scratch after a revision.) If the name of a schema node changes but | |||
| and semantically similar to what was previously available under an | the data remain structurally and semantically similar to what was | |||
| old name, the SID that was used for the old name MAY continue to be | previously available under an old name, the SID that was used for the | |||
| used for the new name. If the meaning of an item changes, a new SID | old name MAY continue to be used for the new name. If the meaning of | |||
| MAY be assigned to it; this is particularly useful to allow the new | an item changes, a new SID MAY be assigned to it; this is | |||
| SID to identify the new structure or semantics of the item. If the | particularly useful for allowing the new SID to identify the new | |||
| YANG data type changes in a new revision of a published module, such | structure or semantics of the item. If the YANG data type changes in | |||
| that the resulting CBOR encoding is changed, then implementations | a new revision of a published module such that the resulting CBOR | |||
| will be aided significantly if a new SID is assigned. Note that | encoding is changed, then implementations will be aided significantly | |||
| these decisions are generally at the discretion of the YANG module | if a new SID is assigned. Note that these decisions are generally at | |||
| author, who should decide if the benefits of a manual intervention | the discretion of the YANG module author, who should decide if the | |||
| are worth the deviation from automatic assignment. | benefits of a manual intervention are worth the deviation from | |||
| automatic assignment. | ||||
| In case of an update to an existing ".sid" file, an additional step | In the case of an update to an existing ".sid" file, an additional | |||
| is needed that increments the ".sid" file version number. If there | step is needed that increments the ".sid" file version number. If | |||
| was no version number in the previous version of the ".sid" file, 0 | there was no version number in the previous version of the ".sid" | |||
| is assumed as the version number of the old version of the ".sid" | file, 0 is assumed to be the version number of the old version of the | |||
| file and the version number is 1 for the new ".sid" file. Apart from | ".sid" file and the version number is 1 for the new ".sid" file. | |||
| that, changes of ".sid" files can also be automated using the same | Apart from that, changes to ".sid" files can also be automated using | |||
| method described above, only unassigned YÀNG items are processed at | the same method as that described above, except that in step #3, | |||
| step #3. Already existing items in the ".sid" file should not be | previous SID assignments are kept, only previously unassigned YANG | |||
| given new SIDs. | items are processed, and these are assigned previously unassigned | |||
| SIDs. Already-existing items in the ".sid" file should not be given | ||||
| new SIDs. | ||||
| Note that ".sid" file versions are specific to a YANG module | Note that ".sid" file versions are specific to a YANG module | |||
| revision. For each new YANG module or each new revision of an | revision. For each new YANG module or each new revision of an | |||
| existing YANG module, the version number of the initial ".sid" file | existing YANG module, the version number of the initial ".sid" file | |||
| should either be 0 or should not be present. | either (1) should be 0 or (2) should not be present. | |||
| Note also that RPC or action "input" and "output" YANG items MUST | Note also that RPC or action "input" and "output" YANG items MUST | |||
| always be assigned SID even if they don't contain further YANG items. | always be assigned SIDs even if they don't contain further YANG | |||
| The reason for this requirement is that other modules can augment the | items. The reason for this requirement is that other modules can | |||
| given module and those SIDs might be necessary. | augment the given module and those SIDs might be necessary. | |||
| Appendix C. ".sid" file lifecycle | Appendix C. ".sid" File Lifecycle | |||
| Before assigning SIDs to their YANG modules, YANG module authors must | Before assigning SIDs to their YANG modules, YANG module authors must | |||
| acquire a SID range from a "YANG SID Range Registry". If the YANG | acquire a SID range from a registry of YANG-SID Ranges. If the YANG | |||
| module is part of an IETF draft or RFC, the SID range need to be | module is part of an IETF Internet-Draft or RFC, the SID range needs | |||
| acquired from the "IETF YANG SID Range Registry" as defined in | to be acquired from the "IETF YANG-SID Ranges" registry as defined in | |||
| Section 6.4. For the other YANG modules, the authors can acquire a | Section 6.4. For the other YANG modules, the authors can choose to | |||
| SID range from any "YANG SID Range Registry" of their choice. | acquire a SID range from any registry of YANG-SID Ranges. | |||
| Once the SID range is acquired, owners can use it to generate ".sid" | Once the SID range is acquired, owners can use it to generate one or | |||
| file/s for their YANG module/s. It is recommended to leave some | more ".sid" files for their YANG module or modules. It is | |||
| unallocated SIDs following the allocated range in each ".sid" file in | recommended to leave some unallocated SIDs following the allocated | |||
| order to allow better evolution of the YANG module in the future. | range in each ".sid" file in order to allow better evolution of the | |||
| Generation of ".sid" files should be performed using an automated | owners' YANG modules in the future. Generation of ".sid" files | |||
| tool. Note that ".sid" files can only be generated for YANG modules | should be performed using an automated tool. Note that ".sid" files | |||
| and not for submodules. | can only be generated for YANG modules and not for submodules. | |||
| C.1. ".sid" File Creation | C.1. ".sid" File Creation | |||
| The following activity diagram summarizes the creation of a YANG | The following activity diagram summarizes the creation of a YANG | |||
| module and its associated ".sid" file. | module and its associated ".sid" file. | |||
| +---------------+ | +---------------+ | |||
| o | Creation of a | | o | Creation of a | | |||
| -+- -->| YANG module | | -+- -->| YANG module | | |||
| / \ +------+--------+ | / \ +------+--------+ | |||
| | | | | |||
| v | v | |||
| .-------------. | .-------------. | |||
| / Standardized \ yes | / Standardized \ yes | |||
| \ YANG module ? /------------+ | \ YANG module? /------------+ | |||
| '-----+-------' | | '-----+-------' | | |||
| | no | | | no | | |||
| v v | v v | |||
| .-------------. +---------------+ | .-------------. +---------------+ | |||
| +--> / Constrained \ yes | SID range | | +--> / Constrained \ yes | SID range | | |||
| | \ application ? /---->| registration |<--------+ | | \ application? /---->| registration |<--------+ | |||
| | '-----+-------' +------+--------+ | | | '-----+-------' +------+--------+ | | |||
| | | no | | | | | no | | | |||
| | v v | | | v v | | |||
| | +---------------+ +---------------+ | | | +---------------+ +---------------+ | | |||
| +----+ YANG module | | SID sub-range | | | +----+ YANG module | | SID subrange | | | |||
| | update | | assignment |<---------+ | | update | | assignment |<---------+ | |||
| +---------------+ +-------+-------+ | | +---------------+ +-------+-------+ | | |||
| | | | | | | |||
| v | | v | | |||
| +---------------+ +------+------+ | +---------------+ +------+------+ | |||
| | ".sid" file | | Rework YANG | | | ".sid" file | | Rework YANG | | |||
| | generation | | module | | | generation | | module | | |||
| +-------+-------+ +-------------+ | +-------+-------+ +-------------+ | |||
| | ^ | | ^ | |||
| v | | v | | |||
| .----------. yes | | .----------. yes | | |||
| / Work in \ ------------+ | / Work-in- \ ------------+ | |||
| \ progress / | \ progress? / | |||
| '----+-----' | '----+-----' | |||
| | no | | no | |||
| v | v | |||
| .-------------. | .-------------. | |||
| / RFC \ no | / RFC \ no | |||
| \ publication? /--------------+ | \ publication? /--------------+ | |||
| '------+------' | | '------+------' | | |||
| yes | | | yes | | | |||
| v v | v v | |||
| +---------------+ +---------------+ | +---------------+ +---------------+ | |||
| | IANA | | Third party | | | IANA | | Third-party | | |||
| | registration | | registration | | | registration | | registration | | |||
| +-------+-------+ +-------+-------+ | +-------+-------+ +-------+-------+ | |||
| | | | | | | |||
| +------------------------+ | +------------------------+ | |||
| v | v | |||
| [DONE] | [DONE] | |||
| Figure 4: SID Lifecycle | Figure 4: SID Lifecycle | |||
| C.2. ".sid" File Update | C.2. ".sid" File Update | |||
| The following Activity diagram summarizes the update of a YANG module | The following activity diagram summarizes the update of a YANG module | |||
| and its associated ".sid" file. | and its associated ".sid" file. | |||
| +---------------+ | +--------------------+ | |||
| o | Update of the | | o | Update of the | | |||
| -+- -->| YANG module | | -+- -->| YANG module, its | | |||
| / \ | or include(s) | | / \ | include(s), or its | | |||
| | or import(s) | | | import(s) | | |||
| +------+--------+ | +------+-------------+ | |||
| | | | | |||
| v | v | |||
| .-------------. | .-------------. | |||
| / New items \ yes | / New items \ yes | |||
| \ created ? /------+ | \ created? /------+ | |||
| '------+------' | | '------+------' | | |||
| | no v | | no v | |||
| | .-------------. +----------------+ | | .-------------. +----------------+ | |||
| | / SID range \ yes | Extra sub-range| | | / SID range \ yes | Extra subrange | | |||
| | \ exhausted ? /---->| assignment | | | \ exhausted? /---->| assignment | | |||
| | '------+------' +-------+--------+ | | '------+------' +-------+--------+ | |||
| | | no | | | | no | | |||
| | +---------------------+ | | +---------------------+ | |||
| | | | | | | |||
| | v | | v | |||
| | +---------------+ | | +---------------+ | |||
| | | ".sid" file | | | | ".sid" file | | |||
| | | update based | | | | update based | | |||
| | | on previous | | | | on previous | | |||
| | | ".sid" file | | | | ".sid" file | | |||
| | +-------+-------+ | | +-------+-------+ | |||
| | | | | | | |||
| | v | | v | |||
| | .-------------. +---------------+ | | .-------------. +---------------+ | |||
| | / Publicly \ yes | YANG module | | | / Publicly \ yes | YANG module | | |||
| | \ available ? /---->| registration | | | \ available? /---->| registration | | |||
| | '------+------' +-------+-------+ | | '------+------' +-------+-------+ | |||
| | | no | | | | no | | |||
| +--------------+---------------------+ | +--------------+---------------------+ | |||
| | | | | |||
| v | v | |||
| [DONE] | [DONE] | |||
| Figure 5: YANG and ".sid" file update | Figure 5: YANG and ".sid" File Update | |||
| Appendix D. Keeping a SID File in a YANG Instance Data file | Appendix D. Keeping a ".sid" File in a YANG Instance Data File | |||
| [RFC9195] defines a format for "YANG Instance Data". This | [RFC9195] defines a format for "YANG instance data". This | |||
| essentially leads to an encapsulation of the instance data within | essentially leads to an encapsulation of the instance data within | |||
| some metadata envelope. | some metadata envelope. | |||
| If a SID file needs to be stored in a YANG Instance Data file, this | If a ".sid" file needs to be stored in a YANG instance data file, | |||
| can be achieved by embedding the value of the SID file as the value | this can be achieved by embedding the value of the ".sid" file as the | |||
| of the content-data member in the following template, and copying | value of the content-data member in the following template and | |||
| over the second-level members as indicated with the angle brackets: | copying over the second-level members as indicated with the angle | |||
| brackets: | ||||
| { | { | |||
| "ietf-yang-instance-data:instance-data-set": { | "ietf-yang-instance-data:instance-data-set": { | |||
| "name": "<module-name>@<module-revision>.sid", | "name": "<module-name>@<module-revision>.sid", | |||
| "description": ["<description>"], | "description": ["<description>"], | |||
| "content-schema": { | "content-schema": { | |||
| "module": "ietf-sid-file@2023-10-27" | "module": "ietf-sid-file@2024-06-17" | |||
| }, | }, | |||
| "content-data": { <replace this object> | "content-data": { <replace this object> | |||
| "ietf-sid-file:sid-file" : { | "ietf-sid-file:sid-file" : { | |||
| "module-name": ... | "module-name": ... | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| // RFC editor: Please replace the module date by the correct one for | ||||
| // the ietf-sid-file module. | ||||
| Acknowledgments | Acknowledgments | |||
| The authors would like to thank Andy Bierman, Abhinav Somaraju, Peter | The authors would like to thank Andy Bierman, Abhinav Somaraju, Peter | |||
| van der Stok, Laurent Toutain and Randy Turner for their help during | van der Stok, Laurent Toutain, and Randy Turner for their help during | |||
| the development of this document and their useful comments during the | the development of this document and their useful comments during the | |||
| review process. Special thanks go to the IESG members who supplied | review process. Special thanks go to the IESG members who supplied | |||
| very useful comments during the IESG processing phase, in particular | very useful comments during the IESG processing phase, in particular | |||
| to Benjamin Kaduk and Rob Wilton, and to Francesca Palombini as | to Benjamin Kaduk and Rob Wilton, and to Francesca Palombini as | |||
| responsible AD. | responsible AD. | |||
| Contributors | Contributors | |||
| Andy Bierman | Andy Bierman | |||
| YumaWorks | YumaWorks | |||
| skipping to change at page 50, line 4 ¶ | skipping to change at line 2316 ¶ | |||
| Andy Bierman | Andy Bierman | |||
| YumaWorks | YumaWorks | |||
| 685 Cochran St. | 685 Cochran St. | |||
| Suite #160 | Suite #160 | |||
| Simi Valley, CA 93065 | Simi Valley, CA 93065 | |||
| United States of America | United States of America | |||
| Email: andy@yumaworks.com | Email: andy@yumaworks.com | |||
| 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: +1-450-375-0556 | |||
| Email: michel.veillette@trilliant.com | Email: michel.veillette@trilliant.com | |||
| Alexander Pelov (editor) | Alexander Pelov (editor) | |||
| IMT Atlantique | IMT Atlantique | |||
| 2 rue de la Châtaigneraie | 2 rue de la Châtaigneraie | |||
| 35510 Cesson-Sevigne | 35510 Cesson-Sévigné Cedex | |||
| France | France | |||
| Email: alexander.pelov@imt-atlantique.fr | Email: alexander.pelov@imt-atlantique.fr | |||
| Ivaylo Petrov (editor) | Ivaylo Petrov (editor) | |||
| Google Switzerland GmbH | Google Switzerland GmbH | |||
| Brandschenkestrasse 110 | Brandschenkestrasse 110 | |||
| CH-8002 Zurich | CH-8002 Zurich | |||
| Switzerland | Switzerland | |||
| Email: ivaylopetrov@google.com | Email: ivaylopetrov@google.com | |||
| End of changes. 307 change blocks. | ||||
| 873 lines changed or deleted | 899 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||