summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8407.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8407.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8407.txt')
-rw-r--r--doc/rfc/rfc8407.txt3531
1 files changed, 3531 insertions, 0 deletions
diff --git a/doc/rfc/rfc8407.txt b/doc/rfc/rfc8407.txt
new file mode 100644
index 0000000..cee4afd
--- /dev/null
+++ b/doc/rfc/rfc8407.txt
@@ -0,0 +1,3531 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) A. Bierman
+Request for Comments: 8407 YumaWorks
+BCP: 216 October 2018
+Obsoletes: 6087
+Category: Best Current Practice
+ISSN: 2070-1721
+
+
+ Guidelines for Authors and Reviewers of Documents
+ Containing YANG Data Models
+
+Abstract
+
+ This memo provides guidelines for authors and reviewers of
+ specifications containing YANG modules. Recommendations and
+ procedures are defined, which are intended to increase
+ interoperability and usability of Network Configuration Protocol
+ (NETCONF) and RESTCONF protocol implementations that utilize YANG
+ modules. This document obsoletes RFC 6087.
+
+Status of This Memo
+
+ This memo documents an Internet Best Current Practice.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ BCPs is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8407.
+
+Copyright Notice
+
+ Copyright (c) 2018 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+
+
+Bierman Best Current Practice [Page 1]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 1.1. Changes since RFC 6087 . . . . . . . . . . . . . . . . . 5
+ 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6
+ 2.1. NETCONF Terms . . . . . . . . . . . . . . . . . . . . . . 7
+ 2.2. YANG Terms . . . . . . . . . . . . . . . . . . . . . . . 7
+ 2.3. NMDA Terms . . . . . . . . . . . . . . . . . . . . . . . 7
+ 2.4. Requirements Notation . . . . . . . . . . . . . . . . . . 8
+ 3. General Documentation Guidelines . . . . . . . . . . . . . . 8
+ 3.1. Module Copyright . . . . . . . . . . . . . . . . . . . . 9
+ 3.2. Code Components . . . . . . . . . . . . . . . . . . . . . 9
+ 3.2.1. Example Modules . . . . . . . . . . . . . . . . . . . 9
+ 3.3. Terminology Section . . . . . . . . . . . . . . . . . . . 10
+ 3.4. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 10
+ 3.5. Narrative Sections . . . . . . . . . . . . . . . . . . . 10
+ 3.6. Definitions Section . . . . . . . . . . . . . . . . . . . 11
+ 3.7. Security Considerations Section . . . . . . . . . . . . . 11
+ 3.7.1. Security Considerations Section Template . . . . . . 12
+ 3.8. IANA Considerations Section . . . . . . . . . . . . . . . 13
+ 3.8.1. Documents That Create a New Namespace . . . . . . . . 14
+ 3.8.2. Documents That Extend an Existing Namespace . . . . . 14
+ 3.9. References Sections . . . . . . . . . . . . . . . . . . . 14
+ 3.10. Validation Tools . . . . . . . . . . . . . . . . . . . . 14
+ 3.11. Module Extraction Tools . . . . . . . . . . . . . . . . . 15
+ 3.12. Module Usage Examples . . . . . . . . . . . . . . . . . . 15
+ 4. YANG Usage Guidelines . . . . . . . . . . . . . . . . . . . . 15
+ 4.1. Module Naming Conventions . . . . . . . . . . . . . . . . 16
+ 4.2. Prefixes . . . . . . . . . . . . . . . . . . . . . . . . 17
+ 4.3. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 18
+ 4.3.1. Identifier Naming Conventions . . . . . . . . . . . . 18
+ 4.4. Defaults . . . . . . . . . . . . . . . . . . . . . . . . 19
+ 4.5. Conditional Statements . . . . . . . . . . . . . . . . . 19
+ 4.6. XPath Usage . . . . . . . . . . . . . . . . . . . . . . . 20
+ 4.6.1. XPath Evaluation Contexts . . . . . . . . . . . . . . 20
+ 4.6.2. Function Library . . . . . . . . . . . . . . . . . . 21
+ 4.6.3. Axes . . . . . . . . . . . . . . . . . . . . . . . . 22
+ 4.6.4. Types . . . . . . . . . . . . . . . . . . . . . . . . 23
+ 4.6.5. Wildcards . . . . . . . . . . . . . . . . . . . . . . 24
+ 4.6.6. Boolean Expressions . . . . . . . . . . . . . . . . . 24
+ 4.7. YANG Definition Lifecycle Management . . . . . . . . . . 25
+ 4.8. Module Header, Meta, and Revision Statements . . . . . . 26
+ 4.9. Namespace Assignments . . . . . . . . . . . . . . . . . . 28
+ 4.10. Top-Level Data Definitions . . . . . . . . . . . . . . . 29
+ 4.11. Data Types . . . . . . . . . . . . . . . . . . . . . . . 30
+ 4.11.1. Fixed-Value Extensibility . . . . . . . . . . . . . 30
+ 4.11.2. Patterns and Ranges . . . . . . . . . . . . . . . . 31
+ 4.11.3. Enumerations and Bits . . . . . . . . . . . . . . . 32
+
+
+
+Bierman Best Current Practice [Page 2]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ 4.11.4. Union Types . . . . . . . . . . . . . . . . . . . . 33
+ 4.11.5. Empty and Boolean . . . . . . . . . . . . . . . . . 34
+ 4.12. Reusable Type Definitions . . . . . . . . . . . . . . . . 35
+ 4.13. Reusable Groupings . . . . . . . . . . . . . . . . . . . 35
+ 4.14. Data Definitions . . . . . . . . . . . . . . . . . . . . 36
+ 4.14.1. Non-Presence Containers . . . . . . . . . . . . . . 38
+ 4.14.2. Top-Level Data Nodes . . . . . . . . . . . . . . . . 38
+ 4.15. Operation Definitions . . . . . . . . . . . . . . . . . . 39
+ 4.16. Notification Definitions . . . . . . . . . . . . . . . . 39
+ 4.17. Feature Definitions . . . . . . . . . . . . . . . . . . . 40
+ 4.18. YANG Data Node Constraints . . . . . . . . . . . . . . . 41
+ 4.18.1. Controlling Quantity . . . . . . . . . . . . . . . . 41
+ 4.18.2. "must" versus "when" . . . . . . . . . . . . . . . . 41
+ 4.19. "augment" Statements . . . . . . . . . . . . . . . . . . 41
+ 4.19.1. Conditional Augment Statements . . . . . . . . . . . 41
+ 4.19.2. Conditionally Mandatory Data Definition Statements . 42
+ 4.20. Deviation Statements . . . . . . . . . . . . . . . . . . 43
+ 4.21. Extension Statements . . . . . . . . . . . . . . . . . . 44
+ 4.22. Data Correlation . . . . . . . . . . . . . . . . . . . . 45
+ 4.22.1. Use of "leafref" for Key Correlation . . . . . . . . 46
+ 4.23. Operational State . . . . . . . . . . . . . . . . . . . . 47
+ 4.23.1. Combining Operational State and Configuration Data . 47
+ 4.23.2. Representing Operational Values of Configuration
+ Data . . . . . . . . . . . . . . . . . . . . . . . . 47
+ 4.23.3. NMDA Transition Guidelines . . . . . . . . . . . . . 48
+ 4.24. Performance Considerations . . . . . . . . . . . . . . . 52
+ 4.25. Open Systems Considerations . . . . . . . . . . . . . . . 52
+ 4.26. Guidelines for Constructs Specific to YANG 1.1 . . . . . 53
+ 4.26.1. Importing Multiple Revisions . . . . . . . . . . . . 53
+ 4.26.2. Using Feature Logic . . . . . . . . . . . . . . . . 53
+ 4.26.3. "anyxml" versus "anydata" . . . . . . . . . . . . . 53
+ 4.26.4. "action" versus "rpc" . . . . . . . . . . . . . . . 53
+ 4.27. Updating YANG Modules (Published versus Unpublished) . . 54
+ 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55
+ 6. Security Considerations . . . . . . . . . . . . . . . . . . . 55
+ 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 56
+ 7.1. Normative References . . . . . . . . . . . . . . . . . . 56
+ 7.2. Informative References . . . . . . . . . . . . . . . . . 57
+ Appendix A. Module Review Checklist . . . . . . . . . . . . . . 59
+ Appendix B. YANG Module Template . . . . . . . . . . . . . . . . 61
+ Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 62
+ Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 63
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 3]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+1. Introduction
+
+ The standardization of network configuration interfaces for use with
+ network configuration management protocols, such as the Network
+ Configuration Protocol [RFC6241] and the RESTCONF protocol [RFC8040],
+ requires a modular set of data models that can be reused and extended
+ over time.
+
+ This document defines a set of usage guidelines for documents
+ containing YANG 1.1 [RFC7950] and YANG 1.0 [RFC6020] data models.
+ YANG is used to define the data structures, protocol operations, and
+ notification content used within a NETCONF and/or RESTCONF server. A
+ NETCONF or RESTCONF server that supports a particular YANG module
+ will support client NETCONF and/or RESTCONF operation requests, as
+ indicated by the specific content defined in the YANG module.
+
+ Many YANG constructs are defined as optional to use, such as the
+ "description" statement. However, in order to make YANG modules more
+ useful, it is desirable to define a set of usage guidelines that
+ entails a higher level of compliance than the minimum level defined
+ in the YANG specification [RFC7950].
+
+ In addition, YANG allows constructs such as infinite length
+ identifiers and string values, or top-level mandatory nodes, that a
+ compliant server is not required to support. Only constructs that
+ all servers are required to support can be used in IETF YANG modules.
+
+ This document defines usage guidelines related to the NETCONF
+ operations layer and NETCONF content layer, as defined in [RFC6241],
+ and the RESTCONF methods and RESTCONF resources, as defined in
+ [RFC8040].
+
+ These guidelines are intended to be used by authors and reviewers to
+ improve the readability and interoperability of published YANG data
+ models.
+
+ Note that this document is not a YANG tutorial, and the reader is
+ expected to know the YANG data modeling language before implementing
+ the guidance in this document.
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 4]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+1.1. Changes since RFC 6087
+
+ The following changes have been made to the guidelines published in
+ [RFC6087]:
+
+ o Updated NETCONF reference from RFC 4741 to RFC 6241
+
+ o Updated NETCONF over the Secure Shell (SSH) citation from RFC 4742
+ to RFC 6242
+
+ o Updated YANG Types reference from RFC 6021 to RFC 6991
+
+ o Updated obsolete URLs for IETF resources
+
+ o Changed top-level data node guideline
+
+ o Clarified XML Path Language (XPath) usage for a literal value
+ representing a YANG identity
+
+ o Clarified XPath usage for a when-stmt
+
+ o Clarified XPath usage for "preceding-sibling" and
+ "following-sibling" axes
+
+ o Added terminology guidelines
+
+ o Added mention of RFC 8174, which updates RFC 2119 by clarifying
+ the use of capitalized key words
+
+ o Added YANG tree diagram guidelines
+
+ o Updated XPath guidelines for type conversions and function library
+ usage
+
+ o Updated "Data Types" section
+
+ o Updated "Notification Definitions" section
+
+ o Clarified conditional key leaf nodes
+
+ o Clarified usage of "uint64" and "int64" data types
+
+ o Added text on YANG feature usage
+
+ o Added "Identifier Naming Conventions" section
+
+ o Clarified use of mandatory nodes with conditional augmentations
+
+
+
+
+Bierman Best Current Practice [Page 5]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o Clarified namespace and domain conventions for example modules
+
+ o Clarified conventions for identifying code components
+
+ o Added YANG 1.1 guidelines
+
+ o Added "YANG Data Node Constraints" section
+
+ o Added mention of the RESTCONF protocol
+
+ o Added guidelines for datastores revised by the Network Management
+ Datastore Architecture (NMDA)
+
+2. Terminology
+
+ The following terms are used throughout this document:
+
+ o published: A stable release of a module or submodule. For
+ example, the "Request for Comments" described in Section 2.1 of
+ [RFC2026] is considered a stable publication.
+
+ o unpublished: An unstable release of a module or submodule. For
+ example the "Internet-Draft" described in Section 2.2 of [RFC2026]
+ is considered an unstable publication that is a work in progress,
+ subject to change at any time.
+
+ o YANG fragment: A set of YANG statements that are not intended to
+ represent a complete YANG module or submodule. These statements
+ are not intended for actual use, except to provide an example of
+ YANG statement usage. The invalid syntax "..." is sometimes used
+ to indicate that additional YANG statements would be present in a
+ real YANG module.
+
+ o YANG tree diagram: A diagram representing the contents of a YANG
+ module, as defined in [RFC8340]. It is also called a "tree
+ diagram".
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 6]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+2.1. NETCONF Terms
+
+ The following terms are defined in [RFC6241] and are not redefined
+ here:
+
+ o capabilities
+
+ o client
+
+ o operation
+
+ o server
+
+2.2. YANG Terms
+
+ The following terms are defined in [RFC7950] and are not redefined
+ here:
+
+ o data node
+
+ o module
+
+ o namespace
+
+ o submodule
+
+ o version
+
+ o YANG
+
+ o YIN
+
+ Note that the term 'module' may be used as a generic term for a YANG
+ module or submodule. When describing properties that are specific to
+ submodules, the term 'submodule' is used instead.
+
+2.3. NMDA Terms
+
+ The following terms are defined in [RFC8342] and are not redefined
+ here:
+
+ o configuration
+
+ o conventional configuration datastore
+
+ o datastore
+
+
+
+
+
+Bierman Best Current Practice [Page 7]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o operational state
+
+ o operational state datastore
+
+2.4. Requirements Notation
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+3. General Documentation Guidelines
+
+ YANG modules under review are likely to be contained in Internet-
+ Drafts (I-Ds). All guidelines for I-D authors [ID-Guidelines] MUST
+ be followed. The guidelines for RFCs should be followed and are
+ defined in the following: [RFC7322] (and any future RFCs that
+ obsolete it), [RFC-STYLE], and [RFC7841].
+
+ The following sections MUST be present in an I-D containing a module:
+
+ o Narrative sections
+
+ o Definition sections
+
+ o Security Considerations section
+
+ o IANA Considerations section
+
+ o References section
+
+ There are three usage scenarios for YANG that can appear in an I-D or
+ RFC:
+
+ o normative module or submodule
+
+ o example module or submodule
+
+ o example YANG fragment not part of any module or submodule
+
+ The guidelines in this document refer mainly to a normative module or
+ submodule but may be applicable to example modules and YANG fragments
+ as well.
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 8]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+3.1. Module Copyright
+
+ The module "description" statement MUST contain a reference to the
+ latest approved IETF Trust Copyright statement, which is available
+ online at:
+
+ <https://trustee.ietf.org/license-info/>
+
+3.2. Code Components
+
+ Each normative YANG module or submodule contained within an I-D or
+ RFC is considered to be a code component. The strings "<CODE
+ BEGINS>" and "<CODE ENDS>" MUST be used to identify each code
+ component.
+
+ The "<CODE BEGINS>" tag SHOULD be followed by a string identifying
+ the file name specified in Section 5.2 of [RFC7950]. The name string
+ form that includes the revision date SHOULD be used. The revision
+ date MUST match the date used in the most recent revision of the
+ module.
+
+ The following example is for the "2016-03-20" revision of the
+ "ietf-foo" module:
+
+ <CODE BEGINS> file "ietf-foo@2016-03-20.yang"
+
+ module ietf-foo {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-foo";
+ prefix "foo";
+ organization "...";
+ contact "...";
+ description "...";
+ revision 2016-03-20 {
+ description "Latest revision";
+ reference "RFC XXXX: Foo Protocol";
+ }
+ // ... more statements
+ }
+
+ <CODE ENDS>
+
+3.2.1. Example Modules
+
+ Example modules are not code components. The <CODE BEGINS>
+ convention MUST NOT be used for example modules.
+
+ An example module SHOULD be named using the term "example", followed
+ by a hyphen, followed by a descriptive name, e.g., "example-toaster".
+
+
+
+Bierman Best Current Practice [Page 9]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ See Section 4.9 regarding the namespace guidelines for example
+ modules.
+
+3.3. Terminology Section
+
+ A terminology section MUST be present if any terms are defined in the
+ document or if any terms are imported from other documents.
+
+3.4. Tree Diagrams
+
+ YANG tree diagrams provide a concise representation of a YANG module
+ and SHOULD be included to help readers understand YANG module
+ structure. Guidelines on tree diagrams can be found in Section 3 of
+ [RFC8340].
+
+ If YANG tree diagrams are used, then an informative reference to the
+ YANG tree diagrams specification MUST be included in the document.
+ Refer to Section 2.2 of [RFC8349] for an example of such a reference.
+
+3.5. Narrative Sections
+
+ The narrative part MUST include an overview section that describes
+ the scope and field of application of the module(s) defined by the
+ specification and that specifies the relationship (if any) of these
+ modules to other standards, particularly to standards containing
+ other YANG modules. The narrative part SHOULD include one or more
+ sections to briefly describe the structure of the modules defined in
+ the specification.
+
+ If the module or modules defined by the specification imports
+ definitions from other modules (except for those defined in [RFC7950]
+ or [RFC6991]) or are always implemented in conjunction with other
+ modules, then those facts MUST be noted in the overview section; any
+ special interpretations of definitions in other modules MUST be noted
+ as well. Refer to Section 2.3 of [RFC8349] for an example of this
+ overview section.
+
+ If the document contains a YANG module(s) that is compliant with NMDA
+ [RFC8342], then the Introduction section should mention this fact.
+
+ Example:
+
+ The YANG data model in this document conforms to the Network
+ Management Datastore Architecture defined in
+ RFC 8342.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 10]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ Consistent indentation SHOULD be used for all examples, including
+ YANG fragments and protocol message instance data. If line wrapping
+ is done for formatting purposes, then this SHOULD be noted, as shown
+ in the following example:
+
+ [note: '\' line wrapping for formatting only]
+
+ <myleaf xmlns="tag:example.com,2017:example-two">\
+ this is a long value so the line needs to wrap to stay\
+ within 72 characters\
+ </myleaf>
+
+3.6. Definitions Section
+
+ This section contains the module(s) defined by the specification.
+ These modules SHOULD be written using the YANG 1.1 [RFC7950] syntax.
+ YANG 1.0 [RFC6020] syntax MAY be used if no YANG 1.1 constructs or
+ semantics are needed in the module. If any of the imported YANG
+ modules are written using YANG 1.1, then the module MUST be written
+ using YANG 1.1.
+
+ A YIN syntax version of the module MAY also be present in the
+ document. There MAY also be other types of modules present in the
+ document, such as Structure of Management Information Version 2
+ (SMIv2), which are not affected by these guidelines.
+
+ Note that if the module itself is considered normative and not an
+ example module or example YANG fragment, then all YANG statements
+ within a YANG module are considered normative. The use of keywords
+ defined in [RFC2119] and [RFC8174] apply to YANG "description"
+ statements in normative modules exactly as they would in any other
+ normative section.
+
+ Example YANG modules and example YANG fragments MUST NOT contain any
+ normative text, including any all-uppercase reserved words from
+ [RFC2119] and [RFC8174].
+
+ Consistent indentation and formatting SHOULD be used in all YANG
+ statements within a module.
+
+ See Section 4 for guidelines on YANG usage.
+
+3.7. Security Considerations Section
+
+ Each specification that defines one or more modules MUST contain a
+ section that discusses security considerations relevant to those
+ modules.
+
+
+
+
+Bierman Best Current Practice [Page 11]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ This section MUST be patterned after the latest approved template
+ (available at <https://trac.ietf.org/trac/ops/wiki/yang-security-
+ guidelines>). Section 3.7.1 contains the security considerations
+ template dated 2013-05-08 and last updated on 2018-07-02. Authors
+ MUST check the web page at the URL listed above in case there is a
+ more recent version available.
+
+ In particular:
+
+ o Writable data nodes that could be especially disruptive if abused
+ MUST be explicitly listed by name, and the associated security
+ risks MUST be explained.
+
+ o Readable data nodes that contain especially sensitive information
+ or that raise significant privacy concerns MUST be explicitly
+ listed by name, and the reasons for the sensitivity/privacy
+ concerns MUST be explained.
+
+ o Operations (i.e., YANG "rpc" statements) that are potentially
+ harmful to system behavior or that raise significant privacy
+ concerns MUST be explicitly listed by name, and the reasons for
+ the sensitivity/privacy concerns MUST be explained.
+
+3.7.1. Security Considerations Section Template
+
+ X. Security Considerations
+
+ The YANG module specified in this document defines a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The NETCONF access control model [RFC8341] provides the means to
+ restrict access for particular NETCONF or RESTCONF users to a
+ preconfigured subset of all available NETCONF or RESTCONF protocol
+ operations and content.
+
+ -- if you have any writable data nodes (those are all the
+ -- "config true" nodes, and remember, that is the default)
+ -- describe their specific sensitivity or vulnerability.
+
+ There are a number of data nodes defined in this YANG module that are
+ writable/creatable/deletable (i.e., "config true", which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+
+
+
+Bierman Best Current Practice [Page 12]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ <list subtrees and data nodes and state why they are sensitive>
+
+ -- for all YANG modules you must evaluate whether any readable data
+ -- nodes (those are all the "config false" nodes, but also all other
+ -- nodes, because they can also be read via operations like get or
+ -- get-config) are sensitive or vulnerable (for instance, if they
+ -- might reveal customer information or violate personal privacy
+ -- laws such as those of the European Union if exposed to
+ -- unauthorized parties)
+
+ Some of the readable data nodes in this YANG module may be considered
+ sensitive or vulnerable in some network environments. It is thus
+ important to control read access (e.g., via get, get-config, or
+ notification) to these data nodes. These are the subtrees and data
+ nodes and their sensitivity/vulnerability:
+
+ <list subtrees and data nodes and state why they are sensitive>
+
+ -- if your YANG module has defined any RPC operations
+ -- describe their specific sensitivity or vulnerability.
+
+ Some of the RPC operations in this YANG module may be considered
+ sensitive or vulnerable in some network environments. It is thus
+ important to control access to these operations. These are the
+ operations and their sensitivity/vulnerability:
+
+ <list RPC operations and state why they are sensitive>
+
+3.8. IANA Considerations Section
+
+ In order to comply with IESG policy as set forth in
+ <https://www.ietf.org/id-info/checklist.html>, every I-D that is
+ submitted to the IESG for publication MUST contain an IANA
+ Considerations section. The requirements for this section vary
+ depending on what actions are required of the IANA. If there are no
+ IANA considerations applicable to the document, then the IANA
+ Considerations section will state that "This document has no IANA
+ actions". Refer to the guidelines in [RFC8126] for more details.
+
+ Each normative YANG module MUST be registered in both the "IETF XML
+ Registry" [RFC3688] [IANA-XML] and the "YANG Module Names" registry
+ [RFC6020] [IANA-MOD-NAMES]. This applies to new modules and updated
+ modules. An example of an update registration for the
+ "ietf-template" module can be found in Section 5.
+
+
+
+Bierman Best Current Practice [Page 13]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+3.8.1. Documents That Create a New Namespace
+
+ If an I-D defines a new namespace that is to be administered by the
+ IANA, then the document MUST include an IANA Considerations section
+ that specifies how the namespace is to be administered.
+
+ Specifically, if any YANG module namespace statement value contained
+ in the document is not already registered with IANA, then a new entry
+ in the "ns" subregistry within the "IETF XML Registry" MUST be
+ requested from the IANA.
+
+3.8.2. Documents That Extend an Existing Namespace
+
+ It is possible to extend an existing namespace using a YANG submodule
+ that belongs to an existing module already administered by IANA. In
+ this case, the document containing the main module MUST be updated to
+ use the latest revision of the submodule.
+
+3.9. References Sections
+
+ For every import or include statement that appears in a module
+ contained in the specification that identifies a module in a separate
+ document, a corresponding normative reference to that document MUST
+ appear in the Normative References section. The reference MUST
+ correspond to the specific module version actually used within the
+ specification.
+
+ For every normative reference statement that appears in a module
+ contained in the specification that identifies a separate document, a
+ corresponding normative reference to that document SHOULD appear in
+ the Normative References section. The reference SHOULD correspond to
+ the specific document version actually used within the specification.
+ If the reference statement identifies an informative reference that
+ identifies a separate document, a corresponding informative reference
+ to that document MAY appear in the Informative References section.
+
+3.10. Validation Tools
+
+ All modules need to be validated before submission in an I-D. The
+ 'pyang' YANG compiler is freely available from GitHub:
+
+ <https://github.com/mbj4668/pyang>
+
+ If the 'pyang' compiler is used to validate a normative module, then
+ the "--ietf" command-line option MUST be used to identify any IETF
+ guideline issues.
+
+
+
+
+
+Bierman Best Current Practice [Page 14]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ If the 'pyang' compiler is used to validate an example module, then
+ the "--ietf" command-line option MAY be used to identify any IETF
+ guideline issues.
+
+ The "yanglint" program is also freely available from GitHub.
+
+ <https://github.com/CESNET/libyang>
+
+ This tool can be used to validate XPath statements within YANG
+ modules.
+
+3.11. Module Extraction Tools
+
+ A version of 'rfcstrip' that will extract YANG modules from an I-D or
+ RFC is available. The 'rfcstrip' tool that supports YANG module
+ extraction is freely available at:
+
+ <https://github.com/mbj4668/rfcstrip>
+
+ This tool can be used to verify that the "<CODE BEGINS>" and "<CODE
+ ENDS>" tags are used correctly and that the normative YANG modules
+ can be extracted correctly.
+
+ The "xym" tool is freely available on GitHub and can be used to
+ extract YANG modules from a document.
+
+ <https://github.com/xym-tool/xym>
+
+3.12. Module Usage Examples
+
+ Each specification that defines one or more modules SHOULD contain
+ usage examples, either throughout the document or in an appendix.
+ This includes example instance document snippets in an appropriate
+ encoding (e.g., XML and/or JSON) to demonstrate the intended usage of
+ the YANG module(s). Example modules MUST be validated. Refer to
+ Section 3.10 for tools that validate YANG modules. If IP addresses
+ are used, then a mix of either IPv4 and IPv6 addresses or IPv6
+ addresses exclusively SHOULD be used in the examples.
+
+4. YANG Usage Guidelines
+
+ Modules in IETF Standards Track specifications MUST comply with all
+ syntactic and semantic requirements of YANG 1.1 [RFC7950]. See the
+ exception for YANG 1.0 in Section 3.6. The guidelines in this
+ section are intended to supplement the YANG specification [RFC7950],
+ which is intended to define a minimum set of conformance
+ requirements.
+
+
+
+
+Bierman Best Current Practice [Page 15]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ In order to promote interoperability and establish a set of practices
+ based on previous experience, the following sections establish usage
+ guidelines for specific YANG constructs.
+
+ Only guidelines that clarify or restrict the minimum conformance
+ requirements are included here.
+
+4.1. Module Naming Conventions
+
+ Normative modules contained in Standards Track documents MUST be
+ named according to the guidelines in the IANA Considerations section
+ of [RFC7950].
+
+ A distinctive word or abbreviation (e.g., protocol name or working
+ group abbreviation) SHOULD be used in the module name. If new
+ definitions are being defined to extend one or more existing modules,
+ then the same word or abbreviation should be reused, instead of
+ creating a new one.
+
+ All published module names MUST be unique. For a YANG module
+ published in an RFC, this uniqueness is guaranteed by IANA. For
+ unpublished modules, the authors need to check that no other work in
+ progress is using the same module name.
+
+ Example modules are non-normative and SHOULD be named with the prefix
+ "example-".
+
+ It is suggested that a stable prefix be selected that represents the
+ entire organization. All normative YANG modules published by the
+ IETF MUST begin with the prefix "ietf-". Another standards
+ organization, such as the IEEE, might use the prefix "ieee-" for all
+ YANG modules.
+
+ Once a module name is published, it MUST NOT be reused, even if the
+ RFC containing the module is reclassified to "Historic" status. A
+ module name cannot be changed in YANG, and this would be treated as a
+ new module, not a name change.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 16]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.2. Prefixes
+
+ All YANG definitions are scoped by the module containing the
+ definition being referenced. This allows definitions from multiple
+ modules to be used, even if the names are not unique. In the example
+ below, the identifier "foo" is used in all three modules:
+
+ module example-foo {
+ namespace "tag:example.com,2017:example-foo";
+ prefix f;
+
+ container foo;
+ }
+
+ module example-bar {
+ namespace "tag:example.com,2017:example-bar";
+ prefix b;
+
+ typedef foo { type uint32; }
+ }
+
+ module example-one {
+ namespace "tag:example.com,2017:example-one";
+ prefix one;
+ import example-foo { prefix f; }
+ import example-bar { prefix b; }
+
+ augment "/f:foo" {
+ leaf foo { type b:foo; }
+ }
+ }
+
+ YANG defines the following rules for prefix usage:
+
+ o Prefixes are never used for built-in data types and YANG keywords.
+
+ o A prefix MUST be used for any external statement (i.e., a
+ statement defined with the YANG "extension" statement).
+
+ o The proper module prefix MUST be used for all identifiers imported
+ from other modules.
+
+ o The proper module prefix MUST be used for all identifiers included
+ from a submodule.
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 17]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following guidelines apply to prefix usage of the current (local)
+ module:
+
+ o The local module prefix SHOULD be used instead of no prefix in all
+ path expressions.
+
+ o The local module prefix MUST be used instead of no prefix in all
+ "default" statements for an "identityref" or "instance-identifier"
+ data type.
+
+ o The local module prefix MAY be used for references to typedefs,
+ groupings, extensions, features, and identities defined in the
+ module.
+
+ Prefix values SHOULD be short but are also likely to be unique.
+ Prefix values SHOULD NOT conflict with known modules that have been
+ previously published.
+
+4.3. Identifiers
+
+ Identifiers for all YANG identifiers in published modules MUST be
+ between 1 and 64 characters in length. These include any construct
+ specified as an "identifier-arg-str" token in the ABNF in Section 14
+ of [RFC7950].
+
+4.3.1. Identifier Naming Conventions
+
+ Identifiers SHOULD follow a consistent naming pattern throughout the
+ module. Only lowercase letters, numbers, and dashes SHOULD be used
+ in identifier names. Uppercase characters, the period character, and
+ the underscore character MAY be used if the identifier represents a
+ well-known value that uses these characters. YANG does not permit
+ any other characters in YANG identifiers.
+
+ Identifiers SHOULD include complete words and/or well-known acronyms
+ or abbreviations. Child nodes within a container or list SHOULD NOT
+ replicate the parent identifier. YANG identifiers are hierarchical
+ and are only meant to be unique within the set of sibling nodes
+ defined in the same module namespace.
+
+ It is permissible to use common identifiers such as "name" or "id" in
+ data definition statements, especially if these data nodes share a
+ common data type.
+
+ Identifiers SHOULD NOT carry any special semantics that identify data
+ modeling properties. Only YANG statements and YANG extension
+ statements are designed to convey machine-readable data modeling
+ properties. For example, naming an object "config" or "state" does
+
+
+
+Bierman Best Current Practice [Page 18]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ not change whether it is configuration data or state data. Only
+ defined YANG statements or YANG extension statements can be used to
+ assign semantics in a machine-readable format in YANG.
+
+4.4. Defaults
+
+ In general, it is suggested that substatements containing very common
+ default values SHOULD NOT be present. The following substatements
+ are commonly used with the default value, which would make the module
+ difficult to read if used everywhere they are allowed.
+
+ +--------------+---------------+
+ | Statement | Default Value |
+ +--------------+---------------+
+ | config | true |
+ | mandatory | false |
+ | max-elements | unbounded |
+ | min-elements | 0 |
+ | ordered-by | system |
+ | status | current |
+ | yin-element | false |
+ +--------------+---------------+
+
+ Statement Defaults
+
+4.5. Conditional Statements
+
+ A module may be conceptually partitioned in several ways, using the
+ "if-feature" and/or "when" statements.
+
+ Data model designers need to carefully consider all modularity
+ aspects, including the use of YANG conditional statements.
+
+ If a data definition is optional, depending on server support for a
+ NETCONF or RESTCONF protocol capability, then a YANG "feature"
+ statement SHOULD be defined. The defined "feature" statement SHOULD
+ then be used in the conditional "if-feature" statement referencing
+ the optional data definition.
+
+ If any notification data, or any data definition, for a non-
+ configuration data node is not mandatory, then the server may or may
+ not be required to return an instance of this data node. If any
+ conditional requirements exist for returning the data node in a
+ notification payload or retrieval request, they MUST be documented
+ somewhere. For example, a "when" or "if-feature" statement could
+ apply to the data node, or the conditional requirements could be
+ explained in a "description" statement within the data node or one of
+ its ancestors (if any).
+
+
+
+Bierman Best Current Practice [Page 19]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ If any "if-feature" statements apply to a list node, then the same
+ "if-feature" statements MUST apply to any key leaf nodes for the
+ list. There MUST NOT be any "if-feature" statements applied to any
+ key leafs that do not also apply to the parent list node.
+
+ There SHOULD NOT be any "when" statements applied to a key leaf node.
+ It is possible that a "when" statement for an ancestor node of a key
+ leaf will have the exact node-set result as the key leaf. In such a
+ case, the "when" statement for the key leaf is redundant and SHOULD
+ be avoided.
+
+4.6. XPath Usage
+
+ This section describes guidelines for using the XML Path Language
+ (XPath) [W3C.REC-xpath] within YANG modules.
+
+4.6.1. XPath Evaluation Contexts
+
+ YANG defines five separate contexts for evaluation of XPath
+ statements:
+
+ 1. The "running" datastore: collection of all YANG configuration
+ data nodes. The document root is the conceptual container (e.g.,
+ "config" in the "edit-config" operation), which is the parent of
+ all top-level data definition statements with a "config"
+ statement value of "true".
+
+ 2. State data + the "running" datastore: collection of all YANG data
+ nodes. The document root is the conceptual container, parent of
+ all top-level data definition statements.
+
+ 3. Notification: an event notification document. The document root
+ is the notification element.
+
+ 4. RPC Input: The document root is the conceptual "input" node,
+ which is the parent of all RPC input parameter definitions.
+
+ 5. RPC Output: The document root is the conceptual "output" node,
+ which is the parent of all RPC output parameter definitions.
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 20]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ Note that these XPath contexts cannot be mixed. For example, a
+ "when" statement in a notification context cannot reference
+ configuration data.
+
+ notification foo {
+ leaf mtu {
+ // NOT okay because when-stmt context is this notification
+ when "/if:interfaces/if:interface[name='eth0']";
+ type leafref {
+ // Okay because path-stmt has a different context
+ path "/if:interfaces/if:interface/if:mtu";
+ }
+ }
+ }
+
+ It is especially important to consider the XPath evaluation context
+ for XPath expressions defined in groupings. An XPath expression
+ defined in a grouping may not be portable, meaning it cannot be used
+ in multiple contexts and produce proper results.
+
+ If the XPath expressions defined in a grouping are intended for a
+ particular context, then this context SHOULD be identified in the
+ "description" statement for the grouping.
+
+4.6.2. Function Library
+
+ The "position" and "last" functions SHOULD NOT be used. This applies
+ to implicit use of the "position" function as well (e.g.,
+ '//chapter[42]'). A server is only required to maintain the relative
+ XML document order of all instances of a particular user-ordered list
+ or leaf-list. The "position" and "last" functions MAY be used if
+ they are evaluated in a context where the context node is a user-
+ ordered "list" or "leaf-list".
+
+ The "id" function SHOULD NOT be used. The "ID" attribute is not
+ present in YANG documents, so this function has no meaning. The YANG
+ compiler SHOULD return an empty string for this function.
+
+ The "namespace-uri" and "name" functions SHOULD NOT be used.
+ Expanded names in XPath are different than YANG. A specific
+ canonical representation of a YANG-expanded name does not exist.
+
+ The "lang" function SHOULD NOT be used. This function does not apply
+ to YANG because there is no "lang" attribute set with the document.
+ The YANG compiler SHOULD return 'false' for this function.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 21]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The "local-name", "namespace-uri", "name", "string", and "number"
+ functions SHOULD NOT be used if the argument is a node-set. If so,
+ the function result will be determined by the document order of the
+ node-set. Since this order can be different on each server, the
+ function results can also be different. Any function call that
+ implicitly converts a node-set to a string will also have this issue.
+
+ The "local-name" function SHOULD NOT be used to reference local names
+ outside of the YANG module that defines the must or when expression
+ containing the "local-name" function. Example of a "local-name"
+ function that should not be used:
+
+ /*[local-name()='foo']
+
+ The "derived-from-or-self" function SHOULD be used instead of an
+ equality expression for identityref values. This allows the
+ identities to be conceptually augmented.
+
+ Example:
+
+ // do not use
+ when "md-name-format = 'name-format-null'";
+
+ // this is preferred
+ when "derived-from-or-self(md-name-format, 'name-format-null')";
+
+4.6.3. Axes
+
+ The "attribute" and "namespace" axes are not supported in YANG and
+ MAY be empty in a NETCONF or RESTCONF server implementation.
+
+ The "preceding" and "following" axes SHOULD NOT be used. These
+ constructs rely on XML document order within a NETCONF or RESTCONF
+ server configuration database, which may not be supported
+ consistently or produce reliable results across implementations.
+ Predicate expressions based on static node properties (e.g., element
+ name or value, and "ancestor" or "descendant" axes) SHOULD be used
+ instead. The "preceding" and "following" axes MAY be used if
+ document order is not relevant to the outcome of the expression
+ (e.g., check for global uniqueness of a parameter value).
+
+ The "preceding-sibling" and "following-sibling" axes SHOULD NOT be
+ used; however, they MAY be used if document order is not relevant to
+ the outcome of the expression.
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 22]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ A server is only required to maintain the relative XML document order
+ of all instances of a particular user-ordered list or leaf-list. The
+ "preceding-sibling" and "following-sibling" axes MAY be used if they
+ are evaluated in a context where the context node is a user-ordered
+ "list" or "leaf-list".
+
+4.6.4. Types
+
+ Data nodes that use the "int64" and "uint64" built-in type SHOULD NOT
+ be used within numeric or boolean expressions. There are boundary
+ conditions in which the translation from the YANG 64-bit type to an
+ XPath number can cause incorrect results. Specifically, an XPath
+ "double" precision floating-point number cannot represent very large
+ positive or negative 64-bit numbers because it only provides a total
+ precision of 53 bits. The "int64" and "uint64" data types MAY be
+ used in numeric expressions if the value can be represented with no
+ more than 53 bits of precision.
+
+ Data modelers need to be careful not to confuse the YANG value space
+ and the XPath value space. The data types are not the same in both,
+ and conversion between YANG and XPath data types SHOULD be considered
+ carefully.
+
+ Explicit XPath data type conversions MAY be used (e.g., "string",
+ "boolean", or "number" functions), instead of implicit XPath data
+ type conversions.
+
+ XPath expressions that contain a literal value representing a YANG
+ identity SHOULD always include the declared prefix of the module
+ where the identity is defined.
+
+ XPath expressions for "when" statements SHOULD NOT reference the
+ context node or any descendant nodes of the context node. They MAY
+ reference descendant nodes if the "when" statement is contained
+ within an "augment" statement, and the referenced nodes are not
+ defined within the "augment" statement.
+
+ Example:
+
+ augment "/rt:active-route/rt:input/rt:destination-address" {
+ when "rt:address-family='v4ur:ipv4-unicast'" {
+ description
+ "This augment is valid only for IPv4 unicast.";
+ }
+ // nodes defined here within the augment-stmt
+ // cannot be referenced in the when-stmt
+ }
+
+
+
+
+Bierman Best Current Practice [Page 23]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.6.5. Wildcards
+
+ It is possible to construct XPath expressions that will evaluate
+ differently when combined with several modules within a server
+ implementation rather than when evaluated within the single module.
+ This is due to augmenting nodes from other modules.
+
+ Wildcard expansion is done within a server against all the nodes from
+ all namespaces, so it is possible for a "must" or "when" expression
+ that uses the '*' operator to always evaluate to false if processed
+ within a single YANG module. In such cases, the "description"
+ statement SHOULD clarify that augmenting objects are expected to
+ match the wildcard expansion.
+
+ when /foo/services/*/active {
+ description
+ "No services directly defined in this module.
+ Matches objects that have augmented the services container.";
+ }
+
+4.6.6. Boolean Expressions
+
+ The YANG "must" and "when" statements use an XPath boolean expression
+ to define the test condition for the statement. It is important to
+ specify these expressions in a way that will not cause inadvertent
+ changes in the result if the objects referenced in the expression are
+ updated in future revisions of the module.
+
+ For example, the leaf "foo2" must exist if the leaf "foo1" is equal
+ to "one" or "three":
+
+ leaf foo1 {
+ type enumeration {
+ enum one;
+ enum two;
+ enum three;
+ }
+ }
+
+ leaf foo2 {
+ // INCORRECT
+ must "/f:foo1 != 'two'";
+ type string;
+ }
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 24]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ leaf foo2 {
+ // CORRECT
+ must "/f:foo1 = 'one' or /f:foo1 = 'three'";
+ type string;
+ }
+
+ In the next revision of the module, leaf "foo1" is extended with a
+ new enum named "four":
+
+ leaf foo1 {
+ type enumeration {
+ enum one;
+ enum two;
+ enum three;
+ enum four;
+ }
+ }
+
+ Now the first XPath expression will allow the enum "four" to be
+ accepted in addition to the "one" and "three" enum values.
+
+4.7. YANG Definition Lifecycle Management
+
+ The YANG status statement MUST be present within a definition if its
+ value is "deprecated" or "obsolete". The status SHOULD NOT be
+ changed from "current" directly to "obsolete". An object SHOULD be
+ available for at least one year with a "deprecated" status before it
+ is changed to "obsolete".
+
+ The module or submodule name MUST NOT be changed, once the document
+ containing the module or submodule is published.
+
+ The module namespace URI value MUST NOT be changed, once the document
+ containing the module is published.
+
+ The revision date substatement within the import statement SHOULD be
+ present if any groupings are used from the external module.
+
+ The revision date substatement within the include statement SHOULD be
+ present if any groupings are used from the external submodule.
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 25]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ If an import statement is for a module from a stable source (e.g., an
+ RFC for an IETF module), then a reference-stmt SHOULD be present
+ within an import statement.
+
+ import ietf-yang-types {
+ prefix yang;
+ reference "RFC 6991: Common YANG Data Types";
+ }
+
+ If submodules are used, then the document containing the main module
+ MUST be updated so that the main module revision date is equal to or
+ more recent than the revision date of any submodule that is (directly
+ or indirectly) included by the main module.
+
+ Definitions for future use SHOULD NOT be specified in a module. Do
+ not specify placeholder objects like the "reserved" example below:
+
+ leaf reserved {
+ type string;
+ description
+ "This object has no purpose at this time, but a future
+ revision of this module might define a purpose
+ for this object.";
+ }
+ }
+
+4.8. Module Header, Meta, and Revision Statements
+
+ For published modules, the namespace MUST be a globally unique URI,
+ as defined in [RFC3986]. This value is usually assigned by the IANA.
+
+ The "organization" statement MUST be present. If the module is
+ contained in a document intended for IETF Standards Track status,
+ then the organization SHOULD be the IETF working group (WG) chartered
+ to write the document. For other standards organizations, a similar
+ approach is also suggested.
+
+ The "contact" statement MUST be present. If the module is contained
+ in a document intended for Standards Track status, then the WG web
+ and mailing information SHOULD be present, and the main document
+ author or editor contact information SHOULD be present. If
+ additional authors or editors exist, their contact information MAY be
+ present. There is no need to include the contact information for WG
+ Chairs.
+
+ The "description" statement MUST be present. For modules published
+ within IETF documents, the appropriate IETF Trust Copyright text MUST
+ be present, as described in Section 3.1.
+
+
+
+Bierman Best Current Practice [Page 26]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ If the module relies on information contained in other documents,
+ which are not the same documents implied by the import statements
+ present in the module, then these documents MUST be identified in the
+ reference statement.
+
+ A "revision" statement MUST be present for each published version of
+ the module. The "revision" statement MUST have a "reference"
+ substatement. It MUST identify the published document that contains
+ the module. Modules are often extracted from their original
+ documents, and it is useful for developers and operators to know how
+ to find the original source document in a consistent manner. The
+ "revision" statement MAY have a "description" substatement.
+
+ The following example shows the revision statement for a published
+ YANG module:
+
+ revision "2012-02-22" {
+ description
+ "Initial version";
+ reference
+ "RFC 8341: Network Configuration
+ Access Control Model";
+ }
+
+ For an unpublished module, a complete history of each unpublished
+ module revision is not required. That is, within a sequence of draft
+ versions, only the most recent revision need be recorded in the
+ module. Do not remove or reuse a revision statement for a published
+ module. A new revision date is not required unless the module
+ contents have changed. If the module contents have changed, then the
+ revision date of that new module version MUST be updated to a date
+ later than that of the previous version.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 27]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following example shows the two revision statements for an
+ unpublished update to a published YANG module:
+
+ revision "2017-12-11" {
+ description
+ "Added support for YANG 1.1 actions and notifications tied to
+ data nodes. Clarify how NACM extensions can be used by other
+ data models.";
+ reference
+ "RFC 8407: Network Configuration Protocol (NETCONF)
+ Access Control Model";
+ }
+
+ revision "2012-02-22" {
+ description
+ "Initial version";
+ reference
+ "RFC 8341: Network Configuration
+ Access Control Model";
+ }
+
+4.9. Namespace Assignments
+
+ It is RECOMMENDED that only valid YANG modules be included in
+ documents, whether or not the modules are published yet. This
+ allows:
+
+ o the module to compile correctly instead of generating disruptive
+ fatal errors.
+
+ o early implementors to use the modules without picking a random
+ value for the XML namespace.
+
+ o early interoperability testing since independent implementations
+ will use the same XML namespace value.
+
+ Until a URI is assigned by the IANA, a proposed namespace URI MUST be
+ provided for the namespace statement in a YANG module. A value
+ SHOULD be selected that is not likely to collide with other YANG
+ namespaces. Standard module names, prefixes, and URI strings already
+ listed in the "YANG Module Names" registry MUST NOT be used.
+
+ A standard namespace statement value SHOULD have the following form:
+
+ <URN prefix string>:<module-name>
+
+
+
+
+
+
+Bierman Best Current Practice [Page 28]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following URN prefix string SHOULD be used for published and
+ unpublished YANG modules:
+
+ urn:ietf:params:xml:ns:yang:
+
+ The following example URNs would be valid namespace statement values
+ for Standards Track modules:
+
+ urn:ietf:params:xml:ns:yang:ietf-netconf-partial-lock
+
+ urn:ietf:params:xml:ns:yang:ietf-netconf-state
+
+ urn:ietf:params:xml:ns:yang:ietf-netconf
+
+ Note that a different URN prefix string SHOULD be used for modules
+ that are not Standards Track. The string SHOULD be selected
+ according to the guidelines in [RFC7950].
+
+ The following URIs exemplify what might be used by modules that are
+ not Standards Track. Note that the domain "example.com" SHOULD be
+ used by example modules in IETF I-Ds. These URIs are not intended to
+ be dereferenced. They are used for module namespace identification
+ only.
+
+ Example URIs using URLs per [RFC3986]:
+
+ https://example.com/ns/example-interfaces
+
+ https://example.com/ns/example-system
+
+ Example URIs using tags per [RFC4151]:
+
+ tag:example.com,2017:example-interfaces
+
+ tag:example.com,2017:example-system
+
+4.10. Top-Level Data Definitions
+
+ The top-level data organization SHOULD be considered carefully, in
+ advance. Data model designers need to consider how the functionality
+ for a given protocol or protocol family will grow over time.
+
+ The separation of configuration data and operational state SHOULD be
+ considered carefully. It is sometimes useful to define separate top-
+ level containers for configuration and non-configuration data. For
+ some existing top-level data nodes, configuration data was not in
+ scope, so only one container representing operational state was
+ created. Refer to NMDA [RFC8342] for details.
+
+
+
+Bierman Best Current Practice [Page 29]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The number of top-level data nodes within a module SHOULD be
+ minimized. It is often useful to retrieve related information within
+ a single subtree. If data is too distributed, it becomes difficult
+ to retrieve all at once.
+
+ The names and data organization SHOULD reflect persistent
+ information, such as the name of a protocol. The name of the working
+ group SHOULD NOT be used because this may change over time.
+
+ A mandatory database data definition is defined as a node that a
+ client must provide for the database to be valid. The server is not
+ required to provide a value.
+
+ Top-level database data definitions MUST NOT be mandatory. If a
+ mandatory node appears at the top level, it will immediately cause
+ the database to be invalid. This can occur when the server boots or
+ when a module is loaded dynamically at runtime.
+
+4.11. Data Types
+
+ Selection of an appropriate data type (i.e., built-in type, existing
+ derived type, or new derived type) is very subjective; therefore, few
+ requirements can be specified on that subject.
+
+ Data model designers SHOULD use the most appropriate built-in data
+ type for the particular application.
+
+ The signed numeric data types (i.e., "int8", "int16", "int32", and
+ "int64") SHOULD NOT be used unless negative values are allowed for
+ the desired semantics.
+
+4.11.1. Fixed-Value Extensibility
+
+ If the set of values is fixed and the data type contents are
+ controlled by a single naming authority, then an enumeration data
+ type SHOULD be used.
+
+ leaf foo {
+ type enumeration {
+ enum one;
+ enum two;
+ }
+ }
+
+ If extensibility of enumerated values is required, then the
+ "identityref" data type SHOULD be used instead of an enumeration or
+ other built-in type.
+
+
+
+
+Bierman Best Current Practice [Page 30]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ identity foo-type {
+ description "Base for the extensible type";
+ }
+
+ identity one {
+ base f:foo-type;
+ }
+ identity two {
+ base f:foo-type;
+ }
+
+ leaf foo {
+ type identityref {
+ base f:foo-type;
+ }
+ }
+
+ Note that any module can declare an identity with base "foo-type"
+ that is valid for the "foo" leaf. Identityref values are considered
+ to be qualified names.
+
+4.11.2. Patterns and Ranges
+
+ For string data types, if a machine-readable pattern can be defined
+ for the desired semantics, then one or more pattern statements SHOULD
+ be present. A single-quoted string SHOULD be used to specify the
+ pattern, since a double-quoted string can modify the content. If the
+ patterns used in a type definition have known limitations such as
+ false negative or false positive matches, then these limitations
+ SHOULD be documented within the typedef or data definition.
+
+ The following typedef from [RFC6991] demonstrates the proper use of
+ the "pattern" statement:
+
+ typedef ipv4-address-no-zone {
+ type inet:ipv4-address {
+ pattern '[0-9\.]*';
+ }
+ ...
+ }
+
+ For string data types, if the length of the string is required to be
+ bounded in all implementations, then a length statement MUST be
+ present.
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 31]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following typedef from [RFC6991] demonstrates the proper use of
+ the "length" statement:
+
+ typedef yang-identifier {
+ type string {
+ length "1..max";
+ pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+ pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+ }
+ ...
+ }
+
+ For numeric data types, if the values allowed by the intended
+ semantics are different than those allowed by the unbounded intrinsic
+ data type (e.g., "int32"), then a range statement SHOULD be present.
+
+ The following typedef from [RFC6991] demonstrates the proper use of
+ the "range" statement:
+
+ typedef dscp {
+ type uint8 {
+ range "0..63";
+ }
+ ...
+ }
+
+4.11.3. Enumerations and Bits
+
+ For "enumeration" or "bits" data types, the semantics for each "enum"
+ or "bit" SHOULD be documented. A separate "description" statement
+ (within each "enum" or "bit" statement) SHOULD be present.
+
+ leaf foo {
+ // INCORRECT
+ type enumeration {
+ enum one;
+ enum two;
+ }
+ description
+ "The foo enum...
+ one: The first enum
+ two: The second enum";
+ }
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 32]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ leaf foo {
+ // CORRECT
+ type enumeration {
+ enum one {
+ description "The first enum";
+ }
+ enum two {
+ description "The second enum";
+ }
+ }
+ description
+ "The foo enum... ";
+ }
+
+4.11.4. Union Types
+
+ The YANG "union" type is evaluated by testing a value against each
+ member type in the union. The first type definition that accepts a
+ value as valid is the member type used. In general, member types
+ SHOULD be ordered from most restrictive to least restrictive types.
+
+ In the following example, the "enumeration" type will never be
+ matched because the preceding "string" type will match everything.
+
+ Incorrect:
+
+ type union {
+ type string;
+ type enumeration {
+ enum up;
+ enum down;
+ }
+ }
+
+ Correct:
+
+ type union {
+ type enumeration {
+ enum up;
+ enum down;
+ }
+ type string;
+ }
+
+ It is possible for different member types to match, depending on the
+ input encoding format. In XML, all values are passed as string
+ nodes; but in JSON, there are different value types for numbers,
+ booleans, and strings.
+
+
+
+Bierman Best Current Practice [Page 33]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ In the following example, a JSON numeric value will always be matched
+ by the "int32" type, but in XML the string value representing a
+ number will be matched by the "string" type. The second version will
+ match the "int32" member type no matter how the input is encoded.
+
+ Incorrect:
+
+ type union {
+ type string;
+ type int32;
+ }
+
+ Correct:
+
+ type union {
+ type int32;
+ type string;
+ }
+
+4.11.5. Empty and Boolean
+
+ YANG provides an "empty" data type, which has one value (i.e.,
+ present). The default is "not present", which is not actually a
+ value. When used within a list key, only one value can (and must)
+ exist for this key leaf. The type "empty" SHOULD NOT be used for a
+ key leaf since it is pointless.
+
+ There is really no difference between a leaf of type "empty" and a
+ leaf-list of type "empty". Both are limited to one instance. The
+ type "empty" SHOULD NOT be used for a leaf-list.
+
+ The advantage of using type "empty" instead of type "boolean" is that
+ the default (not present) does not take up any bytes in a
+ representation. The disadvantage is that the client may not be sure
+ if an empty leaf is missing because it was filtered somehow or not
+ implemented. The client may not have a complete and accurate schema
+ for the data returned by the server and may not be aware of the
+ missing leaf.
+
+ The YANG "boolean" data type provides two values ("true" and
+ "false"). When used within a list key, two entries can exist for
+ this key leaf. Default values are ignored for key leafs, but a
+ default statement is often used for plain boolean leafs. The
+ advantage of the "boolean" type is that the leaf or leaf-list has a
+ clear representation for both values. The default value is usually
+ not returned unless explicitly requested by the client, so no bytes
+ are used in a typical representation.
+
+
+
+
+Bierman Best Current Practice [Page 34]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ In general, the "boolean" data type SHOULD be used instead of the
+ "empty" data type, as shown in the example below:
+
+ Incorrect:
+
+ leaf flag1 {
+ type empty;
+ }
+
+ Correct:
+
+ leaf flag2 {
+ type boolean;
+ default false;
+ }
+
+4.12. Reusable Type Definitions
+
+ If an appropriate derived type exists in any standard module, such as
+ [RFC6991], then it SHOULD be used instead of defining a new derived
+ type.
+
+ If an appropriate units identifier can be associated with the desired
+ semantics, then a units statement SHOULD be present.
+
+ If an appropriate default value can be associated with the desired
+ semantics, then a default statement SHOULD be present.
+
+ If a significant number of derived types are defined, and it is
+ anticipated that these data types will be reused by multiple modules,
+ then these derived types SHOULD be contained in a separate module or
+ submodule, to allow easier reuse without unnecessary coupling.
+
+ The "description" statement MUST be present.
+
+ If the type definition semantics are defined in an external document
+ (other than another YANG module indicated by an import statement),
+ then the reference statement MUST be present.
+
+4.13. Reusable Groupings
+
+ A reusable grouping is a YANG grouping that can be imported by
+ another module and is intended for use by other modules. This is not
+ the same as a grouping that is used within the module in which it is
+ defined, but it happens to be exportable to another module because it
+ is defined at the top level of the YANG module.
+
+
+
+
+
+Bierman Best Current Practice [Page 35]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following guidelines apply to reusable groupings, in order to
+ make them as robust as possible:
+
+ o Clearly identify the purpose of the grouping in the "description"
+ statement.
+
+ o There are five different XPath contexts in YANG (rpc/input, rpc/
+ output, notification, "config true" data nodes, and all data
+ nodes). Clearly identify which XPath contexts are applicable or
+ excluded for the grouping.
+
+ o Do not reference data outside the grouping in any "path", "must",
+ or "when" statements.
+
+ o Do not include a "default" substatement on a leaf or choice unless
+ the value applies on all possible contexts.
+
+ o Do not include a "config" substatement on a data node unless the
+ value applies on all possible contexts.
+
+ o Clearly identify any external dependencies in the grouping
+ "description" statement, such as nodes referenced by an absolute
+ path from a "path", "must", or "when" statement.
+
+4.14. Data Definitions
+
+ The "description" statement MUST be present in the following YANG
+ statements:
+
+ o anyxml
+
+ o augment
+
+ o choice
+
+ o container
+
+ o extension
+
+ o feature
+
+ o grouping
+
+ o identity
+
+ o leaf
+
+ o leaf-list
+
+
+
+Bierman Best Current Practice [Page 36]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o list
+
+ o notification
+
+ o rpc
+
+ o typedef
+
+ If the data definition semantics are defined in an external document,
+ (other than another YANG module indicated by an import statement),
+ then a reference statement MUST be present.
+
+ The "anyxml" construct may be useful to represent an HTML banner
+ containing markup elements, such as "<b>" and "</b>", and MAY be used
+ in such cases. However, this construct SHOULD NOT be used if other
+ YANG data node types can be used instead to represent the desired
+ syntax and semantics.
+
+ It has been found that the "anyxml" statement is not implemented
+ consistently across all servers. It is possible that mixed-mode XML
+ will not be supported or that configuration anyxml nodes will not
+ supported.
+
+ If there are referential integrity constraints associated with the
+ desired semantics that can be represented with XPath, then one or
+ more "must" statements SHOULD be present.
+
+ For list and leaf-list data definitions, if the number of possible
+ instances is required to be bounded for all implementations, then the
+ max-elements statements SHOULD be present.
+
+ If any "must" or "when" statements are used within the data
+ definition, then the data definition "description" statement SHOULD
+ describe the purpose of each one.
+
+ The "choice" statement is allowed to be directly present within a
+ "case" statement in YANG 1.1. This needs to be considered carefully.
+ Consider simply including the nested "choice" as additional "case"
+ statements within the parent "choice" statement. Note that the
+ "mandatory" and "default" statements within a nested "choice"
+ statement only apply if the "case" containing the nested "choice"
+ statement is first selected.
+
+ If a list defines any key leafs, then these leafs SHOULD be defined
+ in order, as the first child nodes within the list. The key leafs
+ MAY be in a different order in some cases, e.g., they are defined in
+ a grouping, and not inline in the list statement.
+
+
+
+
+Bierman Best Current Practice [Page 37]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.14.1. Non-Presence Containers
+
+ A non-presence container is used to organize data into specific
+ subtrees. It is not intended to have semantics within the data model
+ beyond this purpose, although YANG allows it (e.g., a "must"
+ statement within the non-presence container).
+
+ Example using container wrappers:
+
+ container top {
+ container foos {
+ list foo { ... }
+ }
+ container bars {
+ list bar { ... }
+ }
+ }
+
+ Example without container wrappers:
+
+ container top {
+ list foo { ... }
+ list bar { ... }
+ }
+
+ Use of non-presence containers to organize data is a subjective
+ matter similar to use of subdirectories in a file system. Although
+ these containers do not have any semantics, they can impact protocol
+ operations for the descendant data nodes within a non-presence
+ container, so use of these containers SHOULD be considered carefully.
+
+ The NETCONF and RESTCONF protocols do not currently support the
+ ability to delete all list (or leaf-list) entries at once. This
+ deficiency is sometimes avoided by use of a parent container (i.e.,
+ deleting the container also removes all child entries).
+
+4.14.2. Top-Level Data Nodes
+
+ Use of top-level objects needs to be considered carefully:
+
+ o top-level siblings are not ordered
+
+ o top-level siblings are not static and depend on the modules that
+ are loaded
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 38]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o for subtree filtering, retrieval of a top-level leaf-list will be
+ treated as a content-match node for all top-level-siblings
+
+ o a top-level list with many instances may impact performance
+
+4.15. Operation Definitions
+
+ If the operation semantics are defined in an external document (other
+ than another YANG module indicated by an import statement), then a
+ reference statement MUST be present.
+
+ If the operation impacts system behavior in some way, it SHOULD be
+ mentioned in the "description" statement.
+
+ If the operation is potentially harmful to system behavior in some
+ way, it MUST be mentioned in the Security Considerations section of
+ the document.
+
+4.16. Notification Definitions
+
+ The "description" statement MUST be present.
+
+ If the notification semantics are defined in an external document
+ (other than another YANG module indicated by an import statement),
+ then a reference statement MUST be present.
+
+ If the notification refers to a specific resource instance, then this
+ instance SHOULD be identified in the notification data. This is
+ usually done by including "leafref" leaf nodes with the key leaf
+ values for the resource instance. For example:
+
+ notification interface-up {
+ description "Sent when an interface is activated.";
+ leaf name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ }
+ }
+
+ Note that there are no formal YANG statements to identify any data
+ node resources associated with a notification. The "description"
+ statement for the notification SHOULD specify if and how the
+ notification identifies any data node resources associated with the
+ specific event.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 39]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.17. Feature Definitions
+
+ The YANG "feature" statement is used to define a label for a set of
+ optional functionality within a module. The "if-feature" statement
+ is used in the YANG statements associated with a feature. The
+ description-stmt within a feature-stmt MUST specify any interactions
+ with other features.
+
+ The set of YANG features defined in a module should be considered
+ carefully. Very fine granular features increase interoperability
+ complexity and should be avoided. A likely misuse of the feature
+ mechanism is the tagging of individual leafs (e.g., counters) with
+ separate features.
+
+ If there is a large set of objects associated with a YANG feature,
+ then consider moving those objects to a separate module, instead of
+ using a YANG feature. Note that the set of features within a module
+ is easily discovered by the reader, but the set of related modules
+ within the entire YANG library is not as easy to identity. Module
+ names with a common prefix can help readers identity the set of
+ related modules, but this assumes the reader will have discovered and
+ installed all the relevant modules.
+
+ Another consideration for deciding whether to create a new module or
+ add a YANG feature is the stability of the module in question. It
+ may be desirable to have a stable base module that is not changed
+ frequently. If new functionality is placed in a separate module,
+ then the base module does not need to be republished. If it is
+ designed as a YANG feature, then the module will need to be
+ republished.
+
+ If one feature requires implementation of another feature, then an
+ "if-feature" statement SHOULD be used in the dependent "feature"
+ statement.
+
+ For example, feature2 requires implementation of feature1:
+
+ feature feature1 {
+ description "Some protocol feature";
+ }
+
+ feature feature2 {
+ if-feature "feature1";
+ description "Another protocol feature";
+ }
+
+
+
+
+
+
+Bierman Best Current Practice [Page 40]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.18. YANG Data Node Constraints
+
+4.18.1. Controlling Quantity
+
+ The "min-elements" and "max-elements" statements can be used to
+ control how many list or leaf-list instances are required for a
+ particular data node. YANG constraint statements SHOULD be used to
+ identify conditions that apply to all implementations of the data
+ model. If platform-specific limitations (e.g., the "max-elements"
+ supported for a particular list) are relevant to operations, then a
+ data model definition statement (e.g., "max-ports" leaf) SHOULD be
+ used to identify the limit.
+
+4.18.2. "must" versus "when"
+
+ "must" and "when" YANG statements are used to provide cross-object
+ referential tests. They have very different behavior. The "when"
+ statement causes data node instances to be silently deleted as soon
+ as the condition becomes false. A false "when" expression is not
+ considered to be an error.
+
+ The "when" statement SHOULD be used together with "augment" or "uses"
+ statements to achieve conditional model composition. The condition
+ SHOULD be based on static properties of the augmented entry (e.g.,
+ list key leafs).
+
+ The "must" statement causes a datastore validation error if the
+ condition is false. This statement SHOULD be used for enforcing
+ parameter value restrictions that involve more than one data node
+ (e.g., end-time parameter must be after the start-time parameter).
+
+4.19. "augment" Statements
+
+ The YANG "augment" statement is used to define a set of data
+ definition statements that will be added as child nodes of a target
+ data node. The module namespace for these data nodes will be the
+ augmenting module, not the augmented module.
+
+ A top-level "augment" statement SHOULD NOT be used if the target data
+ node is in the same module or submodule as the evaluated "augment"
+ statement. The data definition statements SHOULD be added inline
+ instead.
+
+4.19.1. Conditional Augment Statements
+
+ The "augment" statement is often used together with the "when"
+ statement and/or "if-feature" statement to make the augmentation
+ conditional on some portion of the data model.
+
+
+
+Bierman Best Current Practice [Page 41]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The following example from [RFC7223] shows how a conditional
+ container called "ethernet" is added to the "interface" list only for
+ entries of the type "ethernetCsmacd".
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'";
+
+ container ethernet {
+ leaf duplex {
+ ...
+ }
+ }
+ }
+
+4.19.2. Conditionally Mandatory Data Definition Statements
+
+ YANG has very specific rules about how configuration data can be
+ updated in new releases of a module. These rules allow an "old
+ client" to continue interoperating with a "new server".
+
+ If data nodes are added to an existing entry, the old client MUST NOT
+ be required to provide any mandatory parameters that were not in the
+ original module definition.
+
+ It is possible to add conditional "augment" statements such that the
+ old client would not know about the new condition and would not
+ specify the new condition. The conditional "augment" statement can
+ contain mandatory objects only if the condition is false, unless
+ explicitly requested by the client.
+
+ Only a conditional "augment" statement that uses the "when" statement
+ form of a condition can be used in this manner. The YANG features
+ enabled on the server cannot be controlled by the client in any way,
+ so it is not safe to add mandatory augmenting data nodes based on the
+ "if-feature" statement.
+
+ The XPath "when" statement condition MUST NOT reference data outside
+ of the target data node because the client does not have any control
+ over this external data.
+
+ In the following dummy example, it is okay to augment the "interface"
+ entry with "mandatory-leaf" because the augmentation depends on
+ support for "some-new-iftype". The old client does not know about
+ this type, so it would never select this type; therefore, it would
+ not add a mandatory data node.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 42]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ module example-module {
+
+ yang-version 1.1;
+ namespace "tag:example.com,2017:example-module";
+ prefix mymod;
+
+ import iana-if-type { prefix iana; }
+ import ietf-interfaces { prefix if; }
+
+ identity some-new-iftype {
+ base iana:iana-interface-type;
+ }
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'mymod:some-new-iftype'";
+
+ leaf mandatory-leaf {
+ type string;
+ mandatory true;
+ }
+ }
+ }
+
+ Note that this practice is safe only for creating data resources. It
+ is not safe for replacing or modifying resources if the client does
+ not know about the new condition. The YANG data model MUST be
+ packaged in a way that requires the client to be aware of the
+ mandatory data nodes if it is aware of the condition for this data.
+ In the example above, the "some-new-iftype" identity is defined in
+ the same module as the "mandatory-leaf" data definition statement.
+
+ This practice is not safe for identities defined in a common module
+ such as "iana-if-type" because the client is not required to know
+ about "my-module" just because it knows about the "iana-if-type"
+ module.
+
+4.20. Deviation Statements
+
+ Per RFC 7950, Section 7.20.3, the YANG "deviation" statement is not
+ allowed to appear in IETF YANG modules, but it can be useful for
+ documenting server capabilities. Deviation statements are not
+ reusable and typically not shared across all platforms.
+
+ There are several reasons that deviations might be needed in an
+ implementation, e.g., an object cannot be supported on all platforms,
+ or feature delivery is done in multiple development phases.
+ Deviation statements can also be used to add annotations to a module,
+ which does not affect the conformance requirements for the module.
+
+
+
+Bierman Best Current Practice [Page 43]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ It is suggested that deviation statements be defined in separate
+ modules from regular YANG definitions. This allows the deviations to
+ be platform specific and/or temporary.
+
+ The order that deviation statements are evaluated can affect the
+ result. Therefore, multiple deviation statements in the same module,
+ for the same target object, SHOULD NOT be used.
+
+ The "max-elements" statement is intended to describe an architectural
+ limit to the number of list entries. It is not intended to describe
+ platform limitations. It is better to use a "deviation" statement
+ for the platforms that have a hard resource limit.
+
+ Example documenting platform resource limits:
+
+ Wrong: (max-elements in the list itself)
+
+ container backups {
+ list backup {
+ ...
+ max-elements 10;
+ ...
+ }
+ }
+
+ Correct: (max-elements in a deviation)
+
+ deviation /bk:backups/bk:backup {
+ deviate add {
+ max-elements 10;
+ }
+ }
+
+4.21. Extension Statements
+
+ The YANG "extension" statement is used to specify external
+ definitions. This appears in the YANG syntax as an
+ "unknown-statement". Usage of extension statements in a published
+ module needs to be considered carefully.
+
+ The following guidelines apply to the usage of YANG extensions:
+
+ o The semantics of the extension MUST NOT contradict any YANG
+ statements. Extensions can add semantics not covered by the
+ normal YANG statements.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 44]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o The module containing the extension statement MUST clearly
+ identify the conformance requirements for the extension. It
+ should be clear whether all implementations of the YANG module
+ containing the extension need to also implement the extension. If
+ not, identify what conditions apply that would require
+ implementation of the extension.
+
+ o The extension MUST clearly identify where it can be used within
+ other YANG statements.
+
+ o The extension MUST clearly identify if YANG statements or other
+ extensions are allowed or required within the extension as
+ substatements.
+
+4.22. Data Correlation
+
+ Data can be correlated in various ways, using common data types,
+ common data naming, and common data organization. There are several
+ ways to extend the functionality of a module, based on the degree of
+ coupling between the old and new functionality:
+
+ o inline: update the module with new protocol-accessible objects.
+ The naming and data organization of the original objects is used.
+ The new objects are in the original module namespace.
+
+ o augment: create a new module with new protocol-accessible objects
+ that augment the original data structure. The naming and data
+ organization of the original objects is used. The new objects are
+ in the new module namespace.
+
+ o mirror: create new objects in a new module or the original module,
+ except use a new naming scheme and data location. The naming can
+ be coupled in different ways. Tight coupling is achieved with a
+ "leafref" data type, with the "require-instance" substatement set
+ to "true". This method SHOULD be used.
+
+ If the new data instances are not limited to the values in use in the
+ original data structure, then the "require-instance" substatement
+ MUST be set to "false". Loose coupling is achieved by using key
+ leafs with the same data type as the original data structure. This
+ has the same semantics as setting the "require-instance" substatement
+ to "false".
+
+ The relationship between configuration and operational state has been
+ clarified in NMDA [RFC8342].
+
+
+
+
+
+
+Bierman Best Current Practice [Page 45]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.22.1. Use of "leafref" for Key Correlation
+
+ Sometimes it is not practical to augment a data structure. For
+ example, the correlated data could have different keys or contain
+ mandatory nodes.
+
+ The following example shows the use of the "leafref" data type for
+ data correlation purposes:
+
+ Not preferred:
+
+ list foo {
+ key name;
+ leaf name {
+ type string;
+ }
+ ...
+ }
+
+ list foo-addon {
+ key name;
+ config false;
+ leaf name {
+ type string;
+ }
+ ...
+ }
+
+ Preferred:
+
+ list foo {
+ key name;
+ leaf name {
+ type string;
+ }
+ ...
+ }
+
+ list foo-addon {
+ key name;
+ config false;
+ leaf name {
+ type leafref {
+ path "/foo/name";
+ require-instance false;
+ }
+ }
+ leaf addon {
+
+
+
+Bierman Best Current Practice [Page 46]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ type string;
+ mandatory true;
+ }
+ }
+
+4.23. Operational State
+
+ The modeling of operational state with YANG has been refined over
+ time. At first, only data that has a "config" statement value of
+ "false" was considered to be operational state. This data was not
+ considered to be part of any datastore, which made the YANG XPath
+ definition much more complicated.
+
+ Operational state is now modeled using YANG according to the new NMDA
+ [RFC8342] and conceptually contained in the operational state
+ datastore, which also includes the operational values of
+ configuration data. There is no longer any need to duplicate data
+ structures to provide separate configuration and operational state
+ sections.
+
+ This section describes some data modeling issues related to
+ operational state and guidelines for transitioning YANG data model
+ design to be NMDA compatible.
+
+4.23.1. Combining Operational State and Configuration Data
+
+ If possible, operational state SHOULD be combined with its associated
+ configuration data. This prevents duplication of key leafs and
+ ancestor nodes. It also prevents race conditions for retrieval of
+ dynamic entries and allows configuration and operational state to be
+ retrieved together with minimal message overhead.
+
+ container foo {
+ ...
+ // contains "config true" and "config false" nodes that have
+ // no corresponding "config true" object (e.g., counters)
+ }
+
+4.23.2. Representing Operational Values of Configuration Data
+
+ If possible, the same data type SHOULD be used to represent the
+ configured value and the operational value, for a given leaf or leaf-
+ list object.
+
+ Sometimes the configured value set is different than the operational
+ value set for that object, for example, the "admin-status" and
+ "oper-status" leafs in [RFC8343]. In this case, a separate object
+ MAY be used to represent the configured and operational values.
+
+
+
+Bierman Best Current Practice [Page 47]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ Sometimes the list keys are not identical for configuration data and
+ the corresponding operational state. In this case, separate lists
+ MAY be used to represent the configured and operational values.
+
+ If it is not possible to combine configuration and operational state,
+ then the keys used to represent list entries SHOULD be the same type.
+ The "leafref" data type SHOULD be used in operational state for key
+ leafs that have corresponding configuration instances. The
+ "require-instance" statement MAY be set to "false" (in YANG 1.1
+ modules only) to indicate instances are allowed in the operational
+ state that do not exist in the associated configuration data.
+
+ The need to replicate objects or define different operational state
+ objects depends on the data model. It is not possible to define one
+ approach that will be optimal for all data models.
+
+ Designers SHOULD describe and justify any NMDA exceptions in detail,
+ such as the use of separate subtrees and/or separate leafs. The
+ "description" statements for both the configuration and the
+ operational state SHOULD be used for this purpose.
+
+4.23.3. NMDA Transition Guidelines
+
+ YANG modules SHOULD be designed with the assumption that they will be
+ used on servers supporting the operational state datastore. With
+ this in mind, YANG modules SHOULD define "config false" nodes
+ wherever they make sense to the data model. "Config false" nodes
+ SHOULD NOT be defined to provide the operational value for
+ configuration nodes, except when the value space of a configured and
+ operational value may differ, in which case a distinct "config false"
+ node SHOULD be defined to hold the operational value for the
+ configured node.
+
+ The following guidelines are meant to help modelers develop YANG
+ modules that will maximize the utility of the model with both current
+ and new implementations.
+
+ New modules and modules that are not concerned with the operational
+ state of configuration information SHOULD immediately be structured
+ to be NMDA compatible, as described in Section 4.23.1. This
+ transition MAY be deferred if the module does not contain any
+ configuration datastore objects.
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 48]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The remaining are options that MAY be followed during the time that
+ NMDA mechanisms are being defined.
+
+ (a) Modules that require immediate support for the NMDA features
+ SHOULD be structured for NMDA. A temporary non-NMDA version of
+ this type of module MAY exist, as either an existing model or a
+ model created by hand or with suitable tools that mirror the
+ current modeling strategies. Both the NMDA and the non-NMDA
+ modules SHOULD be published in the same document, with NMDA
+ modules in the document main body and the non-NMDA modules in a
+ non-normative appendix. The use of the non-NMDA module will
+ allow temporary bridging of the time period until NMDA
+ implementations are available.
+
+ (b) For published models, the model should be republished with an
+ NMDA-compatible structure, deprecating non-NMDA constructs. For
+ example, the "ietf-interfaces" model in [RFC7223] has been
+ restructured as an NMDA-compatible model in [RFC8343]. The
+ "/interfaces-state" hierarchy has been marked "status
+ deprecated". Models that mark their "/foo-state" hierarchy with
+ "status deprecated" will allow NMDA-capable implementations to
+ avoid the cost of duplicating the state nodes, while enabling
+ non-NMDA-capable implementations to utilize them for access to
+ the operational values.
+
+ (c) For models that augment models that have not been structured
+ with the NMDA, the modeler will have to consider the structure
+ of the base model and the guidelines listed above. Where
+ possible, such models should move to new revisions of the base
+ model that are NMDA compatible. When that is not possible,
+ augmenting "state" containers SHOULD be avoided, with the
+ expectation that the base model will be re-released with the
+ state containers marked as deprecated. It is RECOMMENDED to
+ augment only the "/foo" hierarchy of the base model. Where this
+ recommendation cannot be followed, then any new "state" elements
+ SHOULD be included in their own module.
+
+4.23.3.1. Temporary Non-NMDA Modules
+
+ A temporary non-NMDA module allows a non-NMDA-aware client to access
+ operational state from an NMDA-compliant server. It contains the
+ top-level "config false" data nodes that would have been defined in a
+ legacy YANG module (before NMDA).
+
+ A server that needs to support both NMDA and non-NMDA clients can
+ advertise both the new NMDA module and the temporary non-NMDA module.
+ A non-NMDA client can use separate "foo" and "foo-state" subtrees,
+ except the "foo-state" subtree is located in a different (temporary)
+
+
+
+Bierman Best Current Practice [Page 49]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ module. The NMDA module can be used by a non-NMDA client to access
+ the conventional configuration datastores and the deprecated <get>
+ operation to access nested "config false" data nodes.
+
+ To create the temporary non-NMDA model from an NMDA model, the
+ following steps can be taken:
+
+ o Change the module name by appending "-state" to the original
+ module name
+
+ o Change the namespace by appending "-state" to the original
+ namespace value
+
+ o Change the prefix by appending "-s" to the original prefix value
+
+ o Add an import to the original module (e.g., for typedef
+ definitions)
+
+ o Retain or create only the top-level nodes that have a "config"
+ statement value "false". These subtrees represent "config false"
+ data nodes that were combined into the configuration subtree;
+ therefore, they are not available to non-NMDA aware clients. Set
+ the "status" statement to "deprecated" for each new node.
+
+ o The module description SHOULD clearly identify the module as a
+ temporary non-NMDA module
+
+4.23.3.2. Example: Create a New NMDA Module
+
+ Create an NMDA-compliant module, using combined configuration and
+ state subtrees, whenever possible.
+
+ module example-foo {
+ namespace "urn:example.com:params:xml:ns:yang:example-foo";
+ prefix "foo";
+
+ container foo {
+ // configuration data child nodes
+ // operational value in operational state datastore only
+ // may contain "config false" nodes as needed
+ }
+ }
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 50]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.23.3.3. Example: Convert an Old Non-NMDA Module
+
+ Do not remove non-compliant objects from existing modules. Instead,
+ change the status to "deprecated". At some point, usually after 1
+ year, the status MAY be changed to "obsolete".
+
+ Old Module:
+
+ module example-foo {
+ namespace "urn:example.com:params:xml:ns:yang:example-foo";
+ prefix "foo";
+
+ container foo {
+ // configuration data child nodes
+ }
+
+ container foo-state {
+ config false;
+ // operational state child nodes
+ }
+ }
+
+ Converted NMDA Module:
+
+ module example-foo {
+ namespace "urn:example.com:params:xml:ns:yang:example-foo";
+ prefix "foo";
+
+ container foo {
+ // configuration data child nodes
+ // operational value in operational state datastore only
+ // may contain "config false" nodes as needed
+ // will contain any data nodes from old foo-state
+ }
+
+ // keep original foo-state but change status to deprecated
+ container foo-state {
+ config false;
+ status deprecated;
+ // operational state child nodes
+ }
+ }
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 51]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.23.3.4. Example: Create a Temporary NMDA Module
+
+ Create a new module that contains the top-level operational state
+ data nodes that would have been available before they were combined
+ with configuration data nodes (to be NMDA compliant).
+
+ module example-foo-state {
+ namespace "urn:example.com:params:xml:ns:yang:example-foo-state";
+ prefix "foo-s";
+
+ // import new or converted module; not used in this example
+ import example-foo { prefix foo; }
+
+ container foo-state {
+ config false;
+ status deprecated;
+ // operational state child nodes
+ }
+ }
+
+4.24. Performance Considerations
+
+ It is generally likely that certain YANG statements require more
+ runtime resources than other statements. Although there are no
+ performance requirements for YANG validation, the following
+ information MAY be considered when designing YANG data models:
+
+ o Lists are generally more expensive than containers
+
+ o "when" statement evaluation is generally more expensive than
+ "if-feature" or "choice" statements
+
+ o "must" statements are generally more expensive than "min-entries",
+ "max-entries", "mandatory", or "unique" statements
+
+ o "identityref" leafs are generally more expensive than
+ "enumeration" leafs
+
+ o "leafref" and "instance-identifier" types with "require-instance"
+ set to true are generally more expensive than if
+ "require-instance" is set to false
+
+4.25. Open Systems Considerations
+
+ Only the modules imported by a particular module can be assumed to be
+ present in an implementation. An open system MAY include any
+ combination of YANG modules.
+
+
+
+
+Bierman Best Current Practice [Page 52]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+4.26. Guidelines for Constructs Specific to YANG 1.1
+
+ The set of guidelines for YANG 1.1 will grow as operational
+ experience is gained with the new language features. This section
+ contains an initial set of guidelines for new YANG 1.1 language
+ features.
+
+4.26.1. Importing Multiple Revisions
+
+ Standard modules SHOULD NOT import multiple revisions of the same
+ module into a module. This MAY be done if independent definitions
+ (e.g., enumeration typedefs) from specific revisions are needed in
+ the importing module.
+
+4.26.2. Using Feature Logic
+
+ The YANG 1.1 feature logic is much more expressive than YANG 1.0. A
+ "description" statement SHOULD describe the "if-feature" logic in
+ text, to help readers understand the module.
+
+ YANG features SHOULD be used instead of the "when" statement, if
+ possible. Features are advertised by the server, and objects
+ conditional by the "if-feature" statement are conceptually grouped
+ together. There is no such commonality supported for "when"
+ statements.
+
+ Features generally require less server implementation complexity and
+ runtime resources than objects that use "when" statements. Features
+ are generally static (i.e., set when a module is loaded and not
+ changed at runtime). However, every client edit might cause a "when"
+ statement result to change.
+
+4.26.3. "anyxml" versus "anydata"
+
+ The "anyxml" statement MUST NOT be used to represent a conceptual
+ subtree of YANG data nodes. The "anydata" statement MUST be used for
+ this purpose.
+
+4.26.4. "action" versus "rpc"
+
+ The use of "action" statements or "rpc" statements is a subjective
+ design decision. RPC operations are not associated with any
+ particular data node. Actions are associated with a specific data
+ node definition. An "action" statement SHOULD be used if the
+ protocol operation is specific to a subset of all data nodes instead
+ of all possible data nodes.
+
+
+
+
+
+Bierman Best Current Practice [Page 53]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ The same action name MAY be used in different definitions within
+ different data node. For example, a "reset" action defined with a
+ data node definition for an interface might have different parameters
+ than for a power supply or a VLAN. The same action name SHOULD be
+ used to represent similar semantics.
+
+ The NETCONF Access Control Model (NACM) [RFC8341] does not support
+ parameter-based access control for RPC operations. The user is given
+ permission (or not) to invoke the RPC operation with any parameters.
+ For example, if each client is only allowed to reset their own
+ interface, then NACM cannot be used.
+
+ For example, NACM cannot enforce access control based on the value of
+ the "interface" parameter, only the "reset" operation itself:
+
+ rpc reset {
+ input {
+ leaf interface {
+ type if:interface-ref;
+ mandatory true;
+ description "The interface to reset.";
+ }
+ }
+ }
+
+ However, NACM can enforce access control for individual interface
+ instances, using a "reset" action. If the user does not have read
+ access to the specific "interface" instance, then it cannot invoke
+ the "reset" action for that interface instance:
+
+ container interfaces {
+ list interface {
+ ...
+ action reset { }
+ }
+ }
+
+4.27. Updating YANG Modules (Published versus Unpublished)
+
+ YANG modules can change over time. Typically, new data model
+ definitions are needed to support new features. YANG update rules
+ defined in Section 11 of [RFC7950] MUST be followed for published
+ modules. They MAY be followed for unpublished modules.
+
+ The YANG update rules only apply to published module revisions. Each
+ organization will have their own way to identify published work that
+ is considered to be stable and unpublished work that is considered to
+
+
+
+
+Bierman Best Current Practice [Page 54]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ be unstable. For example, in the IETF, the RFC document is used for
+ published work, and the I-D is used for unpublished work.
+
+5. IANA Considerations
+
+ The following registration in the "ns" subregistry of the "IETF XML
+ Registry" [RFC3688] was detailed in [RFC6087] and has been updated by
+ IANA to reference this document.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-template
+
+ Registrant Contact: The IESG.
+
+ XML: N/A, the requested URI is an XML namespace.
+
+ The following assignment was detailed in [RFC6087] and has been
+ updated by IANA in the "YANG Module Names" registry. This document
+ has also been added as a reference for the "YANG Module Names"
+ registry itself as it contains the template necessary for
+ registration in Appendix B.
+
+ +-----------+-------------------------------------------+
+ | Field | Value |
+ +-----------+-------------------------------------------+
+ | Name | ietf-template |
+ | Namespace | urn:ietf:params:xml:ns:yang:ietf-template |
+ | Prefix | temp |
+ | Reference | RFC 8407 |
+ +-----------+-------------------------------------------+
+
+ YANG Registry Assignment
+
+6. Security Considerations
+
+ This document defines documentation guidelines for NETCONF or
+ RESTCONF content defined with the YANG data modeling language;
+ therefore, it does not introduce any new or increased security risks
+ into the management system.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 55]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+7. References
+
+7.1. Normative References
+
+ [ID-Guidelines]
+ Housley, R., "Guidelines to Authors of Internet-Drafts",
+ December 2010,
+ <https://www.ietf.org/standards/ids/guidelines/>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, DOI 10.17487/RFC3986, January 2005,
+ <https://www.rfc-editor.org/info/rfc3986>.
+
+ [RFC5378] Bradner, S., Ed. and J. Contreras, Ed., "Rights
+ Contributors Provide to the IETF Trust", BCP 78, RFC 5378,
+ DOI 10.17487/RFC5378, November 2008,
+ <https://www.rfc-editor.org/info/rfc5378>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+
+
+
+
+
+Bierman Best Current Practice [Page 56]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [W3C.REC-xpath]
+ Clark, J. and S. DeRose, "XML Path Language (XPath)
+ Version 1.0", W3C Recommendation REC-xpath-19991116,
+ November 1999,
+ <http://www.w3.org/TR/1999/REC-xpath-19991116>.
+
+7.2. Informative References
+
+ [IANA-MOD-NAMES]
+ IANA, "YANG Module Names",
+ <https://www.iana.org/assignments/yang-parameters/>.
+
+ [IANA-XML] IANA, "IETF XML Registry",
+ <https://www.iana.org/assignments/xml-registry/>.
+
+ [RFC-STYLE]
+ RFC Editor, "Style Guide",
+ <http://www.rfc-editor.org/styleguide/>.
+
+ [RFC2026] Bradner, S., "The Internet Standards Process -- Revision
+ 3", BCP 9, RFC 2026, DOI 10.17487/RFC2026, October 1996,
+ <https://www.rfc-editor.org/info/rfc2026>.
+
+ [RFC4151] Kindberg, T. and S. Hawke, "The 'tag' URI Scheme",
+ RFC 4151, DOI 10.17487/RFC4151, October 2005,
+ <https://www.rfc-editor.org/info/rfc4151>.
+
+ [RFC4181] Heard, C., Ed., "Guidelines for Authors and Reviewers of
+ MIB Documents", BCP 111, RFC 4181, DOI 10.17487/RFC4181,
+ September 2005, <https://www.rfc-editor.org/info/rfc4181>.
+
+
+
+
+Bierman Best Current Practice [Page 57]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
+ Data Model Documents", RFC 6087, DOI 10.17487/RFC6087,
+ January 2011, <https://www.rfc-editor.org/info/rfc6087>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7223] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
+ <https://www.rfc-editor.org/info/rfc7223>.
+
+ [RFC7322] Flanagan, H. and S. Ginoza, "RFC Style Guide", RFC 7322,
+ DOI 10.17487/RFC7322, September 2014,
+ <https://www.rfc-editor.org/info/rfc7322>.
+
+ [RFC7841] Halpern, J., Ed., Daigle, L., Ed., and O. Kolkman, Ed.,
+ "RFC Streams, Headers, and Boilerplates", RFC 7841,
+ DOI 10.17487/RFC7841, May 2016,
+ <https://www.rfc-editor.org/info/rfc7841>.
+
+ [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
+ Writing an IANA Considerations Section in RFCs", BCP 26,
+ RFC 8126, DOI 10.17487/RFC8126, June 2017,
+ <https://www.rfc-editor.org/info/rfc8126>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8343] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 8343, DOI 10.17487/RFC8343, March 2018,
+ <https://www.rfc-editor.org/info/rfc8343>.
+
+ [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
+ Routing Management (NMDA Version)", RFC 8349,
+ DOI 10.17487/RFC8349, March 2018,
+ <https://www.rfc-editor.org/info/rfc8349>.
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 58]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+Appendix A. Module Review Checklist
+
+ This section is adapted from RFC 4181.
+
+ The purpose of a YANG module review is to review the YANG module for
+ both technical correctness and adherence to IETF documentation
+ requirements. The following checklist may be helpful when reviewing
+ an I-D:
+
+ o I-D Boilerplate -- verify that the document contains the required
+ I-D boilerplate (see <https://www.ietf.org/id-info/
+ guidelines.html>), including the appropriate statement to permit
+ publication as an RFC, and that the I-D boilerplate does not
+ contain references or section numbers.
+
+ o Abstract -- verify that the abstract does not contain references,
+ that it does not have a section number, and that its content
+ follows the guidelines in <https://www.ietf.org/id-info/
+ guidelines.html>.
+
+ o Copyright Notice -- verify that the document has the appropriate
+ text regarding the rights that document contributors provide to
+ the IETF Trust [RFC5378]. Verify that it contains the full IETF
+ Trust copyright notice at the beginning of the document. The IETF
+ Trust Legal Provisions (TLP) can be found at:
+
+ <https://trustee.ietf.org/license-info/>
+
+ o Security Considerations section -- verify that the document uses
+ the latest approved template from the Operations and Management
+ (OPS) area website (see <https://trac.ietf.org/area/ops/trac/wiki/
+ yang-security-guidelines>) and that the guidelines therein have
+ been followed.
+
+ o IANA Considerations section -- this section must always be
+ present. For each module within the document, ensure that the
+ IANA Considerations section contains entries for the following
+ IANA registries:
+
+ XML Namespace Registry: Register the YANG module namespace.
+
+ YANG Module Registry: Register the YANG module name, prefix,
+ namespace, and RFC number, according to the rules specified in
+ [RFC6020].
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 59]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ o References -- verify that the references are properly divided
+ between normative and informative references, that RFCs 2119 and
+ 8174 are included as normative references if the terminology
+ defined therein is used in the document, that all references
+ required by the boilerplate are present, that all YANG modules
+ containing imported items are cited as normative references, and
+ that all citations point to the most current RFCs, unless there is
+ a valid reason to do otherwise (for example, it is okay to include
+ an informative reference to a previous version of a specification
+ to help explain a feature included for backward compatibility).
+ Be sure citations for all imported modules are present somewhere
+ in the document text (outside the YANG module). If a YANG module
+ contains reference or "description" statements that refer to an
+ I-D, then the I-D is included as an informative reference.
+
+ o License -- verify that the document contains the Simplified BSD
+ License in each YANG module or submodule. Some guidelines related
+ to this requirement are described in Section 3.1. Make sure that
+ the correct year is used in all copyright dates. Use the approved
+ text from the latest TLP document, which can be found at:
+
+ <https://trustee.ietf.org/license-info/>
+
+ o Other Issues -- check for any issues mentioned in
+ <https://www.ietf.org/id-info/checklist.html> that are not covered
+ elsewhere.
+
+ o Technical Content -- review the actual technical content for
+ compliance with the guidelines in this document. The use of a
+ YANG module compiler is recommended when checking for syntax
+ errors. A list of freely available tools and other information,
+ including formatting advice, can be found at:
+
+ <https://trac.ietf.org/trac/netconf/wiki>
+ and
+ <https://trac.ietf.org/trac/netmod/wiki>
+
+ Checking for correct syntax, however, is only part of the job.
+ It is just as important to actually read the YANG module document
+ from the point of view of a potential implementor. It is
+ particularly important to check that "description" statements are
+ sufficiently clear and unambiguous to allow interoperable
+ implementations to be created.
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 60]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+Appendix B. YANG Module Template
+
+ <CODE BEGINS> file "ietf-template@2016-03-20.yang"
+
+ module ietf-template {
+ yang-version 1.1;
+
+ // replace this string with a unique namespace URN value
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-template";
+
+ // replace this string, and try to pick a unique prefix
+
+ prefix temp;
+
+ // import statements here: e.g.,
+ // import ietf-yang-types { prefix yang; }
+ // import ietf-inet-types { prefix inet; }
+ // identify the IETF working group if applicable
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ // update this contact statement with your info
+
+ contact
+ "WG Web: <http://datatracker.ietf.org/wg/your-wg-name/>
+ WG List: <mailto:your-wg-name@ietf.org>
+
+ Editor: your-name
+ <mailto:your-email@example.com>";
+
+ // replace the first sentence in this description statement.
+ // replace the copyright notice with the most recent
+ // version, if it has been updated since the publication
+ // of this document
+
+ description
+ "This module defines a template for other YANG modules.
+
+ Copyright (c) <insert year> IETF Trust and the persons
+ identified as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+
+
+
+
+Bierman Best Current Practice [Page 61]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX; see
+ the RFC itself for full legal notices.";
+
+ // RFC Ed.: replace XXXX with actual RFC number and remove
+ // this note
+
+ // replace '2016-03-20' with the module publication date
+ // the format is (year-month-day)
+
+ revision 2016-03-20 {
+ description
+ "what changed in this revision";
+ reference "RFC XXXX: <Replace With Document Title>";
+ }
+
+ // extension statements
+ // feature statements
+ // identity statements
+ // typedef statements
+ // grouping statements
+ // data definition statements
+ // augment statements
+ // rpc statements
+ // notification statements
+ // DO NOT put deviation statements in a published module
+ }
+
+ <CODE ENDS>
+
+Acknowledgments
+
+ The structure and contents of this document are adapted from
+ "Guidelines for Authors and Reviewers of MIB Documents" [RFC4181], by
+ C. M. Heard.
+
+ The working group thanks Martin Bjorklund, Juergen Schoenwaelder,
+ Ladislav Lhotka, Jernej Tuljak, Lou Berger, Robert Wilton, Kent
+ Watsen, and William Lupton for their extensive reviews and
+ contributions to this document.
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 62]
+
+RFC 8407 Guidelines for YANG Documents October 2018
+
+
+Author's Address
+
+ Andy Bierman
+ YumaWorks
+
+ Email: andy@yumaworks.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bierman Best Current Practice [Page 63]
+