summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8342.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/rfc8342.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8342.txt')
-rw-r--r--doc/rfc/rfc8342.txt2467
1 files changed, 2467 insertions, 0 deletions
diff --git a/doc/rfc/rfc8342.txt b/doc/rfc/rfc8342.txt
new file mode 100644
index 0000000..b23ded4
--- /dev/null
+++ b/doc/rfc/rfc8342.txt
@@ -0,0 +1,2467 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) M. Bjorklund
+Request for Comments: 8342 Tail-f Systems
+Updates: 7950 J. Schoenwaelder
+Category: Standards Track Jacobs University
+ISSN: 2070-1721 P. Shafer
+ K. Watsen
+ Juniper Networks
+ R. Wilton
+ Cisco Systems
+ March 2018
+
+
+ Network Management Datastore Architecture (NMDA)
+
+Abstract
+
+ Datastores are a fundamental concept binding the data models written
+ in the YANG data modeling language to network management protocols
+ such as the Network Configuration Protocol (NETCONF) and RESTCONF.
+ This document defines an architectural framework for datastores based
+ on the experience gained with the initial simpler model, addressing
+ requirements that were not well supported in the initial model. This
+ document updates RFC 7950.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ 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
+ Internet Standards 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/rfc8342.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 1]
+
+RFC 8342 NMDA March 2018
+
+
+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.
+
+Table of Contents
+
+ 1. Introduction ....................................................3
+ 2. Objectives ......................................................4
+ 3. Terminology .....................................................5
+ 4. Background ......................................................8
+ 4.1. Original Model of Datastores ...............................9
+ 5. Architectural Model of Datastores ..............................11
+ 5.1. Conventional Configuration Datastores .....................12
+ 5.1.1. The Startup Configuration Datastore (<startup>) ....12
+ 5.1.2. The Candidate Configuration Datastore
+ (<candidate>) ......................................13
+ 5.1.3. The Running Configuration Datastore (<running>) ....13
+ 5.1.4. The Intended Configuration Datastore (<intended>) ..13
+ 5.2. Dynamic Configuration Datastores ..........................14
+ 5.3. The Operational State Datastore (<operational>) ...........14
+ 5.3.1. Remnant Configuration ..............................16
+ 5.3.2. Missing Resources ..................................16
+ 5.3.3. System-Controlled Resources ........................16
+ 5.3.4. Origin Metadata Annotation .........................17
+ 6. Implications on YANG ...........................................18
+ 6.1. XPath Context .............................................18
+ 6.2. Invocation of Actions and RPCs ............................19
+ 7. YANG Modules ...................................................20
+ 8. IANA Considerations ............................................26
+ 8.1. Updates to the IETF XML Registry ..........................26
+ 8.2. Updates to the YANG Module Names Registry .................27
+ 9. Security Considerations ........................................27
+ 10. References ....................................................28
+ 10.1. Normative References .....................................28
+ 10.2. Informative References ...................................29
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 2]
+
+RFC 8342 NMDA March 2018
+
+
+ Appendix A. Guidelines for Defining Datastores ....................31
+ A.1. Define Which YANG Modules Can Be Used in the Datastore .....31
+ A.2. Define Which Subset of YANG-Modeled Data Applies ...........31
+ A.3. Define How Data Is Actualized ..............................31
+ A.4. Define Which Protocols Can Be Used .........................31
+ A.5. Define YANG Identities for the Datastore ...................32
+ Appendix B. Example of an Ephemeral Dynamic Configuration
+ Datastore .............................................32
+ Appendix C. Example Data ..........................................33
+ C.1. System Example .............................................34
+ C.2. BGP Example ................................................37
+ C.2.1. Datastores .............................................38
+ C.2.2. Adding a Peer ..........................................38
+ C.2.3. Removing a Peer ........................................39
+ C.3. Interface Example ..........................................40
+ C.3.1. Pre-provisioned Interfaces .............................41
+ C.3.2. System-Provided Interface ..............................42
+ Acknowledgments ...................................................43
+ Authors' Addresses ................................................44
+
+1. Introduction
+
+ This document provides an architectural framework for datastores as
+ they are used by network management protocols such as the Network
+ Configuration Protocol (NETCONF) [RFC6241], RESTCONF [RFC8040], and
+ the YANG data modeling language [RFC7950]. Datastores are a
+ fundamental concept binding network management data models to network
+ management protocols. Agreement on a common architectural model of
+ datastores ensures that data models can be written in a way that is
+ network management protocol agnostic. This architectural framework
+ identifies a set of conceptual datastores, but it does not mandate
+ that all network management protocols expose all these conceptual
+ datastores. This architecture is agnostic with regard to the
+ encoding used by network management protocols.
+
+ This document updates RFC 7950 by refining the definition of the
+ accessible tree for some XML Path Language (XPath) context (see
+ Section 6.1) and the invocation context of operations (see
+ Section 6.2).
+
+ 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.
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 3]
+
+RFC 8342 NMDA March 2018
+
+
+2. Objectives
+
+ Network management data objects can often take two different values:
+ the value configured by the user or an application (configuration)
+ and the value that the device is actually using (operational state).
+ These two values may be different for a number of reasons, e.g.,
+ system internal interactions with hardware, interaction with
+ protocols or other devices, or simply the time it takes to propagate
+ a configuration change to the software and hardware components of a
+ system. Furthermore, configuration and operational state data
+ objects may have different lifetimes.
+
+ The original model of datastores required these data objects to be
+ modeled twice in the YANG schema -- as "config true" objects and as
+ "config false" objects. The convention adopted by the interfaces
+ data model [RFC8343] and the IP data model [RFC8344] was to use two
+ separate branches rooted at the root of the data tree: one branch for
+ configuration data objects and one branch for operational state data
+ objects.
+
+ The duplication of definitions and the ad hoc separation of
+ operational state data from configuration data lead to a number of
+ problems. Having configuration and operational state data in
+ separate branches in the data model is operationally complicated and
+ impacts the readability of module definitions. Furthermore, the
+ relationship between the branches is not machine readable, and filter
+ expressions operating on configuration and on related operational
+ state are different.
+
+ With the revised architectural model of datastores defined in this
+ document, the data objects are defined only once in the YANG schema
+ but independent instantiations can appear in different datastores,
+ e.g., one for a configured value and another for an operationally
+ used value. This provides a more elegant and simpler solution to the
+ problem.
+
+ The revised architectural model of datastores supports additional
+ datastores for systems that support more advanced processing chains
+ converting configuration to operational state. For example, some
+ systems support configuration that is not currently used (so-called
+ "inactive configuration") or they support configuration templates
+ that are used to expand configuration data via a common template.
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 4]
+
+RFC 8342 NMDA March 2018
+
+
+3. Terminology
+
+ This document defines the following terminology. Some of the terms
+ are revised definitions of terms originally defined in [RFC6241] and
+ [RFC7950] (see also Section 4). The revised definitions are
+ semantically equivalent to the definitions found in [RFC6241] and
+ [RFC7950]. It is expected that the revised definitions provided in
+ this section will replace the definitions in [RFC6241] and [RFC7950]
+ when these documents are revised.
+
+ o datastore: A conceptual place to store and access information. A
+ datastore might be implemented, for example, using files, a
+ database, flash memory locations, or combinations thereof. A
+ datastore maps to an instantiated YANG data tree.
+
+ o schema node: A node in the schema tree. The formal definition is
+ provided in RFC 7950.
+
+ o datastore schema: The combined set of schema nodes for all modules
+ supported by a particular datastore, taking into consideration any
+ deviations and enabled features for that datastore.
+
+ o configuration: Data that is required to get a device from its
+ initial default state into a desired operational state. This data
+ is modeled in YANG using "config true" nodes. Configuration can
+ originate from different sources.
+
+ o configuration datastore: A datastore holding configuration.
+
+ o running configuration datastore: A configuration datastore holding
+ the current configuration of the device. It may include
+ configuration that requires further transformations before it can
+ be applied. This datastore is referred to as "<running>".
+
+ o candidate configuration datastore: A configuration datastore that
+ can be manipulated without impacting the device's running
+ configuration datastore and that can be committed to the running
+ configuration datastore. This datastore is referred to as
+ "<candidate>".
+
+ o startup configuration datastore: A configuration datastore holding
+ the configuration loaded by the device into the running
+ configuration datastore when it boots. This datastore is referred
+ to as "<startup>".
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 5]
+
+RFC 8342 NMDA March 2018
+
+
+ o intended configuration: Configuration that is intended to be used
+ by the device. It represents the configuration after all
+ configuration transformations to <running> have been performed and
+ is the configuration that the system attempts to apply.
+
+ o intended configuration datastore: A configuration datastore
+ holding the complete intended configuration of the device. This
+ datastore is referred to as "<intended>".
+
+ o configuration transformation: The addition, modification, or
+ removal of configuration between the <running> and <intended>
+ datastores. Examples of configuration transformations include the
+ removal of inactive configuration and the configuration produced
+ through the expansion of templates.
+
+ o conventional configuration datastore: One of the following set of
+ configuration datastores: <running>, <startup>, <candidate>, and
+ <intended>. These datastores share a common datastore schema, and
+ protocol operations allow copying data between these datastores.
+ The term "conventional" is chosen as a generic umbrella term for
+ these datastores.
+
+ o conventional configuration: Configuration that is stored in any of
+ the conventional configuration datastores.
+
+ o dynamic configuration datastore: A configuration datastore holding
+ configuration obtained dynamically during the operation of a
+ device through interaction with other systems, rather than through
+ one of the conventional configuration datastores.
+
+ o dynamic configuration: Configuration obtained via a dynamic
+ configuration datastore.
+
+ o learned configuration: Configuration that has been learned via
+ protocol interactions with other systems and that is neither
+ conventional nor dynamic configuration.
+
+ o system configuration: Configuration that is supplied by the device
+ itself.
+
+ o default configuration: Configuration that is not explicitly
+ provided but for which a value defined in the data model is used.
+
+ o applied configuration: Configuration that is actively in use by a
+ device. Applied configuration originates from conventional,
+ dynamic, learned, system, and default configuration.
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 6]
+
+RFC 8342 NMDA March 2018
+
+
+ o system state: The additional data on a system that is not
+ configuration, such as read-only status information and collected
+ statistics. System state is transient and modified by
+ interactions with internal components or other systems. System
+ state is modeled in YANG using "config false" nodes.
+
+ o operational state: The combination of applied configuration and
+ system state.
+
+ o operational state datastore: A datastore holding the complete
+ operational state of the device. This datastore is referred to as
+ "<operational>".
+
+ o origin: A metadata annotation indicating the origin of a
+ data item.
+
+ o remnant configuration: Configuration that remains part of the
+ applied configuration for a period of time after it has been
+ removed from the intended configuration or dynamic configuration.
+ The time period may be minimal or may last until all resources
+ used by the newly deleted configuration (e.g., network
+ connections, memory allocations, file handles) have been
+ deallocated.
+
+ The following additional terms are not datastore specific, but they
+ are commonly used and are thus defined here as well:
+
+ o client: An entity that can access YANG-defined data on a server,
+ over some network management protocol.
+
+ o server: An entity that provides access to YANG-defined data to a
+ client, over some network management protocol.
+
+ o notification: A server-initiated message indicating that a certain
+ event has been recognized by the server.
+
+ o remote procedure call: An operation that can be invoked by a
+ client on a server.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 7]
+
+RFC 8342 NMDA March 2018
+
+
+4. Background
+
+ NETCONF [RFC6241] provides the following definitions:
+
+ o datastore: A conceptual place to store and access information. A
+ datastore might be implemented, for example, using files, a
+ database, flash memory locations, or combinations thereof.
+
+ o configuration datastore: The datastore holding the complete set of
+ configuration that is required to get a device from its initial
+ default state into a desired operational state.
+
+ YANG 1.1 [RFC7950] provides the following refinements when NETCONF is
+ used with YANG (which is the usual case, but note that NETCONF was
+ defined before YANG existed):
+
+ o datastore: When modeled with YANG, a datastore is realized as an
+ instantiated data tree.
+
+ o configuration datastore: When modeled with YANG, a configuration
+ datastore is realized as an instantiated data tree with
+ configuration.
+
+ [RFC6244] defined operational state data as follows:
+
+ o Operational state data is a set of data that has been obtained by
+ the system at runtime and influences the system's behavior similar
+ to configuration data. In contrast to configuration data,
+ operational state is transient and modified by interactions with
+ internal components or other systems via specialized protocols.
+
+ Section 4.3.3 of [RFC6244] discusses operational state and mentions,
+ among other things, the option to consider operational state as being
+ stored in another datastore. Section 4.4 of [RFC6244] then concludes
+ that, at the time of its writing, modeling state as distinct leafs
+ and distinct branches is the recommended approach.
+
+ Implementation experience and requests from operators [OpState-Reqs]
+ [OpState-Modeling] indicate that the datastore model initially
+ designed for NETCONF and refined by YANG needs to be extended. In
+ particular, the notion of intended configuration and applied
+ configuration has developed.
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 8]
+
+RFC 8342 NMDA March 2018
+
+
+4.1. Original Model of Datastores
+
+ The following drawing shows the original model of datastores as it is
+ currently used by NETCONF [RFC6241]:
+
+ +-------------+ +-----------+
+ | <candidate> | | <startup> |
+ | (ct, rw) |<---+ +--->| (ct, rw) |
+ +-------------+ | | +-----------+
+ | | | |
+ | +-----------+ |
+ +-------->| <running> |<--------+
+ | (ct, rw) |
+ +-----------+
+ |
+ v
+ operational state <--- control plane
+ (cf, ro)
+
+ ct = config true; cf = config false
+ rw = read-write; ro = read-only
+ boxes denote datastores
+
+ Figure 1
+
+ Note that this diagram simplifies the model: "read-only" (ro) and
+ "read-write" (rw) are to be understood from the client's perspective,
+ at a conceptual level. In NETCONF, for example, support for
+ <candidate> and <startup> is optional, and <running> does not have to
+ be writable. Furthermore, <startup> can only be modified by copying
+ <running> to <startup> in the standardized NETCONF datastore editing
+ model. The RESTCONF protocol does not expose these differences and
+ instead provides only a writable unified datastore, which hides
+ whether edits are done through <candidate>, by directly modifying
+ <running>, or via some other implementation-specific mechanism.
+ RESTCONF also hides how configuration is made persistent. Note that
+ implementations may also have additional datastores that can
+ propagate changes to <running>. NETCONF explicitly mentions
+ so-called "named datastores".
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 9]
+
+RFC 8342 NMDA March 2018
+
+
+ Some observations:
+
+ o Operational state has not been defined as a datastore, although
+ there were proposals in the past to introduce an operational state
+ datastore.
+
+ o The NETCONF <get> operation returns the contents of <running>
+ together with the operational state. It is therefore necessary
+ that "config false" data be in a different branch than the
+ "config true" data if the operational state can have a different
+ lifetime compared to configuration or if configuration is not
+ immediately or successfully applied.
+
+ o Several implementations have proprietary mechanisms that allow
+ clients to store inactive data in <running>. Inactive data is
+ conceptually removed before validation.
+
+ o Some implementations have proprietary mechanisms that allow
+ clients to define configuration templates in <running>. These
+ templates are expanded automatically by the system, and the
+ resulting configuration is applied internally.
+
+ o Some operators have reported that it is essential for them to be
+ able to retrieve the configuration that has actually been
+ successfully applied, which may be a subset or a superset of the
+ <running> configuration.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 10]
+
+RFC 8342 NMDA March 2018
+
+
+5. Architectural Model of Datastores
+
+ Below is a new conceptual model of datastores, extending the original
+ model in order to reflect the experience gained with the original
+ model.
+
+ +-------------+ +-----------+
+ | <candidate> | | <startup> |
+ | (ct, rw) |<---+ +--->| (ct, rw) |
+ +-------------+ | | +-----------+
+ | | | |
+ | +-----------+ |
+ +-------->| <running> |<--------+
+ | (ct, rw) |
+ +-----------+
+ |
+ | // configuration transformations,
+ | // e.g., removal of nodes marked as
+ | // "inactive", expansion of
+ | // templates
+ v
+ +------------+
+ | <intended> | // subject to validation
+ | (ct, ro) |
+ +------------+
+ | // changes applied, subject to
+ | // local factors, e.g., missing
+ | // resources, delays
+ |
+ dynamic | +-------- learned configuration
+ configuration | +-------- system configuration
+ datastores -----+ | +-------- default configuration
+ | | |
+ v v v
+ +---------------+
+ | <operational> | <-- system state
+ | (ct + cf, ro) |
+ +---------------+
+
+ ct = config true; cf = config false
+ rw = read-write; ro = read-only
+ boxes denote named datastores
+
+ Figure 2
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 11]
+
+RFC 8342 NMDA March 2018
+
+
+5.1. Conventional Configuration Datastores
+
+ The conventional configuration datastores are a set of configuration
+ datastores that share exactly the same datastore schema, allowing
+ data to be copied between them. The term is meant as a generic
+ umbrella description of these datastores. If a module does not
+ contain any configuration data nodes and it is not needed to satisfy
+ any imports, then it MAY be omitted from the datastore schema for the
+ conventional configuration datastores. The set of datastores
+ include:
+
+ o <running>
+
+ o <candidate>
+
+ o <startup>
+
+ o <intended>
+
+ Other conventional configuration datastores may be defined in future
+ documents.
+
+ The flow of data between these datastores is depicted in Section 5.
+
+ The specific protocols may define explicit operations to copy between
+ these datastores, e.g., NETCONF defines the <copy-config> operation.
+
+5.1.1. The Startup Configuration Datastore (<startup>)
+
+ The startup configuration datastore (<startup>) is a configuration
+ datastore holding the configuration loaded by the device when it
+ boots. <startup> is only present on devices that separate the
+ startup configuration from the running configuration datastore.
+
+ The startup configuration datastore may not be supported by all
+ protocols or implementations.
+
+ On devices that support non-volatile storage, the contents of
+ <startup> will typically persist across reboots via that storage. At
+ boot time, the device loads the saved startup configuration into
+ <running>. To save a new startup configuration, data is copied to
+ <startup> via either implicit or explicit protocol operations.
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 12]
+
+RFC 8342 NMDA March 2018
+
+
+5.1.2. The Candidate Configuration Datastore (<candidate>)
+
+ The candidate configuration datastore (<candidate>) is a
+ configuration datastore that can be manipulated without impacting the
+ device's current configuration and that can be committed to
+ <running>.
+
+ The candidate configuration datastore may not be supported by all
+ protocols or implementations.
+
+ <candidate> does not typically persist across reboots, even in the
+ presence of non-volatile storage. If <candidate> is stored using
+ non-volatile storage, it is reset at boot time to the contents of
+ <running>.
+
+5.1.3. The Running Configuration Datastore (<running>)
+
+ The running configuration datastore (<running>) is a configuration
+ datastore that holds the current configuration of the device. It MAY
+ include configuration that requires further transformation before it
+ can be applied, e.g., inactive configuration, or template-mechanism-
+ oriented configuration that needs further expansion. However,
+ <running> MUST always be a valid configuration data tree, as defined
+ in Section 8.1 of [RFC7950].
+
+ <running> MUST be supported if the device can be configured via
+ conventional configuration datastores.
+
+ If a device does not have a distinct <startup> and non-volatile
+ storage is available, the device will typically use that non-volatile
+ storage to allow <running> to persist across reboots.
+
+5.1.4. The Intended Configuration Datastore (<intended>)
+
+ The intended configuration datastore (<intended>) is a read-only
+ configuration datastore. It represents the configuration after all
+ configuration transformations to <running> are performed (e.g.,
+ template expansion, removal of inactive configuration) and is the
+ configuration that the system attempts to apply.
+
+ <intended> is tightly coupled to <running>. Whenever data is written
+ to <running>, the server MUST also immediately update and validate
+ <intended>.
+
+ <intended> MAY also be updated independently of <running> if the
+ effect of a configuration transformation changes, but <intended> MUST
+ always be a valid configuration data tree, as defined in Section 8.1
+ of [RFC7950].
+
+
+
+Bjorklund, et al. Standards Track [Page 13]
+
+RFC 8342 NMDA March 2018
+
+
+ For simple implementations, <running> and <intended> are identical.
+
+ The contents of <intended> are also related to the "config true"
+ subset of <operational>; hence, a client can determine to what extent
+ the intended configuration is currently in use by checking to see
+ whether the contents of <intended> also appear in <operational>.
+
+ <intended> does not persist across reboots; its relationship with
+ <running> makes that unnecessary.
+
+ Currently, there are no standard mechanisms defined that affect
+ <intended> so that it would have different content than <running>,
+ but this architecture allows for such mechanisms to be defined.
+
+ One example of such a mechanism is support for marking nodes as
+ inactive in <running>. Inactive nodes are not copied to <intended>.
+ A second example is support for templates, which can perform
+ transformations on the configuration from <running> to the
+ configuration written to <intended>.
+
+5.2. Dynamic Configuration Datastores
+
+ The model recognizes the need for dynamic configuration datastores
+ that are, by definition, not part of the persistent configuration of
+ a device. In some contexts, these have been termed "ephemeral
+ datastores", since the information is ephemeral, i.e., lost upon
+ reboot. The dynamic configuration datastores interact with the rest
+ of the system through <operational>.
+
+ The datastore schema for a dynamic configuration datastore MAY differ
+ from the datastore schema used for conventional configuration
+ datastores. If a module does not contain any configuration data
+ nodes and it is not needed to satisfy any imports, then it MAY be
+ omitted from the datastore schema for the dynamic configuration
+ datastore.
+
+5.3. The Operational State Datastore (<operational>)
+
+ The operational state datastore (<operational>) is a read-only
+ datastore that consists of all "config true" and "config false" nodes
+ defined in the datastore's schema. In the original NETCONF model,
+ the operational state only had "config false" nodes. The reason for
+ incorporating "config true" nodes here is to be able to expose all
+ operational settings without having to replicate definitions in the
+ data models.
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 14]
+
+RFC 8342 NMDA March 2018
+
+
+ <operational> contains system state and all configuration actually
+ used by the system. This includes all applied configuration from
+ <intended>, learned configuration, system-provided configuration, and
+ default values defined by any supported data models. In addition,
+ <operational> also contains applied configuration from dynamic
+ configuration datastores.
+
+ The datastore schema for <operational> MUST be a superset of the
+ combined datastore schema used in all configuration datastores,
+ except that configuration data nodes supported in a configuration
+ datastore MAY be omitted from <operational> if a server is not able
+ to accurately report them.
+
+ Requests to retrieve nodes from <operational> always return the value
+ in use if the node exists, regardless of any default value specified
+ in the YANG module. If no value is returned for a given node, then
+ this implies that the node is not used by the device.
+
+ The interpretation of what constitutes being "in use" by the system
+ is dependent on both the schema definition and the device
+ implementation. Generally, functionality that is enabled and
+ operational on the system would be considered to be "in use".
+ Conversely, functionality that is neither enabled nor operational on
+ the system is considered not to be "in use"; hence, it SHOULD be
+ omitted from <operational>.
+
+ <operational> SHOULD conform to any constraints specified in the data
+ model, but given the principal aim of returning "in use" values, it
+ is possible that constraints MAY be violated under some circumstances
+ (e.g., an abnormal value is "in use", the structure of a list is
+ being modified, or remnant configuration (see Section 5.3.1) still
+ exists). Note that deviations SHOULD be used when it is known in
+ advance that a device does not fully conform to the <operational>
+ schema.
+
+ Only semantic constraints MAY be violated. These are the YANG
+ "when", "must", "mandatory", "unique", "min-elements", and
+ "max-elements" statements; and the uniqueness of key values.
+
+ Syntactic constraints MUST NOT be violated, including hierarchical
+ organization, identifiers, and type-based constraints. If a node in
+ <operational> does not meet the syntactic constraints, then it
+ MUST NOT be returned, and some other mechanism should be used to flag
+ the error.
+
+ <operational> does not persist across reboots.
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 15]
+
+RFC 8342 NMDA March 2018
+
+
+5.3.1. Remnant Configuration
+
+ Changes to configuration may take time to percolate through to
+ <operational>. During this period, <operational> may contain nodes
+ for both the previous and current configuration, as closely as
+ possible tracking the current operation of the device. Such remnant
+ configuration from the previous configuration persists until the
+ system has released resources used by the newly deleted configuration
+ (e.g., network connections, memory allocations, file handles).
+
+ Remnant configuration is a common example of where the semantic
+ constraints defined in the data model cannot be relied upon for
+ <operational>, since the system may have remnant configuration whose
+ constraints were valid with the previous configuration and that are
+ not valid with the current configuration. Since constraints on
+ "config false" nodes may refer to "config true" nodes, remnant
+ configuration may force the violation of those constraints.
+
+5.3.2. Missing Resources
+
+ Configuration in <intended> can refer to resources that are not
+ available or otherwise not physically present. In these situations,
+ these parts of <intended> are not applied. The data appears in
+ <intended> but does not appear in <operational>.
+
+ A typical example is an interface configuration that refers to an
+ interface that is not currently present. In such a situation, the
+ interface configuration remains in <intended> but the interface
+ configuration will not appear in <operational>.
+
+ Note that configuration validity cannot depend on the current state
+ of such resources, since that would imply that removing a resource
+ might render the configuration invalid. This is unacceptable,
+ especially given that rebooting such a device would cause it to
+ restart with an invalid configuration. Instead, we allow
+ configuration for missing resources to exist in <running> and
+ <intended>, but it will not appear in <operational>.
+
+5.3.3. System-Controlled Resources
+
+ Sometimes, resources are controlled by the device and the
+ corresponding system-controlled data appears in (and disappears from)
+ <operational> dynamically. If a system-controlled resource has
+ matching configuration in <intended> when it appears, the system will
+ try to apply the configuration; this causes the configuration to
+ appear in <operational> eventually (if application of the
+ configuration was successful).
+
+
+
+
+Bjorklund, et al. Standards Track [Page 16]
+
+RFC 8342 NMDA March 2018
+
+
+5.3.4. Origin Metadata Annotation
+
+ As configuration flows into <operational>, it is conceptually marked
+ with a metadata annotation [RFC7952] that indicates its origin. The
+ origin applies to all configuration nodes except non-presence
+ containers. The "origin" metadata annotation is defined in
+ Section 7. The values are YANG identities. The following identities
+ are defined:
+
+ o origin: abstract base identity from which the other origin
+ identities are derived.
+
+ o intended: represents configuration provided by <intended>.
+
+ o dynamic: represents configuration provided by a dynamic
+ configuration datastore.
+
+ o system: represents configuration provided by the system itself.
+ Examples of system configuration include applied configuration for
+ an always-existing loopback interface, or interface configuration
+ that is auto-created due to the hardware currently present in the
+ device.
+
+ o learned: represents configuration that has been learned via
+ protocol interactions with other systems, including such protocols
+ as link-layer negotiations, routing protocols, and DHCP.
+
+ o default: represents configuration using a default value specified
+ in the data model, using either values in the "default" statement
+ or any values described in the "description" statement. The
+ default origin is only used when the configuration has not been
+ provided by any other source.
+
+ o unknown: represents configuration for which the system cannot
+ identify the origin.
+
+ These identities can be further refined, e.g., there could be
+ separate identities for particular types or instances of dynamic
+ configuration datastores derived from "dynamic".
+
+ For all configuration data nodes in <operational>, the device SHOULD
+ report the origin that most accurately reflects the source of the
+ configuration that is in use by the system.
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 17]
+
+RFC 8342 NMDA March 2018
+
+
+ In cases where it could be ambiguous as to which origin should be
+ used, i.e., where the same data node value has originated from
+ multiple sources, the "description" statement in the YANG module
+ SHOULD be used as guidance for choosing the appropriate origin. For
+ example:
+
+ If, for a particular configuration node, the associated YANG
+ "description" statement indicates that a protocol-negotiated value
+ overrides any configured value, then the origin would be reported as
+ "learned", even when a learned value is the same as the configured
+ value.
+
+ Conversely, if, for a particular configuration node, the associated
+ YANG "description" statement indicates that a protocol-negotiated
+ value does not override an explicitly configured value, then the
+ origin would be reported as "intended", even when a learned value is
+ the same as the configured value.
+
+ In the case that a device cannot provide an accurate origin for a
+ particular configuration data node, it SHOULD use the origin
+ "unknown".
+
+6. Implications on YANG
+
+6.1. XPath Context
+
+ This section updates Section 6.4.1 of RFC 7950.
+
+ If a server implements the architecture defined in this document, the
+ accessible trees for some XPath contexts are refined as follows:
+
+ o If the XPath expression is defined in a substatement to a data
+ node that represents system state, the accessible tree is all
+ operational state in the server. The root node has all top-level
+ data nodes in all modules as children.
+
+ o If the XPath expression is defined in a substatement to a
+ "notification" statement, the accessible tree is the notification
+ instance and all operational state in the server. If the
+ notification is defined on the top level in a module, then the
+ root node has the node representing the notification being defined
+ and all top-level data nodes in all modules as children.
+ Otherwise, the root node has all top-level data nodes in all
+ modules as children.
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 18]
+
+RFC 8342 NMDA March 2018
+
+
+ o If the XPath expression is defined in a substatement to an "input"
+ statement in an "rpc" or "action" statement, the accessible tree
+ is the RPC or action operation instance and all operational state
+ in the server. The root node has top-level data nodes in all
+ modules as children. Additionally, for an RPC, the root node also
+ has the node representing the RPC operation being defined as a
+ child. The node representing the operation being defined has the
+ operation's input parameters as children.
+
+ o If the XPath expression is defined in a substatement to an
+ "output" statement in an "rpc" or "action" statement, the
+ accessible tree is the RPC or action operation instance and all
+ operational state in the server. The root node has top-level data
+ nodes in all modules as children. Additionally, for an RPC, the
+ root node also has the node representing the RPC operation being
+ defined as a child. The node representing the operation being
+ defined has the operation's output parameters as children.
+
+6.2. Invocation of Actions and RPCs
+
+ This section updates Section 7.15 of RFC 7950.
+
+ Actions are always invoked in the context of the operational state
+ datastore. The node for which the action is invoked MUST exist in
+ the operational state datastore.
+
+ Note that this document does not constrain the result of invoking an
+ RPC or action in any way. For example, an RPC might be defined to
+ modify the contents of some datastore.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 19]
+
+RFC 8342 NMDA March 2018
+
+
+7. YANG Modules
+
+ <CODE BEGINS> file "ietf-datastores@2018-02-14.yang"
+
+ module ietf-datastores {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-datastores";
+ prefix ds;
+
+ organization
+ "IETF Network Modeling (NETMOD) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+
+ WG List: <mailto:netmod@ietf.org>
+
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Author: Phil Shafer
+ <mailto:phil@juniper.net>
+
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+
+ Author: Rob Wilton
+ <rwilton@cisco.com>";
+
+ description
+ "This YANG module defines a set of identities for identifying
+ datastores.
+
+ Copyright (c) 2018 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
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 20]
+
+RFC 8342 NMDA March 2018
+
+
+ This version of this YANG module is part of RFC 8342
+ (https://www.rfc-editor.org/info/rfc8342); see the RFC itself
+ for full legal notices.";
+
+ revision 2018-02-14 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8342: Network Management Datastore Architecture (NMDA)";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity datastore {
+ description
+ "Abstract base identity for datastore identities.";
+ }
+
+ identity conventional {
+ base datastore;
+ description
+ "Abstract base identity for conventional configuration
+ datastores.";
+ }
+
+ identity running {
+ base conventional;
+ description
+ "The running configuration datastore.";
+ }
+
+ identity candidate {
+ base conventional;
+ description
+ "The candidate configuration datastore.";
+ }
+
+ identity startup {
+ base conventional;
+ description
+ "The startup configuration datastore.";
+ }
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 21]
+
+RFC 8342 NMDA March 2018
+
+
+ identity intended {
+ base conventional;
+ description
+ "The intended configuration datastore.";
+ }
+
+ identity dynamic {
+ base datastore;
+ description
+ "Abstract base identity for dynamic configuration datastores.";
+ }
+
+ identity operational {
+ base datastore;
+ description
+ "The operational state datastore.";
+ }
+
+ /*
+ * Type definitions
+ */
+
+ typedef datastore-ref {
+ type identityref {
+ base datastore;
+ }
+ description
+ "A datastore identity reference.";
+ }
+ }
+
+ <CODE ENDS>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 22]
+
+RFC 8342 NMDA March 2018
+
+
+ <CODE BEGINS> file "ietf-origin@2018-02-14.yang"
+
+ module ietf-origin {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-origin";
+ prefix or;
+
+ import ietf-yang-metadata {
+ prefix md;
+ }
+
+ organization
+ "IETF Network Modeling (NETMOD) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+
+ WG List: <mailto:netmod@ietf.org>
+
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Author: Phil Shafer
+ <mailto:phil@juniper.net>
+
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+
+ Author: Rob Wilton
+ <rwilton@cisco.com>";
+
+ description
+ "This YANG module defines an 'origin' metadata annotation and a
+ set of identities for the origin value.
+
+ Copyright (c) 2018 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
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+
+
+
+Bjorklund, et al. Standards Track [Page 23]
+
+RFC 8342 NMDA March 2018
+
+
+ This version of this YANG module is part of RFC 8342
+ (https://www.rfc-editor.org/info/rfc8342); see the RFC itself
+ for full legal notices.";
+
+ revision 2018-02-14 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8342: Network Management Datastore Architecture (NMDA)";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity origin {
+ description
+ "Abstract base identity for the origin annotation.";
+ }
+
+ identity intended {
+ base origin;
+ description
+ "Denotes configuration from the intended configuration
+ datastore.";
+ }
+
+ identity dynamic {
+ base origin;
+ description
+ "Denotes configuration from a dynamic configuration
+ datastore.";
+ }
+
+ identity system {
+ base origin;
+ description
+ "Denotes configuration originated by the system itself.
+
+ Examples of system configuration include applied configuration
+ for an always-existing loopback interface, or interface
+ configuration that is auto-created due to the hardware
+ currently present in the device.";
+ }
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 24]
+
+RFC 8342 NMDA March 2018
+
+
+ identity learned {
+ base origin;
+ description
+ "Denotes configuration learned from protocol interactions with
+ other devices, instead of via either the intended
+ configuration datastore or any dynamic configuration
+ datastore.
+
+ Examples of protocols that provide learned configuration
+ include link-layer negotiations, routing protocols, and
+ DHCP.";
+ }
+
+ identity default {
+ base origin;
+ description
+ "Denotes configuration that does not have a configured or
+ learned value but has a default value in use. Covers both
+ values defined in a 'default' statement and values defined
+ via an explanation in a 'description' statement.";
+ }
+
+ identity unknown {
+ base origin;
+ description
+ "Denotes configuration for which the system cannot identify the
+ origin.";
+ }
+
+ /*
+ * Type definitions
+ */
+
+ typedef origin-ref {
+ type identityref {
+ base origin;
+ }
+ description
+ "An origin identity reference.";
+ }
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 25]
+
+RFC 8342 NMDA March 2018
+
+
+ /*
+ * Metadata annotations
+ */
+
+ md:annotation origin {
+ type origin-ref;
+ description
+ "The 'origin' annotation can be present on any configuration
+ data node in the operational state datastore. It specifies
+ from where the node originated. If not specified for a given
+ configuration data node, then the origin is the same as the
+ origin of its parent node in the data tree. The origin for
+ any top-level configuration data nodes must be specified.";
+ }
+ }
+
+ <CODE ENDS>
+
+8. IANA Considerations
+
+8.1. Updates to the IETF XML Registry
+
+ This document registers two URIs in the "IETF XML Registry"
+ [RFC3688]. Following the format in [RFC3688], the following
+ registrations have been made:
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-datastores
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-origin
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 26]
+
+RFC 8342 NMDA March 2018
+
+
+8.2. Updates to the YANG Module Names Registry
+
+ This document registers two YANG modules in the "YANG Module Names"
+ registry [RFC6020]. Following the format in [RFC6020], the following
+ registrations have been made:
+
+ name: ietf-datastores
+ namespace: urn:ietf:params:xml:ns:yang:ietf-datastores
+ prefix: ds
+ reference: RFC 8342
+
+ name: ietf-origin
+ namespace: urn:ietf:params:xml:ns:yang:ietf-origin
+ prefix: or
+ reference: RFC 8342
+
+9. Security Considerations
+
+ This document discusses an architectural model of datastores for
+ network management using NETCONF/RESTCONF and YANG. It has no
+ security impact on the Internet.
+
+ Although this document specifies several YANG modules, these modules
+ only define identities and a metadata annotation; hence, the "YANG
+ module security guidelines" [YANG-SEC] do not apply.
+
+ The origin metadata annotation exposes the origin of values in the
+ applied configuration. Origin information may provide hints that
+ certain control-plane protocols are active on a device. Since origin
+ information is tied to applied configuration values, it is only
+ accessible to clients that have the permissions to read the applied
+ configuration values. Security administrators should consider the
+ sensitivity of origin information while defining access control
+ rules.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 27]
+
+RFC 8342 NMDA March 2018
+
+
+10. References
+
+10.1. Normative References
+
+ [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>.
+
+ [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>.
+
+ [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>.
+
+ [RFC7952] Lhotka, L., "Defining and Using Metadata with YANG",
+ RFC 7952, DOI 10.17487/RFC7952, August 2016,
+ <https://www.rfc-editor.org/info/rfc7952>.
+
+ [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>.
+
+ [W3C.REC-xml-20081126]
+ Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and
+ F. Yergeau, "Extensible Markup Language (XML) 1.0
+ (Fifth Edition)", World Wide Web Consortium Recommendation
+ REC-xml-20081126, November 2008,
+ <https://www.w3.org/TR/2008/REC-xml-20081126>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 28]
+
+RFC 8342 NMDA March 2018
+
+
+10.2. Informative References
+
+ [NETMOD-Operational]
+ Bjorklund, M. and L. Lhotka, "Operational Data in NETCONF
+ and YANG", Work in Progress, draft-bjorklund-netmod-
+ operational-00, October 2012.
+
+ [OpState-Enhance]
+ Watsen, K., Bierman, A., Bjorklund, M., and J.
+ Schoenwaelder, "Operational State Enhancements for YANG,
+ NETCONF, and RESTCONF", Work in Progress, draft-kwatsen-
+ netmod-opstate-02, February 2016.
+
+ [OpState-Modeling]
+ Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling
+ of Operational State Data in YANG", Work in Progress,
+ draft-openconfig-netmod-opstate-01, July 2015.
+
+ [OpState-Reqs]
+ Watsen, K. and T. Nadeau, "Terminology and Requirements
+ for Enhanced Handling of Operational State", Work in
+ Progress, draft-ietf-netmod-opstate-reqs-04, January 2016.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [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>.
+
+ [RFC6244] Shafer, P., "An Architecture for Network Management Using
+ NETCONF and YANG", RFC 6244, DOI 10.17487/RFC6244,
+ June 2011, <https://www.rfc-editor.org/info/rfc6244>.
+
+ [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>.
+
+ [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management",
+ RFC 8344, DOI 10.17487/RFC8344, March 2018,
+ <https://www.rfc-editor.org/info/rfc8344>.
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 29]
+
+RFC 8342 NMDA March 2018
+
+
+ [With-config-state]
+ Wilton, R., ""With-config-state" Capability for
+ NETCONF/RESTCONF", Work in Progress, draft-wilton-netmod-
+ opstate-yang-02, December 2015.
+
+ [YANG-SEC] IETF, "YANG Security Guidelines", <https://trac.ietf.org/
+ trac/ops/wiki/yang-security-guidelines>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 30]
+
+RFC 8342 NMDA March 2018
+
+
+Appendix A. Guidelines for Defining Datastores
+
+ The definition of a new datastore in this architecture should be
+ provided in a document (e.g., an RFC) purposed for defining the
+ datastore. When it makes sense, more than one datastore may be
+ defined in the same document (e.g., when the datastores are logically
+ connected). Each datastore's definition should address the points
+ specified in the subsections below.
+
+A.1. Define Which YANG Modules Can Be Used in the Datastore
+
+ Not all YANG modules may be used in all datastores. Some datastores
+ may constrain which data models can be used in them. If it is
+ desirable that a subset of all modules can be targeted to the
+ datastore, then the documentation defining the datastore must
+ indicate this.
+
+A.2. Define Which Subset of YANG-Modeled Data Applies
+
+ By default, the data in a datastore is modeled by all YANG statements
+ in the available YANG modules. However, it is possible to specify
+ criteria that YANG statements must satisfy in order to be present in
+ a datastore. For instance, maybe only "config true" nodes, or
+ "config false" nodes that also have a specific YANG extension, are
+ present in the datastore.
+
+A.3. Define How Data Is Actualized
+
+ The new datastore must specify how it interacts with other
+ datastores.
+
+ For example, the diagram in Section 5 depicts dynamic configuration
+ datastores feeding into <operational>. How this interaction occurs
+ has to be defined by the particular dynamic configuration datastores.
+ In some cases, it may occur implicitly, as soon as the data is put
+ into the dynamic configuration datastore, while in other cases an
+ explicit action (e.g., an RPC) may be required to trigger the
+ application of the datastore's data.
+
+A.4. Define Which Protocols Can Be Used
+
+ By default, it is assumed that both the NETCONF and RESTCONF
+ protocols can be used to interact with a datastore. However, it may
+ be that only a specific protocol can be used (e.g., Forwarding and
+ Control Element Separation (ForCES)) or that a subset of all protocol
+ operations or capabilities are available (e.g., no locking or no
+ XPath-based filtering).
+
+
+
+
+Bjorklund, et al. Standards Track [Page 31]
+
+RFC 8342 NMDA March 2018
+
+
+A.5. Define YANG Identities for the Datastore
+
+ The datastore must be defined with a YANG identity that uses the
+ "ds:datastore" identity, or one of its derived identities, as its
+ base. This identity is necessary, so that the datastore can be
+ referenced in protocol operations (e.g., <get-data>).
+
+ The datastore may also be defined with an identity that uses the
+ "or:origin" identity, or one of its derived identities, as its base.
+ This identity is needed if the datastore interacts with
+ <operational>, so that data originating from the datastore can be
+ identified as such via the "origin" metadata attribute defined in
+ Section 7.
+
+ An example of these guidelines in use is provided in Appendix B.
+
+Appendix B. Example of an Ephemeral Dynamic Configuration Datastore
+
+ This section defines documentation for an example dynamic
+ configuration datastore using the guidelines provided in Appendix A.
+ For brevity, only a terse example is provided; it is expected that a
+ standalone RFC would be written when this type of scenario is fully
+ considered.
+
+ This example defines a dynamic configuration datastore called
+ "ephemeral", which is loosely modeled after the work done in the I2RS
+ Working Group.
+
+ +--------------------+----------------------------------------------+
+ | Name | Value |
+ +--------------------+----------------------------------------------+
+ | Name | ephemeral |
+ | | |
+ | YANG modules | all (default) |
+ | | |
+ | YANG nodes | all "config true" data nodes |
+ | | |
+ | How applied | changes automatically propagated to |
+ | | <operational> |
+ | | |
+ | Protocols | NETCONF/RESTCONF (default) |
+ | | |
+ | Defining YANG | "example-ds-ephemeral" |
+ | module | |
+ +--------------------+----------------------------------------------+
+
+ Properties of the Example "ephemeral" Datastore
+
+
+
+
+Bjorklund, et al. Standards Track [Page 32]
+
+RFC 8342 NMDA March 2018
+
+
+ module example-ds-ephemeral {
+ yang-version 1.1;
+ namespace "urn:example:ds-ephemeral";
+ prefix eph;
+
+ import ietf-datastores {
+ prefix ds;
+ }
+ import ietf-origin {
+ prefix or;
+ }
+
+ // datastore identity
+ identity ds-ephemeral {
+ base ds:dynamic;
+ description
+ "The ephemeral dynamic configuration datastore.";
+ }
+
+ // origin identity
+ identity or-ephemeral {
+ base or:dynamic;
+ description
+ "Denotes data from the ephemeral dynamic configuration
+ datastore.";
+ }
+ }
+
+Appendix C. Example Data
+
+ The use of datastores is complex, and many of the subtle effects are
+ more easily presented using examples. This section presents a series
+ of example data models with some sample contents of the various
+ datastores.
+
+ The XML [W3C.REC-xml-20081126] snippets that follow are provided as
+ examples only.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 33]
+
+RFC 8342 NMDA March 2018
+
+
+C.1. System Example
+
+ In this example, the following fictional module is used:
+
+ module example-system {
+ yang-version 1.1;
+ namespace urn:example:system;
+ prefix sys;
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ container system {
+ leaf hostname {
+ type string;
+ }
+
+ list interface {
+ key name;
+
+ leaf name {
+ type string;
+ }
+
+ container auto-negotiation {
+ leaf enabled {
+ type boolean;
+ default true;
+ }
+ leaf speed {
+ type uint32;
+ units mbps;
+ description
+ "The advertised speed, in Mbps.";
+ }
+ }
+
+ leaf speed {
+ type uint32;
+ units mbps;
+ config false;
+ description
+ "The speed of the interface, in Mbps.";
+ }
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 34]
+
+RFC 8342 NMDA March 2018
+
+
+ list address {
+ key ip;
+
+ leaf ip {
+ type inet:ip-address;
+ }
+ leaf prefix-length {
+ type uint8;
+ }
+ }
+ }
+ }
+ }
+
+ The operator has configured the hostname and two interfaces, so the
+ contents of <intended> are:
+
+ <system xmlns="urn:example:system">
+
+ <hostname>foo.example.com</hostname>
+
+ <interface>
+ <name>eth0</name>
+ <auto-negotiation>
+ <speed>1000</speed>
+ </auto-negotiation>
+ <address>
+ <ip>2001:db8::10</ip>
+ <prefix-length>64</prefix-length>
+ </address>
+ </interface>
+
+ <interface>
+ <name>eth1</name>
+ <address>
+ <ip>2001:db8::20</ip>
+ <prefix-length>64</prefix-length>
+ </address>
+ </interface>
+
+ </system>
+
+ The system has detected that the hardware for one of the configured
+ interfaces ("eth1") is not yet present, so the configuration for that
+ interface is not applied. Further, the system has received a
+ hostname and an additional IP address for "eth0" over DHCP. In
+ addition to filling in the default value for the auto-negotiation
+ enabled leaf, a loopback interface entry is also automatically
+
+
+
+Bjorklund, et al. Standards Track [Page 35]
+
+RFC 8342 NMDA March 2018
+
+
+ instantiated by the system. All of this is reflected in
+ <operational>. Note how the "origin" metadata attribute for several
+ "config true" data nodes is inherited from their parent data nodes.
+
+ <system
+ xmlns="urn:example:system"
+ xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin">
+
+ <hostname or:origin="or:learned">bar.example.com</hostname>
+
+ <interface or:origin="or:intended">
+ <name>eth0</name>
+ <auto-negotiation>
+ <enabled or:origin="or:default">true</enabled>
+ <speed>1000</speed>
+ </auto-negotiation>
+ <speed>100</speed>
+ <address>
+ <ip>2001:db8::10</ip>
+ <prefix-length>64</prefix-length>
+ </address>
+ <address or:origin="or:learned">
+ <ip>2001:db8::1:100</ip>
+ <prefix-length>64</prefix-length>
+ </address>
+ </interface>
+
+ <interface or:origin="or:system">
+ <name>lo0</name>
+ <address>
+ <ip>::1</ip>
+ <prefix-length>128</prefix-length>
+ </address>
+ </interface>
+
+ </system>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 36]
+
+RFC 8342 NMDA March 2018
+
+
+C.2. BGP Example
+
+ Consider the following fragment of a fictional BGP module:
+
+ container bgp {
+ leaf local-as {
+ type uint32;
+ }
+ leaf peer-as {
+ type uint32;
+ }
+ list peer {
+ key name;
+ leaf name {
+ type inet:ip-address;
+ }
+ leaf local-as {
+ type uint32;
+ description
+ "... Defaults to ../local-as.";
+ }
+ leaf peer-as {
+ type uint32;
+ description
+ "... Defaults to ../peer-as.";
+ }
+ leaf local-port {
+ type inet:port;
+ }
+ leaf remote-port {
+ type inet:port;
+ default 179;
+ }
+ leaf state {
+ config false;
+ type enumeration {
+ enum init;
+ enum established;
+ enum closing;
+ }
+ }
+ }
+ }
+
+ In this example model, both bgp/peer/local-as and bgp/peer/peer-as
+ have complex hierarchical values, allowing the user to specify
+ default values for all peers in a single location.
+
+
+
+
+Bjorklund, et al. Standards Track [Page 37]
+
+RFC 8342 NMDA March 2018
+
+
+ The model also follows the pattern of fully integrating state
+ ("config false") nodes with configuration ("config true") nodes.
+ There is no separate "bgp-state" hierarchy, with the accompanying
+ repetition of containment and naming nodes. This makes the model
+ simpler and more readable.
+
+C.2.1. Datastores
+
+ Each datastore represents differing views of these nodes. <running>
+ will hold the configuration provided by the operator -- for example,
+ a single BGP peer. <intended> will conceptually hold the data as
+ validated, after the removal of data not intended for validation and
+ after any local template mechanisms are performed. <operational>
+ will show data from <intended> as well as any "config false" nodes.
+
+C.2.2. Adding a Peer
+
+ If the user configures a single BGP peer, then that peer will be
+ visible in both <running> and <intended>. It may also appear in
+ <candidate> if the server supports the candidate configuration
+ datastore. Retrieving the peer will return only the user-specified
+ values.
+
+ No time delay should exist between the appearance of the peer in
+ <running> and <intended>.
+
+ In this scenario, we've added the following to <running>:
+
+ <bgp>
+ <local-as>64501</local-as>
+ <peer-as>64502</peer-as>
+ <peer>
+ <name>2001:db8::2:3</name>
+ </peer>
+ </bgp>
+
+C.2.2.1. <operational>
+
+ The operational datastore will contain the fully expanded peer data,
+ including "config false" nodes. In our example, this means that the
+ "state" node will appear.
+
+ In addition, <operational> will contain the "currently in use" values
+ for all nodes. This means that local-as and peer-as will be
+ populated even if they are not given values in <intended>. The value
+ of bgp/local-as will be used if bgp/peer/local-as is not provided;
+ bgp/peer-as and bgp/peer/peer-as will have the same relationship. In
+
+
+
+
+Bjorklund, et al. Standards Track [Page 38]
+
+RFC 8342 NMDA March 2018
+
+
+ the operational view, this means that every peer will have values for
+ their local-as and peer-as, even if those values are not explicitly
+ configured but are provided by bgp/local-as and bgp/peer-as.
+
+ Each BGP peer has a TCP connection associated with it, using the
+ values of local-port and remote-port from <intended>. If those
+ values are not supplied, the system will select values. When the
+ connection is established, <operational> will contain the current
+ values for the local-port and remote-port nodes regardless of the
+ origin. If the system has chosen the values, the "origin" attribute
+ will be set to "system". Before the connection is established, one
+ or both of the nodes may not appear, since the system may not yet
+ have their values.
+
+ <bgp xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
+ or:origin="or:intended">
+ <local-as>64501</local-as>
+ <peer-as>64502</peer-as>
+ <peer>
+ <name>2001:db8::2:3</name>
+ <local-as or:origin="or:default">64501</local-as>
+ <peer-as or:origin="or:default">64502</peer-as>
+ <local-port or:origin="or:system">60794</local-port>
+ <remote-port or:origin="or:default">179</remote-port>
+ <state>established</state>
+ </peer>
+ </bgp>
+
+C.2.3. Removing a Peer
+
+ Changes to configuration may take time to percolate through the
+ various software components involved. During this period, it is
+ imperative to continue to give an accurate view of the working of the
+ device. <operational> will contain nodes for both the previous and
+ current configuration, as closely as possible tracking the current
+ operation of the device.
+
+ Consider the scenario where a client removes a BGP peer. When a peer
+ is removed, the operational state will continue to reflect the
+ existence of that peer until the peer's resources are released,
+ including closing the peer's connection. During this period, the
+ current data values will continue to be visible in <operational>,
+ with the "origin" attribute set to indicate the origin of the
+ original data.
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 39]
+
+RFC 8342 NMDA March 2018
+
+
+ <bgp xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
+ or:origin="or:intended">
+ <local-as>64501</local-as>
+ <peer-as>64502</peer-as>
+ <peer>
+ <name>2001:db8::2:3</name>
+ <local-as or:origin="or:default">64501</local-as>
+ <peer-as or:origin="or:default">64502</peer-as>
+ <local-port or:origin="or:system">60794</local-port>
+ <remote-port or:origin="or:default">179</remote-port>
+ <state>closing</state>
+ </peer>
+ </bgp>
+
+ Once resources are released and the connection is closed, the peer's
+ data is removed from <operational>.
+
+C.3. Interface Example
+
+ In this section, we will use this simple interface data model:
+
+ container interfaces {
+ list interface {
+ key name;
+ leaf name {
+ type string;
+ }
+ leaf description {
+ type string;
+ }
+ leaf mtu {
+ type uint16;
+ }
+ leaf-list ip-address {
+ type inet:ip-address;
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 40]
+
+RFC 8342 NMDA March 2018
+
+
+C.3.1. Pre-provisioned Interfaces
+
+ One common issue in networking devices is the support of Field
+ Replaceable Units (FRUs) that can be inserted and removed from the
+ device without requiring a reboot or interfering with normal
+ operation. These FRUs are typically interface cards, and the devices
+ support pre-provisioning of these interfaces.
+
+ If a client creates an interface "et-0/0/0" but the interface does
+ not physically exist at this point, then <intended> might contain the
+ following:
+
+ <interfaces>
+ <interface>
+ <name>et-0/0/0</name>
+ <description>Test interface</description>
+ </interface>
+ </interfaces>
+
+ Since the interface does not exist, this data does not appear in
+ <operational>.
+
+ When a FRU containing this interface is inserted, the system will
+ detect it and process the associated configuration. <operational>
+ will contain the data from <intended>, as well as nodes added by the
+ system, such as the current value of the interface's MTU.
+
+ <interfaces xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
+ or:origin="or:intended">
+ <interface>
+ <name>et-0/0/0</name>
+ <description>Test interface</description>
+ <mtu or:origin="or:system">1500</mtu>
+ </interface>
+ </interfaces>
+
+ If the FRU is removed, the interface data is removed from
+ <operational>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 41]
+
+RFC 8342 NMDA March 2018
+
+
+C.3.2. System-Provided Interface
+
+ Imagine that the system provides a loopback interface (named "lo0")
+ with a default IPv4 address of "127.0.0.1" and a default IPv6 address
+ of "::1". The system will only provide configuration for this
+ interface if there is no data for it in <intended>.
+
+ When no configuration for "lo0" appears in <intended>, <operational>
+ will show the system-provided data:
+
+ <interfaces xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
+ or:origin="or:intended">
+ <interface or:origin="or:system">
+ <name>lo0</name>
+ <ip-address>127.0.0.1</ip-address>
+ <ip-address>::1</ip-address>
+ </interface>
+ </interfaces>
+
+ When configuration for "lo0" does appear in <intended>, <operational>
+ will show that data with the origin set to "intended". If the
+ "ip-address" is not provided, then the system-provided value will
+ appear as follows:
+
+ <interfaces xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
+ or:origin="or:intended">
+ <interface>
+ <name>lo0</name>
+ <description>loopback</description>
+ <ip-address or:origin="or:system">127.0.0.1</ip-address>
+ <ip-address>::1</ip-address>
+ </interface>
+ </interfaces>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 42]
+
+RFC 8342 NMDA March 2018
+
+
+Acknowledgments
+
+ This document grew out of many discussions that took place since
+ 2010. Several documents ([NETMOD-Operational] [With-config-state]
+ [OpState-Reqs] [OpState-Enhance] [OpState-Modeling], as well as
+ [RFC6244]), touched on some of the problems of the original datastore
+ model. The following people were authors of these works in progress
+ or were otherwise actively involved in the discussions that led to
+ this document:
+
+ o Lou Berger, LabN Consulting, L.L.C., <lberger@labn.net>
+
+ o Andy Bierman, YumaWorks, <andy@yumaworks.com>
+
+ o Marcus Hines, Google, <hines@google.com>
+
+ o Christian Hopps, Deutsche Telekom, <chopps@chopps.org>
+
+ o Balazs Lengyel, Ericsson, <balazs.lengyel@ericsson.com>
+
+ o Ladislav Lhotka, CZ.NIC, <lhotka@nic.cz>
+
+ o Acee Lindem, Cisco Systems, <acee@cisco.com>
+
+ o Thomas Nadeau, Brocade Networks, <tnadeau@lucidvision.com>
+
+ o Tom Petch, Engineering Networks Ltd, <ietfc@btconnect.com>
+
+ o Anees Shaikh, Google, <aashaikh@google.com>
+
+ o Rob Shakir, Google, <robjs@google.com>
+
+ o Jason Sterne, Nokia, <jason.sterne@nokia.com>
+
+ Juergen Schoenwaelder was partly funded by Flamingo, a Network of
+ Excellence project (ICT-318488) supported by the European Commission
+ under its Seventh Framework Programme.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 43]
+
+RFC 8342 NMDA March 2018
+
+
+Authors' Addresses
+
+ Martin Bjorklund
+ Tail-f Systems
+
+ Email: mbj@tail-f.com
+
+
+ Juergen Schoenwaelder
+ Jacobs University
+
+ Email: j.schoenwaelder@jacobs-university.de
+
+
+ Phil Shafer
+ Juniper Networks
+
+ Email: phil@juniper.net
+
+
+ Kent Watsen
+ Juniper Networks
+
+ Email: kwatsen@juniper.net
+
+
+ Robert Wilton
+ Cisco Systems
+
+ Email: rwilton@cisco.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bjorklund, et al. Standards Track [Page 44]
+