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