draft-ietf-netmod-routing-cfg-04.txt | draft-ietf-netmod-routing-cfg-05.txt | |||
---|---|---|---|---|
NETMOD L. Lhotka | NETMOD L. Lhotka | |||
Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
Intended status: Standards Track July 9, 2012 | Intended status: Standards Track October 4, 2012 | |||
Expires: January 10, 2013 | Expires: April 7, 2013 | |||
A YANG Data Model for Routing Configuration | A YANG Data Model for Routing Configuration | |||
draft-ietf-netmod-routing-cfg-04 | draft-ietf-netmod-routing-cfg-05 | |||
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 a routing subsystem. It is therefore | framework for configuring a routing subsystem. It is therefore | |||
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 configurations - router instances, routes, | building blocks for such configurations - router 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 January 10, 2013. | This Internet-Draft will expire on April 7, 2013. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2012 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 17 | skipping to change at page 2, line 17 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | |||
2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | 2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | |||
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | |||
4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.1.1. Configuration of IPv6 Router Interfaces . . . . . . . 10 | 4.1.1. Configuration of IPv6 Router Interfaces . . . . . . . 11 | |||
4.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Routes . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 12 | 4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 13 | 4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 14 | |||
4.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 14 | 4.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 15 | |||
4.4.2. Defining New Routing Protocols . . . . . . . . . . . . 14 | 4.4.2. Defining New Routing Protocols . . . . . . . . . . . . 15 | |||
4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 17 | 4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 18 | |||
4.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 18 | 4.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 19 | |||
4.6.1. Operation "active-route" . . . . . . . . . . . . . . . 18 | ||||
4.6.2. Operation "route-count" . . . . . . . . . . . . . . . 19 | ||||
5. Interactions with Other YANG Modules . . . . . . . . . . . . . 20 | 5. Interactions with Other YANG Modules . . . . . . . . . . . . . 20 | |||
5.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 20 | 5.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 20 | |||
5.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 20 | 5.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 20 | |||
6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 22 | 6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 22 | |||
7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 34 | 7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 36 | |||
8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 38 | 8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 40 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 51 | |||
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 51 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 51 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 53 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 51 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 53 | |||
Appendix A. Example: Adding a New Routing Protocol . . . . . . . 52 | Appendix A. Example: Adding a New Routing Protocol . . . . . . . 54 | |||
Appendix B. Example: Reply to the NETCONF <get> Message . . . . . 55 | Appendix B. Example: NETCONF <get> Reply . . . . . . . . . . . . 56 | |||
Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 60 | Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 61 | |||
C.1. Changes Between Versions -03 and -04 . . . . . . . . . . . 60 | C.1. Changes Between Versions -04 and -05 . . . . . . . . . . . 61 | |||
C.2. Changes Between Versions -02 and -03 . . . . . . . . . . . 60 | C.2. Changes Between Versions -03 and -04 . . . . . . . . . . . 61 | |||
C.3. Changes Between Versions -01 and -02 . . . . . . . . . . . 61 | C.3. Changes Between Versions -02 and -03 . . . . . . . . . . . 62 | |||
C.4. Changes Between Versions -00 and -01 . . . . . . . . . . . 61 | C.4. Changes Between Versions -01 and -02 . . . . . . . . . . . 62 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 62 | C.5. Changes Between Versions -00 and -01 . . . . . . . . . . . 63 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 64 | ||||
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 7, line 21 | skipping to change at page 7, line 21 | |||
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. The combined data hierarchy is shown in | routing, respectively. The combined data hierarchy is shown in | |||
Figure 1, where brackets enclose list keys, "rw" means configuration, | Figure 1, where brackets enclose list keys, "rw" means configuration, | |||
"ro" operational state data, and "?" means optional node. | "ro" operational state data, and "?" means optional node. | |||
Parentheses enclose choice and case nodes, and case nodes are also | Parentheses enclose choice and case nodes, and case nodes are also | |||
marked with a colon (":"). | marked with a colon (":"). | |||
+--rw routing | +--rw routing | |||
+--rw router [name] | +--rw router [name] | |||
| +--rw name | | +--rw name | |||
| +--rw type? | ||||
| +--rw enabled? | ||||
| +--rw router-id? | | +--rw router-id? | |||
| +--rw description? | | +--rw description? | |||
| +--rw enabled? | | +--rw main-routing-tables | |||
| | +--rw main-routing-table [address-family safi] | ||||
| | +--rw address-family | ||||
| | +--rw safi | ||||
| | +--rw name? | ||||
| +--rw interfaces | | +--rw interfaces | |||
| | +--rw interface [name] | | | +--rw interface [name] | |||
| | +--rw name | | | +--rw name | |||
| | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | +--rw v6ur:send-advertisements? | | | +--rw v6ur:send-advertisements? | |||
| | +--rw v6ur:max-rtr-adv-interval? | | | +--rw v6ur:max-rtr-adv-interval? | |||
| | +--rw v6ur:min-rtr-adv-interval? | | | +--rw v6ur:min-rtr-adv-interval? | |||
| | +--rw v6ur:managed-flag? | | | +--rw v6ur:managed-flag? | |||
| | +--rw v6ur:other-config-flag? | | | +--rw v6ur:other-config-flag? | |||
| | +--rw v6ur:link-mtu? | | | +--rw v6ur:link-mtu? | |||
skipping to change at page 7, line 50 | skipping to change at page 8, line 7 | |||
| | +--rw v6ur:prefix-spec | | | +--rw v6ur:prefix-spec | |||
| | +--rw (control-adv-prefixes)? | | | +--rw (control-adv-prefixes)? | |||
| | +--:(no-advertise) | | | +--:(no-advertise) | |||
| | | +--rw v6ur:no-advertise? | | | | +--rw v6ur:no-advertise? | |||
| | +--:(advertise) | | | +--:(advertise) | |||
| | +--rw v6ur:valid-lifetime? | | | +--rw v6ur:valid-lifetime? | |||
| | +--rw v6ur:on-link-flag? | | | +--rw v6ur:on-link-flag? | |||
| | +--rw v6ur:preferred-lifetime? | | | +--rw v6ur:preferred-lifetime? | |||
| | +--rw v6ur:autonomous-flag? | | | +--rw v6ur:autonomous-flag? | |||
| +--rw routing-protocols | | +--rw routing-protocols | |||
| | +--rw routing-protocol [name] | | +--rw routing-protocol [name] | |||
| | +--rw name | ||||
| | +--rw description? | ||||
| | +--rw type | ||||
| | +--rw connected-routing-tables | ||||
| | | +--rw routing-table [name] | ||||
| | | +--rw name | ||||
| | | +--rw import-filter? | ||||
| | | +--rw export-filter? | ||||
| | +--rw static-routes | ||||
| | +--rw v4ur:ipv4 | ||||
| | | +--rw v4ur:route [id] | ||||
| | | +--rw v4ur:id | ||||
| | | +--rw v4ur:description? | ||||
| | | +--rw v4ur:outgoing-interface? | ||||
| | | +--rw v4ur:dest-prefix | ||||
| | | +--rw v4ur:next-hop? | ||||
| | +--rw v6ur:ipv6 | ||||
| | +--rw v6ur:route [id] | ||||
| | +--rw v6ur:id | ||||
| | +--rw v6ur:description? | ||||
| | +--rw v6ur:outgoing-interface? | ||||
| | +--rw v6ur:dest-prefix | ||||
| | +--rw v6ur:next-hop? | ||||
| +--rw routing-tables | ||||
| +--rw routing-table [name] | ||||
| +--rw name | | +--rw name | |||
| +--rw address-family? | ||||
| +--rw safi? | ||||
| +--rw description? | | +--rw description? | |||
| +--ro routes | | +--rw enabled? | |||
| | +--ro route | | +--rw type | |||
| | +--ro outgoing-interface? | | +--rw connected-routing-tables | |||
| | +--ro source-protocol | | | +--rw connected-routing-table [name] | |||
| | +--ro age | | | +--rw name | |||
| | +--ro v4ur:dest-prefix? | | | +--rw import-filter? | |||
| | +--ro v4ur:next-hop? | | | +--rw export-filter? | |||
| | +--ro v6ur:dest-prefix? | | +--rw static-routes | |||
| | +--ro v6ur:next-hop? | | +--rw v4ur:ipv4 | |||
| +--rw recipient-routing-tables | | | +--rw v4ur:route [id] | |||
| +--rw recipient-routing-table [name] | | | +--rw v4ur:id | |||
| +--rw name | | | +--rw v4ur:description? | |||
| +--rw filter? | | | +--rw v4ur:outgoing-interface? | |||
| | +--rw v4ur:dest-prefix | ||||
| | +--rw v4ur:next-hop? | ||||
| +--rw v6ur:ipv6 | ||||
| +--rw v6ur:route [id] | ||||
| +--rw v6ur:id | ||||
| +--rw v6ur:description? | ||||
| +--rw v6ur:outgoing-interface? | ||||
| +--rw v6ur:dest-prefix | ||||
| +--rw v6ur:next-hop? | ||||
+--rw routing-tables | ||||
| +--rw routing-table [name] | ||||
| +--rw name | ||||
| +--rw address-family | ||||
| +--rw safi | ||||
| +--rw description? | ||||
| +--ro routes | ||||
| | +--ro route | ||||
| | +--ro outgoing-interface? | ||||
| | +--ro source-protocol | ||||
| | +--ro last-updated? | ||||
| | +--ro v4ur:dest-prefix? | ||||
| | +--ro v4ur:next-hop? | ||||
| | +--ro v6ur:dest-prefix? | ||||
| | +--ro v6ur:next-hop? | ||||
| +--rw recipient-routing-tables | ||||
| +--rw recipient-routing-table [name] | ||||
| +--rw name | ||||
| +--rw filter? | ||||
| | ||||
| | ||||
+--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: Data hierarchy of the core routing data model. | Figure 1: Data hierarchy of the core routing data model. | |||
As can be seen from Figure 1, the core routing data model introduces | As can be seen from Figure 1, the core routing data model introduces | |||
several generic components of a routing framework: routers, routing | several generic components of a routing framework: routers, routing | |||
tables containing routes, routing protocols and route filters. The | tables containing routes, routing protocols and route filters. The | |||
following subsections describe these components in more detail. | following subsections describe these components in more detail. | |||
By combining the components in various ways, and possibly augmenting | By combining the components in various ways, and possibly augmenting | |||
them with appropriate contents defined in other modules, various | them with appropriate contents defined in other modules, various | |||
skipping to change at page 10, line 13 | skipping to change at page 10, line 24 | |||
of route filters, denoted by "F" in Figure 2. | of route filters, denoted by "F" in Figure 2. | |||
4.1. Router | 4.1. Router | |||
Each router instance in the core routing data model represents a | Each router instance in the core routing data model represents a | |||
logical router. The exact semantics of this term is left to | logical router. The exact semantics of this term is left to | |||
implementations. For example, router instances may be completely | implementations. For example, router instances may be completely | |||
isolated virtual routers or, alternatively, they may internally share | isolated virtual routers or, alternatively, they may internally share | |||
certain information. | certain information. | |||
Each network layer interface must be assigned to one or more router | An implementation MAY support multiple types of logical routers | |||
simultaneously. Instances of all router types are organized as | ||||
entries of the same flat "router" list. In order to distinguish | ||||
router instances belonging to the same type, the "type" leaf is | ||||
defined as a child of the "router" node. | ||||
An implementation MAY pose restrictions on allowed router types and | ||||
on the number of supported instances for each type. For example, a | ||||
simple router implementation may support only one router instance of | ||||
the default type "standard-router". | ||||
Each network layer interface has to be assigned to one or more router | ||||
instances in order to be able to participate in packet forwarding, | instances in order to be able to participate in packet forwarding, | |||
routing protocols and other operations of those router instances. | routing protocols and other operations of those router instances. | |||
The assignment is accomplished by creating a corresponding entry in | The assignment is accomplished by creating a corresponding entry in | |||
the list of router interfaces ("rt:interface"). The key of the list | the list of router interfaces ("rt:interface"). The key of the list | |||
entry MUST be the name of a configured network layer interface, i.e., | entry MUST be the name of a configured network layer interface, i.e., | |||
the value of a node /if:interfaces/if:interface/if:name defined in | the value of a node /if:interfaces/if:interface/if:name defined in | |||
the "ietf-interfaces" module [YANG-IF]. | the "ietf-interfaces" module [YANG-IF]. | |||
In YANG terms, the list of router interfaces is modeled as the "list" | ||||
node rather than "leaf-list" in order to allow for adding, via | ||||
augmentation, other configuration or operational state data related | ||||
to the corresponding router interface. | ||||
Implementations MAY specify additional rules for the assignment of | Implementations MAY specify additional rules for the assignment of | |||
interfaces to logical routers. For example, it may be required that | interfaces to logical routers. For example, it may be required that | |||
the sets of interfaces assigned to different logical routers be | the sets of interfaces assigned to different logical routers be | |||
disjoint. | disjoint. | |||
Apart from the key, each entry of the "rt:interface" list MAY contain | ||||
other configuration or operational state data related to the | ||||
corresponding router interface. | ||||
4.1.1. Configuration of IPv6 Router Interfaces | 4.1.1. Configuration of IPv6 Router Interfaces | |||
The module "ietf-ipv6-unicast-routing" augments the definition of the | The module "ietf-ipv6-unicast-routing" augments the definition of the | |||
data node "rt:interface" with definitions of the following | data node "rt:interface" with definitions of the following | |||
configuration variables as required by [RFC4861], sec. 6.2.1: | configuration variables as required by [RFC4861], sec. 6.2.1: | |||
o send-advertisements, | o send-advertisements, | |||
o max-rtr-adv-interval, | o max-rtr-adv-interval, | |||
skipping to change at page 11, line 38 | skipping to change at page 12, line 12 | |||
2. The original specification [RFC4861] allows the implementations | 2. The original specification [RFC4861] allows the implementations | |||
to decide whether the "valid-lifetime" and "preferred-lifetime" | to decide whether the "valid-lifetime" and "preferred-lifetime" | |||
parameters remain the same in consecutive advertisements, or | parameters remain the same in consecutive advertisements, or | |||
decrement in real time. However, the latter behavior seems | decrement in real time. However, the latter behavior seems | |||
problematic because the values might be reset again to the | problematic because the values might be reset again to the | |||
(higher) configured values after a configuration is reloaded. | (higher) configured values after a configuration is reloaded. | |||
Moreover, no implementation is known to use the decrementing | Moreover, no implementation is known to use the decrementing | |||
behavior. The "ietf-ipv6-unicast-routing" module therefore | behavior. The "ietf-ipv6-unicast-routing" module therefore | |||
assumes the former behavior with constant values. | assumes the former behavior with constant values. | |||
4.2. Route | 4.2. Routes | |||
Routes are basic units of information in a routing system. The core | Routes are basic units of information in a routing system. The core | |||
routing data model defines only the following minimal set of route | routing data model defines only the following minimal set of route | |||
attributes: | 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": IP address of an adjacent router or host to which | o "next-hop": IP address of an adjacent router or host to which | |||
skipping to change at page 12, line 26 | skipping to change at page 12, line 47 | |||
state data, for example as entries in routing tables. | state data, for example as entries in routing tables. | |||
4.3. Routing Tables | 4.3. Routing Tables | |||
Routing tables are lists of routes complemented with administrative | Routing tables are lists of routes complemented with administrative | |||
data, namely: | data, namely: | |||
o "source-protocol": name of the routing protocol from which the | o "source-protocol": name of the routing protocol from which the | |||
route was originally obtained. | route was originally obtained. | |||
o "age": number of seconds since the route was created or last | o "last-updated": the date and time when the route was last updated, | |||
updated. | or inserted into the routing table. | |||
Each routing table may contain only routes of the same address | Each routing table may contain only routes of the same address | |||
family. Address family information consists of two parameters - | family. Address family information consists of two parameters - | |||
"address-family" and "safi" (Subsequent Address Family Identifier, | "address-family" and "safi" (Subsequent Address Family Identifier, | |||
SAFI). The permitted values for these two parameters are defined by | SAFI). The permitted values for these two parameters are defined by | |||
IANA and represented using YANG enumeration types "ianaaf:address- | IANA and represented using YANG enumeration types "ianaaf:address- | |||
family" and "ianaaf:subsequent-address-family" [IANA-IF-AF]. | family" and "ianaaf:subsequent-address-family" [IANA-IF-AF]. | |||
In the core routing data model, the "routing-table" node represents | In the core routing data model, the "routing-table" node represents | |||
configuration while the descendant list of routes is defined as | configuration while the descendant list of routes is defined as | |||
operational state data. The contents of route lists are controlled | operational state data. The contents of route lists are controlled | |||
and manipulated by routing protocol operations which may result in | and manipulated by routing protocol operations which may result in | |||
route additions, removals and modifications. This also includes | route additions, removals and modifications. This also includes | |||
manipulations via the "static" and/or "direct" pseudo-protocols, see | manipulations via the "static" and/or "direct" pseudo-protocols, see | |||
Section 4.4.1. | Section 4.4.1. | |||
One routing table MUST be present for each router instance and each | One or more routing tables MUST be configured for each address family | |||
address family supported by that router instance. It is the so- | supported by the server. Each router instance MUST designate, for | |||
called main routing table to which all routing protocol instances | every address family that the router instance supports, exactly one | |||
supporting the given address family SHOULD be connected by default. | routing table as its main routing table. This is accomplished by | |||
For the two address families that are part of the core routing data | creating an entry in the "main-routing-table" list, which contains a | |||
model, the names of the main routing tables SHOULD be as follows: | reference to the routing table that is selected as main. | |||
o "main-ipv4-unicast" for IPv4 unicast, | Main routing tables serve the following purposes: | |||
o "main-ipv6-unicast" for IPv6 unicast. | ||||
Additional routing tables MAY be configured by creating new entries | o The router instance always installs direct routes for an address | |||
in the "routing-table" list, either as a part of factory-default | family to that address family's main routing table. | |||
configuration, or by a client's action. | ||||
The naming scheme for additional routing tables, as well as | o By default, a routing protocol SHOULD be connected to the main | |||
restrictions on the number and configurability of routing tables are | routing table of each address family supported by that routing | |||
implementation-specific. | protocol. See Section 4.4 for further explanation. | |||
Routing tables are global, which means that a configured routing | ||||
table may be used by any or all router instances. | ||||
Server implementations MAY pose restrictions regarding the number of | ||||
supported routing tables, and rules for configuration and use of | ||||
routing tables. For example: | ||||
o A server may support no more than one routing table per address | ||||
family. | ||||
o Router instances (of a certain type) may not be allowed to share | ||||
routing tables, i.e., each routing table is used by no more than | ||||
one router instance. | ||||
For servers supporting multiple routing tables per address family, | ||||
additional tables can be configured by creating new entries in the | ||||
"routing-table" list, either as a part of factory-default | ||||
configuration, or by a client's action. | ||||
The way how the routing system uses information from routing tables | The way how the routing system uses information from routing tables | |||
is outside the scope of this document. Typically, implementations | for actual packet forwarding is outside the scope of this document. | |||
will either use a forwarding table, or perform a direct look-up in | ||||
the main routing table in conjunction with a route cache. | ||||
Every routing table can serve as a source of routes for other routing | Every routing table can serve as a source of routes for other routing | |||
tables. To achieve this, one or more recipient routing tables may be | tables. To achieve this, one or more recipient routing tables may be | |||
specified in the configuration of the source routing table. In | specified in the configuration of the source routing table. | |||
addition, a route filter may be configured for each recipient routing | Optionally, a route filter may be configured for any or all recipient | |||
table, which selects and/or manipulates the routes that are passed on | routing tables. Such a route filter then selects and/or manipulates | |||
between the source and recipient routing table. | the routes that are passed on between the source and recipient | |||
routing table. | ||||
A routing table MUST NOT appear among its own recipient routing | ||||
tables. A recipient routing table also MUST be of the same address | ||||
family as its source routing table.Consequently, configuration of | ||||
recipient routing tables makes sense only for servers supporting | ||||
multiple routing tables per address family. Servers supporting only | ||||
one routing table per address family MAY therefore decide to remove | ||||
the container "recipient-routing-tables", together with its contents, | ||||
from the data model. | ||||
4.4. Routing Protocols | 4.4. Routing Protocols | |||
The core routing data model provides an open-ended framework for | The core routing data model provides an open-ended framework for | |||
defining multiple routing protocol instances. Each of them is | defining multiple routing protocol instances within each router | |||
identified by a name, which MUST be unique within a router instance. | instance. Each routing protocol instance MUST be assigned a type, | |||
Each protocol MUST be assigned a type, which MUST be an identity | which is an identity derived from the "rt:routing-protocol" base | |||
derived from the "rt:routing-protocol" base identity. The core | identity. The core routing data model defines two identities for the | |||
routing data model defines two identities for the direct and static | direct and static pseudo-protocols (Section 4.4.1). | |||
pseudo-protocols (Section 4.4.1). | ||||
Each routing protocol instance is connected to exactly one routing | Each routing protocol instance is connected to exactly one routing | |||
table for each address family that the routing protocol instance | table for each address family that the routing protocol instance | |||
supports. By default, every routing protocol instance SHOULD be | supports. By default, every routing protocol instance SHOULD be | |||
connected to the main routing table or tables. An implementation MAY | connected to the main routing table or tables. An implementation MAY | |||
allow any or all routing protocol instances to be configured to use a | allow any or all routing protocol instances to be configured to use a | |||
different routing table. | different routing table. | |||
Routes learned from the network by a routing protocol are passed to | Routes learned from the network by a routing protocol are passed to | |||
the connected routing table(s) and vice versa - routes appearing in a | the connected routing table(s) and vice versa, subject to routing | |||
routing table are passed to all routing protocols connected to the | protocol specific rules and restrictions. | |||
table (except "direct" and "static" pseudo-protocols) and may be | ||||
advertised by that protocol to the network. | ||||
Two independent route filters (see Section 4.5) may be defined for a | In addition, two independent route filters (see Section 4.5) may be | |||
routing protocol instance to control the exchange of routes in both | defined for a routing protocol instance to control the exchange of | |||
directions between the routing protocol instance and the connected | routes in both directions between the routing protocol instance and | |||
routing table: | the connected routing table: | |||
o import filter controls which routes are passed from a routing | o import filter controls which routes are passed from a routing | |||
protocol instance to the routing table, | protocol instance to the connected routing table, | |||
o export filter controls which routes the routing protocol instance | o export filter controls which routes the routing protocol instance | |||
may receive from the connected routing table. | may receive from the connected routing table. | |||
Note that, for historical reasons, the terms import and export are | Note that, for historical reasons, the terms import and export are | |||
used from the viewpoint of a routing table. | used from the viewpoint of a routing table. | |||
4.4.1. Routing Pseudo-Protocols | 4.4.1. Routing Pseudo-Protocols | |||
The core routing data model defines two special routing protocol | The core routing data model defines two special routing protocol | |||
types - "direct" and "static". Both are in fact pseudo-protocols, | types - "direct" and "static". Both are in fact pseudo-protocols, | |||
which means that they are confined to the local device and do not | which means that they are confined to the local device and do not | |||
exchange any routing information with neighboring routers. Routes | exchange any routing information with neighboring routers. Routes | |||
from both "direct" and "static" protocol instances are passed to the | from both "direct" and "static" protocol instances are passed to the | |||
connected routing table (subject to route filters, if any), but an | connected routing table (subject to route filters, if any), but an | |||
exchange in the opposite direction is not allowed. | exchange in the opposite direction is not allowed. | |||
Every router instance MUST contain exactly one instance of the | Every router instance MUST implement exactly one instance of the | |||
"direct" pseudo-protocol type. The name of this instance MUST also | "direct" pseudo-protocol type. The name of this instance MUST also | |||
be "direct". It is the source of direct routes for all configured | be "direct". It is the source of direct routes for all configured | |||
address families. Direct routes are normally supplied by the | address families. Direct routes are normally supplied by the | |||
operating system kernel, based on the configuration of network | operating system kernel, based on the configuration of network | |||
interface addresses, see Section 5.2. Direct routes SHOULD by | interface addresses, see Section 5.2. The "direct" pseudoprotocol | |||
default appear in the main routing table for each configured address | MUST always be connected to the main routing tables of all supported | |||
family. However, using the framework defined in this document, the | address families. This means that direct routes are always installed | |||
target routing table for direct routes MAY be changed by connecting | in the main routing tables. However, direct routes MAY be filtered | |||
the "direct" protocol instance to a non-default routing table. | before they appear in the main routing table. | |||
Direct routes can also be filtered before they appear in the routing | ||||
table. | ||||
A pseudo-protocol of the type "static" allows for specifying routes | A pseudo-protocol of the type "static" allows for specifying routes | |||
manually. It MAY be configured in zero or multiple instances, | manually. It MAY be configured in zero or multiple instances, | |||
although a typical implementation will have exactly one instance per | although a typical configuration will have exactly one instance per | |||
logical router. | logical router. | |||
4.4.2. Defining New Routing Protocols | 4.4.2. Defining New Routing Protocols | |||
It is expected that future YANG modules will create data models for | It is expected that future YANG modules will create data models for | |||
additional routing protocol types. Such a new module has to define | additional routing protocol types. Such a new module has to define | |||
the protocol-specific configuration and operational state data, and | the protocol-specific configuration and operational state data, and | |||
it has to fit it into the core routing framework in the following | it has to fit it into the core routing framework in the following | |||
way: | way: | |||
o A new identity MUST be defined for the routing protocol and its | o A new identity MUST be defined for the routing protocol and its | |||
base identity MUST be set to "rt:routing-protocol", or to an | base identity MUST be set to "rt:routing-protocol", or to an | |||
identity derived from "rt:routing-protocol". | identity derived from "rt:routing-protocol". | |||
o Additional route attributes MAY be defined, preferably in one | o Additional route attributes MAY be defined, preferably in one | |||
place by means of defining a YANG grouping. The new attributes | place by means of defining a YANG grouping. The new attributes | |||
have to be inserted as operational state data by augmenting the | have to be inserted as operational state data by augmenting the | |||
definition of "rt:route" inside "rt:routing-table", and possibly | definition of the node | |||
to other places in the configuration, operational state data and | /rt:routing-tables/rt:routing-table/rt:route, | |||
RPC input or output. | ||||
and possibly to other places in the configuration, operational | ||||
state data and RPC input or output. | ||||
o Per-interface configuration parameters can be added by augmenting | o Per-interface configuration parameters can be added by augmenting | |||
the data node "rt:interface" (the list of router interfaces). | the data node "rt:interface" (the list of router interfaces). | |||
o Other configuration parameters and operational state data can be | o Other configuration parameters and operational state data can be | |||
defined by augmenting the "routing-protocol" data node. By using | defined by augmenting the "routing-protocol" data node. | |||
the "when" statement, this augment SHOULD be made conditional and | ||||
valid only if the value of the "rt:type" child leaf equals to the | ||||
new protocol's identity. | ||||
It is RECOMMENDED that both per-interface and other configuration | By using the "when" statement, the augmented per-interface and other | |||
data specific to the new protocol be encapsulated in an appropriately | configuration parameters specific to the new protocol SHOULD be made | |||
named container. | conditional and valid only if the value of "rt:type" is equal to the | |||
new protocol's identity. It is also RECOMMENDED that the protocol- | ||||
specific data be encapsulated in 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 A. First, the module defines a new | RIP routing protocol in Appendix A. First, the module defines a new | |||
identity for the RIP protocol: | identity for the RIP protocol: | |||
identity rip { | identity rip { | |||
base rt:routing-protocol; | base rt:routing-protocol; | |||
description "Identity for the RIP routing protocol."; | description "Identity for the RIP routing protocol."; | |||
} | } | |||
skipping to change at page 16, line 20 | skipping to change at page 17, line 20 | |||
} | } | |||
leaf tag { | leaf tag { | |||
type uint16; | type uint16; | |||
default "0"; | default "0"; | |||
description | description | |||
"This leaf may be used to carry additional info, e.g. AS | "This leaf may be used to carry additional info, e.g. AS | |||
number."; | number."; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | augment "/rt:routing/rt:routing-tables/rt:routing-table/" | |||
+ "rt:routes/rt:route" { | + "rt:routes/rt:route" { | |||
when "../../../../rt:routing-protocols/" | ||||
+ "rt:routing-protocol[rt:name=current()/rt:source-protocol]/" | ||||
+ "rt:type='rip:rip'" { | ||||
description | ||||
"This augment is only valid if the source protocol from which | ||||
the route originated is RIP."; | ||||
} | ||||
description | description | |||
"RIP-specific route components."; | "RIP-specific route components."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/rt:route" { | |||
description | description | |||
"Add RIP-specific route content."; | "Add RIP-specific route content."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
skipping to change at page 18, line 7 | skipping to change at page 18, line 38 | |||
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 routing | exchanged between a routing protocol instance and a connected routing | |||
table, or between a source and a recipient routing table. Route | table, or between a source and a recipient routing table. Route | |||
filters may also manipulate routes, i.e., add, delete, or modify | filters may also manipulate routes, i.e., add, delete, or modify | |||
their attributes. | their attributes. | |||
Route filters are global, which means that a configured route filter | Route filters are global, which means that a configured route filter | |||
may be used by any or all router instances. | may be used by any or all router instances. | |||
By itself, the route filtering framework defined in this document | By itself, the route filtering framework defined in this document | |||
allows for applying only the extreme routing policies which are | allows for applying only two extreme routing policies which are | |||
represented by the following pre-defined route filter types: | represented by the following pre-defined route filter types: | |||
o "deny-all-route-filter": all routes are blocked, | o "deny-all-route-filter": all routes are blocked, | |||
o "allow-all-route-filter": all routes are permitted. | o "allow-all-route-filter": all routes are permitted. | |||
Note that the latter type is equivalent to no route filter. | Note that the latter type is equivalent to no route filter. | |||
It is expected that more comprehensive route filtering frameworks | It is expected that more comprehensive route filtering frameworks | |||
will be developed separately. | will be developed separately. | |||
skipping to change at page 18, line 29 | skipping to change at page 19, line 12 | |||
Each route filter is identified by a name which MUST be unique within | Each route filter is identified by a name which MUST be unique within | |||
the entire configuration. Its type MUST be specified by the "type" | the entire configuration. Its type MUST be specified by the "type" | |||
identity reference - this opens the space for multiple route | identity reference - this opens the space for multiple route | |||
filtering framework implementations. The default value for the route | filtering framework implementations. The default value for the route | |||
filter type is the identity "deny-all-route-filter". | filter type is the identity "deny-all-route-filter". | |||
4.6. RPC Operations | 4.6. RPC Operations | |||
The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines two RPC operations: | |||
o active-route, | o active-route: query the routing system for the active route(s) | |||
that are currently used for sending datagrams to a destination | ||||
o route-count. | host whose address is passed as an input parameter. | |||
Their parameters and semantics are described in the following | ||||
subsections. | ||||
4.6.1. Operation "active-route" | ||||
Description: Retrieve one or more active routes from the forwarding | ||||
information base (FIB) of a router instance, i.e., the route(s) | ||||
that are currently used by that router instance for sending | ||||
datagrams to the destination whose address is provided as an input | ||||
parameter. | ||||
Parameters: | ||||
router-name: Name of the router instance whose FIB is to be | ||||
queried. | ||||
destination-address: Network layer destination address for which | ||||
the active routes are requested. | ||||
Positive Response: One or more "route" elements containing the | ||||
active route(s). | ||||
Negative Response: | ||||
If the logical router is not found, the server sends an "rpc- | ||||
error" message with "error-tag" set to "data-missing", and "error- | ||||
app-tag" set to "router-not-found". | ||||
If no route exists for the given destination address, the server | ||||
sends an "rpc-error" message with "error-tag" set to "data- | ||||
missing" and "error-app-tag" set to "no-route". | ||||
4.6.2. Operation "route-count" | ||||
Description: Retrieve the total number of routes in a routing table. | ||||
Parameters: | ||||
router-name: Name of the logical router containing the routing | ||||
table. | ||||
routing-table: Name of the routing table. | ||||
Positive Response: Element "number-of-routes" containing the | ||||
requested nonnegative number. | ||||
Negative Response: If the logical router or the routing table is not | o route-count: retrieve the total number of entries in a routing | |||
found, the server sends an "rpc-error" message with "error-tag" | table. | |||
set to "data-missing", and "error-app-tag" set to "router-not- | ||||
found" or "routing-table-not-found", respectively. | ||||
5. Interactions with Other YANG Modules | 5. 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. The | configuration parameters that are defined in other YANG modules. The | |||
following subsections describe these interactions. | following subsections describe these interactions. | |||
In all cases, the relevant parts of the core routing data model are | ||||
disabled but MUST NOT be deleted from the configuration by the | ||||
server. | ||||
5.1. Module "ietf-interfaces" | 5.1. Module "ietf-interfaces" | |||
The following boolean switch is defined in the "ietf-interfaces" YANG | The following boolean switch is defined in the "ietf-interfaces" YANG | |||
module [YANG-IF]: | module [YANG-IF]: | |||
/if:interfaces/if:interface/if:enabled | /if:interfaces/if:interface/if:enabled | |||
If this switch is set to "false" for a given network layer | If this switch is set to "false" for a given network layer | |||
interface, the device MUST behave exactly as if that interface was | interface, the device MUST behave exactly as if that interface was | |||
not assigned to any logical router at all. | not assigned to any logical router at all. | |||
skipping to change at page 20, line 52 | skipping to change at page 21, line 7 | |||
IPv6 routing functions related to that interface MUST be disabled. | IPv6 routing functions related to that interface MUST be disabled. | |||
/if:interfaces/if:interface/ip:ipv6/ip:ip-forwarding | /if:interfaces/if:interface/ip:ipv6/ip:ip-forwarding | |||
If this switch is set to "false" for a given interface, then the | If this switch is set to "false" for a given interface, then the | |||
forwarding of IPv6 datagrams to and from this interface MUST be | forwarding of IPv6 datagrams to and from this interface MUST be | |||
disabled. However, the interface may participate in other routing | disabled. However, the interface may participate in other routing | |||
functions, such as routing protocols. | functions, such as routing protocols. | |||
In addition, the "ietf-ip" module allows for configuring IPv4 and | In addition, the "ietf-ip" module allows for configuring IPv4 and | |||
IPv6 addresses and subnet masks. Configuration of these parameters | IPv6 addresses and subnet masks on network layer interfaces. | |||
on an enabled interface MUST result in an immediate creation of the | Configuration of these parameters on an enabled interface MUST result | |||
corresponding direct route (usually in the main routing table). Its | in an immediate creation of the corresponding direct route (usually | |||
destination prefix is set according to the configured IP address and | in the main routing table). Its destination prefix is set according | |||
subnet mask, and the interface is set as the outgoing interface for | to the configured IP address and subnet mask, and the interface is | |||
that route. | set as the outgoing interface for that route. | |||
6. Routing YANG Module | 6. 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@2012-07-09.yang" | <CODE BEGINS> file "ietf-routing@2012-10-04.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 { | ||||
prefix "yang"; | ||||
} | ||||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix "inet"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix "if"; | |||
} | } | |||
import iana-afn-safi { | import iana-afn-safi { | |||
prefix "ianaaf"; | prefix "ianaaf"; | |||
skipping to change at page 23, line 17 | skipping to change at page 23, line 21 | |||
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 2012-07-09 { | revision 2012-10-04 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity router-type { | ||||
description | ||||
"Base identity from which router type identities are derived. | ||||
It is primarily intended for discriminating among different | ||||
types of logical routers or router virtualization. | ||||
"; | ||||
} | ||||
identity standard-router { | ||||
base router-type; | ||||
description | ||||
"This identity represents a standard router."; | ||||
} | ||||
identity routing-protocol { | identity routing-protocol { | |||
description | description | |||
"Base identity from which routing protocol identities are | "Base identity from which routing protocol identities are | |||
derived."; | derived."; | |||
} | } | |||
identity direct { | identity direct { | |||
base routing-protocol; | base routing-protocol; | |||
description | description | |||
"Routing pseudo-protocol which provides routes to directly | "Routing pseudo-protocol which provides routes to directly | |||
skipping to change at page 24, line 31 | skipping to change at page 24, line 50 | |||
description | description | |||
"This type is used for leafs that reference a router | "This type is used for leafs that reference a router | |||
instance."; | instance."; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping afn-safi { | grouping afn-safi { | |||
leaf address-family { | leaf address-family { | |||
type ianaaf:address-family; | type ianaaf:address-family; | |||
default "ipv4"; | mandatory "true"; | |||
description | description | |||
"Address family of routes in the routing table."; | "Address family of routes in the routing table."; | |||
} | } | |||
leaf safi { | leaf safi { | |||
type ianaaf:subsequent-address-family; | type ianaaf:subsequent-address-family; | |||
default "nlri-unicast"; | mandatory "true"; | |||
description | description | |||
"Subsequent address family identifier of routes in the | "Subsequent address family identifier of routes in the | |||
routing table."; | routing table."; | |||
} | } | |||
description | description | |||
"This grouping provides two parameters specifying address | "This grouping provides two parameters specifying address | |||
family and subsequent address family."; | family and subsequent address family."; | |||
} | } | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
"Generic parameters of routes. | "Generic parameters of routes."; | |||
A module for an address family should define a specific | ||||
version of this grouping containing 'uses rt:route-content'. | ||||
"; | ||||
leaf outgoing-interface { | leaf outgoing-interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Outgoing interface."; | "Outgoing interface."; | |||
} | } | |||
} | } | |||
/* RPC Methods */ | /* RPC Methods */ | |||
rpc active-route { | rpc active-route { | |||
description | description | |||
"Return the active route (or multiple routes, in the case of | "Return the active route (or multiple routes, in the case of | |||
multi-path routing) to a destination address. | multi-path routing) to a destination address. | |||
Parameters | Parameters | |||
1. 'router-name', | 1. 'router-name', | |||
2. 'destination-address'. | 2. 'destination-address'. | |||
If the logical router with 'router-name' doesn't exist, then | If the router instance with 'router-name' doesn't exist, then | |||
this operation will fail with error-tag 'missing-element' and | this operation shall fail with error-tag 'data-missing' and | |||
error-app-tag 'router-not-found'. | error-app-tag 'router-not-found'. | |||
If there is no active route for 'destination-address', then | If no active route for 'destination-address' exists, no output | |||
this operation will fail with error-tag 'data-missing' and | is returned - the server shall send an <rpc-reply> containing | |||
error-app-tag 'no-route'. | a single element <ok>. | |||
"; | "; | |||
input { | input { | |||
leaf router-name { | leaf router-name { | |||
type router-ref; | type router-ref; | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Name of the router instance whose forwarding information | "Name of the router instance whose forwarding information | |||
base is being queried."; | base is being queried."; | |||
} | } | |||
container destination-address { | container destination-address { | |||
uses afn-safi; | uses afn-safi; | |||
description | description | |||
"Network layer destination address. | "Network layer destination address. | |||
AFN/SAFI-specific modules must augment this container with | Address family specific modules must augment this | |||
a leaf named 'address'. | container with a leaf named 'address'. | |||
"; | "; | |||
} | } | |||
} | } | |||
output { | output { | |||
list route { | list route { | |||
min-elements "1"; | ||||
uses afn-safi; | uses afn-safi; | |||
uses route-content; | uses route-content; | |||
description | description | |||
"Route contents specific for each address family should be | "Route contents specific for each address family should be | |||
defined through augmenting."; | defined through augmenting."; | |||
} | } | |||
} | } | |||
} | } | |||
rpc route-count { | rpc route-count { | |||
description | description | |||
"Return the current number of routes in a routing table. | "Return the current number of routes in a routing table. | |||
Parameters: | Parameters: | |||
1. 'router-name', | 1. 'routing-table-name'. | |||
2. 'routing-table-name'. | ||||
If the logical router with 'router-name' doesn't exist, then | ||||
this operation will fail with error-tag 'missing-element' and | ||||
error-app-tag 'router-not-found'. | ||||
If the routing table with 'routing-table-name' doesn't exist, | If the routing table with the name specified in | |||
then this operation will fail with error-tag 'missing-element' | 'routing-table-name' doesn't exist, then this operation shall | |||
and error-app-tag 'routing-table-not-found'. | fail with error-tag 'data-missing' and error-app-tag | |||
'routing-table-not-found'. | ||||
"; | "; | |||
input { | input { | |||
leaf router-name { | ||||
type router-ref; | ||||
mandatory "true"; | ||||
description | ||||
"Name of the router instance containing the routing | ||||
table."; | ||||
} | ||||
leaf routing-table { | leaf routing-table { | |||
type leafref { | type leafref { | |||
path "/routing/router/routing-tables/routing-table/name"; | path "/routing/routing-tables/routing-table/name"; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Name of the routing table."; | "Name of the routing table."; | |||
} | } | |||
} | } | |||
output { | output { | |||
leaf number-of-routes { | leaf number-of-routes { | |||
type uint32; | type uint32; | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Number of routes in the routing table."; | "Number of routes in the routing table."; | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at page 27, line 22 | skipping to change at page 27, line 25 | |||
/* Data Nodes */ | /* Data Nodes */ | |||
container routing { | container routing { | |||
description | description | |||
"Routing parameters."; | "Routing parameters."; | |||
list router { | list router { | |||
key "name"; | key "name"; | |||
unique "router-id"; | unique "router-id"; | |||
description | description | |||
'Each list entry is a container for configuration and | "Each list entry is a container for configuration and | |||
operational state data of a single (logical) router. | operational state data of a single (logical) router. | |||
Network layer interfaces assigned to the router must have | Network layer interfaces assigned to the router must have | |||
their entries in the "interfaces" list. | their entries in the 'interfaces' list. | |||
'; | "; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The unique router name."; | "An arbitrary name of the router instance."; | |||
} | ||||
leaf type { | ||||
type identityref { | ||||
base router-type; | ||||
} | ||||
default "rt:standard-router"; | ||||
description | ||||
"This leaf specifies the router type. | ||||
It is primarily intended as a means for discriminating | ||||
among different types of logical routers, route | ||||
virtualization, master-slave arrangements etc., while | ||||
keeping all such router instances in the same flat list. | ||||
Standard router instances should use the default value. | ||||
"; | ||||
} | ||||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
description | ||||
"Enable/disable the router instance. | ||||
If this parameter is false, the parent router instance is | ||||
disabled, despite any other configuration that might be | ||||
present. | ||||
"; | ||||
} | } | |||
leaf router-id { | leaf router-id { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Global router ID in the form of an IPv4 address. | "Global router ID in the form of an IPv4 address. | |||
An implementation may select a value if this parameter is | An implementation may select a value if this parameter is | |||
not configured. | not configured. | |||
Routing protocols may override this global parameter | Routing protocols may override this global parameter | |||
inside their configuration. | inside their configuration. | |||
"; | "; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the router."; | "Textual description of the router."; | |||
} | } | |||
leaf enabled { | container main-routing-tables { | |||
type boolean; | ||||
default "true"; | ||||
description | description | |||
"Enable the router. The default value is 'true'. | "Main routing tables used by the router instance."; | |||
list main-routing-table { | ||||
must "address-family=//routing/routing-tables/" | ||||
+ "routing-table[name=current()/name]/" | ||||
+ "address-family and safi=//routing/routing-tables/" | ||||
+ "routing-table[name=current()/name]/safi" { | ||||
error-message "Address family mismatch."; | ||||
description | ||||
"The entry's address family must match that of the | ||||
referenced routing table."; | ||||
} | ||||
key "address-family safi"; | ||||
description | ||||
"Each list entry specifies the main routing table for one | ||||
address family. | ||||
If this parameter is false, the parent router instance is | The main routing table receives direct routes, and all | |||
disabled, despite any other configuration that might be | routing protocols should be connected to the main | |||
present. | routing table(s) by default. | |||
"; | ||||
Address families that don't have their entry in this | ||||
list must not be used in the rest of the router instance | ||||
configuration. | ||||
"; | ||||
uses afn-safi; | ||||
leaf name { | ||||
type leafref { | ||||
path "/routing/routing-tables/routing-table/name"; | ||||
} | ||||
description | ||||
"Name of an existing routing table to be used as the | ||||
main routing table for the given router and address | ||||
family."; | ||||
} | ||||
} | ||||
} | } | |||
container interfaces { | container interfaces { | |||
description | description | |||
"Router interface parameters."; | "Router interface parameters."; | |||
list interface { | list interface { | |||
key "name"; | key "name"; | |||
description | description | |||
"List of network layer interfaces assigned to the router | "List of network layer interfaces assigned to the router | |||
instance."; | instance."; | |||
leaf name { | leaf name { | |||
skipping to change at page 28, line 40 | skipping to change at page 29, line 48 | |||
description | description | |||
"Container for the list of configured routing protocol | "Container for the list of configured routing protocol | |||
instances."; | instances."; | |||
list routing-protocol { | list routing-protocol { | |||
key "name"; | key "name"; | |||
description | description | |||
"An instance of a routing protocol."; | "An instance of a routing protocol."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the routing protocol instance."; | "An arbitrary name of the routing protocol instance."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the routing protocol | "Textual description of the routing protocol | |||
instance."; | instance."; | |||
} | } | |||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
description | ||||
"Enable/disable the routing protocol instance. | ||||
If this parameter is false, the parent routing | ||||
protocol instance is disabled, despite any other | ||||
configuration that might be present. | ||||
"; | ||||
} | ||||
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-routing-tables { | container connected-routing-tables { | |||
description | description | |||
"Container for connected routing tables."; | "Container for connected routing tables."; | |||
list routing-table { | list connected-routing-table { | |||
must "not(../../../../routing-tables/" | must "not(//routing/routing-tables/" | |||
+ "routing-table[rt:name=current()/" | + "routing-table[name=current()/" | |||
+ "preceding-sibling::routing-table/name]/" | + "preceding-sibling::connected-routing-table/" | |||
+ "address-family=../../../../routing-tables/" | + "name]/address-family=//routing/routing-tables/" | |||
+ "routing-table[rt:name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
+ "address-family and ../../../../routing-tables/" | + "address-family and //routing/routing-tables/" | |||
+ "routing-table[rt:name=current()/" | + "routing-table[name=current()/" | |||
+ "preceding-sibling::routing-table/name]/safi=../" | + "preceding-sibling::connected-routing-table/" | |||
+ "../../../routing-tables/" | + "name]/safi=//routing/routing-tables/" | |||
+ "routing-table[rt:name=current()/name]/safi)" { | + "routing-table[name=current()/name]/safi)" { | |||
error-message "Each routing protocol may have no " | error-message "Duplicate address family for " | |||
+ "more than one connected routing " | + "connected routing table."; | |||
+ "table for each AFN and SAFI."; | ||||
description | description | |||
"For each AFN/SAFI pair there may be at most one | "For each AFN/SAFI pair there may be at most one | |||
connected routing table."; | connected routing table."; | |||
} | } | |||
key "name"; | key "name"; | |||
description | description | |||
"List of routing tables to which the routing protocol | "List of routing tables to which the routing protocol | |||
instance is connected. | instance is connected. | |||
If no connected routing table is defined for an | If no connected routing table is defined for an | |||
address family, the routing protocol should be | address family, the routing protocol should be | |||
connected by default to the main routing table for | connected by default to the main routing table for | |||
that address family. | that address family. | |||
"; | "; | |||
leaf name { | leaf name { | |||
type leafref { | type leafref { | |||
path "../../../../../routing-tables/routing-table/" | path "/routing/routing-tables/routing-table/name"; | |||
+ "name"; | ||||
} | } | |||
description | description | |||
"Reference to an existing routing table."; | "Name of an existing routing table."; | |||
} | } | |||
leaf import-filter { | leaf import-filter { | |||
type leafref { | type leafref { | |||
path "/routing/route-filters/route-filter/name"; | path "/routing/route-filters/route-filter/name"; | |||
} | } | |||
description | description | |||
"Reference to a route filter that is used for | "Reference to a route filter that is used for | |||
filtering routes passed from this routing protocol | filtering routes passed from this routing protocol | |||
instance to the routing table specified by the | instance to the routing table specified by the | |||
'name' sibling node. If this leaf is not present, | 'name' sibling node. | |||
the behavior is protocol-specific, but typically | ||||
it means that all routes are accepted."; | If this leaf is not present, the behavior is | |||
protocol-specific, but typically it means that all | ||||
routes are accepted. | ||||
"; | ||||
} | } | |||
leaf export-filter { | leaf export-filter { | |||
type leafref { | type leafref { | |||
path "/routing/route-filters/route-filter/name"; | path "/routing/route-filters/route-filter/name"; | |||
} | } | |||
description | description | |||
"Reference to a route filter that is used for | "Reference to a route filter that is used for | |||
filtering routes passed from the routing table | filtering routes passed from the routing table | |||
specified by the 'name' sibling node to this | specified by the 'name' sibling node to this | |||
routing protocol instance. If this leaf is not | routing protocol instance. | |||
present, the behavior is protocol-specific - | ||||
typically it means that all routes are accepted, | If this leaf is not present, the behavior is | |||
except for the 'direct' and 'static' | protocol-specific - typically it means that all | |||
pseudo-protocols which accept no routes from any | routes are accepted. | |||
routing table."; | ||||
The 'direct' and 'static' pseudo-protocols accept | ||||
no routes from any routing table. | ||||
"; | ||||
} | } | |||
} | } | |||
} | } | |||
container static-routes { | container static-routes { | |||
must "../type='rt:static'" { | when "../type='rt:static'" { | |||
error-message "Static routes may be configured only " | ||||
+ "for 'static' routing protocol."; | ||||
description | description | |||
"This container is only valid for the 'static' | "This container is only valid for the 'static' | |||
routing protocol."; | routing protocol."; | |||
} | } | |||
description | description | |||
"Configuration of 'static' pseudo-protocol."; | "Configuration of 'static' pseudo-protocol. | |||
Address family specific modules should augment this | ||||
node with lists of routes. | ||||
"; | ||||
} | } | |||
} | } | |||
} | } | |||
container routing-tables { | } | |||
container routing-tables { | ||||
description | ||||
"Container for configured routing tables."; | ||||
list routing-table { | ||||
key "name"; | ||||
description | description | |||
"Container for configured routing tables."; | "Each entry represents a routing table identified by the | |||
list routing-table { | 'name' key. All routes in a routing table must have the | |||
key "name"; | same AFN and SAFI."; | |||
leaf name { | ||||
type string; | ||||
description | description | |||
"Each entry represents a routing table identified by the | "An arbitrary name of the routing table."; | |||
'name' key. All routes in a routing table must have the | } | |||
same AFN and SAFI."; | uses afn-safi; | |||
leaf name { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"The name of the routing table."; | "Textual description of the routing table."; | |||
} | } | |||
uses afn-safi; | container routes { | |||
leaf description { | config "false"; | |||
type string; | description | |||
description | "Current contents of the routing table (operational state | |||
"Textual description of the routing table."; | data)."; | |||
} | list route { | |||
container routes { | ||||
config "false"; | ||||
description | description | |||
"Current contents of the routing table (operational | "A routing table entry. This data node must augmented | |||
state data)."; | with information specific for routes of each address | |||
list route { | family."; | |||
description | uses route-content; | |||
"A routing table entry. This data node must augmented | leaf source-protocol { | |||
with information specific for routes of each address | type leafref { | |||
family."; | path "/routing/router/routing-protocols/" | |||
uses route-content; | + "routing-protocol/name"; | |||
leaf source-protocol { | ||||
type leafref { | ||||
path "/routing/router/routing-protocols/" | ||||
+ "routing-protocol/name"; | ||||
} | ||||
mandatory "true"; | ||||
description | ||||
"The name of the routing protocol instance from | ||||
which the route comes. This routing protocol must | ||||
be configured (automatically or manually) in the | ||||
device."; | ||||
} | ||||
leaf age { | ||||
type uint32; | ||||
units "seconds"; | ||||
mandatory "true"; | ||||
description | ||||
"The number of seconds since the parent route was | ||||
created or last updated."; | ||||
} | } | |||
mandatory "true"; | ||||
description | ||||
"The name of an existing routing protocol instance | ||||
from which the route comes."; | ||||
} | ||||
leaf last-updated { | ||||
type yang:date-and-time; | ||||
description | ||||
"Time stamp of the last modification of the route. If | ||||
the route was never modified, it is the time when | ||||
the route was inserted into the routing table."; | ||||
} | } | |||
} | } | |||
container recipient-routing-tables { | } | |||
description | container recipient-routing-tables { | |||
"Container for recipient routing tables."; | description | |||
list recipient-routing-table { | "Container for recipient routing tables."; | |||
key "name"; | list recipient-routing-table { | |||
must "name != ../../name" { | ||||
error-message "Source and recipient routing tables " | ||||
+ "are identical."; | ||||
description | description | |||
"A list of routing tables that receive routes from | "A routing table must not appear among its recipient | |||
this routing table."; | routing tables."; | |||
leaf name { | } | |||
type leafref { | must "//routing/routing-tables/" | |||
path "/routing/router/routing-tables/" | + "routing-table[name=current()/name]/" | |||
+ "routing-table/name"; | + "address-family=../../address-family and //routing/" | |||
} | + "routing-tables/routing-table[name=current()/name]/" | |||
description | + "safi=../../safi" { | |||
"The name of the recipient routing table."; | error-message "Address family mismatch."; | |||
description | ||||
"Address family of the recipient routing table must | ||||
match the source table."; | ||||
} | ||||
key "name"; | ||||
description | ||||
"List of routing tables that receive routes from this | ||||
routing table."; | ||||
leaf name { | ||||
type leafref { | ||||
path "/routing/routing-tables/routing-table/name"; | ||||
} | } | |||
leaf filter { | description | |||
type leafref { | "The name of the recipient routing table."; | |||
path "/routing/route-filters/route-filter/name"; | ||||
} | } | |||
description | leaf filter { | |||
"A route filter which is applied to the routes | type leafref { | |||
passed on to the recipient routing table."; | path "/routing/route-filters/route-filter/name"; | |||
} | } | |||
description | ||||
"A route filter which is applied to the routes passed | ||||
on to the recipient routing table."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container route-filters { | container route-filters { | |||
description | description | |||
"Container for configured route filters."; | "Container for configured route filters."; | |||
list route-filter { | list route-filter { | |||
key "name"; | key "name"; | |||
description | description | |||
"Route filters are used for filtering and/or manipulating | "Route filters are used for filtering and/or manipulating | |||
routes that are passed between a routing protocol and a | routes that are passed between a routing protocol and a | |||
routing table or vice versa, or between two routing | routing table or vice versa, or between two routing | |||
tables. It is expected that other modules augment this | tables. | |||
list with contents specific for a particular route filter | ||||
type."; | It is expected that other modules augment this list with | |||
contents specific for a particular route filter type. | ||||
"; | ||||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the route filter."; | "An arbitrary name of the route filter."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route filter."; | "Textual description of the route filter."; | |||
} | } | |||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base route-filter; | base route-filter; | |||
} | } | |||
default "rt:deny-all-route-filter"; | mandatory "true"; | |||
description | description | |||
"Type of the route-filter - an identity derived from the | "Type of the route-filter - an identity derived from the | |||
'route-filter' base identity. The default value | 'route-filter' base identity."; | |||
represents an all-blocking filter."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
7. IPv4 Unicast Routing YANG Module | 7. 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). | |||
skipping to change at page 34, line 11 | skipping to change at page 36, line 11 | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
7. IPv4 Unicast Routing YANG Module | 7. 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@2012-07-09.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2012-10-04.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 34, line 49 | skipping to change at page 36, line 49 | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz> | |||
"; | "; | |||
description | description | |||
"This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
configuration and operational state data for IPv4 unicast | configuration and operational state data for IPv4 unicast | |||
routing. | routing. | |||
Every implementation must preconfigure a routing table with the | ||||
name 'main-ipv4-unicast', which is the main routing table for | ||||
IPv4 unicast. | ||||
Copyright (c) 2012 IETF Trust and the persons identified as | Copyright (c) 2012 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(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 2012-07-09 { | revision 2012-10-04 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
skipping to change at page 36, line 43 | skipping to change at page 38, line 39 | |||
list route { | list route { | |||
key "id"; | key "id"; | |||
ordered-by "user"; | ordered-by "user"; | |||
description | description | |||
"A user-ordered list of static routes."; | "A user-ordered list of static routes."; | |||
leaf id { | leaf id { | |||
type uint32 { | type uint32 { | |||
range "1..max"; | range "1..max"; | |||
} | } | |||
description | description | |||
'Numeric identifier of the route. | "Numeric identifier of the route. | |||
It is not required that the routes be sorted according | It is not required that the routes be sorted by their | |||
to their "id". | 'id'. | |||
'; | "; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
uses rt:route-content; | uses rt:route-content; | |||
uses route-content { | uses route-content { | |||
refine "dest-prefix" { | refine "dest-prefix" { | |||
mandatory "true"; | mandatory "true"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at page 37, line 16 | skipping to change at page 39, line 11 | |||
uses rt:route-content; | uses rt:route-content; | |||
uses route-content { | uses route-content { | |||
refine "dest-prefix" { | refine "dest-prefix" { | |||
mandatory "true"; | mandatory "true"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | augment "/rt:routing/rt:routing-tables/rt:routing-table/rt:routes/" | |||
+ "rt:routes/rt:route" { | + "rt:route" { | |||
when "../../rt:address-family='ipv4' and " | when "../../rt:address-family='ipv4' and " | |||
+ "../../rt:safi='nlri-unicast'" { | + "../../rt:safi='nlri-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"This augment defines the content of IPv4 unicast routes."; | "This augment defines the content of IPv4 unicast routes."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8. IPv6 Unicast Routing YANG Module | 8. 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@2012-07-09.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2012-10-04.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 39, line 8 | skipping to change at page 41, line 8 | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz> | |||
"; | "; | |||
description | description | |||
"This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
configuration and operational state data for IPv6 unicast | configuration and operational state data for IPv6 unicast | |||
routing. | routing. | |||
Every implementation must preconfigure a routing table with the | ||||
name 'main-ipv6-unicast', which is the main routing table for | ||||
IPv6 unicast. | ||||
Copyright (c) 2012 IETF Trust and the persons identified as | Copyright (c) 2012 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(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 2012-07-09 { | revision 2012-10-04 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
skipping to change at page 40, line 36 | skipping to change at page 42, line 33 | |||
uses route-content; | uses route-content; | |||
} | } | |||
/* Data nodes */ | /* Data nodes */ | |||
augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | |||
when "/if:interfaces/if:interface[name=current()/name]/ip:ipv6/" | when "/if:interfaces/if:interface[name=current()/name]/ip:ipv6/" | |||
+ "ip:enabled='true'" { | + "ip:enabled='true'" { | |||
description | description | |||
"This augment is only valid for router interfaces with | "This augment is only valid for router interfaces with | |||
enabled IPv6. | enabled IPv6."; | |||
NOTE: Parameter 'is-router' is not included, it is expected | ||||
that it will be implemented by the 'ietf-ip' module. | ||||
"; | ||||
} | } | |||
description | description | |||
"IPv6-specific parameters of router interfaces."; | "IPv6-specific parameters of router interfaces."; | |||
container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
description | description | |||
"Parameters of IPv6 Router Advertisements."; | "Parameters of IPv6 Router Advertisements."; | |||
reference | reference | |||
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6). | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)."; | |||
RFC 4862: IPv6 Stateless Address Autoconfiguration. | ||||
"; | ||||
leaf send-advertisements { | leaf send-advertisements { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"A flag indicating whether or not the router sends periodic | "A flag indicating whether or not the router sends periodic | |||
Router Advertisements and responds to Router | Router Advertisements and responds to Router | |||
Solicitations."; | Solicitations."; | |||
} | } | |||
leaf max-rtr-adv-interval { | leaf max-rtr-adv-interval { | |||
type uint16 { | type uint16 { | |||
skipping to change at page 41, line 27 | skipping to change at page 43, line 16 | |||
units "seconds"; | units "seconds"; | |||
default "600"; | default "600"; | |||
description | description | |||
"The maximum time allowed between sending unsolicited | "The maximum time allowed between sending unsolicited | |||
multicast Router Advertisements from the interface."; | multicast Router Advertisements from the interface."; | |||
} | } | |||
leaf min-rtr-adv-interval { | leaf min-rtr-adv-interval { | |||
type uint16 { | type uint16 { | |||
range "3..1350"; | range "3..1350"; | |||
} | } | |||
must ". <= 0.75 * ../max-rtr-adv-interval" { | ||||
description | ||||
"The value must be no greater than | ||||
3/4*max-rtr-adv-interval."; | ||||
} | ||||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The minimum time allowed between sending unsolicited | "The minimum time allowed between sending unsolicited | |||
multicast Router Advertisements from the interface. | multicast Router Advertisements from the interface. | |||
Must be no greater than 0.75 * max-rtr-adv-interval. | Must be no greater than 0.75 * max-rtr-adv-interval. | |||
Its default value is dynamic: | Its default value is dynamic: | |||
- if max-rtr-adv-interval >= 9 seconds, the default value | - if max-rtr-adv-interval >= 9 seconds, the default value | |||
skipping to change at page 45, line 30 | skipping to change at page 47, line 23 | |||
list route { | list route { | |||
key "id"; | key "id"; | |||
ordered-by "user"; | ordered-by "user"; | |||
description | description | |||
"A user-ordered list of static routes."; | "A user-ordered list of static routes."; | |||
leaf id { | leaf id { | |||
type uint32 { | type uint32 { | |||
range "1..max"; | range "1..max"; | |||
} | } | |||
description | description | |||
'Numeric identifier of the route. | "Numeric identifier of the route. | |||
It is not required that the routes be sorted according | It is not required that the routes be sorted by their | |||
to their "id". | 'id'. | |||
'; | "; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
uses rt:route-content; | uses rt:route-content; | |||
uses route-content { | uses route-content { | |||
refine "dest-prefix" { | refine "dest-prefix" { | |||
mandatory "true"; | mandatory "true"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | augment "/rt:routing/rt:routing-tables/rt:routing-table/rt:routes/" | |||
+ "rt:routes/rt:route" { | + "rt:route" { | |||
when "../../rt:address-family='ipv6' and " | when "../../rt:address-family='ipv6' and " | |||
+ "../../rt:safi='nlri-unicast'" { | + "../../rt:safi='nlri-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
} | } | |||
description | description | |||
"This augment defines the content of IPv6 unicast routes."; | "This augment defines the content of IPv6 unicast routes."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
} | } | |||
skipping to change at page 49, line 29 | skipping to change at page 51, line 29 | |||
The vulnerable "config true" subtrees and data nodes are the | The vulnerable "config true" subtrees and data nodes are the | |||
following: | following: | |||
/rt:routing/rt:router/rt:interfaces/rt:interface This list assigns a | /rt:routing/rt:router/rt:interfaces/rt:interface This list assigns a | |||
network layer interface to a router instance and may also specify | network layer interface to a router instance and may also specify | |||
interface parameters related to routing. | interface parameters related to routing. | |||
/rt:routing/rt:router/rt:routing-protocols/rt:routing-protocol This | /rt:routing/rt:router/rt:routing-protocols/rt:routing-protocol This | |||
list specifies the routing protocols configured on a device. | list specifies the routing protocols configured on a device. | |||
/rt:routing/rt:router/rt:route-filters/rt:route-filter This list | /rt:routing/rt:route-filters/rt:route-filter This list specifies the | |||
specifies the configured route filters which represent the | configured route filters which represent administrative policies | |||
administrative policies for redistributing and modifying routing | for redistributing and modifying routing information. | |||
information. | ||||
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. | |||
11. Acknowledgments | 11. Acknowledgments | |||
The author wishes to thank Martin Bjorklund, Joel Halpern, Thomas | The author wishes to thank Martin Bjorklund, Joel Halpern, | |||
Morin, Tom Petch, Juergen Schoenwaelder, Dave Thaler and Yi Yang for | Wes Hardaker, Andrew McGregor, Thomas Morin, Tom Petch, | |||
their helpful comments and suggestions. | Juergen Schoenwaelder, Phil Shafer, Dave Thaler and Yi Yang for their | |||
helpful comments and suggestions. | ||||
12. References | 12. References | |||
12.1. Normative References | 12.1. Normative References | |||
[IANA-IF-AF] | [IANA-IF-AF] | |||
Bjorklund, M., "IANA Interface Type and Address Family | Bjorklund, M., "IANA Interface Type and Address Family | |||
YANG Modules", draft-ietf-netmod-iana-if-type-02 (work in | YANG Modules", draft-ietf-netmod-iana-if-type-04 (work in | |||
progress), April 2012. | progress), June 2012. | |||
[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. | |||
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
September 2007. | September 2007. | |||
skipping to change at page 51, line 36 | skipping to change at page 53, line 36 | |||
September 2010. | September 2010. | |||
[RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
RFC 6021, September 2010. | RFC 6021, 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. | |||
[YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | |||
Configuration", draft-ietf-netmod-interfaces-cfg-04 (work | Configuration", draft-ietf-netmod-interfaces-cfg-06 (work | |||
in progress), April 2012. | in progress), September 2012. | |||
[YANG-IP] Bjorklund, M., "A YANG Data Model for IP Configuration", | [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Configuration", | |||
draft-ietf-netmod-ip-cfg-03 (work in progress), | draft-ietf-netmod-ip-cfg-06 (work in progress), | |||
April 2012. | September 2012. | |||
12.2. Informative References | 12.2. Informative References | |||
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | |||
Data Model Documents", RFC 6087, 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. Example: Adding a New Routing Protocol | Appendix A. Example: Adding a New Routing Protocol | |||
This appendix demonstrates how the core routing data model can be | This appendix demonstrates how the core routing data model can be | |||
extended to support a new routing protocol. The YANG module | extended to support a new routing protocol. The YANG module | |||
"example-rip" shown below is intended only as an illustration rather | "example-rip" shown below is intended only as an illustration rather | |||
than a real definition of a data model for the RIP routing protocol. | than a real definition of a data model for the RIP routing protocol. | |||
For the sake of brevity, we do not follow all the guidelines | For the sake of brevity, we do not follow all the guidelines | |||
specified in [RFC6087]. See also Section 4.4.2. | specified in [RFC6087]. See also Section 4.4.2. | |||
<CODE BEGINS> file "example-rip@2012-07-09.yang" | <CODE BEGINS> file "example-rip@2012-10-04.yang" | |||
module example-rip { | module example-rip { | |||
namespace "http://example.com/rip"; | namespace "http://example.com/rip"; | |||
prefix "rip"; | prefix "rip"; | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix "rt"; | |||
} | } | |||
skipping to change at page 53, line 4 | skipping to change at page 55, line 4 | |||
type rip-metric; | type rip-metric; | |||
} | } | |||
leaf tag { | leaf tag { | |||
type uint16; | type uint16; | |||
default "0"; | default "0"; | |||
description | description | |||
"This leaf may be used to carry additional info, e.g. AS | "This leaf may be used to carry additional info, e.g. AS | |||
number."; | number."; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | augment "/rt:routing/rt:routing-tables/rt:routing-table/rt:routes/" | |||
+ "rt:routes/rt:route" { | + "rt:route" { | |||
when "../../../../rt:routing-protocols/" | ||||
+ "rt:routing-protocol[rt:name=current()/rt:source-protocol]/" | ||||
+ "rt:type='rip:rip'" { | ||||
description | ||||
"This augment is only valid if the source protocol from which | ||||
the route originated is RIP."; | ||||
} | ||||
description | description | |||
"RIP-specific route components."; | "RIP-specific route components."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/rt:route" { | |||
description | description | |||
"Add RIP-specific route content."; | "Add RIP-specific route content."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
skipping to change at page 55, line 5 | skipping to change at page 56, line 5 | |||
default "30"; | default "30"; | |||
description | description | |||
"Time interval between periodic updates."; | "Time interval between periodic updates."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Appendix B. Example: Reply to the NETCONF <get> Message | Appendix B. Example: NETCONF <get> Reply | |||
This section contains a sample reply to the NETCONF <get> message, | This section contains a sample reply to the NETCONF <get> message, | |||
which could be sent by a server supporting (i.e., advertising them in | which could be sent by a server supporting (i.e., advertising them in | |||
the NETCONF <hello> message) the following YANG modules: | the NETCONF <hello> message) the following YANG modules: | |||
o ietf-interfaces [YANG-IF], | o ietf-interfaces [YANG-IF], | |||
o ietf-ip [YANG-IP], | o ietf-ip [YANG-IP], | |||
o ietf-routing (Section 6), | o ietf-routing (Section 6), | |||
skipping to change at page 57, line 10 | skipping to change at page 58, line 10 | |||
<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> | |||
<rt:routing> | <rt:routing> | |||
<rt:router> | <rt:router> | |||
<rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
<rt:router-id>192.0.2.1</rt:router-id> | ||||
<rt:description>Router A</rt:description> | ||||
<rt:main-routing-tables> | ||||
<rt:main-routing-table> | ||||
<rt:address-family>ipv4</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:name>ipv4-unicast</rt:name> | ||||
</rt:main-routing-table> | ||||
<rt:main-routing-table> | ||||
<rt:address-family>ipv6</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:name>ipv6-unicast</rt:name> | ||||
</rt:main-routing-table> | ||||
</rt:main-routing-tables> | ||||
<rt:interfaces> | <rt:interfaces> | |||
<rt:interface> | <rt:interface> | |||
<rt:name>eth0</rt:name> | <rt:name>eth0</rt:name> | |||
</rt:interface> | </rt:interface> | |||
<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> | |||
skipping to change at page 58, line 5 | skipping to change at page 59, line 19 | |||
</v4ur:ipv4> | </v4ur:ipv4> | |||
<v6ur:ipv6> | <v6ur:ipv6> | |||
<v6ur:route> | <v6ur:route> | |||
<v6ur:id>1</v6ur:id> | <v6ur:id>1</v6ur:id> | |||
<v6ur:dest-prefix>::/0</v6ur:dest-prefix> | <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | |||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | |||
</v6ur:route> | </v6ur:route> | |||
</v6ur:ipv6> | </v6ur:ipv6> | |||
</rt:static-routes> | </rt:static-routes> | |||
<rt:connected-routing-tables> | <rt:connected-routing-tables> | |||
<rt:routing-table> | <rt:connected-routing-table> | |||
<rt:name>main-ipv4-unicast</rt:name> | <rt:name>ipv4-unicast</rt:name> | |||
</rt:routing-table> | </rt:connected-routing-table> | |||
<rt:routing-table> | <rt:connected-routing-table> | |||
<rt:name>main-ipv6-unicast</rt:name> | <rt:name>ipv6-unicast</rt:name> | |||
</rt:routing-table> | </rt:connected-routing-table> | |||
</rt:connected-routing-tables> | </rt:connected-routing-tables> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
<rt:routing-tables> | ||||
<rt:routing-table> | ||||
<rt:name>main-ipv4-unicast</rt:name> | ||||
<rt:routes> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:age>3512</rt:age> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:age>3512</rt:age> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
<rt:source-protocol>st0</rt:source-protocol> | ||||
<v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
<rt:age>2551</rt:age> | ||||
</rt:route> | ||||
</rt:routes> | ||||
</rt:routing-table> | ||||
<rt:routing-table> | ||||
<rt:name>main-ipv6-unicast</rt:name> | ||||
<rt:address-family>ipv6</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:routes> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:age>3513</rt:age> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:age>3513</rt:age> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>::/0</v6ur:dest-prefix> | ||||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | ||||
<rt:source-protocol>st0</rt:source-protocol> | ||||
<rt:age>2550</rt:age> | ||||
</rt:route> | ||||
</rt:routes> | ||||
</rt:routing-table> | ||||
</rt:routing-tables> | ||||
</rt:router> | </rt:router> | |||
<rt:routing-tables> | ||||
<rt:routing-table> | ||||
<rt:name>ipv4-unicast</rt:name> | ||||
<rt:address-family>ipv4</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:routes> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
<rt:source-protocol>st0</rt:source-protocol> | ||||
<v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
<rt:last-updated>2012-10-02T18:02:45+01:00</rt:last-updated> | ||||
</rt:route> | ||||
</rt:routes> | ||||
</rt:routing-table> | ||||
<rt:routing-table> | ||||
<rt:name>ipv6-unicast</rt:name> | ||||
<rt:address-family>ipv6</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:routes> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | ||||
<rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
</rt:route> | ||||
<rt:route> | ||||
<v6ur:dest-prefix>::/0</v6ur:dest-prefix> | ||||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | ||||
<rt:source-protocol>st0</rt:source-protocol> | ||||
<rt:last-updated>2012-10-02T18:02:45+01:00</rt:last-updated> | ||||
</rt:route> | ||||
</rt:routes> | ||||
</rt:routing-table> | ||||
</rt:routing-tables> | ||||
</rt:routing> | </rt:routing> | |||
</data> | </data> | |||
</rpc-reply> | </rpc-reply> | |||
Appendix C. Change Log | Appendix C. Change Log | |||
RFC Editor: remove this section upon publication as an RFC. | RFC Editor: remove this section upon publication as an RFC. | |||
C.1. Changes Between Versions -03 and -04 | C.1. Changes Between Versions -04 and -05 | |||
o Routing tables are now global, i.e., "routing-tables" is a child | ||||
of "routing" rather than "router". | ||||
o "must" statement for "static-routes" changed to "when". | ||||
o Added "main-routing-tables" containing references to main routing | ||||
tables for each address family. | ||||
o Removed the defaults for "address-family" and "safi" and made them | ||||
mandatory. | ||||
o Removed the default for route-filter/type and made this leaf | ||||
mandatory. | ||||
o If there is no active route for a given destination, the "active- | ||||
route" RPC returns no output. | ||||
o Added "enabled" switch under "routing-protocol". | ||||
o Added "router-type" identity and "type" leaf under "router". | ||||
o Route attribute "age" changed to "last-updated", its type is | ||||
"yang:date-and-time". | ||||
o The "direct" pseudo-protocol is always connected to main routing | ||||
tables. | ||||
o Entries in the list of connected routing tables renamed from | ||||
"routing-table" to "connected-routing-table". | ||||
o Added "must" constraint saying that a routing table must not be | ||||
its own recipient. | ||||
C.2. 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". | |||
C.2. Changes Between Versions -02 and -03 | C.3. 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 61, line 7 | skipping to change at page 62, line 43 | |||
"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". | |||
C.3. Changes Between Versions -01 and -02 | C.4. 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 B now uses IP addresses from blocks | o The example in Appendix B now uses IP addresses from blocks | |||
reserved for documentation. | reserved for documentation. | |||
o Direct routes appear by default in the FIB 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. | |||
o The "when" statement is only used with "augment", "must" is used | o The "when" statement is only used with "augment", "must" is used | |||
elsewhere. | elsewhere. | |||
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. | |||
C.4. Changes Between Versions -00 and -01 | C.5. 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. 118 change blocks. | ||||
477 lines changed or deleted | 589 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/ |