draft-ietf-netmod-routing-cfg-11.txt   draft-ietf-netmod-routing-cfg-12.txt 
NETMOD L. Lhotka NETMOD L. Lhotka
Internet-Draft CZ.NIC Internet-Draft CZ.NIC
Intended status: Standards Track October 18, 2013 Intended status: Standards Track November 07, 2013
Expires: April 21, 2014 Expires: May 11, 2014
A YANG Data Model for Routing Management A YANG Data Model for Routing Management
draft-ietf-netmod-routing-cfg-11 draft-ietf-netmod-routing-cfg-12
Abstract Abstract
This document contains a specification of three YANG modules. This document contains a specification of three YANG modules.
Together they form the core routing data model which serves as a Together they form the core routing data model which serves as a
framework for configuring and managing a routing subsystem. It is framework for configuring and managing a routing subsystem. It is
expected that these modules will be augmented by additional YANG expected that these modules will be augmented by additional YANG
modules defining data models for individual routing protocols and modules defining data models for individual routing protocols and
other related functions. The core routing data model provides common other related functions. The core routing data model provides common
building blocks for such extensions - routing instances, routes, building blocks for such extensions - routing instances, routes,
skipping to change at page 1, line 37 skipping to change at page 1, line 37
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 21, 2014. This Internet-Draft will expire on May 11, 2014.
Copyright Notice Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the Copyright (c) 2013 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
skipping to change at page 2, line 18 skipping to change at page 2, line 18
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6
2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4. The Design of the Core Routing Data Model . . . . . . . . . . 9 4. The Design of the Core Routing Data Model . . . . . . . . . . 9
4.1. System-Controlled and User-Controlled List Entries . . . . 12 4.1. System-Controlled and User-Controlled List Entries . . . . 12
4.2. Simple versus Advanced Routers . . . . . . . . . . . . . . 13 4.2. Features of Advanced Routers . . . . . . . . . . . . . . . 13
5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 15 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 14
5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . . 15 5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . . 14
5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . . 16 5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . . 15
5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3. Routing Information Base (RIB) . . . . . . . . . . . . . . 17 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . . 16
5.3.1. Multiple RIBs per Address Family . . . . . . . . . . . 18 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . . 17
5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . . 18 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . . 17
5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 19 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 18
5.4.2. Defining New Routing Protocols . . . . . . . . . . . . 21 5.4.2. Defining New Routing Protocols . . . . . . . . . . . . 20
5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . . 22 5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . . 21
5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 23 5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 22
6. Interactions with Other YANG Modules . . . . . . . . . . . . . 24 6. Interactions with Other YANG Modules . . . . . . . . . . . . . 23
6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 24 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 23
6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 24 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 23
7. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 26 7. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 25
8. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 48 8. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 47
9. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 55 9. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 54
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69
11. Security Considerations . . . . . . . . . . . . . . . . . . . 72 11. Security Considerations . . . . . . . . . . . . . . . . . . . 71
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 72
13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 74 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 73
13.1. Normative References . . . . . . . . . . . . . . . . . . . 74 13.1. Normative References . . . . . . . . . . . . . . . . . . . 73
13.2. Informative References . . . . . . . . . . . . . . . . . . 74 13.2. Informative References . . . . . . . . . . . . . . . . . . 73
Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 75 Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 74
A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 75 A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 74
A.2. Operational State Data . . . . . . . . . . . . . . . . . . 77 A.2. Operational State Data . . . . . . . . . . . . . . . . . . 76
Appendix B. Example: Adding a New Routing Protocol . . . . . . . 79 Appendix B. Example: Adding a New Routing Protocol . . . . . . . 78
Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 82 Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 81
Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 88 Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 87
D.1. Changes Between Versions -10 and -11 . . . . . . . . . . . 88 D.1. Changes Between Versions -11 and -12 . . . . . . . . . . . 87
D.2. Changes Between Versions -09 and -10 . . . . . . . . . . . 88 D.2. Changes Between Versions -10 and -11 . . . . . . . . . . . 87
D.3. Changes Between Versions -08 and -09 . . . . . . . . . . . 89 D.3. Changes Between Versions -09 and -10 . . . . . . . . . . . 87
D.4. Changes Between Versions -07 and -08 . . . . . . . . . . . 89 D.4. Changes Between Versions -08 and -09 . . . . . . . . . . . 88
D.5. Changes Between Versions -06 and -07 . . . . . . . . . . . 89 D.5. Changes Between Versions -07 and -08 . . . . . . . . . . . 88
D.6. Changes Between Versions -05 and -06 . . . . . . . . . . . 89 D.6. Changes Between Versions -06 and -07 . . . . . . . . . . . 88
D.7. Changes Between Versions -04 and -05 . . . . . . . . . . . 90 D.7. Changes Between Versions -05 and -06 . . . . . . . . . . . 88
D.8. Changes Between Versions -03 and -04 . . . . . . . . . . . 90 D.8. Changes Between Versions -04 and -05 . . . . . . . . . . . 89
D.9. Changes Between Versions -02 and -03 . . . . . . . . . . . 91 D.9. Changes Between Versions -03 and -04 . . . . . . . . . . . 90
D.10. Changes Between Versions -01 and -02 . . . . . . . . . . . 91 D.10. Changes Between Versions -02 and -03 . . . . . . . . . . . 90
D.11. Changes Between Versions -00 and -01 . . . . . . . . . . . 92 D.11. Changes Between Versions -01 and -02 . . . . . . . . . . . 91
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 93 D.12. Changes Between Versions -00 and -01 . . . . . . . . . . . 91
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 92
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 Module "ietf-routing" provides generic components of a routing
data model. data model.
o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing"
module with additional data specific to IPv4 unicast. module with additional data specific to IPv4 unicast.
skipping to change at page 5, line 46 skipping to change at page 5, line 46
o state data o state data
o RPC operation o RPC operation
2.1. Glossary of New Terms 2.1. Glossary of New Terms
active route: a route that is actually used for sending packets. If active route: a route that is actually used for sending packets. If
there are multiple candidate routes with a matching destination there are multiple candidate routes with a matching destination
prefix, then it is up to the routing algorithm to select the prefix, then it is up to the routing algorithm to select the
active route (or several active routes in the case of multi-path active route.
routing).
core routing data model: YANG data model resulting from the core routing data model: YANG data model resulting from the
combination of "ietf-routing", "ietf-ipv4-unicast-routing" and combination of "ietf-routing", "ietf-ipv4-unicast-routing" and
"ietf-ipv6-unicast-routing" modules. "ietf-ipv6-unicast-routing" 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 routes together routing information base (RIB): An object containing routes together
with other information. See Section 5.3 for details. with other information. See Section 5.3 for details.
skipping to change at page 10, line 8 skipping to change at page 10, line 8
routing system. The other two modules, "ietf-ipv4-unicast-routing" routing system. The other two modules, "ietf-ipv4-unicast-routing"
and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module
with additional data nodes that are needed for IPv4 and IPv6 unicast with additional data nodes that are needed for IPv4 and IPv6 unicast
routing, respectively. Figures 1 and 2 show abridged views of the routing, respectively. Figures 1 and 2 show abridged views of the
configuration and operational state data hierarchies. See Appendix A configuration and operational state data hierarchies. See Appendix A
for the complete data trees. for the complete data trees.
+--rw routing +--rw routing
+--rw routing-instance* [name] +--rw routing-instance* [name]
| +--rw name | +--rw name
| +--rw routing-instance-id?
| +--rw type? | +--rw type?
| +--rw enabled? | +--rw enabled?
| +--rw router-id? | +--rw router-id?
| +--rw description? | +--rw description?
| +--rw default-ribs | +--rw default-ribs
| | +--rw default-rib* [address-family] | | +--rw default-rib* [address-family]
| | +--rw address-family | | +--rw address-family
| | +--rw name | | +--rw name
| +--rw interfaces | +--rw interfaces
| | +--rw interface* [name] | | +--rw interface* [name]
skipping to change at page 10, line 35 skipping to change at page 10, line 34
| +--rw description? | +--rw description?
| +--rw enabled? | +--rw enabled?
| +--rw type | +--rw type
| +--rw connected-ribs | +--rw connected-ribs
| | ... | | ...
| +--rw static-routes | +--rw static-routes
| ... | ...
+--rw ribs +--rw ribs
| +--rw rib* [name] | +--rw rib* [name]
| +--rw name | +--rw name
| +--rw id?
| +--rw address-family | +--rw address-family
| +--rw description? | +--rw description?
| +--rw recipient-ribs | +--rw recipient-ribs
| +--rw recipient-rib* [rib-name] | +--rw recipient-rib* [rib-name]
| ... | ...
+--rw route-filters +--rw route-filters
+--rw route-filter* [name] +--rw route-filter* [name]
+--rw name +--rw name
+--rw description? +--rw description?
+--rw type +--rw type
Figure 1: Configuration data hierarchy. Figure 1: Configuration data hierarchy.
+--ro routing-state +--ro routing-state
+--ro routing-instance* [id] +--ro routing-instance* [name]
| +--ro id | +--ro name
| +--ro name? | +--ro id?
| +--ro type? | +--ro type?
| +--ro router-id? | +--ro router-id?
| +--ro default-ribs | +--ro default-ribs
| | +--ro default-rib* [address-family] | | +--ro default-rib* [address-family]
| | +--ro address-family | | +--ro address-family
| | +--ro rib-id | | +--ro rib-id
| +--ro interfaces | +--ro interfaces
| | +--ro interface* [name] | | +--ro interface* [name]
| | +--ro name | | +--ro name
| | +--ro v6ur:ipv6-router-advertisements | | +--ro v6ur:ipv6-router-advertisements
| | ... | | ...
| +--ro routing-protocols | +--ro routing-protocols
| +--ro routing-protocol* [name] | +--ro routing-protocol* [name]
| +--ro name | +--ro name
| +--ro type | +--ro type
| +--ro connected-ribs | +--ro connected-ribs
| ... | ...
+--ro ribs +--ro ribs
| +--ro rib* [id] | +--ro rib* [name]
| +--ro id | +--ro name
| +--ro name? | +--ro id?
| +--ro address-family | +--ro address-family
| +--ro routes | +--ro routes
| | +--ro route* [id] | | +--ro route*
| | ... | | ...
| +--ro recipient-ribs | +--ro recipient-ribs
| +--ro recipient-rib* [rib-id] | +--ro recipient-rib* [rib-id]
| ... | ...
+--ro route-filters +--ro route-filters
+--ro route-filter* [name] +--ro route-filter* [name]
+--ro name +--ro name
+--ro type +--ro type
Figure 2: Operational state data hierarchy. Figure 2: Operational state data hierarchy.
skipping to change at page 12, line 47 skipping to change at page 12, line 47
"static" and "direct" pseudo-protocols). "static" and "direct" pseudo-protocols).
o RIBs may also be connected to each other and exchange routes in o RIBs may also be connected to each other and exchange routes in
either direction (or both). either direction (or both).
o Route exchanges along all connections may be controlled by means o Route exchanges along all connections may be controlled by means
of route filters, denoted by "F" in Figure 3. of route filters, denoted by "F" in Figure 3.
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, for example "rt: The core routing data model defines several lists, for example
routing-instance" or "rt:rib", that have to be populated with at "routing-instance" or "rib", that have to be populated with at least
least one entry in any properly functioning device, and additional one entry in any properly functioning device, and additional entries
entries may be configured by the user. may be configured by the user.
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
system-controlled entry in operational state data, i.e., inside the system-controlled entry in operational state data, i.e., inside the
"rt:routing-state" container. "routing-state" container.
Additional entries may be created in the configuration by the user Additional entries may be created in the configuration by the user
via the NETCONF protocol. These are the so-called user-controlled via the NETCONF protocol. These are so-called user-controlled
entries. If the server accepts a configured user-controlled entry, entries. If the server accepts a configured user-controlled entry,
then this entry also appears in the operational state version of the then this entry also appears in the operational state version of the
list. list.
Each version of the list (in operational state data and Both versions of the list (in operational state data and
configuration) uses its own set of list keys. In operational state, configuration) use the "name" leaf as their key.
the keys are unique numeric identifiers assigned by the server. In
configuration, the list keys are selected by the user.
The user may also provide supplemental configuration of system- The user may also provide supplemental configuration of system-
controlled entries. To do so, the user creates a new entry in the controlled entries. To do so, the user creates a new entry in the
configuration with an arbitrary key and desired configuration configuration with the desired contents. In order to bind this entry
contents. In order to bind this entry with the corresponding entry with the corresponding entry in the operational state list, the key
in the operational state list, the user writes the operational state of the configuration entry has to be set to the same value as the key
key as a value of a special leaf that is defined in the data model of the state entry.
for this purpose.
An example can be seen in Appendix C: the "/routing-state/ An example can be seen in Appendix C: the "/routing-state/
routing-instance" list has a single system-controlled entry whose routing-instance" list has a single system-controlled entry whose
"id" key has the value "1415926535". This entry is configured by the "name" key has the value "rtr0". This entry is configured by the
"/routing/routing-instance" entry whose "name" key is "rtr0". The "/routing/routing-instance" entry whose "name" key is also "rtr0".
binding with the operational state entry is established through the
value of the leaf "routing-instance-id".
Deleting a user-controlled entry from the configuration list results Deleting a user-controlled entry from the configuration list results
in the removal of the corresponding entry in the operational state in the removal of the corresponding entry in the operational state
list. In contrast, if a system-controlled entry is deleted from the list. In contrast, if a system-controlled entry is deleted from the
configuration list, only the extra configuration specified in that configuration list, only the extra configuration specified in that
entry is removed but the corresponding operational state entry entry is removed but the corresponding operational state entry
remains in the list. remains in the list.
4.2. Simple versus Advanced Routers 4.2. Features of Advanced Routers
The core routing data model attempts to address devices with The core routing data model attempts to address devices with
elementary routing functions as well as advanced routers. For simple elementary routing functions as well as advanced routers. For simple
devices, some parts and options of the data model are not needed and devices, some parts and options of the data model are not needed and
represent unnecessary complications for the implementation. would represent unnecessary complications for the implementation.
Therefore, the core routing data model makes the advanced Therefore, the core routing data model makes the advanced
functionality optional by means of a feature "advanced-router". functionality optional by means of two YANG features:
Specifically, the following objects and options are supported only in
devices that advertise the "advanced-router" feature:
o multiple RIBs per address family, and user-controlled RIB entries
in particular,
o routing protocols connected to non-default RIBs,
o RIBs configured as receivers of routes from other RIBs, o "multiple-ribs" - indicates that the device supports multiple RIBs
per address family, routing protocols connected to non-default
RIBs, and RIBs configured as receivers of routes from other RIBs.
o routes with multiple nexthops. o "multipath-routes" - indicates that the device supports routes
with multiple nexthops.
See the "ietf-routing" module for details. See the "ietf-routing" module for details.
5. Basic Building Blocks 5. Basic Building Blocks
This section describes the essential components of the core routing This section describes the essential components of the core routing
data model. data model.
5.1. Routing Instance 5.1. Routing Instance
skipping to change at page 15, line 49 skipping to change at page 14, line 49
Each network layer interface has to be assigned to one or more Each network layer interface has to be assigned to one or more
routing instances in order to be able to participate in packet routing instances in order to be able to participate in packet
forwarding, routing protocols and other operations of those routing forwarding, routing protocols and other operations of those routing
instances. The assignment is accomplished by placing a corresponding instances. The assignment is accomplished by placing a corresponding
(system- or user-controlled) entry in the list of routing instance (system- or user-controlled) entry in the list of routing instance
interfaces ("rt:interface"). The key of the list entry is the name interfaces ("rt:interface"). The key of the list entry is the name
of a configured network layer interface, see the "ietf-interfaces" of a configured network layer interface, see the "ietf-interfaces"
module [YANG-IF]. module [YANG-IF].
In YANG terms, the list of routing instance interfaces is modeled as In YANG terms, the list of routing instance interfaces is modeled as
the "list" node rather than "leaf-list" in order to allow for adding, a "list" node rather than "leaf-list" in order to allow for adding,
via augmentation, other configuration or state data related to the via augmentation, other configuration or state data related to the
corresponding interface. corresponding interface.
Implementations MAY specify additional rules for the assignment of Implementations MAY specify additional rules for the assignment of
interfaces to routing instances. For example, it may be required interfaces to routing instances. For example, it may be required
that the sets of interfaces assigned to different routing instances that the sets of interfaces assigned to different routing instances
be disjoint. be disjoint.
5.1.1. Parameters of IPv6 Routing Instance Interfaces 5.1.1. Parameters of IPv6 Routing Instance Interfaces
skipping to change at page 17, line 32 skipping to change at page 16, line 32
Routes are basic elements of information in a routing system. The Routes are basic elements of information in a routing system. The
core routing data model defines only the following minimal set of core routing data model defines only the following minimal set of
route attributes: route attributes:
o destination prefix: IP prefix specifying the set of destination o destination prefix: IP prefix specifying the set of destination
addresses for which the route may be used. This attribute is addresses for which the route may be used. This attribute is
mandatory. mandatory.
o next hop or action: outgoing interface, IP address of one or more o next hop or action: outgoing interface, IP address of one or more
adjacent routers to which a packet should be forwarded, or other adjacent routers to which a packet should be forwarded, or a
special action. special action such as discarding the packet.
The above list of route attributes suffices for a simple static The above list of route attributes suffices for a simple static
routing configuration. It is expected that future modules defining routing configuration. It is expected that future modules defining
routing protocols will add other route attributes such as metrics or routing protocols will add other route attributes such as metrics or
preferences. preferences.
Routes and their attributes are used both in configuration data, for Routes and their attributes are used both in configuration data, for
example as manually configured static routes, and in operational example as manually configured static routes, and in operational
state data, for example as entries in RIBs. state data, for example as entries in RIBs.
skipping to change at page 18, line 8 skipping to change at page 17, line 8
A routing information base (RIB) is a list of routes complemented A routing information base (RIB) is a list of routes complemented
with administrative data, namely: with administrative data, namely:
o "source-protocol": type of the routing protocol from which the o "source-protocol": type of the routing protocol from which the
route was originally obtained. route was originally obtained.
o "last-updated": the date and time when the route was last updated, o "last-updated": the date and time when the route was last updated,
or inserted into the RIB. or inserted into the RIB.
Each RIB MUST contain only routes of the same address family. In the Each RIB MUST contain only routes of one address family. In the data
data model, address family is represented with an identity derived model, address family is represented with an identity derived from
from the "rt:address-family" base identity. the "rt:address-family" base identity.
In the core routing data model, RIBs are operational state data In the core routing data model, RIBs are operational state data
represented as entries of the list "/routing-state/ribs/rib". The represented as entries of the list "/routing-state/ribs/rib". The
contents of RIBs are controlled and manipulated by routing protocol contents of RIBs are controlled and manipulated by routing protocol
operations which may result in route additions, removals and operations which may result in route additions, removals and
modifications. This also includes manipulations via the "static" modifications. This also includes manipulations via the "static"
and/or "direct" pseudo-protocols, see Section 5.4.1. and/or "direct" pseudo-protocols, see Section 5.4.1.
RIBs are global, which means that a RIB may be used by any or all RIBs are global, which means that a RIB may be used by any or all
routing instances. However, an implementation MAY specify rules and routing instances. However, an implementation MAY specify rules and
restrictions for sharing RIBs among routing instances. restrictions for sharing RIBs among routing instances.
Each routing instance must have, for every supported address family, Each routing instance must have, for every supported address family,
one RIB selected as the so-called default RIB. This selection is one RIB selected as the so-called default RIB. This selection is
recorded in the list "default-rib". The role of default RIBs is recorded in the list "default-rib". The role of default RIBs is
explained in Section 5.4. explained in Section 5.4.
Simple router implementations that do not advertise the feature Simple router implementations that do not advertise the feature
"advanced-router" will typically create one system-controlled RIB per "multiple-ribs" will typically create one system-controlled RIB per
supported address family, and declare it as a default RIB (via a supported address family, and declare it as a default RIB (via a
system-controlled entry of the "default-rib" list). system-controlled entry of the "default-rib" list).
5.3.1. Multiple RIBs per Address Family 5.3.1. Multiple RIBs per Address Family
More complex router implementations advertising the "advanced-router" 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. Every RIB can then serve as a policy routing and other purposes. Every RIB can then serve as a
source of routes for other RIBs of the same address family. To source of routes for other RIBs of the same address family. To
achieve this, one or more recipient RIBs may be specified in the achieve this, one or more recipient RIBs may be specified in the
configuration of the source RIB. Optionally, a route filter may be configuration of the source RIB. Optionally, a route filter may be
configured for any or all recipient RIBs. Such a route filter then configured for any or all recipient RIBs. Such a route filter then
selects and/or manipulates the routes that are passed between the selects and/or manipulates the routes that are passed between the
source and recipient RIB. source and recipient RIB.
A RIB MUST NOT appear among its own recipient RIBs. A RIB MUST NOT appear among its own recipient RIBs.
skipping to change at page 19, line 16 skipping to change at page 18, line 16
Each routing protocol instance is connected to exactly one RIB for Each routing protocol instance is connected to exactly one RIB for
each address family that the routing protocol instance supports. each address family that the routing protocol instance supports.
Routes learned from the network by a routing protocol are normally Routes learned from the network by a routing protocol are normally
installed into the connected RIB(s) and, conversely, routes from the installed into the connected RIB(s) and, conversely, routes from the
connected RIB(s) are normally injected into the routing protocol. connected RIB(s) are normally injected into the routing protocol.
However, routing protocol implementations MAY specify rules that However, routing protocol implementations MAY specify rules that
restrict this exchange of routes in either direction (or both restrict this exchange of routes in either direction (or both
directions). directions).
On devices supporting the "advanced-router" feature, any RIB (system- On devices supporting the "multiple-ribs" feature, any RIB (system-
controlled or user-controlled) may be connected to a routing protocol controlled or user-controlled) may be connected to a routing protocol
instance by configuring a corresponding entry in the "connected-rib" instance by configuring a corresponding entry in the "connected-rib"
list. If such an entry is not configured for an address family, then list. If such an entry is not configured for an address family, then
the default RIB MUST be used as the connected RIB for this address the default RIB MUST be used as the connected RIB for this address
family. family.
In addition, two independent route filters (see Section 5.5) may be In addition, two independent route filters (see Section 5.5) may be
configured for each connected RIB to apply user-defined policies configured for each connected RIB to apply user-defined policies
controlling the exchange of routes in both directions between the controlling the exchange of routes in both directions between the
routing protocol instance and the connected RIB: routing protocol instance and the connected RIB:
skipping to change at page 21, line 17 skipping to change at page 20, line 17
| +--rw v4ur:route* [id] | +--rw v4ur:route* [id]
| +--rw v4ur:id | +--rw v4ur:id
| +--rw v4ur:description? | +--rw v4ur:description?
| +--rw v4ur:destination-prefix | +--rw v4ur:destination-prefix
| +--rw (nexthop-options) | +--rw (nexthop-options)
| +--:(special-nexthop) | +--:(special-nexthop)
| | +--rw v4ur:special-nexthop? | | +--rw v4ur:special-nexthop?
| +--:(simple-nexthop) | +--:(simple-nexthop)
| | +--rw v4ur:gateway? | | +--rw v4ur:gateway?
| | +--rw v4ur:outgoing-interface? | | +--rw v4ur:outgoing-interface?
| +--:(nexthop-list) {rt:advanced-router}? | +--:(nexthop-list) {rt:multipath-routes}?
| +--rw v4ur:nexthop* [id] | +--rw v4ur:nexthop* [id]
| +--rw v4ur:id | +--rw v4ur:id
| +--rw v4ur:address? | +--rw v4ur:address?
| +--rw v4ur:outgoing-interface? | +--rw v4ur:outgoing-interface?
| +--rw v4ur:priority? | +--rw v4ur:priority?
| +--rw v4ur:weight? | +--rw v4ur:weight?
+--rw v6ur:ipv6 +--rw v6ur:ipv6
+--rw v6ur:route* [id] +--rw v6ur:route* [id]
+--rw v6ur:id +--rw v6ur:id
+--rw v6ur:description? +--rw v6ur:description?
+--rw v6ur:destination-prefix +--rw v6ur:destination-prefix
+--rw (nexthop-options) +--rw (nexthop-options)
+--:(special-nexthop) +--:(special-nexthop)
| +--rw v6ur:special-nexthop? | +--rw v6ur:special-nexthop?
+--:(simple-nexthop) +--:(simple-nexthop)
| +--rw v6ur:gateway? | +--rw v6ur:gateway?
| +--rw v6ur:outgoing-interface? | +--rw v6ur:outgoing-interface?
+--:(nexthop-list) {rt:advanced-router}? +--:(nexthop-list) {rt:multipath-routes}?
+--rw v6ur:nexthop* [id] +--rw v6ur:nexthop* [id]
+--rw v6ur:id +--rw v6ur:id
+--rw v6ur:address? +--rw v6ur:address?
+--rw v6ur:outgoing-interface? +--rw v6ur:outgoing-interface?
+--rw v6ur:priority? +--rw v6ur:priority?
+--rw v6ur:weight? +--rw v6ur:weight?
Figure 4: Structure of "static-routes" subtree. Figure 4: Structure of "static-routes" subtree.
5.4.2. Defining New Routing Protocols 5.4.2. Defining New Routing Protocols
skipping to change at page 22, line 35 skipping to change at page 21, line 35
under both "/routing" and "/routing-state". under both "/routing" and "/routing-state".
o Per-interface configuration, including activation of the routing o Per-interface configuration, including activation of the routing
protocol on individual interfaces, can use references to entries protocol on individual interfaces, can use references to entries
in the list of routing instance interfaces (rt:interface). in the list of routing instance interfaces (rt:interface).
By using the "when" statement, the augmented configuration parameters By using the "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 "rt:source-
protocol" is equal to the new protocol's identity. It is also protocol" is equal to the new protocol's identity. It is also
RECOMMENDED that the protocol-specific data be encapsulated in RECOMMENDED that protocol-specific data nodes be encapsulated in
appropriately named containers. appropriately named containers.
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 B. RIP routing protocol in Appendix B.
5.5. Route Filter 5.5. Route Filter
The core routing data model provides a skeleton for defining route The core routing data model provides a skeleton for defining route
filters that can be used to restrict the set of routes being filters that can be used to restrict the set of routes being
exchanged between a routing protocol instance and a connected RIB, or exchanged between a routing protocol instance and a connected RIB, or
skipping to change at page 23, line 26 skipping to change at page 22, line 26
will be developed separately. will be developed separately.
Each route filter is identified by a unique name. Its type MUST be Each route filter is identified by a unique name. Its type MUST be
specified by the "type" identity reference - this opens the space for specified by the "type" identity reference - this opens the space for
multiple route filtering framework implementations. multiple route filtering framework implementations.
5.6. RPC Operations 5.6. RPC Operations
The "ietf-routing" module defines two RPC operations: The "ietf-routing" module defines two RPC operations:
o active-route: query the routing system for the active route(s) o active-route: query the routing system for the active route that
that are currently used for sending datagrams to a destination is currently used for sending datagrams to a destination host
host whose address is passed as an input parameter. whose address is passed as an input parameter.
o route-count: retrieve the total number of entries in a RIB. o route-count: retrieve the total number of entries in a RIB.
6. Interactions with Other YANG Modules 6. Interactions with Other YANG Modules
The semantics of the core routing data model also depend on several The semantics of the core routing data model also depend 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"
skipping to change at page 26, line 11 skipping to change at page 25, line 11
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 YANG Module 7. Routing YANG Module
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number and all occurrences of the revision date below with actual RFC number and all occurrences of the revision date below with
the date of RFC publication (and remove this note). the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-routing@2013-10-18.yang" <CODE BEGINS> file "ietf-routing@2013-11-07.yang"
module ietf-routing { module ietf-routing {
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 {
prefix "yang"; prefix "yang";
} }
skipping to change at page 27, line 13 skipping to change at page 26, line 13
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
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices. RFC itself for full legal notices.
"; ";
revision 2013-10-18 { revision 2013-11-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC XXXX: A YANG Data Model for Routing Management";
} }
/* Features */ /* Features */
feature advanced-router { feature multiple-ribs {
description description
"This feature indicates that the device supports advanced "This feature indicates that the device supports multiple RIBS
routing functions, namely: per address family, and the framework for passing routes
between RIBs, or between routing protocols and RIBs.
- user-defined RIBs,
- multi-path routes.
Devices that do not support this feature MUST provide exactly Devices that do not support this feature MUST provide exactly
one system-controlled RIB per supported address family. These one system-controlled RIB per supported address family. These
RIBs then appear as entries of the list RIBs then appear as entries of the list
/routing-state/ribs/rib. /routing-state/ribs/rib.
"; ";
} }
feature multipath-routes {
description
"This feature indicates that the device supports multipath
routes that have a list of nexthops.";
}
/* 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.";
} }
identity ipv4 { identity ipv4 {
base address-family; base address-family;
skipping to change at page 30, line 39 skipping to change at page 29, line 42
leaf address-family { leaf address-family {
type identityref { type identityref {
base address-family; base address-family;
} }
mandatory "true"; mandatory "true";
description description
"Address family."; "Address family.";
} }
} }
grouping state-entry-id {
description
"This grouping defines a unique identifier of entries in
several operational state lists.";
leaf id {
type uint64 {
range "1..max";
}
description
"Unique numerical identifier of a list entry in operational
state.";
}
}
grouping router-id { grouping router-id {
description description
"This grouping provides the definition of router ID."; "This grouping provides the definition of router ID.";
leaf router-id { leaf router-id {
type yang:dotted-quad; type yang:dotted-quad;
description description
"Router ID - 32-bit number in the form of a dotted quad."; "Router ID - 32-bit number in the form of a dotted quad.";
} }
} }
skipping to change at page 33, line 14 skipping to change at page 32, line 30
mandatory "true"; mandatory "true";
description description
"Options for expressing the nexthop in routes."; "Options for expressing the nexthop in routes.";
case special-nexthop { case special-nexthop {
uses special-nexthop; uses special-nexthop;
} }
case simple-nexthop { case simple-nexthop {
uses outgoing-interface; uses outgoing-interface;
} }
case nexthop-list { case nexthop-list {
if-feature advanced-router; if-feature multipath-routes;
list nexthop { list nexthop {
key "id"; unique "id";
description description
"An entry of a nexthop list."; "An entry of a nexthop list.";
leaf id { uses state-entry-id;
type uint64;
description
"A numeric identifier of the entry, assigned by the
server.";
}
uses outgoing-interface; uses outgoing-interface;
uses nexthop-classifiers; uses nexthop-classifiers;
} }
} }
} }
} }
grouping route-metadata { grouping route-metadata {
description description
"Route metadata."; "Route metadata.";
skipping to change at page 34, line 4 skipping to change at page 33, line 15
originated."; originated.";
} }
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.";
} }
} }
/* Operational state data */ /* Operational state data */
container routing-state { container routing-state {
config "false"; config "false";
description description
"Operational state of the routing subsystem."; "Operational state of the routing subsystem.";
list routing-instance { list routing-instance {
key "id"; key "name";
unique "id";
description description
"Each list entry is a container for operational state data of "Each list entry is a container for operational state data of
a routing instance. a routing instance.
An implementation MAY create one or more system-controlled An implementation MAY create one or more system-controlled
instances, other user-controlled instances MAY be created by instances, other user-controlled instances MAY be created by
configuration. configuration.
"; ";
leaf id {
type uint64;
description
"Unique numeric identifier of the routing instance.";
}
leaf name { leaf name {
type leafref { type string;
path "/routing/routing-instance/name";
}
description description
"The name of the routing instance assigned in the "The name of the routing instance.
corresponding configuration entry (if any).
"; ";
} }
uses state-entry-id;
leaf type { leaf type {
type identityref { type identityref {
base routing-instance-type; base routing-instance-type;
} }
default "rt:standard-routing-instance"; default "rt:standard-routing-instance";
description description
"The routing instance type, primarily intended for "The routing instance type, primarily intended for
discriminating among different types of logical routers, discriminating among different types of logical routers,
route virtualization, master-slave arrangements etc., route virtualization, master-slave arrangements etc.,
while keeping all routing instances in the same flat list. while keeping all routing instances in the same flat list.
skipping to change at page 36, line 24 skipping to change at page 35, line 31
} }
leaf type { leaf type {
type identityref { type identityref {
base routing-protocol; base routing-protocol;
} }
mandatory "true"; mandatory "true";
description description
"Type of the routing protocol."; "Type of the routing protocol.";
} }
container connected-ribs { container connected-ribs {
if-feature advanced-router; if-feature multiple-ribs;
description description
"Container for connected RIBs. "Container for connected RIBs.
"; ";
list connected-rib { list connected-rib {
key "rib-id"; key "rib-id";
description description
"List of RIBs to which the routing protocol instance "List of RIBs to which the routing protocol instance
is connected (at most one RIB per address family). is connected (at most one RIB per address family).
"; ";
leaf rib-id { leaf rib-id {
skipping to change at page 37, line 29 skipping to change at page 36, line 36
} }
} }
} }
} }
} }
} }
container ribs { container ribs {
description description
"Container for RIBs."; "Container for RIBs.";
list rib { list rib {
key "id"; key "name";
unique "id";
description description
"Each entry represents a RIB identified by the 'name' key. "Each entry represents a RIB identified by the 'name' key.
All routes in a RIB MUST belong to the same address All routes in a RIB MUST belong to the same address
family. family.
The server MUST create the default RIB for each address The server MUST create the default RIB for each address
family, and MAY create other RIBs. Additional RIBs MAY be family, and MAY create other RIBs. Additional RIBs MAY be
created in the configuration. created in the configuration.
"; ";
leaf id {
type uint64;
description
"Unique numeric identifier of the RIB instance.";
}
leaf name { leaf name {
type leafref { type string;
path "/routing/ribs/rib/name";
}
description description
"The name of the RIB assigned in the corresponding "The name of the RIB.";
configuration entry (if any).";
} }
uses state-entry-id;
uses address-family; uses address-family;
container routes { container routes {
description description
"Current contents of the RIB."; "Current contents of the RIB.";
list route { list route {
key "id"; unique "id";
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 id { uses state-entry-id;
type uint64 {
range "1..max";
}
description
"Unique numeric identifier of the route.";
}
uses nexthop-content; uses nexthop-content;
uses route-metadata; uses route-metadata;
} }
} }
container recipient-ribs { container recipient-ribs {
if-feature advanced-router; if-feature multiple-ribs;
description description
"Container for recipient RIBs."; "Container for recipient RIBs.";
list recipient-rib { list recipient-rib {
key "rib-id"; key "rib-id";
description description
"List of RIBs that receive routes from this RIB."; "List of RIBs that receive routes from this RIB.";
leaf rib-id { leaf rib-id {
type rib-state-ref; type rib-state-ref;
description description
"The name of the recipient RIB."; "The name of the recipient RIB.";
skipping to change at page 39, line 38 skipping to change at page 38, line 33
} }
} }
/* Configuration Data */ /* Configuration Data */
container routing { container routing {
description description
"Configuration parameters for the routing subsystem."; "Configuration parameters for the routing subsystem.";
list routing-instance { list routing-instance {
key "name"; key "name";
unique "routing-instance-id";
description description
"Configuration of a routing instance. "Configuration of a routing instance.
"; ";
leaf name { leaf name {
type string; type string;
description description
"The name of the configured routing instance."; "The name of the routing instance.
}
leaf routing-instance-id {
type uint64;
description
"Reference to a system-assigned numeric identifier of the
routing instance.
This leaf is essential for creating new configuration For system-controlled entries, the value of this leaf must
entries that refer to existing system-controlled routing be the same as the name of the corresponding entry in
instances. state data.
For user-controlled entries, an arbitrary name can be
used.
"; ";
} }
leaf type { leaf type {
type identityref { type identityref {
base routing-instance-type; base routing-instance-type;
} }
default "rt:standard-routing-instance"; default "rt:standard-routing-instance";
description description
"The type of the routing instance."; "The type of the routing instance.";
} }
skipping to change at page 40, line 39 skipping to change at page 39, line 29
uses router-id { uses router-id {
description description
"Configuration of the global router ID."; "Configuration of the global router ID.";
} }
leaf description { leaf description {
type string; type string;
description description
"Textual description of the routing instance."; "Textual description of the routing instance.";
} }
container default-ribs { container default-ribs {
if-feature advanced-router; if-feature multiple-ribs;
description description
"Configuration of the default RIBs used by the routing "Configuration of the default RIBs used by the routing
instance. instance.
The default RIB for an addressed family if by default The default RIB for an addressed family if by default
connected to all routing protocol instances supporting connected to all routing protocol instances supporting
that address family, and always receives direct routes. that address family, and always receives direct routes.
"; ";
list default-rib { list default-rib {
must "address-family=/routing/ribs/rib[name=current()/" must "address-family=/routing/ribs/rib[name=current()/"
skipping to change at page 42, line 30 skipping to change at page 41, line 21
leaf type { leaf type {
type identityref { type identityref {
base routing-protocol; base routing-protocol;
} }
mandatory "true"; mandatory "true";
description description
"Type of the routing protocol - an identity derived "Type of the routing protocol - an identity derived
from the 'routing-protocol' base identity."; from the 'routing-protocol' base identity.";
} }
container connected-ribs { container connected-ribs {
if-feature advanced-router; if-feature multiple-ribs;
description description
"Configuration of connected RIBs. "Configuration of connected RIBs.
"; ";
list connected-rib { list connected-rib {
must "not(/routing/ribs/rib[name=current()/" must "not(/routing/ribs/rib[name=current()/"
+ "preceding-sibling::connected-rib/" + "preceding-sibling::connected-rib/"
+ "name and address-family=/routing/ribs/" + "name and address-family=/routing/ribs/"
+ "rib[name=current()/name]/address-family])" { + "rib[name=current()/name]/address-family])" {
error-message error-message
"Duplicate address family for connected RIBs."; "Duplicate address family for connected RIBs.";
skipping to change at page 44, line 5 skipping to change at page 42, line 43
"; ";
} }
} }
} }
} }
container ribs { container ribs {
description description
"Configured RIBs."; "Configured RIBs.";
list rib { list rib {
key "name"; key "name";
unique "id";
description description
"Each entry represents a configured RIB identified by the "Each entry represents a configured RIB identified by the
'name' key. '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 define
additional user-controlled RIBs. additional user-controlled RIBs.
"; ";
leaf name { leaf name {
type string; type string;
description description
"The name of the RIB."; "The name of the RIB.
}
leaf id {
type uint64;
description
"System-assigned numeric identifier of the RIB instance.
This leaf is essential for creating new configuration For system-controlled entries, the value of this leaf
entries that refer to existing system-controlled RIBs. must be the same as the name of the corresponding entry
in state data.
For user-controlled entries, an arbitrary name can be
used.
"; ";
} }
uses address-family; uses address-family;
leaf description { leaf description {
type string; type string;
description description
"Textual description of the RIB."; "Textual description of the RIB.";
} }
container recipient-ribs { container recipient-ribs {
if-feature advanced-router; if-feature multiple-ribs;
description description
"Configuration of recipient RIBs."; "Configuration of recipient RIBs.";
list recipient-rib { list recipient-rib {
must "name != ../../name" { must "name != ../../name" {
error-message error-message
"Source and recipient RIBs are identical."; "Source and recipient RIBs are identical.";
description description
"A RIB MUST NOT appear among its recipient RIBs."; "A RIB MUST NOT appear among its recipient RIBs.";
} }
must "/routing/ribs/rib[name=current()/name]/" must "/routing/ribs/rib[name=current()/name]/"
skipping to change at page 48, line 11 skipping to change at page 47, line 11
} }
<CODE ENDS> <CODE ENDS>
8. IPv4 Unicast Routing YANG Module 8. IPv4 Unicast Routing YANG Module
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number and all occurrences of the revision date below with actual RFC number and all occurrences of the revision date below with
the date of RFC publication (and remove this note). the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-10-18.yang" <CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-11-07.yang"
module ietf-ipv4-unicast-routing { module ietf-ipv4-unicast-routing {
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";
} }
skipping to change at page 49, line 14 skipping to change at page 48, line 14
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
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices. RFC itself for full legal notices.
"; ";
revision 2013-10-18 { revision 2013-11-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC XXXX: A YANG Data Model for Routing Management";
} }
/* Identities */ /* Identities */
identity ipv4-unicast { identity ipv4-unicast {
base rt:ipv4; base rt:ipv4;
skipping to change at page 51, line 47 skipping to change at page 50, line 47
} }
description description
"Name of the outgoing interface. "Name of the outgoing interface.
Only interfaces configured for the parent routing Only interfaces configured for the parent routing
instance can be given. instance can be given.
"; ";
} }
} }
case nexthop-list { case nexthop-list {
if-feature rt:advanced-router; if-feature rt:multipath-routes;
list nexthop { list nexthop {
key "id"; key "id";
description description
"An entry of a nexthop list."; "An entry of a nexthop list.";
leaf id { leaf id {
type uint32; type uint32;
description description
"Unique numeric identifier of the entry. "Unique numeric identifier of the entry.
This value is unrelated to system-assigned keys of This value is unrelated to system-assigned keys of
skipping to change at page 53, line 44 skipping to change at page 52, line 44
"IPv4 address of the gateway."; "IPv4 address of the gateway.";
} }
} }
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/"
+ "rt:nexthop-list/rt:nexthop" { + "rt:nexthop-list/rt:nexthop" {
when "../rt:address-family='v4ur:ipv4-unicast'" { when "../rt:address-family='v4ur:ipv4-unicast'" {
description description
"This augment is valid only for IPv4 unicast."; "This augment is valid only for IPv4 unicast.";
} }
if-feature rt:advanced-router; if-feature rt:multipath-routes;
description description
"This leaf augments the 'nexthop-list' case in the reply to the "This leaf augments the 'nexthop-list' case in the reply to the
'rt:active-route' operation."; 'rt:active-route' operation.";
leaf address { leaf address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address of the nexthop."; "IPv4 address of the nexthop.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
9. IPv6 Unicast Routing YANG Module 9. IPv6 Unicast Routing YANG Module
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number and all occurrences of the revision date below with actual RFC number and all occurrences of the revision date below with
the date of RFC publication (and remove this note). the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-10-18.yang" <CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-11-07.yang"
module ietf-ipv6-unicast-routing { module ietf-ipv6-unicast-routing {
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";
} }
skipping to change at page 56, line 22 skipping to change at page 55, line 22
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
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices. RFC itself for full legal notices.
"; ";
revision 2013-10-18 { revision 2013-11-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Management"; "RFC XXXX: A YANG Data Model for Routing Management";
} }
/* Identities */ /* Identities */
identity ipv6-unicast { identity ipv6-unicast {
base rt:ipv6; base rt:ipv6;
skipping to change at page 67, line 44 skipping to change at page 66, line 44
} }
description description
"Name of the outgoing interface. "Name of the outgoing interface.
Only interfaces configured for the parent routing Only interfaces configured for the parent routing
instance can be given. instance can be given.
"; ";
} }
} }
case nexthop-list { case nexthop-list {
if-feature rt:advanced-router; if-feature rt:multipath-routes;
list nexthop { list nexthop {
key "id"; key "id";
description description
"An entry of a nexthop list."; "An entry of a nexthop list.";
leaf id { leaf id {
type uint32; type uint32;
description description
"Unique numeric identifier of the entry. "Unique numeric identifier of the entry.
This value is unrelated to system-assigned keys of This value is unrelated to system-assigned keys of
skipping to change at page 69, line 39 skipping to change at page 68, line 39
"IPv6 address of the gateway."; "IPv6 address of the gateway.";
} }
} }
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/"
+ "rt:nexthop-list/rt:nexthop" { + "rt:nexthop-list/rt:nexthop" {
when "../rt:address-family='v6ur:ipv6-unicast'" { when "../rt:address-family='v6ur:ipv6-unicast'" {
description description
"This augment is valid only for IPv6 unicast."; "This augment is valid only for IPv6 unicast.";
} }
if-feature rt:advanced-router; if-feature rt:multipath-routes;
description description
"This leaf augments the 'nexthop-list' case in the reply to the "This leaf augments the 'nexthop-list' case in the reply to the
'rt:active-route' operation."; 'rt:active-route' operation.";
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 address of the nexthop."; "IPv6 address of the nexthop.";
} }
} }
} }
skipping to change at page 73, line 8 skipping to change at page 72, line 8
device. device.
Unauthorized 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 12. Acknowledgments
The author wishes to thank Nitin Bahadur, Martin Bjorklund, The author wishes to thank Nitin Bahadur, Martin Bjorklund,
Joel Halpern, Wes Hardaker, Sriganesh Kini, Andrew McGregor, Joel Halpern, Wes Hardaker, Sriganesh Kini, David Lamparter,
Jan Medved, Xiang Li, Thomas Morin, Tom Petch, Bruno Rijsman, Andrew McGregor, Jan Medved, Xiang Li, Thomas Morin, Tom Petch,
Juergen Schoenwaelder, Phil Shafer, Dave Thaler and Yi Yang for their Bruno Rijsman, Juergen Schoenwaelder, Phil Shafer, Dave Thaler and
helpful comments and suggestions. Yi Yang for their helpful comments and suggestions.
13. References 13. References
13.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, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
January 2004. January 2004.
skipping to change at page 74, line 31 skipping to change at page 73, line 31
September 2010. September 2010.
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A.
Bierman, "NETCONF Configuration Protocol", RFC 6241, Bierman, "NETCONF Configuration Protocol", RFC 6241,
June 2011. June 2011.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, July 2013. RFC 6991, July 2013.
[YANG-IF] Bjorklund, M., "A YANG Data Model for Interface [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface
Management", draft-ietf-netmod-interfaces-cfg-12 (work in Management", draft-ietf-netmod-interfaces-cfg-13 (work in
progress), July 2013. progress), November 2013.
[YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management",
draft-ietf-netmod-ip-cfg-10 (work in progress), draft-ietf-netmod-ip-cfg-11 (work in progress),
August 2013. October 2013.
13.2. Informative References 13.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, January 2011. Data Model Documents", RFC 6087, January 2011.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, June 2011. Shell (SSH)", RFC 6242, June 2011.
Appendix A. The Complete Data Trees Appendix A. The Complete Data Trees
skipping to change at page 75, line 18 skipping to change at page 74, line 18
state data trees of the core routing data model. state data trees of the core routing data model.
See Section 2.2 for an explanation of the symbols used. Data type of See Section 2.2 for an explanation of the symbols used. Data type of
every leaf node is shown near the right end of the corresponding every leaf node is shown near the right end of the corresponding
line. line.
A.1. Configuration Data A.1. Configuration Data
+--rw routing +--rw routing
+--rw routing-instance* [name] +--rw routing-instance* [name]
| +--rw name string | +--rw name string
| +--rw routing-instance-id? uint64 | +--rw type? identityref
| +--rw type? identityref | +--rw enabled? boolean
| +--rw enabled? boolean | +--rw router-id? yang:dotted-quad
| +--rw router-id? yang:dotted-quad | +--rw description? string
| +--rw description? string | +--rw default-ribs {multiple-ribs}?
| +--rw default-ribs {advanced-router}?
| | +--rw default-rib* [address-family] | | +--rw default-rib* [address-family]
| | +--rw address-family identityref | | +--rw address-family identityref
| | +--rw name string | | +--rw name string
| +--rw interfaces | +--rw interfaces
| | +--rw interface* [name] | | +--rw interface* [name]
| | +--rw name if:interface-ref | | +--rw name if:interface-ref
| | +--rw v6ur:ipv6-router-advertisements | | +--rw v6ur:ipv6-router-advertisements
| | +--rw v6ur:send-advertisements? boolean | | +--rw v6ur:send-advertisements? boolean
| | +--rw v6ur:max-rtr-adv-interval? uint16 | | +--rw v6ur:max-rtr-adv-interval? uint16
| | +--rw v6ur:min-rtr-adv-interval? uint16 | | +--rw v6ur:min-rtr-adv-interval? uint16
| | +--rw v6ur:managed-flag? boolean | | +--rw v6ur:managed-flag? boolean
| | +--rw v6ur:other-config-flag? boolean | | +--rw v6ur:other-config-flag? boolean
| | +--rw v6ur:link-mtu? uint32 | | +--rw v6ur:link-mtu? uint32
| | +--rw v6ur:reachable-time? uint32 | | +--rw v6ur:reachable-time? uint32
| | +--rw v6ur:retrans-timer? uint32 | | +--rw v6ur:retrans-timer? uint32
| | +--rw v6ur:cur-hop-limit? uint8 | | +--rw v6ur:cur-hop-limit? uint8
skipping to change at page 76, line 10 skipping to change at page 75, line 9
| | +--rw v6ur:valid-lifetime? uint32 | | +--rw v6ur:valid-lifetime? uint32
| | +--rw v6ur:on-link-flag? boolean | | +--rw v6ur:on-link-flag? boolean
| | +--rw v6ur:preferred-lifetime? uint32 | | +--rw v6ur:preferred-lifetime? uint32
| | +--rw v6ur:autonomous-flag? boolean | | +--rw v6ur:autonomous-flag? boolean
| +--rw routing-protocols | +--rw routing-protocols
| +--rw routing-protocol* [name] | +--rw routing-protocol* [name]
| +--rw name string | +--rw name string
| +--rw description? string | +--rw description? string
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw type identityref | +--rw type identityref
| +--rw connected-ribs {advanced-router}? | +--rw connected-ribs {multiple-ribs}?
| | +--rw connected-rib* [rib-name] | | +--rw connected-rib* [rib-name]
| | +--rw rib-name rib-ref | | +--rw rib-name rib-ref
| | +--rw import-filter? route-filter-ref | | +--rw import-filter? route-filter-ref
| | +--rw export-filter? route-filter-ref | | +--rw export-filter? route-filter-ref
| +--rw static-routes | +--rw static-routes
| +--rw v4ur:ipv4 | +--rw v4ur:ipv4
| | +--rw v4ur:route* [id] | | +--rw v4ur:route* [id]
| | +--rw v4ur:id uint32 | | +--rw v4ur:id uint32
| | +--rw v4ur:description? string | | +--rw v4ur:description? string
| | +--rw v4ur:destination-prefix inet:ipv4-prefix | | +--rw v4ur:destination-prefix inet:ipv4-prefix
| | +--rw (nexthop-options) | | +--rw (nexthop-options)
| | +--:(special-nexthop) | | +--:(special-nexthop)
| | | +--rw v4ur:special-nexthop? enumeration | | | +--rw v4ur:special-nexthop? enumeration
| | +--:(simple-nexthop) | | +--:(simple-nexthop)
| | | +--rw v4ur:gateway? inet:ipv4-address | | | +--rw v4ur:gateway? inet:ipv4-address
| | | +--rw v4ur:outgoing-interface? leafref | | | +--rw v4ur:outgoing-interface? leafref
| | +--:(nexthop-list) {rt:advanced-router}? | | +--:(nexthop-list) {rt:multipath-routes}?
| | +--rw v4ur:nexthop* [id] | | +--rw v4ur:nexthop* [id]
| | +--rw v4ur:id uint32 | | +--rw v4ur:id uint32
| | +--rw v4ur:address? inet:ipv4-address | | +--rw v4ur:address? inet:ipv4-address
| | +--rw v4ur:outgoing-interface? leafref | | +--rw v4ur:outgoing-interface? leafref
| | +--rw v4ur:priority? enumeration | | +--rw v4ur:priority? enumeration
| | +--rw v4ur:weight? uint8 | | +--rw v4ur:weight? uint8
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6
| +--rw v6ur:route* [id] | +--rw v6ur:route* [id]
| +--rw v6ur:id uint32 | +--rw v6ur:id uint32
| +--rw v6ur:description? string | +--rw v6ur:description? string
| +--rw v6ur:destination-prefix inet:ipv6-prefix | +--rw v6ur:destination-prefix inet:ipv6-prefix
| +--rw (nexthop-options) | +--rw (nexthop-options)
| +--:(special-nexthop) | +--:(special-nexthop)
| | +--rw v6ur:special-nexthop? enumeration | | +--rw v6ur:special-nexthop? enumeration
| +--:(simple-nexthop) | +--:(simple-nexthop)
| | +--rw v6ur:gateway? inet:ipv6-address | | +--rw v6ur:gateway? inet:ipv6-address
| | +--rw v6ur:outgoing-interface? leafref | | +--rw v6ur:outgoing-interface? leafref
| +--:(nexthop-list) {rt:advanced-router}? | +--:(nexthop-list) {rt:multipath-routes}?
| +--rw v6ur:nexthop* [id] | +--rw v6ur:nexthop* [id]
| +--rw v6ur:id uint32 | +--rw v6ur:id uint32
| +--rw v6ur:address? inet:ipv6-address | +--rw v6ur:address? inet:ipv6-address
| +--rw v6ur:outgoing-interface? leafref | +--rw v6ur:outgoing-interface? leafref
| +--rw v6ur:priority? enumeration | +--rw v6ur:priority? enumeration
| +--rw v6ur:weight? uint8 | +--rw v6ur:weight? uint8
+--rw ribs +--rw ribs
| +--rw rib* [name] | +--rw rib* [name]
| +--rw name string | +--rw name string
| +--rw id? uint64
| +--rw address-family identityref | +--rw address-family identityref
| +--rw description? string | +--rw description? string
| +--rw recipient-ribs {advanced-router}? | +--rw recipient-ribs {multiple-ribs}?
| +--rw recipient-rib* [rib-name] | +--rw recipient-rib* [rib-name]
| +--rw rib-name rib-ref | +--rw rib-name rib-ref
| +--rw filter? route-filter-ref | +--rw filter? route-filter-ref
+--rw route-filters +--rw route-filters
+--rw route-filter* [name] +--rw route-filter* [name]
+--rw name string +--rw name string
+--rw description? string +--rw description? string
+--rw type identityref +--rw type identityref
A.2. Operational State Data A.2. Operational State Data
+--ro routing-state +--ro routing-state
+--ro routing-instance* [id] +--ro routing-instance* [name]
| +--ro id uint64 | +--ro name string
| +--ro name? leafref | +--ro id? uint64
| +--ro type? identityref | +--ro type? identityref
| +--ro router-id? yang:dotted-quad | +--ro router-id? yang:dotted-quad
| +--ro default-ribs | +--ro default-ribs
| | +--ro default-rib* [address-family] | | +--ro default-rib* [address-family]
| | +--ro address-family identityref | | +--ro address-family identityref
| | +--ro rib-id rib-state-ref | | +--ro rib-id rib-state-ref
| +--ro interfaces | +--ro interfaces
| | +--ro interface* [name] | | +--ro interface* [name]
| | +--ro name if:interface-state-ref | | +--ro name if:interface-state-ref
| | +--ro v6ur:ipv6-router-advertisements | | +--ro v6ur:ipv6-router-advertisements
skipping to change at page 77, line 48 skipping to change at page 76, line 46
| | +--ro v6ur:min-rtr-adv-interval? uint16 | | +--ro v6ur:min-rtr-adv-interval? uint16
| | +--ro v6ur:managed-flag? boolean | | +--ro v6ur:managed-flag? boolean
| | +--ro v6ur:other-config-flag? boolean | | +--ro v6ur:other-config-flag? boolean
| | +--ro v6ur:link-mtu? uint32 | | +--ro v6ur:link-mtu? uint32
| | +--ro v6ur:reachable-time? uint32 | | +--ro v6ur:reachable-time? uint32
| | +--ro v6ur:retrans-timer? uint32 | | +--ro v6ur:retrans-timer? uint32
| | +--ro v6ur:cur-hop-limit? uint8 | | +--ro v6ur:cur-hop-limit? uint8
| | +--ro v6ur:default-lifetime? uint16 | | +--ro v6ur:default-lifetime? uint16
| | +--ro v6ur:prefix-list | | +--ro v6ur:prefix-list
| | +--ro v6ur:prefix* [prefix-spec] | | +--ro v6ur:prefix* [prefix-spec]
| | +--ro v6ur:prefix-spec inet:ipv6-prefix | | +--ro v6ur:prefix-spec inet:ipv6-prefix
| | +--ro v6ur:valid-lifetime? uint32 | | +--ro v6ur:valid-lifetime? uint32
| | +--ro v6ur:on-link-flag? boolean | | +--ro v6ur:on-link-flag? boolean
| | +--ro v6ur:preferred-lifetime? uint32 | | +--ro v6ur:preferred-lifetime? uint32
| | +--ro v6ur:autonomous-flag? boolean | | +--ro v6ur:autonomous-flag? boolean
| +--ro routing-protocols | +--ro routing-protocols
| +--ro routing-protocol* [name] | +--ro routing-protocol* [name]
| +--ro name string | +--ro name string
| +--ro type identityref | +--ro type identityref
| +--ro connected-ribs {advanced-router}? | +--ro connected-ribs {multiple-ribs}?
| +--ro connected-rib* [rib-id] | +--ro connected-rib* [rib-id]
| +--ro rib-id rib-state-ref | +--ro rib-id rib-state-ref
| +--ro import-filter? route-filter-state-ref | +--ro import-filter? route-filter-state-ref
| +--ro export-filter? route-filter-state-ref | +--ro export-filter? route-filter-state-ref
+--ro ribs +--ro ribs
| +--ro rib* [id] | +--ro rib* [name]
| +--ro id uint64 | +--ro name string
| +--ro name? leafref | +--ro id? uint64
| +--ro address-family identityref | +--ro address-family identityref
| +--ro routes | +--ro routes
| | +--ro route* [id] | | +--ro route*
| | +--ro id uint64 | | +--ro id? uint64
| | +--ro (nexthop-options) | | +--ro (nexthop-options)
| | | +--:(special-nexthop) | | | +--:(special-nexthop)
| | | | +--ro special-nexthop? enumeration | | | | +--ro special-nexthop? enumeration
| | | +--:(simple-nexthop) | | | +--:(simple-nexthop)
| | | | +--ro outgoing-interface? leafref | | | | +--ro outgoing-interface? leafref
| | | | +--ro v4ur:gateway? inet:ipv4-address | | | | +--ro v4ur:gateway? inet:ipv4-address
| | | | +--ro v6ur:gateway? inet:ipv6-address | | | | +--ro v6ur:gateway? inet:ipv6-address
| | | +--:(nexthop-list) {advanced-router}? | | | +--:(nexthop-list) {multipath-routes}?
| | | +--ro nexthop* [id] | | | +--ro nexthop*
| | | +--ro id uint64 | | | +--ro id? uint64
| | | +--ro outgoing-interface? leafref | | | +--ro outgoing-interface? leafref
| | | +--ro priority? enumeration | | | +--ro priority? enumeration
| | | +--ro weight? uint8 | | | +--ro weight? uint8
| | | +--ro v4ur:address? inet:ipv4-address | | | +--ro v4ur:address? inet:ipv4-address
| | | +--ro v6ur:address? inet:ipv6-address | | | +--ro v6ur:address? inet:ipv6-address
| | +--ro source-protocol identityref | | +--ro source-protocol identityref
| | +--ro last-updated? yang:date-and-time | | +--ro last-updated? yang:date-and-time
| | +--ro v4ur:destination-prefix? inet:ipv4-prefix | | +--ro v4ur:destination-prefix? inet:ipv4-prefix
| | +--ro v6ur:destination-prefix? inet:ipv6-prefix | | +--ro v6ur:destination-prefix? inet:ipv6-prefix
| +--ro recipient-ribs {advanced-router}? | +--ro recipient-ribs {multiple-ribs}?
| +--ro recipient-rib* [rib-id] | +--ro recipient-rib* [rib-id]
| +--ro rib-id rib-state-ref | +--ro rib-id rib-state-ref
| +--ro filter? route-filter-state-ref | +--ro filter? route-filter-state-ref
+--ro route-filters +--ro route-filters
+--ro route-filter* [name] +--ro route-filter* [name]
+--ro name string +--ro name string
+--ro type identityref +--ro type identityref
Appendix B. Example: Adding a New Routing Protocol Appendix B. Example: Adding a New Routing Protocol
skipping to change at page 82, line 51 skipping to change at page 81, line 51
+--------+--------+ +--------+--------+
eth1|198.51.100.1 eth1|198.51.100.1
|2001:db8:0:2::1 |2001:db8:0:2::1
| |
Figure 5: Example network configuration Figure 5: Example network configuration
A reply to the NETCONF <get> message sent by router "A" would then be A reply to the NETCONF <get> message sent by router "A" would then be
as follows: as follows:
<?xml version="1.0"?> <?xml version="1.0"?>
<rpc-reply <rpc-reply
message-id="101" message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"
xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"
xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip" xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip"
xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing">
<data> <data>
<if:interfaces> <if:interfaces>
<if:interface> <if:interface>
<if:name>eth0</if:name> <if:name>eth0</if:name>
<if:type>ethernetCsmacd</if:type> <if:type>ethernetCsmacd</if:type>
<if:description> <if:description>
Uplink to ISP. Uplink to ISP.
</if:description> </if:description>
<ip:ipv4> <ip:ipv4>
<ip:address> <ip:address>
<ip:ip>192.0.2.1</ip:ip> <ip:ip>192.0.2.1</ip:ip>
<ip:prefix-length>24</ip:prefix-length> <ip:prefix-length>24</ip:prefix-length>
</ip:address> </ip:address>
<ip:forwarding>true</ip:forwarding> <ip:forwarding>true</ip:forwarding>
</ip:ipv4> </ip:ipv4>
<ip:ipv6> <ip:ipv6>
<ip:address> <ip:address>
<ip:ip>2001:0db8:0:1::1</ip:ip> <ip:ip>2001:0db8:0:1::1</ip:ip>
<ip:prefix-length>64</ip:prefix-length> <ip:prefix-length>64</ip:prefix-length>
</ip:address> </ip:address>
<ip:forwarding>true</ip:forwarding> <ip:forwarding>true</ip:forwarding>
<ip:autoconf> <ip:autoconf>
<ip:create-global-addresses>false</ip:create-global-addresses> <ip:create-global-addresses>false</ip:create-global-addresses>
</ip:autoconf> </ip:autoconf>
</ip:ipv6> </ip:ipv6>
</if:interface> </if:interface>
<if:interface> <if:interface>
<if:name>eth1</if:name> <if:name>eth1</if:name>
<if:type>ethernetCsmacd</if:type> <if:type>ethernetCsmacd</if:type>
<if:description> <if:description>
Interface to the internal network. Interface to the internal network.
</if:description> </if:description>
<ip:ipv4> <ip:ipv4>
<ip:address> <ip:address>
<ip:ip>198.51.100.1</ip:ip> <ip:ip>198.51.100.1</ip:ip>
<ip:prefix-length>24</ip:prefix-length> <ip:prefix-length>24</ip:prefix-length>
</ip:address> </ip:address>
<ip:forwarding>true</ip:forwarding> <ip:forwarding>true</ip:forwarding>
</ip:ipv4> </ip:ipv4>
<ip:ipv6> <ip:ipv6>
<ip:address> <ip:address>
<ip:ip>2001:0db8:0:2::1</ip:ip> <ip:ip>2001:0db8:0:2::1</ip:ip>
<ip:prefix-length>64</ip:prefix-length> <ip:prefix-length>64</ip:prefix-length>
</ip:address> </ip:address>
<ip:forwarding>true</ip:forwarding> <ip:forwarding>true</ip:forwarding>
<ip:autoconf> <ip:autoconf>
<ip:create-global-addresses>false</ip:create-global-addresses> <ip:create-global-addresses>false</ip:create-global-addresses>
</ip:autoconf> </ip:autoconf>
</ip:ipv6> </ip:ipv6>
</if:interface> </if:interface>
</if:interfaces> </if:interfaces>
<if:interfaces-state> <if:interfaces-state>
<if:interface> <if:interface>
<if:name>eth0</if:name> <if:name>eth0</if:name>
<if:type>ethernetCsmacd</if:type> <if:type>ethernetCsmacd</if:type>
<if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address>
<if:oper-status>up</if:oper-status> <if:oper-status>up</if:oper-status>
<if:statistics> <if:statistics>
<if:discontinuity-time> <if:discontinuity-time>
2013-07-02T17:11:27+00:58 2013-07-02T17:11:27+00:58
</if:discontinuity-time> </if:discontinuity-time>
</if:statistics> </if:statistics>
</if:interface> </if:interface>
<if:interface> <if:interface>
<if:name>eth1</if:name> <if:name>eth1</if:name>
<if:type>ethernetCsmacd</if:type> <if:type>ethernetCsmacd</if:type>
<if:oper-status>up</if:oper-status> <if:oper-status>up</if:oper-status>
<if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address>
<if:statistics> <if:statistics>
<if:discontinuity-time> <if:discontinuity-time>
2013-07-02T17:11:27+00:59 2013-07-02T17:11:27+00:59
</if:discontinuity-time> </if:discontinuity-time>
</if:statistics> </if:statistics>
</if:interface> </if:interface>
</if:interfaces-state> </if:interfaces-state>
<rt:routing> <rt:routing>
<rt:routing-instance> <rt:routing-instance>
<rt:name>rtr0</rt:name> <rt:name>rtr0</rt:name>
<rt:routing-instance-id>1415926535</rt:routing-instance-id> <rt:description>Router A</rt:description>
<rt:description>Router A</rt:description> <rt:interfaces>
<rt:interfaces> <rt:interface>
<rt:interface> <rt:name>eth1</rt:name>
<rt:name>eth1</rt:name> <v6ur:ipv6-router-advertisements>
<v6ur:ipv6-router-advertisements> <v6ur:send-advertisements>true</v6ur:send-advertisements>
<v6ur:send-advertisements>true</v6ur:send-advertisements> <v6ur:prefix-list>
<v6ur:prefix-list> <v6ur:prefix>
<v6ur:prefix> <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec>
<v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> </v6ur:prefix>
</v6ur:prefix> </v6ur:prefix-list>
</v6ur:prefix-list> </v6ur:ipv6-router-advertisements>
</v6ur:ipv6-router-advertisements> </rt:interface>
</rt:interface> </rt:interfaces>
</rt:interfaces> <rt:routing-protocols>
<rt:routing-protocols> <rt:routing-protocol>
<rt:routing-protocol> <rt:name>st0</rt:name>
<rt:name>st0</rt:name> <rt:description>
<rt:description> Static routing is used for the internal network.
Static routing is used for the internal network. </rt:description>
</rt:description> <rt:type>rt:static</rt:type>
<rt:type>rt:static</rt:type> <rt:static-routes>
<rt:static-routes> <v4ur:ipv4>
<v4ur:ipv4> <v4ur:route>
<v4ur:route> <v4ur:id>1</v4ur:id>
<v4ur:id>1</v4ur:id> <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix>
<v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> <v4ur:gateway>192.0.2.2</v4ur:gateway>
<v4ur:gateway>192.0.2.2</v4ur:gateway> </v4ur:route>
</v4ur:route> </v4ur:ipv4>
</v4ur:ipv4> <v6ur:ipv6>
<v6ur:ipv6> <v6ur:route>
<v6ur:route> <v6ur:id>1</v6ur:id>
<v6ur:id>1</v6ur:id> <v6ur:destination-prefix>::/0</v6ur:destination-prefix>
<v6ur:destination-prefix>::/0</v6ur:destination-prefix> <v6ur:gateway>2001:db8:0:1::2</v6ur:gateway>
<v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> </v6ur:route>
</v6ur:route> </v6ur:ipv6>
</v6ur:ipv6> </rt:static-routes>
</rt:static-routes> </rt:routing-protocol>
</rt:routing-protocol> </rt:routing-protocols>
</rt:routing-protocols> </rt:routing-instance>
</rt:routing-instance> </rt:routing>
</rt:routing> <rt:routing-state>
<rt:routing-state> <rt:routing-instance>
<rt:routing-instance> <rt:name>rtr0</rt:name>
<rt:id>1415926535</rt:id> <rt:router-id>192.0.2.1</rt:router-id>
<rt:name>rtr0</rt:name> <rt:default-ribs>
<rt:router-id>192.0.2.1</rt:router-id> <rt:default-rib>
<rt:default-ribs>
<rt:default-rib>
<rt:address-family>v4ur:ipv4-unicast</rt:address-family>
<rt:rib-id>897932384</rt:rib-id>
</rt:default-rib>
<rt:default-rib>
<rt:address-family>v6ur:ipv6-unicast</rt:address-family>
<rt:rib-id>751058209</rt:rib-id>
</rt:default-rib>
</rt:default-ribs>
<rt:interfaces>
<rt:interface>
<rt:name>eth0</rt:name>
</rt:interface>
<rt:interface>
<rt:name>eth1</rt:name>
<v6ur:ipv6-router-advertisements>
<v6ur:send-advertisements>true</v6ur:send-advertisements>
<v6ur:prefix-list>
<v6ur:prefix>
<v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec>
</v6ur:prefix>
</v6ur:prefix-list>
</v6ur:ipv6-router-advertisements>
</rt:interface>
</rt:interfaces>
<rt:routing-protocols>
<rt:routing-protocol>
<rt:name>st0</rt:name>
<rt:type>rt:static</rt:type>
</rt:routing-protocol>
</rt:routing-protocols>
</rt:routing-instance>
<rt:ribs>
<rt:rib>
<rt:id>897932384</rt:id>
<rt:address-family>v4ur:ipv4-unicast</rt:address-family> <rt:address-family>v4ur:ipv4-unicast</rt:address-family>
<rt:routes> <rt:rib-id>897932384</rt:rib-id>
<rt:route> </rt:default-rib>
<rt:id>626433832</rt:id> <rt:default-rib>
<v4ur:destination-prefix>
192.0.2.1/24
</v4ur:destination-prefix>
<rt:outgoing-interface>eth0</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>795028841</rt:id>
<v4ur:destination-prefix>
198.51.100.0/24
</v4ur:destination-prefix>
<rt:outgoing-interface>eth1</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>971693993</rt:id>
<v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix>
<rt:source-protocol>rt:static</rt:source-protocol>
<v4ur:gateway>192.0.2.2</v4ur:gateway>
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated>
</rt:route>
</rt:routes>
</rt:rib>
<rt:rib>
<rt:id>751058209</rt:id>
<rt:address-family>v6ur:ipv6-unicast</rt:address-family> <rt:address-family>v6ur:ipv6-unicast</rt:address-family>
<rt:routes> <rt:rib-id>751058209</rt:rib-id>
<rt:route> </rt:default-rib>
<rt:id>749445923</rt:id> </rt:default-ribs>
<v6ur:destination-prefix> <rt:interfaces>
2001:db8:0:1::/64 <rt:interface>
</v6ur:destination-prefix> <rt:name>eth0</rt:name>
<rt:outgoing-interface>eth0</rt:outgoing-interface> </rt:interface>
<rt:source-protocol>rt:direct</rt:source-protocol> <rt:interface>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> <rt:name>eth1</rt:name>
</rt:route> <v6ur:ipv6-router-advertisements>
<rt:route> <v6ur:send-advertisements>true</v6ur:send-advertisements>
<rt:id>78164062</rt:id> <v6ur:prefix-list>
<v6ur:destination-prefix> <v6ur:prefix>
2001:db8:0:2::/64 <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec>
</v6ur:destination-prefix> </v6ur:prefix>
<rt:outgoing-interface>eth1</rt:outgoing-interface> </v6ur:prefix-list>
<rt:source-protocol>rt:direct</rt:source-protocol> </v6ur:ipv6-router-advertisements>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> </rt:interface>
</rt:route> </rt:interfaces>
<rt:route> <rt:routing-protocols>
<rt:id>862089986</rt:id> <rt:routing-protocol>
<v6ur:destination-prefix>::/0</v6ur:destination-prefix> <rt:name>st0</rt:name>
<v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> <rt:type>rt:static</rt:type>
<rt:source-protocol>rt:static</rt:source-protocol> </rt:routing-protocol>
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> </rt:routing-protocols>
</rt:route> </rt:routing-instance>
</rt:routes> <rt:ribs>
</rt:rib> <rt:rib>
</rt:ribs> <rt:name>ipv4-main</rt:name>
</rt:routing-state> <rt:id>897932384</rt:id>
</data> <rt:address-family>v4ur:ipv4-unicast</rt:address-family>
</rpc-reply> <rt:routes>
<rt:route>
<rt:id>626433832</rt:id>
<v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix>
<rt:outgoing-interface>eth0</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>795028841</rt:id>
<v4ur:destination-prefix>
198.51.100.0/24
</v4ur:destination-prefix>
<rt:outgoing-interface>eth1</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>971693993</rt:id>
<v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix>
<rt:source-protocol>rt:static</rt:source-protocol>
<v4ur:gateway>192.0.2.2</v4ur:gateway>
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated>
</rt:route>
</rt:routes>
</rt:rib>
<rt:rib>
<rt:name>ipv6-main</rt:name>
<rt:id>751058209</rt:id>
<rt:address-family>v6ur:ipv6-unicast</rt:address-family>
<rt:routes>
<rt:route>
<rt:id>749445923</rt:id>
<v6ur:destination-prefix>
2001:db8:0:1::/64
</v6ur:destination-prefix>
<rt:outgoing-interface>eth0</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>78164062</rt:id>
<v6ur:destination-prefix>
2001:db8:0:2::/64
</v6ur:destination-prefix>
<rt:outgoing-interface>eth1</rt:outgoing-interface>
<rt:source-protocol>rt:direct</rt:source-protocol>
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated>
</rt:route>
<rt:route>
<rt:id>862089986</rt:id>
<v6ur:destination-prefix>::/0</v6ur:destination-prefix>
<v6ur:gateway>2001:db8:0:1::2</v6ur:gateway>
<rt:source-protocol>rt:static</rt:source-protocol>
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated>
</rt:route>
</rt:routes>
</rt:rib>
</rt:ribs>
</rt:routing-state>
</data>
</rpc-reply>
Appendix D. Change Log Appendix D. Change Log
RFC Editor: remove this section upon publication as an RFC. RFC Editor: remove this section upon publication as an RFC.
D.1. Changes Between Versions -10 and -11 D.1. 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.
D.2. Changes Between Versions -10 and -11
o Migrated address families from IANA enumerations to identities. o Migrated address families from IANA enumerations to identities.
o Terminology and node names aligned with the I2RS RIB model: router o Terminology and node names aligned with the I2RS RIB model: router
-> routing instance, routing table -> RIB. -> routing instance, routing table -> RIB.
o Introduced uint64 keys for state lists: routing-instance, rib, o Introduced uint64 keys for state lists: routing-instance, rib,
route, nexthop. route, nexthop.
o Described the relationship between system-controlled and user- o Described the relationship between system-controlled and user-
skipping to change at page 88, line 33 skipping to change at page 87, line 46
router". router".
o Made nexthop into a choice in order to allow for nexthop-list o Made nexthop into a choice in order to allow for nexthop-list
(I2RS requirement). (I2RS requirement).
o Added nexthop-list with entries having priorities (backup) and o Added nexthop-list with entries having priorities (backup) and
weights (load balancing). weights (load balancing).
o Updated bibliography references. o Updated bibliography references.
D.2. Changes Between Versions -09 and -10 D.3. Changes Between Versions -09 and -10
o Added subtree for operational state data ("/routing-state"). o Added subtree for operational state data ("/routing-state").
o Terms "system-controlled entry" and "user-controlled entry" o Terms "system-controlled entry" and "user-controlled entry"
defined and used. defined and used.
o New feature "user-defined-routing-tables". Nodes that are useful o New feature "user-defined-routing-tables". Nodes that are useful
only with user-defined routing tables are now conditional. only with user-defined routing tables are now conditional.
o Added grouping "router-id". o Added grouping "router-id".
o In routing tables, "source-protocol" attribute of routes now o In routing tables, "source-protocol" attribute of routes now
reports only protocol type, and its datatype is "identityref". reports only protocol type, and its datatype is "identityref".
o Renamed "main-routing-table" to "default-routing-table". o Renamed "main-routing-table" to "default-routing-table".
D.3. Changes Between Versions -08 and -09 D.4. Changes Between Versions -08 and -09
o Fixed "must" expresion for "connected-routing-table". o Fixed "must" expresion for "connected-routing-table".
o Simplified "must" expression for "main-routing-table". o Simplified "must" expression for "main-routing-table".
o Moved per-interface configuration of a new routing protocol under o Moved per-interface configuration of a new routing protocol under
'routing-protocol'. This also affects the 'example-rip' module. 'routing-protocol'. This also affects the 'example-rip' module.
D.4. Changes Between Versions -07 and -08 D.5. Changes Between Versions -07 and -08
o Changed reference from RFC6021 to RFC6021bis. o Changed reference from RFC6021 to RFC6021bis.
D.5. Changes Between Versions -06 and -07 D.6. Changes Between Versions -06 and -07
o The contents of <get-reply> in Appendix C was updated: "eth[01]" o The contents of <get-reply> in Appendix C was updated: "eth[01]"
is used as the value of "location", and "forwarding" is on for is used as the value of "location", and "forwarding" is on for
both interfaces and both IPv4 and IPv6. both interfaces and both IPv4 and IPv6.
o The "must" expression for "main-routing-table" was modified to o The "must" expression for "main-routing-table" was modified to
avoid redundant error messages reporting address family mismatch avoid redundant error messages reporting address family mismatch
when "name" points to a non-existent routing table. when "name" points to a non-existent routing table.
o The default behavior for IPv6 RA prefix advertisements was o The default behavior for IPv6 RA prefix advertisements was
clarified. clarified.
o Changed type of "rt:router-id" to "ip:dotted-quad". o Changed type of "rt:router-id" to "ip:dotted-quad".
o Type of "rt:router-id" changed to "yang:dotted-quad". o Type of "rt:router-id" changed to "yang:dotted-quad".
o Fixed missing prefixes in XPath expressions. o Fixed missing prefixes in XPath expressions.
D.6. Changes Between Versions -05 and -06 D.7. Changes Between Versions -05 and -06
o Document title changed: "Configuration" was replaced by o Document title changed: "Configuration" was replaced by
"Management". "Management".
o New typedefs "routing-table-ref" and "route-filter-ref". o New typedefs "routing-table-ref" and "route-filter-ref".
o Double slashes "//" were removed from XPath expressions and o Double slashes "//" were removed from XPath expressions and
replaced with the single "/". replaced with the single "/".
o Removed uniqueness requirement for "router-id". o Removed uniqueness requirement for "router-id".
skipping to change at page 90, line 11 skipping to change at page 89, line 22
o Complete data tree is now in Appendix A. o Complete data tree is now in Appendix A.
o Changed type of "source-protocol" from "leafref" to "string". o Changed type of "source-protocol" from "leafref" to "string".
o Clarified the relationship between routing protocol instances and o Clarified the relationship between routing protocol instances and
connected routing tables. connected routing tables.
o Added a must constraint saying that a routing table connected to o Added a must constraint saying that a routing table connected to
the direct pseudo-protocol must not be a main routing table. the direct pseudo-protocol must not be a main routing table.
D.7. Changes Between Versions -04 and -05 D.8. Changes Between Versions -04 and -05
o Routing tables are now global, i.e., "routing-tables" is a child o Routing tables are now global, i.e., "routing-tables" is a child
of "routing" rather than "router". of "routing" rather than "router".
o "must" statement for "static-routes" changed to "when". o "must" statement for "static-routes" changed to "when".
o Added "main-routing-tables" containing references to main routing o Added "main-routing-tables" containing references to main routing
tables for each address family. tables for each address family.
o Removed the defaults for "address-family" and "safi" and made them o Removed the defaults for "address-family" and "safi" and made them
skipping to change at page 90, line 46 skipping to change at page 90, line 8
o The "direct" pseudo-protocol is always connected to main routing o The "direct" pseudo-protocol is always connected to main routing
tables. tables.
o Entries in the list of connected routing tables renamed from o Entries in the list of connected routing tables renamed from
"routing-table" to "connected-routing-table". "routing-table" to "connected-routing-table".
o Added "must" constraint saying that a routing table must not be o Added "must" constraint saying that a routing table must not be
its own recipient. its own recipient.
D.8. Changes Between Versions -03 and -04 D.9. Changes Between Versions -03 and -04
o Changed "error-tag" for both RPC methods from "missing element" to o Changed "error-tag" for both RPC methods from "missing element" to
"data-missing". "data-missing".
o Removed the decrementing behavior for advertised IPv6 prefix o Removed the decrementing behavior for advertised IPv6 prefix
parameters "valid-lifetime" and "preferred-lifetime". parameters "valid-lifetime" and "preferred-lifetime".
o Changed the key of the static route lists from "seqno" to "id" o Changed the key of the static route lists from "seqno" to "id"
because the routes needn't be sorted. because the routes needn't be sorted.
o Added 'must' constraint saying that "preferred-lifetime" must not o Added 'must' constraint saying that "preferred-lifetime" must not
be greater than "valid-lifetime". be greater than "valid-lifetime".
D.9. Changes Between Versions -02 and -03 D.10. Changes Between Versions -02 and -03
o Module "iana-afn-safi" moved to I-D "iana-if-type". o Module "iana-afn-safi" moved to I-D "iana-if-type".
o Removed forwarding table. o Removed forwarding table.
o RPC "get-route" changed to "active-route". Its output is a list o RPC "get-route" changed to "active-route". Its output is a list
of routes (for multi-path routing). of routes (for multi-path routing).
o New RPC "route-count". o New RPC "route-count".
skipping to change at page 91, line 43 skipping to change at page 91, line 7
"ietf-ip". "ietf-ip".
o Added "router-id" leaf. o Added "router-id" leaf.
o Specified the names for IPv4/IPv6 unicast main routing tables. o Specified the names for IPv4/IPv6 unicast main routing tables.
o Route parameter "last-modified" changed to "age". o Route parameter "last-modified" changed to "age".
o Added container "recipient-routing-tables". o Added container "recipient-routing-tables".
D.10. Changes Between Versions -01 and -02 D.11. Changes Between Versions -01 and -02
o Added module "ietf-ipv6-unicast-routing". o Added module "ietf-ipv6-unicast-routing".
o The example in Appendix C now uses IP addresses from blocks o The example in Appendix C now uses IP addresses from blocks
reserved for documentation. reserved for documentation.
o Direct routes appear by default in the forwarding table. o Direct routes appear by default in the forwarding table.
o Network layer interfaces must be assigned to a router instance. o Network layer interfaces must be assigned to a router instance.
Additional interface configuration may be present. Additional interface configuration may be present.
skipping to change at page 92, line 20 skipping to change at page 91, line 31
o Additional "must" statements were added. o Additional "must" statements were added.
o The "route-content" grouping for IPv4 and IPv6 unicast now o The "route-content" grouping for IPv4 and IPv6 unicast now
includes the material from the "ietf-routing" version via "uses includes the material from the "ietf-routing" version via "uses
rt:route-content". rt:route-content".
o Explanation of symbols in the tree representation of data model o Explanation of symbols in the tree representation of data model
hierarchy. hierarchy.
D.11. Changes Between Versions -00 and -01 D.12. Changes Between Versions -00 and -01
o AFN/SAFI-independent stuff was moved to the "ietf-routing" module. 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- o Typedefs for AFN and SAFI were placed in a separate "iana-afn-
safi" module. safi" module.
o Names of some data nodes were changed, in particular "routing- o Names of some data nodes were changed, in particular "routing-
process" is now "router". process" is now "router".
o The restriction of a single AFN/SAFI per router was lifted. o The restriction of a single AFN/SAFI per router was lifted.
 End of changes. 111 change blocks. 
471 lines changed or deleted 460 lines changed or added

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