draft-ietf-netmod-routing-cfg-25.txt   rfc8022.txt 
NETMOD Working Group L. Lhotka Internet Engineering Task Force (IETF) L. Lhotka
Internet-Draft CZ.NIC Request for Comments: 8022 CZ.NIC
Intended status: Standards Track A. Lindem Category: Standards Track A. Lindem
Expires: May 7, 2017 Cisco Systems ISSN: 2070-1721 Cisco Systems
November 03, 2016 November 2016
A YANG Data Model for Routing Management A YANG Data Model for Routing Management
draft-ietf-netmod-routing-cfg-25
Abstract Abstract
This document contains a specification of three YANG modules and one This document contains a specification of three YANG modules and one
submodule. Together they form the core routing data model which submodule. Together they form the core routing data model that
serves as a framework for configuring and managing a routing serves as a framework for configuring and managing a routing
subsystem. It is expected that these modules will be augmented by subsystem. It is expected that these modules will be augmented by
additional YANG modules defining data models for control plane additional YANG modules defining data models for control-plane
protocols, route filters and other functions. The core routing data protocols, route filters, and other functions. The core routing data
model provides common building blocks for such extensions -- routes, model provides common building blocks for such extensions -- routes,
routing information bases (RIB), and control plane protocols. Routing Information Bases (RIBs), and control-plane protocols.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on May 7, 2017. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc8022.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology and Notation . . . . . . . . . . . . . . . . . . 4 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. The Design of the Core Routing Data Model . . . . . . . . . . 7 4. The Design of the Core Routing Data Model . . . . . . . . . . 6
4.1. System-Controlled and User-Controlled List Entries . . . 8 4.1. System-Controlled and User-Controlled List Entries . . . 8
5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 9 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 9
5.1. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.1. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2. Routing Information Base (RIB) . . . . . . . . . . . . . 9 5.2. Routing Information Base (RIB) . . . . . . . . . . . . . 9
5.3. Control Plane Protocol . . . . . . . . . . . . . . . . . 10 5.3. Control-Plane Protocol . . . . . . . . . . . . . . . . . 10
5.3.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 10 5.3.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 10
5.3.2. Defining New Control Plane Protocols . . . . . . . . 11 5.3.2. Defining New Control-Plane Protocols . . . . . . . . 11
5.4. Parameters of IPv6 Router Advertisements . . . . . . . . 12 5.4. Parameters of IPv6 Router Advertisements . . . . . . . . 12
6. Interactions with Other YANG Modules . . . . . . . . . . . . 13 6. Interactions with Other YANG Modules . . . . . . . . . . . . 13
6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13
6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 13 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 13
7. Routing Management YANG Module . . . . . . . . . . . . . . . 14 7. Routing Management YANG Module . . . . . . . . . . . . . . . 14
8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 26 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 26
9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 32 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 32
9.1. IPv6 Router Advertisements Submodule . . . . . . . . . . 37 9.1. IPv6 Router Advertisements Submodule . . . . . . . . . . 37
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47
11. Security Considerations . . . . . . . . . . . . . . . . . . . 49 11. Security Considerations . . . . . . . . . . . . . . . . . . . 48
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 49
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 12.1. Normative References . . . . . . . . . . . . . . . . . . 49
13.1. Normative References . . . . . . . . . . . . . . . . . . 50 12.2. Informative References . . . . . . . . . . . . . . . . . 50
13.2. Informative References . . . . . . . . . . . . . . . . . 50
Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 51 Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 51
A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 51 A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 51
A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 53 A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 52
Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 54 Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 53
Appendix C. Example: Adding a New Control Plane Protocol . . . . 54 Appendix C. Example: Adding a New Control-Plane Protocol . . . . 54
Appendix D. Data Tree Example . . . . . . . . . . . . . . . . . 57 Appendix D. Data Tree Example . . . . . . . . . . . . . . . . . 56
Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 65 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 64
E.1. Changes Between Versions -24 and -25 . . . . . . . . . . 65 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 64
E.2. Changes Between Versions -23 and -24 . . . . . . . . . . 65
E.3. Changes Between Versions -22 and -23 . . . . . . . . . . 65
E.4. Changes Between Versions -21 and -22 . . . . . . . . . . 66
E.5. Changes Between Versions -20 and -21 . . . . . . . . . . 66
E.6. Changes Between Versions -19 and -20 . . . . . . . . . . 66
E.7. Changes Between Versions -18 and -19 . . . . . . . . . . 66
E.8. Changes Between Versions -17 and -18 . . . . . . . . . . 66
E.9. Changes Between Versions -16 and -17 . . . . . . . . . . 67
E.10. Changes Between Versions -15 and -16 . . . . . . . . . . 67
E.11. Changes Between Versions -14 and -15 . . . . . . . . . . 68
E.12. Changes Between Versions -13 and -14 . . . . . . . . . . 68
E.13. Changes Between Versions -12 and -13 . . . . . . . . . . 68
E.14. Changes Between Versions -11 and -12 . . . . . . . . . . 69
E.15. Changes Between Versions -10 and -11 . . . . . . . . . . 69
E.16. Changes Between Versions -09 and -10 . . . . . . . . . . 70
E.17. Changes Between Versions -08 and -09 . . . . . . . . . . 70
E.18. Changes Between Versions -07 and -08 . . . . . . . . . . 70
E.19. Changes Between Versions -06 and -07 . . . . . . . . . . 70
E.20. Changes Between Versions -05 and -06 . . . . . . . . . . 71
E.21. Changes Between Versions -04 and -05 . . . . . . . . . . 71
E.22. Changes Between Versions -03 and -04 . . . . . . . . . . 72
E.23. Changes Between Versions -02 and -03 . . . . . . . . . . 72
E.24. Changes Between Versions -01 and -02 . . . . . . . . . . 73
E.25. Changes Between Versions -00 and -01 . . . . . . . . . . 73
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74
1. Introduction 1. Introduction
This document contains a specification of the following YANG modules: This document contains a specification of the following YANG modules:
o Module "ietf-routing" provides generic components of a routing o The "ietf-routing" module provides generic components of a routing
data model. data model.
o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" o The "ietf-ipv4-unicast-routing" module augments the "ietf-routing"
module with additional data specific to IPv4 unicast. module with additional data specific to IPv4 unicast.
o Module "ietf-ipv6-unicast-routing" augments the "ietf-routing" o The "ietf-ipv6-unicast-routing" module augments the "ietf-routing"
module with additional data specific to IPv6 unicast. Its module with additional data specific to IPv6 unicast. Its
submodule "ietf-ipv6-router-advertisements" also augments the submodule "ietf-ipv6-router-advertisements" also augments the
"ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277] modules with "ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277] modules with
IPv6 router configuration variables required by [RFC4861]. IPv6 router configuration variables required by [RFC4861].
These modules together define the so-called core routing data model, These modules together define the so-called core routing data model,
which is intended as a basis for future data model development which is intended as a basis for future data model development
covering more sophisticated routing systems. While these three covering more-sophisticated routing systems. While these three
modules can be directly used for simple IP devices with static modules can be directly used for simple IP devices with static
routing (see Appendix B), their main purpose is to provide essential routing (see Appendix B), their main purpose is to provide essential
building blocks for more complicated data models involving multiple building blocks for more-complicated data models involving multiple
control plane protocols, multicast routing, additional address control-plane protocols, multicast routing, additional address
families, and advanced functions such as route filtering or policy families, and advanced functions such as route filtering or policy
routing. To this end, it is expected that the core routing data routing. To this end, it is expected that the core routing data
model will be augmented by numerous modules developed by other IETF model will be augmented by numerous modules developed by various IETF
working groups. working groups.
2. Terminology and Notation 2. Terminology and Notation
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
The following terms are defined in [RFC6241]: The following terms are defined in [RFC6241]:
o client, o client
o message, o message
o protocol operation, o protocol operation
o server. o server
The following terms are defined in [RFC7950]: The following terms are defined in [RFC7950]:
o action, o action
o augment
o augment,
o configuration data, o configuration data
o container, o container
o container with presence, o container with presence
o data model, o data model
o data node, o data node
o feature, o feature
o leaf, o leaf
o list, o list
o mandatory node, o mandatory node
o module, o module
o schema tree, o schema tree
o state data, o state data
o RPC operation. o RPC (Remote Procedure Call) operation
2.1. Glossary of New Terms 2.1. Glossary of New Terms
core routing data model: YANG data model comprising "ietf-routing", core routing data model: YANG data model comprising "ietf-routing",
"ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" "ietf-ipv4-unicast-routing", and "ietf-ipv6-unicast-routing"
modules. modules.
direct route: a route to a directly connected network. direct route: a route to a directly connected network.
routing information base (RIB): An object containing a list of Routing Information Base (RIB): An object containing a list of
routes together with other information. See Section 5.2 for routes together with other information. See Section 5.2 for
details. details.
system-controlled entry: An entry of a list in state data ("config system-controlled entry: An entry of a list in state data ("config
false") that is created by the system independently of what has false") that is created by the system independently of what has
been explicitly configured. See Section 4.1 for details. been explicitly configured. See Section 4.1 for details.
user-controlled entry: An entry of a list in state data ("config user-controlled entry: An entry of a list in state data ("config
false") that is created and deleted as a direct consequence of false") that is created and deleted as a direct consequence of
certain configuration changes. See Section 4.1 for details. certain configuration changes. See Section 4.1 for details.
skipping to change at page 6, line 7 skipping to change at page 5, line 31
container with presence, and "*" denotes a "list" or "leaf-list". container with presence, and "*" denotes a "list" or "leaf-list".
o Parentheses enclose choice and case nodes, and case nodes are also o Parentheses enclose choice and case nodes, and case nodes are also
marked with a colon (":"). marked with a colon (":").
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2.3. Prefixes in Data Node Names 2.3. Prefixes in Data Node Names
In this document, names of data nodes, actions and other data model 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 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, the context in which YANG module each name is defined. Otherwise,
names are prefixed using the standard prefix associated with the names are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1. corresponding YANG module, as shown in Table 1.
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| Prefix | YANG module | Reference | | Prefix | YANG module | Reference |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| if | ietf-interfaces | [RFC7223] | | if | ietf-interfaces | [RFC7223] |
| ip | ietf-ip | [RFC7277] | | ip | ietf-ip | [RFC7277] |
| rt | ietf-routing | Section 7 | | rt | ietf-routing | Section 7 |
| v4ur | ietf-ipv4-unicast-routing | Section 8 | | v4ur | ietf-ipv4-unicast-routing | Section 8 |
| v6ur | ietf-ipv6-unicast-routing | Section 9 | | v6ur | ietf-ipv6-unicast-routing | Section 9 |
| yang | ietf-yang-types | [RFC6991] | | yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
Table 1: Prefixes and corresponding YANG modules Table 1: Prefixes and Corresponding YANG Modules
3. Objectives 3. Objectives
The initial design of the core routing data model was driven by the The initial design of the core routing data model was driven by the
following objectives: following objectives:
o The data model should be suitable for the common address families, o The data model should be suitable for the common address families
in particular IPv4 and IPv6, and for unicast and multicast -- in particular, IPv4 and IPv6 -- and for unicast and multicast
routing, as well as Multiprotocol Label Switching (MPLS). routing, as well as Multiprotocol Label Switching (MPLS).
o A simple IP routing system, such as one that uses only static o A simple IP routing system, such as one that uses only static
routing, should be configurable in a simple way, ideally without routing, should be configurable in a simple way, ideally without
any need to develop additional YANG modules. any need to develop additional YANG modules.
o On the other hand, the core routing framework must allow for o On the other hand, the core routing framework must allow for
complicated implementations involving multiple routing information complicated implementations involving multiple Routing Information
bases (RIB) and multiple control plane protocols, as well as Bases (RIBs) and multiple control-plane protocols, as well as
controlled redistributions of routing information. controlled redistributions of routing information.
o Device vendors will want to map the data models built on this o Because device vendors will want to map the data models built on
generic framework to their proprietary data models and this generic framework to their proprietary data models and
configuration interfaces. Therefore, the framework should be configuration interfaces, the framework should be flexible enough
flexible enough to facilitate such a mapping and accommodate data to facilitate that and accommodate data models with different
models with different logic. logic.
4. The Design of the Core Routing Data Model 4. The Design of the Core Routing Data Model
The core routing data model consists of three YANG modules and one The core routing data model consists of three YANG modules and one
submodule. The first module, "ietf-routing", defines the generic submodule. The first module, "ietf-routing", defines the generic
components of a routing system. The other two modules, "ietf-ipv4- components of a routing system. The other two modules, "ietf-ipv4-
unicast-routing" and "ietf-ipv6-unicast-routing", augment the "ietf- unicast-routing" and "ietf-ipv6-unicast-routing", augment the "ietf-
routing" module with additional data nodes that are needed for IPv4 routing" module with additional data nodes that are needed for IPv4
and IPv6 unicast routing, respectively. Module "ietf-ipv6-unicast- and IPv6 unicast routing, respectively. The "ietf-ipv6-unicast-
routing" has a submodule, "ietf-ipv6-router-advertisements", that routing" module has a submodule, "ietf-ipv6-router-advertisements",
augments the "ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277] that augments the "ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277]
modules with configuration variables for IPv6 router advertisements modules with configuration variables for IPv6 router advertisements
as required by [RFC4861]. Figures 1 and 2 show abridged views of the as required by [RFC4861]. Figures 1 and 2 show abridged views of the
configuration and state data hierarchies. See Appendix A for the configuration and state data hierarchies. See Appendix A for the
complete data trees. complete data trees.
+--rw routing +--rw routing
+--rw router-id? +--rw router-id?
+--rw control-plane-protocols +--rw control-plane-protocols
| +--rw control-plane-protocol* [type name] | +--rw control-plane-protocol* [type name]
| +--rw type | +--rw type
skipping to change at page 7, line 38 skipping to change at page 7, line 23
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6
| | ... | | ...
| +--rw v4ur:ipv4 | +--rw v4ur:ipv4
| ... | ...
+--rw ribs +--rw ribs
+--rw rib* [name] +--rw rib* [name]
+--rw name +--rw name
+--rw address-family? +--rw address-family?
+--rw description? +--rw description?
Figure 1: Configuration data hierarchy. Figure 1: Configuration Data Hierarchy
+--ro routing-state +--ro routing-state
+--ro router-id? +--ro router-id?
+--ro interfaces +--ro interfaces
| +--ro interface* | +--ro interface*
+--ro control-plane-protocols +--ro control-plane-protocols
| +--ro control-plane-protocol* [type name] | +--ro control-plane-protocol* [type name]
| +--ro type | +--ro type
| +--ro name | +--ro name
+--ro ribs +--ro ribs
+--ro rib* [name] +--ro rib* [name]
+--ro name +--ro name
+--ro address-family +--ro address-family
+--ro default-rib? +--ro default-rib?
+--ro routes +--ro routes
| +--ro route* | +--ro route*
| ... | ...
Figure 2: State data hierarchy. Figure 2: State Data Hierarchy
As can be seen from Figures 1 and 2, the core routing data model As can be seen from Figures 1 and 2, the core routing data model
introduces several generic components of a routing framework: routes, introduces several generic components of a routing framework: routes,
RIBs containing lists of routes, and control plane protocols. RIBs containing lists of routes, and control-plane protocols.
Section 5 describes these components in more detail. Section 5 describes these components in more detail.
4.1. System-Controlled and User-Controlled List Entries 4.1. System-Controlled and User-Controlled List Entries
The core routing data model defines several lists in the schema tree, 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 such as "rib", that have to be populated with at least one entry in
any properly functioning device, and additional entries may be any properly functioning device, and additional entries may be
configured by a client. configured by a client.
In such a list, the server creates the required item as a so-called In such a list, the server creates the required item as a so-called
skipping to change at page 9, line 40 skipping to change at page 9, line 26
o "destination-prefix": address prefix specifying the set of o "destination-prefix": address prefix specifying the set of
destination addresses for which the route may be used. This destination addresses for which the route may be used. This
attribute is mandatory. attribute is mandatory.
o "route-preference": an integer value (also known as administrative o "route-preference": an integer value (also known as administrative
distance) that is used for selecting a preferred route among distance) that is used for selecting a preferred route among
routes with the same destination prefix. A lower value means a routes with the same destination prefix. A lower value means a
more preferred route. more preferred route.
o "next-hop": determines the outgoing interface and/or next-hop o "next-hop": determines the outgoing interface and/or next-hop
address(es), other operation to be performed with a packet. address(es), or a special operation to be performed with a packet.
Routes are primarily state data that appear as entries of RIBs Routes are primarily state data that appear as entries of RIBs
(Section 5.2) but they may also be found in configuration data, for (Section 5.2) but they may also be found in configuration data, for
example as manually configured static routes. In the latter case, example, as manually configured static routes. In the latter case,
configurable route attributes are generally a subset of attributes configurable route attributes are generally a subset of attributes
defined for RIB routes. defined for RIB routes.
5.2. Routing Information Base (RIB) 5.2. Routing Information Base (RIB)
Every implementation of the core routing data model manages one or Every implementation of the core routing data model manages one or
more routing information bases (RIB). A RIB is a list of routes more Routing Information Bases (RIBs). A RIB is a list of routes
complemented with administrative data. Each RIB contains only routes complemented with administrative data. Each RIB contains only routes
of one address family. An address family is represented by an of one address family. An address family is represented by an
identity derived from the "rt:address-family" base identity. identity derived from the "rt:address-family" base identity.
In the core routing data model, RIBs are state data represented as In the core routing data model, RIBs are state data represented as
entries of the list "/routing-state/ribs/rib". The contents of RIBs entries of the list "/routing-state/ribs/rib". The contents of RIBs
are controlled and manipulated by control plane protocol operations are controlled and manipulated by control-plane protocol operations
which may result in route additions, removals and modifications. that may result in route additions, removals, and modifications.
This also includes manipulations via the "static" and/or "direct" This also includes manipulations via the "static" and/or "direct"
pseudo-protocols, see Section 5.3.1. pseudo-protocols; see Section 5.3.1.
For every supported address family, exactly one RIB MUST be marked as For every supported address family, exactly one RIB MUST be marked as
the so-called default RIB. Its role is explained in Section 5.3. the so-called default RIB to which control-plane protocols place
their routes by default.
Simple router implementations that do not advertise the feature Simple router implementations that do not advertise the feature
"multiple-ribs" will typically create one system-controlled RIB per "multiple-ribs" will typically create one system-controlled RIB per
supported address family, and mark it as the default RIB. supported address family and mark it as the default RIB.
More complex router implementations advertising the "multiple-ribs" More-complex router implementations advertising the "multiple-ribs"
feature support multiple RIBs per address family that can be used for feature support multiple RIBs per address family that can be used for
policy routing and other purposes. policy routing and other purposes.
The following action (see Section 7.15 of [RFC7950]) is defined for The following action (see Section 7.15 of [RFC7950]) is defined for
the "rib" list: the "rib" list:
o active-route -- return the active RIB route for the destination o active-route -- return the active RIB route for the destination
address that is specified as the action's input parameter. address that is specified as the action's input parameter.
5.3. Control Plane Protocol 5.3. Control-Plane Protocol
The core routing data model provides an open-ended framework for The core routing data model provides an open-ended framework for
defining multiple control plane protocol instances, e.g., for Layer 3 defining multiple control-plane protocol instances, e.g., for Layer 3
routing protocols. Each control plane protocol instance MUST be routing protocols. Each control-plane protocol instance MUST be
assigned a type, which is an identity derived from the "rt:control- assigned a type, which is an identity derived from the
plane-protocol" base identity. The core routing data model defines "rt:control-plane-protocol" base identity. The core routing data
two identities for the direct and static pseudo-protocols model defines two identities for the direct and static pseudo-
(Section 5.3.1). protocols (Section 5.3.1).
Multiple control plane protocol instances of the same type MAY be Multiple control-plane protocol instances of the same type MAY be
configured. configured.
5.3.1. Routing Pseudo-Protocols 5.3.1. Routing Pseudo-Protocols
The core routing data model defines two special routing protocol The core routing data model defines two special routing protocol
types -- "direct" and "static". Both are in fact pseudo-protocols, types -- "direct" and "static". Both are in fact pseudo-protocols,
which means that they are confined to the local device and do not which means that they are confined to the local device and do not
exchange any routing information with adjacent routers. exchange any routing information with adjacent routers.
Every implementation of the core routing data model MUST provide Every implementation of the core routing data model MUST provide
exactly one instance of the "direct" pseudo-protocol type. It is the exactly one instance of the "direct" pseudo-protocol type. It is the
source of direct routes for all configured address families. Direct source of direct routes for all configured address families. Direct
routes are normally supplied by the operating system kernel, based on routes are normally supplied by the operating system kernel, based on
the configuration of network interface addresses, see Section 6.2. the configuration of network interface addresses; see Section 6.2.
A pseudo-protocol of the type "static" allows for specifying routes A pseudo-protocol of the type "static" allows for specifying routes
manually. It MAY be configured in zero or multiple instances, manually. It MAY be configured in zero or multiple instances,
although a typical configuration will have exactly one instance. although a typical configuration will have exactly one instance.
5.3.2. Defining New Control Plane Protocols 5.3.2. Defining New Control-Plane Protocols
It is expected that future YANG modules will create data models for It is expected that future YANG modules will create data models for
additional control plane protocol types. Such a new module has to additional control-plane protocol types. Such a new module has to
define the protocol-specific configuration and state data, and it has define the protocol-specific configuration and state data, and it has
to integrate it into the core routing framework in the following way: to integrate it into the core routing framework in the following way:
o A new identity MUST be defined for the control plane protocol and 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 its base identity MUST be set to "rt:control-plane-protocol" or to
to an identity derived from "rt:control-plane-protocol". an identity derived from "rt:control-plane-protocol".
o Additional route attributes MAY be defined, preferably in one o Additional route attributes MAY be defined, preferably in one
place by means of defining a YANG grouping. The new attributes place by means of defining a YANG grouping. The new attributes
have to be inserted by augmenting the definitions of the nodes have to be inserted by augmenting the definitions of the nodes
/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route
and and
/rt:routing-state/rt:ribs/rt:rib/rt:output/rt:route, /rt:routing-state/rt:ribs/rt:rib/rt:output/rt:route,
skipping to change at page 11, line 46 skipping to change at page 11, line 36
and possibly other places in the configuration, state data, and possibly other places in the configuration, state data,
notifications, and input/output parameters of actions or RPC notifications, and input/output parameters of actions or RPC
operations. operations.
o Configuration parameters and/or state data for the new protocol o Configuration parameters and/or state data for the new protocol
can be defined by augmenting the "control-plane-protocol" data can be defined by augmenting the "control-plane-protocol" data
node under both "/routing" and "/routing-state". node under both "/routing" and "/routing-state".
By using a "when" statement, the augmented configuration parameters By using a "when" statement, the augmented configuration parameters
and state data specific to the new protocol SHOULD be made and state data specific to the new protocol SHOULD be made
conditional and valid only if the value of "rt:type" or "rt:source- conditional and valid only if the value of "rt:type" or
protocol" is equal to (or derived from) the new protocol's identity. "rt:source-protocol" is equal to (or derived from) the new protocol's
identity.
It is also RECOMMENDED that protocol-specific data nodes be It is also RECOMMENDED that protocol-specific data nodes be
encapsulated in an appropriately named container with presence. Such encapsulated in an appropriately named container with presence. Such
a container may contain mandatory data nodes that are otherwise a container may contain mandatory data nodes that are otherwise
forbidden at the top level of an augment. forbidden at the top level of an augment.
The above steps are implemented by the example YANG module for the The above steps are implemented by the example YANG module for the
RIP routing protocol in Appendix C. Routing Information Protocol (RIP) in Appendix C.
5.4. Parameters of IPv6 Router Advertisements 5.4. Parameters of IPv6 Router Advertisements
YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is
a submodule of the "ietf-ipv6-unicast-routing" module, augments the a submodule of the "ietf-ipv6-unicast-routing" module, augments the
configuration and state data of IPv6 interfaces with definitions of configuration and state data of IPv6 interfaces with definitions of
the following variables as required by [RFC4861], sec. 6.2.1: the following variables as required by Section 6.2.1 of [RFC4861]:
o send-advertisements, o send-advertisements
o max-rtr-adv-interval, o max-rtr-adv-interval
o min-rtr-adv-interval, o min-rtr-adv-interval
o managed-flag, o managed-flag
o other-config-flag, o other-config-flag
o link-mtu, o link-mtu
o reachable-time, o reachable-time
o retrans-timer, o retrans-timer
o cur-hop-limit, o cur-hop-limit
o default-lifetime, o default-lifetime
o prefix-list: a list of prefixes to be advertised. o prefix-list: a list of prefixes to be advertised.
The following parameters are associated with each prefix in the The following parameters are associated with each prefix in the
list: list:
* valid-lifetime, * valid-lifetime
* on-link-flag, * on-link-flag
* preferred-lifetime, * preferred-lifetime
* autonomous-flag. * autonomous-flag
NOTES: NOTES:
1. The "IsRouter" flag, which is also required by [RFC4861], is 1. The "IsRouter" flag, which is also required by [RFC4861], is
implemented in the "ietf-ip" module [RFC7277] (leaf implemented in the "ietf-ip" module [RFC7277] (leaf
"ip:forwarding"). "ip:forwarding").
2. The original specification [RFC4861] allows the implementations 2. The original specification [RFC4861] allows the implementations
to decide whether the "valid-lifetime" and "preferred-lifetime" to decide whether the "valid-lifetime" and "preferred-lifetime"
parameters remain the same in consecutive advertisements, or parameters remain the same in consecutive advertisements or
decrement in real time. However, the latter behavior seems decrement in real time. However, the latter behavior seems
problematic because the values might be reset again to the problematic because the values might be reset again to the
(higher) configured values after a configuration is reloaded. (higher) configured values after a configuration is reloaded.
Moreover, no implementation is known to use the decrementing Moreover, no implementation is known to use the decrementing
behavior. The "ietf-ipv6-router-advertisements" submodule behavior. The "ietf-ipv6-router-advertisements" submodule
therefore stipulates the former behavior with constant values. therefore stipulates the former behavior with constant values.
6. Interactions with Other YANG Modules 6. Interactions with Other YANG Modules
The semantics of the core routing data model also depends on several The semantics of the core routing data model also depends on several
configuration parameters that are defined in other YANG modules. configuration parameters that are defined in other YANG modules.
6.1. Module "ietf-interfaces" 6.1. Module "ietf-interfaces"
The following boolean switch is defined in the "ietf-interfaces" YANG The following boolean switch is defined in the "ietf-interfaces" YANG
module [RFC7223]: module [RFC7223]:
/if:interfaces/if:interface/if:enabled /if:interfaces/if:interface/if:enabled
If this switch is set to "false" for a network layer interface, If this switch is set to "false" for a network-layer interface,
then all routing and forwarding functions MUST be disabled on that then all routing and forwarding functions MUST be disabled on this
interface. interface.
6.2. Module "ietf-ip" 6.2. Module "ietf-ip"
The following boolean switches are defined in the "ietf-ip" YANG The following boolean switches are defined in the "ietf-ip" YANG
module [RFC7277]: module [RFC7277]:
/if:interfaces/if:interface/ip:ipv4/ip:enabled /if:interfaces/if:interface/ip:ipv4/ip:enabled
If this switch is set to "false" for a network layer interface, If this switch is set to "false" for a network-layer interface,
then all IPv4 routing and forwarding functions MUST be disabled on then all IPv4 routing and forwarding functions MUST be disabled on
that interface. this interface.
/if:interfaces/if:interface/ip:ipv4/ip:forwarding /if:interfaces/if:interface/ip:ipv4/ip:forwarding
If this switch is set to "false" for a network layer interface, If this switch is set to "false" for a network-layer interface,
then the forwarding of IPv4 datagrams through this interface MUST then the forwarding of IPv4 datagrams through this interface MUST
be disabled. However, the interface MAY participate in other IPv4 be disabled. However, the interface MAY participate in other IPv4
routing functions, such as routing protocols. routing functions, such as routing protocols.
/if:interfaces/if:interface/ip:ipv6/ip:enabled /if:interfaces/if:interface/ip:ipv6/ip:enabled
If this switch is set to "false" for a network layer interface,
If this switch is set to "false" for a network-layer interface,
then all IPv6 routing and forwarding functions MUST be disabled on then all IPv6 routing and forwarding functions MUST be disabled on
that interface. this interface.
/if:interfaces/if:interface/ip:ipv6/ip:forwarding /if:interfaces/if:interface/ip:ipv6/ip:forwarding
If this switch is set to "false" for a network layer interface, If this switch is set to "false" for a network-layer interface,
then the forwarding of IPv6 datagrams through this interface MUST then the forwarding of IPv6 datagrams through this interface MUST
be disabled. However, the interface MAY participate in other IPv6 be disabled. However, the interface MAY participate in other IPv6
routing functions, such as routing protocols. routing functions, such as routing protocols.
In addition, the "ietf-ip" module allows for configuring IPv4 and In addition, the "ietf-ip" module allows for configuring IPv4 and
IPv6 addresses and network prefixes or masks on network layer IPv6 addresses and network prefixes or masks on network-layer
interfaces. Configuration of these parameters on an enabled interfaces. Configuration of these parameters on an enabled
interface MUST result in an immediate creation of the corresponding interface MUST result in an immediate creation of the corresponding
direct route. The destination prefix of this route is set according direct route. The destination prefix of this route is set according
to the configured IP address and network prefix/mask, and the to the configured IP address and network prefix/mask, and the
interface is set as the outgoing interface for that route. interface is set as the outgoing interface for that route.
7. Routing Management YANG Module 7. Routing Management YANG Module
RFC Editor: In this section, replace all occurrences of 'XXXX' with <CODE BEGINS> file "ietf-routing@2016-11-04.yang"
the actual RFC number and all occurrences of the revision date below
with the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-routing@2016-11-03.yang"
module ietf-routing { module ietf-routing {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; namespace "urn:ietf:params:xml:ns:yang:ietf-routing";
prefix "rt"; prefix "rt";
import ietf-yang-types { import ietf-yang-types {
skipping to change at page 14, line 51 skipping to change at page 14, line 50
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
organization organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact contact
"WG Web: <https://tools.ietf.org/wg/netmod/> "WG Web: <https://datatracker.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org> WG List: <mailto:netmod@ietf.org>
WG Chair: Lou Berger WG Chair: Lou Berger
<mailto:lberger@labn.net> <mailto:lberger@labn.net>
WG Chair: Kent Watsen WG Chair: Kent Watsen
<mailto:kwatsen@juniper.net> <mailto:kwatsen@juniper.net>
Editor: Ladislav Lhotka Editor: Ladislav Lhotka
<mailto:lhotka@nic.cz> <mailto:lhotka@nic.cz>
Editor: Acee Lindem Editor: Acee Lindem
skipping to change at page 15, line 23 skipping to change at page 15, line 21
<mailto:lhotka@nic.cz> <mailto:lhotka@nic.cz>
Editor: Acee Lindem Editor: Acee Lindem
<mailto:acee@cisco.com>"; <mailto:acee@cisco.com>";
description description
"This YANG module defines essential components for the management "This YANG module defines essential components for the management
of a routing subsystem. of a routing subsystem.
Copyright (c) 2016 IETF Trust and the persons identified as Copyright (c) 2016 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and
'OPTIONAL' in the module text are to be interpreted as described 'OPTIONAL' in the module text are to be interpreted as described
in RFC 2119 (https://tools.ietf.org/html/rfc2119). in RFC 2119.
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 8022;
(https://tools.ietf.org/html/rfcXXXX); see the RFC itself for see the RFC itself for full legal notices.";
full legal notices.";
revision 2016-11-03 { revision 2016-11-04 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC 8022: A YANG Data Model for Routing Management";
} }
/* Features */ /* Features */
feature multiple-ribs { feature multiple-ribs {
description description
"This feature indicates that the server supports user-defined "This feature indicates that the server supports user-defined
RIBs. RIBs.
Servers that do not advertise this feature SHOULD provide Servers that do not advertise this feature SHOULD provide
exactly one system-controlled RIB per supported address family exactly one system-controlled RIB per supported address family
and make them also the default RIBs. These RIBs then appear as and make it also the default RIB. This RIB then appears as an
entries of the list /routing-state/ribs/rib."; entry of the list /routing-state/ribs/rib.";
} }
feature router-id { feature router-id {
description description
"This feature indicates that the server supports configuration "This feature indicates that the server supports configuration
of an explicit 32-bit router ID that is used by some routing of an explicit 32-bit router ID that is used by some routing
protocols. protocols.
Servers that do not advertise this feature set a router ID Servers that do not advertise this feature set a router ID
algorithmically, usually to one of configured IPv4 addresses. algorithmically, usually to one of the configured IPv4
However, this algorithm is implementation-specific."; addresses. However, this algorithm is implementation
specific.";
} }
/* Identities */ /* Identities */
identity address-family { identity address-family {
description description
"Base identity from which identities describing address "Base identity from which identities describing address
families are derived."; families are derived.";
} }
skipping to change at page 16, line 46 skipping to change at page 16, line 45
} }
identity ipv6 { identity ipv6 {
base address-family; base address-family;
description description
"This identity represents IPv6 address family."; "This identity represents IPv6 address family.";
} }
identity control-plane-protocol { identity control-plane-protocol {
description description
"Base identity from which control plane protocol identities are "Base identity from which control-plane protocol identities are
derived."; derived.";
} }
identity routing-protocol { identity routing-protocol {
base control-plane-protocol; base control-plane-protocol;
description description
"Identity from which Layer 3 routing protocol identities are "Identity from which Layer 3 routing protocol identities are
derived."; derived.";
} }
skipping to change at page 18, line 6 skipping to change at page 18, line 4
} }
grouping router-id { grouping router-id {
description description
"This grouping provides router ID."; "This grouping provides router ID.";
leaf router-id { leaf router-id {
type yang:dotted-quad; type yang:dotted-quad;
description description
"A 32-bit number in the form of a dotted quad that is used by "A 32-bit number in the form of a dotted quad that is used by
some routing protocols identifying a router."; some routing protocols identifying a router.";
reference reference
"RFC 2328: OSPF Version 2."; "RFC 2328: OSPF Version 2.";
} }
} }
grouping special-next-hop { grouping special-next-hop {
description description
"This grouping provides a leaf with an enumeration of special "This grouping provides a leaf with an enumeration of special
next-hops."; next hops.";
leaf special-next-hop { leaf special-next-hop {
type enumeration { type enumeration {
enum blackhole { enum blackhole {
description description
"Silently discard the packet."; "Silently discard the packet.";
} }
enum unreachable { enum unreachable {
description description
"Discard the packet and notify the sender with an error "Discard the packet and notify the sender with an error
message indicating that the destination host is message indicating that the destination host is
skipping to change at page 18, line 39 skipping to change at page 18, line 38
"Discard the packet and notify the sender with an error "Discard the packet and notify the sender with an error
message indicating that the communication is message indicating that the communication is
administratively prohibited."; administratively prohibited.";
} }
enum receive { enum receive {
description description
"The packet will be received by the local system."; "The packet will be received by the local system.";
} }
} }
description description
"Special next-hop options."; "Options for special next hops.";
} }
} }
grouping next-hop-content { grouping next-hop-content {
description description
"Generic parameters of next-hops in static routes."; "Generic parameters of next hops in static routes.";
choice next-hop-options { choice next-hop-options {
mandatory "true"; mandatory "true";
description description
"Options for next-hops in static routes. "Options for next hops in static routes.
It is expected that further cases will be added through It is expected that further cases will be added through
augments from other modules."; augments from other modules.";
case simple-next-hop { case simple-next-hop {
description description
"This case represents a simple next hop consisting of the "This case represents a simple next hop consisting of the
next-hop address and/or outgoing interface. next-hop address and/or outgoing interface.
Modules for address families MUST augment this case with a Modules for address families MUST augment this case with a
leaf containing a next-hop address of that address leaf containing a next-hop address of that address
skipping to change at page 19, line 37 skipping to change at page 19, line 35
key "index"; key "index";
description description
"An entry of a next-hop list. "An entry of a next-hop list.
Modules for address families MUST augment this list Modules for address families MUST augment this list
with a leaf containing a next-hop address of that with a leaf containing a next-hop address of that
address family."; address family.";
leaf index { leaf index {
type string; type string;
description description
"An user-specified identifier utilised to uniquely "A user-specified identifier utilized to uniquely
reference the next-hop entry in the next-hop list. reference the next-hop entry in the next-hop list.
The value of this index has no semantic meaning The value of this index has no semantic meaning
other than for referencing the entry."; other than for referencing the entry.";
} }
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
description description
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
} }
} }
} }
} }
} }
grouping next-hop-state-content { grouping next-hop-state-content {
description description
"Generic parameters of next-hops in state data."; "Generic parameters of next hops in state data.";
choice next-hop-options { choice next-hop-options {
mandatory "true"; mandatory "true";
description description
"Options for next-hops in state data. "Options for next hops in state data.
It is expected that further cases will be added through It is expected that further cases will be added through
augments from other modules, e.g., for recursive augments from other modules, e.g., for recursive
next-hops."; next hops.";
case simple-next-hop { case simple-next-hop {
description description
"This case represents a simple next hop consisting of the "This case represents a simple next hop consisting of the
next-hop address and/or outgoing interface. next-hop address and/or outgoing interface.
Modules for address families MUST augment this case with a Modules for address families MUST augment this case with a
leaf containing a next-hop address of that address leaf containing a next-hop address of that address
family."; family.";
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-state-ref; type if:interface-state-ref;
description description
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
} }
case special-next-hop { case special-next-hop {
uses special-next-hop; uses special-next-hop;
} }
case next-hop-list { case next-hop-list {
container next-hop-list { container next-hop-list {
description description
"Container for multiple next-hops."; "Container for multiple next hops.";
list next-hop { list next-hop {
description description
"An entry of a next-hop list. "An entry of a next-hop list.
Modules for address families MUST augment this list Modules for address families MUST augment this list
with a leaf containing a next-hop address of that with a leaf containing a next-hop address of that
address family."; address family.";
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-state-ref; type if:interface-state-ref;
description description
skipping to change at page 21, line 29 skipping to change at page 21, line 29
leaf active { leaf active {
type empty; type empty;
description description
"Presence of this leaf indicates that the route is preferred "Presence of this leaf indicates that the route is preferred
among all routes in the same RIB that have the same among all routes in the same RIB that have the same
destination prefix."; destination prefix.";
} }
leaf last-updated { leaf last-updated {
type yang:date-and-time; type yang:date-and-time;
description description
"Time stamp of the last modification of the route. If the "Time stamp of the last modification of the route. If the
route was never modified, it is the time when the route was route was never modified, it is the time when the route was
inserted into the RIB."; inserted into the RIB.";
} }
} }
/* State data */ /* State data */
container routing-state { container routing-state {
config "false"; config "false";
description description
"State data of the routing subsystem."; "State data of the routing subsystem.";
uses router-id { uses router-id {
description description
"Global router ID. "Global router ID.
It may be either configured or assigned algorithmically by It may be either configured or assigned algorithmically by
the implementation."; the implementation.";
} }
container interfaces { container interfaces {
description description
"Network layer interfaces used for routing."; "Network-layer interfaces used for routing.";
leaf-list interface { leaf-list interface {
type if:interface-state-ref; type if:interface-state-ref;
description description
"Each entry is a reference to the name of a configured "Each entry is a reference to the name of a configured
network layer interface."; network-layer interface.";
} }
} }
container control-plane-protocols { container control-plane-protocols {
description description
"Container for the list of routing protocol instances."; "Container for the list of routing protocol instances.";
list control-plane-protocol { list control-plane-protocol {
key "type name"; key "type name";
description description
"State data of a control plane protocol instance. "State data of a control-plane protocol instance.
An implementation MUST provide exactly one An implementation MUST provide exactly one
system-controlled instance of the 'direct' system-controlled instance of the 'direct'
pseudo-protocol. Instances of other control plane pseudo-protocol. Instances of other control-plane
protocols MAY be created by configuration."; protocols MAY be created by configuration.";
leaf type { leaf type {
type identityref { type identityref {
base control-plane-protocol; base control-plane-protocol;
} }
description description
"Type of the control plane protocol."; "Type of the control-plane protocol.";
} }
leaf name { leaf name {
type string; type string;
description description
"The name of the control plane protocol instance. "The name of the control-plane protocol instance.
For system-controlled instances this name is persistent, For system-controlled instances this name is persistent,
i.e., it SHOULD NOT change across reboots."; i.e., it SHOULD NOT change across reboots.";
} }
} }
} }
container ribs { container ribs {
description description
"Container for RIBs."; "Container for RIBs.";
list rib { list rib {
skipping to change at page 23, line 17 skipping to change at page 23, line 17
} }
uses address-family; uses address-family;
leaf default-rib { leaf default-rib {
if-feature "multiple-ribs"; if-feature "multiple-ribs";
type boolean; type boolean;
default "true"; default "true";
description description
"This flag has the value of 'true' if and only if the RIB "This flag has the value of 'true' if and only if the RIB
is the default RIB for the given address family. is the default RIB for the given address family.
By default, control plane protocols place their routes By default, control-plane protocols place their routes
in the default RIBs."; in the default RIBs.";
} }
container routes { container routes {
description description
"Current content of the RIB."; "Current content of the RIB.";
list route { list route {
description description
"A RIB route entry. This data node MUST be augmented "A RIB route entry. This data node MUST be augmented
with information specific for routes of each address with information specific for routes of each address
family."; family.";
leaf route-preference { leaf route-preference {
type route-preference; type route-preference;
description description
"This route attribute, also known as administrative "This route attribute, also known as administrative
distance, allows for selecting the preferred route distance, allows for selecting the preferred route
among routes with the same destination prefix. A among routes with the same destination prefix. A
smaller value means a more preferred route."; smaller value means a more preferred route.";
} }
container next-hop { container next-hop {
description description
"Route's next-hop attribute."; "Route's next-hop attribute.";
uses next-hop-state-content; uses next-hop-state-content;
} }
uses route-metadata; uses route-metadata;
} }
} }
action active-route { action active-route {
description description
"Return the active RIB route that is used for the "Return the active RIB route that is used for the
destination address. destination address.
Address family specific modules MUST augment input Address-family-specific modules MUST augment input
parameters with a leaf named 'destination-address'."; parameters with a leaf named 'destination-address'.";
output { output {
container route { container route {
description description
"The active RIB route for the specified destination. "The active RIB route for the specified destination.
If no route exists in the RIB for the destination If no route exists in the RIB for the destination
address, no output is returned. address, no output is returned.
Address family specific modules MUST augment this Address-family-specific modules MUST augment this
container with appropriate route contents."; container with appropriate route contents.";
container next-hop { container next-hop {
description description
"Route's next-hop attribute."; "Route's next-hop attribute.";
uses next-hop-state-content; uses next-hop-state-content;
} }
uses route-metadata; uses route-metadata;
} }
} }
} }
skipping to change at page 24, line 34 skipping to change at page 24, line 34
} }
/* Configuration Data */ /* Configuration Data */
container routing { container routing {
description description
"Configuration parameters for the routing subsystem."; "Configuration parameters for the routing subsystem.";
uses router-id { uses router-id {
if-feature "router-id"; if-feature "router-id";
description description
"Configuration of the global router ID. Routing protocols "Configuration of the global router ID. Routing protocols
that use router ID can use this parameter or override it that use router ID can use this parameter or override it
with another value."; with another value.";
} }
container control-plane-protocols { container control-plane-protocols {
description description
"Configuration of control plane protocol instances."; "Configuration of control-plane protocol instances.";
list control-plane-protocol { list control-plane-protocol {
key "type name"; key "type name";
description description
"Each entry contains configuration of a control plane "Each entry contains configuration of a control-plane
protocol instance."; protocol instance.";
leaf type { leaf type {
type identityref { type identityref {
base control-plane-protocol; base control-plane-protocol;
} }
description description
"Type of the control plane protocol - an identity derived "Type of the control-plane protocol - an identity derived
from the 'control-plane-protocol' base identity."; from the 'control-plane-protocol' base identity.";
} }
leaf name { leaf name {
type string; type string;
description description
"An arbitrary name of the control plane protocol "An arbitrary name of the control-plane protocol
instance."; instance.";
} }
leaf description { leaf description {
type string; type string;
description description
"Textual description of the control plane protocol "Textual description of the control-plane protocol
instance."; instance.";
} }
container static-routes { container static-routes {
when "derived-from-or-self(../type, 'rt:static')" { when "derived-from-or-self(../type, 'rt:static')" {
description description
"This container is only valid for the 'static' routing "This container is only valid for the 'static' routing
protocol."; protocol.";
} }
description description
"Configuration of the 'static' pseudo-protocol. "Configuration of the 'static' pseudo-protocol.
skipping to change at page 25, line 43 skipping to change at page 25, line 43
description description
"Configuration of RIBs."; "Configuration of RIBs.";
list rib { list rib {
key "name"; key "name";
description description
"Each entry contains configuration for a RIB identified by "Each entry contains configuration for a RIB identified by
the 'name' key. the 'name' key.
Entries having the same key as a system-controlled entry Entries having the same key as a system-controlled entry
of the list /routing-state/ribs/rib are used for of the list /routing-state/ribs/rib are used for
configuring parameters of that entry. Other entries define configuring parameters of that entry. Other entries
additional user-controlled RIBs."; define additional user-controlled RIBs.";
leaf name { leaf name {
type string; type string;
description description
"The name of the RIB. "The name of the RIB.
For system-controlled entries, the value of this leaf For system-controlled entries, the value of this leaf
must be the same as the name of the corresponding entry must be the same as the name of the corresponding entry
in state data. in state data.
For user-controlled entries, an arbitrary name can be For user-controlled entries, an arbitrary name can be
used."; used.";
} }
uses address-family { uses address-family {
description description
"Address family of the RIB. "Address family of the RIB.
It is mandatory for user-controlled RIBs. For It is mandatory for user-controlled RIBs. For
system-controlled RIBs it can be omitted, otherwise it system-controlled RIBs it can be omitted; otherwise, it
must match the address family of the corresponding state must match the address family of the corresponding state
entry."; entry.";
refine "address-family" { refine "address-family" {
mandatory "false"; mandatory "false";
} }
} }
leaf description { leaf description {
type string; type string;
description description
"Textual description of the RIB."; "Textual description of the RIB.";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
8. IPv4 Unicast Routing Management YANG Module 8. IPv4 Unicast Routing Management YANG Module
RFC Editor: In this section, replace all occurrences of 'XXXX' with <CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-11-04.yang"
the actual RFC number and all occurrences of the revision date below
with the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-11-03.yang"
module ietf-ipv4-unicast-routing { module ietf-ipv4-unicast-routing {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
prefix "v4ur"; prefix "v4ur";
import ietf-routing { import ietf-routing {
skipping to change at page 27, line 4 skipping to change at page 26, line 48
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
prefix "v4ur"; prefix "v4ur";
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
organization organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact contact
"WG Web: <https://tools.ietf.org/wg/netmod/> "WG Web: <https://datatracker.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org> WG List: <mailto:netmod@ietf.org>
WG Chair: Lou Berger WG Chair: Lou Berger
<mailto:lberger@labn.net> <mailto:lberger@labn.net>
WG Chair: Kent Watsen WG Chair: Kent Watsen
<mailto:kwatsen@juniper.net> <mailto:kwatsen@juniper.net>
Editor: Ladislav Lhotka Editor: Ladislav Lhotka
<mailto:lhotka@nic.cz> <mailto:lhotka@nic.cz>
Editor: Acee Lindem Editor: Acee Lindem
<mailto:acee@cisco.com>"; <mailto:acee@cisco.com>";
description description
"This YANG module augments the 'ietf-routing' module with basic "This YANG module augments the 'ietf-routing' module with basic
configuration and state data for IPv4 unicast routing. configuration and state data for IPv4 unicast routing.
Copyright (c) 2016 IETF Trust and the persons identified as Copyright (c) 2016 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and
'OPTIONAL' in the module text are to be interpreted as described 'OPTIONAL' in the module text are to be interpreted as described
in RFC 2119 (https://tools.ietf.org/html/rfc2119). in RFC 2119.
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 8022;
(https://tools.ietf.org/html/rfcXXXX); see the RFC itself for see the RFC itself for full legal notices.";
full legal notices.";
revision 2016-11-03 { revision 2016-11-04 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC 8022: A YANG Data Model for Routing Management";
} }
/* Identities */ /* Identities */
identity ipv4-unicast { identity ipv4-unicast {
base rt:ipv4; base rt:ipv4;
description description
"This identity represents the IPv4 unicast address family."; "This identity represents the IPv4 unicast address family.";
} }
/* State data */ /* State data */
skipping to change at page 28, line 46 skipping to change at page 28, line 41
when "derived-from-or-self(../../../rt:address-family, " when "derived-from-or-self(../../../rt:address-family, "
+ "'v4ur:ipv4-unicast')" { + "'v4ur:ipv4-unicast')" {
description description
"This augment is valid only for IPv4 unicast."; "This augment is valid only for IPv4 unicast.";
} }
description description
"Augment 'simple-next-hop' case in IPv4 unicast routes."; "Augment 'simple-next-hop' case in IPv4 unicast routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the next-hop."; "IPv4 address of the next hop.";
} }
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
+ "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
+ "rt:next-hop-list/rt:next-hop" { + "rt:next-hop-list/rt:next-hop" {
when "derived-from-or-self(../../../../../rt:address-family, " when "derived-from-or-self(../../../../../rt:address-family, "
+ "'v4ur:ipv4-unicast')" { + "'v4ur:ipv4-unicast')" {
description description
"This augment is valid only for IPv4 unicast."; "This augment is valid only for IPv4 unicast.";
skipping to change at page 30, line 21 skipping to change at page 30, line 16
+ "'v4ur:ipv4-unicast')" { + "'v4ur:ipv4-unicast')" {
description description
"This augment is valid only for IPv4 unicast."; "This augment is valid only for IPv4 unicast.";
} }
description description
"Augment 'simple-next-hop' case in the reply to the "Augment 'simple-next-hop' case in the reply to the
'active-route' action."; 'active-route' action.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the next-hop."; "IPv4 address of the next hop.";
} }
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
+ "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
+ "rt:next-hop-list/rt:next-hop-list/rt:next-hop" { + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
when "derived-from-or-self(../../../../../rt:address-family, " when "derived-from-or-self(../../../../../rt:address-family, "
+ "'v4ur:ipv4-unicast')" { + "'v4ur:ipv4-unicast')" {
description description
"This augment is valid only for IPv4 unicast."; "This augment is valid only for IPv4 unicast.";
} }
description description
"Augment 'next-hop-list' case in the reply to the "Augment 'next-hop-list' case in the reply to the
'active-route' action."; 'active-route' action.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the next-hop."; "IPv4 address of the next hop.";
} }
} }
/* Configuration data */ /* Configuration data */
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes" { + "rt:control-plane-protocol/rt:static-routes" {
description description
"This augment defines the configuration of the 'static' "This augment defines the configuration of the 'static'
pseudo-protocol with data specific to IPv4 unicast."; pseudo-protocol with data specific to IPv4 unicast.";
skipping to change at page 31, line 31 skipping to change at page 31, line 27
description description
"Configuration of next-hop."; "Configuration of next-hop.";
uses rt:next-hop-content { uses rt:next-hop-content {
augment "next-hop-options/simple-next-hop" { augment "next-hop-options/simple-next-hop" {
description description
"Augment 'simple-next-hop' case in IPv4 static "Augment 'simple-next-hop' case in IPv4 static
routes."; routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the next-hop."; "IPv4 address of the next hop.";
} }
} }
augment "next-hop-options/next-hop-list/next-hop-list/" augment "next-hop-options/next-hop-list/next-hop-list/"
+ "next-hop" { + "next-hop" {
description description
"Augment 'next-hop-list' case in IPv4 static "Augment 'next-hop-list' case in IPv4 static
routes."; routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the next-hop."; "IPv4 address of the next hop.";
} }
} }
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
9. IPv6 Unicast Routing Management YANG Module 9. IPv6 Unicast Routing Management YANG Module
RFC Editor: In this section, replace all occurrences of 'XXXX' with <CODE BEGINS> file "ietf-ipv6-unicast-routing@2016-11-04.yang"
the actual RFC number and all occurrences of the revision date below
with the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-ipv6-unicast-routing@2016-11-03.yang"
module ietf-ipv6-unicast-routing { module ietf-ipv6-unicast-routing {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
prefix "v6ur"; prefix "v6ur";
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
include ietf-ipv6-router-advertisements { include ietf-ipv6-router-advertisements {
revision-date 2016-11-03; revision-date 2016-11-04;
} }
organization organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact contact
"WG Web: <https://tools.ietf.org/wg/netmod/> "WG Web: <https://datatracker.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org> WG List: <mailto:netmod@ietf.org>
WG Chair: Lou Berger WG Chair: Lou Berger
<mailto:lberger@labn.net> <mailto:lberger@labn.net>
WG Chair: Kent Watsen WG Chair: Kent Watsen
<mailto:kwatsen@juniper.net> <mailto:kwatsen@juniper.net>
Editor: Ladislav Lhotka Editor: Ladislav Lhotka
<mailto:lhotka@nic.cz> <mailto:lhotka@nic.cz>
Editor: Acee Lindem Editor: Acee Lindem
<mailto:acee@cisco.com>"; <mailto:acee@cisco.com>";
description description
"This YANG module augments the 'ietf-routing' module with basic "This YANG module augments the 'ietf-routing' module with basic
configuration and state data for IPv6 unicast routing. configuration and state data for IPv6 unicast routing.
Copyright (c) 2016 IETF Trust and the persons identified as Copyright (c) 2016 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and
'OPTIONAL' in the module text are to be interpreted as described 'OPTIONAL' in the module text are to be interpreted as described
in RFC 2119 (https://tools.ietf.org/html/rfc2119). in RFC 2119.
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 8022;
(https://tools.ietf.org/html/rfcXXXX); see the RFC itself for see the RFC itself for full legal notices.";
full legal notices.";
revision 2016-11-03 { revision 2016-11-04 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC 8022: A YANG Data Model for Routing Management";
} }
/* Identities */ /* Identities */
identity ipv6-unicast { identity ipv6-unicast {
base rt:ipv6; base rt:ipv6;
description description
"This identity represents the IPv6 unicast address family."; "This identity represents the IPv6 unicast address family.";
} }
skipping to change at page 34, line 24 skipping to change at page 34, line 19
when "derived-from-or-self(../../../rt:address-family, " when "derived-from-or-self(../../../rt:address-family, "
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
description description
"Augment 'simple-next-hop' case in IPv6 unicast routes."; "Augment 'simple-next-hop' case in IPv6 unicast routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
+ "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
+ "rt:next-hop-list/rt:next-hop" { + "rt:next-hop-list/rt:next-hop" {
when "derived-from-or-self(../../../../../rt:address-family, " when "derived-from-or-self(../../../../../rt:address-family, "
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
description description
"This leaf augments the 'next-hop-list' case of IPv6 unicast "This leaf augments the 'next-hop-list' case of IPv6 unicast
routes."; routes.";
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
augment augment
"/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" {
when "derived-from-or-self(../rt:address-family, " when "derived-from-or-self(../rt:address-family, "
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast RIBs."; "This augment is valid only for IPv6 unicast RIBs.";
} }
skipping to change at page 35, line 45 skipping to change at page 35, line 40
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
description description
"Augment 'simple-next-hop' case in the reply to the "Augment 'simple-next-hop' case in the reply to the
'active-route' action."; 'active-route' action.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
+ "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
+ "rt:next-hop-list/rt:next-hop-list/rt:next-hop" { + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
when "derived-from-or-self(../../../../../rt:address-family, " when "derived-from-or-self(../../../../../rt:address-family, "
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
description description
"Augment 'next-hop-list' case in the reply to the "Augment 'next-hop-list' case in the reply to the
'active-route' action."; 'active-route' action.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
skipping to change at page 36, line 16 skipping to change at page 36, line 10
+ "'v6ur:ipv6-unicast')" { + "'v6ur:ipv6-unicast')" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
description description
"Augment 'next-hop-list' case in the reply to the "Augment 'next-hop-list' case in the reply to the
'active-route' action."; 'active-route' action.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
/* Configuration data */ /* Configuration data */
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes" { + "rt:control-plane-protocol/rt:static-routes" {
description description
"This augment defines the configuration of the 'static' "This augment defines the configuration of the 'static'
pseudo-protocol with data specific to IPv6 unicast."; pseudo-protocol with data specific to IPv6 unicast.";
skipping to change at page 37, line 8 skipping to change at page 36, line 51
description description
"Configuration of next-hop."; "Configuration of next-hop.";
uses rt:next-hop-content { uses rt:next-hop-content {
augment "next-hop-options/simple-next-hop" { augment "next-hop-options/simple-next-hop" {
description description
"Augment 'simple-next-hop' case in IPv6 static "Augment 'simple-next-hop' case in IPv6 static
routes."; routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
augment "next-hop-options/next-hop-list/next-hop-list/" augment "next-hop-options/next-hop-list/next-hop-list/"
+ "next-hop" { + "next-hop" {
description description
"Augment 'next-hop-list' case in IPv6 static "Augment 'next-hop-list' case in IPv6 static
routes."; routes.";
leaf next-hop-address { leaf next-hop-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the next-hop."; "IPv6 address of the next hop.";
} }
} }
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
9.1. IPv6 Router Advertisements Submodule 9.1. IPv6 Router Advertisements Submodule
RFC Editor: In this section, replace all occurrences of 'XXXX' with <CODE BEGINS> file "ietf-ipv6-router-advertisements@2016-11-04.yang"
the actual RFC number and all occurrences of the revision date below
with the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-ipv6-router-advertisements@2016-11-03.yang"
submodule ietf-ipv6-router-advertisements { submodule ietf-ipv6-router-advertisements {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-ipv6-unicast-routing { belongs-to ietf-ipv6-unicast-routing {
prefix "v6ur"; prefix "v6ur";
} }
import ietf-inet-types { import ietf-inet-types {
skipping to change at page 38, line 15 skipping to change at page 38, line 6
} }
import ietf-ip { import ietf-ip {
prefix "ip"; prefix "ip";
} }
organization organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact contact
"WG Web: <https://tools.ietf.org/wg/netmod/> "WG Web: <https://datatracker.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org> WG List: <mailto:netmod@ietf.org>
WG Chair: Lou Berger WG Chair: Lou Berger
<mailto:lberger@labn.net> <mailto:lberger@labn.net>
WG Chair: Kent Watsen WG Chair: Kent Watsen
<mailto:kwatsen@juniper.net> <mailto:kwatsen@juniper.net>
Editor: Ladislav Lhotka Editor: Ladislav Lhotka
<mailto:lhotka@nic.cz> <mailto:lhotka@nic.cz>
Editor: Acee Lindem Editor: Acee Lindem
<mailto:acee@cisco.com>"; <mailto:acee@cisco.com>";
description description
"This YANG module augments the 'ietf-ip' module with "This YANG module augments the 'ietf-ip' module with
configuration and state data of IPv6 router advertisements. configuration and state data of IPv6 router advertisements.
Copyright (c) 2016 IETF Trust and the persons identified as Copyright (c) 2016 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and
'OPTIONAL' in the module text are to be interpreted as described 'OPTIONAL' in the module text are to be interpreted as described
in RFC 2119 (https://tools.ietf.org/html/rfc2119). in RFC 2119.
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 8022;
(https://tools.ietf.org/html/rfcXXXX); see the RFC itself for see the RFC itself for full legal notices.";
full legal notices.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6)."; "RFC 4861: Neighbor Discovery for IP version 6 (IPv6).";
revision 2016-11-03 { revision 2016-11-04 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC 8022: A YANG Data Model for Routing Management";
} }
/* State data */ /* State data */
augment "/if:interfaces-state/if:interface/ip:ipv6" { augment "/if:interfaces-state/if:interface/ip:ipv6" {
description description
"Augment interface state data with parameters of IPv6 router "Augment interface state data with parameters of IPv6 router
advertisements."; advertisements.";
container ipv6-router-advertisements { container ipv6-router-advertisements {
description description
"Parameters of IPv6 Router Advertisements."; "Parameters of IPv6 Router Advertisements.";
leaf send-advertisements { leaf send-advertisements {
skipping to change at page 40, line 16 skipping to change at page 40, line 6
leaf other-config-flag { leaf other-config-flag {
type boolean; type boolean;
description description
"The value that is placed in the 'Other configuration' flag "The value that is placed in the 'Other configuration' flag
field in the Router Advertisement."; field in the Router Advertisement.";
} }
leaf link-mtu { leaf link-mtu {
type uint32; type uint32;
description description
"The value that is placed in MTU options sent by the "The value that is placed in MTU options sent by the
router. A value of zero indicates that no MTU options are router. A value of zero indicates that no MTU options are
sent."; sent.";
} }
leaf reachable-time { leaf reachable-time {
type uint32 { type uint32 {
range "0..3600000"; range "0..3600000";
} }
units "milliseconds"; units "milliseconds";
description description
"The value that is placed in the Reachable Time field in "The value that is placed in the Reachable Time field in
the Router Advertisement messages sent by the router. A the Router Advertisement messages sent by the router. A
value of zero means unspecified (by this router)."; value of zero means unspecified (by this router).";
} }
leaf retrans-timer { leaf retrans-timer {
type uint32; type uint32;
units "milliseconds"; units "milliseconds";
description description
"The value that is placed in the Retrans Timer field in the "The value that is placed in the Retrans Timer field in the
Router Advertisement messages sent by the router. A value Router Advertisement messages sent by the router. A value
of zero means unspecified (by this router)."; of zero means unspecified (by this router).";
} }
leaf cur-hop-limit { leaf cur-hop-limit {
type uint8; type uint8;
description description
"The value that is placed in the Cur Hop Limit field in the "The value that is placed in the Cur Hop Limit field in the
Router Advertisement messages sent by the router. A value Router Advertisement messages sent by the router. A value
of zero means unspecified (by this router)."; of zero means unspecified (by this router).";
} }
leaf default-lifetime { leaf default-lifetime {
type uint16 { type uint16 {
range "0..9000"; range "0..9000";
} }
units "seconds"; units "seconds";
description description
"The value that is placed in the Router Lifetime field of "The value that is placed in the Router Lifetime field of
Router Advertisements sent from the interface, in seconds. Router Advertisements sent from the interface, in seconds.
skipping to change at page 41, line 31 skipping to change at page 41, line 22
leaf prefix-spec { leaf prefix-spec {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"IPv6 address prefix."; "IPv6 address prefix.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"The value that is placed in the Valid Lifetime in the "The value that is placed in the Valid Lifetime in the
Prefix Information option. The designated value of all Prefix Information option. The designated value of
1's (0xffffffff) represents infinity. all 1's (0xffffffff) represents infinity.
An implementation SHOULD keep this value constant in An implementation SHOULD keep this value constant in
consecutive advertisements except when it is consecutive advertisements except when it is
explicitly changed in configuration."; explicitly changed in configuration.";
} }
leaf on-link-flag { leaf on-link-flag {
type boolean; type boolean;
description description
"The value that is placed in the on-link flag ('L-bit') "The value that is placed in the on-link flag ('L-bit')
field in the Prefix Information option."; field in the Prefix Information option.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"The value that is placed in the Preferred Lifetime in "The value that is placed in the Preferred Lifetime in
the Prefix Information option, in seconds. The the Prefix Information option, in seconds. The
designated value of all 1's (0xffffffff) represents designated value of all 1's (0xffffffff) represents
infinity. infinity.
An implementation SHOULD keep this value constant in An implementation SHOULD keep this value constant in
consecutive advertisements except when it is consecutive advertisements except when it is
explicitly changed in configuration."; explicitly changed in configuration.";
} }
leaf autonomous-flag { leaf autonomous-flag {
type boolean; type boolean;
description description
skipping to change at page 43, line 11 skipping to change at page 42, line 51
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
MaxRtrAdvInterval."; MaxRtrAdvInterval.";
} }
leaf min-rtr-adv-interval { leaf min-rtr-adv-interval {
type uint16 { type uint16 {
range "3..1350"; range "3..1350";
} }
units "seconds"; units "seconds";
must ". <= 0.75 * ../max-rtr-adv-interval" { must ". <= 0.75 * ../max-rtr-adv-interval" {
description description
"The value MUST NOT be greater than 75 % of "The value MUST NOT be greater than 75% of
'max-rtr-adv-interval'."; 'max-rtr-adv-interval'.";
} }
description description
"The minimum time allowed between sending unsolicited "The minimum time allowed between sending unsolicited
multicast Router Advertisements from the interface. multicast Router Advertisements from the interface.
The default value to be used operationally if this leaf is The default value to be used operationally if this leaf is
not configured is determined as follows: not configured is determined as follows:
- if max-rtr-adv-interval >= 9 seconds, the default value - if max-rtr-adv-interval >= 9 seconds, the default
is 0.33 * max-rtr-adv-interval; value is 0.33 * max-rtr-adv-interval;
- otherwise it is 0.75 * max-rtr-adv-interval."; - otherwise, it is 0.75 * max-rtr-adv-interval.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
MinRtrAdvInterval."; MinRtrAdvInterval.";
} }
leaf managed-flag { leaf managed-flag {
type boolean; type boolean;
default "false"; default "false";
description description
"The value to be placed in the 'Managed address "The value to be placed in the 'Managed address
configuration' flag field in the Router Advertisement."; configuration' flag field in the Router Advertisement.";
skipping to change at page 44, line 19 skipping to change at page 44, line 10
AdvLinkMTU."; AdvLinkMTU.";
} }
leaf reachable-time { leaf reachable-time {
type uint32 { type uint32 {
range "0..3600000"; range "0..3600000";
} }
units "milliseconds"; units "milliseconds";
default "0"; default "0";
description description
"The value to be placed in the Reachable Time field in the "The value to be placed in the Reachable Time field in the
Router Advertisement messages sent by the router. A value Router Advertisement messages sent by the router. A value
of zero means unspecified (by this router)."; of zero means unspecified (by this router).";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
AdvReachableTime."; AdvReachableTime.";
} }
leaf retrans-timer { leaf retrans-timer {
type uint32; type uint32;
units "milliseconds"; units "milliseconds";
default "0"; default "0";
description description
"The value to be placed in the Retrans Timer field in the "The value to be placed in the Retrans Timer field in the
Router Advertisement messages sent by the router. A value Router Advertisement messages sent by the router. A value
of zero means unspecified (by this router)."; of zero means unspecified (by this router).";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
AdvRetransTimer."; AdvRetransTimer.";
} }
leaf cur-hop-limit { leaf cur-hop-limit {
type uint8; type uint8;
description description
"The value to be placed in the Cur Hop Limit field in the "The value to be placed in the Cur Hop Limit field in the
Router Advertisement messages sent by the router. A value Router Advertisement messages sent by the router. A value
of zero means unspecified (by this router). of zero means unspecified (by this router).
If this parameter is not configured, the device SHOULD use If this parameter is not configured, the device SHOULD use
the value specified in IANA Assigned Numbers that was in the value specified in IANA Assigned Numbers that was in
effect at the time of implementation."; effect at the time of implementation.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
AdvCurHopLimit. AdvCurHopLimit.
IANA: IP Parameters, IANA: IP Parameters,
skipping to change at page 45, line 15 skipping to change at page 45, line 6
} }
leaf default-lifetime { leaf default-lifetime {
type uint16 { type uint16 {
range "0..9000"; range "0..9000";
} }
units "seconds"; units "seconds";
description description
"The value to be placed in the Router Lifetime field of "The value to be placed in the Router Lifetime field of
Router Advertisements sent from the interface, in seconds. Router Advertisements sent from the interface, in seconds.
It MUST be either zero or between max-rtr-adv-interval and It MUST be either zero or between max-rtr-adv-interval and
9000 seconds. A value of zero indicates that the router is 9000 seconds. A value of zero indicates that the router
not to be used as a default router. These limits may be is not to be used as a default router. These limits may
overridden by specific documents that describe how IPv6 be overridden by specific documents that describe how IPv6
operates over different link layers. operates over different link layers.
If this parameter is not configured, the device SHOULD use If this parameter is not configured, the device SHOULD use
a value of 3 * max-rtr-adv-interval."; a value of 3 * max-rtr-adv-interval.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
AdvDefaultLifeTime."; AdvDefaultLifeTime.";
} }
container prefix-list { container prefix-list {
description description
skipping to change at page 46, line 5 skipping to change at page 45, line 44
description description
"Configuration of an advertised prefix entry."; "Configuration of an advertised prefix entry.";
leaf prefix-spec { leaf prefix-spec {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"IPv6 address prefix."; "IPv6 address prefix.";
} }
choice control-adv-prefixes { choice control-adv-prefixes {
default "advertise"; default "advertise";
description description
"The prefix either may be explicitly removed from the "Either the prefix is explicitly removed from the
set of advertised prefixes, or parameters with which set of advertised prefixes, or the parameters with
it is advertised may be specified (default case)."; which it is advertised are specified (default case).";
leaf no-advertise { leaf no-advertise {
type empty; type empty;
description description
"The prefix will not be advertised. "The prefix will not be advertised.
This can be used for removing the prefix from the This can be used for removing the prefix from the
default set of advertised prefixes."; default set of advertised prefixes.";
} }
case advertise { case advertise {
leaf valid-lifetime { leaf valid-lifetime {
type uint32; type uint32;
units "seconds"; units "seconds";
default "2592000"; default "2592000";
description description
"The value to be placed in the Valid Lifetime in "The value to be placed in the Valid Lifetime in
the Prefix Information option. The designated the Prefix Information option. The designated
value of all 1's (0xffffffff) represents value of all 1's (0xffffffff) represents
infinity."; infinity.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 "RFC 4861: Neighbor Discovery for IP version 6
(IPv6) - AdvValidLifetime."; (IPv6) - AdvValidLifetime.";
} }
leaf on-link-flag { leaf on-link-flag {
type boolean; type boolean;
default "true"; default "true";
description description
skipping to change at page 47, line 4 skipping to change at page 46, line 44
type uint32; type uint32;
units "seconds"; units "seconds";
must ". <= ../valid-lifetime" { must ". <= ../valid-lifetime" {
description description
"This value MUST NOT be greater than "This value MUST NOT be greater than
valid-lifetime."; valid-lifetime.";
} }
default "604800"; default "604800";
description description
"The value to be placed in the Preferred Lifetime "The value to be placed in the Preferred Lifetime
in the Prefix Information option. The designated in the Prefix Information option. The designated
value of all 1's (0xffffffff) represents value of all 1's (0xffffffff) represents
infinity."; infinity.";
reference reference
"RFC 4861: Neighbor Discovery for IP version 6 "RFC 4861: Neighbor Discovery for IP version 6
(IPv6) - AdvPreferredLifetime."; (IPv6) - AdvPreferredLifetime.";
} }
leaf autonomous-flag { leaf autonomous-flag {
type boolean; type boolean;
default "true"; default "true";
description description
skipping to change at page 47, line 33 skipping to change at page 47, line 24
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
10. IANA Considerations 10. IANA Considerations
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the This document registers the following namespace URIs in the "IETF XML
actual RFC number (and remove this note). Registry" [RFC3688]:
This document registers the following namespace URIs in the IETF XML
registry [RFC3688]:
--------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-routing URI: urn:ietf:params:xml:ns:yang:ietf-routing
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
XML: N/A, the requested URI is an XML namespace.
--------------------------------------------------------------------
--------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing URI: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
XML: N/A, the requested URI is an XML namespace.
--------------------------------------------------------------------
--------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing URI: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
XML: N/A, the requested URI is an XML namespace. This document registers the following YANG modules in the "YANG
-------------------------------------------------------------------- Module Names" registry [RFC6020]:
This document registers the following YANG modules in the YANG Module
Names registry [RFC6020]:
--------------------------------------------------------------------
name: ietf-routing
namespace: urn:ietf:params:xml:ns:yang:ietf-routing
prefix: rt
reference: RFC XXXX
--------------------------------------------------------------------
-------------------------------------------------------------------- Name: ietf-routing
name: ietf-ipv4-unicast-routing Namespace: urn:ietf:params:xml:ns:yang:ietf-routing
namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing Prefix: rt
prefix: v4ur Reference: RFC 8022
reference: RFC XXXX
--------------------------------------------------------------------
-------------------------------------------------------------------- Name: ietf-ipv4-unicast-routing
name: ietf-ipv6-unicast-routing Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing
namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing Prefix: v4ur
prefix: v6ur Reference: RFC 8022
reference: RFC XXXX Name: ietf-ipv6-unicast-routing
-------------------------------------------------------------------- Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing
Prefix: v6ur
Reference: RFC 8022
This document registers the following YANG submodule in the YANG This document registers the following YANG submodule in the "YANG
Module Names registry [RFC6020]: Module Names" registry [RFC6020]:
-------------------------------------------------------------------- Name: ietf-ipv6-router-advertisements
name: ietf-ipv6-router-advertisements Module: ietf-ipv6-unicast-routing
parent: ietf-ipv6-unicast-routing Reference: RFC 8022
reference: RFC XXXX
--------------------------------------------------------------------
11. Security Considerations 11. Security Considerations
Configuration and state data conforming to the core routing data Configuration and state data conforming to the core routing data
model (defined in this document) are designed to be accessed via a model (defined in this document) are designed to be accessed via a
management protocol with secure transport layer, such as NETCONF management protocol with a secure transport layer, such as NETCONF
[RFC6241]. The NETCONF access control model [RFC6536] provides the [RFC6241]. The NETCONF access control model [RFC6536] provides the
means to restrict access for particular NETCONF users to a pre- means to restrict access for particular NETCONF users to a
configured subset of all available NETCONF protocol operations and preconfigured subset of all available NETCONF protocol operations and
content. content.
A number of configuration data nodes defined in the YANG modules A number of configuration data nodes defined in the YANG modules
belonging to the core routing data model are writable/creatable/ belonging to the core routing data model are writable/creatable/
deletable (i.e., "config true" in YANG terms, which is the default). deletable (i.e., "config true" in YANG terms, which is the default).
These data nodes may be considered sensitive or vulnerable in some These data nodes may be considered sensitive or vulnerable in some
network environments. Write operations to these data nodes, such as network environments. Write operations to these data nodes, such as
"edit-config" in NETCONF, can have negative effects on the network if "edit-config" in NETCONF, can have negative effects on the network if
the protocol operations are not properly protected. the protocol operations are not properly protected.
The vulnerable "config true" parameters and subtrees are the The vulnerable "config true" parameters and subtrees are the
following: following:
/routing/control-plane-protocols/control-plane-protocol: This list /routing/control-plane-protocols/control-plane-protocol: This list
specifies the control plane protocols configured on a device. specifies the control-plane protocols configured on a device.
/routing/ribs/rib: This list specifies the RIBs configured for the /routing/ribs/rib: This list specifies the RIBs configured for the
device. device.
Unauthorised access to any of these lists can adversely affect the Unauthorized access to any of these lists can adversely affect the
routing subsystem of both the local device and the network. This may routing subsystem of both the local device and the network. This may
lead to network malfunctions, delivery of packets to inappropriate lead to network malfunctions, delivery of packets to inappropriate
destinations and other problems. destinations, and other problems.
12. Acknowledgments
The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean 12. References
Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini,
David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Stephane
Litkowski, Thomas Morin, Tom Petch, Yingzhen Qu, Bruno Rijsman,
Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang, Derek Man-
Kit Yeung and Jeffrey Zhang for their helpful comments and
suggestions.
13. References 12.1. Normative References
13.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <http://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<http://www.rfc-editor.org/info/rfc3688>. <http://www.rfc-editor.org/info/rfc3688>.
skipping to change at page 50, line 46 skipping to change at page 50, line 5
<http://www.rfc-editor.org/info/rfc7223>. <http://www.rfc-editor.org/info/rfc7223>.
[RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management",
RFC 7277, DOI 10.17487/RFC7277, June 2014, RFC 7277, DOI 10.17487/RFC7277, June 2014,
<http://www.rfc-editor.org/info/rfc7277>. <http://www.rfc-editor.org/info/rfc7277>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<http://www.rfc-editor.org/info/rfc7950>. <http://www.rfc-editor.org/info/rfc7950>.
13.2. Informative References 12.2. Informative References
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, Data Model Documents", RFC 6087, DOI 10.17487/RFC6087,
January 2011, <http://www.rfc-editor.org/info/rfc6087>. January 2011, <http://www.rfc-editor.org/info/rfc6087>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012, DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>. <http://www.rfc-editor.org/info/rfc6536>.
skipping to change at page 51, line 22 skipping to change at page 51, line 9
<http://www.rfc-editor.org/info/rfc7895>. <http://www.rfc-editor.org/info/rfc7895>.
[RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG",
RFC 7951, DOI 10.17487/RFC7951, August 2016, RFC 7951, DOI 10.17487/RFC7951, August 2016,
<http://www.rfc-editor.org/info/rfc7951>. <http://www.rfc-editor.org/info/rfc7951>.
Appendix A. The Complete Data Trees Appendix A. The Complete Data Trees
This appendix presents the complete configuration and state data This appendix presents the complete configuration and state data
trees of the core routing data model. See Section 2.2 for an trees of the core routing data model. See Section 2.2 for an
explanation of the symbols used. Data type of every leaf node is explanation of the symbols used. The data type of every leaf node is
shown near the right end of the corresponding line. shown near the right end of the corresponding line.
A.1. Configuration Data A.1. Configuration Data
+--rw routing +--rw routing
+--rw router-id? yang:dotted-quad +--rw router-id? yang:dotted-quad
+--rw control-plane-protocols +--rw control-plane-protocols
| +--rw control-plane-protocol* [type name] | +--rw control-plane-protocol* [type name]
| +--rw type identityref | +--rw type identityref
| +--rw name string | +--rw name string
| +--rw description? string | +--rw description? string
| +--rw static-routes | +--rw static-routes
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6
| | +--rw v6ur:route* [destination-prefix] | | +--rw v6ur:route* [destination-prefix]
skipping to change at page 54, line 27 skipping to change at page 53, line 36
| +--ro v4ur:destination-prefix? inet:ipv4-prefix | +--ro v4ur:destination-prefix? inet:ipv4-prefix
Appendix B. Minimum Implementation Appendix B. Minimum Implementation
Some parts and options of the core routing model, such as user- Some parts and options of the core routing model, such as user-
defined RIBs, are intended only for advanced routers. This appendix defined RIBs, are intended only for advanced routers. This appendix
gives basic non-normative guidelines for implementing a bare minimum gives basic non-normative guidelines for implementing a bare minimum
of available functions. Such an implementation may be used for hosts of available functions. Such an implementation may be used for hosts
or very simple routers. or very simple routers.
A minimum implementation does not support the feature "multiple- A minimum implementation does not support the feature
ribs". This means that a single system-controlled RIB is available "multiple-ribs". This means that a single system-controlled RIB is
for each supported address family - IPv4, IPv6 or both. These RIBs available for each supported address family -- IPv4, IPv6, or both.
are also the default RIBs. No user-controlled RIBs are allowed. These RIBs are also the default RIBs. No user-controlled RIBs are
allowed.
In addition to the mandatory instance of the "direct" pseudo- In addition to the mandatory instance of the "direct" pseudo-
protocol, a minimum implementation should support configuring protocol, a minimum implementation should support configuring
instance(s) of the "static" pseudo-protocol. instance(s) of the "static" pseudo-protocol.
For hosts that are never intended to act as routers, the ability to For hosts that are never intended to act as routers, the ability to
turn on sending IPv6 router advertisements (Section 5.4) should be turn on sending IPv6 router advertisements (Section 5.4) should be
removed. removed.
Platforms with severely constrained resources may use deviations for Platforms with severely constrained resources may use deviations for
restricting the data model, e.g., limiting the number of "static" restricting the data model, e.g., limiting the number of "static"
control plane protocol instances. control-plane protocol instances.
Appendix C. Example: Adding a New Control Plane Protocol Appendix C. Example: Adding a New Control-Plane Protocol
This appendix demonstrates how the core routing data model can be This appendix demonstrates how the core routing data model can be
extended to support a new control plane protocol. The YANG module extended to support a new control-plane protocol. The YANG module
"example-rip" shown below is intended as an illustration rather than "example-rip" shown below is intended as an illustration rather than
a real definition of a data model for the RIP routing protocol. For a real definition of a data model for the Routing Information
the sake of brevity, this module does not obey all the guidelines Protocol (RIP). For the sake of brevity, this module does not obey
specified in [RFC6087]. See also Section 5.3.2. all the guidelines specified in [RFC6087]. See also Section 5.3.2.
module example-rip { module example-rip {
yang-version "1.1"; yang-version "1.1";
namespace "http://example.com/rip"; namespace "http://example.com/rip";
prefix "rip"; prefix "rip";
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
identity rip { identity rip {
base rt:routing-protocol; base rt:routing-protocol;
description description
"Identity for the RIP routing protocol."; "Identity for the Routing Information Protocol (RIP).";
} }
typedef rip-metric { typedef rip-metric {
type uint8 { type uint8 {
range "0..16"; range "0..16";
} }
} }
grouping route-content { grouping route-content {
description description
"This grouping defines RIP-specific route attributes."; "This grouping defines RIP-specific route attributes.";
leaf metric { leaf metric {
type rip-metric; type rip-metric;
} }
leaf tag { leaf tag {
type uint16; type uint16;
default "0"; default "0";
description description
"This leaf may be used to carry additional info, e.g. AS "This leaf may be used to carry additional info, e.g.,
number."; autonomous system (AS) number.";
} }
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
when "derived-from-or-self(rt:source-protocol, 'rip:rip')" { when "derived-from-or-self(rt:source-protocol, 'rip:rip')" {
description description
"This augment is only valid for a routes whose source "This augment is only valid for a route whose source
protocol is RIP."; protocol is RIP.";
} }
description description
"RIP-specific route attributes."; "RIP-specific route attributes.";
uses route-content; uses route-content;
} }
augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
+ "rt:output/rt:route" { + "rt:output/rt:route" {
description description
"RIP-specific route attributes in the output of 'active-route' "RIP-specific route attributes in the output of 'active-route'
skipping to change at page 57, line 18 skipping to change at page 56, line 31
default "30"; default "30";
description description
"Time interval between periodic updates."; "Time interval between periodic updates.";
} }
} }
} }
} }
Appendix D. Data Tree Example Appendix D. Data Tree Example
This section contains an example instance data tree in the JSON This section contains an example of an instance data tree in the JSON
encoding [RFC7951], containing both configuration and state data. encoding [RFC7951], containing both configuration and state data.
The data conforms to a data model that is defined by the following The data conforms to a data model that is defined by the following
YANG library specification [RFC7895]: YANG library specification [RFC7895]:
{ {
"ietf-yang-library:modules-state": { "ietf-yang-library:modules-state": {
"module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4", "module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4",
"module": [ "module": [
{ {
"name": "ietf-routing", "name": "ietf-routing",
"revision": "2016-11-03", "revision": "2016-11-04",
"feature": [ "feature": [
"multiple-ribs", "multiple-ribs",
"router-id" "router-id"
], ],
"namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing",
"conformance-type": "implement" "conformance-type": "implement"
}, },
{ {
"name": "ietf-ipv4-unicast-routing", "name": "ietf-ipv4-unicast-routing",
"revision": "2016-11-03", "revision": "2016-11-04",
"namespace": "namespace":
"urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing", "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing",
"conformance-type": "implement" "conformance-type": "implement"
}, },
{ {
"name": "ietf-ipv6-unicast-routing", "name": "ietf-ipv6-unicast-routing",
"revision": "2016-11-03", "revision": "2016-11-04",
"namespace": "namespace":
"urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing", "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing",
"conformance-type": "implement" "conformance-type": "implement"
}, },
{ {
"name": "ietf-interfaces", "name": "ietf-interfaces",
"revision": "2014-05-08", "revision": "2014-05-08",
"namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces",
"conformance-type": "implement" "conformance-type": "implement"
}, },
skipping to change at page 58, line 36 skipping to change at page 58, line 4
}, },
{ {
"name": "ietf-ip", "name": "ietf-ip",
"revision": "2014-06-16", "revision": "2014-06-16",
"namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip",
"conformance-type": "implement" "conformance-type": "implement"
} }
] ]
} }
} }
A simple network setup as shown in Figure 3 is assumed: router "A"
A simple network set-up as shown in Figure 3 is assumed: router "A" uses static default routes with the "ISP" router as the next hop.
uses static default routes with the "ISP" router as the next-hop.
IPv6 router advertisements are configured only on the "eth1" IPv6 router advertisements are configured only on the "eth1"
interface and disabled on the upstream "eth0" interface. interface and disabled on the upstream "eth0" interface.
+-----------------+ +-----------------+
| | | |
| Router ISP | | Router ISP |
| | | |
+--------+--------+ +--------+--------+
|2001:db8:0:1::2 |2001:db8:0:1::2
|192.0.2.2 |192.0.2.2
skipping to change at page 59, line 25 skipping to change at page 58, line 29
eth0|192.0.2.1 eth0|192.0.2.1
+--------+--------+ +--------+--------+
| | | |
| Router A | | Router A |
| | | |
+--------+--------+ +--------+--------+
eth1|198.51.100.1 eth1|198.51.100.1
|2001:db8:0:2::1 |2001:db8:0:2::1
| |
Figure 3: Example network configuration Figure 3: Example of Network Configuration
The instance data tree could then be as follows: The instance data tree could then be as follows:
{ {
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"description": "Uplink to ISP.", "description": "Uplink to ISP.",
skipping to change at page 61, line 22 skipping to change at page 60, line 27
"ietf-ip:ipv6": { "ietf-ip:ipv6": {
"forwarding": true, "forwarding": true,
"mtu": 1500, "mtu": 1500,
"address": [ "address": [
{ {
"ip": "2001:0db8:0:1::1", "ip": "2001:0db8:0:1::1",
"prefix-length": 64 "prefix-length": 64
} }
], ],
"ietf-ipv6-unicast-routing:ipv6-router-advertisements": { "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
"send-advertisements": true, "send-advertisements": false
"prefix-list": {
"prefix": [
{
"prefix-spec": "2001:db8:0:2::/64"
}
]
}
} }
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"phys-address": "00:0C:42:E5:B1:EA", "phys-address": "00:0C:42:E5:B1:EA",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2015-10-24T17:11:29+02:00" "discontinuity-time": "2015-10-24T17:11:29+02:00"
skipping to change at page 65, line 22 skipping to change at page 64, line 19
"last-updated": "2015-10-24T18:02:45+02:00" "last-updated": "2015-10-24T18:02:45+02:00"
} }
] ]
} }
} }
] ]
} }
} }
} }
Appendix E. Change Log Acknowledgments
RFC Editor: Remove this section upon publication as an RFC.
E.1. Changes Between Versions -24 and -25
o Minor edits based on IETF Last Call reviews.
E.2. Changes Between Versions -23 and -24
o Fix paths in "when" expressions due to errata 4749 of RFC 7950.
E.3. Changes Between Versions -22 and -23
o Removed "route-tag" feature.
o Removed next-hop classifiers.
o Fixed invalid when expressions in augments.
o In simple-next-hop, an address, outgoing interface or both can be
specified.
o RPC "fib-route" changed into RIB action "active-route".
o The requirement that direct routes be always placed in default
RIBs.
E.4. Changes Between Versions -21 and -22
o Added "next-hop-list" as a new case of the "next-hop-options"
choice.
o Renamed "routing protocol" to "control plane protocol" in both the
YANG modules and I-D text.
E.5. Changes Between Versions -20 and -21
o Routing instances were removed.
o IPv6 RA parameters were moved to the "ietf-ipv6-router-
advertisements".
E.6. Changes Between Versions -19 and -20
o Assignment of L3 interfaces to routing instances is now part of
interface configuration.
o Next-hop options in configuration were aligned with state data.
o It is recommended to enclose protocol-specific configuration in a
presence container.
E.7. Changes Between Versions -18 and -19
o The leaf "route-preference" was removed from the "routing-
protocol" container in both "routing" and "routing-state".
o The "vrf-routing-instance" identity was added in support of a
common routing-instance type in addition to the "default-routing-
instance".
o Removed "enabled" switch from "routing-protocol".
E.8. Changes Between Versions -17 and -18
o The container "ribs" was moved under "routing-instance" (in both
"routing" and "routing-state").
o Typedefs "rib-ref" and "rib-state-ref" were removed.
o Removed "recipient-ribs" (both state and configuration).
o Removed "connected-ribs" from "routing-protocol" (both state and
configuration).
o Configuration and state data for IPv6 RA were moved under
"if:interface" and "if:interface-state".
o Assignment of interfaces to routing instances now use leaf-list
rather than list (both config and state). The opposite reference
from "if:interface" to "rt:routing-instance" was changed to a
single leaf (an interface cannot belong to multiple routing
instances).
o Specification of a default RIB is now a simple flag under "rib"
(both config and state).
o Default RIBs are marked by a flag in state data.
E.9. Changes Between Versions -16 and -17
o Added Acee as a co-author.
o Removed all traces of route filters.
o Removed numeric IDs of list entries in state data.
o Removed all next-hop cases except "simple-next-hop" and "special-
next-hop".
o Removed feature "multipath-routes".
o Augmented "ietf-interfaces" module with a leaf-list of leafrefs
pointing form state data of an interface entry to the routing
instance(s) to which the interface is assigned.
E.10. Changes Between Versions -15 and -16
o Added 'type' as the second key component of 'routing-protocol',
both in configuration and state data.
o The restriction of no more than one connected RIB per address
family was removed.
o Removed the 'id' key of routes in RIBs. This list has no keys
anymore.
o Remove the 'id' key from static routes and make 'destination-
prefix' the only key.
o Added 'route-preference' as a new attribute of routes in RIB.
o Added 'active' as a new attribute of routes in RIBs.
o Renamed RPC operation 'active-route' to 'fib-route'.
o Added 'route-preference' as a new parameter of routing protocol
instances, both in configuration and state data.
o Renamed identity 'rt:standard-routing-instance' to 'rt:default-
routing-instance'.
o Added next-hop lists to state data.
o Added two cases for specifying next-hops indirectly - via a new
RIB or a recursive list of next-hops.
o Reorganized next-hop in static routes.
o Removed all 'if-feature' statements from state data.
E.11. Changes Between Versions -14 and -15
o Removed all defaults from state data.
o Removed default from 'cur-hop-limit' in config.
E.12. Changes Between Versions -13 and -14
o Removed dependency of 'connected-ribs' on the 'multiple-ribs'
feature.
o Removed default value of 'cur-hop-limit' in state data.
o Moved parts of descriptions and all references on IPv6 RA
parameters from state data to configuration.
o Added reference to RFC 6536 in the Security section.
E.13. Changes Between Versions -12 and -13
o Wrote appendix about minimum implementation.
o Remove "when" statement for IPv6 router interface state data - it
was dependent on a config value that may not be present.
o Extra container for the next-hop list.
o Names rather than numeric ids are used for referring to list
entries in state data.
o Numeric ids are always declared as mandatory and unique. Their
description states that they are ephemeral.
o Descriptions of "name" keys in state data lists are required to be
persistent.
o
o Removed "if-feature multiple-ribs;" from connected-ribs.
o "rib-name" instead of "name" is used as the name of leafref nodes.
o "next-hop" instead of "nexthop" or "gateway" used throughout, both
in node names and text.
E.14. Changes Between Versions -11 and -12
o Removed feature "advanced-router" and introduced two features
instead: "multiple-ribs" and "multipath-routes".
o Unified the keys of config and state versions of "routing-
instance" and "rib" lists.
o Numerical identifiers of state list entries are not keys anymore,
but they are constrained using the "unique" statement.
o Updated acknowledgements.
E.15. Changes Between Versions -10 and -11
o Migrated address families from IANA enumerations to identities.
o Terminology and node names aligned with the I2RS RIB model: router
-> routing instance, routing table -> RIB.
o Introduced uint64 keys for state lists: routing-instance, rib,
route, nexthop.
o Described the relationship between system-controlled and user-
controlled list entries.
o Feature "user-defined-routing-tables" changed into "advanced-
router".
o Made nexthop into a choice in order to allow for nexthop-list
(I2RS requirement).
o Added nexthop-list with entries having priorities (backup) and
weights (load balancing).
o Updated bibliography references.
E.16. Changes Between Versions -09 and -10
o Added subtree for state data ("/routing-state").
o Terms "system-controlled entry" and "user-controlled entry"
defined and used.
o New feature "user-defined-routing-tables". Nodes that are useful
only with user-defined routing tables are now conditional.
o Added grouping "router-id".
o In routing tables, "source-protocol" attribute of routes now
reports only protocol type, and its datatype is "identityref".
o Renamed "main-routing-table" to "default-routing-table".
E.17. Changes Between Versions -08 and -09
o Fixed "must" expression for "connected-routing-table".
o Simplified "must" expression for "main-routing-table".
o Moved per-interface configuration of a new routing protocol under
'routing-protocol'. This also affects the 'example-rip' module.
E.18. Changes Between Versions -07 and -08
o Changed reference from RFC6021 to RFC6021bis.
E.19. Changes Between Versions -06 and -07
o The contents of <get-reply> in Appendix D was updated: "eth[01]"
is used as the value of "location", and "forwarding" is on for
both interfaces and both IPv4 and IPv6.
o The "must" expression for "main-routing-table" was modified to
avoid redundant error messages reporting address family mismatch
when "name" points to a non-existent routing table.
o The default behavior for IPv6 RA prefix advertisements was
clarified.
o Changed type of "rt:router-id" to "ip:dotted-quad".
o Type of "rt:router-id" changed to "yang:dotted-quad".
o Fixed missing prefixes in XPath expressions.
E.20. Changes Between Versions -05 and -06
o Document title changed: "Configuration" was replaced by
"Management".
o New typedefs "routing-table-ref" and "route-filter-ref".
o Double slashes "//" were removed from XPath expressions and
replaced with the single "/".
o Removed uniqueness requirement for "router-id".
o Complete data tree is now in Appendix A.
o Changed type of "source-protocol" from "leafref" to "string".
o Clarified the relationship between routing protocol instances and
connected routing tables.
o Added a must constraint saying that a routing table connected to
the direct pseudo-protocol must not be a main routing table.
E.21. Changes Between Versions -04 and -05
o Routing tables are now global, i.e., "routing-tables" is a child
of "routing" rather than "router".
o "must" statement for "static-routes" changed to "when".
o Added "main-routing-tables" containing references to main routing
tables for each address family.
o Removed the defaults for "address-family" and "safi" and made them
mandatory.
o Removed the default for route-filter/type and made this leaf
mandatory.
o If there is no active route for a given destination, the "active-
route" RPC returns no output.
o Added "enabled" switch under "routing-protocol".
o Added "router-type" identity and "type" leaf under "router".
o Route attribute "age" changed to "last-updated", its type is
"yang:date-and-time".
o The "direct" pseudo-protocol is always connected to main routing
tables.
o Entries in the list of connected routing tables renamed from
"routing-table" to "connected-routing-table".
o Added "must" constraint saying that a routing table must not be
its own recipient.
E.22. Changes Between Versions -03 and -04
o Changed "error-tag" for both RPC operations from "missing element"
to "data-missing".
o Removed the decrementing behavior for advertised IPv6 prefix
parameters "valid-lifetime" and "preferred-lifetime".
o Changed the key of the static route lists from "seqno" to "id"
because the routes needn't be sorted.
o Added 'must' constraint saying that "preferred-lifetime" must not
be greater than "valid-lifetime".
E.23. Changes Between Versions -02 and -03
o Module "iana-afn-safi" moved to I-D "iana-if-type".
o Removed forwarding table.
o RPC "get-route" changed to "active-route". Its output is a list
of routes (for multi-path routing).
o New RPC "route-count".
o For both RPCs, specification of negative responses was added.
o Relaxed separation of router instances.
o Assignment of interfaces to router instances needn't be disjoint.
o Route filters are now global.
o Added "allow-all-route-filter" for symmetry.
o Added Section 6 about interactions with "ietf-interfaces" and
"ietf-ip".
o Added "router-id" leaf.
o Specified the names for IPv4/IPv6 unicast main routing tables.
o Route parameter "last-modified" changed to "age".
o Added container "recipient-routing-tables".
E.24. Changes Between Versions -01 and -02
o Added module "ietf-ipv6-unicast-routing".
o The example in Appendix D now uses IP addresses from blocks
reserved for documentation.
o Direct routes appear by default in the forwarding table.
o Network layer interfaces must be assigned to a router instance.
Additional interface configuration may be present.
o The "when" statement is only used with "augment", "must" is used
elsewhere.
o Additional "must" statements were added.
o The "route-content" grouping for IPv4 and IPv6 unicast now
includes the material from the "ietf-routing" version via "uses
rt:route-content".
o Explanation of symbols in the tree representation of data model
hierarchy.
E.25. Changes Between Versions -00 and -01
o AFN/SAFI-independent stuff was moved to the "ietf-routing" module.
o Typedefs for AFN and SAFI were placed in a separate "iana-afn-
safi" module.
o Names of some data nodes were changed, in particular "routing-
process" is now "router".
o The restriction of a single AFN/SAFI per router was lifted.
o RPC operation "delete-route" was removed.
o Illegal XPath references from "get-route" to the datastore were
fixed.
o Section "Security Considerations" was written. The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean
Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini,
David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Stephane
Litkowski, Thomas Morin, Tom Petch, Yingzhen Qu, Bruno Rijsman,
Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang,
Derek Man-Kit Yeung, and Jeffrey Zhang for their helpful comments and
suggestions.
Authors' Addresses Authors' Addresses
Ladislav Lhotka Ladislav Lhotka
CZ.NIC CZ.NIC
Email: lhotka@nic.cz Email: lhotka@nic.cz
Acee Lindem Acee Lindem
Cisco Systems Cisco Systems
 End of changes. 236 change blocks. 
806 lines changed or deleted 312 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/