draft-ietf-netmod-routing-cfg-16.txt | draft-ietf-netmod-routing-cfg-17.txt | |||
---|---|---|---|---|
NETMOD Working Group L. Lhotka | NETMOD Working Group L. Lhotka | |||
Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
Intended status: Standards Track October 26, 2014 | Intended status: Standards Track A. Lindem | |||
Expires: April 29, 2015 | Expires: September 5, 2015 Cisco Systems | |||
March 04, 2015 | ||||
A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
draft-ietf-netmod-routing-cfg-16 | draft-ietf-netmod-routing-cfg-17 | |||
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 routing protocols and other | modules defining data models for routing protocols and other | |||
functions. The core routing data model provides common building | functions. The core routing data model provides common building | |||
blocks for such extensions - routing instances, routes, routing | blocks for such extensions - routing instances, routes, routing | |||
information bases (RIB), routing protocols and route filters. | information bases (RIB), and routing protocols. | |||
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 April 29, 2015. | This Internet-Draft will expire on September 5, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 17 | skipping to change at page 2, line 18 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | |||
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 | |||
2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | |||
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4. The Design of the Core Routing Data Model . . . . . . . . . . 6 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 6 | |||
4.1. System-Controlled and User-Controlled List Entries . . . 10 | 4.1. System-Controlled and User-Controlled List Entries . . . 9 | |||
4.2. Features of Advanced Routers . . . . . . . . . . . . . . 10 | 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 10 | |||
5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . 11 | 5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . 11 | |||
5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . 12 | 5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . 13 | |||
5.3. Routing Information Base (RIB) . . . . . . . . . . . . . 14 | 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . 14 | |||
5.3.1. Multiple RIBs per Address Family . . . . . . . . . . 15 | 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . 14 | |||
5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . 15 | 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 15 | |||
5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 16 | 5.4.2. Defining New Routing Protocols . . . . . . . . . . . 15 | |||
5.4.2. Defining New Routing Protocols . . . . . . . . . . . 18 | 5.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 16 | |||
5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . 19 | 6. Interactions with Other YANG Modules . . . . . . . . . . . . 17 | |||
5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . 20 | 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 17 | |||
6. Interactions with Other YANG Modules . . . . . . . . . . . . 20 | 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 17 | |||
6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 20 | 7. Routing Management YANG Module . . . . . . . . . . . . . . . 18 | |||
6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 20 | 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 36 | |||
7. Routing Management YANG Module . . . . . . . . . . . . . . . 21 | 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 40 | |||
8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 44 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 | |||
9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 49 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 54 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 64 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 65 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 55 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 65 | 13.2. Informative References . . . . . . . . . . . . . . . . . 56 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 65 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 56 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 66 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 56 | |||
Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 66 | A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 66 | Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 59 | |||
A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 69 | Appendix C. Example: Adding a New Routing Protocol . . . . . . . 60 | |||
Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 71 | Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 62 | |||
Appendix C. Example: Adding a New Routing Protocol . . . . . . . 72 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 69 | |||
Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 74 | E.1. Changes Between Versions -16 and -17 . . . . . . . . . . 69 | |||
Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 81 | E.2. Changes Between Versions -15 and -16 . . . . . . . . . . 69 | |||
E.1. Changes Between Versions -15 and -16 . . . . . . . . . . 81 | E.3. Changes Between Versions -14 and -15 . . . . . . . . . . 70 | |||
E.2. Changes Between Versions -14 and -15 . . . . . . . . . . 82 | E.4. Changes Between Versions -13 and -14 . . . . . . . . . . 70 | |||
E.3. Changes Between Versions -13 and -14 . . . . . . . . . . 82 | E.5. Changes Between Versions -12 and -13 . . . . . . . . . . 70 | |||
E.4. Changes Between Versions -12 and -13 . . . . . . . . . . 82 | E.6. Changes Between Versions -11 and -12 . . . . . . . . . . 71 | |||
E.5. Changes Between Versions -11 and -12 . . . . . . . . . . 83 | E.7. Changes Between Versions -10 and -11 . . . . . . . . . . 71 | |||
E.6. Changes Between Versions -10 and -11 . . . . . . . . . . 83 | E.8. Changes Between Versions -09 and -10 . . . . . . . . . . 72 | |||
E.7. Changes Between Versions -09 and -10 . . . . . . . . . . 84 | E.9. Changes Between Versions -08 and -09 . . . . . . . . . . 72 | |||
E.8. Changes Between Versions -08 and -09 . . . . . . . . . . 84 | E.10. Changes Between Versions -07 and -08 . . . . . . . . . . 72 | |||
E.9. Changes Between Versions -07 and -08 . . . . . . . . . . 84 | E.11. Changes Between Versions -06 and -07 . . . . . . . . . . 72 | |||
E.10. Changes Between Versions -06 and -07 . . . . . . . . . . 84 | E.12. Changes Between Versions -05 and -06 . . . . . . . . . . 73 | |||
E.11. Changes Between Versions -05 and -06 . . . . . . . . . . 85 | E.13. Changes Between Versions -04 and -05 . . . . . . . . . . 73 | |||
E.12. Changes Between Versions -04 and -05 . . . . . . . . . . 85 | E.14. Changes Between Versions -03 and -04 . . . . . . . . . . 74 | |||
E.13. Changes Between Versions -03 and -04 . . . . . . . . . . 86 | E.15. Changes Between Versions -02 and -03 . . . . . . . . . . 74 | |||
E.14. Changes Between Versions -02 and -03 . . . . . . . . . . 86 | E.16. Changes Between Versions -01 and -02 . . . . . . . . . . 75 | |||
E.15. Changes Between Versions -01 and -02 . . . . . . . . . . 87 | E.17. Changes Between Versions -00 and -01 . . . . . . . . . . 75 | |||
E.16. Changes Between Versions -00 and -01 . . . . . . . . . . 87 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 88 | ||||
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 4, line 35 | skipping to change at page 4, line 35 | |||
o mandatory node | o mandatory node | |||
o module | o module | |||
o state data | o state data | |||
o RPC operation | o RPC operation | |||
2.1. Glossary of New Terms | 2.1. Glossary of New Terms | |||
active route: a route that is actually used for sending packets. If | ||||
there are multiple candidate routes with a matching destination | ||||
prefix, then it is up to the routing algorithm to select the | ||||
active route. | ||||
core routing data model: YANG data model comprising "ietf-routing", | core routing data model: YANG data model comprising "ietf-routing", | |||
"ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" | "ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" | |||
modules. | modules. | |||
direct route: a route to a directly connected network. | direct route: a route to a directly connected network. | |||
routing information base (RIB): An object containing a list of | routing information base (RIB): An object containing a list of | |||
routes together with other information. See Section 5.3 for | routes together with other information. See Section 5.3 for | |||
details. | details. | |||
skipping to change at page 5, line 23 | skipping to change at page 5, line 19 | |||
appear in the main text. | appear in the main text. | |||
The meaning of the symbols in these diagrams is as follows: | The meaning of the symbols in these 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 | o Curly braces "{" and "}" contain names of optional features that | |||
make the corresponding node conditional. | 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), "ro" state data (read-only), "-x" RPC operations, | |||
and "-n" notifications. | ||||
o Symbols after data node names: "?" means an optional node and "*" | o Symbols after data node names: "?" means an optional node, "!" a | |||
denotes a "list" or "leaf-list". | container with presence, and "*" denotes a "list" or "leaf-list". | |||
o Parentheses enclose choice and case nodes, and case nodes are also | o Parentheses enclose choice and case nodes, and case nodes are also | |||
marked with a colon (":"). | marked with a colon (":"). | |||
o Ellipsis ("...") stands for contents of subtrees that are not | o Ellipsis ("...") stands for contents of subtrees that are not | |||
shown. | shown. | |||
2.3. Prefixes in Data Node Names | 2.3. Prefixes in Data Node Names | |||
In this document, names of data nodes, RPC methods and other data | In this document, names of data nodes, RPC operations and other data | |||
model objects are often used without a prefix, as long as it is clear | model objects are often used without a prefix, as long as it is clear | |||
from the context in which YANG module each name is defined. | 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 | | |||
+--------+---------------------------+-----------+ | +--------+---------------------------+-----------+ | |||
| if | ietf-interfaces | [RFC7223] | | | if | ietf-interfaces | [RFC7223] | | |||
| ip | ietf-ip | [RFC7277] | | | ip | ietf-ip | [RFC7277] | | |||
skipping to change at page 7, line 33 | skipping to change at page 7, line 33 | |||
| +--rw type | | +--rw type | |||
| +--rw name | | +--rw name | |||
| +--rw description? | | +--rw description? | |||
| +--rw enabled? | | +--rw enabled? | |||
| +--rw route-preference? | | +--rw route-preference? | |||
| +--rw connected-ribs | | +--rw connected-ribs | |||
| | ... | | | ... | |||
| +--rw static-routes | | +--rw static-routes | |||
| ... | | ... | |||
+--rw ribs | +--rw ribs | |||
| +--rw rib* [name] | +--rw rib* [name] | |||
| +--rw name | ||||
| +--rw address-family | ||||
| +--rw description? | ||||
| +--rw recipient-ribs | ||||
| +--rw recipient-rib* [rib-name] | ||||
| ... | ||||
+--rw route-filters | ||||
+--rw route-filter* [name] | ||||
+--rw name | +--rw name | |||
+--rw address-family | ||||
+--rw description? | +--rw description? | |||
+--rw type | +--rw recipient-ribs | |||
+--rw recipient-rib* [rib-name] | ||||
... | ||||
Figure 1: Configuration data hierarchy. | Figure 1: Configuration data hierarchy. | |||
+--ro routing-state | +--ro routing-state | |||
+--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| +--ro name | | +--ro name | |||
| +--ro id | ||||
| +--ro type? | | +--ro type? | |||
| +--ro default-ribs | | +--ro default-ribs | |||
| | +--ro default-rib* [address-family] | | | +--ro default-rib* [address-family] | |||
| | +--ro address-family | | | +--ro address-family | |||
| | +--ro rib-name | | | +--ro rib-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* [type name] | | +--ro routing-protocol* [type name] | |||
| +--ro type | | +--ro type | |||
| +--ro name | | +--ro name | |||
| +--ro route-preference | | +--ro route-preference | |||
| +--ro connected-ribs | | +--ro connected-ribs | |||
| ... | | ... | |||
+--ro next-hop-lists | ||||
| +--ro next-hop-list* [id] | ||||
| +--ro id | ||||
| +--ro address-family | ||||
| +--ro next-hop* | ||||
| +--ro (next-hop-options) | ||||
| | ... | ||||
| +--ro priority? | ||||
| +--ro weight? | ||||
+--ro ribs | +--ro ribs | |||
| +--ro rib* [name] | +--ro rib* [name] | |||
| +--ro name | ||||
| +--ro id | ||||
| +--ro address-family | ||||
| +--ro routes | ||||
| | +--ro route* | ||||
| | ... | ||||
| +--ro recipient-ribs | ||||
| +--ro recipient-rib* [rib-name] | ||||
| ... | ||||
+--ro route-filters | ||||
+--ro route-filter* [name] | ||||
+--ro name | +--ro name | |||
+--ro type | +--ro address-family | |||
+--ro routes | ||||
| +--ro route* | ||||
| ... | ||||
+--ro recipient-ribs | ||||
+--ro recipient-rib* [rib-name] | ||||
... | ||||
Figure 2: State data hierarchy. | Figure 2: State data hierarchy. | |||
As can be seen from Figures 1 and 2, the core routing data model | As can be seen from Figures 1 and 2, the core routing data model | |||
introduces several generic components of a routing framework: routing | introduces several generic components of a routing framework: routing | |||
instances, RIBs containing lists of routes, routing protocols and | instances, RIBs containing lists of routes, and routing protocols. | |||
route filters. The following subsections describe these components | The following subsections describe these 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 |------>| |<------| | | |||
+--------+ +---+ | default | +---+ | additional | | +--------+ | default | | additional | | |||
| RIB | | RIB | | | RIB | | RIB | | |||
+--------+ +---+ | | +---+ | | | +--------+ | | | | | |||
| static |--->| F |--->| |--->| F |--->| | | | static |------>| |------>| | | |||
| routes | +---+ +--------------+ +---+ +--------------+ | | routes | +--------------+ +--------------+ | |||
+--------+ ^ | ^ | | +--------+ ^ | ^ | | |||
| v | v | | | | | | |||
+---+ +---+ +---+ +---+ | | v | v | |||
| F | | F | | F | | F | | +----------+ +----------+ | |||
+---+ +---+ +---+ +---+ | | routing | | routing | | |||
^ | ^ | | | protocol | | protocol | | |||
| v | v | +----------+ +----------+ | |||
+----------+ +----------+ | ||||
| routing | | routing | | ||||
| protocol | | protocol | | ||||
+----------+ +----------+ | ||||
Figure 3: Example set-up of a routing system | Figure 3: Example set-up 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 RIB, which is always present, an additional | o Along with the default RIB, which is always present, an additional | |||
RIB 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 exactly one RIB with | "direct" pseudo-protocols, is connected to one or more RIBs 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 RIBs may also be connected to each other and exchange routes in | o RIBs may also be connected to each other and exchange routes in | |||
either direction (or both). | either direction (or both). | |||
o Route exchanges along all connections may be controlled by means | ||||
of route filters, denoted by "F" in Figure 3. | ||||
4.1. System-Controlled and User-Controlled List Entries | 4.1. System-Controlled and User-Controlled List Entries | |||
The core routing data model defines several lists, for example | The core routing data model defines several lists, for example | |||
"routing-instance" or "rib", that have to be populated with at least | "routing-instance" or "rib", that have to be populated with at least | |||
one entry in any properly functioning device, and additional entries | one entry in any properly functioning device, and additional entries | |||
may be configured by the user. | may be configured by the user. | |||
In such a list, the server creates the required item as a so-called | In such a list, the server creates the required item as a so-called | |||
system-controlled entry in state data, i.e., inside the "routing- | system-controlled entry in state data, i.e., inside the "routing- | |||
state" container. | state" container. | |||
skipping to change at page 10, line 46 | skipping to change at page 10, line 27 | |||
has the value "rtr0". This entry is configured by the "/routing/ | has the value "rtr0". This entry is configured by the "/routing/ | |||
routing-instance" entry whose "name" key is also "rtr0". | routing-instance" entry whose "name" key is also "rtr0". | |||
Deleting a user-controlled entry from the configuration list results | Deleting a user-controlled entry from the configuration list results | |||
in the removal of the corresponding entry in the state data list. In | in the removal of the corresponding entry in the state data list. In | |||
contrast, if a system-controlled entry is deleted from the | contrast, if a system-controlled entry is deleted from the | |||
configuration list, only the extra configuration specified in that | configuration list, only the extra configuration specified in that | |||
entry is removed but the corresponding state data entry remains in | entry is removed but the corresponding state data entry remains in | |||
the list. | the list. | |||
4.2. Features of 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 | ||||
would represent unnecessary complications for the implementation. | ||||
Therefore, the core routing data model makes the configuration of | ||||
some advanced functions optional to implement by means of two YANG | ||||
features: | ||||
o "multiple-ribs" - indicates that the device supports configuration | ||||
of user-defined RIBs, routing protocols connected to non-default | ||||
RIBs, and RIBs configured as receivers of routes from other RIBs. | ||||
o "multipath-routes" - indicates that the device supports | ||||
configuration of routes with multiple next-hops. | ||||
See the "ietf-routing" module for details. | ||||
5. Basic Building Blocks | 5. Basic Building Blocks | |||
This section describes the essential components of the core routing | This section describes the essential components of the core routing | |||
data model. | data model. | |||
5.1. Routing Instance | 5.1. Routing Instance | |||
The core routing data model supports one or more routing instances | The core routing data model supports one or more routing instances | |||
appearing as entries of the "routing-instance" list. Each routing | appearing as entries of the "routing-instance" list. Each routing | |||
instance has separate configuration and state data under | instance has separate configuration and state data under | |||
skipping to change at page 14, line 4 | skipping to change at page 13, line 14 | |||
The choice of next-hops comprises the following cases: | The choice of next-hops comprises the following cases: | |||
o simple next-hop - IP address of the next-hop router, outgoing | o simple next-hop - IP address of the next-hop router, outgoing | |||
interface, or both. | interface, or both. | |||
o special next-hop - a keyword indicating special packet handling, | o special next-hop - a keyword indicating special packet handling, | |||
one of: | one of: | |||
* "blackhole" - silently discard the packet; | * "blackhole" - silently discard the packet; | |||
* "unreachable" - discard the packet and notify the sender with a | * "unreachable" - discard the packet and notify the sender with a | |||
"destination unreachable" error message; | "destination unreachable" error message; | |||
* "prohibit" - discard the packet notify the sender with an | * "prohibit" - discard the packet notify the sender with an | |||
"administratively prohibited" error message. | "administratively prohibited" error message. | |||
o next-hop list reference - each next-hop list is a set of next-hops | It is expected that future YANG modules defining will augment routes | |||
that may also contain a reference to another next-hop list. | with more complex next-hop types, or additional attributes such as | |||
metrics. | ||||
o RIB reference - a new look-up is to be performed in the specified | ||||
RIB. | ||||
It is expected that future modules defining routing protocols will | ||||
add other route attributes such as metrics or preferences. | ||||
Routes are primarily state data that appear as entries of RIBs | Routes are primarily state data that appear as entries of RIBs | |||
(Section 5.3) but they may be also found in configuration data, for | (Section 5.3) but they may also be found in configuration data, for | |||
example as manually configured static routes. In the latter case, | example as manually configured static routes. In the latter case, | |||
configurable route attributes are generally a subset of route | configurable route attributes are generally a subset of route | |||
attributes described above. | attributes described above. | |||
5.3. Routing Information Base (RIB) | 5.3. Routing Information Base (RIB) | |||
A routing information base (RIB) is a list of routes complemented | A routing information base (RIB) is a list of routes complemented | |||
with administrative data, namely: | with administrative data, namely: | |||
o "source-protocol": type of the routing protocol from which the | o "source-protocol": type of the routing protocol from which the | |||
route was originally obtained. | route was originally obtained. | |||
o "preferred": an implementation can use this empty leaf to indicate | o "active": an implementation can use this empty leaf to indicate | |||
that the route is preferred among all routes in the same RIB that | that the route is preferred among all routes in the same RIB that | |||
have the same destination prefix. | have the same destination prefix. | |||
o "last-updated": the date and time when the route was last updated, | o "last-updated": the date and time when the route was last updated, | |||
or inserted into the RIB. | or inserted into the RIB. | |||
Each RIB MUST contain only routes of one address family. In the data | Each RIB MUST contain only routes of one address family. An address | |||
model, address family is represented with an identity derived from | family is represented by an identity derived from the "rt:address- | |||
the "rt:address-family" base identity. | family" base identity. | |||
In the core routing data model, RIBs are state data represented as | In the core routing data model, RIBs are state data represented as | |||
entries of the list "/routing-state/ribs/rib". The contents of RIBs | entries of the list "/routing-state/ribs/rib". The contents of RIBs | |||
are controlled and manipulated by routing protocol operations which | are controlled and manipulated by routing protocol operations which | |||
may result in route additions, removals and modifications. This also | may result in route additions, removals and modifications. This also | |||
includes manipulations via the "static" and/or "direct" pseudo- | includes manipulations via the "static" and/or "direct" pseudo- | |||
protocols, see Section 5.4.1. | protocols, see Section 5.4.1. | |||
RIBs are global, which means that a RIB may be used by any or all | RIBs are global, which means that a RIB may be used by any or all | |||
routing instances. However, a data model for a routing instance type | routing instances. However, a data model for a routing instance type | |||
skipping to change at page 15, line 27 | skipping to change at page 14, line 30 | |||
supported address family, and declare it as the default RIB (via a | supported address family, and declare it as the default RIB (via a | |||
system-controlled entry of the "default-rib" list). | system-controlled entry of the "default-rib" list). | |||
5.3.1. Multiple RIBs per Address Family | 5.3.1. Multiple RIBs per Address Family | |||
More complex router implementations advertising the "multiple-ribs" | More complex router implementations advertising the "multiple-ribs" | |||
feature support multiple RIBs per address family that can be used for | feature support multiple RIBs per address family that can be used for | |||
policy routing and other purposes. Every RIB can then serve as a | policy routing and other purposes. Every RIB can then serve as a | |||
source of routes for other RIBs of the same address family. To | source of routes for other RIBs of the same address family. To | |||
achieve this, one or more recipient RIBs may be specified in the | achieve this, one or more recipient RIBs may be specified in the | |||
configuration of the source RIB. Optionally, a route filter may be | configuration of the source RIB. | |||
configured for any or all recipient RIBs. Such a route filter then | ||||
selects and/or manipulates the routes that are passed between the | ||||
source and recipient RIB. | ||||
A RIB MUST NOT appear among its own recipient RIBs. | A RIB MUST NOT appear among its own recipient RIBs. | |||
5.4. Routing Protocol | 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 routing | 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 5.4.1). | direct and static pseudo-protocols (Section 5.4.1). | |||
Multiple routing protocol instances of the same type are permitted. | Multiple routing protocol instances of the same type MAY be | |||
configured within the same routing instance. | ||||
Each routing protocol instance can be connected to one or more RIBs | Each routing protocol instance can be connected to one or more RIBs | |||
for each address family that the routing protocol instance supports. | for each address family that the routing protocol instance supports. | |||
By default, the interaction of a routing protocol instance with its | By default, the interaction of a routing protocol instance with its | |||
connected RIBs is governed by the following rules: | connected RIBs is governed by the following rules: | |||
o Routes learned from the network are installed in all connected | o Routes learned from the network are installed in all connected | |||
RIBs with a matching address family. | RIBs with a matching address family. | |||
o Conversely, routes from all connected RIBs are injected into the | o Conversely, routes from all connected RIBs are injected into the | |||
skipping to change at page 16, line 19 | skipping to change at page 15, line 22 | |||
rules for exchanging routes between routing protocol instances and | rules for exchanging routes between routing protocol instances and | |||
connected RIBs. | connected RIBs. | |||
On devices supporting the "multiple-ribs" feature, any RIB (system- | On devices supporting the "multiple-ribs" feature, any RIB (system- | |||
controlled or user-controlled) may be connected to a routing protocol | controlled or user-controlled) may be connected to a routing protocol | |||
instance by configuring a corresponding entry in the "connected-rib" | instance by configuring a corresponding entry in the "connected-rib" | |||
list. If such an entry is not configured for an address family, then | list. If such an entry is not configured for an address family, then | |||
the default RIB MUST be used as the connected RIB for this address | the default RIB MUST be used as the connected RIB for this address | |||
family. | family. | |||
In addition, two independent route filters (see Section 5.5) may be | ||||
configured for each connected RIB to apply user-defined policies | ||||
controlling the exchange of routes in both directions between the | ||||
routing protocol instance and the connected RIB: | ||||
o import filter controls which routes are passed from the routing | ||||
protocol instance to the connected RIB, | ||||
o export filter controls which routes the routing protocol instance | ||||
receives from the connected RIB. | ||||
Note that the terms import and export are used from the viewpoint of | ||||
a RIB. | ||||
5.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 they are confined to the local device and do not exchange | which means they are confined to the local device and do not exchange | |||
any routing information with adjacent routers. Routes from both | any routing information with adjacent routers. Routes from both | |||
"direct" and "static" protocol instances are passed to the connected | "direct" and "static" protocol instances are passed to the connected | |||
RIBs (subject to route filters, if any), but an exchange in the | RIBs, but an exchange in the opposite direction is not allowed. | |||
opposite direction is not allowed. | ||||
Every routing instance MUST implement exactly one instance of the | Every routing instance MUST implement exactly one instance of the | |||
"direct" pseudo-protocol type. It is the source of direct routes for | "direct" pseudo-protocol type. It is the source of direct routes for | |||
all configured address families. Direct routes are normally supplied | all configured address families. Direct routes are normally supplied | |||
by the operating system kernel, based on the configuration of network | by the operating system kernel, based on the configuration of network | |||
interface addresses, see Section 6.2. The "direct" pseudo-protocol | interface addresses, see Section 6.2. The "direct" pseudo-protocol | |||
MUST always be connected to the default RIBs of all supported address | MUST always be connected to the default RIBs of all supported address | |||
families. Unlike other routing protocol types, this connection | families. Unlike other routing protocol types, this connection | |||
cannot be changed in the configuration. Direct routes MAY be | cannot be changed in the configuration. | |||
filtered before they appear in the default RIB. | ||||
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 | |||
routing instance. | routing instance. | |||
Static routes are configured within the "static-routes" container, | ||||
see Figure 4. | ||||
+--rw static-routes | ||||
+--rw v4ur:ipv4 | ||||
| +--rw v4ur:route* [destination-prefix] | ||||
| +--rw v4ur:destination-prefix | ||||
| +--rw v4ur:description? | ||||
| +--rw v4ur:next-hop | ||||
| +--rw (simple-or-list)? | ||||
| +--:(multipath-entry) | ||||
| | +--rw v4ur:multipath-entry* [name] | ||||
| | +--rw v4ur:name | ||||
| | +--rw (next-hop-options) | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--rw v4ur:outgoing-interface? | ||||
| | | +--:(special-next-hop) | ||||
| | | | +--rw v4ur:special-next-hop? | ||||
| | | +--:(next-hop-address) | ||||
| | | +--rw v4ur:next-hop-address? | ||||
| | +--rw v4ur:priority? | ||||
| | +--rw v4ur:weight? | ||||
| +--:(simple-next-hop) | ||||
| +--rw (next-hop-options) | ||||
| +--:(simple-next-hop) | ||||
| | +--rw v4ur:outgoing-interface? | ||||
| +--:(special-next-hop) | ||||
| | +--rw v4ur:special-next-hop? | ||||
| +--:(next-hop-address) | ||||
| +--rw v4ur:next-hop-address? | ||||
+--rw v6ur:ipv6 | ||||
+--rw v6ur:route* [destination-prefix] | ||||
+--rw v6ur:destination-prefix | ||||
+--rw v6ur:description? | ||||
+--rw v6ur:next-hop | ||||
+--rw (simple-or-list)? | ||||
+--:(multipath-entry) | ||||
| +--rw v6ur:multipath-entry* [name] | ||||
| +--rw v6ur:name | ||||
| +--rw (next-hop-options) | ||||
| | +--:(simple-next-hop) | ||||
| | | +--rw v6ur:outgoing-interface? | ||||
| | +--:(special-next-hop) | ||||
| | | +--rw v6ur:special-next-hop? | ||||
| | +--:(next-hop-address) | ||||
| | +--rw v6ur:next-hop-address? | ||||
| +--rw v6ur:priority? | ||||
| +--rw v6ur:weight? | ||||
+--:(simple-next-hop) | ||||
+--rw (next-hop-options) | ||||
+--:(simple-next-hop) | ||||
| +--rw v6ur:outgoing-interface? | ||||
+--:(special-next-hop) | ||||
| +--rw v6ur:special-next-hop? | ||||
+--:(next-hop-address) | ||||
+--rw v6ur:next-hop-address? | ||||
Figure 4: Structure of "static-routes" subtree. | ||||
A next-hop in static routes may be configured as a simple next-hop | ||||
(IP address, outgoing interface or both), special next-hop or a list | ||||
of multi-path next-hop entries that is used either for backup routes | ||||
of for equal-cost multi-path (ECMP) routing. The last option is | ||||
available only on devices that advertise the feature "rt:multipath- | ||||
routes". Moreover, unlike next-hop lists in state data, a list of | ||||
next-hop entries in a static route cannot be recursive, i.e., each | ||||
entry of that list can only be a simple or special next-hop. | ||||
5.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". | |||
skipping to change at page 18, line 50 | skipping to change at page 16, line 19 | |||
o Additional route attributes MAY be defined, preferably in one | o Additional route attributes MAY be defined, preferably in one | |||
place by means of defining a YANG grouping. The new attributes | place by means of defining a YANG grouping. The new attributes | |||
have to be inserted by augmenting the definitions of the nodes | have to be inserted by augmenting the definitions of the nodes | |||
/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route | /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route | |||
and | and | |||
/rt:fib-route/rt:output/rt:route, | /rt:fib-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, | |||
input or output. | notifications, and RPC 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 routing instance interfaces (rt:interface). | in the list of routing instance interfaces (rt:interface). | |||
By using the "when" statement, the augmented configuration parameters | By using the "when" statement, the augmented configuration parameters | |||
and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
conditional and valid only if the value of "rt:type" or "rt:source- | conditional and valid only if the value of "rt:type" or "rt:source- | |||
protocol" is equal to the new protocol's identity. It is also | protocol" is equal to the new protocol's identity. It is also | |||
RECOMMENDED that protocol-specific data nodes be encapsulated in | RECOMMENDED that protocol-specific data nodes be encapsulated in | |||
appropriately named containers. | appropriately named containers. | |||
The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
RIP routing protocol in Appendix C. | RIP routing protocol in Appendix C. | |||
5.5. Route Filter | 5.5. RPC Operations | |||
The core routing data model provides a skeleton for defining route | ||||
filters that can be used to restrict the set of routes being | ||||
exchanged between a routing protocol instance and a connected RIB, or | ||||
between a source and a recipient RIB. Route filters may also | ||||
manipulate routes, i.e., add, delete, or modify their attributes. | ||||
Route filters are global, which means that a configured route filter | ||||
may be used by any or all routing instances. However, a data model | ||||
for a routing instance type MAY specify rules and restrictions for | ||||
sharing route filters among routing instances of that type. | ||||
The core routing data model defines only two extreme route filtering | ||||
policies which are represented by the following pre-defined route | ||||
filter types: | ||||
o "deny-all-route-filter": all routes are blocked, | ||||
o "allow-all-route-filter": all routes are permitted. | ||||
The latter type is equivalent to no route filter. | ||||
It is expected that more comprehensive route filtering frameworks | ||||
will be developed separately. | ||||
Each route filter entry is identified by a unique name. Its type | ||||
MUST be specified by the "type" identity reference. | ||||
5.6. RPC Operations | ||||
The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines two RPC operations: | |||
o fib-route: query a routing instance for the active route in the | o fib-route: query a routing instance for the active route in the | |||
Forwarding Information Base (FIB). It is the route that is | Forwarding Information Base (FIB). It is the route that is | |||
currently used for sending datagrams to a destination host whose | currently used for sending datagrams to a destination host whose | |||
address is passed as an input parameter. | address is passed as an input parameter. | |||
o route-count: retrieve the total number of entries in a RIB. | o route-count: retrieve the total number of entries in a RIB. | |||
skipping to change at page 21, line 29 | skipping to change at page 18, line 19 | |||
direct route. The destination prefix of this route is set according | direct route. The destination prefix of this route is set according | |||
to the configured IP address and network prefix/mask, and the | to the configured IP address and network prefix/mask, and the | |||
interface is set as the outgoing interface for that route. | interface is set as the outgoing interface for that route. | |||
7. Routing Management YANG Module | 7. Routing Management YANG Module | |||
RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "routing@2014-10-26.yang" | <CODE BEGINS> file "ietf-routing@2015-03-04.yang" | |||
module ietf-routing { | module ietf-routing { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
prefix "rt"; | prefix "rt"; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix "yang"; | |||
} | } | |||
skipping to change at page 22, line 30 | skipping to change at page 19, line 19 | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2014-10-26 { | revision 2015-03-04 { | |||
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 multiple-ribs { | feature multiple-ribs { | |||
description | description | |||
"This feature indicates that the server supports user-defined | "This feature indicates that the server supports user-defined | |||
RIBS and the framework for passing routes between RIBs. | RIBS and the framework for passing routes between RIBs. | |||
Servers that do not advertize this feature MUST provide | Servers that do not advertise this feature MUST provide | |||
exactly one system-controlled RIB per supported address family | exactly one system-controlled RIB per supported address family | |||
and make them also the default RIBs. These RIBs then appear as | and make them also the default RIBs. These RIBs then appear as | |||
entries of the list /routing-state/ribs/rib."; | entries of the list /routing-state/ribs/rib."; | |||
} | } | |||
feature multipath-routes { | ||||
description | ||||
"This feature indicates that the server supports multipath | ||||
routes that have a list of next-hops."; | ||||
} | ||||
feature router-id { | feature router-id { | |||
description | description | |||
"This feature indicates that the server supports configuration | "This feature indicates that the server supports configuration | |||
of an explicit 32-bit router ID that is used by some routing | of an explicit 32-bit router ID that is used by some routing | |||
protocols. | protocols. | |||
Servers that do not advertize this feature set a router ID | Servers that do not advertise this feature set a router ID | |||
algorithmically, usually to one of configured IPv4 addresses. | algorithmically, usually to one of configured IPv4 addresses. | |||
However, this algorithm is implementation-specific."; | However, this algorithm is implementation-specific."; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity address-family { | identity address-family { | |||
description | description | |||
"Base identity from which identities describing address | "Base identity from which identities describing address | |||
families are derived."; | families are derived."; | |||
} | } | |||
identity ipv4 { | identity ipv4 { | |||
base address-family; | base address-family; | |||
description | description | |||
"This identity represents IPv4 address family."; | "This identity represents IPv4 address family."; | |||
skipping to change at page 24, line 4 | skipping to change at page 20, line 35 | |||
instance types are derived."; | instance types are derived."; | |||
} | } | |||
identity default-routing-instance { | identity default-routing-instance { | |||
base routing-instance; | base routing-instance; | |||
description | description | |||
"This identity represents either a default routing instance, or | "This identity represents either a default routing instance, or | |||
the only routing instance on systems that do not support | the only routing instance on systems that do not support | |||
multiple instances."; | multiple instances."; | |||
} | } | |||
identity routing-protocol { | identity routing-protocol { | |||
description | description | |||
"Base identity from which routing protocol identities are | "Base identity from which routing protocol identities are | |||
derived."; | derived."; | |||
} | } | |||
identity direct { | identity direct { | |||
base routing-protocol; | base routing-protocol; | |||
description | description | |||
"Routing pseudo-protocol which provides routes to directly | "Routing pseudo-protocol that provides routes to directly | |||
connected networks."; | connected networks."; | |||
} | } | |||
identity static { | identity static { | |||
base routing-protocol; | base routing-protocol; | |||
description | description | |||
"Static routing pseudo-protocol."; | "Static routing pseudo-protocol."; | |||
} | } | |||
identity route-filter { | ||||
description | ||||
"Base identity from which all route filters are derived."; | ||||
} | ||||
identity deny-all-route-filter { | ||||
base route-filter; | ||||
description | ||||
"Route filter that blocks all routes."; | ||||
} | ||||
identity allow-all-route-filter { | ||||
base route-filter; | ||||
description | ||||
"Route filter that permits all routes."; | ||||
} | ||||
/* Type Definitions */ | /* Type Definitions */ | |||
typedef routing-instance-ref { | typedef routing-instance-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:routing-instance/rt:name"; | path "/rt:routing/rt:routing-instance/rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a routing instance | "This type is used for leafs that reference a routing instance | |||
configuration."; | configuration."; | |||
} | } | |||
skipping to change at page 25, line 30 | skipping to change at page 21, line 45 | |||
typedef rib-state-ref { | typedef rib-state-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing-state/rt:ribs/rt:rib/rt:name"; | path "/rt:routing-state/rt:ribs/rt:rib/rt:name"; | |||
} | } | |||
description | description | |||
"This type is used for leafs that reference a RIB in state | "This type is used for leafs that reference a RIB in state | |||
data."; | data."; | |||
} | } | |||
typedef next-hop-list-ref { | ||||
type leafref { | ||||
path "/rt:routing-state/rt:next-hop-lists/rt:next-hop-list/" | ||||
+ "rt:id"; | ||||
} | ||||
description | ||||
"This type is used for leafs that reference a next-hop list (in | ||||
state data)."; | ||||
} | ||||
typedef route-filter-ref { | ||||
type leafref { | ||||
path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | ||||
} | ||||
description | ||||
"This type is used for leafs that reference a route filter | ||||
configuration."; | ||||
} | ||||
typedef route-filter-state-ref { | ||||
type leafref { | ||||
path "/rt:routing-state/rt:route-filters/rt:route-filter/" | ||||
+ "rt:name"; | ||||
} | ||||
description | ||||
"This type is used for leafs that reference state data of a | ||||
route filter."; | ||||
} | ||||
typedef route-preference { | typedef route-preference { | |||
type uint32; | type uint32; | |||
description | description | |||
"This type is used for route preferences."; | "This type is used for route preferences."; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping address-family { | grouping address-family { | |||
description | description | |||
"This grouping provides a leaf identifying an address | "This grouping provides a leaf identifying an address | |||
family."; | family."; | |||
leaf address-family { | leaf address-family { | |||
type identityref { | type identityref { | |||
base address-family; | base address-family; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
skipping to change at page 26, line 33 | skipping to change at page 22, line 18 | |||
leaf address-family { | leaf address-family { | |||
type identityref { | type identityref { | |||
base address-family; | base address-family; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Address family."; | "Address family."; | |||
} | } | |||
} | } | |||
grouping state-entry-id { | ||||
description | ||||
"This grouping provides a unique identifier for entries in | ||||
several operational state lists."; | ||||
leaf id { | ||||
type uint64; | ||||
description | ||||
"Unique numerical identifier of a list entry in operational | ||||
state. It may be used by protocols or tools that inspect | ||||
and/or manipulate operational state data and prefer | ||||
fixed-size integers as list entry handles. | ||||
These identifiers are always ephemeral, i.e., they may | ||||
change after a reboot."; | ||||
} | ||||
} | ||||
grouping router-id { | grouping router-id { | |||
description | description | |||
"This grouping provides router ID."; | "This grouping provides router ID."; | |||
leaf router-id { | leaf router-id { | |||
type yang:dotted-quad; | type yang:dotted-quad; | |||
description | description | |||
"A 32-bit number in the form of a dotted quad that is used by | "A 32-bit number in the form of a dotted quad that is used by | |||
some routing protocols identifying a router."; | some routing protocols identifying a router."; | |||
reference | reference | |||
"RFC 2328: OSPF Version 2."; | "RFC 2328: OSPF Version 2."; | |||
} | } | |||
} | } | |||
grouping next-hop-classifiers { | ||||
description | ||||
"This grouping provides two next-hop classifiers."; | ||||
leaf priority { | ||||
type enumeration { | ||||
enum primary { | ||||
value "1"; | ||||
description | ||||
"Primary next-hop."; | ||||
} | ||||
enum backup { | ||||
value "2"; | ||||
description | ||||
"Backup next-hop."; | ||||
} | ||||
} | ||||
description | ||||
"Simple priority for distinguishing between primary and | ||||
backup next-hops. | ||||
Backup next-hops are used if and only if no primary | ||||
next-hops are reachable."; | ||||
} | ||||
leaf weight { | ||||
type uint8; | ||||
must ". = 0 or not(../../next-hop/weight = 0)" { | ||||
error-message "Illegal combination of zero and non-zero " | ||||
+ "next-hop weights."; | ||||
description | ||||
"Next-hop weights must be either all zero (equal | ||||
load-balancing) or all non-zero."; | ||||
} | ||||
description | ||||
"This parameter specifies the weight of the next-hop for load | ||||
balancing. The number specifies the relative fraction of the | ||||
traffic that will use the corresponding next-hop. | ||||
A value of 0 represents equal load-balancing. | ||||
If both primary and backup next-hops are present, then the | ||||
weights for each priority level are used separately."; | ||||
} | ||||
} | ||||
grouping special-next-hop { | grouping special-next-hop { | |||
description | description | |||
"This grouping provides a leaf with enumeration of special | "This grouping provides a leaf with an enumeration of special | |||
next-hops."; | next-hops."; | |||
leaf special-next-hop { | leaf special-next-hop { | |||
type enumeration { | type enumeration { | |||
enum blackhole { | enum blackhole { | |||
description | description | |||
"Silently discard the packet."; | "Silently discard the packet."; | |||
} | } | |||
enum unreachable { | enum unreachable { | |||
description | description | |||
"Discard the packet and notify the sender with an error | "Discard the packet and notify the sender with an error | |||
skipping to change at page 28, line 50 | skipping to change at page 23, line 22 | |||
"Special next-hop options."; | "Special next-hop options."; | |||
} | } | |||
} | } | |||
grouping next-hop-content { | grouping next-hop-content { | |||
description | description | |||
"Generic parameters of next-hops in static routes."; | "Generic parameters of next-hops in static routes."; | |||
choice next-hop-options { | choice next-hop-options { | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Options for next-hops in static routes."; | "Options for next-hops in static routes. | |||
It is expected that other cases will be added through | ||||
augments from other modules, e.g., for ECMP."; | ||||
case simple-next-hop { | case simple-next-hop { | |||
description | description | |||
"Simple next-hop is specified as an outgoing interface, | "Simple next-hop is specified as an outgoing interface, | |||
next-hop address or both. | next-hop address or both. | |||
Address-family-specific modules are expected to provide | Address-family-specific modules are expected to provide | |||
'next-hop-address' leaf via augmentation."; | 'next-hop-address' leaf via augmentation."; | |||
leaf outgoing-interface { | leaf outgoing-interface { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:routing-instance/rt:interfaces/" | path "/rt:routing/rt:routing-instance/rt:interfaces/" | |||
skipping to change at page 29, line 30 | skipping to change at page 24, line 5 | |||
} | } | |||
} | } | |||
} | } | |||
grouping next-hop-state-content { | grouping next-hop-state-content { | |||
description | description | |||
"Generic parameters of next-hops in state data."; | "Generic parameters of next-hops in state data."; | |||
choice next-hop-options { | choice next-hop-options { | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Options for next-hops in state data."; | "Options for next-hops in state data. | |||
leaf next-hop-list { | ||||
type next-hop-list-ref; | It is expected that other cases will be added through | |||
description | augments from other modules, e.g., for ECMP or recursive | |||
"Reference to a next-hop list."; | next-hops."; | |||
} | ||||
leaf use-rib { | ||||
type rib-state-ref; | ||||
description | ||||
"Reference to a RIB in which a new look-up is to be | ||||
performed."; | ||||
} | ||||
case simple-next-hop { | case simple-next-hop { | |||
description | description | |||
"Simple next-hop is specified as an outgoing interface, | "Simple next-hop is specified as an outgoing interface, | |||
next-hop address or both. | next-hop address or both. | |||
Address-family-specific modules are expected to provide | Address-family-specific modules are expected to provide | |||
'next-hop-address' leaf via augmentation."; | 'next-hop-address' leaf via augmentation."; | |||
leaf outgoing-interface { | leaf outgoing-interface { | |||
type leafref { | type leafref { | |||
path "/rt:routing-state/rt:routing-instance/" | path "/rt:routing-state/rt:routing-instance/" | |||
skipping to change at page 30, line 18 | skipping to change at page 24, line 34 | |||
} | } | |||
} | } | |||
case special-next-hop { | case special-next-hop { | |||
uses special-next-hop; | uses special-next-hop; | |||
} | } | |||
} | } | |||
} | } | |||
grouping route-metadata { | grouping route-metadata { | |||
description | description | |||
"Route metadata."; | "Common route metadata."; | |||
leaf source-protocol { | leaf source-protocol { | |||
type identityref { | type identityref { | |||
base routing-protocol; | base routing-protocol; | |||
} | } | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
"Type of the routing protocol from which the route | "Type of the routing protocol from which the route | |||
originated."; | originated."; | |||
} | } | |||
leaf active { | leaf active { | |||
skipping to change at page 30, line 44 | skipping to change at page 25, line 12 | |||
} | } | |||
leaf last-updated { | leaf last-updated { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description | description | |||
"Time stamp of the last modification of the route. If the | "Time stamp of the last modification of the route. If the | |||
route was never modified, it is the time when the route was | route was never modified, it is the time when the route was | |||
inserted into the RIB."; | inserted into the RIB."; | |||
} | } | |||
} | } | |||
/* Operational state data */ | /* State data */ | |||
augment "/if:interfaces-state/if:interface" { | ||||
description | ||||
"This augment adds a wrapped leaf-list to interface state | ||||
data."; | ||||
container routing-instances { | ||||
description | ||||
"The enclosed leaf-list provides references to all routing | ||||
instances to which the parent interface is assigned. | ||||
The assignments are configured as a part of routing-instance | ||||
configuration (module ietf-routing)."; | ||||
leaf-list routing-instance { | ||||
type routing-instance-state-ref; | ||||
must "../../if:name=/rt:routing-state/" | ||||
+ "rt:routing-instance[rt:name=current()]/rt:interfaces/" | ||||
+ "rt:interface/rt:name" { | ||||
error-message "The interface is not assigned to the " | ||||
+ "routing instance."; | ||||
description | ||||
"The reference must mirror a corresponding assignment | ||||
under routing-instance."; | ||||
} | ||||
description | ||||
"Reference to a routing instance."; | ||||
} | ||||
} | ||||
} | ||||
container routing-state { | container routing-state { | |||
config "false"; | config "false"; | |||
description | description | |||
"Operational state of the routing subsystem."; | "State data of the routing subsystem."; | |||
list routing-instance { | list routing-instance { | |||
key "name"; | key "name"; | |||
unique "id"; | ||||
min-elements "1"; | min-elements "1"; | |||
description | description | |||
"Each list entry is a container for operational state data of | "Each list entry is a container for state data of a routing | |||
a routing instance. | instance. | |||
An implementation MAY create one or more system-controlled | An implementation MAY create one or more system-controlled | |||
instances, other user-controlled instances MAY be created by | instances, other user-controlled instances MAY be created by | |||
configuration."; | configuration."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the routing instance. | "The name of the routing instance. | |||
For system-controlled instances the name is persistent, | For system-controlled instances the name is persistent, | |||
i.e., it SHOULD NOT change across reboots."; | i.e., it SHOULD NOT change across reboots."; | |||
} | } | |||
uses state-entry-id { | ||||
refine "id" { | ||||
mandatory "true"; | ||||
} | ||||
} | ||||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base routing-instance; | base routing-instance; | |||
} | } | |||
description | description | |||
"The routing instance type."; | "The routing instance type."; | |||
} | } | |||
container default-ribs { | container default-ribs { | |||
description | description | |||
"Default RIBs used by the routing instance."; | "Default RIBs used by the routing instance."; | |||
skipping to change at page 32, line 33 | skipping to change at page 27, line 22 | |||
interface."; | interface."; | |||
} | } | |||
} | } | |||
} | } | |||
container routing-protocols { | container routing-protocols { | |||
description | description | |||
"Container for the list of routing protocol instances."; | "Container for the list of routing protocol instances."; | |||
list routing-protocol { | list routing-protocol { | |||
key "type name"; | key "type name"; | |||
description | description | |||
"Operational state of a routing protocol instance. | "State data of a routing protocol instance. | |||
An implementation MUST provide exactly one | An implementation MUST provide exactly one | |||
system-controlled instance of the type 'direct'. Other | system-controlled instance of the type 'direct'. Other | |||
instances MAY be created by configuration."; | instances MAY be created by configuration."; | |||
leaf type { | leaf type { | |||
type identityref { | type identityref { | |||
base routing-protocol; | base routing-protocol; | |||
} | } | |||
description | description | |||
"Type of the routing protocol."; | "Type of the routing protocol."; | |||
skipping to change at page 33, line 35 | skipping to change at page 28, line 24 | |||
instance are installed in all connected RIBs of the | instance are installed in all connected RIBs of the | |||
matching address family, and, conversely, all routes | matching address family, and, conversely, all routes | |||
from connected RIBs are installed in the routing | from connected RIBs are installed in the routing | |||
protocol instance. However, routing protocols may | protocol instance. However, routing protocols may | |||
specify other rules."; | specify other rules."; | |||
leaf rib-name { | leaf rib-name { | |||
type rib-state-ref; | type rib-state-ref; | |||
description | description | |||
"Name of an existing RIB."; | "Name of an existing RIB."; | |||
} | } | |||
leaf import-filter { | ||||
type route-filter-state-ref; | ||||
description | ||||
"Reference to a route filter that is used for | ||||
filtering routes passed from this routing protocol | ||||
instance to the RIB specified by the 'rib-name' | ||||
sibling node. | ||||
If this leaf is not present, the behavior is | ||||
protocol-specific, but typically it means that all | ||||
routes are accepted."; | ||||
} | ||||
leaf export-filter { | ||||
type route-filter-state-ref; | ||||
description | ||||
"Reference to a route filter that is used for | ||||
filtering routes passed from the RIB specified by | ||||
the 'rib-name' sibling node to this routing | ||||
protocol instance. | ||||
If this leaf is not present, the behavior is | ||||
protocol-specific - typically it means that all | ||||
routes are accepted. | ||||
The 'direct' and 'static' pseudo-protocols accept | ||||
no routes from any RIB."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container next-hop-lists { | ||||
description | ||||
"Container for next-hop lists."; | ||||
list next-hop-list { | ||||
key "id"; | ||||
description | ||||
"Next-hop list."; | ||||
uses state-entry-id; | ||||
uses address-family; | ||||
list next-hop { | ||||
description | ||||
"Entry in a next-hop list."; | ||||
uses next-hop-state-content; | ||||
uses next-hop-classifiers; | ||||
} | ||||
} | ||||
} | ||||
container ribs { | container ribs { | |||
description | description | |||
"Container for RIBs."; | "Container for RIBs."; | |||
list rib { | list rib { | |||
key "name"; | key "name"; | |||
unique "id"; | ||||
description | description | |||
"Each entry represents a RIB identified by the 'name' key. | "Each entry represents a RIB identified by the 'name' key. | |||
All routes in a RIB MUST belong to the same address | All routes in a RIB MUST belong to the same address | |||
family. | family. | |||
The server MUST provide a system-controlled default RIB | The server MUST provide a system-controlled default RIB | |||
for each address family, and MAY provide other | for each supported address family, and MAY provide other | |||
system-controlled RIBs. Additional RIBs MAY be created in | system-controlled RIBs. Additional RIBs MAY be created in | |||
the configuration."; | the configuration."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the RIB."; | "The name of the RIB."; | |||
} | } | |||
uses state-entry-id { | ||||
refine "id" { | ||||
mandatory "true"; | ||||
} | ||||
} | ||||
uses address-family; | uses address-family; | |||
container routes { | container routes { | |||
description | description | |||
"Current content of the RIB."; | "Current content of the RIB."; | |||
list route { | list route { | |||
description | description | |||
"A RIB route entry. This data node MUST be augmented | "A RIB route entry. This data node MUST be augmented | |||
with information specific for routes of each address | with information specific for routes of each address | |||
family."; | family."; | |||
leaf route-preference { | leaf route-preference { | |||
type route-preference; | type route-preference; | |||
description | description | |||
"This route attribute, also known as administrative | "This route attribute, also known as administrative | |||
distance, allows for selecting the preferred route | distance, allows for selecting the preferred route | |||
skipping to change at page 35, line 50 | skipping to change at page 29, line 38 | |||
"Container for recipient RIBs."; | "Container for recipient RIBs."; | |||
list recipient-rib { | list recipient-rib { | |||
key "rib-name"; | key "rib-name"; | |||
description | description | |||
"List of RIBs that receive routes from this RIB."; | "List of RIBs that receive routes from this RIB."; | |||
leaf rib-name { | leaf rib-name { | |||
type rib-state-ref; | type rib-state-ref; | |||
description | description | |||
"The name of the recipient RIB."; | "The name of the recipient RIB."; | |||
} | } | |||
leaf filter { | ||||
type route-filter-state-ref; | ||||
description | ||||
"A route filter which is applied to the routes passed | ||||
to the recipient RIB."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container route-filters { | ||||
description | ||||
"Container for route filters."; | ||||
list route-filter { | ||||
key "name"; | ||||
description | ||||
"Route filters are used for filtering and/or manipulating | ||||
routes that are passed between a routing protocol and a | ||||
RIB and vice versa, or between two RIBs. | ||||
It is expected that other modules augment this list with | ||||
contents specific for a particular route filter type."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"The name of the route filter."; | ||||
} | ||||
leaf type { | ||||
type identityref { | ||||
base route-filter; | ||||
} | ||||
mandatory "true"; | ||||
description | ||||
"Type of the route-filter - an identity derived from the | ||||
'route-filter' base identity."; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
/* Configuration Data */ | /* Configuration Data */ | |||
container routing { | container routing { | |||
description | description | |||
"Configuration parameters for the routing subsystem."; | "Configuration parameters for the routing subsystem."; | |||
list routing-instance { | list routing-instance { | |||
key "name"; | key "name"; | |||
description | description | |||
skipping to change at page 37, line 30 | skipping to change at page 30, line 32 | |||
description | description | |||
"The type of the routing instance."; | "The type of the routing instance."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | description | |||
"Enable/disable the routing instance. | "Enable/disable the routing instance. | |||
If this parameter is false, the parent routing 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 state data, despite any | |||
despite any other configuration that might be present."; | other configuration that might be present."; | |||
} | } | |||
uses router-id { | uses router-id { | |||
if-feature router-id; | if-feature router-id; | |||
description | description | |||
"Configuration of the global router ID. Routing protocols | "Configuration of the global router ID. Routing protocols | |||
that use router ID can use this parameter or override it | that use router ID can use this parameter or override it | |||
with another value."; | with another value."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
skipping to change at page 39, line 32 | skipping to change at page 32, line 32 | |||
instance."; | instance."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | description | |||
"Enable/disable the routing protocol instance. | "Enable/disable the routing protocol instance. | |||
If this parameter is false, the parent routing | If this parameter is false, the parent routing | |||
protocol instance is disabled and does not appear in | protocol instance is disabled and does not appear in | |||
operational state data, despite any other | state data, despite any other configuration that might | |||
configuration that might be present."; | be present."; | |||
} | } | |||
leaf route-preference { | leaf route-preference { | |||
type route-preference; | type route-preference; | |||
description | description | |||
"The value of route preference (administrative | "The value of route preference (administrative | |||
distance). | distance). | |||
The default value depends on the routing protocol | The default value depends on the routing protocol | |||
type, and may also be implementation-dependent."; | type, and may also be implementation-dependent."; | |||
} | } | |||
skipping to change at page 40, line 22 | skipping to change at page 33, line 22 | |||
+ "default-rib/rib-name=." { | + "default-rib/rib-name=." { | |||
error-message "The 'direct' protocol can be " | error-message "The 'direct' protocol can be " | |||
+ "connected only to a default RIB."; | + "connected only to a default RIB."; | |||
description | description | |||
"For the 'direct' pseudo-protocol, the connected | "For the 'direct' pseudo-protocol, the connected | |||
RIB must always be a default RIB."; | RIB must always be a default RIB."; | |||
} | } | |||
description | description | |||
"Name of an existing RIB."; | "Name of an existing RIB."; | |||
} | } | |||
leaf import-filter { | ||||
type route-filter-ref; | ||||
description | ||||
"Configuration of import filter."; | ||||
} | ||||
leaf export-filter { | ||||
type route-filter-ref; | ||||
description | ||||
"Configuration of export filter."; | ||||
} | ||||
} | } | |||
} | } | |||
container static-routes { | container static-routes { | |||
when "../type='rt:static'" { | when "../type='rt:static'" { | |||
description | description | |||
"This container is only valid for the 'static' | "This container is only valid for the 'static' | |||
routing protocol."; | routing protocol."; | |||
} | } | |||
description | description | |||
"Configuration of the 'static' pseudo-protocol. | "Configuration of the 'static' pseudo-protocol. | |||
skipping to change at page 42, line 4 | skipping to change at page 34, line 42 | |||
must "/routing/ribs/rib[name=current()/rib-name]/" | must "/routing/ribs/rib[name=current()/rib-name]/" | |||
+ "address-family=../../address-family" { | + "address-family=../../address-family" { | |||
error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
description | description | |||
"Address family of the recipient RIB MUST match that | "Address family of the recipient RIB MUST match that | |||
of the source RIB."; | of the source RIB."; | |||
} | } | |||
key "rib-name"; | key "rib-name"; | |||
description | description | |||
"Each entry configures a recipient RIB."; | "Each entry configures a recipient RIB."; | |||
leaf rib-name { | leaf rib-name { | |||
type rib-ref; | type rib-ref; | |||
description | description | |||
"The name of the recipient RIB."; | "The name of the recipient RIB."; | |||
} | } | |||
leaf filter { | ||||
type route-filter-ref; | ||||
description | ||||
"A route filter which is applied to the routes passed | ||||
to the recipient RIB."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container route-filters { | ||||
description | ||||
"Configuration of route filters."; | ||||
list route-filter { | ||||
key "name"; | ||||
description | ||||
"Each entry configures a named route filter."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"The name of the route filter."; | ||||
} | ||||
leaf description { | ||||
type string; | ||||
description | ||||
"Textual description of the route filter."; | ||||
} | ||||
leaf type { | ||||
type identityref { | ||||
base route-filter; | ||||
} | ||||
mandatory "true"; | ||||
description | ||||
"Type of the route filter.."; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
/* RPC operations */ | ||||
/* RPC methods */ | ||||
rpc fib-route { | rpc fib-route { | |||
description | description | |||
"Return the active FIB route that a routing-instance uses for | "Return the active FIB route that a routing-instance uses for | |||
sending packets to a destination address."; | sending packets to a destination address."; | |||
input { | input { | |||
leaf routing-instance-name { | leaf routing-instance-name { | |||
type routing-instance-state-ref; | type routing-instance-state-ref; | |||
mandatory "true"; | mandatory "true"; | |||
description | description | |||
skipping to change at page 43, line 31 | skipping to change at page 35, line 35 | |||
"Network layer destination address. | "Network layer destination address. | |||
Address family specific modules MUST augment this | Address family specific modules MUST augment this | |||
container with a leaf named 'address'."; | container with a leaf named 'address'."; | |||
uses address-family; | uses address-family; | |||
} | } | |||
} | } | |||
output { | output { | |||
container route { | container route { | |||
description | description | |||
"The active route for the specified destination. | "The active FIB route for the specified destination. | |||
If the routing instance has no active route for the | If the routing instance has no active FIB route for the | |||
destination address, no output is returned - the server | destination address, no output is returned - the server | |||
SHALL send an <rpc-reply> containing a single element | SHALL send an <rpc-reply> containing a single element | |||
<ok>. | <ok>. | |||
Address family specific modules MUST augment this list | Address family specific modules MUST augment this list | |||
with appropriate route contents."; | with appropriate route contents."; | |||
uses address-family; | uses address-family; | |||
container next-hop { | container next-hop { | |||
description | description | |||
"Route's next-hop attribute."; | "Route's next-hop attribute."; | |||
skipping to change at page 44, line 38 | skipping to change at page 36, line 43 | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8. IPv4 Unicast Routing Management YANG Module | 8. IPv4 Unicast Routing Management YANG Module | |||
RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "ipv4-unicast-routing@2014-10-26.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2015-02-10.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"; | |||
} | } | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix "inet"; | |||
} | } | |||
organization | organization | |||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
contact | contact | |||
"WG Web: <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: Thomas Nadeau | WG Chair: Thomas Nadeau | |||
skipping to change at page 45, line 25 | skipping to change at page 37, line 29 | |||
<mailto:tnadeau@lucidvision.com> | <mailto:tnadeau@lucidvision.com> | |||
WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
<mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@nic.cz>"; | <mailto:lhotka@nic.cz>"; | |||
description | description | |||
"This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
configuration and operational state data for IPv4 unicast | configuration and state data for IPv4 unicast routing. | |||
routing. | ||||
Copyright (c) 2014 IETF Trust and the persons identified as | Copyright (c) 2014 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2014-10-26 { | revision 2015-02-10 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity ipv4-unicast { | identity ipv4-unicast { | |||
base rt:ipv4; | base rt:ipv4; | |||
description | description | |||
"This identity represents the IPv4 unicast address family."; | "This identity represents the IPv4 unicast address family."; | |||
} | } | |||
/* Operational state data */ | /* State data */ | |||
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"This leaf augments an IPv4 unicast route."; | "This leaf augments an IPv4 unicast route."; | |||
leaf destination-prefix { | leaf destination-prefix { | |||
type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
skipping to change at page 46, line 39 | skipping to change at page 38, line 42 | |||
description | description | |||
"This leaf augments the 'simple-next-hop' case of IPv4 unicast | "This leaf augments the 'simple-next-hop' case of IPv4 unicast | |||
routes."; | routes."; | |||
leaf next-hop-address { | leaf next-hop-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"IPv4 address of the next-hop."; | "IPv4 address of the next-hop."; | |||
} | } | |||
} | } | |||
augment "/rt:routing-state/rt:next-hop-lists/rt:next-hop-list/" | ||||
+ "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | ||||
when "../rt:address-family = 'v4ur:ipv4-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv4 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments next-hop list with IPv4 next-hop address. | ||||
routes."; | ||||
leaf next-hop-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the next-hop."; | ||||
} | ||||
} | ||||
/* Configuration data */ | /* Configuration data */ | |||
augment "/rt:routing/rt:routing-instance/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 to 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 | |||
skipping to change at page 47, line 38 | skipping to change at page 39, line 24 | |||
"IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
container next-hop { | container next-hop { | |||
description | description | |||
"Configuration of next-hop."; | "Configuration of next-hop."; | |||
grouping next-hop-content { | uses rt:next-hop-content { | |||
description | augment "next-hop-options" { | |||
"Next-hop content for IPv4 unicast static routes."; | ||||
uses rt:next-hop-content { | ||||
augment "next-hop-options" { | ||||
description | ||||
"Add next-hop address case."; | ||||
leaf next-hop-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"IPv4 address of the next-hop."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
choice simple-or-list { | ||||
description | ||||
"Options for next-hops."; | ||||
list multipath-entry { | ||||
if-feature rt:multipath-routes; | ||||
key "name"; | ||||
description | description | |||
"List of alternative next-hops."; | "Add next-hop address case."; | |||
leaf name { | leaf next-hop-address { | |||
type string; | type inet:ipv4-address; | |||
description | description | |||
"A unique identifier of the next-hop entry."; | "IPv4 address of the next-hop."; | |||
} | } | |||
uses next-hop-content; | ||||
uses rt:next-hop-classifiers; | ||||
} | ||||
case simple-next-hop { | ||||
uses next-hop-content; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* RPC methods */ | /* RPC operations */ | |||
augment "/rt:fib-route/rt:input/rt:destination-address" { | augment "/rt:fib-route/rt:input/rt:destination-address" { | |||
when "rt:address-family='v4ur:ipv4-unicast'" { | when "rt:address-family='v4ur:ipv4-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"This leaf augments the 'rt:destination-address' parameter of | "This leaf augments the 'rt:destination-address' parameter of | |||
the 'rt:fib-route' operation."; | the 'rt:fib-route' operation."; | |||
leaf address { | leaf address { | |||
skipping to change at page 49, line 38 | skipping to change at page 40, line 49 | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
9. IPv6 Unicast Routing Management YANG Module | 9. IPv6 Unicast Routing Management YANG Module | |||
RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
<CODE BEGINS> file "ipv6-unicast-routing@2014-10-26.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2015-02-10.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"; | |||
} | } | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix "inet"; | |||
skipping to change at page 50, line 33 | skipping to change at page 41, line 42 | |||
<mailto:tnadeau@lucidvision.com> | <mailto:tnadeau@lucidvision.com> | |||
WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
<mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@nic.cz>"; | <mailto:lhotka@nic.cz>"; | |||
description | description | |||
"This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
configuration and operational state data for IPv6 unicast | configuration and state data for IPv6 unicast routing. | |||
routing. | ||||
Copyright (c) 2014 IETF Trust and the persons identified as | Copyright (c) 2014 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2014-10-26 { | revision 2015-02-10 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity ipv6-unicast { | identity ipv6-unicast { | |||
base rt:ipv6; | base rt:ipv6; | |||
description | description | |||
"This identity represents the IPv6 unicast address family."; | "This identity represents the IPv6 unicast address family."; | |||
} | } | |||
/* Operational state data */ | /* State data */ | |||
augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | |||
+ "rt:interface" { | + "rt:interface" { | |||
description | description | |||
"IPv6-specific parameters of router interfaces."; | "IPv6-specific parameters of router interfaces."; | |||
container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
description | description | |||
"Parameters of IPv6 Router Advertisements."; | "Parameters of IPv6 Router Advertisements."; | |||
leaf send-advertisements { | leaf send-advertisements { | |||
type boolean; | type boolean; | |||
skipping to change at page 54, line 35 | skipping to change at page 45, line 44 | |||
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
+ "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | |||
when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
} | } | |||
description | description | |||
"This leaf augments the 'simple-next-hop' case of IPv6 unicast | "This leaf augments the 'simple-next-hop' case of IPv6 unicast | |||
routes."; | routes."; | |||
leaf next-hop { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the next-hop."; | ||||
} | ||||
} | ||||
augment "/rt:routing-state/rt:next-hop-lists/rt:next-hop-list/" | ||||
+ "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | ||||
when "../rt:address-family = 'v6ur:ipv6-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"This leaf augments next-hop list with IPv6 next-hop address. | ||||
routes."; | ||||
leaf next-hop-address { | leaf next-hop-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
} | } | |||
} | } | |||
/* Configuration data */ | /* Configuration data */ | |||
augment | augment | |||
"/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" { | "/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 | |||
skipping to change at page 61, line 6 | skipping to change at page 51, line 46 | |||
"IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
container next-hop { | container next-hop { | |||
description | description | |||
"Configuration of next-hop."; | "Configuration of next-hop."; | |||
grouping next-hop-content { | uses rt:next-hop-content { | |||
description | augment "next-hop-options" { | |||
"Next-hop content for IPv6 unicast static routes."; | ||||
uses rt:next-hop-content { | ||||
augment "next-hop-options" { | ||||
description | ||||
"Add next-hop address case."; | ||||
leaf next-hop-address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the next-hop."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
choice simple-or-list { | ||||
description | ||||
"Options for next-hops."; | ||||
list multipath-entry { | ||||
if-feature rt:multipath-routes; | ||||
key "name"; | ||||
description | description | |||
"List of alternative next-hops."; | "Add next-hop address case."; | |||
leaf name { | leaf next-hop-address { | |||
type string; | type inet:ipv6-address; | |||
description | description | |||
"A unique identifier of the next-hop entry."; | "IPv6 address of the next-hop."; | |||
} | } | |||
uses next-hop-content; | ||||
uses rt:next-hop-classifiers; | ||||
} | ||||
case simple-next-hop { | ||||
uses next-hop-content; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/* RPC methods */ | /* RPC operations */ | |||
augment "/rt:fib-route/rt:input/rt:destination-address" { | augment "/rt:fib-route/rt:input/rt:destination-address" { | |||
when "rt:address-family='v6ur:ipv6-unicast'" { | when "rt:address-family='v6ur:ipv6-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
} | } | |||
description | description | |||
"This leaf augments the 'rt:destination-address' parameter of | "This leaf augments the 'rt:destination-address' parameter of | |||
the 'rt:fib-route' operation."; | the 'rt:fib-route' operation."; | |||
leaf address { | leaf address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IPv6 destination address."; | "IPv6 destination address."; | |||
} | } | |||
} | } | |||
skipping to change at page 62, line 33 | skipping to change at page 52, line 48 | |||
operation."; | operation."; | |||
leaf destination-prefix { | leaf destination-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
description | description | |||
"IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
} | } | |||
} | } | |||
augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | |||
+ "rt:next-hop-options/rt:simple-next-hop" { | + "rt:next-hop-options/rt:simple-next-hop" { | |||
when "../rt:address-family='v4ur:ipv6-unicast'" { | when "../rt:address-family='v6ur:ipv6-unicast'" { | |||
description | description | |||
"This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
} | } | |||
description | description | |||
"This leaf augments the 'simple-next-hop' case in the reply to | "This leaf augments the 'simple-next-hop' case in the reply to | |||
the 'rt:fib-route' operation."; | the 'rt:fib-route' operation."; | |||
leaf next-hop-address { | leaf next-hop-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
skipping to change at page 65, line 8 | skipping to change at page 55, line 8 | |||
The vulnerable "config true" subtrees and data nodes are the | The vulnerable "config true" subtrees and data nodes are the | |||
following: | following: | |||
/routing/routing-instance/interfaces/interface: This list assigns a | /routing/routing-instance/interfaces/interface: This list assigns a | |||
network layer interface to a routing 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/routing-instance/routing-protocols/routing-protocol: This | /routing/routing-instance/routing-protocols/routing-protocol: This | |||
list 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 | ||||
configured route filters which represent administrative policies | ||||
for redistributing and modifying routing information. | ||||
/routing/ribs/rib: This list specifies the RIBs configured for the | /routing/ribs/rib: This list specifies the RIBs configured for 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. | |||
12. Acknowledgments | 12. Acknowledgments | |||
The author wishes to thank Nitin Bahadur, Martin Bjorklund, Dean | The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean | |||
Bogdanovic, Joel Halpern, Wes Hardaker, Sriganesh Kini, | Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini, | |||
David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Acee Lindem, | David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Stephane | |||
Stephane Litkowski, Thomas Morin, Tom Petch, Bruno Rijsman, | Litkowski, Thomas Morin, Tom Petch, Bruno Rijsman, | |||
Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang, Derek Man- | Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang, Derek Man- | |||
Kit Yeung and Jeffrey Zhang for their helpful comments and | Kit Yeung and Jeffrey Zhang for their helpful comments and | |||
suggestions. | suggestions. | |||
13. References | 13. References | |||
13.1. Normative References | 13.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
skipping to change at page 66, line 40 | skipping to change at page 56, line 34 | |||
This appendix presents the complete configuration and state data | This appendix presents the complete configuration and state data | |||
trees of the core routing data model. | trees of the core routing data model. | |||
See Section 2.2 for an explanation of the symbols used. Data type of | See Section 2.2 for an explanation of the symbols used. Data type of | |||
every leaf node is shown near the right end of the corresponding | every leaf node is shown near the right end of the corresponding | |||
line. | line. | |||
A.1. Configuration Data | A.1. Configuration Data | |||
+--rw routing | +--rw routing | |||
+--rw routing-instance* [name] | +--rw routing-instance* [name] | |||
| +--rw name string | | +--rw name string | |||
| +--rw type? identityref | | +--rw type? identityref | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw router-id? yang:dotted-quad | | +--rw router-id? yang:dotted-quad | |||
| +--rw description? string | | +--rw description? string | |||
| +--rw default-ribs {multiple-ribs}? | | +--rw default-ribs {multiple-ribs}? | |||
| | +--rw default-rib* [address-family] | | | +--rw default-rib* [address-family] | |||
| | +--rw address-family identityref | | | +--rw address-family identityref | |||
| | +--rw rib-name string | | | +--rw rib-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* [type name] | | +--rw routing-protocol* [type name] | |||
| +--rw type identityref | | +--rw type identityref | |||
| +--rw name string | | +--rw name string | |||
| +--rw description? string | | +--rw description? string | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw route-preference? route-preference | | +--rw route-preference? route-preference | |||
| +--rw connected-ribs | | +--rw connected-ribs | |||
| | +--rw connected-rib* [rib-name] | | | +--rw connected-rib* [rib-name] | |||
| | +--rw rib-name rib-ref | | | +--rw rib-name rib-ref | |||
| | +--rw import-filter? route-filter-ref | | +--rw static-routes | |||
| | +--rw export-filter? route-filter-ref | | +--rw v6ur:ipv6 | |||
| +--rw static-routes | | | +--rw v6ur:route* [destination-prefix] | |||
| +--rw v4ur:ipv4 | | | +--rw v6ur:destination-prefix inet:ipv6-prefix | |||
| | +--rw v4ur:route* [destination-prefix] | | | +--rw v6ur:description? string | |||
| | +--rw v4ur:destination-prefix inet:ipv4-prefix | | | +--rw v6ur:next-hop | |||
| | +--rw v4ur:description? string | | | +--rw (next-hop-options) | |||
| | +--rw v4ur:next-hop | | | +--:(simple-next-hop) | |||
| | +--rw (simple-or-list)? | | | | +--rw v6ur:outgoing-interface? | |||
| | +--:(multipath-entry) | | | +--:(special-next-hop) | |||
| | | +--rw v4ur:multipath-entry* [name] | | | | +--rw v6ur:special-next-hop? enumeration | |||
| | | +--rw v4ur:name string | | | +--:(next-hop-address) | |||
| | | +--rw (next-hop-options) | | | +--rw v6ur:next-hop-address? | |||
| | | | +--:(simple-next-hop) | | +--rw v4ur:ipv4 | |||
| | | | | +--rw v4ur:outgoing-interface? | | +--rw v4ur:route* [destination-prefix] | |||
| | | | +--:(special-next-hop) | | +--rw v4ur:destination-prefix inet:ipv4-prefix | |||
| | | | | +--rw v4ur:special-next-hop? | | +--rw v4ur:description? string | |||
| | | | +--:(next-hop-address) | | +--rw v4ur:next-hop | |||
| | | | +--rw v4ur:next-hop-address? | | +--rw (next-hop-options) | |||
| | | +--rw v4ur:priority? | | +--:(simple-next-hop) | |||
| | | +--rw v4ur:weight? uint8 | | | +--rw v4ur:outgoing-interface? | |||
| | +--:(simple-next-hop) | | +--:(special-next-hop) | |||
| | +--rw (next-hop-options) | | | +--rw v4ur:special-next-hop? enumeration | |||
| | +--:(simple-next-hop) | | +--:(next-hop-address) | |||
| | | +--rw v4ur:outgoing-interface? | | +--rw v4ur:next-hop-address? | |||
| | +--:(special-next-hop) | +--rw ribs | |||
| | | +--rw v4ur:special-next-hop? | +--rw rib* [name] | |||
| | +--:(next-hop-address) | +--rw name string | |||
| | +--rw v4ur:next-hop-address? | +--rw address-family identityref | |||
| +--rw v6ur:ipv6 | +--rw description? string | |||
| +--rw v6ur:route* [destination-prefix] | +--rw recipient-ribs {multiple-ribs}? | |||
| +--rw v6ur:destination-prefix inet:ipv6-prefix | +--rw recipient-rib* [rib-name] | |||
| +--rw v6ur:description? string | +--rw rib-name rib-ref | |||
| +--rw v6ur:next-hop | ||||
| +--rw (simple-or-list)? | ||||
| +--:(multipath-entry) | ||||
| | +--rw v6ur:multipath-entry* [name] | ||||
| | +--rw v6ur:name string | ||||
| | +--rw (next-hop-options) | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--rw v6ur:outgoing-interface? | ||||
| | | +--:(special-next-hop) | ||||
| | | | +--rw v6ur:special-next-hop? | ||||
| | | +--:(next-hop-address) | ||||
| | | +--rw v6ur:next-hop-address? | ||||
| | +--rw v6ur:priority? | ||||
| | +--rw v6ur:weight? uint8 | ||||
| +--:(simple-next-hop) | ||||
| +--rw (next-hop-options) | ||||
| +--:(simple-next-hop) | ||||
| | +--rw v6ur:outgoing-interface? | ||||
| +--:(special-next-hop) | ||||
| | +--rw v6ur:special-next-hop? | ||||
| +--:(next-hop-address) | ||||
| +--rw v6ur:next-hop-address? | ||||
+--rw ribs | ||||
| +--rw rib* [name] | ||||
| +--rw name string | ||||
| +--rw address-family identityref | ||||
| +--rw description? string | ||||
| +--rw recipient-ribs {multiple-ribs}? | ||||
| +--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. State Data | A.2. State Data | |||
+--ro routing-state | +--ro routing-state | |||
+--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| +--ro name string | | +--ro name string | |||
| +--ro id uint64 | | +--ro type? identityref | |||
| +--ro type? identityref | | +--ro default-ribs | |||
| +--ro default-ribs | | | +--ro default-rib* [address-family] | |||
| | +--ro default-rib* [address-family] | | | +--ro address-family identityref | |||
| | +--ro address-family identityref | | | +--ro rib-name rib-state-ref | |||
| | +--ro rib-name 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* [type name] | |||
| +--ro routing-protocol* [type name] | | +--ro type identityref | |||
| +--ro type identityref | | +--ro name string | |||
| +--ro name string | | +--ro route-preference route-preference | |||
| +--ro route-preference route-preference | | +--ro connected-ribs | |||
| +--ro connected-ribs | | +--ro connected-rib* [rib-name] | |||
| +--ro connected-rib* [rib-name] | | +--ro rib-name rib-state-ref | |||
| +--ro rib-name rib-state-ref | +--ro ribs | |||
| +--ro import-filter? route-filter-state-ref | +--ro rib* [name] | |||
| +--ro export-filter? route-filter-state-ref | +--ro name string | |||
+--ro next-hop-lists | +--ro address-family identityref | |||
| +--ro next-hop-list* [id] | +--ro routes | |||
| +--ro id uint64 | | +--ro route* | |||
| +--ro address-family identityref | | +--ro route-preference? route-preference | |||
| +--ro next-hop* | | +--ro next-hop | |||
| +--ro (next-hop-options) | | | +--ro (next-hop-options) | |||
| | +--:(next-hop-list) | | | +--:(simple-next-hop) | |||
| | | +--ro next-hop-list? next-hop-list-ref | | | | +--ro outgoing-interface? | |||
| | +--:(use-rib) | | | | +--ro v6ur:next-hop-address? inet:ipv6-address | |||
| | | +--ro use-rib? rib-state-ref | | | | +--ro v4ur:next-hop-address? inet:ipv4-address | |||
| | +--:(simple-next-hop) | | | +--:(special-next-hop) | |||
| | | +--ro outgoing-interface? | | | +--ro special-next-hop? enumeration | |||
| | | +--ro v4ur:next-hop-address? inet:ipv4-address | | +--ro source-protocol identityref | |||
| | | +--ro v6ur:next-hop-address? inet:ipv6-address | | +--ro active? empty | |||
| | +--:(special-next-hop) | | +--ro last-updated? yang:date-and-time | |||
| | +--ro special-next-hop? enumeration | | +--ro v6ur:destination-prefix? inet:ipv6-prefix | |||
| +--ro priority? enumeration | | +--ro v4ur:destination-prefix? inet:ipv4-prefix | |||
| +--ro weight? uint8 | +--ro recipient-ribs | |||
+--ro ribs | +--ro recipient-rib* [rib-name] | |||
| +--ro rib* [name] | +--ro rib-name rib-state-ref | |||
| +--ro name string | ||||
| +--ro id uint64 | ||||
| +--ro address-family identityref | ||||
| +--ro routes | ||||
| | +--ro route* | ||||
| | +--ro route-preference? route-preference | ||||
| | +--ro next-hop | ||||
| | | +--ro (next-hop-options) | ||||
| | | +--:(next-hop-list) | ||||
| | | | +--ro next-hop-list? next-hop-list-ref | ||||
| | | +--:(use-rib) | ||||
| | | | +--ro use-rib? rib-state-ref | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--ro outgoing-interface? | ||||
| | | | +--ro v4ur:next-hop-address? | ||||
| | | | +--ro v6ur:next-hop? | ||||
| | | +--:(special-next-hop) | ||||
| | | +--ro special-next-hop? enumeration | ||||
| | +--ro source-protocol identityref | ||||
| | +--ro active? empty | ||||
| | +--ro last-updated? yang:date-and-time | ||||
| | +--ro v4ur:destination-prefix? inet:ipv4-prefix | ||||
| | +--ro v6ur:destination-prefix? inet:ipv6-prefix | ||||
| +--ro recipient-ribs | ||||
| +--ro recipient-rib* [rib-name] | ||||
| +--ro rib-name rib-state-ref | ||||
| +--ro filter? route-filter-state-ref | ||||
+--ro route-filters | ||||
+--ro route-filter* [name] | ||||
+--ro name string | ||||
+--ro type identityref | ||||
Appendix B. Minimum Implementation | Appendix B. Minimum Implementation | |||
Some parts and options of the core routing model, such as route | Some parts and options of the core routing model, such as user- | |||
filters or multiple routing tables, are intended only for advanced | defined routing tables, are intended only for advanced routers. This | |||
routers. This appendix gives basic non-normative guidelines for | appendix gives basic non-normative guidelines for implementing a bare | |||
implementing a bare minimum of available functions. Such an | minimum of available functions. Such an implementation may be used | |||
implementation may be used for hosts or very simple routers. | for hosts or very simple routers. | |||
A minimum implementation will provide a single system-controlled | A minimum implementation will provide a single system-controlled | |||
routing instance, and will not allow clients to create any user- | routing instance, and will not allow clients to create any user- | |||
controlled instances. | controlled instances. | |||
Typically, neither of the features defined in the "ietf-routing" | Typically, the feature "multiple-ribs" will not be supported. This | |||
module ("multiple-ribs" and "multipath-routes") will be supported. | means that a single system-controlled RIB is available for each | |||
This means that: | supported address family - IPv4, IPv6 or both. These RIBs must be | |||
the default RIBs, so references to them will also appear as system- | ||||
o A single system-controlled RIB (routing table) is available for | controlled entries of the "default-rib" list in state data. No user- | |||
each supported address family - IPv4, IPv6 or both. These RIBs | controlled RIBs are allowed. | |||
are the default RIBs, so references to them will also appear as | ||||
system-controlled entries of the "default-rib" list in state data. | ||||
No user-controlled RIBs are allowed. | ||||
o Each route has no more than one "next-hop", "outgoing-interface" | ||||
or "special-next-hop". | ||||
In addition to the mandatory instance of the "direct" pseudo- | In addition to the mandatory instance of the "direct" pseudo- | |||
protocol, a minimum implementation should support configured | protocol, a minimum implementation should support configured | |||
instance(s) of the "static" pseudo-protocol. Even with a single RIB | instance(s) of the "static" pseudo-protocol. Even with a single RIB | |||
per address family, it may be occasionally useful to be able to | per address family, it may be occasionally useful to be able to | |||
configure multiple "static" instances. For example, a client may | configure multiple "static" instances. For example, a client may | |||
want to configure alternative sets of static routes and activate or | want to configure alternative sets of static routes and activate or | |||
deactivate them by means of configuring appropriate route filters | deactivate them by means of connnecting the default RIB to the | |||
("allow-all-route-filter" or "deny-all-route-filter"). | corresponding "static" instance. | |||
Platforms with severely constrained resources may use deviations for | Platforms with severely constrained resources may use deviations for | |||
restricting the data model, e.g., limiting the number of "static" | restricting the data model, e.g., limiting the number of "static" | |||
routing protocol instances, preventing any route filters to be | routing protocol instances. | |||
configured etc. | ||||
Appendix C. Example: Adding a New Routing Protocol | Appendix C. 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, this module does not obey all the guidelines | For the sake of brevity, this module does not obey all the guidelines | |||
specified in [RFC6087]. See also Section 5.4.2. | specified in [RFC6087]. See also Section 5.4.2. | |||
skipping to change at page 74, line 37 | skipping to change at page 62, line 50 | |||
o ietf-interfaces [RFC7223], | o ietf-interfaces [RFC7223], | |||
o ietf-ip [RFC7277], | o ietf-ip [RFC7277], | |||
o ietf-routing (Section 7), | o ietf-routing (Section 7), | |||
o ietf-ipv4-unicast-routing (Section 8), | o ietf-ipv4-unicast-routing (Section 8), | |||
o ietf-ipv6-unicast-routing (Section 9). | o ietf-ipv6-unicast-routing (Section 9). | |||
We assume a simple network set-up as shown in Figure 5: router "A" | We assume a simple network set-up as shown in Figure 4: router "A" | |||
uses static default routes with the "ISP" router as the next-hop. | uses static default routes with the "ISP" router as the next-hop. | |||
IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
+-----------------+ | +-----------------+ | |||
| | | | | | |||
| Router ISP | | | Router ISP | | |||
| | | | | | |||
+--------+--------+ | +--------+--------+ | |||
|2001:db8:0:1::2 | |2001:db8:0:1::2 | |||
|192.0.2.2 | |192.0.2.2 | |||
skipping to change at page 75, line 25 | skipping to change at page 63, line 28 | |||
eth0|192.0.2.1 | eth0|192.0.2.1 | |||
+--------+--------+ | +--------+--------+ | |||
| | | | | | |||
| Router A | | | Router A | | |||
| | | | | | |||
+--------+--------+ | +--------+--------+ | |||
eth1|198.51.100.1 | eth1|198.51.100.1 | |||
|2001:db8:0:2::1 | |2001:db8:0:2::1 | |||
| | | | |||
Figure 5: Example network configuration | Figure 4: Example network configuration | |||
A reply to the NETCONF <get> message sent by router "A" would then be | A reply to the NETCONF <get> message sent by router "A" would then be | |||
as follows: | as follows: | |||
<?xml version="1.0"?> | <?xml version="1.0"?> | |||
<rpc-reply | <rpc-reply | |||
message-id="101" | message-id="101" | |||
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | |||
xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | |||
skipping to change at page 76, line 49 | skipping to change at page 65, line 4 | |||
</ip:ipv6> | </ip:ipv6> | |||
</if:interface> | </if:interface> | |||
</if:interfaces> | </if:interfaces> | |||
<if:interfaces-state> | <if:interfaces-state> | |||
<if:interface> | <if:interface> | |||
<if:name>eth0</if:name> | <if:name>eth0</if:name> | |||
<if:type>ianaift:ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
<if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | |||
<if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
<if:statistics> | <if:statistics> | |||
<if:discontinuity-time> | <if:discontinuity-time> | |||
2014-10-24T17:11:27+00:58 | 2014-10-24T17:11:27+00:58 | |||
</if:discontinuity-time> | </if:discontinuity-time> | |||
</if:statistics> | </if:statistics> | |||
<ip:ipv4> | <ip:ipv4> | |||
<ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
<ip:mtu>1500</ip:mtu> | <ip:mtu>1500</ip:mtu> | |||
<ip:address> | <ip:address> | |||
<ip:ip>192.0.2.1</ip:ip> | <ip:ip>192.0.2.1</ip:ip> | |||
<ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
</ip:address> | </ip:address> | |||
</ip:ipv4> | </ip:ipv4> | |||
<ip:ipv6> | <ip:ipv6> | |||
skipping to change at page 77, line 29 | skipping to change at page 65, line 31 | |||
<ip:prefix-length>64</ip:prefix-length> | <ip:prefix-length>64</ip:prefix-length> | |||
</ip:address> | </ip:address> | |||
</ip:ipv6> | </ip:ipv6> | |||
</if:interface> | </if:interface> | |||
<if:interface> | <if:interface> | |||
<if:name>eth1</if:name> | <if:name>eth1</if:name> | |||
<if:type>ianaift:ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
<if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
<if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | |||
<if:statistics> | <if:statistics> | |||
<if:discontinuity-time> | <if:discontinuity-time> | |||
2014-10-24T17:11:27+00:59 | 2014-10-24T17:11:27+00:59 | |||
</if:discontinuity-time> | </if:discontinuity-time> | |||
</if:statistics> | </if:statistics> | |||
<ip:ipv4> | <ip:ipv4> | |||
<ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
<ip:mtu>1500</ip:mtu> | <ip:mtu>1500</ip:mtu> | |||
<ip:address> | <ip:address> | |||
<ip:ip>198.51.100.1</ip:ip> | <ip:ip>198.51.100.1</ip:ip> | |||
<ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
</ip:address> | </ip:address> | |||
</ip:ipv4> | </ip:ipv4> | |||
<ip:ipv6> | <ip:ipv6> | |||
skipping to change at page 78, line 51 | skipping to change at page 67, line 6 | |||
</v6ur:route> | </v6ur:route> | |||
</v6ur:ipv6> | </v6ur:ipv6> | |||
</rt:static-routes> | </rt:static-routes> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
</rt:routing-instance> | </rt:routing-instance> | |||
</rt:routing> | </rt:routing> | |||
<rt:routing-state> | <rt:routing-state> | |||
<rt:routing-instance> | <rt:routing-instance> | |||
<rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
<rt:id>2718281828</rt:id> | ||||
<rt:default-ribs> | <rt:default-ribs> | |||
<rt:default-rib> | <rt:default-rib> | |||
<rt:address-family>v4ur:ipv4-unicast</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
<rt:rib-name>ipv4-master</rt:rib-name> | <rt:rib-name>ipv4-master</rt:rib-name> | |||
</rt:default-rib> | </rt:default-rib> | |||
<rt:default-rib> | <rt:default-rib> | |||
<rt:address-family>v6ur:ipv6-unicast</rt:address-family> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
<rt:rib-name>ipv6-master</rt:rib-name> | <rt:rib-name>ipv6-master</rt:rib-name> | |||
</rt:default-rib> | </rt:default-rib> | |||
</rt:default-ribs> | </rt:default-ribs> | |||
skipping to change at page 79, line 41 | skipping to change at page 67, line 43 | |||
<rt:routing-protocol> | <rt:routing-protocol> | |||
<rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
<rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
<rt:route-preference>5</rt:route-preference> | <rt:route-preference>5</rt:route-preference> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
</rt:routing-instance> | </rt:routing-instance> | |||
<rt:ribs> | <rt:ribs> | |||
<rt:rib> | <rt:rib> | |||
<rt:name>ipv4-master</rt:name> | <rt:name>ipv4-master</rt:name> | |||
<rt:id>897932384</rt:id> | ||||
<rt:address-family>v4ur:ipv4-unicast</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | <v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | |||
<rt:next-hop> | <rt:next-hop> | |||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:route-preference>0</rt:route-preference> | <rt:route-preference>0</rt:route-preference> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | |||
2014-10-24T17:11:27+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v4ur:destination-prefix> | <v4ur:destination-prefix>198.51.100.0/24</v4ur:destination-prefix> | |||
198.51.100.0/24 | ||||
</v4ur:destination-prefix> | ||||
<rt:next-hop> | <rt:next-hop> | |||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:route-preference>0</rt:route-preference> | <rt:route-preference>0</rt:route-preference> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | |||
2014-10-24T17:11:27+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | <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> | |||
<rt:route-preference>5</rt:route-preference> | <rt:route-preference>5</rt:route-preference> | |||
<rt:next-hop> | <rt:next-hop> | |||
<v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | |||
2014-10-24T18:02:45+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:rib> | </rt:rib> | |||
<rt:rib> | <rt:rib> | |||
<rt:name>ipv6-master</rt:name> | <rt:name>ipv6-master</rt:name> | |||
<rt:id>751058209</rt:id> | ||||
<rt:address-family>v6ur:ipv6-unicast</rt:address-family> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<v6ur:destination-prefix> | <v6ur:destination-prefix> | |||
2001:db8:0:1::/64 | 2001:db8:0:1::/64 | |||
</v6ur:destination-prefix> | </v6ur:destination-prefix> | |||
<rt:next-hop> | <rt:next-hop> | |||
<rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:route-preference>0</rt:route-preference> | <rt:route-preference>0</rt:route-preference> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | |||
2014-10-24T17:11:27+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v6ur:destination-prefix> | ||||
<v6ur:destination-prefix> | 2001:db8:0:2::/64 | |||
2001:db8:0:2::/64 | </v6ur:destination-prefix> | |||
</v6ur:destination-prefix> | ||||
<rt:next-hop> | <rt:next-hop> | |||
<rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
<rt:route-preference>0</rt:route-preference> | <rt:route-preference>0</rt:route-preference> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | |||
2014-10-24T17:11:27+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<v6ur:destination-prefix>::/0</v6ur:destination-prefix> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
<rt:next-hop> | <rt:next-hop> | |||
<v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | <v6ur:next-hop-address>2001:db8:0:1::2</v6ur:next-hop-address> | |||
</rt:next-hop> | </rt:next-hop> | |||
<rt:source-protocol>rt:static</rt:source-protocol> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
<rt:route-preference>5</rt:route-preference> | <rt:route-preference>5</rt:route-preference> | |||
<rt:last-updated> | <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | |||
2014-10-24T18:02:45+01:00 | ||||
</rt:last-updated> | ||||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:rib> | </rt:rib> | |||
</rt:ribs> | </rt:ribs> | |||
</rt:routing-state> | </rt:routing-state> | |||
</data> | </data> | |||
</rpc-reply> | </rpc-reply> | |||
Appendix E. Change Log | Appendix E. Change Log | |||
RFC Editor: Remove this section upon publication as an RFC. | RFC Editor: Remove this section upon publication as an RFC. | |||
E.1. Changes Between Versions -15 and -16 | E.1. Changes Between Versions -16 and -17 | |||
o Added Acee as a co-author. | ||||
o Removed all traces of route filters. | ||||
o Removed numeric IDs of list entries in state data. | ||||
o Removed all next-hop cases except "simple-next-hop" and "special- | ||||
next-hop". | ||||
o Removed feature "multipath-routes". | ||||
o Augmented "ietf-interfaces" module with a leaf-list of leafrefs | ||||
pointing form state data of an interface entry to the routing | ||||
instance(s) to which the interface is assigned. | ||||
E.2. Changes Between Versions -15 and -16 | ||||
o Added 'type' as the second key component of 'routing-protocol', | o Added 'type' as the second key component of 'routing-protocol', | |||
both in configuration and state data. | both in configuration and state data. | |||
o The restriction of no more than one connected RIB per address | o The restriction of no more than one connected RIB per address | |||
family was removed. | family was removed. | |||
o Removed the 'id' key of routes in RIBs. This list has no keys | o Removed the 'id' key of routes in RIBs. This list has no keys | |||
anymore. | anymore. | |||
o Remove the 'id' key from static routes and make 'destination- | o Remove the 'id' key from static routes and make 'destination- | |||
prefix' the only key. | prefix' the only key. | |||
o Added 'route-preference' as a new attribute of routes in RIB. | o Added 'route-preference' as a new attribute of routes in RIB. | |||
o Added 'active' as a new attribute of routes in RIBs. | o Added 'active' as a new attribute of routes in RIBs. | |||
o Renamed RPC operation 'active-route' to 'fib-route. | o Renamed RPC operation 'active-route' to 'fib-route'. | |||
o Added 'route-preference' as a new parameter of routing protocol | o Added 'route-preference' as a new parameter of routing protocol | |||
instances, both in configuration and state data. | instances, both in configuration and state data. | |||
o Renamed identity 'rt:standard-routing-instance' to 'rt:default- | o Renamed identity 'rt:standard-routing-instance' to 'rt:default- | |||
routing-instance'. | routing-instance'. | |||
o Added next-hop lists to state data. | o Added next-hop lists to state data. | |||
o Added two cases for specifying next-hops indirectly - via a new | o Added two cases for specifying next-hops indirectly - via a new | |||
RIB or a recursive list of next-hops. | RIB or a recursive list of next-hops. | |||
o Reorganized next-hop in static routes. | o Reorganized next-hop in static routes. | |||
o Removed all 'if-feature' statements from state data. | o Removed all 'if-feature' statements from state data. | |||
E.2. Changes Between Versions -14 and -15 | E.3. Changes Between Versions -14 and -15 | |||
o Removed all defaults from state data. | o Removed all defaults from state data. | |||
o Removed default from 'cur-hop-limit' in config. | o Removed default from 'cur-hop-limit' in config. | |||
E.3. Changes Between Versions -13 and -14 | E.4. Changes Between Versions -13 and -14 | |||
o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | |||
feature. | feature. | |||
o Removed default value of 'cur-hop-limit' in state data. | o Removed default value of 'cur-hop-limit' in state data. | |||
o Moved parts of descriptions and all references on IPv6 RA | o Moved parts of descriptions and all references on IPv6 RA | |||
parameters from state data to configuration. | parameters from state data to configuration. | |||
o Added reference to RFC 6536 in the Security section. | o Added reference to RFC 6536 in the Security section. | |||
E.4. Changes Between Versions -12 and -13 | E.5. Changes Between Versions -12 and -13 | |||
o Wrote appendix about minimum implementation. | o Wrote appendix about minimum implementation. | |||
o Remove "when" statement for IPv6 router interface state data - it | o Remove "when" statement for IPv6 router interface state data - it | |||
was dependent on a config value that may not be present. | was dependent on a config value that may not be present. | |||
o Extra container for the next-hop list. | o Extra container for the next-hop list. | |||
o Names rather than numeric ids are used for referring to list | o Names rather than numeric ids are used for referring to list | |||
entries in state data. | entries in state data. | |||
skipping to change at page 83, line 23 | skipping to change at page 71, line 25 | |||
o | o | |||
o Removed "if-feature multiple-ribs;" from connected-ribs. | o Removed "if-feature multiple-ribs;" from connected-ribs. | |||
o "rib-name" instead of "name" is used as the name of leafref nodes. | o "rib-name" instead of "name" is used as the name of leafref nodes. | |||
o "next-hop" instead of "nexthop" or "gateway" used throughout, both | o "next-hop" instead of "nexthop" or "gateway" used throughout, both | |||
in node names and text. | in node names and text. | |||
E.5. Changes Between Versions -11 and -12 | E.6. Changes Between Versions -11 and -12 | |||
o Removed feature "advanced-router" and introduced two features | o Removed feature "advanced-router" and introduced two features | |||
instead: "multiple-ribs" and "multipath-routes". | instead: "multiple-ribs" and "multipath-routes". | |||
o Unified the keys of config and state versions of "routing- | o Unified the keys of config and state versions of "routing- | |||
instance" and "rib" lists. | instance" and "rib" lists. | |||
o Numerical identifiers of state list entries are not keys anymore, | o Numerical identifiers of state list entries are not keys anymore, | |||
but they are constrained using the "unique" statement. | but they are constrained using the "unique" statement. | |||
o Updated acknowledgements. | o Updated acknowledgements. | |||
E.6. Changes Between Versions -10 and -11 | E.7. Changes Between Versions -10 and -11 | |||
o Migrated address families from IANA enumerations to identities. | o Migrated address families from IANA enumerations to identities. | |||
o Terminology and node names aligned with the I2RS RIB model: router | o Terminology and node names aligned with the I2RS RIB model: router | |||
-> routing instance, routing table -> RIB. | -> routing instance, routing table -> RIB. | |||
o Introduced uint64 keys for state lists: routing-instance, rib, | o Introduced uint64 keys for state lists: routing-instance, rib, | |||
route, nexthop. | route, nexthop. | |||
o Described the relationship between system-controlled and user- | o Described the relationship between system-controlled and user- | |||
skipping to change at page 84, line 13 | skipping to change at page 72, line 13 | |||
router". | router". | |||
o Made nexthop into a choice in order to allow for nexthop-list | o Made nexthop into a choice in order to allow for nexthop-list | |||
(I2RS requirement). | (I2RS requirement). | |||
o Added nexthop-list with entries having priorities (backup) and | o Added nexthop-list with entries having priorities (backup) and | |||
weights (load balancing). | weights (load balancing). | |||
o Updated bibliography references. | o Updated bibliography references. | |||
E.7. Changes Between Versions -09 and -10 | E.8. Changes Between Versions -09 and -10 | |||
o Added subtree for state data ("/routing-state"). | o Added subtree for 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". | |||
E.8. Changes Between Versions -08 and -09 | E.9. 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. | |||
E.9. Changes Between Versions -07 and -08 | E.10. Changes Between Versions -07 and -08 | |||
o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
E.10. Changes Between Versions -06 and -07 | E.11. Changes Between Versions -06 and -07 | |||
o The contents of <get-reply> in Appendix D was updated: "eth[01]" | o The contents of <get-reply> in Appendix D was updated: "eth[01]" | |||
is used as the value of "location", and "forwarding" is on for | 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. | |||
E.11. Changes Between Versions -05 and -06 | E.12. 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 85, line 36 | skipping to change at page 73, line 36 | |||
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. | |||
E.12. Changes Between Versions -04 and -05 | E.13. 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 86, line 24 | skipping to change at page 74, line 24 | |||
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. | |||
E.13. Changes Between Versions -03 and -04 | E.14. 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 operations from "missing element" | |||
"data-missing". | to "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". | |||
E.14. Changes Between Versions -02 and -03 | E.15. Changes Between Versions -02 and -03 | |||
o Module "iana-afn-safi" moved to I-D "iana-if-type". | o Module "iana-afn-safi" moved to I-D "iana-if-type". | |||
o Removed forwarding table. | o Removed forwarding table. | |||
o RPC "get-route" changed to "active-route". Its output is a list | o RPC "get-route" changed to "active-route". Its output is a list | |||
of routes (for multi-path routing). | of routes (for multi-path routing). | |||
o New RPC "route-count". | o New RPC "route-count". | |||
skipping to change at page 87, line 22 | skipping to change at page 75, line 22 | |||
"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". | |||
E.15. Changes Between Versions -01 and -02 | E.16. 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 D now uses IP addresses from blocks | o The example in Appendix D 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 87, line 46 | skipping to change at page 75, line 46 | |||
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. | |||
E.16. Changes Between Versions -00 and -01 | E.17. 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. | |||
o RPC operation "delete-route" was removed. | o RPC operation "delete-route" was removed. | |||
o Illegal XPath references from "get-route" to the datastore were | o Illegal XPath references from "get-route" to the datastore were | |||
fixed. | fixed. | |||
o Section "Security Considerations" was written. | o Section "Security Considerations" was written. | |||
Author's Address | Authors' Addresses | |||
Ladislav Lhotka | Ladislav Lhotka | |||
CZ.NIC | CZ.NIC | |||
Email: lhotka@nic.cz | Email: lhotka@nic.cz | |||
Acee Lindem | ||||
Cisco Systems | ||||
Email: acee@cisco.com | ||||
End of changes. 148 change blocks. | ||||
968 lines changed or deleted | 407 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |