Internet Engineering Task Force (IETF) L. Lhotka Request for Comments: 8349 CZ.NIC Obsoletes: 8022 A. Lindem Category: Standards Track Cisco Systems ISSN: 2070-1721 Y. Qu Huawei March 2018 A YANG Data Model for Routing Management (NMDA Version)Abstract
This document specifies three YANG modules and one submodule. Together, they form the core routing data model that serves as a framework for configuring and managing a routing subsystem. It is expected that these modules will be augmented by additional YANG modules defining data models for control-plane protocols, route filters, and other functions. The core routing data model provides common building blocks for such extensions -- routes, Routing Information Bases (RIBs), and control-plane protocols. The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA). This document obsoletes RFC 8022. 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/rfc8349.
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 . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 4 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 4. The Design of the Core Routing Data Model . . . . . . . . . . 7 4.1. System-Controlled and User-Controlled List Entries . . . 8 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 9 5.1. Routes . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.2. Routing Information Base (RIB) . . . . . . . . . . . . . 10 5.3. Control-Plane Protocol . . . . . . . . . . . . . . . . . 11 5.3.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 11 5.3.2. Defining New Control-Plane Protocols . . . . . . . . 11 5.4. Parameters of IPv6 Router Advertisements . . . . . . . . 12 6. Interactions with Other YANG Modules . . . . . . . . . . . . 13 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 14 7. Routing Management YANG Module . . . . . . . . . . . . . . . 15 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 29 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 37 9.1. IPv6 Router Advertisements Submodule . . . . . . . . . . 45 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 11. Security Considerations . . . . . . . . . . . . . . . . . . . 57 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 58 12.1. Normative References . . . . . . . . . . . . . . . . . . 58 12.2. Informative References . . . . . . . . . . . . . . . . . 60 Appendix A. The Complete Schema Tree . . . . . . . . . . . . . . 61 Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 66 Appendix C. Example: Adding a New Control-Plane Protocol . . . . 67 Appendix D. Data Tree Example . . . . . . . . . . . . . . . . . 70 Appendix E. NETCONF Get Data Reply Example . . . . . . . . . . . 77 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 80 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 80
1. Introduction
This document specifies the following YANG modules: o The "ietf-routing" module provides generic components of a routing data model. o The "ietf-ipv4-unicast-routing" module augments the "ietf-routing" module with additional data specific to IPv4 unicast. o The "ietf-ipv6-unicast-routing" module augments the "ietf-routing" module with additional data specific to IPv6 unicast. Its submodule, "ietf-ipv6-router-advertisements", also augments the "ietf-interfaces" [RFC8343] and "ietf-ip" [RFC8344] modules with IPv6 router configuration variables required by [RFC4861]. These modules together define the core routing data model, which is intended as a basis for future data model development covering more-sophisticated routing systems. While these three modules can be directly used for simple IP devices with static routing (see Appendix B), their main purpose is to provide essential building blocks for more-complicated data models involving multiple control-plane protocols, multicast routing, additional address families, and advanced functions such as route filtering or policy routing. To this end, it is expected that the core routing data model will be augmented by numerous modules developed by various IETF working groups. The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA) [RFC8342]. This document obsoletes RFC 8022 [RFC8022].2. Terminology and 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. The following terms are defined in [RFC8342]: o client o server o configuration
o system state o operational state o intended configuration The following terms are defined in [RFC7950]: o action o augment o container o data model o data node o feature o leaf o list o mandatory node o module o presence container o schema tree o RPC (Remote Procedure Call) operation2.1. Glossary of New Terms
core routing data model: YANG data model comprising "ietf-routing", "ietf-ipv4-unicast-routing", and "ietf-ipv6-unicast-routing" modules. direct route: A route to a directly connected network. Routing Information Base (RIB): An object containing a list of routes, together with other information. See Section 5.2 for details.
system-controlled entry: An entry in a list in the operational state ("config false") that is created by the system independently of what has been explicitly configured. See Section 4.1 for details. user-controlled entry: An entry in a list in the operational state ("config false") that is created and deleted as a direct consequence of certain configuration changes. See Section 4.1 for details.2.2. Tree Diagrams
Tree diagrams used in this document follow the notation defined in [RFC8340].2.3. Prefixes in Data Node Names
In this document, names of data nodes, actions, and other data model objects are often used without a prefix, as long as it is clear from the context in which YANG module each name is defined. Otherwise, names are prefixed using the standard prefix associated with the corresponding YANG module, as shown in Table 1. +--------+---------------------------+-----------+ | Prefix | YANG module | Reference | +--------+---------------------------+-----------+ | if | ietf-interfaces | [RFC8343] | | ip | ietf-ip | [RFC8344] | | rt | ietf-routing | Section 7 | | v4ur | ietf-ipv4-unicast-routing | Section 8 | | v6ur | ietf-ipv6-unicast-routing | Section 9 | | yang | ietf-yang-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] | +--------+---------------------------+-----------+ Table 1: Prefixes and Corresponding YANG Modules3. Objectives
The initial design of the core routing data model was driven by the following objectives: o The data model should be suitable for the common address families -- in particular, IPv4 and IPv6 -- and for unicast and multicast routing, as well as Multiprotocol Label Switching (MPLS). o A simple IP routing system, such as one that uses only static routing, should be configurable in a simple way, ideally without any need to develop additional YANG modules.
o On the other hand, the core routing framework must allow for complicated implementations involving multiple RIBs and multiple control-plane protocols, as well as controlled redistributions of routing information. o Because device vendors will want to map the data models built on this generic framework to their proprietary data models and configuration interfaces, the framework should be flexible enough to facilitate such mapping and accommodate data models with different logic.4. The Design of the Core Routing Data Model
The core routing data model consists of three YANG modules and one submodule. The first module, "ietf-routing", defines the generic components of a routing system. The other two modules -- "ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" -- augment the "ietf-routing" module with additional data nodes that are needed for IPv4 and IPv6 unicast routing, respectively. The "ietf-ipv6-unicast-routing" module has a submodule, "ietf-ipv6-router-advertisements", that augments the "ietf-interfaces" [RFC8343] and "ietf-ip" [RFC8344] modules with configuration variables for IPv6 Router Advertisements as required by [RFC4861].
Figure 1 shows abridged views of the hierarchies. See Appendix A for the complete data trees. +--rw routing +--rw router-id? yang:dotted-quad +--ro interfaces | +--ro interface* if:interface-ref +--rw control-plane-protocols | +--rw control-plane-protocol* [type name] | +--rw type identityref | +--rw name string | +--rw description? string | +--rw static-routes | +--rw v4ur:ipv4 | | ... | +--rw v6ur:ipv6 | ... +--rw ribs +--rw rib* [name] +--rw name string +--rw address-family? identityref +--ro default-rib? boolean {multiple-ribs}? +--ro routes | +--ro route* | ... +---x active-route | +---w input | | +---w v4ur:destination-address? inet:ipv4-address | | +---w v6ur:destination-address? inet:ipv6-address | +--ro output | ... +--rw description? string Figure 1: Data Hierarchy As can be seen from Figure 1, the core routing data model introduces several generic components of a routing framework: routes, RIBs containing lists of routes, and control-plane protocols. Section 5 describes these components in more detail.4.1. System-Controlled and User-Controlled List Entries
The core routing data model defines several lists in the schema tree, such as "rib", that have to be populated with at least one entry in any properly functioning device, and additional entries may be configured by a client.
In such a list, the server creates the required item as a "system-controlled entry" in the operational state, i.e., inside read-only lists in the "routing" container. An example can be seen in Appendix D: the "/routing/ribs/rib" list has two system-controlled entries -- "ipv4-master" and "ipv6-master". Additional entries called "user-controlled entries" may be created in the configuration by a client, e.g., via the Network Configuration Protocol (NETCONF). If the server accepts a configured user-controlled entry, then this entry also appears in the operational state version of the list. Corresponding entries in both versions of the list (in the intended configuration and the operational state) [RFC8342] have the same value of the list key. A client may also provide supplemental configuration of system- controlled entries. To do so, the client creates a new entry in the configuration with the desired contents. In order to bind this entry to the corresponding entry in the operational state, the key of the configuration entry has to be set to the same value as the key of the operational state entry. Deleting a user-controlled entry from the intended configuration results in the removal of the corresponding entry in the operational state list. In contrast, if a client deletes a system-controlled entry from the intended configuration, only the extra configuration specified in that entry is removed; the corresponding operational state entry is not removed.5. Basic Building Blocks
This section describes the essential components of the core routing data model.5.1. Routes
Routes are basic elements of information in a routing system. The core routing data model defines only the following minimal set of route attributes: o "destination-prefix": address prefix specifying the set of destination addresses for which the route may be used. This attribute is mandatory.
o "route-preference": an integer value (also known as "administrative distance") that is used for selecting a preferred route among routes with the same destination prefix. A lower value indicates a route that is more preferred. o "next-hop": determines the outgoing interface and/or next-hop address(es), or a special operation to be performed on a packet. Routes are primarily system state and appear as entries in RIBs (Section 5.2), but they may also be found in configuration data -- for example, as manually configured static routes. In the latter case, configurable route attributes are generally a subset of attributes defined for RIB routes.5.2. Routing Information Base (RIB)
Every implementation of the core routing data model manages one or more RIBs. A RIB is a list of routes complemented with administrative data. Each RIB contains only routes of one address family. An address family is represented by an identity derived from the "rt:address-family" base identity. In the core routing data model, RIBs are represented as entries in the list "/routing/ribs/rib" in the operational state. The contents of RIBs are controlled and manipulated by control-plane protocol operations that may result in route additions, removals, and modifications. This also includes manipulations via the "static" and/or "direct" pseudo-protocols; see Section 5.3.1. For every supported address family, exactly one RIB MUST be marked as the "default RIB", in which control-plane protocols place their routes by default. Simple router implementations that do not advertise the "multiple-ribs" feature will typically create one system-controlled RIB per supported address family and mark it as the default RIB. More-complex router implementations advertising the "multiple-ribs" feature support multiple RIBs per address family that can be used for policy routing and other purposes. The following action (see Section 7.15 of [RFC7950]) is defined for the "rib" list: o active-route -- return the active RIB route for the destination address that is specified as the action's input parameter.
5.3. Control-Plane Protocol
The core routing data model provides an open-ended framework for defining multiple control-plane protocol instances, e.g., for Layer 3 routing protocols. Each control-plane protocol instance MUST be assigned a type, which is an identity derived from the "rt:control-plane-protocol" base identity. The core routing data model defines two identities for the "direct" and "static" pseudo-protocols (Section 5.3.1). Multiple control-plane protocol instances of the same type MAY be configured.5.3.1. Routing Pseudo-Protocols
The core routing data model defines two special routing protocol types -- "direct" and "static". Both are in fact pseudo-protocols, which means that they are confined to the local device and do not exchange any routing information with adjacent routers. Every implementation of the core routing data model MUST provide exactly one instance of the "direct" pseudo-protocol type. It is the source of direct routes for all configured address families. Direct routes are normally supplied by the operating system kernel, based on the configuration of network interface addresses; see Section 6.2. A pseudo-protocol of the type "static" allows for specifying routes manually. It MAY be configured in zero or multiple instances, although a typical configuration will have exactly one instance.5.3.2. Defining New Control-Plane Protocols
It is expected that future YANG modules will create data models for additional control-plane protocol types. Such new modules will have to define the protocol-specific data nodes, and they will have to integrate into the core routing framework in the following way: o A new identity MUST be defined for the control-plane protocol, and its base identity MUST be set to "rt:control-plane-protocol" or to an identity derived from "rt:control-plane-protocol".
o Additional route attributes MAY be defined, preferably in one place by means of defining a YANG grouping. The new attributes have to be inserted by augmenting the definitions of the node /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route and possibly other places in the schema tree. o Data nodes for the new protocol can be defined by augmenting the "control-plane-protocol" data node under "/routing". By using a "when" statement, the augmented data nodes specific to the new protocol SHOULD be made conditional and valid only if the value of "rt:type" or "rt:source-protocol" is equal to (or derived from) the new protocol's identity. It is also RECOMMENDED that protocol-specific data nodes be encapsulated in an appropriately named container with presence. Such a container may contain mandatory data nodes that are otherwise forbidden at the top level of an augment. The above steps are implemented by the example YANG module for the Routing Information Protocol (RIP); see Appendix C.5.4. Parameters of IPv6 Router Advertisements
The YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is a submodule of the "ietf-ipv6-unicast-routing" module, augments the schema tree of IPv6 interfaces with definitions of the following variables as required by Section 6.2.1 of [RFC4861]: o send-advertisements o max-rtr-adv-interval o min-rtr-adv-interval o managed-flag o other-config-flag o link-mtu o reachable-time o retrans-timer o cur-hop-limit
o default-lifetime o prefix-list: a list of prefixes to be advertised. The following parameters are associated with each prefix in the list: * valid-lifetime * on-link-flag * preferred-lifetime * autonomous-flag NOTES: 1. The "IsRouter" flag, which is also required by [RFC4861], is implemented in the "ietf-ip" module [RFC8344] (leaf "ip:forwarding"). 2. The Neighbor Discovery specification [RFC4861] allows the implementations to decide whether the "valid-lifetime" and "preferred-lifetime" parameters remain the same in consecutive advertisements or decrement in real time. However, the latter behavior seems problematic because the values might be reset again to the (higher) configured values after a configuration is reloaded. Moreover, no implementation is known to use the decrementing behavior. The "ietf-ipv6-router-advertisements" submodule therefore stipulates the former behavior with constant values.6. Interactions with Other YANG Modules
The semantics of the core routing data model also depends on several configuration parameters that are defined in other YANG modules.6.1. Module "ietf-interfaces"
The following boolean switch is defined in the "ietf-interfaces" YANG module [RFC8343]: /if:interfaces/if:interface/if:enabled If this switch is set to "false" for a network-layer interface, then all routing and forwarding functions MUST be disabled on this interface.
6.2. Module "ietf-ip"
The following boolean switches are defined in the "ietf-ip" YANG module [RFC8344]: /if:interfaces/if:interface/ip:ipv4/ip:enabled If this switch is set to "false" for a network-layer interface, then all IPv4 routing and forwarding functions MUST be disabled on this interface. /if:interfaces/if:interface/ip:ipv4/ip:forwarding If this switch is set to "false" for a network-layer interface, then the forwarding of IPv4 datagrams through this interface MUST be disabled. However, the interface MAY participate in other IPv4 routing functions, such as routing protocols. /if:interfaces/if:interface/ip:ipv6/ip:enabled If this switch is set to "false" for a network-layer interface, then all IPv6 routing and forwarding functions MUST be disabled on this interface. /if:interfaces/if:interface/ip:ipv6/ip:forwarding If this switch is set to "false" for a network-layer interface, then the forwarding of IPv6 datagrams through this interface MUST be disabled. However, the interface MAY participate in other IPv6 routing functions, such as routing protocols. In addition, the "ietf-ip" module allows for configuring IPv4 and IPv6 addresses and network prefixes or masks on network-layer interfaces. Configuration of these parameters on an enabled interface MUST result in an immediate creation of the corresponding direct route. The destination prefix of this route is set according to the configured IP address and network prefix/mask, and the interface is set as the outgoing interface for that route.