| < draft-ietf-core-sid-09.txt | draft-ietf-core-sid-10.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force M. Veillette, Ed. | Internet Engineering Task Force M. Veillette, Ed. | |||
| Internet-Draft Trilliant Networks Inc. | Internet-Draft Trilliant Networks Inc. | |||
| Intended status: Standards Track A. Pelov, Ed. | Intended status: Standards Track A. Pelov, Ed. | |||
| Expires: July 26, 2020 I. Petrov, Ed. | Expires: August 15, 2020 I. Petrov, Ed. | |||
| Acklio | Acklio | |||
| January 23, 2020 | February 12, 2020 | |||
| YANG Schema Item iDentifier (SID) | YANG Schema Item iDentifier (SID) | |||
| draft-ietf-core-sid-09 | draft-ietf-core-sid-10 | |||
| Abstract | Abstract | |||
| YANG Schema Item iDentifiers (SID) are globally unique 63-bit | YANG Schema Item iDentifiers (SID) are globally unique 63-bit | |||
| unsigned integers used to identify YANG items. This document defines | unsigned integers used to identify YANG items. This document defines | |||
| the semantics, the registration, and assignment processes of SIDs. | the semantics, the registration, and assignment processes of SIDs. | |||
| To enable the implementation of these processes, this document also | To enable the implementation of these processes, this document also | |||
| defines a file format used to persist and publish assigned SIDs. | defines a file format used to persist and publish assigned SIDs. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 36 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on July 26, 2020. | This Internet-Draft will expire on August 15, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 13 ¶ | skipping to change at page 2, line 13 ¶ | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 3. ".sid" file lifecycle . . . . . . . . . . . . . . . . . . . . 4 | 3. ".sid" file lifecycle . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. ".sid" file format . . . . . . . . . . . . . . . . . . . . . 5 | 4. ".sid" file format . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.1. Register SID File Format Module . . . . . . . . . . . . . 9 | 6.1. Register SID File Format Module . . . . . . . . . . . . . 10 | |||
| 6.2. Create new IANA Registry: "SID Mega-Range" registry . . . 9 | 6.2. Create new IANA Registry: "SID Mega-Range" registry . . . 11 | |||
| 6.2.1. Structure . . . . . . . . . . . . . . . . . . . . . . 9 | 6.2.1. Structure . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.2.2. Allocation policy . . . . . . . . . . . . . . . . . . 10 | 6.2.2. Allocation policy . . . . . . . . . . . . . . . . . . 11 | |||
| 6.2.2.1. First allocation . . . . . . . . . . . . . . . . 11 | 6.2.2.1. First allocation . . . . . . . . . . . . . . . . 12 | |||
| 6.2.2.2. Consecutive allocations . . . . . . . . . . . . . 11 | 6.2.2.2. Consecutive allocations . . . . . . . . . . . . . 12 | |||
| 6.2.3. Initial contents of the Registry . . . . . . . . . . 11 | 6.2.3. Initial contents of the Registry . . . . . . . . . . 12 | |||
| 6.3. Create a new IANA Registry: IETF SID Range Registry | 6.3. Create a new IANA Registry: IETF SID Range Registry | |||
| (managed by IANA) . . . . . . . . . . . . . . . . . . . . 11 | (managed by IANA) . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.3.1. Structure . . . . . . . . . . . . . . . . . . . . . . 11 | 6.3.1. Structure . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.3.2. Allocation policy . . . . . . . . . . . . . . . . . . 11 | 6.3.2. Allocation policy . . . . . . . . . . . . . . . . . . 13 | |||
| 6.3.3. Initial contents of the registry . . . . . . . . . . 13 | 6.3.3. Initial contents of the registry . . . . . . . . . . 14 | |||
| 6.4. Create new IANA Registry: "IETF SID Registry" . . . . . . 14 | 6.4. Create new IANA Registry: "IETF SID Registry" . . . . . . 15 | |||
| 6.4.1. Structure . . . . . . . . . . . . . . . . . . . . . . 14 | 6.4.1. Structure . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 6.4.2. Allocation policy . . . . . . . . . . . . . . . . . . 14 | 6.4.2. Allocation policy . . . . . . . . . . . . . . . . . . 16 | |||
| 6.4.3. Recursive Allocation of SID Range at Document | 6.4.3. Recursive Allocation of SID Range at Document | |||
| Adoption . . . . . . . . . . . . . . . . . . . . . . 15 | Adoption . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 6.4.4. Initial contents of the registry . . . . . . . . . . 16 | 6.4.4. Initial contents of the registry . . . . . . . . . . 18 | |||
| 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 17 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 17 | 8.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
| Appendix A. ".sid" file example . . . . . . . . . . . . . . . . 18 | Appendix A. ".sid" file example . . . . . . . . . . . . . . . . 20 | |||
| Appendix B. SID auto generation . . . . . . . . . . . . . . . . 27 | Appendix B. SID auto generation . . . . . . . . . . . . . . . . 29 | |||
| Appendix C. ".sid" file lifecycle . . . . . . . . . . . . . . . 28 | Appendix C. ".sid" file lifecycle . . . . . . . . . . . . . . . 30 | |||
| C.1. SID File Creation . . . . . . . . . . . . . . . . . . . . 28 | C.1. SID File Creation . . . . . . . . . . . . . . . . . . . . 30 | |||
| C.2. SID File Update . . . . . . . . . . . . . . . . . . . . . 29 | C.2. SID File Update . . . . . . . . . . . . . . . . . . . . . 32 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 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 NETCONF [RFC6241] and RESTCONF [RFC8040], | unique identifier. In both NETCONF [RFC6241] and RESTCONF [RFC8040], | |||
| these identifiers are implemented using names. To allow the | these identifiers are implemented using names. To allow the | |||
| implementation of data models defined in YANG in constrained devices | implementation of data models defined in YANG in constrained devices | |||
| and constrained networks, a more compact method to identify YANG | and constrained networks, a more compact method to identify YANG | |||
| items is required. This compact identifier, called SID, is encoded | items is required. This compact identifier, called SID, is encoded | |||
| using a 63-bit unsigned integer. The limitation to 63-bit unsigned | using a 63-bit unsigned integer. The limitation to 63-bit unsigned | |||
| skipping to change at page 5, line 4 ¶ | skipping to change at page 5, line 4 ¶ | |||
| data, including configuration, state data, RPCs, actions and | data, including configuration, state data, RPCs, actions and | |||
| notifications. | 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. For example how this could be achieved, | items of their YANG module. The assignments can then be stored in a | |||
| please refer to Appendix C. | ".sid" file. For example how this could be achieved, please refer to | |||
| Appendix C. | ||||
| Registration of the .sid file associated to a YANG module is optional | Registration of the ".sid" file associated to a YANG module is | |||
| but recommended to promote interoperability between devices and to | optional but recommended to promote interoperability between devices | |||
| avoid duplicate allocation of SIDs to a single YANG module. | and to avoid duplicate allocation of SIDs to a single YANG module. | |||
| Different registries might have different requirements for the | Different registries might have different requirements for the | |||
| registration and publication of the ".sid" files. For diagram of one | registration and publication of the ".sid" files. For diagram of one | |||
| of the possibilities, please refer to the activity diagram on | of the possibilities, please refer to the activity diagram on | |||
| Figure 1 in Appendix C. | Figure 1 in Appendix C. | |||
| Each time a YANG module or one of its imported module(s) or included | Each time a YANG module or one of its imported module(s) or included | |||
| sub-module(s) is updated, the ".sid" file MAY need to be updated. | sub-module(s) is updated, a new ".sid" file MAY need to be created. | |||
| This update SHOULD be performed using an automated tool. | All the SIDs present in the previous version of the ".sid" file MUST | |||
| be present in the new version as well. The creation of this 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-ranges' as defined in | SID range MUST be added to the 'assignment-ranges' 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 2 | For an example of this update process, see activity diagram Figure 2 | |||
| in Appendix C. | 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. The following YANG | different YANG items of a specific YANG module. The following YANG | |||
| module defined the structure of this file, encoding is performed | module defined the structure of this file, encoding is performed | |||
| using the rules defined in [RFC7951]. | using the rules defined in [RFC7951]. | |||
| <CODE BEGINS> file "ietf-sid-file@2017-11-26.yang" | <CODE BEGINS> file "ietf-sid-file@2020-02-05.yang" | |||
| module ietf-sid-file { | module 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; | prefix sid; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| } | } | |||
| organization | organization | |||
| "IETF Core Working Group"; | "IETF Core Working Group"; | |||
| contact | contact | |||
| "Michel Veillette | "Michel Veillette | |||
| <mailto:michel.veillette@trilliant.com> | <mailto:michel.veillette@trilliant.com> | |||
| Andy Bierman | ||||
| <mailto:andy@yumaworks.com> | ||||
| Andy Bierman | Alexander Pelov | |||
| <mailto:andy@yumaworks.com> | <mailto:a@ackl.io>"; | |||
| Alexander Pelov | ||||
| <mailto:a@ackl.io>"; | ||||
| description | description | |||
| "This module defines the structure of the .sid files. | "Copyright (c) 2016 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | ||||
| Each .sid file contains the mapping between the different | Redistribution and use in source and binary forms, with or | |||
| string identifiers defined by a YANG module and a | without modification, is permitted pursuant to, and subject to | |||
| corresponding numeric value called SID."; | the license terms contained in, the Simplified 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 2017-11-26 { | This version of this YANG module is part of RFC XXXX | |||
| description | (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | |||
| "Initial revision."; | for full legal notices. | |||
| reference | ||||
| "[I-D.ietf-core-sid] YANG Schema Item iDentifier (SID)"; | ||||
| } | ||||
| typedef revision-identifier { | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| type string { | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| pattern '\d{4}-\d{2}-\d{2}'; | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| } | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| description | they appear in all capitals, as shown here. | |||
| "Represents a date in YYYY-MM-DD format."; | ||||
| } | ||||
| typedef sid { | This module defines the structure of the .sid files. | |||
| type uint64; | ||||
| description | ||||
| "YANG Schema Item iDentifier"; | ||||
| reference | ||||
| "[I-D.ietf-core-sid] YANG Schema Item iDentifier (SID)"; | ||||
| } | ||||
| typedef schema-node-path { | Each .sid file contains the mapping between the different | |||
| type string { | string identifiers defined by a YANG module and a | |||
| pattern | corresponding numeric value called SID."; | |||
| '/[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 | ||||
| "Identifies a schema-node path string for use in the | ||||
| SID registry. This string format follows the rules | ||||
| for an instance-identifier, as defined in RFC 7959, | ||||
| except that no predicates are allowed. | ||||
| This format is intended to support the YANG 1.1 ABNF | revision 2020-02-05 { | |||
| for a schema node identifier, except module names | description | |||
| are used instead of prefixes, as specified in RFC 7951."; | "Initial revision."; | |||
| reference | ||||
| "[I-D.ietf-core-sid] YANG Schema Item iDentifier (SID)"; | ||||
| } | ||||
| reference | typedef revision-identifier { | |||
| "RFC 7950, The YANG 1.1 Data Modeling Language; | type string { | |||
| Section 6.5: Schema Node Identifier; | pattern '\d{4}-\d{2}-\d{2}'; | |||
| RFC 7951, JSON Encoding of YANG Data; | } | |||
| Section 6.11: The instance-identifier type"; | description | |||
| } | "Represents a date in YYYY-MM-DD format."; | |||
| } | ||||
| typedef sid-file-version-identifier { | ||||
| type uint64; | ||||
| description | ||||
| "Optional attribute that gives information about the .sid file | ||||
| version."; | ||||
| } | ||||
| leaf module-name { | typedef sid { | |||
| type yang:yang-identifier; | type uint64; | |||
| description | description | |||
| "Name of the YANG module associated with this .sid file."; | "YANG Schema Item iDentifier"; | |||
| } | reference | |||
| "[I-D.ietf-core-sid] YANG Schema Item iDentifier (SID)"; | ||||
| } | ||||
| leaf module-revision { | typedef schema-node-path { | |||
| type revision-identifier; | type string { | |||
| description | pattern | |||
| "Revision of the YANG module associated with this .sid file. | '/[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*' + | |||
| This leaf is not present if no revision statement is | '(/[a-zA-Z_][a-zA-Z0-9\-_.]*(:[a-zA-Z_][a-zA-Z0-9\-_.]*)?)*'; | |||
| defined in the YANG module."; | } | |||
| } | description | |||
| "Identifies a schema-node path string for use in the | ||||
| SID registry. This string format follows the rules | ||||
| for an instance-identifier, as defined in RFC 7959, | ||||
| except that no predicates are allowed. | ||||
| list assigment-ranges { | This format is intended to support the YANG 1.1 ABNF | |||
| key "entry-point"; | for a schema node identifier, except module names | |||
| description | are used instead of prefixes, as specified in RFC 7951."; | |||
| "SID range(s) allocated to the YANG module identified by | reference | |||
| 'module-name' and 'module-revision'."; | "RFC 7950, The YANG 1.1 Data Modeling Language; | |||
| Section 6.5: Schema Node Identifier; | ||||
| RFC 7951, JSON Encoding of YANG Data; | ||||
| Section 6.11: The instance-identifier type"; | ||||
| } | ||||
| leaf entry-point { | leaf module-name { | |||
| type sid; | type yang:yang-identifier; | |||
| mandatory true; | description | |||
| description | "Name of the YANG module associated with this .sid file."; | |||
| "Lowest SID available for assignment."; | } | |||
| } | ||||
| leaf size { | leaf module-revision { | |||
| type uint64; | type revision-identifier; | |||
| mandatory true; | description | |||
| description | "Revision of the YANG module associated with this .sid file. | |||
| "Number of SIDs available for assignment."; | This leaf is not present if no revision statement is | |||
| } | defined in the YANG module."; | |||
| } | } | |||
| list items { | leaf sid-file-version { | |||
| key "namespace identifier"; | type sid-file-version-identifier; | |||
| description | description | |||
| "Each entry within this list defined the mapping between | "The version number of the .sid file. .sid files and the version | |||
| a YANG item string identifier and a SID. This list MUST | sequence are specific to a given YANG module revision. | |||
| include a mapping entry for each YANG item defined by | This number starts at zero when there is a YANG module update. | |||
| the YANG module identified by 'module-name' and | This number can distinguish updates to the SID file which are the result of | |||
| 'module-revision'."; | new processing, or the result of reported errata."; | |||
| } | ||||
| leaf namespace { | list dependencies-revisions { | |||
| type enumeration { | key "module-name"; | |||
| enum module { | ||||
| value 0; | ||||
| description | ||||
| "All module and submodule names share the same | ||||
| global module identifier namespace."; | ||||
| } | ||||
| enum identity { | ||||
| value 1; | ||||
| description | ||||
| "All identity names defined in a module and its | ||||
| submodules share the same identity identifier | ||||
| namespace."; | ||||
| } | ||||
| enum feature { | ||||
| value 2; | ||||
| description | ||||
| "All feature names defined in a module and its | ||||
| submodules share the same feature identifier | ||||
| namespace."; | ||||
| } | ||||
| enum data { | ||||
| value 3; | ||||
| description | ||||
| "The namespace for all data nodes, as defined in YANG."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Namespace of the YANG item for this mapping entry."; | ||||
| } | ||||
| leaf identifier { | description | |||
| type union { | "Information about the revision of each YANG module that the module in | |||
| type yang:yang-identifier; | 'module-name' includes used during the .sid file generation."; | |||
| type schema-node-path; | ||||
| } | ||||
| description | ||||
| "String identifier of the YANG item for this mapping entry. | ||||
| If the corresponding 'namespace' field is 'module', | leaf module-name { | |||
| 'feature', or 'identity', then this field MUST | type yang:yang-identifier; | |||
| contain a valid YANG identifier string. | mandatory true; | |||
| description | ||||
| "Name of the YANG module, dependency of 'module-name', for which | ||||
| revision information is provided."; | ||||
| } | ||||
| leaf module-revision { | ||||
| type revision-identifier; | ||||
| mandatory true; | ||||
| description | ||||
| "Revision of the YANG module, dependency of 'module-name', for which | ||||
| revision information is provided."; | ||||
| } | ||||
| } | ||||
| If the corresponding 'namespace' field is 'data', | list assigment-ranges { | |||
| then this field MUST contain a valid schema node | key "entry-point"; | |||
| path."; | description | |||
| "SID range(s) allocated to the YANG module identified by | ||||
| 'module-name' and 'module-revision'."; | ||||
| leaf entry-point { | ||||
| type sid; | ||||
| mandatory true; | ||||
| description | ||||
| "Lowest SID available for assignment."; | ||||
| } | ||||
| leaf size { | ||||
| type uint64; | ||||
| mandatory true; | ||||
| description | ||||
| "Number of SIDs available for assignment."; | ||||
| } | ||||
| } | ||||
| list items { | ||||
| key "namespace identifier"; | ||||
| description | ||||
| "Each entry within this list defined the mapping between | ||||
| a YANG item string identifier and a SID. This list MUST | ||||
| include a mapping entry for each YANG item defined by | ||||
| the YANG module identified by 'module-name' and | ||||
| 'module-revision'."; | ||||
| leaf namespace { | ||||
| type enumeration { | ||||
| enum module { | ||||
| value 0; | ||||
| description | ||||
| "All module and submodule names share the same | ||||
| global module identifier namespace."; | ||||
| } | } | |||
| enum identity { | ||||
| value 1; | ||||
| description | ||||
| "All identity names defined in a module and its | ||||
| submodules share the same identity identifier | ||||
| namespace."; | ||||
| } | ||||
| enum feature { | ||||
| value 2; | ||||
| description | ||||
| "All feature names defined in a module and its | ||||
| submodules share the same feature identifier | ||||
| namespace."; | ||||
| } | ||||
| enum data { | ||||
| value 3; | ||||
| description | ||||
| "The namespace for all data nodes, as defined in YANG."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Namespace of the YANG item for this mapping entry."; | ||||
| } | ||||
| leaf identifier { | ||||
| type union { | ||||
| type yang:yang-identifier; | ||||
| type schema-node-path; | ||||
| } | ||||
| description | ||||
| "String identifier of the YANG item for this mapping entry. | ||||
| leaf sid { | If the corresponding 'namespace' field is 'module', | |||
| type sid; | 'feature', or 'identity', then this field MUST | |||
| mandatory true; | contain a valid YANG identifier string. | |||
| description | ||||
| "SID assigned to the YANG item for this mapping entry."; | If the corresponding 'namespace' field is 'data', | |||
| } | then this field MUST contain a valid schema node | |||
| path."; | ||||
| } | } | |||
| } | ||||
| <CODE ENDS> | leaf sid { | |||
| type sid; | ||||
| mandatory true; | ||||
| description | ||||
| "SID assigned to the YANG item for this mapping entry."; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 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 | |||
| models defined in YANG [RFC7950]. As such, this identifier does not | models defined in YANG [RFC7950]. As such, this identifier does not | |||
| contribute to any new security issues in addition of those identified | contribute to any new security issues in addition of those identified | |||
| for the specific protocols or contexts for which it is used. | for the specific protocols or contexts for which it is used. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| skipping to change at page 14, line 46 ¶ | skipping to change at page 16, line 40 ¶ | |||
| o The ".sid" file allocates individual SIDs ONLY in the SID Ranges | o The ".sid" file allocates individual SIDs ONLY in the SID Ranges | |||
| for this YANG module (as allocated in the IETF SID Range | for this YANG module (as allocated in the IETF SID Range | |||
| Registry): | 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 SID Range Registry". | allocated to this YANG module in the "IETF SID Range Registry". | |||
| o If another ".sid" file has already allocated SIDs for this YANG | o 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 the other ".sid" | YANG items are assigned the same SIDs as in the other ".sid" file. | |||
| file. | ||||
| o If there is an older version of the ".sid" file, all allocated | ||||
| SIDs from that version are still present in the current version of | ||||
| the ".sid" file. | ||||
| o SIDs never change. | o SIDs never change. | |||
| 6.4.3. Recursive Allocation of SID Range at Document Adoption | 6.4.3. Recursive Allocation of SID Range 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 | processing, it is expected that most documents will ask for SID | |||
| allocations using Early Allocations [RFC7120]. The details of the | allocations using Early Allocations [RFC7120]. The details of the | |||
| Early Allocation should be included in any Working Group Adoption | Early Allocation should be included in any Working Group Adoption | |||
| call. Prior to Working Group Adoption, an internet draft authors can | call. Prior to Working Group Adoption, an internet draft authors can | |||
| use the experimental SID range (as per Section 6.3.2) for their SIDs | use the experimental SID range (as per Section 6.3.2) for their SIDs | |||
| 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 a range that comes from a non-IANA | |||
| managed "SID Mega-Range" registry). | managed "SID Mega-Range" registry). | |||
| 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 list 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 | opinion after Working Group Last Call if a SID value is to change its | |||
| meaning. In all cases, a .sid file and the SIDs associated with it | meaning. In all cases, a ".sid" file and the SIDs associated with it | |||
| are subject to change before the publication of an internet draft as | are subject to change before the publication of an internet draft as | |||
| an RFC. | an RFC. | |||
| During the early use of SIDs, many existing, previously published | During the early use of SIDs, many existing, previously published | |||
| YANG modules will not have SID allocations. For an allocation to be | YANG modules will not have SID allocations. For an allocation to be | |||
| useful the included YANG modules may also need to have SID | useful the included YANG modules may also need to have SID | |||
| allocations made. | allocations made. | |||
| 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 | |||
| skipping to change at page 18, line 46 ¶ | skipping to change at page 20, line 46 ¶ | |||
| RFC 8344, DOI 10.17487/RFC8344, March 2018, | RFC 8344, DOI 10.17487/RFC8344, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8344>. | <https://www.rfc-editor.org/info/rfc8344>. | |||
| [RFC8366] Watsen, K., Richardson, M., Pritikin, M., and T. Eckert, | [RFC8366] Watsen, K., Richardson, M., Pritikin, M., and T. Eckert, | |||
| "A Voucher Artifact for Bootstrapping Protocols", | "A Voucher Artifact for Bootstrapping Protocols", | |||
| RFC 8366, DOI 10.17487/RFC8366, May 2018, | RFC 8366, DOI 10.17487/RFC8366, May 2018, | |||
| <https://www.rfc-editor.org/info/rfc8366>. | <https://www.rfc-editor.org/info/rfc8366>. | |||
| Appendix A. ".sid" file example | Appendix A. ".sid" file example | |||
| The following .sid file (ietf-system@2014-08-06.sid) have been | The following ".sid" file (ietf-system@2014-08-06.sid) have been | |||
| generated using the following yang modules: | generated using the following yang modules: | |||
| o ietf-system@2014-08-06.yang | o ietf-system@2014-08-06.yang | |||
| o ietf-yang-types@2013-07-15.yang | o ietf-yang-types@2013-07-15.yang | |||
| o ietf-inet-types@2013-07-15.yang | o ietf-inet-types@2013-07-15.yang | |||
| o ietf-netconf-acm@2012-02-22.yang | o ietf-netconf-acm@2012-02-22.yang | |||
| o iana-crypt-hash@2014-04-04.yang | o iana-crypt-hash@2014-04-04.yang | |||
| skipping to change at page 28, line 8 ¶ | skipping to change at page 30, line 8 ¶ | |||
| 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 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. | |||
| Changes of SID files can also be automated using the same method | 5. The "dependencies-revisions" should reflect the revision numbers | |||
| described above, only unassigned YANG items are processed at step #3. | of each YANG module that the YANG module imports at the moment of | |||
| Already existing items in the SID file should not be given new SIDs. | the generation. | |||
| In case of an update to an existing ".sid" file, an additional step | ||||
| is needed that increments the ".sid" file version number. If there | ||||
| was no version number in the previous version of the ".sid" file, 0 | ||||
| is assumed as the version number of the old version of the ".sid" | ||||
| file and the version number is 1 for the new ".sid" file. Apart from | ||||
| that, changes of SID files can also be automated using the same | ||||
| method described above, only unassigned YANG items are processed at | ||||
| step #3. Already existing items in the SID file should not be given | ||||
| new SIDs. | ||||
| Note that ".sid" file versions are specific to a YANG module | ||||
| revision. For each new YANG module or each new revision of an | ||||
| existing YANG module, the version number of the initial ".sid" file | ||||
| should either be 0 or should not be present. | ||||
| 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 "SID Range Registry". If the YANG module | acquire a SID range from a "SID Range Registry". If the YANG module | |||
| is part of an IETF draft or RFC, the SID range need to be acquired | is part of an IETF draft or RFC, the SID range need to be acquired | |||
| from the "IETF SID Range Registry" as defined in Section 6.3. For | from the "IETF SID Range Registry" as defined in Section 6.3. For | |||
| the other YANG modules, the authors can acquire a SID range from any | the other YANG modules, the authors can acquire a SID range from any | |||
| "SID Range Registry" of their choice. | "SID Range Registry" of their choice. | |||
| skipping to change at page 28, line 32 ¶ | skipping to change at page 30, line 47 ¶ | |||
| ".sid" file/s for his YANG module/s. It is recommended to leave some | ".sid" file/s for his YANG module/s. It is recommended to leave some | |||
| unallocated SIDs following the allocated range in each ".sid" file in | unallocated SIDs following the allocated range in each ".sid" file in | |||
| order to allow better evolution of the YANG module in the future. | order to allow better evolution of the YANG module in the future. | |||
| Generation of ".sid" files should be performed using an automated | Generation of ".sid" files should be performed using an automated | |||
| tool. Note that ".sid" files can only be generated for YANG modules | tool. Note that ".sid" files can only be generated for YANG modules | |||
| and not for submodules. | 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 ? /-------------+ | |||
| skipping to change at page 29, line 10 ¶ | skipping to change at page 31, line 25 ¶ | |||
| | \-------------/ +---------------+ | | | \-------------/ +---------------+ | | |||
| | | no | | | | | no | | | |||
| | V V | | | V V | | |||
| | +---------------+ +---------------+ | | | +---------------+ +---------------+ | | |||
| +---| YANG module | | SID sub-range | | | +---| YANG module | | SID sub-range | | | |||
| | update | | assignment |<----------+ | | update | | assignment |<----------+ | |||
| +---------------+ +---------------+ | | +---------------+ +---------------+ | | |||
| | | | | | | |||
| V | | V | | |||
| +---------------+ +-------------+ | +---------------+ +-------------+ | |||
| | .sid file | | Rework YANG | | | ".sid" file | | Rework YANG | | |||
| | generation | | model | | | generation | | model | | |||
| +---------------+ +-------------+ | +---------------+ +-------------+ | |||
| | ^ | | ^ | |||
| V | | V | | |||
| /----------\ yes | | /----------\ yes | | |||
| / Work in \ -----------+ | / Work in \ -----------+ | |||
| \ progress / | \ progress / | |||
| \----------/ | \----------/ | |||
| | no | | no | |||
| V | V | |||
| skipping to change at page 29, line 42 ¶ | skipping to change at page 32, line 10 ¶ | |||
| | | | | | | |||
| +---------------------------------+ | +---------------------------------+ | |||
| V | V | |||
| [DONE] | [DONE] | |||
| Figure 1: SID Lifecycle | Figure 1: 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 | | |||
| / \ | or include(s) | | / \ | or include(s) | | |||
| | or import(s) | | | or import(s) | | |||
| +---------------+ | +---------------+ | |||
| | | | | |||
| V | V | |||
| /-------------\ | /-------------\ | |||
| skipping to change at page 30, line 27 ¶ | skipping to change at page 32, line 34 ¶ | |||
| | no V | | no V | |||
| | /-------------\ +----------------+ | | /-------------\ +----------------+ | |||
| | / SID range \ yes | Extra sub-range| | | / SID range \ yes | Extra sub-range| | |||
| | \ 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 | | |||
| +--------------+---------------------+ | +--------------+---------------------+ | |||
| | | | | |||
| End of changes. 46 change blocks. | ||||
| 203 lines changed or deleted | 281 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||