| < draft-ietf-netmod-yang-packages-00.txt | draft-ietf-netmod-yang-packages-01.txt > | |||
|---|---|---|---|---|
| Network Working Group R. Wilton, Ed. | Network Working Group R. Wilton, Ed. | |||
| Internet-Draft R. Rahman | Internet-Draft R. Rahman | |||
| Intended status: Standards Track J. Clarke | Intended status: Standards Track J. Clarke | |||
| Expires: September 18, 2020 Cisco Systems, Inc. | Expires: May 6, 2021 Cisco Systems, Inc. | |||
| J. Sterne | J. Sterne | |||
| Nokia | Nokia | |||
| B. Wu | B. Wu, Ed. | |||
| Huawei | Huawei | |||
| March 17, 2020 | November 2, 2020 | |||
| YANG Packages | YANG Packages | |||
| draft-ietf-netmod-yang-packages-00 | draft-ietf-netmod-yang-packages-01 | |||
| Abstract | Abstract | |||
| This document defines YANG packages, a versioned organizational | This document defines YANG packages, a versioned organizational | |||
| structure holding a set of related YANG modules, that collectively | structure holding a set of related YANG modules that collectively | |||
| define a YANG schema. It describes how packages: are represented on | define a YANG schema. It describes how packages: are represented on | |||
| a server, can be defined in offline YANG instance data documents, and | a server, can be defined in offline YANG instance data files, and can | |||
| can be used to define the schema associated with YANG instance data | be used to define the schema associated with YANG instance data | |||
| documents. | files. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 September 18, 2020. | This Internet-Draft will expire on May 6, 2021. | |||
| 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 19 ¶ | skipping to change at page 2, line 19 ¶ | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Terminology and Conventions . . . . . . . . . . . . . . . . . 3 | 1. Terminology and Conventions . . . . . . . . . . . . . . . . . 3 | |||
| 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Background on YANG packages . . . . . . . . . . . . . . . . . 4 | 3. Background on YANG packages . . . . . . . . . . . . . . . . . 4 | |||
| 4. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. YANG Package Definition . . . . . . . . . . . . . . . . . . . 6 | 5. YANG Package Definition . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.1. Package definition rules . . . . . . . . . . . . . . . . 7 | 5.1. Package definition rules . . . . . . . . . . . . . . . . 7 | |||
| 5.2. Package versioning . . . . . . . . . . . . . . . . . . . 7 | 5.2. Package versioning . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.2.1. Updating a package with a new version . . . . . . . . 8 | 5.2.1. Updating a package with a new version . . . . . . . . 8 | |||
| 5.2.1.1. Non-Backwards-compatible changes . . . . . . . . 8 | 5.2.1.1. Non-Backwards-compatible changes . . . . . . . . 8 | |||
| 5.2.1.2. Backwards-compatible changes . . . . . . . . . . 8 | 5.2.1.2. Backwards-compatible changes . . . . . . . . . . 9 | |||
| 5.2.1.3. Editorial changes . . . . . . . . . . . . . . . . 9 | 5.2.1.3. Editorial changes . . . . . . . . . . . . . . . . 9 | |||
| 5.2.2. YANG Semantic Versioning for packages . . . . . . . . 9 | 5.2.2. YANG Semantic Versioning for packages . . . . . . . . 9 | |||
| 5.2.3. Revision history . . . . . . . . . . . . . . . . . . 10 | 5.2.3. Revision history . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Package conformance . . . . . . . . . . . . . . . . . . . 10 | 5.3. Package conformance . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3.1. Use of YANG semantic versioning . . . . . . . . . . . 10 | 5.3.1. Use of YANG semantic versioning . . . . . . . . . . . 10 | |||
| 5.3.2. Package checksums . . . . . . . . . . . . . . . . . . 11 | 5.3.2. Package checksums . . . . . . . . . . . . . . . . . . 11 | |||
| 5.3.3. The relationship between packages and datastores . . 11 | 5.3.3. The relationship between packages and datastores . . 12 | |||
| 5.4. Schema referential completeness . . . . . . . . . . . . . 13 | 5.4. Schema referential completeness . . . . . . . . . . . . . 13 | |||
| 5.5. Package name scoping and uniqueness . . . . . . . . . . . 14 | 5.5. Package name scoping and uniqueness . . . . . . . . . . . 14 | |||
| 5.5.1. Globally scoped packages . . . . . . . . . . . . . . 14 | 5.5.1. Globally scoped packages . . . . . . . . . . . . . . 14 | |||
| 5.5.2. Server scoped packages . . . . . . . . . . . . . . . 14 | 5.5.2. Server scoped packages . . . . . . . . . . . . . . . 14 | |||
| 5.6. Submodules packages considerations . . . . . . . . . . . 14 | 5.6. Submodules packages considerations . . . . . . . . . . . 14 | |||
| 5.7. Package tags . . . . . . . . . . . . . . . . . . . . . . 14 | 5.7. Package tags . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.8. YANG package core definition . . . . . . . . . . . . . . 15 | 5.8. YANG Package Usage Guidance . . . . . . . . . . . . . . . 15 | |||
| 6. Package Instance Data Documents . . . . . . . . . . . . . . . 16 | 5.8.1. Use of deviations in YANG packages . . . . . . . . . 15 | |||
| 7. Package Definitions on a Server . . . . . . . . . . . . . . . 17 | 5.8.2. Use of features in YANG modules and YANG packages . . 16 | |||
| 7.1. Package List . . . . . . . . . . . . . . . . . . . . . . 17 | 5.9. YANG package core definition . . . . . . . . . . . . . . 16 | |||
| 7.2. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 17 | 6. Package Instance Data Files . . . . . . . . . . . . . . . . . 17 | |||
| 8. YANG Library Package Bindings . . . . . . . . . . . . . . . . 18 | 7. Package Definitions on a Server . . . . . . . . . . . . . . . 18 | |||
| 9. YANG packages as schema for YANG instance data document . . . 19 | 7.1. Package List . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 10. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.2. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | 8. YANG Library Package Bindings . . . . . . . . . . . . . . . . 19 | |||
| 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 9. YANG packages as schema for YANG instance data document . . . 20 | |||
| 13. Open Questions/Issues . . . . . . . . . . . . . . . . . . . . 43 | 10. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 43 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 15.1. Normative References . . . . . . . . . . . . . . . . . . 43 | 13. Open Questions/Issues . . . . . . . . . . . . . . . . . . . . 44 | |||
| 15.2. Informative References . . . . . . . . . . . . . . . . . 45 | 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 45 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| A.1. Example IETF Network Device YANG package . . . . . . . . 46 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 44 | |||
| A.2. Example IETF Basic Routing YANG package . . . . . . . . . 48 | 15.2. Informative References . . . . . . . . . . . . . . . . . 46 | |||
| A.3. Package import conflict resolution example . . . . . . . 51 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| Appendix B. Possible alternative solutions . . . . . . . . . . . 54 | A.1. Example IETF Network Device YANG package . . . . . . . . 47 | |||
| B.1. Using module tags . . . . . . . . . . . . . . . . . . . . 54 | A.2. Example IETF Basic Routing YANG package . . . . . . . . . 49 | |||
| B.2. Using YANG library . . . . . . . . . . . . . . . . . . . 55 | A.3. Package import conflict resolution example . . . . . . . 52 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 | Appendix B. Possible alternative solutions . . . . . . . . . . . 55 | |||
| B.1. Using module tags . . . . . . . . . . . . . . . . . . . . 55 | ||||
| B.2. Using YANG library . . . . . . . . . . . . . . . . . . . 56 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 | ||||
| 1. Terminology and Conventions | 1. Terminology and Conventions | |||
| 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 BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document uses terminology introduced in the YANG versioning | This document uses terminology introduced in the YANG versioning | |||
| requirements draft [I-D.verdt-netmod-yang-versioning-reqs]. | requirements draft [I-D.ietf-netmod-yang-versioning-reqs]. | |||
| This document also makes of the following terminology introduced in | This document also makes of the following terminology introduced in | |||
| the Network Management Datastore Architecture [RFC8342]: | the Network Management Datastore Architecture [RFC8342]: | |||
| o datastore schema | o datastore schema | |||
| This document also makes of the following terminology introduced in | This document also makes of the following terminology introduced in | |||
| the YANG 1.1 Data Modeling Language [RFC7950]: | the YANG 1.1 Data Modeling Language [RFC7950]: | |||
| o data node | o data node | |||
| In addition, this document defines the following terminology: | In addition, this document defines the following terminology: | |||
| o YANG schema: A datastore schema, not bound to any particular | o YANG schema: A datastore schema, not bound to any particular | |||
| datastore. | datastore. | |||
| o YANG package: An organizational structure holding a collection of | o YANG package: An organizational structure containing a collection | |||
| YANG modules related by some common purpose, normally defined in a | of YANG modules, normally defined in a YANG instance data file. A | |||
| YANG instance data file. A YANG package defines a YANG schema by | YANG package defines a YANG schema by specifying a set of YANG | |||
| specifying a set of YANG modules revisions, package versions, | modules and their revisions, other packages and their revisions, | |||
| mandatory features, and deviations. YANG packages are defined in | mandatory features, and deviations. YANG packages are defined in | |||
| Section 5. | Section 5. | |||
| o backwards-compatible (BC) change: When used in the context of a | o backwards-compatible (BC) change: When used in the context of a | |||
| YANG module, it follows the definition in Section 3.1.1 of | YANG module, it follows the definition in Section 3.1.1 of | |||
| [I-D.verdt-netmod-yang-module-versioning]. When used in the | [I-D.ietf-netmod-yang-module-versioning]. When used in the | |||
| context of a YANG package, it follows the definition in | context of a YANG package, it follows the definition in | |||
| Section 5.2.1.2. | Section 5.2.1.2. | |||
| o non-backwards-compatible (NBC) change: When used in the context of | o non-backwards-compatible (NBC) change: When used in the context of | |||
| a YANG module, it follows the definition in Section 3.1.2 of | a YANG module, it follows the definition in Section 3.1.2 of | |||
| [I-D.verdt-netmod-yang-module-versioning]. When used in the | [I-D.ietf-netmod-yang-module-versioning]. When used in the | |||
| context of a YANG package, it follows the definition in | context of a YANG package, it follows the definition in | |||
| Section 5.2.1.2. | Section 5.2.1.2. | |||
| o editorial change: When used in the context of a YANG module, it | o editorial change: When used in the context of a YANG module, it | |||
| follows the definition of an 'editorial change' in 3.2 of | follows the definition of an 'editorial change' in 3.2 of | |||
| [I-D.verdt-netmod-yang-semver]. When used in the context of a | [I-D.ietf-netmod-yang-module-versioning]. When used in the | |||
| YANG package, it follows the definition in Section 5.2.1.3. | context of a YANG package, it follows the definition in | |||
| Section 5.2.1.3. | ||||
| 2. Introduction | 2. Introduction | |||
| This document defines and describes the YANG [RFC7950] constructs | This document defines and describes the YANG [RFC7950] constructs | |||
| that are used to define and use YANG packages. | that are used to define and use YANG packages. | |||
| A YANG package is an organizational structure that groups a set of | A YANG package is an organizational structure that groups a set of | |||
| YANG modules together into a consistent versioned definition to serve | YANG modules together into a consistent versioned definition. For | |||
| a common purpose. For example, a YANG package could define the set | example, a YANG package could define the set of YANG modules required | |||
| of YANG modules required to implement an L2VPN service on a network | to implement an L2VPN service on a network device. YANG packages can | |||
| device. YANG packages can themselves refer to, and reuse, other | themselves refer to, and reuse, other package definitions. | |||
| package definitions. | ||||
| Non-normative examples of YANG packages are provided in the | Non-normative examples of YANG packages are provided in the | |||
| appendices. | appendices. | |||
| 3. Background on YANG packages | 3. Background on YANG packages | |||
| It has long been acknowledged within the YANG community that network | It has long been acknowledged within the YANG community that network | |||
| management using YANG requires a unit of organization and conformance | management using YANG requires a unit of organization and conformance | |||
| that is broader in scope than individual YANG modules. | that is broader in scope than individual YANG modules. | |||
| skipping to change at page 4, line 49 ¶ | skipping to change at page 4, line 51 ¶ | |||
| statements, where a YANG package is defined in a file similar to how | statements, where a YANG package is defined in a file similar to how | |||
| YANG modules are defined, and would require enhancements to YANG | YANG modules are defined, and would require enhancements to YANG | |||
| compilers to understand the new statements used to define packages. | compilers to understand the new statements used to define packages. | |||
| OpenConfig [openconfigsemver] describes an approach to versioning | OpenConfig [openconfigsemver] describes an approach to versioning | |||
| 'bundle releases' based on git tags. I.e. a set of modules, at | 'bundle releases' based on git tags. I.e. a set of modules, at | |||
| particular versions, can be marked with the same release tag to | particular versions, can be marked with the same release tag to | |||
| indicate that they are known to interoperate together. | indicate that they are known to interoperate together. | |||
| The NETMOD WG in general, and the YANG versioning design team in | The NETMOD WG in general, and the YANG versioning design team in | |||
| particular, are exploring solutions [I-D.verdt-netmod-yang-solutions] | particular, are exploring solutions [I-D.ietf-netmod-yang-solutions] | |||
| to the YANG versioning requirements, | to the YANG versioning requirements, | |||
| [I-D.verdt-netmod-yang-versioning-reqs]. Solutions to the versioning | [I-D.ietf-netmod-yang-versioning-reqs]. Solutions to the versioning | |||
| requirements can be split into several distinct areas. | requirements can be split into several distinct areas. | |||
| [I-D.ietf-netmod-yang-module-versioning] is focused on YANG | ||||
| [I-D.verdt-netmod-yang-module-versioning] is focused on YANG | ||||
| versioning scoped to individual modules. The overall solution must | versioning scoped to individual modules. The overall solution must | |||
| also consider YANG versioning and conformance scoped to YANG schema. | also consider YANG versioning and conformance scoped to YANG schema. | |||
| YANG packages provide part of the solution for versioning YANG | YANG packages provide part of the solution for versioning YANG | |||
| schema. | schema. | |||
| 4. Objectives | 4. Objectives | |||
| The main goals of YANG package definitions include, but are not | The main goals of YANG package definitions include, but are not | |||
| restricted to: | restricted to: | |||
| skipping to change at page 5, line 45 ¶ | skipping to change at page 5, line 47 ¶ | |||
| vendors, and vendor A implements version 1.0.0 of module foo and | vendors, and vendor A implements version 1.0.0 of module foo and | |||
| version 2.0.0 of module bar, and vendor B implements version 2.0.0 | version 2.0.0 of module bar, and vendor B implements version 2.0.0 | |||
| of module foo and version 1.0.0 of module bar. For a client, | of module foo and version 1.0.0 of module bar. For a client, | |||
| trying to interoperate with multiple vendors, and many YANG | trying to interoperate with multiple vendors, and many YANG | |||
| modules, finding a consistent lowest common denominator set of | modules, finding a consistent lowest common denominator set of | |||
| YANG module versions may be difficult, if not impossible. | YANG module versions may be difficult, if not impossible. | |||
| Protocol mechanisms of how clients can negotiate which packages or | Protocol mechanisms of how clients can negotiate which packages or | |||
| package versions are to be used for NETCONF/RESTCONF communications | package versions are to be used for NETCONF/RESTCONF communications | |||
| are outside the scope of this document, and are defined in | are outside the scope of this document, and are defined in | |||
| [I-D.wilton-netmod-yang-ver-selection]. | [I-D.ietf-netmod-yang-ver-selection]. | |||
| Finally, the package definitions proposed by this document are | Finally, the package definitions proposed by this document are | |||
| intended to be relatively basic in their definition and the | intended to be relatively basic in their definition and the | |||
| functionality that they support. As industry gains experience using | functionality that they support. As industry gains experience using | |||
| YANG packages, the standard YANG mechanisms of updating, or | YANG packages, the standard YANG mechanisms of updating, or | |||
| augmenting, YANG modules could also be used to extend the | augmenting YANG modules could also be used to extend the | |||
| functionality supported by YANG packages, if required. | functionality supported by YANG packages, if required. | |||
| 5. YANG Package Definition | 5. YANG Package Definition | |||
| This document specifies an approach to defining YANG packages that is | This document specifies an approach to defining YANG packages that is | |||
| different to either of the approaches described in the background. | different to either of the approaches described in the background. | |||
| A YANG package is a versioned organizational structure defining a set | A YANG package is a versioned organizational structure defining a set | |||
| of related YANG modules, packages, features, and deviations. A YANG | of related YANG modules, packages, features, and deviations. A YANG | |||
| package collectively defines a YANG schema. | package collectively defines a YANG schema. | |||
| Each YANG package has a name that SHOULD end with the suffix "-pkg". | Each YANG package has a name that SHOULD end with the suffix "-pkg". | |||
| Package names are normally expected to be globally unique, but in | Package names are normally expected to be globally unique, but in | |||
| some cases the package name may be locally scoped to a server or | some cases the package name may be locally scoped to a server or | |||
| device, as described in Section 5.5. | device, as described in Section 5.5. | |||
| YANG packages are versioned using the same approaches described in | YANG packages are versioned using the same approaches described in | |||
| [I-D.verdt-netmod-yang-module-versioning] and | [I-D.ietf-netmod-yang-module-versioning] and | |||
| [I-D.verdt-netmod-yang-semver]. This is described in further detail | [I-D.ietf-netmod-yang-semver]. This is described in further detail | |||
| in Section 5.2. | in Section 5.2. | |||
| Each YANG package version, defines: | Each YANG package version, defines: | |||
| some metadata about the package, e.g., description, tags, scoping, | o some metadata about the package, e.g., description, tags, scoping, | |||
| referential completeness, location information. | referential completeness, location information. | |||
| a set of YANG modules, at particular revisions, that are | o a set of YANG modules, at particular revisions, that are | |||
| implemented by servers that implement the package. The modules | implemented by servers that implement the package. The modules | |||
| may contain deviations. | may contain deviations. | |||
| a set of import-only YANG modules, at particular revisions, that | o a set of import-only YANG modules, at particular revisions, that | |||
| are used 'import-only' by the servers that implement the package. | are used 'import-only' by the servers that implement the package. | |||
| a set of included YANG packages, at particular revisions, that are | o a set of included YANG packages, at particular revisions, that are | |||
| also implemented by servers that implement the package. | also implemented by servers that implement the package. | |||
| a set of YANG module features that must be supported by servers | o a set of YANG module features that must be supported by servers | |||
| that implement the package. | that implement the package. | |||
| The structure for YANG package definitions uses existing YANG | The structure for YANG package definitions uses existing YANG | |||
| language statements, YANG Data Structure Extensions | language statements, YANG Data Structure Extensions | |||
| [I-D.ietf-netmod-yang-data-ext], and YANG Instance Data File Format | [I-D.ietf-netmod-yang-data-ext], and YANG Instance Data File Format | |||
| [I-D.ietf-netmod-yang-instance-file-format]. | [I-D.ietf-netmod-yang-instance-file-format]. | |||
| YANG package definitions are available offline in YANG Instance Data | YANG package definitions are available offline in YANG instance data | |||
| Documents. Client applications can be designed to support particular | files. Client applications can be designed to support particular | |||
| package versions that they expect to interoperate with. | package versions that they expect to interoperate with. | |||
| YANG package definitions are available from the server, via | YANG package definitions are available from the server via | |||
| augmentations to YANG Library [RFC8525]. Rather than client | augmentations to YANG Library [RFC8525]. Rather than client | |||
| applications downloading the entire contents of YANG library to | applications downloading the entire contents of YANG library to | |||
| confirm that the server schema is compatible with the client, they | confirm that the server schema is compatible with the client, they | |||
| can check, or download, a much shorter YANG package definition, and | can check, or download, a much shorter YANG package definition, and | |||
| validate that it conforms to the expected schema. | validate that it conforms to the expected schema. | |||
| YANG package definitions can also be used to define the schema | YANG package definitions can also be used to define the schema | |||
| associated with YANG instance data documents holding other, e.g., non | associated with YANG instance data files holding other, e.g., non | |||
| packages related, instance data. | packages related, instance data. | |||
| 5.1. Package definition rules | 5.1. Package definition rules | |||
| The following rules define how packages are defined: | Packages are defined using the following rules: | |||
| A YANG package MAY represent a complete YANG schema or only part | 1. A YANG package MAY represent a complete YANG schema or only part | |||
| of a YANG schema with some module import dependencies missing, as | of a YANG schema with some module import dependencies missing, as | |||
| described in Section 5.4. | described in Section 5.4. | |||
| Packages definitions are hierarchical. A package can include | 2. Packages definitions are hierarchical. A package can include | |||
| other packages. Only a single version of a package can be | other packages. Only a single version of a package can be | |||
| included, and conflicting package includes (e.g. from descendant | included, and conflicting package includes (e.g. from descendant | |||
| package includes) MUST be explicitly resolved by indicating which | package includes) MUST be explicitly resolved by indicating which | |||
| version takes precedence, and which versions are being replaced. | version takes precedence, and which versions are being replaced. | |||
| For each module implemented by a package, only a single revision | 3. For each module implemented by a package, only a single revision | |||
| of that module MUST be implemented. Multiple revisions of a | of that module MUST be implemented. Multiple revisions of a | |||
| module MAY be listed as import-only dependencies. | module MAY be listed as import-only dependencies. | |||
| The revision of a module listed in the package 'module' list | 4. The revision of a module listed in the package 'module' list | |||
| supersedes any 'implemented' revision of the module listed in an | supersedes any 'implemented' revision of the module listed in an | |||
| included package module list. The 'replaces-revision' leaf-list | included package module list. The 'replaces-revision' leaf-list | |||
| is used to indicate which 'implemented' or 'import-only' module | is used to indicate which 'implemented' or 'import-only' module | |||
| revisions are replaces by this module revision. This allows a | revisions are replaces by this module revision. This allows a | |||
| package to explicitly resolve conflicts between implemented module | package to explicitly resolve conflicts between implemented | |||
| revisions in included packages. | module revisions in included packages. | |||
| The 'replaces-revision' leaf-list in the 'import-only-module' list | 5. The 'replaces-revision' leaf-list in the 'import-only-module' | |||
| can be used to exclude duplicate revisions of import-only modules | list can be used to exclude duplicate revisions of import-only | |||
| from included packages. Otherwise, the import-only-modules for a | modules from included packages. Otherwise, the import-only- | |||
| package are the import-only-modules from all included packages | modules for a package are the import-only-modules from all | |||
| combined with any modules listed in the packages import-only- | included packages combined with any modules listed in the | |||
| module list. | packages import-only-module list. | |||
| 6. YANG packages definitions MAY include modules containing | ||||
| deviation statements, but those deviation statements MUST only be | ||||
| used in an RFC 7950 compatible way to indicate where a server, or | ||||
| class of servers, deviates from a published standard. Deviations | ||||
| MUST NOT be included in a package definition that is part of a | ||||
| published standard. See section 5.8.1 for further guidance on | ||||
| the use of deviations in YANG packages. | ||||
| 5.2. Package versioning | 5.2. Package versioning | |||
| Individual versions of a YANG package are versioned using the | Individual versions of a YANG package are versioned using the | |||
| "revision-label" scheme defined in section 3.3 of | "revision-label" scheme defined in section 3.3 of | |||
| [I-D.verdt-netmod-yang-module-versioning]. | [I-D.ietf-netmod-yang-module-versioning]. | |||
| 5.2.1. Updating a package with a new version | 5.2.1. Updating a package with a new version | |||
| Package compatibility is fundamentally defined by how the YANG schema | Package compatibility is fundamentally defined by how the YANG schema | |||
| between two package versions has changed. | between two package versions has changed. | |||
| When a package definition is updated, the version associated with the | When a package definition is updated, the version associated with the | |||
| package MUST be updated appropriately, taking into consideration the | package MUST be updated appropriately, taking into consideration the | |||
| scope of the changes as defined by the rules below. | scope of the changes as defined by the rules below. | |||
| A package definition SHOULD define the previous version of the | A package definition SHOULD define the previous version of the | |||
| package in the 'previous-version' leaf unless it is the initial | package in the 'previous-version' leaf unless it is the initial | |||
| version of the package. If the 'previous-version' leaf is provided | version of the package. If the 'previous-version' leaf is provided | |||
| then the package definition MUST set the 'nbc-changes' leaf if the | then the package definition MUST set the 'nbc-changes' leaf if the | |||
| new version is non-backwards-compatible with respect to the package | new version is non-backwards-compatible with respect to the package | |||
| version defined in the 'previous-version' leaf. | version defined in the 'previous-version' leaf. | |||
| 5.2.1.1. Non-Backwards-compatible changes | 5.2.1.1. Non-Backwards-compatible changes | |||
| The following changes classify as NBC changes to a package | The following changes classify as non-backwards-compatible changes to | |||
| definition: | a package definition: | |||
| Changing an 'included-package' list entry to select a package | o Changing an 'included-package' list entry to select a package | |||
| version that is non-backwards-compatible to the prior package | version that is non-backwards-compatible to the prior package | |||
| version, or removing a previously included package. | version, or removing a previously included package. | |||
| Changing a 'module' or 'import-only-module' list entry to select a | o Changing a 'module' or 'import-only-module' list entry to select a | |||
| module revision that is non-backwards-compatible to the prior | module revision that is non-backwards-compatible to the prior | |||
| module revision, or removing a previously implemented module. | module revision, or removing a previously implemented module. | |||
| Removing a feature from the 'mandatory-feature' leaf-list. | o Removing a feature from the 'mandatory-feature' leaf-list. | |||
| Adding, changing, or removing a deviation that is considered a | o Adding, changing, or removing a deviation that is considered a | |||
| non-backwards-compatible change to the affected data node in the | non-backwards-compatible change to the affected data node in the | |||
| schema associated with the prior package version. | schema associated with the prior package version. | |||
| 5.2.1.2. Backwards-compatible changes | 5.2.1.2. Backwards-compatible changes | |||
| The following changes classify as BC changes to a package definition: | The following changes classify as backwards-compatible changes to a | |||
| package definition: | ||||
| Changing an 'included-package' list entry to select a package | o Changing an 'included-package' list entry to select a package | |||
| version that is backwards-compatible to the prior package version, | version that is backwards-compatible to the prior package version, | |||
| or including a new package that does not conflict with any | or including a new package that does not conflict with any | |||
| existing included package or module. | existing included package or module. | |||
| Changing a 'module' or 'import-only-module' list entry to select a | o Changing a 'module' or 'import-only-module' list entry to select a | |||
| module revision that is backwards-compatible to the prior module | module revision that is backwards-compatible to the prior module | |||
| revision, or including a new module to the package definition. | revision, or including a new module to the package definition. | |||
| Adding a feature to the 'mandatory-feature' leaf-list. | o Adding a feature to the 'mandatory-feature' leaf-list. | |||
| Adding, changing, or removing a deviation that is considered a | o Adding, changing, or removing a deviation that is considered a | |||
| backwards-compatible change to the affected data node in the | backwards-compatible change to the affected data node in the | |||
| schema associated with the prior package version. | schema associated with the prior package version. | |||
| 5.2.1.3. Editorial changes | 5.2.1.3. Editorial changes | |||
| The following changes classify as editorial changes to a package | The following changes classify as editorial changes to a package | |||
| definition: | definition: | |||
| Changing a 'included-package' list entry to select a package | o Changing a 'included-package' list entry to select a package | |||
| version that is classified as an editorial change relative to the | version that is classified as an editorial change relative to the | |||
| prior package version. | prior package version. | |||
| Changing a 'module' or 'import-only-module' list entry to select a | o Changing a 'module' or 'import-only-module' list entry to select a | |||
| module revision that is classified as an editorial change relative | module revision that is classified as an editorial change relative | |||
| to the prior module revision. | to the prior module revision. | |||
| Any change to any metadata associated with a package definition | o Any change to any metadata associated with a package definition | |||
| that causes it to have a different checksum value. | that causes it to have a different checksum value. | |||
| 5.2.2. YANG Semantic Versioning for packages | 5.2.2. YANG Semantic Versioning for packages | |||
| YANG Semantic Versioning [I-D.verdt-netmod-yang-semver] MAY be used | YANG Semantic Versioning [I-D.ietf-netmod-yang-semver] MAY be used as | |||
| as an appropriate type of revision-label for the package version | an appropriate type of revision-label for the package version leaf. | |||
| leaf. | ||||
| If the format of the leaf matches the 'yangver:version' type | If the format of the leaf matches the 'yangver:version' type | |||
| specified in ietf-yang-semver.yang, then the package version leaf | specified in ietf-yang-semver.yang, then the package version leaf | |||
| MUST be interpreted as a YANG semantic version number. | MUST be interpreted as a YANG semantic version number. | |||
| For YANG packages defined by the IETF, YANG semantic version numbers | For YANG packages defined by the IETF, YANG semantic version numbers | |||
| MUST be used as the version scheme for YANG packages. | MUST be used as the version scheme for YANG packages. | |||
| The rules for incrementing the YANG package version number are | The rules for incrementing the YANG package version number are | |||
| equivalent to the semantic versioning rules used to version | equivalent to the semantic versioning rules used to version | |||
| individual YANG modules, defined in section 3.2 of | individual YANG modules, defined in section 3.2 of | |||
| [I-D.verdt-netmod-yang-semver], but use the rules defined previously | [I-D.ietf-netmod-yang-semver], but use the rules defined previously | |||
| in Section 5.2.1 to determine whether a change is classified as non- | in Section 5.2.1 to determine whether a change is classified as non- | |||
| backwards-compatible, backwards-compatible, or editorial. Where | backwards-compatible, backwards-compatible, or editorial. Where | |||
| available, the semantic version number of the referenced elements in | available, the semantic version number of the referenced elements in | |||
| the package (included packages or modules) can be used to help | the package (included packages or modules) can be used to help | |||
| determine the scope of changes being made. | determine the scope of changes being made. | |||
| 5.2.3. Revision history | 5.2.3. Revision history | |||
| YANG packages do not contain a revision history. This is because | YANG packages do not contain a revision history. This is because | |||
| packages may have many revisions and a long revision history would | packages may have many revisions and a long revision history would | |||
| skipping to change at page 11, line 11 ¶ | skipping to change at page 11, line 22 ¶ | |||
| For example, a client coded to support 'foo' package at version 1.0.0 | For example, a client coded to support 'foo' package at version 1.0.0 | |||
| should interoperate with a server implementing 'foo' package at | should interoperate with a server implementing 'foo' package at | |||
| version 1.3.5, because the YANG semantic versioning rules require | version 1.3.5, because the YANG semantic versioning rules require | |||
| that package version 1.3.5 is backwards compatible to version 1.0.0. | that package version 1.3.5 is backwards compatible to version 1.0.0. | |||
| This also has a relevance on servers that are capable of supporting | This also has a relevance on servers that are capable of supporting | |||
| version selection because they need not support every version of a | version selection because they need not support every version of a | |||
| YANG package to ensure good client compatibility. Choosing suitable | YANG package to ensure good client compatibility. Choosing suitable | |||
| minor versions within each major version number should generally be | minor versions within each major version number should generally be | |||
| sufficient, particular if they can avoid NBC patch level changes | sufficient, particular if they can avoid non-backwards-compatible | |||
| (i.e. 'M' labeled versions). | patch level changes. | |||
| 5.3.2. Package checksums | 5.3.2. Package checksums | |||
| Each YANG package definition may have a checksum associated with it | Each YANG package definition may have a checksum associated with it | |||
| to allow a client to validate that the package definition of the | to allow a client to validate that the package definition of the | |||
| server matches the expected package definition without downloading | server matches the expected package definition without downloading | |||
| the full package definition from the server. | the full package definition from the server. | |||
| The checksum for a package is calculated using the SHA-256 hash (XXX, | The checksum for a package is calculated using the SHA-256 hash (XXX, | |||
| reference) of the full file contents of the YANG package instance | reference) of the full file contents of the YANG package instance | |||
| data file. This means that the checksum includes all whitespace and | data file. This means that the checksum includes all whitespace and | |||
| formatting, encoding, and all meta-data fields associated with the | formatting, encoding, and all meta-data fields associated with the | |||
| package and the instance data document). | package and the instance data file). | |||
| The checksum for a module is calculated using the SHA-256 hash of the | The checksum for a module is calculated using the SHA-256 hash of the | |||
| YANG module file definition. This means that the checksum includes | YANG module file definition. This means that the checksum includes | |||
| all whitespace, formatting, and comments within the YANG module. | all whitespace, formatting, and comments within the YANG module. | |||
| Packages that are locally scoped to a server may not have an offline | Packages that are locally scoped to a server may not have an offline | |||
| instance data document available, and hence MAY not have a checksum. | instance data file available, and hence MAY not have a checksum. | |||
| The package definition allows URLs and checksums to be specified for | The package definition allows URLs and checksums to be specified for | |||
| all included packages, modules and submodules within the package | all included packages, modules and submodules within the package | |||
| definition. Checksums SHOULD be included in package definitions to | definition. Checksums SHOULD be included in package definitions to | |||
| validate the full integrity of the package. | validate the full integrity of the package. | |||
| On a server, package checksums SHOULD also be provided for the top | On a server, package checksums SHOULD also be provided for the top | |||
| level packages associated with the datastore schema. | level packages associated with the datastore schema. | |||
| 5.3.3. The relationship between packages and datastores | 5.3.3. The relationship between packages and datastores | |||
| As defined by NMDA [RFC8342], each datastore has an associated | As defined by NMDA [RFC8342], each datastore has an associated | |||
| datastore schema. Sections 5.1 and 5.3 of NMDA defines further | datastore schema. Sections 5.1 and 5.3 of NMDA defines further | |||
| constraints on the schema associated with datastores. These | constraints on the schema associated with datastores. These | |||
| constraints can be summarized thus: | constraints can be summarized thus: | |||
| The schema for all conventional datastores is the same. | o The schema for all conventional datastores is the same. | |||
| The schema for non conventional configuration datastores (e.g., | o The schema for non conventional configuration datastores (e.g., | |||
| dynamic datastores) may completely differ (i.e. no overlap at all) | dynamic datastores) may completely differ (i.e. no overlap at all) | |||
| from the schema associated with the conventional configuration | from the schema associated with the conventional configuration | |||
| datastores, or may partially or fully overlap with the schema of | datastores, or may partially or fully overlap with the schema of | |||
| the conventional configuration datastores. A dynamic datastore, | the conventional configuration datastores. A dynamic datastore, | |||
| for example, may support different modules than conventional | for example, may support different modules than conventional | |||
| datastores, or may support a subset or superset of modules, | datastores, or may support a subset or superset of modules, | |||
| features, or data nodes supported in the conventional | features, or data nodes supported in the conventional | |||
| configuration datastores. Where a data node exists in multiple | configuration datastores. Where a data node exists in multiple | |||
| datastore schema it has the same type, properties and semantics. | datastore schema it has the same type, properties and semantics. | |||
| The schema for the operational datastore is intended to be a | o The schema for the operational datastore is intended to be a | |||
| superset of all the configuration datastores (i.e. includes all | superset of all the configuration datastores (i.e. includes all | |||
| the schema nodes from the conventional configuration datastores), | the schema nodes from the conventional configuration datastores), | |||
| but data nodes can be omitted if they cannot be accurately | but data nodes can be omitted if they cannot be accurately | |||
| reported. The operational datastore schema can include additional | reported. The operational datastore schema can include additional | |||
| modules containing only config false data nodes, but there is no | modules containing only config false data nodes, but there is no | |||
| harm in including those modules in the configuration datastore | harm in including those modules in the configuration datastore | |||
| schema as well. | schema as well. | |||
| Given that YANG packages represent a YANG schema, it follows that | Given that YANG packages represent a YANG schema, it follows that | |||
| each datastore schema can be represented using packages. In | each datastore schema can be represented using packages. In | |||
| addition, the schema for most datastores on a server are often | addition, the schema for most datastores on a server are often | |||
| closely related. Given that there are many ways that a datastore | closely related. Given that there are many ways that a datastore | |||
| schema could be represented using packages, the following guidance | schema could be represented using packages, the following guidance | |||
| provides a consistent approach to help clients understand the | provides a consistent approach to help clients understand the | |||
| relationship between the different datastore schema supported by a | relationship between the different datastore schema supported by a | |||
| device (e.g., which parts of the schema are common and which parts | device (e.g., which parts of the schema are common and which parts | |||
| have differences): | have differences): | |||
| Any datastores (e.g., conventional configuration datastores) that | o Any datastores (e.g., conventional configuration datastores) that | |||
| have exactly the same datastore schema MUST use the same package | have exactly the same datastore schema MUST use the same package | |||
| definitions. This is to avoid, for example, the creation of a | definitions. This is to avoid, for example, the creation of a | |||
| 'running-cfg' package and a separate 'intended-cfg' package that | 'running-cfg' package and a separate 'intended-cfg' package that | |||
| have identical schema. | have identical schema. | |||
| Common package definitions SHOULD be used for those parts of the | o Common package definitions SHOULD be used for those parts of the | |||
| datastore schema that are common between datastores, when those | datastore schema that are common between datastores, when those | |||
| datastores do not share exactly the same datastore schema. E.g., | datastores do not share exactly the same datastore schema. E.g., | |||
| if a substantial part of the schema is common between the | if a substantial part of the schema is common between the | |||
| conventional, dynamic, and operational datastores then a single | conventional, dynamic, and operational datastores then a single | |||
| common package can be used to describe the common parts, along | common package can be used to describe the common parts, along | |||
| with other packages to describe the unique parts of each datastore | with other packages to describe the unique parts of each datastore | |||
| schema. | schema. | |||
| YANG modules that do not contain any configuration data nodes | o YANG modules that do not contain any configuration data nodes | |||
| SHOULD be included in the package for configuration datastores if | SHOULD be included in the package for configuration datastores if | |||
| that helps unify the package definitions. | that helps unify the package definitions. | |||
| The packages for the operational datastore schema MUST include all | o The packages for the operational datastore schema MUST include all | |||
| packages for all configuration datastores, along with any required | packages for all configuration datastores, along with any required | |||
| modules defining deviations to mark unsupported data nodes. The | modules defining deviations to mark unsupported data nodes. The | |||
| deviations MAY be defined directly in the packages defining the | deviations MAY be defined directly in the packages defining the | |||
| operational datastore schema, or in separate non referentially | operational datastore schema, or in separate non referentially | |||
| complete packages. | complete packages. | |||
| The schema for a datastore MAY be represented using a single | o The schema for a datastore MAY be represented using a single | |||
| package or as the union of a set of compatible packages, i.e., | package or as the union of a set of compatible packages, i.e., | |||
| equivalently to a set of non-conflicting packages being included | equivalently to a set of non-conflicting packages being included | |||
| together in an overarching package definition. | together in an overarching package definition. | |||
| 5.4. Schema referential completeness | 5.4. Schema referential completeness | |||
| A YANG package may represent a schema that is 'referentially | A YANG package may represent a schema that is 'referentially | |||
| complete', or 'referentially incomplete', indicated in the package | complete', or 'referentially incomplete', indicated in the package | |||
| definition by the 'complete' flag. | definition by the 'complete' flag. | |||
| skipping to change at page 14, line 16 ¶ | skipping to change at page 14, line 22 ¶ | |||
| YANG package names can be globally unique, or locally scoped to a | YANG package names can be globally unique, or locally scoped to a | |||
| particular server or device. | particular server or device. | |||
| 5.5.1. Globally scoped packages | 5.5.1. Globally scoped packages | |||
| The name given to a package MUST be globally unique, and it MUST | The name given to a package MUST be globally unique, and it MUST | |||
| include an appropriate organization prefix in the name, equivalent to | include an appropriate organization prefix in the name, equivalent to | |||
| YANG module naming conventions. | YANG module naming conventions. | |||
| Ideally a YANG instance data document defining a particular package | Ideally a YANG instance data file defining a particular package | |||
| version would be publicly available at one or more URLs. | version would be publicly available at one or more URLs. | |||
| 5.5.2. Server scoped packages | 5.5.2. Server scoped packages | |||
| Package definitions may be scoped to a particular server by setting | Package definitions may be scoped to a particular server by setting | |||
| the 'is-local' leaf to true in the package definition. | the 'is-local' leaf to true in the package definition. | |||
| Locally scoped packages MAY have a package name that is not globally | Locally scoped packages MAY have a package name that is not globally | |||
| unique. | unique. | |||
| Locally scoped packages MAY have a definition that is not available | Locally scoped packages MAY have a definition that is not available | |||
| offline from the server in a YANG instance data document. | offline from the server in a YANG instance data file. | |||
| 5.6. Submodules packages considerations | 5.6. Submodules packages considerations | |||
| As defined in [RFC7950] and [I-D.verdt-netmod-yang-semver], YANG | As defined in [RFC7950] and [I-D.ietf-netmod-yang-semver], YANG | |||
| conformance and versioning is specified in terms of particular | conformance and versioning is specified in terms of particular | |||
| revisions of YANG modules rather than for individual submodules. | revisions of YANG modules rather than for individual submodules. | |||
| However, YANG package definitions also include the list of submodules | However, YANG package definitions also include the list of submodules | |||
| included by a module, primarily to provide a location of where the | included by a module, primarily to provide a location of where the | |||
| submodule definition can be obtained from, allowing a YANG schema to | submodule definition can be obtained from, allowing a YANG schema to | |||
| be fully constructed from a YANG package instance-data file | be fully constructed from a YANG package instance data file | |||
| definition. | definition. | |||
| 5.7. Package tags | 5.7. Package tags | |||
| [I-D.ietf-netmod-module-tags] defines YANG module tags as a mechanism | [I-D.ietf-netmod-module-tags] defines YANG module tags as a mechanism | |||
| to annotate a module definition with additional metadata. Tags MAY | to annotate a module definition with additional metadata. Tags MAY | |||
| also be associated to a package definition via the 'tags' leaf-list. | also be associated to a package definition via the 'tags' leaf-list. | |||
| The tags use the same registry and definitions used by YANG module | The tags use the same registry and definitions used by YANG module | |||
| tags. | tags. | |||
| 5.8. YANG package core definition | 5.8. YANG Package Usage Guidance | |||
| It is RECOMMENDED that organizations that publish YANG modules also | ||||
| publish YANG package definition that group and version those modules | ||||
| into units of related functionality. This increases | ||||
| interoperability, by encouraging implementations to use the same | ||||
| collections of YANG modules versions. Using packages also makes it | ||||
| easier to understand relationship between modules, and enables | ||||
| functionality to be described on a more abstract level than | ||||
| individual modules. | ||||
| 5.8.1. Use of deviations in YANG packages | ||||
| [RFC7950] section 5.6.3 defines deviations as the mechanism to allow | ||||
| servers to indicate where they do not conform to a published YANG | ||||
| module that is being implemented. | ||||
| In cases where implementations contain deviations from published | ||||
| packages, then those implementations SHOULD define a package that | ||||
| includes both the published packages and all modules containing | ||||
| deviations. This implementation specific package accurately reflects | ||||
| the schema used by the device and allows clients to determine how the | ||||
| implementation differs from the published package schema in an | ||||
| offline consumable way, e.g., when published in an instance data file | ||||
| (see section 6). | ||||
| Organizations may wish to reuse YANG modules and YANG packages | ||||
| published by other organizations for new functionality. Sometimes, | ||||
| they may desire to modify the published YANG modules. However, they | ||||
| MUST NOT use deviations in an attempt to achieve this because such | ||||
| deviations cause two problems: | ||||
| They prevent implementations from reporting their own deviations | ||||
| for the same nodes. | ||||
| They fracture the ecosystem by preventing implementations from | ||||
| conforming to the standards specified by both organizations. This | ||||
| hurts the interoperability in the YANG community, promotes | ||||
| development of disconnected functional silos, and hurts creativity | ||||
| in the market. | ||||
| 5.8.2. Use of features in YANG modules and YANG packages | ||||
| The YANG language supports feature statements as the mechanism to | ||||
| make parts of a schema optional. Published standard YANG modules | ||||
| SHOULD make use of appropriate feature statements to provide | ||||
| flexibility in how YANG modules may be used by implementations and | ||||
| used by YANG modules published by other organizations. | ||||
| YANG packages support 'mandatory features' which allow a package to | ||||
| specify features that MUST be implemented by any conformant | ||||
| implementation of the package as a mechanism to simplify and manage | ||||
| the schema represented by a YANG package. | ||||
| 5.9. YANG package core definition | ||||
| The ietf-yang-package-types.yang module defines a grouping to specify | The ietf-yang-package-types.yang module defines a grouping to specify | |||
| the core elements of the YANG package structure that is used within | the core elements of the YANG package structure that is used within | |||
| YANG package instance data documents (ietf-yang-package- | YANG package instance data files (ietf-yang-package-instance.yang) | |||
| instance.yang) and also on the server (ietf-yang-packages.yang). | and also on the server (ietf-yang-packages.yang). | |||
| The "ietf-yang-package-types" YANG module has the following | The "ietf-yang-package-types" YANG module has the following | |||
| structure: | structure: | |||
| module: ietf-yang-package-types | module: ietf-yang-package-types | |||
| grouping yang-pkg-identification-leafs | grouping yang-pkg-identification-leafs | |||
| +-- name pkg-name | +-- name pkg-name | |||
| +-- version pkg-version | +-- version pkg-version | |||
| skipping to change at page 16, line 19 ¶ | skipping to change at page 17, line 32 ¶ | |||
| +-- replaces-revision* rev:revision-date-or-label | +-- replaces-revision* rev:revision-date-or-label | |||
| +-- namespace? inet:uri | +-- namespace? inet:uri | |||
| +-- location* inet:uri | +-- location* inet:uri | |||
| +-- checksum? pkg-types:sha-256-hash | +-- checksum? pkg-types:sha-256-hash | |||
| +-- submodule* [name] | +-- submodule* [name] | |||
| +-- name? yang:yang-identifier | +-- name? yang:yang-identifier | |||
| +-- revision yang:revision-identifier | +-- revision yang:revision-identifier | |||
| +-- location* inet:uri | +-- location* inet:uri | |||
| +-- checksum? pkg-types:sha-256-hash | +-- checksum? pkg-types:sha-256-hash | |||
| 6. Package Instance Data Documents | 6. Package Instance Data Files | |||
| YANG packages SHOULD be available offline from the server, defined as | YANG packages SHOULD be available offline from the server, defined as | |||
| YANG instance data documents | YANG instance data files [I-D.ietf-netmod-yang-instance-file-format] | |||
| [I-D.ietf-netmod-yang-instance-file-format] using the YANG schema | using the YANG schema below to define the package data. | |||
| below to define the package data. | ||||
| The format of the YANG package instance file MUST follow the | The following rules apply to the format of the YANG package instance | |||
| following rules: | files: | |||
| The file SHOULD be encoded in JSON. | 1. The file SHOULD be encoded in JSON. | |||
| The name of the file SHOULD follow the format "<package- | 2. The name of the file SHOULD follow the format "<package- | |||
| name>@<version>.json". | name>@<version>.json". | |||
| The package name MUST be specified in both the instance-data-set | 3. The package name MUST be specified in both the instance-data-set | |||
| 'name' and package 'name' leafs. | 'name' and package 'name' leafs. | |||
| The 'description' field of the instance-data-set SHOULD be "YANG | 4. The 'description' field of the instance-data-set SHOULD be "YANG | |||
| package definition". | package definition". | |||
| The 'timestamp', "organization', 'contact' fields are defined in | 5. The 'timestamp', "organization', 'contact' fields are defined in | |||
| both the instance-data-set metadata and the YANG package metadata. | both the instance-data-set metadata and the YANG package | |||
| Package definitions SHOULD only define these fields as part of the | metadata. Package definitions SHOULD only define these fields as | |||
| package definition. If any of these fields are populated in the | part of the package definition. If any of these fields are | |||
| instance-data-set metadata then they MUST contain the same value | populated in the instance-data-set metadata then they MUST | |||
| as the corresponding leaves in the package definition. | contain the same value as the corresponding leaves in the package | |||
| definition. | ||||
| The 'revision' list in the instance data document SHOULD NOT be | 6. The 'revision' list in the instance data file SHOULD NOT be used, | |||
| used, since versioning is handled by the package definition. | since versioning is handled by the package definition. | |||
| The instance data document for each version of a YANG package | 7. The instance data file for each version of a YANG package SHOULD | |||
| SHOULD be made available at one of more locations accessible via | be made available at one of more locations accessible via URLs. | |||
| URLs. If one of the listed locations defines a definitive | If one of the listed locations defines a definitive reference | |||
| reference implementation for the package definition then it MUST | implementation for the package definition then it MUST be listed | |||
| be listed as the first entry in the list. | as the first entry in the list. | |||
| The "ietf-yang-package" YANG module has the following structure: | The "ietf-yang-package" YANG module has the following structure: | |||
| module: ietf-yang-package | module: ietf-yang-package | |||
| structure package: | structure package: | |||
| // Uses the yang-package-instance grouping defined in | // Uses the yang-package-instance grouping defined in | |||
| // ietf-yang-package-types.yang | // ietf-yang-package-types.yang | |||
| +-- name pkg-name | +-- name pkg-name | |||
| +-- version pkg-version | +-- version pkg-version | |||
| ... remainder of yang-package-instance grouping ... | ... remainder of yang-package-instance grouping ... | |||
| 7. Package Definitions on a Server | 7. Package Definitions on a Server | |||
| 7.1. Package List | 7.1. Package List | |||
| A top level 'packages' container holds the list of all versions of | A top level 'packages' container holds the list of all versions of | |||
| all packages known to the server. Each list entry uses the common | all packages known to the server. Each list entry uses the common | |||
| package definition, but with the addition of package location and | package definition, but with the addition of package location and | |||
| checksum information that cannot be contained within a offline | checksum information that cannot be contained within a offline | |||
| package definition contained in an instance data document. | package definition contained in an instance data file. | |||
| The '/packages/package' list MAY include multiple versions of a | The '/packages/package' list MAY include multiple versions of a | |||
| particular package. E.g. if the server is capable of allowing | particular package. E.g. if the server is capable of allowing | |||
| clients to select which package versions should be used by the | clients to select which package versions should be used by the | |||
| server. | server. | |||
| 7.2. Tree diagram | 7.2. Tree diagram | |||
| The "ietf-yang-packages" YANG module has the following structure: | The "ietf-yang-packages" YANG module has the following structure: | |||
| module: ietf-yang-packages | module: ietf-yang-packages | |||
| +--ro packages | +--ro packages | |||
| +--ro package* [name version] | +--ro package* [name version] | |||
| // Uses the yang-package-instance grouping defined in | // Uses the yang-package-instance grouping defined in | |||
| // ietf-yang-package-types.yang, with location and checksum: | // ietf-yang-package-types.yang, with location and checksum: | |||
| +--ro name pkg-name | +--ro name pkg-name | |||
| +--ro version pkg-version | +--ro version pkg-version | |||
| ... remainder of yang-package-instance grouping ... | ... remainder of yang-package-instance grouping ... | |||
| +--ro location* inet:uri | +--ro location* inet:uri | |||
| +--ro checksum? pkg-types:sha-256-hash | +--ro checksum? pkg-types:sha-256-hash | |||
| 8. YANG Library Package Bindings | 8. YANG Library Package Bindings | |||
| The YANG packages module also augments YANG library to allow a server | The YANG packages module also augments YANG library to allow a server | |||
| to optionally indicate that a datastore schema is defined by a | to optionally indicate that a datastore schema is defined by a | |||
| package, or a union of compatible packages. Since packages can | package, or a union of compatible packages. Since packages can | |||
| generally be made available offline in instance data documents, it | generally be made available offline in instance data files, it may be | |||
| may be sufficient for a client to only check that a compatible | sufficient for a client to only check that a compatible version of | |||
| version of the package is implemented by the server without fetching | the package is implemented by the server without fetching either the | |||
| either the package definition, or downloading and comparing the full | package definition, or downloading and comparing the full list of | |||
| list of modules and enabled features. | modules and enabled features. | |||
| If a server indicates that a datastore schema maps to a particular | If a server indicates that a datastore schema maps to a particular | |||
| package, then it MUST exactly match the schema defined by that | package, then it MUST exactly match the schema defined by that | |||
| package, taking into account enabled features and any deviations. | package, taking into account enabled features and any deviations. | |||
| If a server cannot faithfully implement a package then it can define | If a server cannot faithfully implement a package then it can define | |||
| a new package to accurately report what it does implement. The new | a new package to accurately report what it does implement. The new | |||
| package can include the original package as an included package, and | package can include the original package as an included package, and | |||
| the new package can define additional modules containing deviations | the new package can define additional modules containing deviations | |||
| to the modules in the original package, allowing the new package to | to the modules in the original package, allowing the new package to | |||
| skipping to change at page 19, line 17 ¶ | skipping to change at page 20, line 17 ¶ | |||
| module: ietf-yl-packages | module: ietf-yl-packages | |||
| augment /yanglib:yang-library/yanglib:schema: | augment /yanglib:yang-library/yanglib:schema: | |||
| +--ro package* [name version] | +--ro package* [name version] | |||
| +--ro name -> /pkgs:packages/package/name | +--ro name -> /pkgs:packages/package/name | |||
| +--ro version leafref | +--ro version leafref | |||
| +--ro checksum? leafref | +--ro checksum? leafref | |||
| 9. YANG packages as schema for YANG instance data document | 9. YANG packages as schema for YANG instance data document | |||
| YANG package definitions can be used as the schema definition for | YANG package definitions can be used as the schema definition for | |||
| YANG instance data documents. When using a package schema, the name | YANG instance data files. When using a package schema, the name and | |||
| and version of the package MUST be specified, a package checksum and/ | version of the package MUST be specified, a package checksum and/or | |||
| or URL to the package definition MAY also be provided. | URL to the package definition MAY also be provided. | |||
| The "ietf-yang-inst-data-pkg" YANG module has the following | The "ietf-yang-inst-data-pkg" YANG module has the following | |||
| structure: | structure: | |||
| module: ietf-yang-inst-data-pkg | module: ietf-yang-inst-data-pkg | |||
| augment-structure /yid:instance-data-set/yid:content-schema-spec: | augment-structure /yid:instance-data-set/yid:content-schema-spec: | |||
| +--:(pkg-schema) | +--:(pkg-schema) | |||
| +-- pkg-schema | +-- pkg-schema | |||
| +-- name pkg-name | +-- name pkg-name | |||
| skipping to change at page 41, line 18 ¶ | skipping to change at page 42, line 18 ¶ | |||
| operations and content. | operations and content. | |||
| Similarly to YANG library [I-D.ietf-netconf-rfc7895bis], some of the | Similarly to YANG library [I-D.ietf-netconf-rfc7895bis], some of the | |||
| readable data nodes in these YANG modules may be considered sensitive | readable data nodes in these YANG modules may be considered sensitive | |||
| or vulnerable in some network environments. It is thus important to | or vulnerable in some network environments. It is thus important to | |||
| control read access (e.g., via get, get-config, or notification) to | control read access (e.g., via get, get-config, or notification) to | |||
| these data nodes. | these data nodes. | |||
| One additional key different to YANG library, is that the 'ietf-yang- | One additional key different to YANG library, is that the 'ietf-yang- | |||
| package' YANG module defines a schema to allow YANG packages to be | package' YANG module defines a schema to allow YANG packages to be | |||
| defined in YANG instance data documents, that are outside the | defined in YANG instance data files, that are outside the security | |||
| security controls of the network management protocols. Hence, it is | controls of the network management protocols. Hence, it is important | |||
| important to also consider controlling access to these package | to also consider controlling access to these package instance data | |||
| instance data documents to restrict access to sensitive information. | files to restrict access to sensitive information. SHA-256 checksums | |||
| SHA-256 checksums are used to ensure the integrity of YANG package | are used to ensure the integrity of YANG package definitions, | |||
| definitions, imported modules, and sub-modules. | imported modules, and sub-modules. | |||
| As per the YANG library security considerations, the module, revision | As per the YANG library security considerations, the module, revision | |||
| and version information in YANG packages may help an attacker | and version information in YANG packages may help an attacker | |||
| identify the server capabilities and server implementations with | identify the server capabilities and server implementations with | |||
| known bugs since the set of YANG modules supported by a server may | known bugs since the set of YANG modules supported by a server may | |||
| reveal the kind of device and the manufacturer of the device. Server | reveal the kind of device and the manufacturer of the device. Server | |||
| vulnerabilities may be specific to particular modules, module | vulnerabilities may be specific to particular modules, module | |||
| revisions, module features, or even module deviations. For example, | revisions, module features, or even module deviations. For example, | |||
| if a particular operation on a particular data node is known to cause | if a particular operation on a particular data node is known to cause | |||
| a server to crash or significantly degrade device performance, then | a server to crash or significantly degrade device performance, then | |||
| skipping to change at page 43, line 14 ¶ | skipping to change at page 44, line 14 ¶ | |||
| Reference: RFC XXXX | Reference: RFC XXXX | |||
| 13. Open Questions/Issues | 13. Open Questions/Issues | |||
| All issues, along with the draft text, are currently being tracked at | All issues, along with the draft text, are currently being tracked at | |||
| https://github.com/rgwilton/YANG-Packages-Draft/issues/ | https://github.com/rgwilton/YANG-Packages-Draft/issues/ | |||
| 14. Acknowledgements | 14. Acknowledgements | |||
| Feedback helping shape this document has kindly been provided by Andy | Feedback helping shape this document has kindly been provided by Andy | |||
| Bierman, Bo Wang, Joe Clarke, James Cumming, Mahesh Jethanandani, | Bierman, James Cumming, Mahesh Jethanandani, Balazs Lengyel, Ladislav | |||
| Balazs Lengyel, Ladislav Lhotka, Jason Sterne, and Reshad Rahman. | Lhotka,and Jan Lindblad. | |||
| 15. References | 15. References | |||
| 15.1. Normative References | 15.1. Normative References | |||
| [I-D.ietf-netconf-rfc7895bis] | [I-D.ietf-netconf-rfc7895bis] | |||
| Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | |||
| and R. Wilton, "YANG Library", draft-ietf-netconf- | and R. Wilton, "YANG Library", draft-ietf-netconf- | |||
| rfc7895bis-07 (work in progress), October 2018. | rfc7895bis-07 (work in progress), October 2018. | |||
| skipping to change at page 43, line 38 ¶ | skipping to change at page 44, line 38 ¶ | |||
| Tags", draft-ietf-netmod-module-tags-10 (work in | Tags", draft-ietf-netmod-module-tags-10 (work in | |||
| progress), February 2020. | progress), February 2020. | |||
| [I-D.ietf-netmod-yang-data-ext] | [I-D.ietf-netmod-yang-data-ext] | |||
| Bierman, A., Bjorklund, M., and K. Watsen, "YANG Data | Bierman, A., Bjorklund, M., and K. Watsen, "YANG Data | |||
| Structure Extensions", draft-ietf-netmod-yang-data-ext-05 | Structure Extensions", draft-ietf-netmod-yang-data-ext-05 | |||
| (work in progress), December 2019. | (work in progress), December 2019. | |||
| [I-D.ietf-netmod-yang-instance-file-format] | [I-D.ietf-netmod-yang-instance-file-format] | |||
| Lengyel, B. and B. Claise, "YANG Instance Data File | Lengyel, B. and B. Claise, "YANG Instance Data File | |||
| Format", draft-ietf-netmod-yang-instance-file-format-08 | Format", draft-ietf-netmod-yang-instance-file-format-12 | |||
| (work in progress), March 2020. | (work in progress), April 2020. | |||
| [I-D.verdt-netmod-yang-module-versioning] | [I-D.ietf-netmod-yang-module-versioning] | |||
| Claise, B., Clarke, J., Rahman, R., Wilton, R., Lengyel, | Wilton, R., Rahman, R., Lengyel, B., Clarke, J., Sterne, | |||
| B., Sterne, J., and K. D'Souza, "Updated YANG Module | J., Claise, B., and K. D'Souza, "Updated YANG Module | |||
| Revision Handling", draft-verdt-netmod-yang-module- | Revision Handling", draft-ietf-netmod-yang-module- | |||
| versioning-01 (work in progress), October 2019. | versioning-01 (work in progress), July 2020. | |||
| [I-D.verdt-netmod-yang-semver] | [I-D.ietf-netmod-yang-semver] | |||
| Claise, B., Clarke, J., Rahman, R., Wilton, R., Lengyel, | Claise, B., Clarke, J., Rahman, R., Wilton, R., Lengyel, | |||
| B., Sterne, J., and K. D'Souza, "YANG Semantic | B., Sterne, J., and K. D'Souza, "YANG Semantic | |||
| Versioning", draft-verdt-netmod-yang-semver-01 (work in | Versioning", draft-ietf-netmod-yang-semver-01 (work in | |||
| progress), October 2019. | progress), July 2020. | |||
| [I-D.verdt-netmod-yang-solutions] | [I-D.ietf-netmod-yang-solutions] | |||
| Wilton, R., "YANG Versioning Solution Overview", draft- | Wilton, R., "YANG Versioning Solution Overview", draft- | |||
| verdt-netmod-yang-solutions-03 (work in progress), | ietf-netmod-yang-solutions-00 (work in progress), March | |||
| February 2020. | 2020. | |||
| [I-D.verdt-netmod-yang-versioning-reqs] | ||||
| Clarke, J., "YANG Module Versioning Requirements", draft- | ||||
| verdt-netmod-yang-versioning-reqs-02 (work in progress), | ||||
| November 2018. | ||||
| [I-D.wilton-netmod-yang-ver-selection] | [I-D.ietf-netmod-yang-ver-selection] | |||
| Wilton, R., Rahman, R., Clarke, J., Sterne, J., and W. Bo, | Wilton, R., Rahman, R., Clarke, J., Sterne, J., and W. Bo, | |||
| "YANG Schema Selection", draft-wilton-netmod-yang-ver- | "YANG Schema Selection", draft-ietf-netmod-yang-ver- | |||
| selection-02 (work in progress), February 2020. | selection-00 (work in progress), March 2020. | |||
| [I-D.ietf-netmod-yang-versioning-reqs] | ||||
| Clarke, J., "YANG Module Versioning Requirements", draft- | ||||
| ietf-netmod-yang-versioning-reqs-03 (work in progress), | ||||
| June 2020. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] 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/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| skipping to change at page 46, line 13 ¶ | skipping to change at page 47, line 13 ¶ | |||
| dependencies work. It does not imply that such packages will be | dependencies work. It does not imply that such packages will be | |||
| defined by IETF, or which modules would be included in those packages | defined by IETF, or which modules would be included in those packages | |||
| even if they were defined. For brevity, the examples exclude | even if they were defined. For brevity, the examples exclude | |||
| namespace declarations, and use a shortened URL of "tiny.cc/ietf- | namespace declarations, and use a shortened URL of "tiny.cc/ietf- | |||
| yang" as a replacement for | yang" as a replacement for | |||
| "https://raw.githubusercontent.com/YangModels/yang/master/standard/ | "https://raw.githubusercontent.com/YangModels/yang/master/standard/ | |||
| ietf/RFC". | ietf/RFC". | |||
| A.1. Example IETF Network Device YANG package | A.1. Example IETF Network Device YANG package | |||
| This section provides an instance data document example of an IETF | This section provides an instance data file example of an IETF | |||
| Network Device YANG package formatted in JSON. | Network Device YANG package formatted in JSON. | |||
| This example package is intended to represent the standard set of | This example package is intended to represent the standard set of | |||
| YANG modules, with import dependencies, to implement a basic network | YANG modules, with import dependencies, to implement a basic network | |||
| device without any dynamic routing or layer 2 services. E.g., it | device without any dynamic routing or layer 2 services. E.g., it | |||
| includes functionality such as system information, interface and | includes functionality such as system information, interface and | |||
| basic IP configuration. | basic IP configuration. | |||
| As for all YANG packages, all import dependencies are fully resolved. | As for all YANG packages, all import dependencies are fully resolved. | |||
| Because this example uses YANG modules that have been standardized | Because this example uses YANG modules that have been standardized | |||
| skipping to change at page 48, line 35 ¶ | skipping to change at page 49, line 35 ¶ | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| A.2. Example IETF Basic Routing YANG package | A.2. Example IETF Basic Routing YANG package | |||
| This section provides an instance data document example of a basic | This section provides an instance data file example of a basic IETF | |||
| IETF Routing YANG package formatted in JSON. | Routing YANG package formatted in JSON. | |||
| This example package is intended to represent the standard set of | This example package is intended to represent the standard set of | |||
| YANG modules, with import dependencies, that builds upon the example- | YANG modules, with import dependencies, that builds upon the example- | |||
| ietf-network-device YANG package to add support for basic dynamic | ietf-network-device YANG package to add support for basic dynamic | |||
| routing and ACLs. | routing and ACLs. | |||
| As for all YANG packages, all import dependencies are fully resolved. | As for all YANG packages, all import dependencies are fully resolved. | |||
| Because this example uses YANG modules that have been standardized | Because this example uses YANG modules that have been standardized | |||
| before YANG semantic versioning, they modules are referenced by | before YANG semantic versioning, they modules are referenced by | |||
| revision date rather than version number. Locations have been | revision date rather than version number. Locations have been | |||
| skipping to change at page 54, line 40 ¶ | skipping to change at page 55, line 40 ¶ | |||
| Module tags have been suggested as an alternative solution, and | Module tags have been suggested as an alternative solution, and | |||
| indeed that can address some of the same requirements as YANG | indeed that can address some of the same requirements as YANG | |||
| packages but not all of them. | packages but not all of them. | |||
| Module tags can be used to group or organize YANG modules. However, | Module tags can be used to group or organize YANG modules. However, | |||
| this raises the question of where this tag information is stored. | this raises the question of where this tag information is stored. | |||
| Module tags either require that the YANG module files themselves are | Module tags either require that the YANG module files themselves are | |||
| updated with the module tag information (creating another versioning | updated with the module tag information (creating another versioning | |||
| problem), or for the module tag information to be hosted elsewhere, | problem), or for the module tag information to be hosted elsewhere, | |||
| perhaps in a centralize YANG Catalog, or in instance data documents | perhaps in a centralize YANG Catalog, or in instance data files | |||
| similar to how YANG packages have been defined in this draft. | similar to how YANG packages have been defined in this draft. | |||
| One of the principle aims of YANG packages is to be a versioned | One of the principle aims of YANG packages is to be a versioned | |||
| object that defines a precise set of YANG modules versions that work | object that defines a precise set of YANG modules versions that work | |||
| together. Module tags cannot meet this aim without an explosion of | together. Module tags cannot meet this aim without an explosion of | |||
| module tags definitions (i.e. a separate module tag must be defined | module tags definitions (i.e. a separate module tag must be defined | |||
| for each package version). | for each package version). | |||
| Module tags cannot support the hierachical scheme to construct YANG | Module tags cannot support the hierachical scheme to construct YANG | |||
| schema that is proposed in this draft. | schema that is proposed in this draft. | |||
| B.2. Using YANG library | B.2. Using YANG library | |||
| Another question is whether it is necessary to define new YANG | Another question is whether it is necessary to define new YANG | |||
| modules to define YANG packages, and whether YANG library could just | modules to define YANG packages, and whether YANG library could just | |||
| be reused in an instance data document. The use of YANG packages | be reused in an instance data file. The use of YANG packages offers | |||
| offers several benefits over just using YANG library: | several benefits over just using YANG library: | |||
| 1. Packages allow schema to be built in a hierarchical fashion. | 1. Packages allow schema to be built in a hierarchical fashion. | |||
| [I-D.ietf-netconf-rfc7895bis] only allows one layer of hierarchy | [I-D.ietf-netconf-rfc7895bis] only allows one layer of hierarchy | |||
| (using module sets), and there must be no conflicts between | (using module sets), and there must be no conflicts between | |||
| module revisions in different module-sets. | module revisions in different module-sets. | |||
| 2. Packages can be made available off the box, with a well defined | 2. Packages can be made available off the box, with a well defined | |||
| unique name, avoiding the need for clients to download, and | unique name, avoiding the need for clients to download, and | |||
| construct/check the entire YANG schema for each device. Instead | construct/check the entire YANG schema for each device. Instead | |||
| they can rely on the named packages with secure checksums. YANG | they can rely on the named packages with secure checksums. YANG | |||
| library's use of a 'content-id' is unique only to the device that | library's use of a 'content-id' is unique only to the device that | |||
| generated them. | generated them. | |||
| 3. Packages may be versioned using a semantic versioning scheme, | 3. Packages may be versioned using a semantic versioning scheme, | |||
| YANG library does not provide a schema level semantic version | YANG library does not provide a schema level semantic version | |||
| number. | number. | |||
| 4. For a YANG library instance data document to contain the | 4. For a YANG library instance data file to contain the necessary | |||
| necessary information, it probably needs both YANG library and | information, it probably needs both YANG library and various | |||
| various augmentations (e.g. to include each module's semantic | augmentations (e.g. to include each module's semantic version | |||
| version number), unless a new version of YANG library is defined | number), unless a new version of YANG library is defined | |||
| containing this information. The module definition for a YANG | containing this information. The module definition for a YANG | |||
| package is specified to contain all of the ncessary information | package is specified to contain all of the ncessary information | |||
| to solve the problem without augmentations | to solve the problem without augmentations | |||
| 5. YANG library is designed to publish information about the | 5. YANG library is designed to publish information about the | |||
| modules, datastores, and datastore schema used by a server. The | modules, datastores, and datastore schema used by a server. The | |||
| information required to construct an off box schema is not | information required to construct an off box schema is not | |||
| precisely the same, and hence the definitions might deviate from | precisely the same, and hence the definitions might deviate from | |||
| each other over time. | each other over time. | |||
| skipping to change at page 56, line 19 ¶ | skipping to change at page 57, line 19 ¶ | |||
| Joe Clarke | Joe Clarke | |||
| Cisco Systems, Inc. | Cisco Systems, Inc. | |||
| Email: jclarke@cisco.com | Email: jclarke@cisco.com | |||
| Jason Sterne | Jason Sterne | |||
| Nokia | Nokia | |||
| Email: jason.sterne@nokia.com | Email: jason.sterne@nokia.com | |||
| Bo Wu | Bo Wu (editor) | |||
| Huawei | Huawei | |||
| Email: lana.wubo@huawei.com | Email: lana.wubo@huawei.com | |||
| End of changes. 101 change blocks. | ||||
| 204 lines changed or deleted | 270 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/ | ||||