draft-ietf-netmod-routing-cfg-10.txt | draft-ietf-netmod-routing-cfg-11.txt | |||
---|---|---|---|---|
NETMOD L. Lhotka | NETMOD L. Lhotka | |||
Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
Intended status: Standards Track July 13, 2013 | Intended status: Standards Track October 18, 2013 | |||
Expires: January 14, 2014 | Expires: April 21, 2014 | |||
A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
draft-ietf-netmod-routing-cfg-10 | draft-ietf-netmod-routing-cfg-11 | |||
Abstract | Abstract | |||
This document contains a specification of three YANG modules. | This document contains a specification of three YANG modules. | |||
Together they form the core routing data model which serves as a | Together they form the core routing data model which serves as a | |||
framework for configuring and managing a routing subsystem. It is | framework for configuring and managing a routing subsystem. It is | |||
expected that these modules will be augmented by additional YANG | expected that these modules will be augmented by additional YANG | |||
modules defining data models for individual routing protocols and | modules defining data models for individual routing protocols and | |||
other related functions. The core routing data model provides common | other related functions. The core routing data model provides common | |||
building blocks for such extensions - router instances, routes, | building blocks for such extensions - routing instances, routes, | |||
routing tables, routing protocols and route filters. | routing information bases (RIB), routing protocols and route filters. | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
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 14, 2014. | This Internet-Draft will expire on April 21, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 17 | skipping to change at page 2, line 17 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5 | |||
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 | |||
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 | |||
2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | |||
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4. The Design of the Core Routing Data Model . . . . . . . . . . 9 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 9 | |||
4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1. System-Controlled and User-Controlled List Entries . . . . 12 | |||
4.1.1. Parameters of IPv6 Router Interfaces . . . . . . . . . 13 | 4.2. Simple versus Advanced Routers . . . . . . . . . . . . . . 13 | |||
4.2. Routes . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 15 | |||
4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . . 15 | |||
4.3.1. User-Defined Routing Tables . . . . . . . . . . . . . 16 | 5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . . 16 | |||
4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 17 | 5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
4.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 17 | 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . . 17 | |||
4.4.2. Defining New Routing Protocols . . . . . . . . . . . . 18 | 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . . 18 | |||
4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 19 | 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . . 18 | |||
4.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 20 | 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 19 | |||
5. Interactions with Other YANG Modules . . . . . . . . . . . . . 21 | 5.4.2. Defining New Routing Protocols . . . . . . . . . . . . 21 | |||
5.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 21 | 5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
5.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 21 | 5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 23 | |||
6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 23 | 6. Interactions with Other YANG Modules . . . . . . . . . . . . . 24 | |||
7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 42 | 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 24 | |||
8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 46 | 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 24 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 59 | 7. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 26 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 61 | 8. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 48 | |||
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 62 | 9. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 55 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 63 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 63 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 72 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 63 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73 | |||
Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 64 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 74 | |||
A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 64 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 74 | |||
A.2. Operational State Data . . . . . . . . . . . . . . . . . . 65 | 13.2. Informative References . . . . . . . . . . . . . . . . . . 74 | |||
Appendix B. Example: Adding a New Routing Protocol . . . . . . . 68 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 75 | |||
Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 71 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 75 | |||
Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 77 | A.2. Operational State Data . . . . . . . . . . . . . . . . . . 77 | |||
D.1. Changes Between Versions -09 and -10 . . . . . . . . . . . 77 | Appendix B. Example: Adding a New Routing Protocol . . . . . . . 79 | |||
D.2. Changes Between Versions -08 and -09 . . . . . . . . . . . 77 | Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 82 | |||
D.3. Changes Between Versions -07 and -08 . . . . . . . . . . . 77 | Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 88 | |||
D.4. Changes Between Versions -06 and -07 . . . . . . . . . . . 77 | D.1. Changes Between Versions -10 and -11 . . . . . . . . . . . 88 | |||
D.5. Changes Between Versions -05 and -06 . . . . . . . . . . . 78 | D.2. Changes Between Versions -09 and -10 . . . . . . . . . . . 88 | |||
D.6. Changes Between Versions -04 and -05 . . . . . . . . . . . 78 | D.3. Changes Between Versions -08 and -09 . . . . . . . . . . . 89 | |||
D.7. Changes Between Versions -03 and -04 . . . . . . . . . . . 79 | D.4. Changes Between Versions -07 and -08 . . . . . . . . . . . 89 | |||
D.8. Changes Between Versions -02 and -03 . . . . . . . . . . . 79 | D.5. Changes Between Versions -06 and -07 . . . . . . . . . . . 89 | |||
D.9. Changes Between Versions -01 and -02 . . . . . . . . . . . 80 | D.6. Changes Between Versions -05 and -06 . . . . . . . . . . . 89 | |||
D.10. Changes Between Versions -00 and -01 . . . . . . . . . . . 80 | D.7. Changes Between Versions -04 and -05 . . . . . . . . . . . 90 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 82 | D.8. Changes Between Versions -03 and -04 . . . . . . . . . . . 90 | |||
D.9. Changes Between Versions -02 and -03 . . . . . . . . . . . 91 | ||||
D.10. Changes Between Versions -01 and -02 . . . . . . . . . . . 91 | ||||
D.11. Changes Between Versions -00 and -01 . . . . . . . . . . . 92 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 93 | ||||
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 6, line 7 | skipping to change at page 6, line 7 | |||
prefix, then it is up to the routing algorithm to select the | prefix, then it is up to the routing algorithm to select the | |||
active route (or several active routes in the case of multi-path | active route (or several active routes in the case of multi-path | |||
routing). | routing). | |||
core routing data model: YANG data model resulting from the | core routing data model: YANG data model resulting from the | |||
combination of "ietf-routing", "ietf-ipv4-unicast-routing" and | combination of "ietf-routing", "ietf-ipv4-unicast-routing" and | |||
"ietf-ipv6-unicast-routing" modules. | "ietf-ipv6-unicast-routing" modules. | |||
direct route: a route to a directly connected network. | direct route: a route to a directly connected network. | |||
routing information base (RIB): An object containing routes together | ||||
with other information. See Section 5.3 for details. | ||||
system-controlled entry: An entry of a list in operational state | system-controlled entry: An entry of a list in operational state | |||
data ("config false") that is created by the system independently | data ("config false") that is created by the system independently | |||
of what has been explicitly configured. An example is the default | of what has been explicitly configured. See Section 4.1 for | |||
routing table. A client cannot cause this entry to be deleted but | details. | |||
may be able to configure it. | ||||
user-controlled entry: An entry of a list in operational state data | user-controlled entry: An entry of a list in operational state data | |||
("config false") that is created and deleted as a direct | ("config false") that is created and deleted as a direct | |||
consequence of certain configuration changes. An example is an | consequence of certain configuration changes. See Section 4.1 for | |||
additional user-defined routing table. | details. | |||
2.2. Tree Diagrams | 2.2. Tree Diagrams | |||
A simplified graphical representation of the complete data tree is | A simplified graphical representation of the complete data tree is | |||
presented in Appendix A, and similar diagrams of its various subtrees | presented in Appendix A, and similar diagrams of its various subtrees | |||
appear in the main text. The meaning of the symbols in these | appear in the main text. The meaning of the symbols in these | |||
diagrams is as follows: | diagrams is as follows: | |||
o Brackets "[" and "]" enclose list keys. | o Brackets "[" and "]" enclose list keys. | |||
o Curly braces "{" and "}" contain names of optional features that | ||||
make the corresponding node conditional. | ||||
o Abbreviations before data node names: "rw" means configuration | o Abbreviations before data node names: "rw" means configuration | |||
(read-write) and "ro" state data (read-only). | (read-write) and "ro" state data (read-only). | |||
o Symbols after data node names: "?" means an optional node and "*" | o Symbols after data node names: "?" means an optional node and "*" | |||
denotes a "list" or "leaf-list". | denotes a "list" or "leaf-list". | |||
o Parentheses enclose choice and case nodes, and case nodes are also | o Parentheses enclose choice and case nodes, and case nodes are also | |||
marked with a colon (":"). | marked with a colon (":"). | |||
o Ellipsis ("...") stands for contents of subtrees that are not | o Ellipsis ("...") stands for contents of subtrees that are not | |||
shown. | shown. | |||
2.3. Prefixes in Data Node Names | 2.3. Prefixes in Data Node Names | |||
In this document, names of data nodes, RPC methods and other data | In this document, names of data nodes, RPC methods and other data | |||
model objects are used mostly without a prefix, as long as it is | model objects are often used without a prefix, as long as it is clear | |||
clear from the context in which YANG module each name is defined. | from the context in which YANG module each name is defined. | |||
Otherwise, names are prefixed using the standard prefix associated | Otherwise, names are prefixed using the standard prefix associated | |||
with the corresponding YANG module, as shown in Table 1. | with the corresponding YANG module, as shown in Table 1. | |||
+--------+---------------------------+--------------+ | +--------+---------------------------+-----------+ | |||
| Prefix | YANG module | Reference | | | Prefix | YANG module | Reference | | |||
+--------+---------------------------+--------------+ | +--------+---------------------------+-----------+ | |||
| ianaaf | iana-afn-safi | [IANA-AF] | | | if | ietf-interfaces | [YANG-IF] | | |||
| | | | | | | | | | |||
| if | ietf-interfaces | [YANG-IF] | | | ip | ietf-ip | [YANG-IP] | | |||
| | | | | | | | | | |||
| ip | ietf-ip | [YANG-IP] | | | rt | ietf-routing | Section 7 | | |||
| | | | | | | | | | |||
| rt | ietf-routing | Section 6 | | | v4ur | ietf-ipv4-unicast-routing | Section 8 | | |||
| | | | | | | | | | |||
| v4ur | ietf-ipv4-unicast-routing | Section 7 | | | v6ur | ietf-ipv6-unicast-routing | Section 9 | | |||
| | | | | | | | | | |||
| v6ur | ietf-ipv6-unicast-routing | Section 8 | | | yang | ietf-yang-types | [RFC6991] | | |||
| | | | | | | | | | |||
| yang | ietf-yang-types | [RFC6021bis] | | | inet | ietf-inet-types | [RFC6991] | | |||
| | | | | +--------+---------------------------+-----------+ | |||
| inet | ietf-inet-types | [RFC6021bis] | | ||||
+--------+---------------------------+--------------+ | ||||
Table 1: Prefixes and corresponding YANG modules | Table 1: Prefixes and corresponding YANG modules | |||
3. Objectives | 3. Objectives | |||
The initial design of the core routing data model was driven by the | The initial design of the core routing data model was driven by the | |||
following objectives: | following objectives: | |||
o The data model should be suitable for the common address families, | o The data model should be suitable for the common address families, | |||
in particular IPv4 and IPv6, and for unicast and multicast | in particular IPv4 and IPv6, and for unicast and multicast | |||
routing, as well as Multiprotocol Label Switching (MPLS). | routing, as well as Multiprotocol Label Switching (MPLS). | |||
o Simple routing setups, such as static routing, should be | o Simple routing setups, such as static routing, should be | |||
configurable in a simple way, ideally without any need to develop | configurable in a simple way, ideally without any need to develop | |||
additional YANG modules. | additional YANG modules. | |||
o On the other hand, the core routing framework must allow for | o On the other hand, the core routing framework must allow for | |||
complicated setups involving multiple routing tables and multiple | complicated setups involving multiple routing information bases | |||
routing protocols, as well as controlled redistributions of | (RIB) and multiple routing protocols, as well as controlled | |||
routing information. | redistributions of routing information. | |||
o Device vendors will want to map the data models built on this | o Device vendors will want to map the data models built on this | |||
generic framework to their proprietary data models and | generic framework to their proprietary data models and | |||
configuration interfaces. Therefore, the framework should be | configuration interfaces. Therefore, the framework should be | |||
flexible enough to facilitate such a mapping and accommodate data | flexible enough to facilitate such a mapping and accommodate data | |||
models with different logic. | models with different logic. | |||
4. The Design of the Core Routing Data Model | 4. The Design of the Core Routing Data Model | |||
The core routing data model consists of three YANG modules. The | The core routing data model consists of three YANG modules. The | |||
first module, "ietf-routing", defines the generic components of a | first module, "ietf-routing", defines the generic components of a | |||
routing system. The other two modules, "ietf-ipv4-unicast-routing" | routing system. The other two modules, "ietf-ipv4-unicast-routing" | |||
and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | |||
with additional data nodes that are needed for IPv4 and IPv6 unicast | with additional data nodes that are needed for IPv4 and IPv6 unicast | |||
routing, respectively. Figures 1 and 2 show abridged views of the | routing, respectively. Figures 1 and 2 show abridged views of the | |||
configuration and operational state data hierarchies. See Appendix A | configuration and operational state data hierarchies. See Appendix A | |||
for the complete data trees. | for the complete data trees. | |||
+--rw routing | +--rw routing | |||
+--rw router* [name] | +--rw routing-instance* [name] | |||
| +--rw name | | +--rw name | |||
| +--rw routing-instance-id? | ||||
| +--rw type? | | +--rw type? | |||
| +--rw enabled? | | +--rw enabled? | |||
| +--rw router-id? | | +--rw router-id? | |||
| +--rw description? | | +--rw description? | |||
| +--rw default-routing-tables | | +--rw default-ribs | |||
| | +--rw default-routing-table* [address-family safi] | | | +--rw default-rib* [address-family] | |||
| | +--rw address-family | | | +--rw address-family | |||
| | +--rw safi | ||||
| | +--rw name | | | +--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 routing-protocols | | +--rw routing-protocols | |||
| +--rw routing-protocol* [name] | | +--rw routing-protocol* [name] | |||
| +--rw name | | +--rw name | |||
| +--rw description? | | +--rw description? | |||
| +--rw enabled? | | +--rw enabled? | |||
| +--rw type | | +--rw type | |||
| +--rw connected-routing-tables | | +--rw connected-ribs | |||
| | ... | | | ... | |||
| +--rw static-routes | | +--rw static-routes | |||
| ... | | ... | |||
+--rw routing-tables | +--rw ribs | |||
| +--rw routing-table* [name] | | +--rw rib* [name] | |||
| +--rw name | | +--rw name | |||
| +--rw id? | ||||
| +--rw address-family | | +--rw address-family | |||
| +--rw safi | ||||
| +--rw description? | | +--rw description? | |||
| +--rw recipient-routing-tables | | +--rw recipient-ribs | |||
| +--rw recipient-routing-table* [name] | | +--rw recipient-rib* [rib-name] | |||
| ... | | ... | |||
+--rw route-filters | +--rw route-filters | |||
+--rw route-filter* [name] | +--rw route-filter* [name] | |||
+--rw name | +--rw name | |||
+--rw description? | +--rw description? | |||
+--rw type | +--rw type | |||
Figure 1: Configuration data hierarchy. | Figure 1: Configuration data hierarchy. | |||
+--ro routing-state | +--ro routing-state | |||
+--ro router* [name] | +--ro routing-instance* [id] | |||
| +--ro name | | +--ro id | |||
| +--ro name? | ||||
| +--ro type? | | +--ro type? | |||
| +--ro router-id? | | +--ro router-id? | |||
| +--ro default-routing-tables | | +--ro default-ribs | |||
| | +--ro default-routing-table* [address-family safi] | | | +--ro default-rib* [address-family] | |||
| | +--ro address-family | | | +--ro address-family | |||
| | +--ro safi | | | +--ro rib-id | |||
| | +--ro name | ||||
| +--ro interfaces | | +--ro interfaces | |||
| | +--ro interface* [name] | | | +--ro interface* [name] | |||
| | +--ro name | | | +--ro name | |||
| | +--ro v6ur:ipv6-router-advertisements | | | +--ro v6ur:ipv6-router-advertisements | |||
| | ... | | | ... | |||
| +--ro routing-protocols | | +--ro routing-protocols | |||
| +--ro routing-protocol* [name] | | +--ro routing-protocol* [name] | |||
| +--ro name | | +--ro name | |||
| +--ro type | | +--ro type | |||
| +--ro connected-routing-tables | | +--ro connected-ribs | |||
| ... | | ... | |||
+--ro routing-tables | +--ro ribs | |||
| +--ro routing-table* [name] | | +--ro rib* [id] | |||
| +--ro name | | +--ro id | |||
| +--ro name? | ||||
| +--ro address-family | | +--ro address-family | |||
| +--ro safi | ||||
| +--ro routes | | +--ro routes | |||
| | +--ro route* | | | +--ro route* [id] | |||
| | ... | | | ... | |||
| +--ro recipient-routing-tables | | +--ro recipient-ribs | |||
| +--ro recipient-routing-table* [name] | | +--ro recipient-rib* [rib-id] | |||
| ... | | ... | |||
+--ro route-filters | +--ro route-filters | |||
+--ro route-filter* [name] | +--ro route-filter* [name] | |||
+--ro name | +--ro name | |||
+--ro type | +--ro type | |||
Figure 2: Operational state data hierarchy. | Figure 2: Operational state data hierarchy. | |||
As can be seen from Figures 1 and 2, the core routing data model | As can be seen from Figures 1 and 2, the core routing data model | |||
introduces several generic components of a routing framework: | introduces several generic components of a routing framework: routing | |||
routers, routing tables containing lists of routes, routing protocols | instances, RIBs containing lists of routes, routing protocols and | |||
and route filters. The following subsections describe these | route filters. The following subsections describe these components | |||
components in more detail. | 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 | |||
routing systems can be realized. | routing systems can be realized. | |||
+--------+ | +--------+ | |||
| direct | +---+ +--------------+ +---+ +--------------+ | | direct | +---+ +--------------+ +---+ +--------------+ | |||
| routes |--->| F |--->| |<---| F |<---| | | | routes |--->| F |--->| |<---| F |<---| | | |||
+--------+ +---+ | default | +---+ | additional | | +--------+ +---+ | default | +---+ | additional | | |||
| routing | | routing | | | RIB | | RIB | | |||
+--------+ +---+ | table | +---+ | table | | +--------+ +---+ | | +---+ | | | |||
| static |--->| F |--->| |--->| F |--->| | | | static |--->| F |--->| |--->| F |--->| | | |||
| routes | +---+ +--------------+ +---+ +--------------+ | | routes | +---+ +--------------+ +---+ +--------------+ | |||
+--------+ ^ | ^ | | +--------+ ^ | ^ | | |||
| v | v | | v | v | |||
+---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
| F | | F | | F | | F | | | F | | F | | F | | F | | |||
+---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
^ | ^ | | ^ | ^ | | |||
| v | v | | v | v | |||
+----------+ +----------+ | +----------+ +----------+ | |||
| routing | | routing | | | routing | | routing | | |||
| protocol | | protocol | | | protocol | | protocol | | |||
+----------+ +----------+ | +----------+ +----------+ | |||
Figure 3: Example setup of a routing system | Figure 3: Example setup of a routing system | |||
The example in Figure 3 shows a typical (though certainly not the | The example in Figure 3 shows a typical (though certainly not the | |||
only possible) organization of a more complex routing subsystem for a | only possible) organization of a more complex routing subsystem for a | |||
single address family. Several of its features are worth mentioning: | single address family. Several of its features are worth mentioning: | |||
o Along with the default routing table, which is always present, an | o Along with the default RIB, which is always present, an additional | |||
additional routing table is configured. | RIB is configured. | |||
o Each routing protocol instance, including the "static" and | o Each routing protocol instance, including the "static" and | |||
"direct" pseudo-protocols, is connected to one routing table with | "direct" pseudo-protocols, is connected to exactly one RIB with | |||
which it can exchange routes (in both directions, except for the | which it can exchange routes (in both directions, except for the | |||
"static" and "direct" pseudo-protocols). | "static" and "direct" pseudo-protocols). | |||
o Routing tables may also be connected to each other and exchange | o RIBs may also be connected to each other and exchange routes in | |||
routes in either direction (or both). | either direction (or both). | |||
o Route exchanges along all connections may be controlled by means | o Route exchanges along all connections may be controlled by means | |||
of route filters, denoted by "F" in Figure 3. | of route filters, denoted by "F" in Figure 3. | |||
4.1. Router | 4.1. System-Controlled and User-Controlled List Entries | |||
Each router instance in the core routing data model represents a | The core routing data model defines several lists, for example "rt: | |||
logical router. The exact semantics of this term is left to | routing-instance" or "rt:rib", that have to be populated with at | |||
implementations. For example, router instances may be completely | least one entry in any properly functioning device, and additional | |||
entries may be configured by the user. | ||||
In such a list, the server creates the required item as a so-called | ||||
system-controlled entry in operational state data, i.e., inside the | ||||
"rt:routing-state" container. | ||||
Additional entries may be created in the configuration by the user | ||||
via the NETCONF protocol. These are the so-called user-controlled | ||||
entries. If the server accepts a configured user-controlled entry, | ||||
then this entry also appears in the operational state version of the | ||||
list. | ||||
Each version of the list (in operational state data and | ||||
configuration) uses its own set of list keys. In operational state, | ||||
the keys are unique numeric identifiers assigned by the server. In | ||||
configuration, the list keys are selected by the user. | ||||
The user may also provide supplemental configuration of system- | ||||
controlled entries. To do so, the user creates a new entry in the | ||||
configuration with an arbitrary key and desired configuration | ||||
contents. In order to bind this entry with the corresponding entry | ||||
in the operational state list, the user writes the operational state | ||||
key as a value of a special leaf that is defined in the data model | ||||
for this purpose. | ||||
An example can be seen in Appendix C: the "/routing-state/ | ||||
routing-instance" list has a single system-controlled entry whose | ||||
"id" key has the value "1415926535". This entry is configured by the | ||||
"/routing/routing-instance" entry whose "name" key is "rtr0". The | ||||
binding with the operational state entry is established through the | ||||
value of the leaf "routing-instance-id". | ||||
Deleting a user-controlled entry from the configuration list results | ||||
in the removal of the corresponding entry in the operational state | ||||
list. In contrast, if a system-controlled entry is deleted from the | ||||
configuration list, only the extra configuration specified in that | ||||
entry is removed but the corresponding operational state entry | ||||
remains in the list. | ||||
4.2. Simple versus Advanced Routers | ||||
The core routing data model attempts to address devices with | ||||
elementary routing functions as well as advanced routers. For simple | ||||
devices, some parts and options of the data model are not needed and | ||||
represent unnecessary complications for the implementation. | ||||
Therefore, the core routing data model makes the advanced | ||||
functionality optional by means of a feature "advanced-router". | ||||
Specifically, the following objects and options are supported only in | ||||
devices that advertise the "advanced-router" feature: | ||||
o multiple RIBs per address family, and user-controlled RIB entries | ||||
in particular, | ||||
o routing protocols connected to non-default RIBs, | ||||
o RIBs configured as receivers of routes from other RIBs, | ||||
o routes with multiple nexthops. | ||||
See the "ietf-routing" module for details. | ||||
5. Basic Building Blocks | ||||
This section describes the essential components of the core routing | ||||
data model. | ||||
5.1. Routing Instance | ||||
Each routing instance in the core routing data model represents a | ||||
logical router. The exact semantics of this term are left to | ||||
implementations. For example, routing 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. | |||
A router instance together with its operational status is represented | A routing instance together with its operational status is | |||
as an entry of the list "/routing-state/router", and identified by a | represented as an entry of the list "/routing-state/ | |||
unique name. Configuration of that router instance appears as entry | routing-instance", and identified by a unique numeric identifier. | |||
of the list "/routing/router" whose key is the router instance name. | Configuration of that router instance appears as entry of the list | |||
"/routing/routing-instance" whose key is a routing instance name | ||||
selected by the client. | ||||
An implementation MAY support multiple types of logical routers | An implementation MAY support multiple types of logical routers | |||
simultaneously. Instances of all router types are organized as | simultaneously. Instances of all routing instance types are | |||
entries of the same flat "router" list. In order to discriminate | organized as entries of the same flat "routing-instance" list. In | |||
router instances belonging to different types, the "type" leaf is | order to discriminate routing instances belonging to different types, | |||
defined as a child of the "router" node. | the "type" leaf is defined as a child of the "routing-instance" node. | |||
An implementation MAY create one or more system-controlled router | An implementation MAY create one or more system-controlled routing | |||
entries, and MAY also pose restrictions on allowed router types and | instances, and MAY also pose restrictions on allowed routing instance | |||
on the number of supported instances for each type. For example, a | types and on the number of supported instances for each type. For | |||
simple router implementation may support only one system-controlled | example, a simple router implementation may support only one system- | |||
router instance of the default type "standard-router" and may not | controlled routing instance of the default type "rt:standard-routing- | |||
allow creation of any user-controlled instances. | instance" and may not allow creation of any user-controlled | |||
instances. | ||||
Each network layer interface has to be assigned to one or more router | Each network layer interface has to be assigned to one or more | |||
instances in order to be able to participate in packet forwarding, | routing instances in order to be able to participate in packet | |||
routing protocols and other operations of those router instances. | forwarding, routing protocols and other operations of those routing | |||
The assignment is accomplished by creating a corresponding entry in | instances. The assignment is accomplished by placing a corresponding | |||
the list of router interfaces ("rt:interface"). The key of the list | (system- or user-controlled) entry in the list of routing instance | |||
entry is the name of a configured network layer interface, see the | interfaces ("rt:interface"). The key of the list entry is the name | |||
"ietf-interfaces" module [YANG-IF]. | of a configured network layer interface, see the "ietf-interfaces" | |||
module [YANG-IF]. | ||||
In YANG terms, the list of router interfaces is modeled as the "list" | In YANG terms, the list of routing instance interfaces is modeled as | |||
node rather than "leaf-list" in order to allow for adding, via | the "list" node rather than "leaf-list" in order to allow for adding, | |||
augmentation, other configuration or state data related to the | via augmentation, other configuration or state data related to the | |||
corresponding router interface. | corresponding 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 routing instances. For example, it may be required | |||
the sets of interfaces assigned to different logical routers be | that the sets of interfaces assigned to different routing instances | |||
disjoint. | be disjoint. | |||
4.1.1. Parameters of IPv6 Router Interfaces | 5.1.1. Parameters of IPv6 Routing Instance 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", in both configuration and operational state | data node "rt:interface", in both configuration and operational state | |||
data, with definitions of the following variables as required by | data, with definitions of the following variables as required by | |||
[RFC4861], sec. 6.2.1: | [RFC4861], sec. 6.2.1: | |||
o send-advertisements, | o send-advertisements, | |||
o max-rtr-adv-interval, | o max-rtr-adv-interval, | |||
o min-rtr-adv-interval, | o min-rtr-adv-interval, | |||
o managed-flag, | o managed-flag, | |||
o other-config-flag, | o other-config-flag, | |||
o link-mtu, | o link-mtu, | |||
o reachable-time, | o reachable-time, | |||
skipping to change at page 14, line 34 | skipping to change at page 16, line 51 | |||
* valid-lifetime, | * valid-lifetime, | |||
* on-link-flag, | * on-link-flag, | |||
* preferred-lifetime, | * preferred-lifetime, | |||
* autonomous-flag. | * autonomous-flag. | |||
The definitions and descriptions of the above parameters can be found | The definitions and descriptions of the above parameters can be found | |||
in the text of the module "ietf-ipv6-unicast-routing" (Section 8). | in the text of the module "ietf-ipv6-unicast-routing" (Section 9). | |||
NOTES: | NOTES: | |||
1. The "IsRouter" flag, which is also required by [RFC4861], is | 1. The "IsRouter" flag, which is also required by [RFC4861], is | |||
implemented in the "ietf-ip" module [YANG-IP] (leaf "ip: | implemented in the "ietf-ip" module [YANG-IP] (leaf "ip: | |||
forwarding"). | forwarding"). | |||
2. The original specification [RFC4861] allows the implementations | 2. The original specification [RFC4861] allows the implementations | |||
to decide whether the "valid-lifetime" and "preferred-lifetime" | to decide whether the "valid-lifetime" and "preferred-lifetime" | |||
parameters remain the same in consecutive advertisements, or | parameters remain the same in consecutive advertisements, or | |||
decrement in real time. However, the latter behavior seems | decrement in real time. However, the latter behavior seems | |||
problematic because the values might be reset again to the | problematic because the values might be reset again to the | |||
(higher) configured values after a configuration is reloaded. | (higher) configured values after a configuration is reloaded. | |||
Moreover, no implementation is known to use the decrementing | Moreover, no implementation is known to use the decrementing | |||
behavior. The "ietf-ipv6-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. Routes | 5.2. Route | |||
Routes are basic elements of information in a routing system. The | Routes are basic elements of information in a routing system. The | |||
core routing data model defines only the following minimal set of | core routing data model defines only the following minimal set of | |||
route attributes: | route attributes: | |||
o "dest-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 or action: outgoing interface, IP address of one or more | |||
packets with destination addresses belonging to "dest-prefix" | adjacent routers to which a packet should be forwarded, or other | |||
should be sent. | special action. | |||
o "outgoing-interface": network interface that should be used for | ||||
sending packets with destination addresses belonging to "dest- | ||||
prefix". | ||||
The above list of route attributes suffices for a simple static | The above list of route attributes suffices for a simple static | |||
routing configuration. It is expected that future modules defining | routing configuration. It is expected that future modules defining | |||
routing protocols will add other route attributes such as metrics or | routing protocols will add other route attributes such as metrics or | |||
preferences. | preferences. | |||
Routes and their attributes are used both in configuration data, for | Routes and their attributes are used both in configuration data, for | |||
example as manually configured static routes, and in operational | example as manually configured static routes, and in operational | |||
state data, for example as entries in routing tables. | state data, for example as entries in RIBs. | |||
4.3. Routing Tables | 5.3. Routing Information Base (RIB) | |||
Routing tables are lists of routes complemented with administrative | A routing information base (RIB) is a list of routes complemented | |||
data, namely: | with administrative data, namely: | |||
o "source-protocol": type of the routing protocol from which the | o "source-protocol": type of the routing protocol from which the | |||
route was originally obtained. | route was originally obtained. | |||
o "last-updated": the date and time when the route was last updated, | o "last-updated": the date and time when the route was last updated, | |||
or inserted into the routing table. | or inserted into the RIB. | |||
Each routing table must contain only routes of the same address | ||||
family. Address family information consists of two parameters - | ||||
"address-family" and "safi" (Subsequent Address Family Identifier, | ||||
SAFI). The permitted values for these two parameters are defined by | ||||
IANA and represented using YANG enumeration datatypes "ianaaf: | ||||
address-family" and "ianaaf:subsequent-address-family" [IANA-AF]. | ||||
In the core routing data model, routing tables are operational state | ||||
data represented as entries of the list "/routing-state/ | ||||
routing-tables/routing-table". The contents of routing tables are | ||||
controlled and manipulated by routing protocol operations which may | ||||
result in route additions, removals and modifications. This also | ||||
includes manipulations via the "static" and/or "direct" pseudo- | ||||
protocols, see Section 4.4.1. | ||||
Routing tables are global, which means that a routing table may be | ||||
used by any or all router instances. However, an implementation MAY | ||||
specify rules and restrictions for sharing routing tables among | ||||
router instances. | ||||
Each router instance must have, for every supported address family, | ||||
one routing table selected as the so-called default routing table. | ||||
This selection is recorded in the list "default-routing-table". The | ||||
role of default routing tables is explained in Section 4.4. | ||||
Simple router implementations will typically create one system- | ||||
controlled routing table per supported address family, and declare it | ||||
as a default routing table (via a system-controlled entry of the | ||||
"default-routing-table" list). | ||||
4.3.1. User-Defined Routing Tables | Each RIB MUST contain only routes of the same address family. In the | |||
data model, address family is represented with an identity derived | ||||
from the "rt:address-family" base identity. | ||||
More complex router implementations allow for multiple routing tables | In the core routing data model, RIBs are operational state data | |||
per address family that are used for policy routing and other | represented as entries of the list "/routing-state/ribs/rib". The | |||
purposes. If it is the case, the NETCONF server SHALL advertise the | contents of RIBs are controlled and manipulated by routing protocol | |||
feature "user-defined-routing-tables". This feature activates | operations which may result in route additions, removals and | |||
additional nodes in both configuration and operational state data, | modifications. This also includes manipulations via the "static" | |||
and enables the client to: | and/or "direct" pseudo-protocols, see Section 5.4.1. | |||
o Configure new user-controlled routing tables by creating entries | RIBs are global, which means that a RIB may be used by any or all | |||
in the "/routing/routing-tables/routing-table" list. | routing instances. However, an implementation MAY specify rules and | |||
restrictions for sharing RIBs among routing instances. | ||||
o Configure any (system-controlled or user-controlled) routing table | Each routing instance must have, for every supported address family, | |||
as the default routing table for an address family. | one RIB selected as the so-called default RIB. This selection is | |||
recorded in the list "default-rib". The role of default RIBs is | ||||
explained in Section 5.4. | ||||
o Connect a routing protocol instance to a non-default routing table | Simple router implementations that do not advertise the feature | |||
(see Section 4.4). | "advanced-router" will typically create one system-controlled RIB per | |||
supported address family, and declare it as a default RIB (via a | ||||
system-controlled entry of the "default-rib" list). | ||||
o Configure a routing table as a recipient routing table of another | 5.3.1. Multiple RIBs per Address Family | |||
routing table (see below). | ||||
Every routing table can serve as a source of routes for other routing | More complex router implementations advertising the "advanced-router" | |||
tables of the same address family. To achieve this, one or more | feature support multiple RIBs per address family that can be used for | |||
recipient routing tables may be specified in the configuration of the | policy routing and other purposes. Every RIB can then serve as a | |||
source routing table. Optionally, a route filter may be configured | source of routes for other RIBs of the same address family. To | |||
for any or all recipient routing tables. Such a route filter then | achieve this, one or more recipient RIBs may be specified in the | |||
configuration of the source RIB. Optionally, a route filter may be | ||||
configured for any or all recipient RIBs. Such a route filter then | ||||
selects and/or manipulates the routes that are passed between the | selects and/or manipulates the routes that are passed between the | |||
source and recipient routing table. | source and recipient RIB. | |||
A routing table MUST NOT appear among its own recipient routing | A RIB MUST NOT appear among its own recipient RIBs. | |||
tables. | ||||
4.4. Routing Protocols | 5.4. Routing Protocol | |||
The core routing data model provides an open-ended framework for | The core routing data model provides an open-ended framework for | |||
defining multiple routing protocol instances within a router | defining multiple routing protocol instances within a routing | |||
instance. Each routing protocol instance MUST be assigned a type, | instance. Each routing protocol instance MUST be assigned a type, | |||
which is an identity derived from the "rt:routing-protocol" base | which is an identity derived from the "rt:routing-protocol" base | |||
identity. The core routing data model defines two identities for the | identity. The core routing data model defines two identities for the | |||
direct and static pseudo-protocols (Section 4.4.1). | direct and static pseudo-protocols (Section 5.4.1). | |||
Each routing protocol instance is connected to exactly one routing | Each routing protocol instance is connected to exactly one RIB for | |||
table for each address family that the routing protocol instance | each address family that the routing protocol instance supports. | |||
supports. Routes learned from the network by a routing protocol are | Routes learned from the network by a routing protocol are normally | |||
normally installed into the connected routing table(s) and, | installed into the connected RIB(s) and, conversely, routes from the | |||
conversely, routes from the connected routing table(s) are normally | connected RIB(s) are normally injected into the routing protocol. | |||
injected into the routing protocol. However, routing protocol | However, routing protocol implementations MAY specify rules that | |||
implementations MAY specify rules that restrict this exchange of | restrict this exchange of routes in either direction (or both | |||
routes in either direction (or both directions). | directions). | |||
On devices supporting the "user-defined-routing-tables" feature, a | On devices supporting the "advanced-router" feature, any RIB (system- | |||
routing table (system-controlled or user-controlled) is connected to | controlled or user-controlled) may be connected to a routing protocol | |||
a routing protocol instance by configuring a corresponding entry in | instance by configuring a corresponding entry in the "connected-rib" | |||
the "connected-routing-table" list. If such an entry is not | list. If such an entry is not configured for an address family, then | |||
configured for an address family, then the default routing table MUST | the default RIB MUST be used as the connected RIB for this address | |||
be used as the connected routing table for this address family. | family. | |||
In addition, two independent route filters (see Section 4.5) may be | In addition, two independent route filters (see Section 5.5) may be | |||
configured for each connected routing table to apply client-defined | configured for each connected RIB to apply user-defined policies | |||
policies controlling the exchange of routes in both directions | controlling the exchange of routes in both directions between the | |||
between the routing protocol instance and the connected routing | routing protocol instance and the connected RIB: | |||
table: | ||||
o import filter controls which routes are passed from the routing | o import filter controls which routes are passed from the routing | |||
protocol instance to the connected routing table, | protocol instance to the connected RIB, | |||
o export filter controls which routes the routing protocol instance | o export filter controls which routes the routing protocol instance | |||
receives from the connected routing table. | receives from the connected RIB. | |||
Note that the terms import and export are used from the viewpoint of | Note that the terms import and export are used from the viewpoint of | |||
a routing table. | a RIB. | |||
4.4.1. Routing Pseudo-Protocols | 5.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 RIB (subject to route filters, if any), but an exchange in | |||
exchange in the opposite direction is not allowed. | the opposite direction is not allowed. | |||
Every router instance MUST implement exactly one instance of the | Every routing 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. The "direct" pseudo-protocol | interface addresses, see Section 6.2. The "direct" pseudo-protocol | |||
MUST always be connected to the default routing tables of all | MUST always be connected to the default RIBs of all supported address | |||
supported address families. Unlike other routing protocol types, | families. Unlike other routing protocol types, this connection | |||
this connection cannot be changed in the configuration. Direct | cannot be changed in the configuration. Direct routes MAY be | |||
routes MAY be filtered before they appear in the default routing | filtered before they appear in the default RIB. | |||
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 configuration will have exactly one instance per | although a typical configuration will have exactly one instance per | |||
logical router. | routing instance. | |||
Static routes are configured within the "static-routes" container, | Static routes are configured within the "static-routes" container, | |||
see Figure 4. | see Figure 4. | |||
+--rw static-routes | +--rw static-routes | |||
+--rw v4ur:ipv4 | +--rw v4ur:ipv4 | |||
| +--rw v4ur:route* [id] | | +--rw v4ur:route* [id] | |||
| +--rw v4ur:id | | +--rw v4ur:id | |||
| +--rw v4ur:description? | | +--rw v4ur:description? | |||
| +--rw v4ur:outgoing-interface? | | +--rw v4ur:destination-prefix | |||
| +--rw v4ur:dest-prefix | | +--rw (nexthop-options) | |||
| +--rw v4ur:next-hop? | | +--:(special-nexthop) | |||
| | +--rw v4ur:special-nexthop? | ||||
| +--:(simple-nexthop) | ||||
| | +--rw v4ur:gateway? | ||||
| | +--rw v4ur:outgoing-interface? | ||||
| +--:(nexthop-list) {rt:advanced-router}? | ||||
| +--rw v4ur:nexthop* [id] | ||||
| +--rw v4ur:id | ||||
| +--rw v4ur:address? | ||||
| +--rw v4ur:outgoing-interface? | ||||
| +--rw v4ur:priority? | ||||
| +--rw v4ur:weight? | ||||
+--rw v6ur:ipv6 | +--rw v6ur:ipv6 | |||
+--rw v6ur:route* [id] | +--rw v6ur:route* [id] | |||
+--rw v6ur:id | +--rw v6ur:id | |||
+--rw v6ur:description? | +--rw v6ur:description? | |||
+--rw v6ur:outgoing-interface? | +--rw v6ur:destination-prefix | |||
+--rw v6ur:dest-prefix | +--rw (nexthop-options) | |||
+--rw v6ur:next-hop? | +--:(special-nexthop) | |||
| +--rw v6ur:special-nexthop? | ||||
+--:(simple-nexthop) | ||||
| +--rw v6ur:gateway? | ||||
| +--rw v6ur:outgoing-interface? | ||||
+--:(nexthop-list) {rt:advanced-router}? | ||||
+--rw v6ur:nexthop* [id] | ||||
+--rw v6ur:id | ||||
+--rw v6ur:address? | ||||
+--rw v6ur:outgoing-interface? | ||||
+--rw v6ur:priority? | ||||
+--rw v6ur:weight? | ||||
Figure 4: Structure of "static-routes" subtree. | Figure 4: Structure of "static-routes" subtree. | |||
4.4.2. Defining New Routing Protocols | 5.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 state data, and it has to fit | the protocol-specific configuration and state data, and it has to fit | |||
it into the core routing framework in the following way: | it into the core routing framework in the following 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 state data by augmenting the definitions of | have to be inserted as state data by augmenting the definitions of | |||
the nodes | the nodes | |||
/rt:routing-tables/rt:routing-table/rt:route | /rt:ribs/rt:rib/rt:route | |||
and | and | |||
/rt:active-route/rt:output/rt:route, | /rt:active-route/rt:output/rt:route, | |||
and possibly other places in the configuration, state data and RPC | and possibly other places in the configuration, state data and RPC | |||
input or output. | input or output. | |||
o Configuration parameters and/or state data for the new protocol | o Configuration parameters and/or state data for the new protocol | |||
can be defined by augmenting the "routing-protocol" data node | can be defined by augmenting the "routing-protocol" data node | |||
under both "/routing" and "/routing-state". | under both "/routing" and "/routing-state". | |||
o Per-interface configuration, including activation of the routing | o Per-interface configuration, including activation of the routing | |||
protocol on individual interfaces, can use references to entries | protocol on individual interfaces, can use references to entries | |||
in the list of router interfaces (rt:interface). | in the list of routing instance interfaces (rt:interface). | |||
By using the "when" statement, the augmented configuration parameters | By using the "when" statement, the augmented configuration parameters | |||
and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
conditional and valid only if the value of "rt:type" or "rt:source- | conditional and valid only if the value of "rt:type" or "rt:source- | |||
protocol" is equal to the new protocol's identity. It is also | protocol" is equal to the new protocol's identity. It is also | |||
RECOMMENDED that the protocol-specific data be encapsulated in | RECOMMENDED that the protocol-specific data be encapsulated in | |||
appropriately named containers. | appropriately named containers. | |||
The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
RIP routing protocol in Appendix B. | RIP routing protocol in Appendix B. | |||
4.5. Route Filters | 5.5. Route Filter | |||
The core routing data model provides a skeleton for defining route | The core routing data model provides a skeleton for defining route | |||
filters that can be used to restrict the set of routes being | filters that can be used to restrict the set of routes being | |||
exchanged between a routing protocol instance and a connected routing | exchanged between a routing protocol instance and a connected RIB, or | |||
table, or between a source and a recipient routing table. Route | between a source and a recipient RIB. Route filters may also | |||
filters may also manipulate routes, i.e., add, delete, or modify | 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. However, an | may be used by any or all routing instances. However, an | |||
implementation MAY specify rules and restrictions for sharing route | implementation MAY specify rules and restrictions for sharing route | |||
filters among router instances. | filters among routing 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 two 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. | |||
The latter type is equivalent to no route filter. | 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. | |||
Each route filter is identified by a unique name. Its type MUST be | Each route filter is identified by a unique name. Its type MUST be | |||
specified by the "type" identity reference - this opens the space for | specified by the "type" identity reference - this opens the space for | |||
multiple route filtering framework implementations. | multiple route filtering framework implementations. | |||
4.6. RPC Operations | 5.6. RPC Operations | |||
The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines two RPC operations: | |||
o active-route: query the routing system for the active route(s) | o active-route: query the routing system for the active route(s) | |||
that are currently used for sending datagrams to a destination | that are currently used for sending datagrams to a destination | |||
host whose address is passed as an input parameter. | host whose address is passed as an input parameter. | |||
o route-count: retrieve the total number of entries in a routing | o route-count: retrieve the total number of entries in a RIB. | |||
table. | ||||
5. Interactions with Other YANG Modules | 6. Interactions with Other YANG Modules | |||
The semantics of the core routing data model also depend on several | The semantics of the core routing data model also depend on several | |||
configuration parameters that are defined in other YANG modules. | configuration parameters that are defined in other YANG modules. | |||
5.1. Module "ietf-interfaces" | 6.1. Module "ietf-interfaces" | |||
The following boolean switch is defined in the "ietf-interfaces" YANG | The following boolean switch is defined in the "ietf-interfaces" YANG | |||
module [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 network layer interface, | |||
interface, the device MUST behave exactly as if that interface was | the device MUST behave exactly as if that interface was not | |||
not assigned to any logical router at all. | assigned to any routing instance at all. | |||
5.2. Module "ietf-ip" | 6.2. Module "ietf-ip" | |||
The following boolean switches are defined in the "ietf-ip" YANG | The following boolean switches are defined in the "ietf-ip" YANG | |||
module [YANG-IP]: | module [YANG-IP]: | |||
/if:interfaces/if:interface/ip:ipv4/ip:enabled | /if:interfaces/if:interface/ip:ipv4/ip:enabled | |||
If this switch is set to "false" for a given interface, then all | If this switch is set to "false" for a network layer interface, | |||
IPv4 routing functions related to that interface MUST be disabled. | then all IPv4 routing functions related to that interface MUST be | |||
disabled. | ||||
/if:interfaces/if:interface/ip:ipv4/ip:forwarding | /if:interfaces/if:interface/ip:ipv4/ip:forwarding | |||
If this switch is set to "false" for a given interface, then the | If this switch is set to "false" for a network layer interface, | |||
forwarding of IPv4 datagrams to and from this interface MUST be | then the forwarding of IPv4 datagrams to and from this interface | |||
disabled. However, the interface may participate in other routing | MUST be disabled. However, the interface may participate in other | |||
functions, such as routing protocols. | IPv4 routing functions, such as routing protocols. | |||
/if:interfaces/if:interface/ip:ipv6/ip:enabled | /if:interfaces/if:interface/ip:ipv6/ip:enabled | |||
If this switch is set to "false" for a given interface, then all | If this switch is set to "false" for a network layer interface, | |||
IPv6 routing functions related to that interface MUST be disabled. | then all IPv6 routing functions related to that interface MUST be | |||
disabled. | ||||
/if:interfaces/if:interface/ip:ipv6/ip:forwarding | /if:interfaces/if:interface/ip:ipv6/ip:forwarding | |||
If this switch is set to "false" for a given interface, then the | If this switch is set to "false" for a network layer interface, | |||
forwarding of IPv6 datagrams to and from this interface MUST be | then the forwarding of IPv6 datagrams to and from this interface | |||
disabled. However, the interface may participate in other routing | MUST be disabled. However, the interface may participate in other | |||
functions, such as routing protocols. | IPv6 routing functions, such as routing protocols. | |||
In addition, the "ietf-ip" module allows for configuring IPv4 and | In addition, the "ietf-ip" module allows for configuring IPv4 and | |||
IPv6 addresses and network prefixes or masks on network layer | IPv6 addresses and network prefixes or masks on network layer | |||
interfaces. Configuration of these parameters on an enabled | interfaces. Configuration of these parameters on an enabled | |||
interface MUST result in an immediate creation of the corresponding | interface MUST result in an immediate creation of the corresponding | |||
direct route. The destination prefix of this route is set according | direct route. The destination prefix of this route is set according | |||
to the configured IP address and network prefix/mask, and the | to the configured IP address and network prefix/mask, and the | |||
interface is set as the outgoing interface for that route. | interface is set as the outgoing interface for that route. | |||
6. Routing YANG Module | 7. Routing YANG Module | |||
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "ietf-routing@2013-07-13.yang" | <CODE BEGINS> file "ietf-routing@2013-10-18.yang" | |||
module ietf-routing { | module ietf-routing { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
prefix "rt"; | prefix "rt"; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix "yang"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix "if"; | |||
} | } | |||
import iana-afn-safi { | ||||
prefix "ianaaf"; | ||||
} | ||||
organization | organization | |||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
WG Chair: David Kessens | WG Chair: David Kessens | |||
<mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
skipping to change at page 24, line 17 | skipping to change at page 27, line 13 | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices. | RFC itself for full legal notices. | |||
"; | "; | |||
revision 2013-07-13 { | revision 2013-10-18 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
} | } | |||
/* Features */ | /* Features */ | |||
feature user-defined-routing-tables { | feature advanced-router { | |||
description | description | |||
"Indicates that the device supports additional routing tables | "This feature indicates that the device supports advanced | |||
defined by the user. | routing functions, namely: | |||
- user-defined RIBs, | ||||
- multi-path routes. | ||||
Devices that do not support this feature MUST provide exactly | Devices that do not support this feature MUST provide exactly | |||
one routing table per supported address family. These routing | one system-controlled RIB per supported address family. These | |||
tables then appear as entries of the list | RIBs then appear as entries of the list | |||
/routing-state/routing-tables/routing-table. | /routing-state/ribs/rib. | |||
"; | "; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity router-type { | identity address-family { | |||
description | description | |||
"Base identity from which router type identities are derived. | "Base identity from which identities describing address | |||
families are derived."; | ||||
} | ||||
identity ipv4 { | ||||
base address-family; | ||||
description | ||||
"This identity represents IPv4 address family."; | ||||
} | ||||
identity ipv6 { | ||||
base address-family; | ||||
description | ||||
"This identity represents IPv6 address family."; | ||||
} | ||||
identity routing-instance-type { | ||||
description | ||||
"Base identity from which identities describing routing | ||||
instance types are derived. | ||||
It is primarily intended for discriminating among different | It is primarily intended for discriminating among different | |||
types of logical routers or router virtualization. | types of logical routers or router virtualization. | |||
"; | "; | |||
} | } | |||
identity standard-router { | identity standard-routing-instance { | |||
base router-type; | base routing-instance-type; | |||
description | description | |||
"This identity represents a standard router."; | "This identity represents a default routing instance."; | |||
} | } | |||
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; | |||
skipping to change at page 25, line 45 | skipping to change at page 29, line 16 | |||
} | } | |||
identity allow-all-route-filter { | identity allow-all-route-filter { | |||
base route-filter; | base route-filter; | |||
description | description | |||
"Route filter that permits all routes."; | "Route filter that permits all routes."; | |||
} | } | |||
/* Type Definitions */ | /* Type Definitions */ | |||
typedef router-ref { | typedef routing-instance-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:router/rt:name"; | path "/rt:routing/rt:routing-instance/rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a router instance | "This type is used for leafs that reference a routing instance | |||
configuration."; | configuration."; | |||
} | } | |||
typedef router-state-ref { | typedef routing-instance-state-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing-state/rt:router/rt:name"; | path "/rt:routing-state/rt:routing-instance/rt:id"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference state data of a | "This type is used for leafs that reference state data of a | |||
router instance."; | routing instance."; | |||
} | } | |||
typedef routing-table-ref { | typedef rib-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:routing-tables/rt:routing-table/rt:name"; | path "/rt:routing/rt:ribs/rt:rib/rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a routing table | "This type is used for leafs that reference a RIB | |||
configuration."; | configuration."; | |||
} | } | |||
typedef routing-table-state-ref { | typedef rib-state-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing-state/rt:routing-tables/rt:routing-table/" | path "/rt:routing-state/rt:ribs/rt:rib/rt:id"; | |||
+ "rt:name"; | ||||
} | } | |||
description | description | |||
"This type is used for leafs that reference a routing table in | "This type is used for leafs that reference a RIB in state | |||
state data."; | data."; | |||
} | } | |||
typedef route-filter-ref { | typedef route-filter-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a route filter | "This type is used for leafs that reference a route filter | |||
configuration."; | configuration."; | |||
} | } | |||
typedef route-filter-state-ref { | typedef route-filter-state-ref { | |||
skipping to change at page 27, line 4 | skipping to change at page 30, line 22 | |||
typedef route-filter-state-ref { | typedef route-filter-state-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing-state/rt:route-filters/rt:route-filter/" | path "/rt:routing-state/rt:route-filters/rt:route-filter/" | |||
+ "rt:name"; | + "rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a route filter in | "This type is used for leafs that reference a route filter in | |||
state data."; | state data."; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping afn-safi { | grouping address-family { | |||
description | description | |||
"This grouping provides two parameters specifying address | "This grouping provides a leaf identifying an address | |||
family and subsequent address family."; | family."; | |||
leaf address-family { | leaf address-family { | |||
type ianaaf:address-family; | type identityref { | |||
base address-family; | ||||
} | ||||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Address family."; | "Address family."; | |||
} | } | |||
leaf safi { | ||||
type ianaaf:subsequent-address-family; | ||||
mandatory "true"; | ||||
description | ||||
"Subsequent address family."; | ||||
} | ||||
} | } | |||
grouping router-id { | grouping router-id { | |||
description | description | |||
"This grouping provides the definition of router ID."; | "This grouping provides the definition of router ID."; | |||
leaf router-id { | leaf router-id { | |||
type yang:dotted-quad; | type yang:dotted-quad; | |||
description | description | |||
"Router ID - 32-bit number in the form of a dotted quad."; | "Router ID - 32-bit number in the form of a dotted quad."; | |||
} | } | |||
} | } | |||
grouping route-content { | grouping outgoing-interface { | |||
description | description | |||
"Generic parameters of static routes (configuration)."; | "This grouping defines the outgoing interface for use in | |||
nexthops."; | ||||
leaf outgoing-interface { | leaf outgoing-interface { | |||
type if:interface-ref; | type leafref { | |||
path "/routing-state/routing-instance/interfaces/interface/" | ||||
+ "name"; | ||||
} | ||||
description | description | |||
"Outgoing interface."; | "Name of the outgoing interface."; | |||
} | } | |||
} | } | |||
grouping route-state-content { | grouping special-nexthop { | |||
description | description | |||
"Generic parameters of routes in state data."; | "This grouping provides the leaf for specifying special nexthop | |||
leaf outgoing-interface { | options."; | |||
type if:interface-state-ref; | leaf special-nexthop { | |||
type enumeration { | ||||
enum blackhole { | ||||
description | ||||
"Silently discard the packet."; | ||||
} | ||||
enum unreachable { | ||||
description | ||||
"Discard the packet and notify the sender with an error | ||||
message indicating that the destination host is | ||||
unreachable."; | ||||
} | ||||
enum prohibit { | ||||
description | ||||
"Discard the packet and notify the sender with an error | ||||
message indicating that the communication is | ||||
administratively prohibited."; | ||||
} | ||||
enum receive { | ||||
description | ||||
"The packet will be received by the local network | ||||
device."; | ||||
} | ||||
} | ||||
description | description | |||
"Outgoing interface."; | "Special nexthop options."; | |||
} | } | |||
} | } | |||
/* RPC Methods */ | grouping nexthop-classifiers { | |||
rpc active-route { | ||||
description | description | |||
"Return the active route (or multiple routes, in the case of | "This grouping provides two nexthop classifiers."; | |||
multi-path routing) to a destination address. | leaf priority { | |||
type enumeration { | ||||
Parameters | enum primary { | |||
value "1"; | ||||
1. 'router-name', | description | |||
"Primary nexthop."; | ||||
2. 'destination-address'. | } | |||
enum backup { | ||||
If the router instance with 'router-name' doesn't exist, then | value "2"; | |||
this operation SHALL fail with error-tag 'data-missing' and | description | |||
error-app-tag 'router-not-found'. | "Backup nexthop."; | |||
} | ||||
If no active route for 'destination-address' exists, no output | ||||
is returned - the server SHALL send an <rpc-reply> containing | ||||
a single element <ok>. | ||||
"; | ||||
input { | ||||
leaf router-name { | ||||
type router-state-ref; | ||||
mandatory "true"; | ||||
description | ||||
"Name of the router instance whose forwarding information | ||||
base is being queried."; | ||||
} | } | |||
container destination-address { | default "primary"; | |||
description | description | |||
"Network layer destination address. | "Simple priority for distinguishing between primary and | |||
backup nexthops. | ||||
Address family specific modules MUST augment this | Backup nexthops are used if and only if no primary nexthops | |||
container with a leaf named 'address'. | are reachable. | |||
"; | "; | |||
uses afn-safi; | ||||
} | ||||
} | } | |||
output { | leaf weight { | |||
list route { | type uint8; | |||
must ". = 0 or not(../../nexthop/weight = 0)" { | ||||
error-message "Illegal combination of zero and non-zero " | ||||
+ "nexthop weights."; | ||||
description | description | |||
"List of active routes. | "Nexthop weights must be either all zero (equal | |||
load-balancing) or all non-zero."; | ||||
} | ||||
default "0"; | ||||
description | ||||
"This parameter specifies the weight of the nexthop for load | ||||
balancing. The number specifies the relative fraction of the | ||||
traffic that will use the corresponding nexthop. | ||||
Route contents specific for each address family is | The default value of 0 represents equal load-balancing. | |||
expected be defined through augmenting. | ||||
"; | If both primary and backup nexthops are present, then the | |||
uses afn-safi; | weights for each priority level are used separately. | |||
uses route-content; | "; | |||
} | ||||
} | } | |||
} | } | |||
rpc route-count { | grouping nexthop-content { | |||
description | description | |||
"Return the current number of routes in a routing table. | "Generic parameters of nexthops in routes."; | |||
choice nexthop-options { | ||||
Parameters: | mandatory "true"; | |||
description | ||||
1. 'routing-table-name'. | "Options for expressing the nexthop in routes."; | |||
case special-nexthop { | ||||
If the routing table with the name specified in | uses special-nexthop; | |||
'routing-table-name' doesn't exist, then this operation SHALL | ||||
fail with error-tag 'data-missing' and error-app-tag | ||||
'routing-table-not-found'. | ||||
"; | ||||
input { | ||||
leaf routing-table { | ||||
type routing-table-state-ref; | ||||
mandatory "true"; | ||||
description | ||||
"Name of the routing table."; | ||||
} | } | |||
} | case simple-nexthop { | |||
output { | uses outgoing-interface; | |||
leaf number-of-routes { | } | |||
type uint32; | case nexthop-list { | |||
mandatory "true"; | if-feature advanced-router; | |||
description | list nexthop { | |||
"Number of routes in the routing table."; | key "id"; | |||
description | ||||
"An entry of a nexthop list."; | ||||
leaf id { | ||||
type uint64; | ||||
description | ||||
"A numeric identifier of the entry, assigned by the | ||||
server."; | ||||
} | ||||
uses outgoing-interface; | ||||
uses nexthop-classifiers; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
grouping route-metadata { | ||||
description | ||||
"Route metadata."; | ||||
leaf source-protocol { | ||||
type identityref { | ||||
base routing-protocol; | ||||
} | ||||
mandatory "true"; | ||||
description | ||||
"Type of the routing protocol from which the route | ||||
originated."; | ||||
} | ||||
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 RIB."; | ||||
} | ||||
} | ||||
/* Operational state data */ | /* Operational state data */ | |||
container routing-state { | container routing-state { | |||
config "false"; | config "false"; | |||
description | description | |||
"Operational state of the routing subsystem."; | "Operational state of the routing subsystem."; | |||
list router { | list routing-instance { | |||
key "name"; | key "id"; | |||
description | description | |||
"Each list entry is a container for operational state data of | "Each list entry is a container for operational state data of | |||
a router instance. | a routing instance. | |||
An implementation MAY create one or more instances on its | An implementation MAY create one or more system-controlled | |||
own, other instances MAY be created by configuration. | instances, other user-controlled instances MAY be created by | |||
configuration. | ||||
"; | "; | |||
leaf id { | ||||
type uint64; | ||||
description | ||||
"Unique numeric identifier of the routing instance."; | ||||
} | ||||
leaf name { | leaf name { | |||
type string; | type leafref { | |||
path "/routing/routing-instance/name"; | ||||
} | ||||
description | description | |||
"The name of the router instance."; | "The name of the routing instance assigned in the | |||
corresponding configuration entry (if any). | ||||
"; | ||||
} | } | |||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base router-type; | base routing-instance-type; | |||
} | } | |||
default "rt:standard-router"; | default "rt:standard-routing-instance"; | |||
description | description | |||
"The router type, primarily intended for discriminating | "The routing instance type, primarily intended for | |||
among different types of logical routers, route | discriminating among different types of logical routers, | |||
virtualization, master-slave arrangements etc., while | route virtualization, master-slave arrangements etc., | |||
keeping all router instances in the same flat list. | while keeping all routing instances in the same flat list. | |||
"; | "; | |||
} | } | |||
uses router-id { | uses router-id { | |||
description | description | |||
"Global router ID. | "Global router ID. | |||
An implementation may choose a value if none is | An implementation may choose a value if none is | |||
configured. | configured. | |||
Routing protocols MAY override this global parameter. | Routing protocols MAY override this global parameter. | |||
"; | "; | |||
} | } | |||
container default-routing-tables { | container default-ribs { | |||
description | description | |||
"Default routing tables used by the router instance."; | "Default RIBs used by the routing instance."; | |||
list default-routing-table { | list default-rib { | |||
key "address-family safi"; | key "address-family"; | |||
description | description | |||
"Each list entry specifies the default routing table for | "Each list entry specifies the default RIB for one | |||
one address family. | address family. | |||
The default routing table is operationally connected to | The default RIB is operationally connected to all | |||
all routing protocols for which a connected routing | routing protocols for which a connected RIB has not been | |||
table has not been explicitly configured. | explicitly configured. | |||
The 'direct' pseudo-protocol is always connected to the | The 'direct' pseudo-protocol is always connected to the | |||
default routing tables. | default RIBs. | |||
"; | "; | |||
uses address-family; | ||||
uses afn-safi; | leaf rib-id { | |||
leaf name { | type rib-state-ref; | |||
type routing-table-state-ref; | ||||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Name of an existing routing table to be used as the | "Name of an existing RIB to be used as the default RIB | |||
default routing table for the given router instance | for the given routing instance and address family."; | |||
and address family."; | ||||
} | } | |||
} | } | |||
} | } | |||
container interfaces { | container interfaces { | |||
description | description | |||
"Router interfaces."; | "Network layer interfaces belonging to the routing | |||
instance."; | ||||
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 routing | |||
instance."; | instance."; | |||
leaf name { | leaf name { | |||
type if:interface-state-ref; | type if:interface-state-ref; | |||
description | description | |||
"A reference to the name of a configured network layer | "A reference to the name of a configured network layer | |||
interface."; | interface."; | |||
} | } | |||
} | } | |||
} | } | |||
container routing-protocols { | container routing-protocols { | |||
skipping to change at page 32, line 4 | skipping to change at page 36, line 23 | |||
"The name of the routing protocol instance."; | "The name of the routing protocol instance."; | |||
} | } | |||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base routing-protocol; | base routing-protocol; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Type of the routing protocol."; | "Type of the routing protocol."; | |||
} | } | |||
container connected-routing-tables { | container connected-ribs { | |||
if-feature user-defined-routing-tables; | if-feature advanced-router; | |||
description | description | |||
"Container for connected routing tables. | "Container for connected RIBs. | |||
"; | "; | |||
list connected-routing-table { | list connected-rib { | |||
key "name"; | key "rib-id"; | |||
description | description | |||
"List of routing tables to which the routing protocol | "List of RIBs to which the routing protocol instance | |||
instance is connected (at most one routing table per | is connected (at most one RIB per address family). | |||
address family). | ||||
"; | "; | |||
leaf name { | leaf rib-id { | |||
type routing-table-state-ref; | type rib-state-ref; | |||
description | description | |||
"Name of an existing routing table."; | "Name of an existing RIB."; | |||
} | } | |||
leaf import-filter { | leaf import-filter { | |||
type route-filter-state-ref; | type route-filter-state-ref; | |||
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 RIB specified by the 'name' | |||
'name' sibling node. | sibling node. | |||
If this leaf is not present, the behavior is | If this leaf is not present, the behavior is | |||
protocol-specific, but typically it means that all | protocol-specific, but typically it means that all | |||
routes are accepted. | routes are accepted. | |||
"; | "; | |||
} | } | |||
leaf export-filter { | leaf export-filter { | |||
type route-filter-state-ref; | type route-filter-state-ref; | |||
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 RIB specified by | |||
specified by the 'name' sibling node to this | the 'name' sibling node to this routing protocol | |||
routing protocol instance. | instance. | |||
If this leaf is not present, the behavior is | If this leaf is not present, the behavior is | |||
protocol-specific - typically it means that all | protocol-specific - typically it means that all | |||
routes are accepted. | routes are accepted. | |||
The 'direct' and 'static' pseudo-protocols accept | The 'direct' and 'static' pseudo-protocols accept | |||
no routes from any routing table. | no routes from any RIB. | |||
"; | "; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container routing-tables { | container ribs { | |||
description | description | |||
"Container for routing tables."; | "Container for RIBs."; | |||
list routing-table { | list rib { | |||
key "name"; | key "id"; | |||
description | description | |||
"Each entry represents a routing table identified by the | "Each entry represents a RIB identified by the 'name' key. | |||
'name' key. All routes in a routing table MUST belong to | All routes in a RIB MUST belong to the same address | |||
the same address family. | family. | |||
The server MUST create the default routing table for each | The server MUST create the default RIB for each address | |||
address family, and MAY create other routing tables. | family, and MAY create other RIBs. Additional RIBs MAY be | |||
Additional routing tables MAY be created in the | created in the configuration. | |||
configuration. | ||||
"; | "; | |||
leaf id { | ||||
type uint64; | ||||
description | ||||
"Unique numeric identifier of the RIB instance."; | ||||
} | ||||
leaf name { | leaf name { | |||
type string; | type leafref { | |||
path "/routing/ribs/rib/name"; | ||||
} | ||||
description | description | |||
"The name of the routing table."; | "The name of the RIB assigned in the corresponding | |||
configuration entry (if any)."; | ||||
} | } | |||
uses afn-safi; | uses address-family; | |||
container routes { | container routes { | |||
description | description | |||
"Current contents of the routing table."; | "Current contents of the RIB."; | |||
list route { | list route { | |||
key "id"; | ||||
description | description | |||
"A routing table entry. This data node MUST be | "A RIB route entry. This data node MUST be augmented | |||
augmented with information specific for routes of each | with information specific for routes of each address | |||
address family."; | family."; | |||
uses route-state-content; | leaf id { | |||
leaf source-protocol { | type uint64 { | |||
type identityref { | range "1..max"; | |||
base routing-protocol; | ||||
} | } | |||
mandatory "true"; | ||||
description | description | |||
"Type of the routing protocol from which the route | "Unique numeric identifier of the route."; | |||
originated."; | ||||
} | ||||
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."; | ||||
} | } | |||
uses nexthop-content; | ||||
uses route-metadata; | ||||
} | } | |||
} | } | |||
container recipient-routing-tables { | container recipient-ribs { | |||
if-feature user-defined-routing-tables; | if-feature advanced-router; | |||
description | description | |||
"Container for recipient routing tables."; | "Container for recipient RIBs."; | |||
list recipient-routing-table { | list recipient-rib { | |||
key "name"; | key "rib-id"; | |||
description | description | |||
"List of routing tables that receive routes from this | "List of RIBs that receive routes from this RIB."; | |||
routing table."; | leaf rib-id { | |||
leaf name { | type rib-state-ref; | |||
type routing-table-state-ref; | ||||
description | description | |||
"The name of the recipient routing table."; | "The name of the recipient RIB."; | |||
} | } | |||
leaf filter { | leaf filter { | |||
type route-filter-state-ref; | type route-filter-state-ref; | |||
description | description | |||
"A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
to the recipient routing table."; | to the recipient RIB."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container route-filters { | container route-filters { | |||
description | description | |||
"Container for route filters."; | "Container for 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 and vice versa, or between two routing | RIB and vice versa, or between two RIBs. | |||
tables. | ||||
It is expected that other modules augment this list with | It is expected that other modules augment this list with | |||
contents specific for a particular route filter type. | contents specific for a particular route filter type. | |||
"; | "; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the route filter."; | "The name of the route filter."; | |||
} | } | |||
leaf type { | leaf type { | |||
skipping to change at page 35, line 20 | skipping to change at page 39, line 36 | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* Configuration Data */ | /* Configuration Data */ | |||
container routing { | container routing { | |||
description | description | |||
"Configuration parameters for the routing subsystem."; | "Configuration parameters for the routing subsystem."; | |||
list router { | list routing-instance { | |||
key "name"; | key "name"; | |||
unique "routing-instance-id"; | ||||
description | description | |||
"Configuration of a router instance. | "Configuration of a routing instance. | |||
"; | "; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the router instance. | "The name of the configured routing instance."; | |||
} | ||||
The names for system-created router instances are assigned | leaf routing-instance-id { | |||
by the system. The same name then has to be used in the | type uint64; | |||
configuration. | description | |||
"Reference to a system-assigned numeric identifier of the | ||||
routing instance. | ||||
An arbitrary name may be chosen if the router instance is | This leaf is essential for creating new configuration | |||
created in the configuration. | entries that refer to existing system-controlled routing | |||
instances. | ||||
"; | "; | |||
} | } | |||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base router-type; | base routing-instance-type; | |||
} | } | |||
default "rt:standard-router"; | default "rt:standard-routing-instance"; | |||
description | description | |||
"The router type."; | "The type of the routing instance."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | description | |||
"Enable/disable the router instance. | "Enable/disable the routing instance. | |||
If this parameter is false, the parent router instance is | If this parameter is false, the parent routing instance is | |||
disabled and does not appear in operational state data, | disabled and does not appear in operational state data, | |||
despite any other configuration that might be present. | despite any other configuration that might be present. | |||
"; | "; | |||
} | } | |||
uses router-id { | uses router-id { | |||
description | description | |||
"Configuration of the global router ID."; | "Configuration of the global router ID."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the router instance."; | "Textual description of the routing instance."; | |||
} | } | |||
container default-routing-tables { | container default-ribs { | |||
if-feature user-defined-routing-tables; | if-feature advanced-router; | |||
description | description | |||
"Configuration of the default routing tables used by the | "Configuration of the default RIBs used by the routing | |||
router instance. | instance. | |||
The default routing table for an addressed family if by | The default RIB for an addressed family if by default | |||
default connected to all routing protocol instances | connected to all routing protocol instances supporting | |||
supporting that address family, and always receives direct | that address family, and always receives direct routes. | |||
routes. | ||||
"; | "; | |||
list default-routing-table { | list default-rib { | |||
must "address-family=/routing/routing-tables/" | must "address-family=/routing/ribs/rib[name=current()/" | |||
+ "routing-table[name=current()/name]/" | + "name]/address-family" { | |||
+ "address-family and safi=/routing/routing-tables/" | ||||
+ "routing-table[name=current()/name]/safi" { | ||||
error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
description | description | |||
"The entry's address family MUST match that of the | "The entry's address family MUST match that of the | |||
referenced routing table."; | referenced RIB."; | |||
} | } | |||
key "address-family safi"; | key "address-family"; | |||
description | description | |||
"Each list entry configures the default routing table for | "Each list entry configures the default RIB for one | |||
one address family."; | address family."; | |||
uses afn-safi; | uses address-family; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Name of an existing routing table to be used as the | "Name of an existing RIB to be used as the default RIB | |||
default routing table for the given router instance | for the given routing instance and address family."; | |||
and address family."; | ||||
} | } | |||
} | } | |||
} | } | |||
container interfaces { | container interfaces { | |||
description | description | |||
"Configuration of router interface parameters."; | "Configuration of the routing instance's interfaces."; | |||
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 routing | |||
instance."; | instance."; | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"A reference to the name of a configured network layer | "A reference to the name of a configured network layer | |||
interface."; | interface."; | |||
} | } | |||
} | } | |||
} | } | |||
container routing-protocols { | container routing-protocols { | |||
skipping to change at page 38, line 15 | skipping to change at page 42, line 29 | |||
} | } | |||
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-ribs { | |||
if-feature user-defined-routing-tables; | if-feature advanced-router; | |||
description | description | |||
"Configuration of connected routing tables. | "Configuration of connected RIBs. | |||
"; | "; | |||
list connected-routing-table { | list connected-rib { | |||
must "not(/routing/routing-tables/" | must "not(/routing/ribs/rib[name=current()/" | |||
+ "routing-table[name=current()/" | + "preceding-sibling::connected-rib/" | |||
+ "preceding-sibling::connected-routing-table/" | + "name and address-family=/routing/ribs/" | |||
+ "name and address-family=/routing/routing-tables/" | + "rib[name=current()/name]/address-family])" { | |||
+ "routing-table[name=current()/name]/" | error-message | |||
+ "address-family and safi=/routing/routing-tables/" | "Duplicate address family for connected RIBs."; | |||
+ "routing-table[name=current()/name]/safi])" { | ||||
error-message "Duplicate address family for " | ||||
+ "connected routing tables."; | ||||
description | description | |||
"For each AFN/SAFI pair there MUST NOT be more than | "For each address family, there MUST NOT be more | |||
one connected routing table."; | than one connected RIB."; | |||
} | } | |||
key "name"; | key "rib-name"; | |||
description | description | |||
"List of routing tables to which the routing protocol | "List of RIBs to which the routing protocol instance | |||
instance is connected (at most one routing table per | is connected (at most one RIB per address family). | |||
address family). | ||||
If no connected routing table is configured for an | If no connected RIB is configured for an address | |||
address family, the routing protocol is connected to | family, the routing protocol is connected to the | |||
the default routing table for that address family. | default RIB for that address family. | |||
"; | "; | |||
leaf name { | leaf rib-name { | |||
type routing-table-ref; | type rib-ref; | |||
must "../../../type != 'rt:direct' or " | must "../../../type != 'rt:direct' or " | |||
+ "../../../../../default-routing-tables/ " | + "../../../../../default-ribs/ " | |||
+ "default-routing-table/name=." { | + "default-rib/name=." { | |||
error-message "The 'direct' protocol can be " | error-message "The 'direct' protocol can be " | |||
+ "connected only to a default " | + "connected only to a default RIB."; | |||
+ "routing table."; | ||||
description | description | |||
"For the 'direct' pseudo-protocol, the connected | "For the 'direct' pseudo-protocol, the connected | |||
routing table must always be a default routing | RIB must always be a default RIB."; | |||
table."; | ||||
} | } | |||
description | description | |||
"Name of an existing routing table."; | "Name of an existing RIB."; | |||
} | } | |||
leaf import-filter { | leaf import-filter { | |||
type route-filter-ref; | type route-filter-ref; | |||
description | description | |||
"Configuration of import filter."; | "Configuration of import filter."; | |||
} | } | |||
leaf export-filter { | leaf export-filter { | |||
type route-filter-ref; | type route-filter-ref; | |||
description | description | |||
"Configuration of export filter."; | "Configuration of export filter."; | |||
skipping to change at page 39, line 39 | skipping to change at page 43, line 48 | |||
description | description | |||
"Configuration of the 'static' pseudo-protocol. | "Configuration of the 'static' pseudo-protocol. | |||
Address family specific modules augment this node with | Address family specific modules augment this node with | |||
their lists of routes. | their lists of routes. | |||
"; | "; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container routing-tables { | container ribs { | |||
description | description | |||
"Configured routing tables."; | "Configured RIBs."; | |||
list routing-table { | list rib { | |||
key "name"; | key "name"; | |||
unique "id"; | ||||
description | description | |||
"Each entry represents a configured routing table | "Each entry represents a configured RIB identified by the | |||
identified by the 'name' key. | 'name' key. | |||
Entries having the same key as a system-provided entry of | ||||
the list /routing-state/routing-tables/routing-tables are | ||||
used for configuring parameters of that entry. Other | ||||
entries define additional user-provided routing tables. | ||||
Entries having the same key as a system-controlled entry | ||||
of the list /routing-state/ribs/rib are used for | ||||
configuring parameters of that entry. Other entries define | ||||
additional user-controlled RIBs. | ||||
"; | "; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the routing table."; | "The name of the RIB."; | |||
} | } | |||
uses afn-safi; | leaf id { | |||
type uint64; | ||||
description | ||||
"System-assigned numeric identifier of the RIB instance. | ||||
This leaf is essential for creating new configuration | ||||
entries that refer to existing system-controlled RIBs. | ||||
"; | ||||
} | ||||
uses address-family; | ||||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the routing table."; | "Textual description of the RIB."; | |||
} | } | |||
container recipient-routing-tables { | container recipient-ribs { | |||
if-feature user-defined-routing-tables; | if-feature advanced-router; | |||
description | description | |||
"Configuration of recipient routing tables."; | "Configuration of recipient RIBs."; | |||
list recipient-routing-table { | list recipient-rib { | |||
must "name != ../../name" { | must "name != ../../name" { | |||
error-message "Source and recipient routing tables " | error-message | |||
+ "are identical."; | "Source and recipient RIBs are identical."; | |||
description | description | |||
"A routing table MUST NOT appear among its recipient | "A RIB MUST NOT appear among its recipient RIBs."; | |||
routing tables."; | ||||
} | } | |||
must "/routing/routing-tables/" | must "/routing/ribs/rib[name=current()/name]/" | |||
+ "routing-table[name=current()/name]/" | + "address-family=../../address-family" { | |||
+ "address-family=../../address-family and /routing/" | ||||
+ "routing-tables/routing-table[name=current()/name]/" | ||||
+ "safi=../../safi" { | ||||
error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
description | description | |||
"Address family of the recipient routing table MUST | "Address family of the recipient RIB MUST match that | |||
match the source table."; | of the source RIB."; | |||
} | } | |||
key "name"; | key "rib-name"; | |||
description | description | |||
"Each entry configures a recipient routing table."; | "Each entry configures a recipient RIB."; | |||
leaf name { | leaf rib-name { | |||
type routing-table-ref; | type rib-ref; | |||
description | description | |||
"The name of the recipient routing table."; | "The name of the recipient RIB."; | |||
} | } | |||
leaf filter { | leaf filter { | |||
type route-filter-ref; | type route-filter-ref; | |||
description | description | |||
"A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
to the recipient routing table."; | to the recipient RIB."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container route-filters { | container route-filters { | |||
description | description | |||
"Configuration of route filters."; | "Configuration of route filters."; | |||
list route-filter { | list route-filter { | |||
key "name"; | key "name"; | |||
description | description | |||
skipping to change at page 41, line 37 | skipping to change at page 46, line 4 | |||
type identityref { | type identityref { | |||
base route-filter; | base route-filter; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Type of the route filter.."; | "Type of the route filter.."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* RPC methods */ | ||||
rpc active-route { | ||||
description | ||||
"Return the active route that a routing-instance uses for | ||||
sending packets to a destination address. | ||||
"; | ||||
input { | ||||
leaf routing-instance-id { | ||||
type routing-instance-state-ref; | ||||
mandatory "true"; | ||||
description | ||||
"Identifier of the routing instance whose forwarding | ||||
information base is being queried. | ||||
If the routing instance with 'id' equal to | ||||
'routing-instance-id' doesn't exist, then this operation | ||||
SHALL fail with error-tag 'data-missing' and error-app-tag | ||||
'routing-instance-not-found'. | ||||
"; | ||||
} | ||||
container destination-address { | ||||
description | ||||
"Network layer destination address. | ||||
Address family specific modules MUST augment this | ||||
container with a leaf named 'address'. | ||||
"; | ||||
uses address-family; | ||||
} | ||||
} | ||||
output { | ||||
container route { | ||||
description | ||||
"The active route for the specified destination. | ||||
If the routing instance has no active route for the | ||||
destination address, no output is returned - the server | ||||
SHALL send an <rpc-reply> containing a single element | ||||
<ok>. | ||||
Address family specific modules MUST augment this list | ||||
with appropriate route contents. | ||||
"; | ||||
uses address-family; | ||||
uses nexthop-content; | ||||
uses route-metadata; | ||||
} | ||||
} | ||||
} | ||||
rpc route-count { | ||||
description | ||||
"Return the current number of routes in a RIB. | ||||
If the RIB with 'id' equal to 'rib-id' doesn't exist, then | ||||
this operation SHALL fail with error-tag 'data-missing' and | ||||
error-app-tag 'rib-not-found'. | ||||
"; | ||||
input { | ||||
leaf rib-id { | ||||
type rib-state-ref; | ||||
mandatory "true"; | ||||
description | ||||
"Identifier of the RIB."; | ||||
} | ||||
} | ||||
output { | ||||
leaf number-of-routes { | ||||
type uint64; | ||||
mandatory "true"; | ||||
description | ||||
"Number of routes in the RIB."; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
7. IPv4 Unicast Routing YANG Module | 8. IPv4 Unicast Routing YANG Module | |||
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-07-13.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-10-18.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 43, line 14 | skipping to change at page 49, line 14 | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices. | RFC itself for full legal notices. | |||
"; | "; | |||
revision 2013-07-13 { | revision 2013-10-18 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
} | } | |||
/* Groupings */ | /* Identities */ | |||
grouping route-content { | identity ipv4-unicast { | |||
base rt:ipv4; | ||||
description | description | |||
"Parameters of IPv4 unicast routes."; | "This identity represents the IPv4 unicast address family."; | |||
leaf dest-prefix { | ||||
type inet:ipv4-prefix; | ||||
description | ||||
"IPv4 destination prefix."; | ||||
} | ||||
leaf next-hop { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the next hop."; | ||||
} | ||||
} | } | |||
/* RPC Methods */ | /* Operational state data */ | |||
augment "/rt:active-route/rt:input/rt:destination-address" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
when "rt:address-family='ipv4' and rt:safi='nlri-unicast'" { | when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"The 'address' leaf augments the 'rt:destination-address' | "This leaf augments an IPv4 unicast route."; | |||
parameter of the 'rt:active-route' operation."; | leaf destination-prefix { | |||
leaf address { | type inet:ipv4-prefix; | |||
type inet:ipv4-address; | ||||
description | description | |||
"IPv4 destination address."; | "IPv4 destination prefix."; | |||
} | } | |||
} | } | |||
augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
when "rt:address-family='ipv4' and rt:safi='nlri-unicast'" { | + "rt:nexthop-options/rt:simple-nexthop" { | |||
when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | ||||
description | description | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"Contents of the reply to 'rt:active-route' operation."; | "This leaf augments the 'simple-nexthop' case of IPv4 unicast | |||
uses route-content; | routes."; | |||
leaf gateway { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the gateway."; | ||||
} | ||||
} | } | |||
/* Operational state */ | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
+ "rt:nexthop-options/rt:nexthop-list/rt:nexthop" { | ||||
augment "/rt:routing-state/rt:routing-tables/rt:routing-table/" | when "../../../rt:address-family = 'v4ur:ipv4-unicast'" { | |||
+ "rt:routes/rt:route" { | ||||
when "../../rt:address-family = 'ipv4' and ../../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 leaf augments the 'nexthop-list' case of IPv4 unicast | |||
uses route-content; | routes."; | |||
leaf address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the nexthop."; | ||||
} | ||||
} | } | |||
/* Configuration */ | /* Configuration data */ | |||
augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
+ "rt:routing-protocol/rt:static-routes" { | + "rt:routing-protocol/rt:static-routes" { | |||
description | description | |||
"This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
pseudo-protocol with data specific for IPv4 unicast."; | pseudo-protocol with data specific to IPv4 unicast."; | |||
container ipv4 { | container ipv4 { | |||
description | description | |||
"Configuration of a 'static' pseudo-protocol instance | "Configuration of a 'static' pseudo-protocol instance | |||
consists of a list of routes."; | consists of a list of routes."; | |||
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. | "Unique numeric identifier of the route. | |||
It is not required that the routes be sorted by their | This value is unrelated to system-assigned keys of | |||
'id'. | routes in RIBs. | |||
"; | "; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
uses rt:route-content; | leaf destination-prefix { | |||
uses route-content { | type inet:ipv4-prefix; | |||
refine "dest-prefix" { | mandatory "true"; | |||
mandatory "true"; | description | |||
"IPv4 destination prefix."; | ||||
} | ||||
choice nexthop-options { | ||||
mandatory "true"; | ||||
description | ||||
"Options for expressing the nexthop in static routes."; | ||||
case special-nexthop { | ||||
uses rt:special-nexthop; | ||||
} | ||||
case simple-nexthop { | ||||
leaf gateway { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the gateway."; | ||||
} | ||||
leaf outgoing-interface { | ||||
type leafref { | ||||
path "../../../../../../rt:interfaces/rt:interface/" | ||||
+ "rt:name"; | ||||
} | ||||
description | ||||
"Name of the outgoing interface. | ||||
Only interfaces configured for the parent routing | ||||
instance can be given. | ||||
"; | ||||
} | ||||
} | ||||
case nexthop-list { | ||||
if-feature rt:advanced-router; | ||||
list nexthop { | ||||
key "id"; | ||||
description | ||||
"An entry of a nexthop list."; | ||||
leaf id { | ||||
type uint32; | ||||
description | ||||
"Unique numeric identifier of the entry. | ||||
This value is unrelated to system-assigned keys of | ||||
nexthops in RIBs. | ||||
"; | ||||
} | ||||
leaf address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the nexthop."; | ||||
} | ||||
leaf outgoing-interface { | ||||
type leafref { | ||||
path "../../../../../../../rt:interfaces/" | ||||
+ "rt:interface/rt:name"; | ||||
} | ||||
description | ||||
"Name of the outgoing interface. | ||||
Only interfaces configured for the parent routing | ||||
instance can be given. | ||||
"; | ||||
} | ||||
uses rt:nexthop-classifiers; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* RPC methods */ | ||||
augment "/rt:active-route/rt:input/rt:destination-address" { | ||||
when "rt:address-family='v4ur:ipv4-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv4 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'rt:destination-address' parameter of | ||||
the 'rt:active-route' operation."; | ||||
leaf address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 destination address."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route" { | ||||
when "rt:address-family='v4ur:ipv4-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv4 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the reply to the 'rt:active-route' | ||||
operation."; | ||||
leaf destination-prefix { | ||||
type inet:ipv4-prefix; | ||||
description | ||||
"IPv4 destination prefix."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | ||||
+ "rt:simple-nexthop" { | ||||
when "rt:address-family='v4ur:ipv4-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv4 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'simple-nexthop' case in the reply to | ||||
the 'rt:active-route' operation."; | ||||
leaf gateway { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the gateway."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | ||||
+ "rt:nexthop-list/rt:nexthop" { | ||||
when "../rt:address-family='v4ur:ipv4-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv4 unicast."; | ||||
} | ||||
if-feature rt:advanced-router; | ||||
description | ||||
"This leaf augments the 'nexthop-list' case in the reply to the | ||||
'rt:active-route' operation."; | ||||
leaf address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the nexthop."; | ||||
} | ||||
} | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8. IPv6 Unicast Routing YANG Module | 9. IPv6 Unicast Routing YANG Module | |||
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-07-13.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-10-18.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 47, line 22 | skipping to change at page 56, line 22 | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices. | RFC itself for full legal notices. | |||
"; | "; | |||
revision 2013-07-13 { | revision 2013-10-18 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
} | } | |||
/* Groupings */ | /* Identities */ | |||
grouping route-content { | ||||
description | ||||
"Specific parameters of IPv6 unicast routes."; | ||||
leaf dest-prefix { | ||||
type inet:ipv6-prefix; | ||||
description | ||||
"IPv6 destination prefix."; | ||||
} | ||||
leaf next-hop { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the next hop."; | ||||
} | ||||
} | ||||
/* RPC Methods */ | ||||
augment "/rt:active-route/rt:input/rt:destination-address" { | ||||
when "rt:address-family='ipv6' and rt:safi='nlri-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"The 'address' leaf augments the 'rt:destination-address' | ||||
parameter of the 'rt:active-route' operation."; | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 destination address."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route" { | identity ipv6-unicast { | |||
when "rt:address-family='ipv6' and rt:safi='nlri-unicast'" { | base rt:ipv6; | |||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | description | |||
"Contents of the reply to 'rt:active-route' operation."; | "This identity represents the IPv6 unicast address family."; | |||
uses route-content; | ||||
} | } | |||
/* Operational state data */ | /* Operational state data */ | |||
augment "/rt:routing-state/rt:router/rt:interfaces/rt:interface" { | augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | |||
+ "rt:interface" { | ||||
when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | |||
+ "ip:ipv6/ip:enabled='true'" { | + "ip:ipv6/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."; | |||
} | } | |||
description | description | |||
"IPv6-specific parameters of router interfaces."; | "IPv6-specific parameters of router interfaces."; | |||
container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
description | description | |||
skipping to change at page 53, line 19 | skipping to change at page 61, line 32 | |||
the Prefix Information option."; | the Prefix Information option."; | |||
reference | reference | |||
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
AdvAutonomousFlag."; | AdvAutonomousFlag."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/rt:routing-state/rt:routing-tables/rt:routing-table/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
+ "rt:routes/rt:route" { | when "../../rt:address-family = 'v6ur:ipv6-unicast'" { | |||
when "../../rt:address-family = 'ipv6' and ../../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 leaf augments an IPv6 unicast route."; | |||
uses route-content; | leaf destination-prefix { | |||
type inet:ipv6-prefix; | ||||
description | ||||
"IPv6 destination prefix."; | ||||
} | ||||
} | } | |||
/* Configuration */ | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
+ "rt:nexthop-options/rt:simple-nexthop" { | ||||
when "../../rt:address-family = 'v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'simple-nexthop' case of IPv6 unicast | ||||
routes."; | ||||
leaf gateway { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the gateway."; | ||||
} | ||||
} | ||||
augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
+ "rt:nexthop-options/rt:nexthop-list/rt:nexthop" { | ||||
when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'nexthop-list' case of IPv6 unicast | ||||
routes."; | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the nexthop."; | ||||
} | ||||
} | ||||
/* Configuration data */ | ||||
augment | ||||
"/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" { | ||||
when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | |||
+ "ip:ipv6/ip:enabled='true'" { | + "ip:ipv6/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."; | |||
} | } | |||
description | description | |||
"Configuration of IPv6-specific parameters of router | "Configuration of IPv6-specific parameters of router | |||
interfaces."; | interfaces."; | |||
container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
skipping to change at page 57, line 28 | skipping to change at page 66, line 28 | |||
"The value to be placed in the Autonomous Flag | "The value to be placed in the Autonomous Flag | |||
field in the Prefix Information option."; | field in the Prefix Information option."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
+ "rt:routing-protocol/rt:static-routes" { | + "rt:routing-protocol/rt:static-routes" { | |||
description | description | |||
"This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
pseudo-protocol with data specific for IPv6 unicast."; | pseudo-protocol with data specific to IPv6 unicast."; | |||
container ipv6 { | container ipv6 { | |||
description | description | |||
"Configuration of a 'static' pseudo-protocol instance | "Configuration of a 'static' pseudo-protocol instance | |||
consists of a list of routes."; | consists of a list of routes."; | |||
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. | "Unique numeric identifier of the route. | |||
It is not required that the routes be sorted by their | This value is unrelated to system-assigned keys of | |||
'id'. | routes in RIBs. | |||
"; | "; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
uses rt:route-content; | leaf destination-prefix { | |||
uses route-content { | type inet:ipv6-prefix; | |||
refine "dest-prefix" { | mandatory "true"; | |||
mandatory "true"; | description | |||
"IPv6 destination prefix."; | ||||
} | ||||
choice nexthop-options { | ||||
mandatory "true"; | ||||
description | ||||
"Options for expressing the nexthop in static routes."; | ||||
case special-nexthop { | ||||
uses rt:special-nexthop; | ||||
} | ||||
case simple-nexthop { | ||||
leaf gateway { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the gateway."; | ||||
} | ||||
leaf outgoing-interface { | ||||
type leafref { | ||||
path "../../../../../../rt:interfaces/rt:interface/" | ||||
+ "rt:name"; | ||||
} | ||||
description | ||||
"Name of the outgoing interface. | ||||
Only interfaces configured for the parent routing | ||||
instance can be given. | ||||
"; | ||||
} | ||||
} | ||||
case nexthop-list { | ||||
if-feature rt:advanced-router; | ||||
list nexthop { | ||||
key "id"; | ||||
description | ||||
"An entry of a nexthop list."; | ||||
leaf id { | ||||
type uint32; | ||||
description | ||||
"Unique numeric identifier of the entry. | ||||
This value is unrelated to system-assigned keys of | ||||
nexthops in RIBs. | ||||
"; | ||||
} | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the nexthop."; | ||||
} | ||||
leaf outgoing-interface { | ||||
type leafref { | ||||
path "../../../../../../../rt:interfaces/" | ||||
+ "rt:interface/rt:name"; | ||||
} | ||||
description | ||||
"Name of the outgoing interface. | ||||
Only interfaces configured for the parent routing | ||||
instance can be given. | ||||
"; | ||||
} | ||||
uses rt:nexthop-classifiers; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* RPC methods */ | ||||
augment "/rt:active-route/rt:input/rt:destination-address" { | ||||
when "rt:address-family='v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'rt:destination-address' parameter of | ||||
the 'rt:active-route' operation."; | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 destination address."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route" { | ||||
when "rt:address-family='v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the reply to the 'rt:active-route' | ||||
operation."; | ||||
leaf destination-prefix { | ||||
type inet:ipv6-prefix; | ||||
description | ||||
"IPv6 destination prefix."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | ||||
+ "rt:simple-nexthop" { | ||||
when "rt:address-family='v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments the 'simple-nexthop' case in the reply to | ||||
the 'rt:active-route' operation."; | ||||
leaf gateway { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the gateway."; | ||||
} | ||||
} | ||||
augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | ||||
+ "rt:nexthop-list/rt:nexthop" { | ||||
when "../rt:address-family='v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
if-feature rt:advanced-router; | ||||
description | ||||
"This leaf augments the 'nexthop-list' case in the reply to the | ||||
'rt:active-route' operation."; | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the nexthop."; | ||||
} | ||||
} | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
9. IANA Considerations | 10. IANA Considerations | |||
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 remove this note). | actual RFC number (and remove this note). | |||
This document registers the following namespace URIs in the IETF XML | This document registers the following namespace URIs in the IETF XML | |||
registry [RFC3688]: | registry [RFC3688]: | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
URI: urn:ietf:params:xml:ns:yang:ietf-routing | URI: urn:ietf:params:xml:ns:yang:ietf-routing | |||
skipping to change at page 61, line 5 | skipping to change at page 72, line 5 | |||
reference: RFC XXXX | reference: RFC XXXX | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
name: ietf-ipv6-unicast-routing | name: 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 | |||
reference: RFC XXXX | reference: RFC XXXX | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
10. Security Considerations | 11. Security Considerations | |||
Configuration and state data conforming to the core routing data | Configuration and state data conforming to the core routing data | |||
model (defined in this document) are designed to be accessed via the | model (defined in this document) are designed to be accessed via the | |||
NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | |||
transport layer and the mandatory-to-implement secure transport is | transport layer and the mandatory-to-implement secure transport is | |||
SSH [RFC6242]. | SSH [RFC6242]. | |||
A number of data nodes defined in the YANG modules belonging to the | A number of data nodes defined in the YANG modules belonging to the | |||
configuration part of the core routing data model are writable/ | configuration part of the core routing data model are writable/ | |||
creatable/deletable (i.e., "config true" in YANG terms, which is the | creatable/deletable (i.e., "config true" in YANG terms, which is the | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations to these data nodes, | in some network environments. Write operations to these data nodes, | |||
such as "edit-config", can have negative effects on the network if | such as "edit-config", can have negative effects on the network if | |||
the protocol operations are not properly protected. | the protocol operations are not properly protected. | |||
The vulnerable "config true" subtrees and data nodes are the | The vulnerable "config true" subtrees and data nodes are the | |||
following: | following: | |||
/routing/router/interfaces/interface This list assigns a network | /routing/routing-instance/interfaces/interface This list assigns a | |||
layer interface to a router instance and may also specify | network layer interface to a routing instance and may also specify | |||
interface parameters related to routing. | interface parameters related to routing. | |||
/routing/router/routing-protocols/routing-protocol This list | /routing/routing-instance/routing-protocols/routing-protocol This | |||
specifies the routing protocols configured on a device. | list specifies the routing protocols configured on a device. | |||
/routing/route-filters/route-filter This list specifies the | /routing/route-filters/route-filter This list specifies the | |||
configured route filters which represent administrative policies | configured route filters which represent administrative policies | |||
for redistributing and modifying routing information. | for redistributing and modifying routing information. | |||
/routing/routing-tables/routing-table This list specifies the | /routing/ribs/rib This list specifies the RIBs configured for the | |||
configured routing tables used by the device. | device. | |||
Unauthorized access to any of these lists can adversely affect the | Unauthorized access to any of these lists can adversely affect the | |||
routing subsystem of both the local device and the network. This may | routing subsystem of both the local device and the network. This may | |||
lead to network malfunctions, delivery of packets to inappropriate | lead to network malfunctions, delivery of packets to inappropriate | |||
destinations and other problems. | destinations and other problems. | |||
11. Acknowledgments | 12. Acknowledgments | |||
The author wishes to thank Martin Bjorklund, Joel Halpern, | ||||
Wes Hardaker, Andrew McGregor, Xiang Li, Thomas Morin, Tom Petch, | ||||
Bruno Rijsman, Juergen Schoenwaelder, Phil Shafer, Dave Thaler and | ||||
Yi Yang for their helpful comments and suggestions. | ||||
12. References | The author wishes to thank Nitin Bahadur, Martin Bjorklund, | |||
Joel Halpern, Wes Hardaker, Sriganesh Kini, Andrew McGregor, | ||||
Jan Medved, Xiang Li, Thomas Morin, Tom Petch, Bruno Rijsman, | ||||
Juergen Schoenwaelder, Phil Shafer, Dave Thaler and Yi Yang for their | ||||
helpful comments and suggestions. | ||||
12.1. Normative References | 13. References | |||
[IANA-AF] Bjorklund, M., "IANA Address Family Numbers and Subsequent | 13.1. Normative References | |||
Address Family Identifiers YANG Module", | ||||
draft-ietf-netmod-iana-afn-safi-00 (work in progress), | ||||
July 2013. | ||||
[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. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
Network Configuration Protocol (NETCONF)", RFC 6020, | Network Configuration Protocol (NETCONF)", RFC 6020, | |||
September 2010. | September 2010. | |||
[RFC6021bis] | ||||
Schoenwaelder, J., Ed., "Common YANG Data Types", | ||||
draft-ietf-netmod-rfc6021-bis-03 (work in progress), | ||||
May 2013. | ||||
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
Bierman, "NETCONF Configuration Protocol", RFC 6241, | Bierman, "NETCONF Configuration Protocol", RFC 6241, | |||
June 2011. | June 2011. | |||
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | ||||
RFC 6991, July 2013. | ||||
[YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | |||
Management", draft-ietf-netmod-interfaces-cfg-12 (work in | Management", draft-ietf-netmod-interfaces-cfg-12 (work in | |||
progress), July 2013. | progress), July 2013. | |||
[YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", | [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", | |||
draft-ietf-netmod-ip-cfg-09 (work in progress), | draft-ietf-netmod-ip-cfg-10 (work in progress), | |||
February 2013. | August 2013. | |||
12.2. Informative References | 13.2. Informative References | |||
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | |||
Data Model Documents", RFC 6087, January 2011. | Data Model Documents", RFC 6087, January 2011. | |||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, June 2011. | |||
Appendix A. The Complete Data Trees | Appendix A. The Complete Data Trees | |||
This appendix presents the complete configuration and operational | This appendix presents the complete configuration and operational | |||
state data trees of the core routing data model. | state data trees of the core routing data model. | |||
See Section 2.2 for an explanation of the symbols used. Data type of | See Section 2.2 for an explanation of the symbols used. Data type of | |||
every leaf node is shown near the right end of the corresponding | every leaf node is shown near the right end of the corresponding | |||
line. | line. | |||
A.1. Configuration Data | A.1. Configuration Data | |||
+--rw routing | +--rw routing | |||
+--rw router* [name] | +--rw routing-instance* [name] | |||
| +--rw name string | | +--rw name string | |||
| +--rw type? identityref | | +--rw routing-instance-id? uint64 | |||
| +--rw enabled? boolean | | +--rw type? identityref | |||
| +--rw router-id? yang:dotted-quad | | +--rw enabled? boolean | |||
| +--rw description? string | | +--rw router-id? yang:dotted-quad | |||
| +--rw default-routing-tables | | +--rw description? string | |||
| | +--rw default-routing-table* [address-family safi] | | +--rw default-ribs {advanced-router}? | |||
| | +--rw address-family ianaaf:address-family | | | +--rw default-rib* [address-family] | |||
| | +--rw safi ianaaf:subsequent-address-family | | | +--rw address-family identityref | |||
| | +--rw name string | | | +--rw name string | |||
| +--rw interfaces | | +--rw interfaces | |||
| | +--rw interface* [name] | | | +--rw interface* [name] | |||
| | +--rw name if:interface-ref | | | +--rw name if:interface-ref | |||
| | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | +--rw v6ur:send-advertisements? boolean | | | +--rw v6ur:send-advertisements? boolean | |||
| | +--rw v6ur:max-rtr-adv-interval? uint16 | | | +--rw v6ur:max-rtr-adv-interval? uint16 | |||
| | +--rw v6ur:min-rtr-adv-interval? uint16 | | | +--rw v6ur:min-rtr-adv-interval? uint16 | |||
| | +--rw v6ur:managed-flag? boolean | | | +--rw v6ur:managed-flag? boolean | |||
| | +--rw v6ur:other-config-flag? boolean | | | +--rw v6ur:other-config-flag? boolean | |||
| | +--rw v6ur:link-mtu? uint32 | | | +--rw v6ur:link-mtu? uint32 | |||
| | +--rw v6ur:reachable-time? uint32 | | | +--rw v6ur:reachable-time? uint32 | |||
| | +--rw v6ur:retrans-timer? uint32 | | | +--rw v6ur:retrans-timer? uint32 | |||
| | +--rw v6ur:cur-hop-limit? uint8 | | | +--rw v6ur:cur-hop-limit? uint8 | |||
| | +--rw v6ur:default-lifetime? uint16 | | | +--rw v6ur:default-lifetime? uint16 | |||
| | +--rw v6ur:prefix-list | | | +--rw v6ur:prefix-list | |||
| | +--rw v6ur:prefix* [prefix-spec] | | | +--rw v6ur:prefix* [prefix-spec] | |||
| | +--rw v6ur:prefix-spec inet:ipv6-prefix | | | +--rw v6ur:prefix-spec inet:ipv6-prefix | |||
| | +--rw (control-adv-prefixes)? | | | +--rw (control-adv-prefixes)? | |||
| | +--:(no-advertise) | | | +--:(no-advertise) | |||
| | | +--rw v6ur:no-advertise? empty | | | | +--rw v6ur:no-advertise? empty | |||
| | +--:(advertise) | | | +--:(advertise) | |||
| | +--rw v6ur:valid-lifetime? uint32 | | | +--rw v6ur:valid-lifetime? uint32 | |||
| | +--rw v6ur:on-link-flag? boolean | | | +--rw v6ur:on-link-flag? boolean | |||
| | +--rw v6ur:preferred-lifetime? uint32 | | | +--rw v6ur:preferred-lifetime? uint32 | |||
| | +--rw v6ur:autonomous-flag? boolean | | | +--rw v6ur:autonomous-flag? boolean | |||
| +--rw routing-protocols | | +--rw routing-protocols | |||
| +--rw routing-protocol* [name] | | +--rw routing-protocol* [name] | |||
| +--rw name string | | +--rw name string | |||
| +--rw description? string | | +--rw description? string | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw type identityref | | +--rw type identityref | |||
| +--rw connected-routing-tables | | +--rw connected-ribs {advanced-router}? | |||
| | +--rw connected-routing-table* [name] | | | +--rw connected-rib* [rib-name] | |||
| | +--rw name routing-table-ref | | | +--rw rib-name rib-ref | |||
| | +--rw import-filter? route-filter-ref | | | +--rw import-filter? route-filter-ref | |||
| | +--rw export-filter? route-filter-ref | | | +--rw export-filter? route-filter-ref | |||
| +--rw static-routes | | +--rw static-routes | |||
| +--rw v4ur:ipv4 | | +--rw v4ur:ipv4 | |||
| | +--rw v4ur:route* [id] | | | +--rw v4ur:route* [id] | |||
| | +--rw v4ur:id uint32 | | | +--rw v4ur:id uint32 | |||
| | +--rw v4ur:description? string | | | +--rw v4ur:description? string | |||
| | +--rw v4ur:outgoing-interface? if:interface-ref | | | +--rw v4ur:destination-prefix inet:ipv4-prefix | |||
| | +--rw v4ur:dest-prefix inet:ipv4-prefix | | | +--rw (nexthop-options) | |||
| | +--rw v4ur:next-hop? inet:ipv4-address | | | +--:(special-nexthop) | |||
| +--rw v6ur:ipv6 | | | | +--rw v4ur:special-nexthop? enumeration | |||
| +--rw v6ur:route* [id] | | | +--:(simple-nexthop) | |||
| +--rw v6ur:id uint32 | | | | +--rw v4ur:gateway? inet:ipv4-address | |||
| +--rw v6ur:description? string | | | | +--rw v4ur:outgoing-interface? leafref | |||
| +--rw v6ur:outgoing-interface? if:interface-ref | | | +--:(nexthop-list) {rt:advanced-router}? | |||
| +--rw v6ur:dest-prefix inet:ipv6-prefix | | | +--rw v4ur:nexthop* [id] | |||
| +--rw v6ur:next-hop? inet:ipv6-address | | | +--rw v4ur:id uint32 | |||
+--rw routing-tables | | | +--rw v4ur:address? inet:ipv4-address | |||
| +--rw routing-table* [name] | | | +--rw v4ur:outgoing-interface? leafref | |||
| +--rw name string | | | +--rw v4ur:priority? enumeration | |||
| +--rw address-family ianaaf:address-family | | | +--rw v4ur:weight? uint8 | |||
| +--rw safi ianaaf:subsequent-address-family | | +--rw v6ur:ipv6 | |||
| +--rw description? string | | +--rw v6ur:route* [id] | |||
| +--rw recipient-routing-tables | | +--rw v6ur:id uint32 | |||
| +--rw recipient-routing-table* [name] | | +--rw v6ur:description? string | |||
| +--rw name routing-table-ref | | +--rw v6ur:destination-prefix inet:ipv6-prefix | |||
| +--rw filter? route-filter-ref | | +--rw (nexthop-options) | |||
+--rw route-filters | | +--:(special-nexthop) | |||
+--rw route-filter* [name] | | | +--rw v6ur:special-nexthop? enumeration | |||
+--rw name string | | +--:(simple-nexthop) | |||
+--rw description? string | | | +--rw v6ur:gateway? inet:ipv6-address | |||
+--rw type identityref | | | +--rw v6ur:outgoing-interface? leafref | |||
| +--:(nexthop-list) {rt:advanced-router}? | ||||
| +--rw v6ur:nexthop* [id] | ||||
| +--rw v6ur:id uint32 | ||||
| +--rw v6ur:address? inet:ipv6-address | ||||
| +--rw v6ur:outgoing-interface? leafref | ||||
| +--rw v6ur:priority? enumeration | ||||
| +--rw v6ur:weight? uint8 | ||||
+--rw ribs | ||||
| +--rw rib* [name] | ||||
| +--rw name string | ||||
| +--rw id? uint64 | ||||
| +--rw address-family identityref | ||||
| +--rw description? string | ||||
| +--rw recipient-ribs {advanced-router}? | ||||
| +--rw recipient-rib* [rib-name] | ||||
| +--rw rib-name rib-ref | ||||
| +--rw filter? route-filter-ref | ||||
+--rw route-filters | ||||
+--rw route-filter* [name] | ||||
+--rw name string | ||||
+--rw description? string | ||||
+--rw type identityref | ||||
A.2. Operational State Data | A.2. Operational State Data | |||
+--ro routing-state | +--ro routing-state | |||
+--ro router* [name] | +--ro routing-instance* [id] | |||
| +--ro name string | | +--ro id uint64 | |||
| +--ro type? identityref | | +--ro name? leafref | |||
| +--ro router-id? yang:dotted-quad | | +--ro type? identityref | |||
| +--ro default-routing-tables | | +--ro router-id? yang:dotted-quad | |||
| | +--ro default-routing-table* [address-family safi] | | +--ro default-ribs | |||
| | +--ro address-family ianaaf:address-family | | | +--ro default-rib* [address-family] | |||
| | +--ro safi ianaaf:subsequent-address-family | | | +--ro address-family identityref | |||
| | +--ro name routing-table-state-ref | | | +--ro rib-id rib-state-ref | |||
| +--ro interfaces | | +--ro interfaces | |||
| | +--ro interface* [name] | | | +--ro interface* [name] | |||
| | +--ro name if:interface-state-ref | | | +--ro name if:interface-state-ref | |||
| | +--ro v6ur:ipv6-router-advertisements | | | +--ro v6ur:ipv6-router-advertisements | |||
| | +--ro v6ur:send-advertisements? boolean | | | +--ro v6ur:send-advertisements? boolean | |||
| | +--ro v6ur:max-rtr-adv-interval? uint16 | | | +--ro v6ur:max-rtr-adv-interval? uint16 | |||
| | +--ro v6ur:min-rtr-adv-interval? uint16 | | | +--ro v6ur:min-rtr-adv-interval? uint16 | |||
| | +--ro v6ur:managed-flag? boolean | | | +--ro v6ur:managed-flag? boolean | |||
| | +--ro v6ur:other-config-flag? boolean | | | +--ro v6ur:other-config-flag? boolean | |||
| | +--ro v6ur:link-mtu? uint32 | | | +--ro v6ur:link-mtu? uint32 | |||
| | +--ro v6ur:reachable-time? uint32 | | | +--ro v6ur:reachable-time? uint32 | |||
| | +--ro v6ur:retrans-timer? uint32 | | | +--ro v6ur:retrans-timer? uint32 | |||
| | +--ro v6ur:cur-hop-limit? uint8 | | | +--ro v6ur:cur-hop-limit? uint8 | |||
| | +--ro v6ur:default-lifetime? uint16 | | | +--ro v6ur:default-lifetime? uint16 | |||
| | +--ro v6ur:prefix-list | | | +--ro v6ur:prefix-list | |||
| | +--ro v6ur:prefix* [prefix-spec] | | | +--ro v6ur:prefix* [prefix-spec] | |||
| | +--ro v6ur:prefix-spec inet:ipv6-prefix | | | +--ro v6ur:prefix-spec inet:ipv6-prefix | |||
| | +--ro v6ur:valid-lifetime? uint32 | | | +--ro v6ur:valid-lifetime? uint32 | |||
| | +--ro v6ur:on-link-flag? boolean | | | +--ro v6ur:on-link-flag? boolean | |||
| | +--ro v6ur:preferred-lifetime? uint32 | | | +--ro v6ur:preferred-lifetime? uint32 | |||
| | +--ro v6ur:autonomous-flag? boolean | | | +--ro v6ur:autonomous-flag? boolean | |||
| +--ro routing-protocols | | +--ro routing-protocols | |||
| +--ro routing-protocol* [name] | | +--ro routing-protocol* [name] | |||
| +--ro name string | | +--ro name string | |||
| +--ro type identityref | | +--ro type identityref | |||
| +--ro connected-routing-tables | | +--ro connected-ribs {advanced-router}? | |||
| +--ro connected-routing-table* [name] | | +--ro connected-rib* [rib-id] | |||
| +--ro name routing-table-state-ref | | +--ro rib-id rib-state-ref | |||
| +--ro import-filter? route-filter-state-ref | | +--ro import-filter? route-filter-state-ref | |||
| +--ro export-filter? route-filter-state-ref | | +--ro export-filter? route-filter-state-ref | |||
+--ro routing-tables | +--ro ribs | |||
| +--ro routing-table* [name] | | +--ro rib* [id] | |||
| +--ro name string | | +--ro id uint64 | |||
| +--ro address-family ianaaf:address-family | | +--ro name? leafref | |||
| +--ro safi ianaaf:subsequent-address-family | | +--ro address-family identityref | |||
| +--ro routes | | +--ro routes | |||
| | +--ro route* | | | +--ro route* [id] | |||
| | +--ro outgoing-interface? if:interface-state-ref | | | +--ro id uint64 | |||
| | +--ro source-protocol identityref | | | +--ro (nexthop-options) | |||
| | +--ro last-updated? yang:date-and-time | | | | +--:(special-nexthop) | |||
| | +--ro v4ur:dest-prefix? inet:ipv4-prefix | | | | | +--ro special-nexthop? enumeration | |||
| | +--ro v4ur:next-hop? inet:ipv4-address | | | | +--:(simple-nexthop) | |||
| | +--ro v6ur:dest-prefix? inet:ipv6-prefix | | | | | +--ro outgoing-interface? leafref | |||
| | +--ro v6ur:next-hop? inet:ipv6-address | | | | | +--ro v4ur:gateway? inet:ipv4-address | |||
| +--ro recipient-routing-tables | | | | | +--ro v6ur:gateway? inet:ipv6-address | |||
| +--ro recipient-routing-table* [name] | | | | +--:(nexthop-list) {advanced-router}? | |||
| +--ro name routing-table-state-ref | | | | +--ro nexthop* [id] | |||
| +--ro filter? route-filter-state-ref | | | | +--ro id uint64 | |||
+--ro route-filters | | | | +--ro outgoing-interface? leafref | |||
+--ro route-filter* [name] | | | | +--ro priority? enumeration | |||
+--ro name string | | | | +--ro weight? uint8 | |||
+--ro type identityref | | | | +--ro v4ur:address? inet:ipv4-address | |||
| | | +--ro v6ur:address? inet:ipv6-address | ||||
| | +--ro source-protocol identityref | ||||
| | +--ro last-updated? yang:date-and-time | ||||
| | +--ro v4ur:destination-prefix? inet:ipv4-prefix | ||||
| | +--ro v6ur:destination-prefix? inet:ipv6-prefix | ||||
| +--ro recipient-ribs {advanced-router}? | ||||
| +--ro recipient-rib* [rib-id] | ||||
| +--ro rib-id rib-state-ref | ||||
| +--ro filter? route-filter-state-ref | ||||
+--ro route-filters | ||||
+--ro route-filter* [name] | ||||
+--ro name string | ||||
+--ro type identityref | ||||
Appendix B. Example: Adding a New Routing Protocol | Appendix B. 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 5.4.2. | |||
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 68, line 51 | skipping to change at page 79, line 51 | |||
} | } | |||
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-state/rt:routing-tables/rt:routing-table/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
+ "rt:routes/rt:route" { | ||||
when "rt:source-protocol = 'rip:rip'" { | when "rt:source-protocol = 'rip:rip'" { | |||
description | description | |||
"This augment is only valid for a routes whose source | "This augment is only valid for a routes whose source | |||
protocol is RIP."; | protocol is RIP."; | |||
} | } | |||
description | description | |||
"RIP-specific route attributes."; | "RIP-specific route attributes."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/rt:route" { | |||
description | description | |||
"RIP-specific route attributes in the output of 'active-route' | "RIP-specific route attributes in the output of 'active-route' | |||
RPC."; | RPC."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
+ "rt:routing-protocol" { | + "rt:routing-protocol" { | |||
when "rt:type = 'rip:rip'" { | when "rt:type = 'rip:rip'" { | |||
description | description | |||
"This augment is only valid for a routing protocol instance | "This augment is only valid for a routing protocol instance | |||
of type 'rip'."; | of type 'rip'."; | |||
} | } | |||
container rip { | container rip { | |||
description | description | |||
"RIP instance configuration."; | "RIP instance configuration."; | |||
container interfaces { | container interfaces { | |||
skipping to change at page 71, line 15 | skipping to change at page 82, line 15 | |||
Appendix C. Example: NETCONF <get> Reply | Appendix C. 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 7), | |||
o ietf-ipv4-unicast-routing (Section 7), | o ietf-ipv4-unicast-routing (Section 8), | |||
o ietf-ipv6-unicast-routing (Section 8). | o ietf-ipv6-unicast-routing (Section 9). | |||
We assume a simple network setup as shown in Figure 5: router "A" | We assume a simple network setup as shown in Figure 5: router "A" | |||
uses static default routes with the "ISP" router as the next hop. | uses static default routes with the "ISP" router as the next hop. | |||
IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
+-----------------+ | +-----------------+ | |||
| | | | | | |||
| Router ISP | | | Router ISP | | |||
| | | | | | |||
skipping to change at page 73, line 39 | skipping to change at page 84, line 39 | |||
<if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
<if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | |||
<if:statistics> | <if:statistics> | |||
<if:discontinuity-time> | <if:discontinuity-time> | |||
2013-07-02T17:11:27+00:59 | 2013-07-02T17:11:27+00:59 | |||
</if:discontinuity-time> | </if:discontinuity-time> | |||
</if:statistics> | </if:statistics> | |||
</if:interface> | </if:interface> | |||
</if:interfaces-state> | </if:interfaces-state> | |||
<rt:routing> | <rt:routing> | |||
<rt:router> | <rt:routing-instance> | |||
<rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
<rt:routing-instance-id>1415926535</rt:routing-instance-id> | ||||
<rt:description>Router A</rt:description> | <rt:description>Router A</rt:description> | |||
<rt:interfaces> | <rt:interfaces> | |||
<rt:interface> | <rt:interface> | |||
<rt:name>eth1</rt:name> | <rt:name>eth1</rt:name> | |||
<v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
<v6ur:send-advertisements>true</v6ur:send-advertisements> | <v6ur:send-advertisements>true</v6ur:send-advertisements> | |||
<v6ur:prefix-list> | <v6ur:prefix-list> | |||
<v6ur:prefix> | <v6ur:prefix> | |||
<v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | |||
</v6ur:prefix> | </v6ur:prefix> | |||
</v6ur:prefix-list> | ||||
</v6ur:prefix-list> | ||||
</v6ur:ipv6-router-advertisements> | </v6ur:ipv6-router-advertisements> | |||
</rt:interface> | </rt:interface> | |||
</rt:interfaces> | </rt:interfaces> | |||
<rt:routing-protocols> | <rt:routing-protocols> | |||
<rt:routing-protocol> | <rt:routing-protocol> | |||
<rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
<rt:description> | <rt:description> | |||
Static routing is used for the internal network. | Static routing is used for the internal network. | |||
</rt:description> | </rt:description> | |||
<rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
<rt:static-routes> | <rt:static-routes> | |||
<v4ur:ipv4> | <v4ur:ipv4> | |||
<v4ur:route> | <v4ur:route> | |||
<v4ur:id>1</v4ur:id> | <v4ur:id>1</v4ur:id> | |||
<v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | |||
<v4ur:next-hop>192.0.2.2</v4ur:next-hop> | <v4ur:gateway>192.0.2.2</v4ur:gateway> | |||
</v4ur:route> | </v4ur:route> | |||
</v4ur:ipv4> | </v4ur:ipv4> | |||
<v6ur:ipv6> | <v6ur:ipv6> | |||
<v6ur:route> | <v6ur:route> | |||
<v6ur:id>1</v6ur:id> | <v6ur:id>1</v6ur:id> | |||
<v6ur:dest-prefix>::/0</v6ur:dest-prefix> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | <v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> | |||
</v6ur:route> | </v6ur:route> | |||
</v6ur:ipv6> | </v6ur:ipv6> | |||
</rt:static-routes> | </rt:static-routes> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
</rt:router> | </rt:routing-instance> | |||
</rt:routing> | </rt:routing> | |||
<rt:routing-state> | <rt:routing-state> | |||
<rt:router> | <rt:routing-instance> | |||
<rt:id>1415926535</rt:id> | ||||
<rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
<rt:router-id>192.0.2.1</rt:router-id> | <rt:router-id>192.0.2.1</rt:router-id> | |||
<rt:default-routing-tables> | <rt:default-ribs> | |||
<rt:default-routing-table> | <rt:default-rib> | |||
<rt:address-family>ipv4</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
<rt:safi>nlri-unicast</rt:safi> | <rt:rib-id>897932384</rt:rib-id> | |||
<rt:name>ipv4-unicast</rt:name> | </rt:default-rib> | |||
</rt:default-routing-table> | <rt:default-rib> | |||
<rt:default-routing-table> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
<rt:address-family>ipv6</rt:address-family> | <rt:rib-id>751058209</rt:rib-id> | |||
<rt:safi>nlri-unicast</rt:safi> | </rt:default-rib> | |||
<rt:name>ipv6-unicast</rt:name> | </rt:default-ribs> | |||
</rt:default-routing-table> | ||||
</rt:default-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 75, line 24 | skipping to change at page 86, line 24 | |||
</v6ur:prefix-list> | </v6ur:prefix-list> | |||
</v6ur:ipv6-router-advertisements> | </v6ur:ipv6-router-advertisements> | |||
</rt:interface> | </rt:interface> | |||
</rt:interfaces> | </rt:interfaces> | |||
<rt:routing-protocols> | <rt:routing-protocols> | |||
<rt:routing-protocol> | <rt:routing-protocol> | |||
<rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
<rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
</rt:router> | </rt:routing-instance> | |||
<rt:routing-tables> | <rt:ribs> | |||
<rt:routing-table> | <rt:rib> | |||
<rt:name>ipv4-unicast</rt:name> | <rt:id>897932384</rt:id> | |||
<rt:address-family>ipv4</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | <rt:id>626433832</rt:id> | |||
<v4ur:destination-prefix> | ||||
192.0.2.1/24 | ||||
</v4ur:destination-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | <rt:id>795028841</rt:id> | |||
<v4ur:destination-prefix> | ||||
198.51.100.0/24 | ||||
</v4ur:destination-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | <rt:id>971693993</rt:id> | |||
<v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | ||||
<rt:source-protocol>rt:static</rt:source-protocol> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
<v4ur:next-hop>192.0.2.2</v4ur:next-hop> | <v4ur:gateway>192.0.2.2</v4ur:gateway> | |||
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:routing-table> | </rt:rib> | |||
<rt:routing-table> | <rt:rib> | |||
<rt:name>ipv6-unicast</rt:name> | <rt:id>751058209</rt:id> | |||
<rt:address-family>ipv6</rt:address-family> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | <rt:id>749445923</rt:id> | |||
<v6ur:destination-prefix> | ||||
2001:db8:0:1::/64 | ||||
</v6ur:destination-prefix> | ||||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | <rt:id>78164062</rt:id> | |||
<v6ur:destination-prefix> | ||||
2001:db8:0:2::/64 | ||||
</v6ur:destination-prefix> | ||||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v6ur:dest-prefix>::/0</v6ur:dest-prefix> | <rt:id>862089986</rt:id> | |||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
<v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> | ||||
<rt:source-protocol>rt:static</rt:source-protocol> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
<rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | |||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:routing-table> | </rt:rib> | |||
</rt:routing-tables> | </rt:ribs> | |||
</rt:routing-state> | </rt:routing-state> | |||
</data> | </data> | |||
</rpc-reply> | </rpc-reply> | |||
Appendix D. Change Log | Appendix D. Change Log | |||
RFC Editor: remove this section upon publication as an RFC. | RFC Editor: remove this section upon publication as an RFC. | |||
D.1. Changes Between Versions -09 and -10 | D.1. Changes Between Versions -10 and -11 | |||
o Migrated address families from IANA enumerations to identities. | ||||
o Terminology and node names aligned with the I2RS RIB model: router | ||||
-> routing instance, routing table -> RIB. | ||||
o Introduced uint64 keys for state lists: routing-instance, rib, | ||||
route, nexthop. | ||||
o Described the relationship between system-controlled and user- | ||||
controlled list entries. | ||||
o Feature "user-defined-routing-tables" changed into "advanced- | ||||
router". | ||||
o Made nexthop into a choice in order to allow for nexthop-list | ||||
(I2RS requirement). | ||||
o Added nexthop-list with entries having priorities (backup) and | ||||
weights (load balancing). | ||||
o Updated bibliography references. | ||||
D.2. Changes Between Versions -09 and -10 | ||||
o Added subtree for operational state data ("/routing-state"). | o Added subtree for operational state data ("/routing-state"). | |||
o Terms "system-controlled entry" and "user-controlled entry" | o Terms "system-controlled entry" and "user-controlled entry" | |||
defined and used. | defined and used. | |||
o New feature "user-defined-routing-tables". Nodes that are useful | o New feature "user-defined-routing-tables". Nodes that are useful | |||
only with user-defined routing tables are now conditional. | only with user-defined routing tables are now conditional. | |||
o Added grouping "router-id". | o Added grouping "router-id". | |||
o In routing tables, "source-protocol" attribute of routes now | o In routing tables, "source-protocol" attribute of routes now | |||
reports only protocol type, and its datatype is "identityref". | reports only protocol type, and its datatype is "identityref". | |||
o Renamed "main-routing-table" to "default-routing-table". | o Renamed "main-routing-table" to "default-routing-table". | |||
D.2. Changes Between Versions -08 and -09 | D.3. Changes Between Versions -08 and -09 | |||
o Fixed "must" expresion for "connected-routing-table". | o Fixed "must" expresion for "connected-routing-table". | |||
o Simplified "must" expression for "main-routing-table". | o Simplified "must" expression for "main-routing-table". | |||
o Moved per-interface configuration of a new routing protocol under | o Moved per-interface configuration of a new routing protocol under | |||
'routing-protocol'. This also affects the 'example-rip' module. | 'routing-protocol'. This also affects the 'example-rip' module. | |||
D.3. Changes Between Versions -07 and -08 | D.4. Changes Between Versions -07 and -08 | |||
o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
D.4. Changes Between Versions -06 and -07 | D.5. Changes Between Versions -06 and -07 | |||
o The contents of <get-reply> in Appendix C was updated: "eth[01]" | o The contents of <get-reply> in Appendix C was updated: "eth[01]" | |||
is used as the value of "location", and "forwarding" is on for | is used as the value of "location", and "forwarding" is on for | |||
both interfaces and both IPv4 and IPv6. | both interfaces and both IPv4 and IPv6. | |||
o The "must" expression for "main-routing-table" was modified to | o The "must" expression for "main-routing-table" was modified to | |||
avoid redundant error messages reporting address family mismatch | avoid redundant error messages reporting address family mismatch | |||
when "name" points to a non-existent routing table. | when "name" points to a non-existent routing table. | |||
o The default behavior for IPv6 RA prefix advertisements was | o The default behavior for IPv6 RA prefix advertisements was | |||
clarified. | clarified. | |||
o Changed type of "rt:router-id" to "ip:dotted-quad". | o Changed type of "rt:router-id" to "ip:dotted-quad". | |||
o Type of "rt:router-id" changed to "yang:dotted-quad". | o Type of "rt:router-id" changed to "yang:dotted-quad". | |||
o Fixed missing prefixes in XPath expressions. | o Fixed missing prefixes in XPath expressions. | |||
D.5. Changes Between Versions -05 and -06 | D.6. Changes Between Versions -05 and -06 | |||
o Document title changed: "Configuration" was replaced by | o Document title changed: "Configuration" was replaced by | |||
"Management". | "Management". | |||
o New typedefs "routing-table-ref" and "route-filter-ref". | o New typedefs "routing-table-ref" and "route-filter-ref". | |||
o Double slashes "//" were removed from XPath expressions and | o Double slashes "//" were removed from XPath expressions and | |||
replaced with the single "/". | replaced with the single "/". | |||
o Removed uniqueness requirement for "router-id". | o Removed uniqueness requirement for "router-id". | |||
skipping to change at page 78, line 33 | skipping to change at page 90, line 11 | |||
o Complete data tree is now in Appendix A. | o Complete data tree is now in Appendix A. | |||
o Changed type of "source-protocol" from "leafref" to "string". | o Changed type of "source-protocol" from "leafref" to "string". | |||
o Clarified the relationship between routing protocol instances and | o Clarified the relationship between routing protocol instances and | |||
connected routing tables. | connected routing tables. | |||
o Added a must constraint saying that a routing table connected to | o Added a must constraint saying that a routing table connected to | |||
the direct pseudo-protocol must not be a main routing table. | the direct pseudo-protocol must not be a main routing table. | |||
D.6. Changes Between Versions -04 and -05 | D.7. Changes Between Versions -04 and -05 | |||
o Routing tables are now global, i.e., "routing-tables" is a child | o Routing tables are now global, i.e., "routing-tables" is a child | |||
of "routing" rather than "router". | of "routing" rather than "router". | |||
o "must" statement for "static-routes" changed to "when". | o "must" statement for "static-routes" changed to "when". | |||
o Added "main-routing-tables" containing references to main routing | o Added "main-routing-tables" containing references to main routing | |||
tables for each address family. | tables for each address family. | |||
o Removed the defaults for "address-family" and "safi" and made them | o Removed the defaults for "address-family" and "safi" and made them | |||
skipping to change at page 79, line 21 | skipping to change at page 90, line 46 | |||
o The "direct" pseudo-protocol is always connected to main routing | o The "direct" pseudo-protocol is always connected to main routing | |||
tables. | tables. | |||
o Entries in the list of connected routing tables renamed from | o Entries in the list of connected routing tables renamed from | |||
"routing-table" to "connected-routing-table". | "routing-table" to "connected-routing-table". | |||
o Added "must" constraint saying that a routing table must not be | o Added "must" constraint saying that a routing table must not be | |||
its own recipient. | its own recipient. | |||
D.7. Changes Between Versions -03 and -04 | D.8. Changes Between Versions -03 and -04 | |||
o Changed "error-tag" for both RPC methods from "missing element" to | o Changed "error-tag" for both RPC methods from "missing element" to | |||
"data-missing". | "data-missing". | |||
o Removed the decrementing behavior for advertised IPv6 prefix | o Removed the decrementing behavior for advertised IPv6 prefix | |||
parameters "valid-lifetime" and "preferred-lifetime". | parameters "valid-lifetime" and "preferred-lifetime". | |||
o Changed the key of the static route lists from "seqno" to "id" | o Changed the key of the static route lists from "seqno" to "id" | |||
because the routes needn't be sorted. | because the routes needn't be sorted. | |||
o Added 'must' constraint saying that "preferred-lifetime" must not | o Added 'must' constraint saying that "preferred-lifetime" must not | |||
be greater than "valid-lifetime". | be greater than "valid-lifetime". | |||
D.8. Changes Between Versions -02 and -03 | D.9. 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". | |||
o For both RPCs, specification of negative responses was added. | o For both RPCs, specification of negative responses was added. | |||
o Relaxed separation of router instances. | o Relaxed separation of router instances. | |||
o Assignment of interfaces to router instances needn't be disjoint. | o Assignment of interfaces to router instances needn't be disjoint. | |||
o Route filters are now global. | o Route filters are now global. | |||
o Added "allow-all-route-filter" for symmetry. | o Added "allow-all-route-filter" for symmetry. | |||
o Added Section 5 about interactions with "ietf-interfaces" and | o Added Section 6 about interactions with "ietf-interfaces" and | |||
"ietf-ip". | "ietf-ip". | |||
o Added "router-id" leaf. | o Added "router-id" leaf. | |||
o Specified the names for IPv4/IPv6 unicast main routing tables. | o Specified the names for IPv4/IPv6 unicast main routing tables. | |||
o Route parameter "last-modified" changed to "age". | o Route parameter "last-modified" changed to "age". | |||
o Added container "recipient-routing-tables". | o Added container "recipient-routing-tables". | |||
D.9. Changes Between Versions -01 and -02 | D.10. Changes Between Versions -01 and -02 | |||
o Added module "ietf-ipv6-unicast-routing". | o Added module "ietf-ipv6-unicast-routing". | |||
o The example in Appendix C now uses IP addresses from blocks | o The example in Appendix C now uses IP addresses from blocks | |||
reserved for documentation. | reserved for documentation. | |||
o Direct routes appear by default in the forwarding table. | o Direct routes appear by default in the forwarding table. | |||
o Network layer interfaces must be assigned to a router instance. | o Network layer interfaces must be assigned to a router instance. | |||
Additional interface configuration may be present. | Additional interface configuration may be present. | |||
skipping to change at page 80, line 44 | skipping to change at page 92, line 20 | |||
o Additional "must" statements were added. | o Additional "must" statements were added. | |||
o The "route-content" grouping for IPv4 and IPv6 unicast now | o The "route-content" grouping for IPv4 and IPv6 unicast now | |||
includes the material from the "ietf-routing" version via "uses | includes the material from the "ietf-routing" version via "uses | |||
rt:route-content". | rt:route-content". | |||
o Explanation of symbols in the tree representation of data model | o Explanation of symbols in the tree representation of data model | |||
hierarchy. | hierarchy. | |||
D.10. Changes Between Versions -00 and -01 | D.11. 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. 335 change blocks. | ||||
944 lines changed or deleted | 1468 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/ |