| < draft-ietf-netmod-routing-cfg-17.txt | draft-ietf-netmod-routing-cfg-18.txt > | |||
|---|---|---|---|---|
| NETMOD Working Group L. Lhotka | NETMOD Working Group L. Lhotka | |||
| Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
| Intended status: Standards Track A. Lindem | Intended status: Standards Track A. Lindem | |||
| Expires: September 5, 2015 Cisco Systems | Expires: October 19, 2015 Cisco Systems | |||
| March 04, 2015 | April 17, 2015 | |||
| A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
| draft-ietf-netmod-routing-cfg-17 | draft-ietf-netmod-routing-cfg-18 | |||
| Abstract | Abstract | |||
| This document contains a specification of three YANG modules. | This document contains a specification of three YANG modules. | |||
| Together they form the core routing data model which serves as a | Together they form the core routing data model which serves as a | |||
| framework for configuring and managing a routing subsystem. It is | framework for configuring and managing a routing subsystem. It is | |||
| expected that these modules will be augmented by additional YANG | expected that these modules will be augmented by additional YANG | |||
| modules defining data models for routing protocols and other | modules defining data models for routing protocols, route filters and | |||
| functions. The core routing data model provides common building | other functions. The core routing data model provides common | |||
| blocks for such extensions - routing instances, routes, routing | building blocks for such extensions - routing instances, routes, | |||
| information bases (RIB), and routing protocols. | routing information bases (RIB), and routing protocols. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on September 5, 2015. | This Internet-Draft will expire on October 19, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 18 ¶ | skipping to change at page 2, line 18 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | |||
| 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. The Design of the Core Routing Data Model . . . . . . . . . . 6 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 6 | |||
| 4.1. System-Controlled and User-Controlled List Entries . . . 9 | 4.1. System-Controlled and User-Controlled List Entries . . . 8 | |||
| 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 10 | 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . 10 | 5.1. Routing Instance . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . 11 | 5.1.1. Parameters of IPv6 Routing Instance Interfaces . . . 9 | |||
| 5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . 13 | 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . 11 | |||
| 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . 14 | 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . 14 | 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 12 | |||
| 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 15 | 5.4.2. Defining New Routing Protocols . . . . . . . . . . . 12 | |||
| 5.4.2. Defining New Routing Protocols . . . . . . . . . . . 15 | 5.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 16 | 6. Interactions with Other YANG Modules . . . . . . . . . . . . 13 | |||
| 6. Interactions with Other YANG Modules . . . . . . . . . . . . 17 | 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13 | |||
| 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 17 | 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 17 | 7. Routing Management YANG Module . . . . . . . . . . . . . . . 14 | |||
| 7. Routing Management YANG Module . . . . . . . . . . . . . . . 18 | 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 29 | |||
| 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 36 | 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 34 | |||
| 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 40 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 48 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 54 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 49 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 55 | 13.2. Informative References . . . . . . . . . . . . . . . . . 49 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 56 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 50 | |||
| Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 56 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 50 | |||
| A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 56 | A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 58 | Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 52 | |||
| Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 59 | Appendix C. Example: Adding a New Routing Protocol . . . . . . . 53 | |||
| Appendix C. Example: Adding a New Routing Protocol . . . . . . . 60 | Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 55 | |||
| Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 62 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 62 | |||
| Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 69 | E.1. Changes Between Versions -17 and -18 . . . . . . . . . . 62 | |||
| E.1. Changes Between Versions -16 and -17 . . . . . . . . . . 69 | E.2. Changes Between Versions -16 and -17 . . . . . . . . . . 63 | |||
| E.2. Changes Between Versions -15 and -16 . . . . . . . . . . 69 | E.3. Changes Between Versions -15 and -16 . . . . . . . . . . 63 | |||
| E.3. Changes Between Versions -14 and -15 . . . . . . . . . . 70 | E.4. Changes Between Versions -14 and -15 . . . . . . . . . . 64 | |||
| E.4. Changes Between Versions -13 and -14 . . . . . . . . . . 70 | E.5. Changes Between Versions -13 and -14 . . . . . . . . . . 64 | |||
| E.5. Changes Between Versions -12 and -13 . . . . . . . . . . 70 | E.6. Changes Between Versions -12 and -13 . . . . . . . . . . 64 | |||
| E.6. Changes Between Versions -11 and -12 . . . . . . . . . . 71 | E.7. Changes Between Versions -11 and -12 . . . . . . . . . . 65 | |||
| E.7. Changes Between Versions -10 and -11 . . . . . . . . . . 71 | E.8. Changes Between Versions -10 and -11 . . . . . . . . . . 65 | |||
| E.8. Changes Between Versions -09 and -10 . . . . . . . . . . 72 | E.9. Changes Between Versions -09 and -10 . . . . . . . . . . 65 | |||
| E.9. Changes Between Versions -08 and -09 . . . . . . . . . . 72 | E.10. Changes Between Versions -08 and -09 . . . . . . . . . . 66 | |||
| E.10. Changes Between Versions -07 and -08 . . . . . . . . . . 72 | E.11. Changes Between Versions -07 and -08 . . . . . . . . . . 66 | |||
| E.11. Changes Between Versions -06 and -07 . . . . . . . . . . 72 | E.12. Changes Between Versions -06 and -07 . . . . . . . . . . 66 | |||
| E.12. Changes Between Versions -05 and -06 . . . . . . . . . . 73 | E.13. Changes Between Versions -05 and -06 . . . . . . . . . . 66 | |||
| E.13. Changes Between Versions -04 and -05 . . . . . . . . . . 73 | E.14. Changes Between Versions -04 and -05 . . . . . . . . . . 67 | |||
| E.14. Changes Between Versions -03 and -04 . . . . . . . . . . 74 | E.15. Changes Between Versions -03 and -04 . . . . . . . . . . 68 | |||
| E.15. Changes Between Versions -02 and -03 . . . . . . . . . . 74 | E.16. Changes Between Versions -02 and -03 . . . . . . . . . . 68 | |||
| E.16. Changes Between Versions -01 and -02 . . . . . . . . . . 75 | E.17. Changes Between Versions -01 and -02 . . . . . . . . . . 69 | |||
| E.17. Changes Between Versions -00 and -01 . . . . . . . . . . 75 | E.18. Changes Between Versions -00 and -01 . . . . . . . . . . 69 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 76 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 69 | |||
| 1. Introduction | 1. Introduction | |||
| This document contains a specification of the following YANG modules: | This document contains a specification of the following YANG modules: | |||
| o Module "ietf-routing" provides generic components of a routing | o Module "ietf-routing" provides generic components of a routing | |||
| data model. | data model. | |||
| o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | |||
| module with additional data specific to IPv4 unicast. | module with additional data specific to IPv4 unicast. | |||
| skipping to change at page 4, line 5 ¶ | skipping to change at page 4, line 5 ¶ | |||
| augmented by numerous modules developed by other IETF working groups. | augmented by numerous modules developed by other IETF 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 [RFC6020]: | The following terms are defined in [RFC6020]: | |||
| o augment | o augment, | |||
| o configuration data | o configuration data, | |||
| o data model | o data model, | |||
| o data node | o data node, | |||
| o feature | o feature, | |||
| o mandatory node | o mandatory node, | |||
| o module | o module, | |||
| o state data | o schema tree, | |||
| o RPC operation | o state data, | |||
| o RPC 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 | |||
| skipping to change at page 6, line 14 ¶ | skipping to change at page 6, line 28 ¶ | |||
| 3. Objectives | 3. Objectives | |||
| The initial design of the core routing data model was driven by the | The initial design of the core routing data model was driven by the | |||
| following objectives: | following objectives: | |||
| o The data model should be suitable for the common address families, | o The data model should be suitable for the common address families, | |||
| in particular IPv4 and IPv6, and for unicast and multicast | in particular IPv4 and IPv6, and for unicast and multicast | |||
| routing, as well as Multiprotocol Label Switching (MPLS). | routing, as well as Multiprotocol Label Switching (MPLS). | |||
| o Simple routing set-ups, such as static routing, should be | o A simple IP routing system, such as one that uses only static | |||
| configurable in a simple way, ideally without any need to develop | routing, should be configurable in a simple way, ideally without | |||
| 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 set-ups involving multiple routing information bases | complicated implementations involving multiple routing information | |||
| (RIB) and multiple routing protocols, as well as controlled | bases (RIB) and multiple routing protocols, as well as controlled | |||
| redistributions of routing information. | redistributions of routing information. | |||
| o Device vendors will want to map the data models built on this | o Device vendors will want to map the data models built on this | |||
| generic framework to their proprietary data models and | generic framework to their proprietary data models and | |||
| configuration interfaces. Therefore, the framework should be | configuration interfaces. Therefore, the framework should be | |||
| flexible enough to facilitate such a mapping and accommodate data | flexible enough to facilitate such a mapping and accommodate data | |||
| models with different logic. | models with different logic. | |||
| 4. The Design of the Core Routing Data Model | 4. The Design of the Core Routing Data Model | |||
| skipping to change at page 7, line 7 ¶ | skipping to change at page 7, line 7 ¶ | |||
| first module, "ietf-routing", defines the generic components of a | first module, "ietf-routing", defines the generic components of a | |||
| routing system. The other two modules, "ietf-ipv4-unicast-routing" | routing system. The other two modules, "ietf-ipv4-unicast-routing" | |||
| and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | |||
| with additional data nodes that are needed for IPv4 and IPv6 unicast | with additional data nodes that are needed for IPv4 and IPv6 unicast | |||
| routing, respectively. Figures 1 and 2 show abridged views of the | routing, respectively. Figures 1 and 2 show abridged views of the | |||
| configuration and 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 routing-instance* [name] | +--rw routing-instance* [name] | |||
| | +--rw name | +--rw name | |||
| | +--rw type? | +--rw type? | |||
| | +--rw enabled? | +--rw enabled? | |||
| | +--rw router-id? | +--rw router-id? | |||
| | +--rw description? | +--rw description? | |||
| | +--rw default-ribs | +--rw interfaces | |||
| | | +--rw default-rib* [address-family] | | +--rw interface* | |||
| | | +--rw address-family | +--rw routing-protocols | |||
| | | +--rw rib-name | | +--rw routing-protocol* [type name] | |||
| | +--rw interfaces | | +--rw type | |||
| | | +--rw interface* [name] | | +--rw name | |||
| | | +--rw name | | +--rw description? | |||
| | | +--rw v6ur:ipv6-router-advertisements | | +--rw enabled? | |||
| | | ... | | +--rw route-preference? | |||
| | +--rw routing-protocols | | +--rw static-routes | |||
| | +--rw routing-protocol* [type name] | | ... | |||
| | +--rw type | +--rw ribs | |||
| | +--rw name | +--rw rib* [name] | |||
| | +--rw description? | +--rw name | |||
| | +--rw enabled? | +--rw address-family? | |||
| | +--rw route-preference? | +--rw description? | |||
| | +--rw connected-ribs | ||||
| | | ... | ||||
| | +--rw static-routes | ||||
| | ... | ||||
| +--rw ribs | ||||
| +--rw rib* [name] | ||||
| +--rw name | ||||
| +--rw address-family | ||||
| +--rw description? | ||||
| +--rw recipient-ribs | ||||
| +--rw recipient-rib* [rib-name] | ||||
| ... | ||||
| Figure 1: Configuration data hierarchy. | Figure 1: Configuration data hierarchy. | |||
| +--ro routing-state | +--ro routing-state | |||
| +--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| | +--ro name | +--ro name | |||
| | +--ro type? | +--ro type? | |||
| | +--ro default-ribs | +--ro router-id? | |||
| | | +--ro default-rib* [address-family] | +--ro interfaces | |||
| | | +--ro address-family | | +--ro interface* | |||
| | | +--ro rib-name | +--ro routing-protocols | |||
| | +--ro interfaces | | +--ro routing-protocol* [type name] | |||
| | | +--ro interface* [name] | | +--ro type | |||
| | | +--ro name | | +--ro name | |||
| | | +--ro v6ur:ipv6-router-advertisements | | +--ro route-preference | |||
| | | ... | +--ro ribs | |||
| | +--ro routing-protocols | +--ro rib* [name] | |||
| | +--ro routing-protocol* [type name] | +--ro name | |||
| | +--ro type | +--ro address-family | |||
| | +--ro name | +--ro default-rib? | |||
| | +--ro route-preference | +--ro routes | |||
| | +--ro connected-ribs | ||||
| | ... | ||||
| +--ro ribs | ||||
| +--ro rib* [name] | ||||
| +--ro name | ||||
| +--ro address-family | ||||
| +--ro routes | ||||
| | +--ro route* | ||||
| | ... | ||||
| +--ro recipient-ribs | ||||
| +--ro recipient-rib* [rib-name] | ||||
| ... | ... | |||
| Figure 2: State data hierarchy. | Figure 2: State data hierarchy. | |||
| As can be seen from Figures 1 and 2, the core routing data model | As can be seen from Figures 1 and 2, the core routing data model | |||
| introduces several generic components of a routing framework: routing | introduces several generic components of a routing framework: routing | |||
| instances, RIBs containing lists of routes, and routing protocols. | instances, RIBs containing lists of routes, and routing protocols. | |||
| The following subsections describe these components in more detail. | Section 5 describes these components in more detail. | |||
| By combining the components in various ways, and possibly augmenting | ||||
| them with appropriate contents defined in other modules, various | ||||
| routing systems can be realized. | ||||
| +--------+ | ||||
| | direct | +--------------+ +--------------+ | ||||
| | routes |------>| |<------| | | ||||
| +--------+ | default | | additional | | ||||
| | RIB | | RIB | | ||||
| +--------+ | | | | | ||||
| | static |------>| |------>| | | ||||
| | routes | +--------------+ +--------------+ | ||||
| +--------+ ^ | ^ | | ||||
| | | | | | ||||
| | v | v | ||||
| +----------+ +----------+ | ||||
| | routing | | routing | | ||||
| | protocol | | protocol | | ||||
| +----------+ +----------+ | ||||
| Figure 3: Example set-up of a routing system | ||||
| The example in Figure 3 shows a typical (though certainly not the | ||||
| only possible) organization of a more complex routing subsystem for a | ||||
| single address family. Several of its features are worth mentioning: | ||||
| o Along with the default RIB, which is always present, an additional | ||||
| RIB is configured. | ||||
| o Each routing protocol instance, including the "static" and | ||||
| "direct" pseudo-protocols, is connected to one or more RIBs with | ||||
| which it can exchange routes (in both directions, except for the | ||||
| "static" and "direct" pseudo-protocols). | ||||
| o RIBs may also be connected to each other and exchange routes in | ||||
| either direction (or both). | ||||
| 4.1. System-Controlled and User-Controlled List Entries | 4.1. System-Controlled and User-Controlled List Entries | |||
| The core routing data model defines several lists, for example | The core routing data model defines several lists in the schema tree, | |||
| "routing-instance" or "rib", that have to be populated with at least | for example "routing-instance" or "rib", that have to be populated | |||
| one entry in any properly functioning device, and additional entries | with at least one entry in any properly functioning device, and | |||
| may be configured by the user. | additional entries may be 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 | |||
| system-controlled entry in state data, i.e., inside the "routing- | system-controlled entry in state data, i.e., inside the "routing- | |||
| state" container. | state" container. | |||
| Additional entries may be created in the configuration by the user, | Additional entries may be created in the configuration by a client, | |||
| e.g., via the NETCONF protocol. These are so-called user-controlled | e.g., via the NETCONF protocol. These are so-called user-controlled | |||
| entries. If the server accepts a configured user-controlled entry, | entries. If the server accepts a configured user-controlled entry, | |||
| then this entry also appears in the state data version of the list. | then this entry also appears in the state data version of the list. | |||
| Corresponding entries in both versions of the list (in state data and | Corresponding entries in both versions of the list (in state data and | |||
| configuration) have the same value of the list key. | configuration) have the same value of the list key. | |||
| The user may also provide supplemental configuration of system- | The user may also provide supplemental configuration of system- | |||
| controlled entries. To do so, the user creates a new entry in the | controlled entries. To do so, the user creates a new entry in the | |||
| configuration with the desired contents. In order to bind this entry | configuration with the desired contents. In order to bind this entry | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at page 9, line 18 ¶ | |||
| appearing as entries of the "routing-instance" list. Each routing | appearing as entries of the "routing-instance" list. Each routing | |||
| instance has separate configuration and state data under | instance has separate configuration and state data under | |||
| "/rt:routing/rt:routing-instance" and "/rt:routing-state/rt:routing- | "/rt:routing/rt:routing-instance" and "/rt:routing-state/rt:routing- | |||
| instance", respectively. | instance", respectively. | |||
| The semantics of the term "routing instance" is deliberately left | The semantics of the term "routing instance" is deliberately left | |||
| undefined. It is expected that future YANG modules will define data | undefined. It is expected that future YANG modules will define data | |||
| models for specific types of routing instances, such as VRF (virtual | models for specific types of routing instances, such as VRF (virtual | |||
| routing and forwarding) instances that are used for BGP/MPLS virtual | routing and forwarding) instances that are used for BGP/MPLS virtual | |||
| private networks [RFC4364]. For each type of routing instance, an | private networks [RFC4364]. For each type of routing instance, an | |||
| identity derived from "rt:routing-instance" MUST be defined. This | identity derived from "rt:routing-instance" SHALL be defined. This | |||
| identity is then referred to by the value of the "type" leaf (a child | identity is then referred to by the value of the "type" leaf (a child | |||
| node of "routing-instance" list). | node of "routing-instance" list). | |||
| An implementation MAY create one or more system-controlled routing | ||||
| instances, and MAY also impose restrictions on types of routing | ||||
| instances that can be configured, and on the maximum number of | ||||
| supported instances for each type. For example, a simple router | ||||
| implementation may support only one system-controlled routing | ||||
| instance of the default type "rt:default-routing-instance" and may | ||||
| not allow creation of any user-controlled instances. | ||||
| Each network layer interface has to be assigned to one or more | Each network layer interface has to be assigned to one or more | |||
| routing instances in order to be able to participate in packet | routing instances in order to be able to participate in packet | |||
| forwarding, routing protocols and other operations of those routing | forwarding, routing protocols and other operations of those routing | |||
| instances. The assignment is accomplished by placing a corresponding | instances. The assignment is accomplished by placing a corresponding | |||
| (system- or user-controlled) entry in the list of routing instance | (system- or user-controlled) entry in the leaf-list of routing | |||
| interfaces ("rt:interface"). The key of the list entry is the name | instance interfaces ("rt:interface"). Each entry is the name of a | |||
| of a configured network layer interface, see the "ietf-interfaces" | configured network layer interface, see the "ietf-interfaces" | |||
| module [RFC7223]. | module [RFC7223]. | |||
| A data model for a routing instance type MAY state additional rules | ||||
| for the assignment of interfaces to routing instances of that type. | ||||
| For example, it may be required that the sets of interfaces assigned | ||||
| to different routing instances of a certain type be disjoint. | ||||
| 5.1.1. Parameters of IPv6 Routing Instance Interfaces | 5.1.1. Parameters of IPv6 Routing Instance Interfaces | |||
| The module "ietf-ipv6-unicast-routing" augments the definition of the | YANG module "ietf-ipv6-unicast-routing" (Section 9) augments the | |||
| data node "rt:interface", in both configuration and state data, with | configuration and state data of interfaces with definitions of the | |||
| definitions of the following variables as required by [RFC4861], sec. | following variables as required by [RFC4861], sec. 6.2.1: | |||
| 6.2.1: | ||||
| o send-advertisements, | o send-advertisements, | |||
| o max-rtr-adv-interval, | o max-rtr-adv-interval, | |||
| o min-rtr-adv-interval, | o min-rtr-adv-interval, | |||
| o managed-flag, | o managed-flag, | |||
| o other-config-flag, | o other-config-flag, | |||
| skipping to change at page 11, line 44 ¶ | skipping to change at page 10, line 4 ¶ | |||
| 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. | |||
| The definitions and descriptions of the above parameters can be found | ||||
| in the module "ietf-ipv6-unicast-routing" (Section 9). | ||||
| NOTES: | NOTES: | |||
| 1. The "IsRouter" flag, which is also required by [RFC4861], is | 1. The "IsRouter" flag, which is also required by [RFC4861], is | |||
| implemented in the "ietf-ip" module [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 | |||
| skipping to change at page 12, line 51 ¶ | skipping to change at page 11, line 6 ¶ | |||
| o "destination-prefix": IP prefix specifying the set of destination | o "destination-prefix": IP prefix specifying the set of destination | |||
| addresses for which the route may be used. This attribute is | addresses for which the route may be used. This attribute is | |||
| mandatory. | mandatory. | |||
| o "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 action to be performed with a packet. | o "next-hop": determines the action to be performed with a packet. | |||
| See below for details. | ||||
| The choice of next-hops comprises the following cases: | ||||
| o simple next-hop - IP address of the next-hop router, outgoing | ||||
| interface, or both. | ||||
| o special next-hop - a keyword indicating special packet handling, | ||||
| one of: | ||||
| * "blackhole" - silently discard the packet; | ||||
| * "unreachable" - discard the packet and notify the sender with a | ||||
| "destination unreachable" error message; | ||||
| * "prohibit" - discard the packet notify the sender with an | ||||
| "administratively prohibited" error message. | ||||
| It is expected that future YANG modules defining will augment routes | ||||
| with more complex next-hop types, or additional attributes such as | ||||
| metrics. | ||||
| Routes are primarily state data that appear as entries of RIBs | Routes are primarily state data that appear as entries of RIBs | |||
| (Section 5.3) but they may also be found in configuration data, for | (Section 5.3) but they may also be found in configuration data, for | |||
| example as manually configured static routes. In the latter case, | example as manually configured static routes. In the latter case, | |||
| configurable route attributes are generally a subset of route | configurable route attributes are generally a subset of route | |||
| attributes described above. | attributes described above. | |||
| 5.3. Routing Information Base (RIB) | 5.3. Routing Information Base (RIB) | |||
| A routing information base (RIB) is a list of routes complemented | Every routing instance manages one or more routing information bases | |||
| with administrative data, namely: | (RIB). A RIB is a list of routes complemented with administrative | |||
| data. Each RIB contains only routes of one address family. An | ||||
| o "source-protocol": type of the routing protocol from which the | address family is represented by an identity derived from the | |||
| route was originally obtained. | "rt:address-family" base identity. | |||
| o "active": an implementation can use this empty leaf to indicate | ||||
| that the route is preferred among all routes in the same RIB that | ||||
| have the same destination prefix. | ||||
| o "last-updated": the date and time when the route was last updated, | ||||
| or inserted into the RIB. | ||||
| Each RIB MUST contain only routes of one address family. An address | ||||
| family is represented by an 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/routing-instance/ribs/rib". The | |||
| are controlled and manipulated by routing protocol operations which | contents of RIBs are controlled and manipulated by routing protocol | |||
| may result in route additions, removals and modifications. This also | operations which may result in route additions, removals and | |||
| includes manipulations via the "static" and/or "direct" pseudo- | modifications. This also includes manipulations via the "static" | |||
| protocols, see Section 5.4.1. | and/or "direct" pseudo-protocols, see Section 5.4.1. | |||
| RIBs are global, which means that a RIB may be used by any or all | ||||
| routing instances. However, a data model for a routing instance type | ||||
| MAY state rules and restrictions for sharing RIBs among routing | ||||
| instances of that type. | ||||
| Each routing instance has, for every supported address family, one | Each routing instance has, for every supported address family, one | |||
| RIB selected as the so-called default RIB. This selection is | RIB marked as the so-called default RIB. Its role is explained in | |||
| recorded in the list "default-rib". The role of default RIBs is | Section 5.4. | |||
| explained in Section 5.4. | ||||
| Simple router implementations that do not advertise the feature | Simple router implementations that do not advertise the feature | |||
| "multiple-ribs" will typically create one system-controlled RIB per | "multiple-ribs" will typically create one system-controlled RIB per | |||
| supported address family, and declare it as the default RIB (via a | routing instance and supported address family, and mark it as the | |||
| system-controlled entry of the "default-rib" list). | default RIB. | |||
| 5.3.1. Multiple RIBs per Address Family | ||||
| More complex router implementations advertising the "multiple-ribs" | More complex router implementations advertising the "multiple-ribs" | |||
| feature support multiple RIBs per address family that can be used for | feature support multiple RIBs per address family that can be used for | |||
| policy routing and other purposes. Every RIB can then serve as a | policy routing and other purposes. | |||
| source of routes for other RIBs of the same address family. To | ||||
| achieve this, one or more recipient RIBs may be specified in the | ||||
| configuration of the source RIB. | ||||
| A RIB MUST NOT appear among its own recipient RIBs. | ||||
| 5.4. Routing Protocol | 5.4. Routing Protocol | |||
| The core routing data model provides an open-ended framework for | The core routing data model provides an open-ended framework for | |||
| defining multiple routing protocol instances within a routing | defining multiple routing protocol instances within a routing | |||
| instance. Each routing protocol instance MUST be assigned a type, | instance. Each routing protocol instance MUST be assigned a type, | |||
| which is an identity derived from the "rt:routing-protocol" base | which is an identity derived from the "rt:routing-protocol" base | |||
| identity. The core routing data model defines two identities for the | identity. The core routing data model defines two identities for the | |||
| direct and static pseudo-protocols (Section 5.4.1). | direct and static pseudo-protocols (Section 5.4.1). | |||
| Multiple routing protocol instances of the same type MAY be | Multiple routing protocol instances of the same type MAY be | |||
| configured within the same routing instance. | configured within the same routing instance. | |||
| Each routing protocol instance can be connected to one or more RIBs | ||||
| for each address family that the routing protocol instance supports. | ||||
| By default, the interaction of a routing protocol instance with its | ||||
| connected RIBs is governed by the following rules: | ||||
| o Routes learned from the network are installed in all connected | ||||
| RIBs with a matching address family. | ||||
| o Conversely, routes from all connected RIBs are injected into the | ||||
| routing protocol instance. | ||||
| However, a data model for a routing protocol MAY impose specific | ||||
| rules for exchanging routes between routing protocol instances and | ||||
| connected RIBs. | ||||
| On devices supporting the "multiple-ribs" feature, any RIB (system- | ||||
| controlled or user-controlled) may be connected to a routing protocol | ||||
| instance by configuring a corresponding entry in the "connected-rib" | ||||
| list. If such an entry is not configured for an address family, then | ||||
| the default RIB MUST be used as the connected RIB for this address | ||||
| family. | ||||
| 5.4.1. Routing Pseudo-Protocols | 5.4.1. Routing Pseudo-Protocols | |||
| The core routing data model defines two special routing protocol | The core routing data model defines two special routing protocol | |||
| types - "direct" and "static". Both are in fact pseudo-protocols, | types - "direct" and "static". Both are in fact pseudo-protocols, | |||
| which means they are confined to the local device and do not exchange | which means they are confined to the local device and do not exchange | |||
| any routing information with adjacent routers. Routes from both | any routing information with adjacent routers. | |||
| "direct" and "static" protocol instances are passed to the connected | ||||
| RIBs, but an exchange in the opposite direction is not allowed. | ||||
| Every routing instance MUST implement exactly one instance of the | Every routing instance MUST implement exactly one instance of the | |||
| "direct" pseudo-protocol type. It is the source of direct routes for | "direct" pseudo-protocol type. It is the source of direct routes for | |||
| all configured address families. Direct routes are normally supplied | all configured address families. Direct routes are normally supplied | |||
| by the operating system kernel, based on the configuration of network | by the operating system kernel, based on the configuration of network | |||
| interface addresses, see Section 6.2. The "direct" pseudo-protocol | interface addresses, see Section 6.2. Direct routes MUST be | |||
| MUST always be connected to the default RIBs of all supported address | installed in default RIBs of all supported address families. | |||
| families. Unlike other routing protocol types, this connection | ||||
| cannot be changed in the configuration. | ||||
| A pseudo-protocol of the type "static" allows for specifying routes | A pseudo-protocol of the type "static" allows for specifying routes | |||
| manually. It MAY be configured in zero or multiple instances, | manually. It MAY be configured in zero or multiple instances, | |||
| although a typical configuration will have exactly one instance per | although a typical configuration will have exactly one instance per | |||
| routing instance. | routing instance. | |||
| 5.4.2. Defining New Routing Protocols | 5.4.2. Defining New Routing Protocols | |||
| It is expected that future YANG modules will create data models for | It is expected that future YANG modules will create data models for | |||
| additional routing protocol types. Such a new module has to define | additional routing protocol types. Such a new module has to define | |||
| skipping to change at page 16, line 28 ¶ | skipping to change at page 13, line 7 ¶ | |||
| and possibly other places in the configuration, state data, | and possibly other places in the configuration, state data, | |||
| notifications, and RPC input or output. | notifications, and RPC input or output. | |||
| o Configuration parameters and/or state data for the new protocol | o Configuration parameters and/or state data for the new protocol | |||
| can be defined by augmenting the "routing-protocol" data node | can be defined by augmenting the "routing-protocol" data node | |||
| under both "/routing" and "/routing-state". | under both "/routing" and "/routing-state". | |||
| o Per-interface configuration, including activation of the routing | o Per-interface configuration, including activation of the routing | |||
| protocol on individual interfaces, can use references to entries | protocol on individual interfaces, can use references to entries | |||
| in the list of routing instance interfaces (rt:interface). | in the leaf-list of routing instance's interfaces (rt:interface). | |||
| By using the "when" statement, the augmented configuration parameters | By using the "when" statement, the augmented configuration parameters | |||
| and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
| conditional and valid only if the value of "rt:type" or "rt:source- | conditional and valid only if the value of "rt:type" or "rt:source- | |||
| protocol" is equal to the new protocol's identity. It is also | protocol" is equal to the new protocol's identity. It is also | |||
| RECOMMENDED that protocol-specific data nodes be encapsulated in | RECOMMENDED that protocol-specific data nodes be encapsulated in | |||
| appropriately named containers. | appropriately named containers. | |||
| The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
| RIP routing protocol in Appendix C. | RIP routing protocol in Appendix C. | |||
| 5.5. RPC Operations | 5.5. RPC Operations | |||
| The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines one RPC operation: | |||
| o fib-route: query a routing instance for the active route in the | o fib-route: query a routing instance for the active route in the | |||
| Forwarding Information Base (FIB). It is the route that is | Forwarding Information Base (FIB). It is the route that is | |||
| currently used for sending datagrams to a destination host whose | currently used for sending datagrams to a destination host whose | |||
| address is passed as an input parameter. | address is passed as an input parameter. | |||
| o route-count: retrieve the total number of entries in a RIB. | ||||
| 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]: | |||
| skipping to change at page 18, line 19 ¶ | skipping to change at page 14, line 42 ¶ | |||
| direct route. The destination prefix of this route is set according | direct route. The destination prefix of this route is set according | |||
| to the configured IP address and network prefix/mask, and the | to the configured IP address and network prefix/mask, and the | |||
| interface is set as the outgoing interface for that route. | interface is set as the outgoing interface for that route. | |||
| 7. Routing Management YANG Module | 7. Routing Management YANG Module | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-routing@2015-03-04.yang" | <CODE BEGINS> file "ietf-routing@2015-04-17.yang" | |||
| module ietf-routing { | module ietf-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
| prefix "rt"; | prefix "rt"; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| skipping to change at page 19, line 16 ¶ | skipping to change at page 15, line 41 ¶ | |||
| Copyright (c) 2014 IETF Trust and the persons identified as | Copyright (c) 2014 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| RFC itself for full legal notices."; | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | ||||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | ||||
| revision 2015-03-04 { | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | ||||
| full legal notices."; | ||||
| revision 2015-04-17 { | ||||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Features */ | /* Features */ | |||
| feature multiple-ribs { | feature multiple-ribs { | |||
| description | description | |||
| "This feature indicates that the server supports user-defined | "This feature indicates that the server supports user-defined | |||
| RIBS and the framework for passing routes between RIBs. | RIBs. | |||
| Servers that do not advertise this feature MUST 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 routing-instance and | |||
| and make them also the default RIBs. These RIBs then appear as | supported address family and make them also the default RIBs. | |||
| entries of the list /routing-state/ribs/rib."; | These RIBs then appear as entries of the list | |||
| /routing-state/routing-instance/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 configured IPv4 addresses. | |||
| skipping to change at page 21, line 27 ¶ | skipping to change at page 18, line 9 ¶ | |||
| typedef routing-instance-state-ref { | typedef routing-instance-state-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing-state/rt:routing-instance/rt:name"; | path "/rt:routing-state/rt:routing-instance/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference state data of a | "This type is used for leafs that reference state data of a | |||
| routing instance."; | routing instance."; | |||
| } | } | |||
| typedef rib-ref { | ||||
| type leafref { | ||||
| path "/rt:routing/rt:ribs/rt:rib/rt:name"; | ||||
| } | ||||
| description | ||||
| "This type is used for leafs that reference a RIB | ||||
| configuration."; | ||||
| } | ||||
| typedef rib-state-ref { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:ribs/rt:rib/rt:name"; | ||||
| } | ||||
| description | ||||
| "This type is used for leafs that reference a RIB in state | ||||
| data."; | ||||
| } | ||||
| typedef route-preference { | typedef route-preference { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "This type is used for route preferences."; | "This type is used for route preferences."; | |||
| } | } | |||
| /* Groupings */ | /* Groupings */ | |||
| grouping address-family { | grouping address-family { | |||
| description | description | |||
| "This grouping provides a leaf identifying an address | "This grouping provides a leaf identifying an address | |||
| family."; | family."; | |||
| leaf address-family { | leaf address-family { | |||
| type identityref { | type identityref { | |||
| base address-family; | base address-family; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| skipping to change at page 23, line 4 ¶ | skipping to change at page 19, line 17 ¶ | |||
| 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 | |||
| unreachable."; | unreachable."; | |||
| } | } | |||
| enum prohibit { | enum prohibit { | |||
| 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 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."; | "Special next-hop options."; | |||
| } | } | |||
| } | } | |||
| grouping next-hop-content { | grouping next-hop-content { | |||
| description | description | |||
| "Generic parameters of next-hops in static routes."; | "Generic parameters of next-hops in static routes."; | |||
| choice next-hop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for next-hops in static routes. | "Options for next-hops in static routes. | |||
| It is expected that other cases will be added through | It is expected that other cases will be added through | |||
| augments from other modules, e.g., for ECMP."; | augments from other modules, e.g., for Equal-Cost Multipath | |||
| routing (ECMP)."; | ||||
| case simple-next-hop { | case simple-next-hop { | |||
| description | description | |||
| "Simple next-hop is specified as an outgoing interface, | "Simple next-hop is specified as an outgoing interface, | |||
| next-hop address or both. | next-hop address or both. | |||
| Address-family-specific modules are expected to provide | Address-family-specific modules are expected to provide | |||
| 'next-hop-address' leaf via augmentation."; | 'next-hop-address' leaf via augmentation."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:routing-instance/rt:interfaces/" | path "/rt:routing/rt:routing-instance/rt:interfaces/" | |||
| + "rt:interface/rt:name"; | + "rt:interface"; | |||
| } | } | |||
| 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; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 24, line 20 ¶ | skipping to change at page 20, line 34 ¶ | |||
| case simple-next-hop { | case simple-next-hop { | |||
| description | description | |||
| "Simple next-hop is specified as an outgoing interface, | "Simple next-hop is specified as an outgoing interface, | |||
| next-hop address or both. | next-hop address or both. | |||
| Address-family-specific modules are expected to provide | Address-family-specific modules are expected to provide | |||
| 'next-hop-address' leaf via augmentation."; | 'next-hop-address' leaf via augmentation."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing-state/rt:routing-instance/" | path "/rt:routing-state/rt:routing-instance/" | |||
| + "rt:interfaces/rt:interface/rt:name"; | + "rt:interfaces/rt:interface"; | |||
| } | } | |||
| 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; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 25, line 18 ¶ | skipping to change at page 21, line 33 ¶ | |||
| inserted into the RIB."; | inserted into the RIB."; | |||
| } | } | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/if:interfaces-state/if:interface" { | augment "/if:interfaces-state/if:interface" { | |||
| description | description | |||
| "This augment adds a wrapped leaf-list to interface state | "This augment adds a wrapped leaf-list to interface state | |||
| data."; | data."; | |||
| container routing-instances { | leaf routing-instance { | |||
| description | type routing-instance-state-ref; | |||
| "The enclosed leaf-list provides references to all routing | must "../if:name=/rt:routing-state/" | |||
| instances to which the parent interface is assigned. | + "rt:routing-instance[rt:name=current()]/rt:interfaces/" | |||
| + "rt:interface" { | ||||
| The assignments are configured as a part of routing-instance | error-message | |||
| configuration (module ietf-routing)."; | "The interface is not assigned to the routing instance."; | |||
| leaf-list routing-instance { | ||||
| type routing-instance-state-ref; | ||||
| must "../../if:name=/rt:routing-state/" | ||||
| + "rt:routing-instance[rt:name=current()]/rt:interfaces/" | ||||
| + "rt:interface/rt:name" { | ||||
| error-message "The interface is not assigned to the " | ||||
| + "routing instance."; | ||||
| description | ||||
| "The reference must mirror a corresponding assignment | ||||
| under routing-instance."; | ||||
| } | ||||
| description | description | |||
| "Reference to a routing instance."; | "The reference must mirror a corresponding assignment under | |||
| routing-instance."; | ||||
| } | } | |||
| description | ||||
| "The name of the routing instance to which the interface is | ||||
| assigned."; | ||||
| } | } | |||
| } | } | |||
| container routing-state { | container routing-state { | |||
| config "false"; | config "false"; | |||
| description | description | |||
| "State data of the routing subsystem."; | "State data of the routing subsystem."; | |||
| list routing-instance { | list routing-instance { | |||
| key "name"; | key "name"; | |||
| min-elements "1"; | min-elements "1"; | |||
| description | description | |||
| "Each list entry is a container for state data of a routing | "Each list entry is a container for state data of a routing | |||
| instance. | instance. | |||
| An implementation MAY create one or more system-controlled | An implementation MUST support routing instance(s) of the | |||
| instances, other user-controlled instances MAY be created by | type 'rt:default-routing-instance', and MAY support other | |||
| types. An implementation MAY restrict the number of routing | ||||
| instances of each supported type. | ||||
| An implementation SHOULD create at least one | ||||
| system-controlled instance, and MAY allow the clients to | ||||
| create user-controlled routing instances in | ||||
| configuration."; | configuration."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the routing instance. | "The name of the routing instance. | |||
| For system-controlled instances the name is persistent, | For system-controlled instances the name is persistent, | |||
| i.e., it SHOULD NOT change across reboots."; | i.e., it SHOULD NOT change across reboots."; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-instance; | base routing-instance; | |||
| } | } | |||
| description | description | |||
| "The routing instance type."; | "The routing instance type."; | |||
| } | } | |||
| container default-ribs { | uses router-id { | |||
| description | description | |||
| "Default RIBs used by the routing instance."; | "Global router ID. | |||
| list default-rib { | ||||
| key "address-family"; | ||||
| description | ||||
| "Each list entry specifies the default RIB for one | ||||
| address family. | ||||
| The default RIB is operationally connected to all | ||||
| routing protocols for which a connected RIB has not been | ||||
| explicitly configured. | ||||
| The 'direct' pseudo-protocol is always connected to the | It may be either configured or assigned algorithmically by | |||
| default RIBs."; | the implementation."; | |||
| uses address-family; | ||||
| leaf rib-name { | ||||
| type rib-state-ref; | ||||
| mandatory "true"; | ||||
| description | ||||
| "Name of an existing RIB to be used as the default RIB | ||||
| for the given routing instance and address family."; | ||||
| } | ||||
| } | ||||
| } | } | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Network layer interfaces belonging to the routing | "Network layer interfaces belonging to the routing | |||
| instance."; | instance."; | |||
| list interface { | leaf-list interface { | |||
| key "name"; | type if:interface-state-ref; | |||
| description | description | |||
| "List of network layer interfaces assigned to the routing | "Each entry is a reference to the name of a configured | |||
| instance."; | network layer interface."; | |||
| leaf name { | ||||
| type if:interface-state-ref; | ||||
| description | ||||
| "A reference to the name of a configured network layer | ||||
| interface."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container routing-protocols { | container routing-protocols { | |||
| description | description | |||
| "Container for the list of routing protocol instances."; | "Container for the list of routing protocol instances."; | |||
| list routing-protocol { | list routing-protocol { | |||
| key "type name"; | key "type name"; | |||
| description | description | |||
| "State data of a routing protocol instance. | "State data of a routing protocol instance. | |||
| skipping to change at page 28, line 4 ¶ | skipping to change at page 23, line 43 ¶ | |||
| } | } | |||
| leaf route-preference { | leaf route-preference { | |||
| type route-preference; | type route-preference; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "The value of route preference (administrative | "The value of route preference (administrative | |||
| distance) assigned to all routes generated by the | distance) assigned to all routes generated by the | |||
| routing protocol instance. A lower value means a more | routing protocol instance. A lower value means a more | |||
| preferred route."; | preferred route."; | |||
| } | } | |||
| container connected-ribs { | ||||
| description | ||||
| "Container for connected RIBs."; | ||||
| list connected-rib { | ||||
| key "rib-name"; | ||||
| description | ||||
| "List of RIBs to which the routing protocol instance | ||||
| is connected. | ||||
| By default, routes learned by the routing protocol | ||||
| instance are installed in all connected RIBs of the | ||||
| matching address family, and, conversely, all routes | ||||
| from connected RIBs are installed in the routing | ||||
| protocol instance. However, routing protocols may | ||||
| specify other rules."; | ||||
| leaf rib-name { | ||||
| type rib-state-ref; | ||||
| description | ||||
| "Name of an existing RIB."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | container ribs { | |||
| container ribs { | ||||
| description | ||||
| "Container for RIBs."; | ||||
| list rib { | ||||
| key "name"; | ||||
| description | description | |||
| "Each entry represents a RIB identified by the 'name' key. | "Container for RIBs."; | |||
| All routes in a RIB MUST belong to the same address | list rib { | |||
| family. | key "name"; | |||
| min-elements "1"; | ||||
| The server MUST provide a system-controlled default RIB | ||||
| for each supported address family, and MAY provide other | ||||
| system-controlled RIBs. Additional RIBs MAY be created in | ||||
| the configuration."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the RIB."; | ||||
| } | ||||
| uses address-family; | ||||
| container routes { | ||||
| description | description | |||
| "Current content of the RIB."; | "Each entry represents a RIB identified by the 'name' | |||
| key. All routes in a RIB MUST belong to the same address | ||||
| family. | ||||
| list route { | For each routing instance, an implementation SHOULD | |||
| provide one system-controlled default RIB for each | ||||
| supported address family."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | description | |||
| "A RIB route entry. This data node MUST be augmented | "The name of the RIB."; | |||
| with information specific for routes of each address | ||||
| family."; | ||||
| leaf route-preference { | ||||
| type route-preference; | ||||
| description | ||||
| "This route attribute, also known as administrative | ||||
| distance, allows for selecting the preferred route | ||||
| among routes with the same destination prefix. A | ||||
| smaller value means a more preferred route."; | ||||
| } | ||||
| container next-hop { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| uses route-metadata; | ||||
| } | } | |||
| } | uses address-family; | |||
| container recipient-ribs { | leaf default-rib { | |||
| description | if-feature multiple-ribs; | |||
| "Container for recipient RIBs."; | type boolean; | |||
| list recipient-rib { | default "true"; | |||
| key "rib-name"; | ||||
| description | description | |||
| "List of RIBs that receive routes from this RIB."; | "This flag has the value of 'true' if and only if the | |||
| leaf rib-name { | RIB is the default RIB for the given address family. | |||
| type rib-state-ref; | ||||
| A default RIB always receives direct routes. By | ||||
| default it also receives routes from all routing | ||||
| protocols."; | ||||
| } | ||||
| container routes { | ||||
| description | ||||
| "Current content of the RIB."; | ||||
| list route { | ||||
| description | description | |||
| "The name of the recipient RIB."; | "A RIB route entry. This data node MUST be augmented | |||
| with information specific for routes of each address | ||||
| family."; | ||||
| leaf route-preference { | ||||
| type route-preference; | ||||
| description | ||||
| "This route attribute, also known as administrative | ||||
| distance, allows for selecting the preferred route | ||||
| among routes with the same destination prefix. A | ||||
| smaller value means a more preferred route."; | ||||
| } | ||||
| container next-hop { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| uses route-metadata; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* Configuration Data */ | /* Configuration Data */ | |||
| container routing { | container routing { | |||
| description | description | |||
| "Configuration parameters for the routing subsystem."; | "Configuration parameters for the routing subsystem."; | |||
| skipping to change at page 30, line 47 ¶ | skipping to change at page 26, line 12 ¶ | |||
| description | description | |||
| "Configuration of the global router ID. Routing protocols | "Configuration of the global router ID. Routing protocols | |||
| that use router ID can use this parameter or override it | that use router ID can use this parameter or override it | |||
| with another value."; | with another value."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the routing instance."; | "Textual description of the routing instance."; | |||
| } | } | |||
| container default-ribs { | ||||
| if-feature multiple-ribs; | ||||
| description | ||||
| "Configuration of the default RIBs used by the routing | ||||
| instance. | ||||
| The default RIB for an addressed family if by default | ||||
| connected to all routing protocol instances supporting | ||||
| that address family, and always receives direct routes."; | ||||
| list default-rib { | ||||
| must "address-family=/routing/ribs/rib[name=current()/" | ||||
| + "rib-name]/address-family" { | ||||
| error-message "Address family mismatch."; | ||||
| description | ||||
| "The entry's address family MUST match that of the | ||||
| referenced RIB."; | ||||
| } | ||||
| key "address-family"; | ||||
| description | ||||
| "Each list entry configures the default RIB for one | ||||
| address family."; | ||||
| uses address-family; | ||||
| leaf rib-name { | ||||
| type string; | ||||
| mandatory "true"; | ||||
| description | ||||
| "Name of an existing RIB to be used as the default RIB | ||||
| for the given routing instance and address family."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Configuration of the routing instance's interfaces."; | "Assignment of the routing instance's interfaces."; | |||
| list interface { | leaf-list interface { | |||
| key "name"; | type if:interface-ref; | |||
| description | description | |||
| "List of network layer interfaces assigned to the routing | "The name of a configured network layer interface to be | |||
| instance."; | assigned to the routing-instance."; | |||
| leaf name { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "A reference to the name of a configured network layer | ||||
| interface."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container routing-protocols { | container routing-protocols { | |||
| description | description | |||
| "Configuration of routing protocol instances."; | "Configuration of routing protocol instances."; | |||
| list routing-protocol { | list routing-protocol { | |||
| key "type name"; | key "type name"; | |||
| description | description | |||
| "Each entry contains configuration of a routing protocol | "Each entry contains configuration of a routing protocol | |||
| instance."; | instance."; | |||
| skipping to change at page 32, line 44 ¶ | skipping to change at page 27, line 21 ¶ | |||
| } | } | |||
| leaf route-preference { | leaf route-preference { | |||
| type route-preference; | type route-preference; | |||
| description | description | |||
| "The value of route preference (administrative | "The value of route preference (administrative | |||
| distance). | distance). | |||
| The default value depends on the routing protocol | The default value depends on the routing protocol | |||
| type, and may also be implementation-dependent."; | type, and may also be implementation-dependent."; | |||
| } | } | |||
| container connected-ribs { | ||||
| description | ||||
| "Configuration of connected RIBs."; | ||||
| list connected-rib { | ||||
| key "rib-name"; | ||||
| description | ||||
| "Each entry configures a RIB to which the routing | ||||
| protocol instance is connected. | ||||
| If no connected RIB is configured for an address | ||||
| family, the routing protocol is connected to the | ||||
| default RIB for that address family."; | ||||
| leaf rib-name { | ||||
| type rib-ref; | ||||
| must "../../../type != 'rt:direct' or " | ||||
| + "../../../../../default-ribs/ " | ||||
| + "default-rib/rib-name=." { | ||||
| error-message "The 'direct' protocol can be " | ||||
| + "connected only to a default RIB."; | ||||
| description | ||||
| "For the 'direct' pseudo-protocol, the connected | ||||
| RIB must always be a default RIB."; | ||||
| } | ||||
| description | ||||
| "Name of an existing RIB."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container static-routes { | container static-routes { | |||
| when "../type='rt:static'" { | when "../type='rt:static'" { | |||
| description | description | |||
| "This container is only valid for the 'static' | "This container is only valid for the 'static' | |||
| routing protocol."; | routing protocol."; | |||
| } | } | |||
| description | description | |||
| "Configuration of the 'static' pseudo-protocol. | "Configuration of the 'static' pseudo-protocol. | |||
| Address-family-specific modules augment this node with | Address-family-specific modules augment this node with | |||
| their lists of routes."; | their lists of routes."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container ribs { | |||
| container ribs { | ||||
| description | ||||
| "Configuration of RIBs."; | ||||
| list rib { | ||||
| key "name"; | ||||
| description | description | |||
| "Each entry represents a configured RIB identified by the | "Configuration of RIBs."; | |||
| 'name' key. | list rib { | |||
| key "name"; | ||||
| Entries having the same key as a system-controlled entry | ||||
| of the list /routing-state/ribs/rib are used for | ||||
| configuring parameters of that entry. Other entries define | ||||
| additional user-controlled RIBs."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | description | |||
| "The name of the RIB. | "Each entry contains configuration for a RIB identified | |||
| by the 'name' key. | ||||
| For system-controlled entries, the value of this leaf | Entries having the same key as a system-controlled entry | |||
| must be the same as the name of the corresponding entry | of the list /routing-state/routing-instance/ribs/rib are | |||
| in state data. | used for configuring parameters of that entry. Other | |||
| entries define additional user-controlled RIBs."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the RIB. | ||||
| For user-controlled entries, an arbitrary name can be | For system-controlled entries, the value of this leaf | |||
| used."; | must be the same as the name of the corresponding | |||
| } | entry in state data. | |||
| uses address-family; | ||||
| leaf description { | For user-controlled entries, an arbitrary name can be | |||
| type string; | used."; | |||
| description | } | |||
| "Textual description of the RIB."; | uses address-family { | |||
| } | ||||
| container recipient-ribs { | ||||
| if-feature multiple-ribs; | ||||
| description | ||||
| "Configuration of recipient RIBs."; | ||||
| list recipient-rib { | ||||
| must "rib-name != ../../name" { | ||||
| error-message | ||||
| "Source and recipient RIBs are identical."; | ||||
| description | ||||
| "A RIB MUST NOT appear among its recipient RIBs."; | ||||
| } | ||||
| must "/routing/ribs/rib[name=current()/rib-name]/" | ||||
| + "address-family=../../address-family" { | ||||
| error-message "Address family mismatch."; | ||||
| description | ||||
| "Address family of the recipient RIB MUST match that | ||||
| of the source RIB."; | ||||
| } | ||||
| key "rib-name"; | ||||
| description | description | |||
| "Each entry configures a recipient RIB."; | "Address family of the RIB. | |||
| leaf rib-name { | ||||
| type rib-ref; | It is mandatory for user-controlled RIBs. For | |||
| description | system-controlled RIBs it can be omitted, otherwise it | |||
| "The name of the recipient RIB."; | must match the address family of the corresponding | |||
| state entry."; | ||||
| refine "address-family" { | ||||
| mandatory "false"; | ||||
| } | } | |||
| } | } | |||
| leaf description { | ||||
| type string; | ||||
| description | ||||
| "Textual description of the RIB."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC operations */ | /* RPC operations */ | |||
| rpc fib-route { | rpc fib-route { | |||
| description | description | |||
| "Return the active FIB route that a routing-instance uses for | "Return the active FIB route that a routing-instance uses for | |||
| sending packets to a destination address."; | sending packets to a destination address."; | |||
| input { | input { | |||
| leaf routing-instance-name { | leaf routing-instance-name { | |||
| type routing-instance-state-ref; | type routing-instance-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| skipping to change at page 36, line 4 ¶ | skipping to change at page 29, line 33 ¶ | |||
| Address family specific modules MUST augment this list | Address family specific modules MUST augment this list | |||
| with appropriate route contents."; | with appropriate route contents."; | |||
| uses address-family; | uses address-family; | |||
| container next-hop { | container next-hop { | |||
| description | description | |||
| "Route's next-hop attribute."; | "Route's next-hop attribute."; | |||
| uses next-hop-state-content; | uses next-hop-state-content; | |||
| } | } | |||
| uses route-metadata; | uses route-metadata; | |||
| } | } | |||
| } | ||||
| } | ||||
| rpc route-count { | ||||
| description | ||||
| "Return the current number of routes in a RIB."; | ||||
| input { | ||||
| leaf rib-name { | ||||
| type rib-state-ref; | ||||
| mandatory "true"; | ||||
| description | ||||
| "Name of the RIB. | ||||
| If the RIB with name equal to the value of this parameter | ||||
| doesn't exist, then this operation SHALL fail with | ||||
| error-tag 'data-missing' and error-app-tag | ||||
| 'rib-not-found'."; | ||||
| } | ||||
| } | ||||
| output { | ||||
| leaf number-of-routes { | ||||
| type uint64; | ||||
| mandatory "true"; | ||||
| description | ||||
| "Number of routes in 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 | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv4-unicast-routing@2015-02-10.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2015-04-17.yang" | |||
| module ietf-ipv4-unicast-routing { | module ietf-ipv4-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | |||
| prefix "v4ur"; | prefix "v4ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| skipping to change at page 37, line 41 ¶ | skipping to change at page 30, line 42 ¶ | |||
| Copyright (c) 2014 IETF Trust and the persons identified as | Copyright (c) 2014 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| RFC itself for full legal notices."; | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | ||||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | ||||
| revision 2015-02-10 { | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | ||||
| full legal notices."; | ||||
| revision 2015-04-17 { | ||||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv4-unicast { | identity ipv4-unicast { | |||
| base rt:ipv4; | base rt:ipv4; | |||
| description | description | |||
| "This identity represents the IPv4 unicast address family."; | "This identity represents the IPv4 unicast address family."; | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:routing-instance/rt:ribs/rt:rib/" | |||
| + "rt:routes/rt:route" { | ||||
| when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments an IPv4 unicast route."; | "This leaf augments an IPv4 unicast route."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| description | description | |||
| "IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:routing-instance/rt:ribs/rt:rib/" | |||
| + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" | |||
| + "rt:simple-next-hop" { | ||||
| when "../../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "../../../rt:address-family = 'v4ur:ipv4-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments the 'simple-next-hop' case of IPv4 unicast | "This leaf augments the 'simple-next-hop' case of IPv4 unicast | |||
| routes."; | routes."; | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| skipping to change at page 40, line 49 ¶ | skipping to change at page 34, line 11 ¶ | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 9. IPv6 Unicast Routing Management YANG Module | 9. IPv6 Unicast Routing Management YANG Module | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv6-unicast-routing@2015-02-10.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2015-04-17.yang" | |||
| module ietf-ipv6-unicast-routing { | module ietf-ipv6-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | |||
| prefix "v6ur"; | prefix "v6ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| skipping to change at page 42, line 6 ¶ | skipping to change at page 35, line 16 ¶ | |||
| Copyright (c) 2014 IETF Trust and the persons identified as | Copyright (c) 2014 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| RFC itself for full legal notices."; | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | ||||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | ||||
| revision 2015-02-10 { | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | ||||
| full legal notices."; | ||||
| revision 2015-04-17 { | ||||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv6-unicast { | identity ipv6-unicast { | |||
| base rt:ipv6; | base rt:ipv6; | |||
| description | description | |||
| "This identity represents the IPv6 unicast address family."; | "This identity represents the IPv6 unicast address family."; | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | augment "/if:interfaces-state/if:interface/ip:ipv6" { | |||
| + "rt:interface" { | ||||
| description | description | |||
| "IPv6-specific parameters of router interfaces."; | "Augment interface state data with IPv6-specific parameters of | |||
| router interfaces."; | ||||
| container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
| description | description | |||
| "Parameters of IPv6 Router Advertisements."; | "Parameters of IPv6 Router Advertisements."; | |||
| leaf send-advertisements { | leaf send-advertisements { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "A flag indicating whether or not the router sends periodic | "A flag indicating whether or not the router sends periodic | |||
| Router Advertisements and responds to Router | Router Advertisements and responds to Router | |||
| Solicitations."; | Solicitations."; | |||
| } | } | |||
| skipping to change at page 44, line 41 ¶ | skipping to change at page 38, line 9 ¶ | |||
| 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 all | |||
| 1's (0xffffffff) represents infinity."; | 1's (0xffffffff) represents infinity. | |||
| An implementation SHOULD keep this value constant in | ||||
| consecutive advertisements except when it is | ||||
| 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 | ||||
| consecutive advertisements except when it is | ||||
| explicitly changed in configuration."; | ||||
| } | } | |||
| leaf autonomous-flag { | leaf autonomous-flag { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "The value that is placed in the Autonomous Flag field | "The value that is placed in the Autonomous Flag field | |||
| in the Prefix Information option."; | in the Prefix Information option."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:routing-instance/rt:ribs/rt:rib/" | |||
| + "rt:routes/rt:route" { | ||||
| when "../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "../../rt:address-family = 'v6ur:ipv6-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments an IPv6 unicast route."; | "This leaf augments an IPv6 unicast route."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:routing-instance/rt:ribs/rt:rib/" | |||
| + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" | |||
| + "rt:simple-next-hop" { | ||||
| when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments the 'simple-next-hop' case of IPv6 unicast | "This leaf augments the 'simple-next-hop' case of IPv6 unicast | |||
| routes."; | routes."; | |||
| leaf next-hop-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:routing-instance/rt:interfaces/rt:interface" { | augment "/if:interfaces/if:interface/ip:ipv6" { | |||
| when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | ||||
| + "ip:ipv6/ip:enabled='true'" { | ||||
| description | ||||
| "This augment is only valid for router interfaces with | ||||
| enabled IPv6."; | ||||
| } | ||||
| description | description | |||
| "Configuration of IPv6-specific parameters of router | "Augment interface configuration with IPv6-specific parameters | |||
| interfaces."; | of router interfaces."; | |||
| container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
| description | description | |||
| "Configuration of IPv6 Router Advertisements."; | "Configuration of IPv6 Router Advertisements."; | |||
| leaf send-advertisements { | leaf send-advertisements { | |||
| type boolean; | type boolean; | |||
| default "false"; | default "false"; | |||
| description | description | |||
| "A flag indicating whether or not the router sends periodic | "A flag indicating whether or not the router sends periodic | |||
| Router Advertisements and responds to Router | Router Advertisements and responds to Router | |||
| Solicitations."; | Solicitations."; | |||
| skipping to change at page 53, line 25 ¶ | skipping to change at page 47, line 5 ¶ | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number (and remove this note). | actual RFC number (and remove this note). | |||
| This document registers the following namespace URIs in the IETF XML | This document registers the following namespace URIs in the IETF XML | |||
| registry [RFC3688]: | registry [RFC3688]: | |||
| ---------------------------------------------------------- | -------------------------------------------------------------------- | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-routing | URI: urn:ietf:params:xml:ns:yang:ietf-routing | |||
| 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 | This document registers the following YANG modules in the YANG Module | |||
| Names registry [RFC6020]: | Names registry [RFC6020]: | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| name: ietf-routing | name: ietf-routing | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-routing | namespace: urn:ietf:params:xml:ns:yang:ietf-routing | |||
| prefix: rt | prefix: rt | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| name: ietf-ipv4-unicast-routing | name: ietf-ipv4-unicast-routing | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | |||
| prefix: v4ur | prefix: v4ur | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| name: ietf-ipv6-unicast-routing | name: ietf-ipv6-unicast-routing | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing | namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing | |||
| prefix: v6ur | prefix: v6ur | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| ------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| 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 the | model (defined in this document) are designed to be accessed via the | |||
| NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | |||
| transport layer and the mandatory-to-implement secure transport is | transport layer and the mandatory-to-implement secure transport is | |||
| SSH [RFC6242]. The NETCONF access control model [RFC6536] provides | SSH [RFC6242]. The NETCONF access control model [RFC6536] provides | |||
| the means to restrict access for particular NETCONF users to a pre- | the means to restrict access for particular NETCONF users to a pre- | |||
| configured subset of all available NETCONF protocol operations and | configured subset of all available NETCONF protocol operations and | |||
| skipping to change at page 55, line 8 ¶ | skipping to change at page 48, line 34 ¶ | |||
| The vulnerable "config true" subtrees and data nodes are the | The vulnerable "config true" subtrees and data nodes are the | |||
| following: | following: | |||
| /routing/routing-instance/interfaces/interface: This list assigns a | /routing/routing-instance/interfaces/interface: This list assigns a | |||
| network layer interface to a routing instance and may also specify | network layer interface to a routing instance and may also specify | |||
| interface parameters related to routing. | interface parameters related to routing. | |||
| /routing/routing-instance/routing-protocols/routing-protocol: This | /routing/routing-instance/routing-protocols/routing-protocol: This | |||
| list specifies the routing protocols configured on a device. | list specifies the routing protocols configured on a device. | |||
| /routing/ribs/rib: This list specifies the RIBs configured for the | /routing/routing-instance/ribs/rib: This list specifies the RIBs | |||
| device. | configured for the device. | |||
| Unauthorized access to any of these lists can adversely affect the | Unauthorized access to any of these lists can adversely affect the | |||
| routing subsystem of both the local device and the network. This may | routing subsystem of both the local device and the network. This may | |||
| lead to network malfunctions, delivery of packets to inappropriate | lead to network malfunctions, delivery of packets to inappropriate | |||
| destinations and other problems. | destinations and other problems. | |||
| 12. Acknowledgments | 12. Acknowledgments | |||
| The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean | The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean | |||
| Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini, | Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini, | |||
| skipping to change at page 56, line 26 ¶ | skipping to change at page 50, line 8 ¶ | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, June 2011. | |||
| [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Protocol (NETCONF) Access Control Model", RFC 6536, March | Protocol (NETCONF) Access Control Model", RFC 6536, March | |||
| 2012. | 2012. | |||
| 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. | 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 | ||||
| See Section 2.2 for an explanation of the symbols used. Data type of | shown near the right end of the corresponding line. | |||
| every leaf node is shown near the right end of the corresponding | ||||
| line. | ||||
| A.1. Configuration Data | A.1. Configuration Data | |||
| +--rw routing | ||||
| +--rw routing | +--rw routing-instance* [name] | |||
| +--rw routing-instance* [name] | +--rw name string | |||
| | +--rw name string | +--rw type? identityref | |||
| | +--rw type? identityref | +--rw enabled? boolean | |||
| | +--rw enabled? boolean | +--rw router-id? yang:dotted-quad | |||
| | +--rw router-id? yang:dotted-quad | +--rw description? string | |||
| | +--rw description? string | +--rw interfaces | |||
| | +--rw default-ribs {multiple-ribs}? | | +--rw interface* if:interface-ref | |||
| | | +--rw default-rib* [address-family] | +--rw routing-protocols | |||
| | | +--rw address-family identityref | | +--rw routing-protocol* [type name] | |||
| | | +--rw rib-name string | | +--rw type identityref | |||
| | +--rw interfaces | | +--rw name string | |||
| | | +--rw interface* [name] | | +--rw description? string | |||
| | | +--rw name if:interface-ref | | +--rw enabled? boolean | |||
| | | +--rw v6ur:ipv6-router-advertisements | | +--rw route-preference? route-preference | |||
| | | +--rw v6ur:send-advertisements? boolean | | +--rw static-routes | |||
| | | +--rw v6ur:max-rtr-adv-interval? uint16 | | +--rw v6ur:ipv6 | |||
| | | +--rw v6ur:min-rtr-adv-interval? uint16 | | | +--rw v6ur:route* [destination-prefix] | |||
| | | +--rw v6ur:managed-flag? boolean | | | +--rw v6ur:destination-prefix inet:ipv6-prefix | |||
| | | +--rw v6ur:other-config-flag? boolean | | | +--rw v6ur:description? string | |||
| | | +--rw v6ur:link-mtu? uint32 | | | +--rw v6ur:next-hop | |||
| | | +--rw v6ur:reachable-time? uint32 | | | +--rw (next-hop-options) | |||
| | | +--rw v6ur:retrans-timer? uint32 | | | +--:(simple-next-hop) | |||
| | | +--rw v6ur:cur-hop-limit? uint8 | | | | +--rw v6ur:outgoing-interface? | |||
| | | +--rw v6ur:default-lifetime? uint16 | | | +--:(special-next-hop) | |||
| | | +--rw v6ur:prefix-list | | | | +--rw v6ur:special-next-hop? | |||
| | | +--rw v6ur:prefix* [prefix-spec] | | | +--:(next-hop-address) | |||
| | | +--rw v6ur:prefix-spec inet:ipv6-prefix | | | +--rw v6ur:next-hop-address? | |||
| | | +--rw (control-adv-prefixes)? | | +--rw v4ur:ipv4 | |||
| | | +--:(no-advertise) | | +--rw v4ur:route* [destination-prefix] | |||
| | | | +--rw v6ur:no-advertise? empty | | +--rw v4ur:destination-prefix inet:ipv4-prefix | |||
| | | +--:(advertise) | | +--rw v4ur:description? string | |||
| | | +--rw v6ur:valid-lifetime? uint32 | | +--rw v4ur:next-hop | |||
| | | +--rw v6ur:on-link-flag? boolean | | +--rw (next-hop-options) | |||
| | | +--rw v6ur:preferred-lifetime? uint32 | | +--:(simple-next-hop) | |||
| | | +--rw v6ur:autonomous-flag? boolean | | | +--rw v4ur:outgoing-interface? | |||
| | +--rw routing-protocols | | +--:(special-next-hop) | |||
| | +--rw routing-protocol* [type name] | | | +--rw v4ur:special-next-hop? | |||
| | +--rw type identityref | | +--:(next-hop-address) | |||
| | +--rw name string | | +--rw v4ur:next-hop-address? | |||
| | +--rw description? string | +--rw ribs | |||
| | +--rw enabled? boolean | +--rw rib* [name] | |||
| | +--rw route-preference? route-preference | +--rw name string | |||
| | +--rw connected-ribs | +--rw address-family? identityref | |||
| | | +--rw connected-rib* [rib-name] | +--rw description? string | |||
| | | +--rw rib-name rib-ref | ||||
| | +--rw static-routes | ||||
| | +--rw v6ur:ipv6 | ||||
| | | +--rw v6ur:route* [destination-prefix] | ||||
| | | +--rw v6ur:destination-prefix inet:ipv6-prefix | ||||
| | | +--rw v6ur:description? string | ||||
| | | +--rw v6ur:next-hop | ||||
| | | +--rw (next-hop-options) | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--rw v6ur:outgoing-interface? | ||||
| | | +--:(special-next-hop) | ||||
| | | | +--rw v6ur:special-next-hop? enumeration | ||||
| | | +--:(next-hop-address) | ||||
| | | +--rw v6ur:next-hop-address? | ||||
| | +--rw v4ur:ipv4 | ||||
| | +--rw v4ur:route* [destination-prefix] | ||||
| | +--rw v4ur:destination-prefix inet:ipv4-prefix | ||||
| | +--rw v4ur:description? string | ||||
| | +--rw v4ur:next-hop | ||||
| | +--rw (next-hop-options) | ||||
| | +--:(simple-next-hop) | ||||
| | | +--rw v4ur:outgoing-interface? | ||||
| | +--:(special-next-hop) | ||||
| | | +--rw v4ur:special-next-hop? enumeration | ||||
| | +--:(next-hop-address) | ||||
| | +--rw v4ur:next-hop-address? | ||||
| +--rw ribs | ||||
| +--rw rib* [name] | ||||
| +--rw name string | ||||
| +--rw address-family identityref | ||||
| +--rw description? string | ||||
| +--rw recipient-ribs {multiple-ribs}? | ||||
| +--rw recipient-rib* [rib-name] | ||||
| +--rw rib-name rib-ref | ||||
| A.2. State Data | A.2. State Data | |||
| +--ro routing-state | +--ro routing-state | |||
| +--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| | +--ro name string | +--ro name string | |||
| | +--ro type? identityref | +--ro type? identityref | |||
| | +--ro default-ribs | +--ro router-id? yang:dotted-quad | |||
| | | +--ro default-rib* [address-family] | +--ro interfaces | |||
| | | +--ro address-family identityref | | +--ro interface* if:interface-state-ref | |||
| | | +--ro rib-name rib-state-ref | +--ro routing-protocols | |||
| | +--ro interfaces | | +--ro routing-protocol* [type name] | |||
| | | +--ro interface* [name] | | +--ro type identityref | |||
| | | +--ro name if:interface-state-ref | | +--ro name string | |||
| | | +--ro v6ur:ipv6-router-advertisements | | +--ro route-preference route-preference | |||
| | | +--ro v6ur:send-advertisements? boolean | +--ro ribs | |||
| | | +--ro v6ur:max-rtr-adv-interval? uint16 | +--ro rib* [name] | |||
| | | +--ro v6ur:min-rtr-adv-interval? uint16 | +--ro name string | |||
| | | +--ro v6ur:managed-flag? boolean | +--ro address-family identityref | |||
| | | +--ro v6ur:other-config-flag? boolean | +--ro default-rib? boolean {multiple-ribs}? | |||
| | | +--ro v6ur:link-mtu? uint32 | +--ro routes | |||
| | | +--ro v6ur:reachable-time? uint32 | +--ro route* | |||
| | | +--ro v6ur:retrans-timer? uint32 | +--ro route-preference? route-preference | |||
| | | +--ro v6ur:cur-hop-limit? uint8 | +--ro next-hop | |||
| | | +--ro v6ur:default-lifetime? uint16 | | +--ro (next-hop-options) | |||
| | | +--ro v6ur:prefix-list | | +--:(simple-next-hop) | |||
| | | +--ro v6ur:prefix* [prefix-spec] | | | +--ro outgoing-interface? | |||
| | | +--ro v6ur:prefix-spec inet:ipv6-prefix | | | +--ro v6ur:next-hop-address? | |||
| | | +--ro v6ur:valid-lifetime? uint32 | | | +--ro v4ur:next-hop-address? | |||
| | | +--ro v6ur:on-link-flag? boolean | | +--:(special-next-hop) | |||
| | | +--ro v6ur:preferred-lifetime? uint32 | | +--ro special-next-hop? enumeration | |||
| | | +--ro v6ur:autonomous-flag? boolean | +--ro source-protocol identityref | |||
| | +--ro routing-protocols | +--ro active? empty | |||
| | +--ro routing-protocol* [type name] | +--ro last-updated? yang:date-and-time | |||
| | +--ro type identityref | +--ro v6ur:destination-prefix? inet:ipv6-prefix | |||
| | +--ro name string | +--ro v4ur:destination-prefix? inet:ipv4-prefix | |||
| | +--ro route-preference route-preference | ||||
| | +--ro connected-ribs | ||||
| | +--ro connected-rib* [rib-name] | ||||
| | +--ro rib-name rib-state-ref | ||||
| +--ro ribs | ||||
| +--ro rib* [name] | ||||
| +--ro name string | ||||
| +--ro address-family identityref | ||||
| +--ro routes | ||||
| | +--ro route* | ||||
| | +--ro route-preference? route-preference | ||||
| | +--ro next-hop | ||||
| | | +--ro (next-hop-options) | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--ro outgoing-interface? | ||||
| | | | +--ro v6ur:next-hop-address? inet:ipv6-address | ||||
| | | | +--ro v4ur:next-hop-address? inet:ipv4-address | ||||
| | | +--:(special-next-hop) | ||||
| | | +--ro special-next-hop? enumeration | ||||
| | +--ro source-protocol identityref | ||||
| | +--ro active? empty | ||||
| | +--ro last-updated? yang:date-and-time | ||||
| | +--ro v6ur:destination-prefix? inet:ipv6-prefix | ||||
| | +--ro v4ur:destination-prefix? inet:ipv4-prefix | ||||
| +--ro recipient-ribs | ||||
| +--ro recipient-rib* [rib-name] | ||||
| +--ro rib-name rib-state-ref | ||||
| 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 routing tables, are intended only for advanced routers. This | defined routing tables, are intended only for advanced routers. This | |||
| appendix gives basic non-normative guidelines for implementing a bare | appendix gives basic non-normative guidelines for implementing a bare | |||
| minimum of available functions. Such an implementation may be used | minimum of available functions. Such an implementation may be used | |||
| for hosts or very simple routers. | for hosts or very simple routers. | |||
| A minimum implementation will provide a single system-controlled | A minimum implementation will provide a single system-controlled | |||
| routing instance, and will not allow clients to create any user- | routing instance, and will not allow clients to create any user- | |||
| controlled instances. | controlled instances. | |||
| Typically, the feature "multiple-ribs" will not be supported. This | Typically, the feature "multiple-ribs" will not be supported. This | |||
| means that a single system-controlled RIB is available for each | means that a single system-controlled RIB is available for each | |||
| supported address family - IPv4, IPv6 or both. These RIBs must be | supported address family - IPv4, IPv6 or both. These RIBs must be | |||
| the default RIBs, so references to them will also appear as system- | the default RIBs. No user-controlled RIBs are allowed. | |||
| controlled entries of the "default-rib" list in state data. 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 configured | protocol, a minimum implementation should support configuring | |||
| instance(s) of the "static" pseudo-protocol. Even with a single RIB | instance(s) of the "static" pseudo-protocol. | |||
| per address family, it may be occasionally useful to be able to | ||||
| configure multiple "static" instances. For example, a client may | ||||
| want to configure alternative sets of static routes and activate or | ||||
| deactivate them by means of connnecting the default RIB to the | ||||
| corresponding "static" instance. | ||||
| Platforms with severely constrained resources may use deviations for | Platforms with severely constrained resources may use deviations for | |||
| restricting the data model, e.g., limiting the number of "static" | restricting the data model, e.g., limiting the number of "static" | |||
| routing protocol instances. | routing protocol instances. | |||
| Appendix C. Example: Adding a New Routing Protocol | Appendix C. Example: Adding a New Routing Protocol | |||
| This appendix demonstrates how the core routing data model can be | This appendix demonstrates how the core routing data model can be | |||
| extended to support a new routing protocol. The YANG module | extended to support a new routing protocol. The YANG module | |||
| "example-rip" shown below is intended only as an illustration rather | "example-rip" shown below is intended as an illustration rather than | |||
| than a real definition of a data model for the RIP routing protocol. | a real definition of a data model for the RIP routing protocol. For | |||
| For the sake of brevity, this module does not obey all the guidelines | the sake of brevity, this module does not obey all the guidelines | |||
| specified in [RFC6087]. See also Section 5.4.2. | specified in [RFC6087]. See also Section 5.4.2. | |||
| module example-rip { | module example-rip { | |||
| namespace "http://example.com/rip"; | namespace "http://example.com/rip"; | |||
| prefix "rip"; | prefix "rip"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| skipping to change at page 61, line 15 ¶ | skipping to change at page 54, line 15 ¶ | |||
| } | } | |||
| leaf tag { | leaf tag { | |||
| type uint16; | type uint16; | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "This leaf may be used to carry additional info, e.g. AS | "This leaf may be used to carry additional info, e.g. AS | |||
| number."; | number."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:routing-instance/rt:ribs/rt:rib/" | |||
| + "rt:routes/rt:route" { | ||||
| when "rt:source-protocol = 'rip:rip'" { | when "rt:source-protocol = 'rip:rip'" { | |||
| description | description | |||
| "This augment is only valid for a routes whose source | "This augment is only valid for a routes whose source | |||
| protocol is RIP."; | protocol is RIP."; | |||
| } | } | |||
| description | description | |||
| "RIP-specific route attributes."; | "RIP-specific route attributes."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:fib-route/rt:output/rt:route" { | |||
| description | description | |||
| "RIP-specific route attributes in the output of 'active-route' | "RIP-specific route attributes in the output of 'active-route' | |||
| RPC."; | RPC."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
| + "rt:routing-protocol" { | + "rt:routing-protocol" { | |||
| when "rt:type = 'rip:rip'" { | when "rt:type = 'rip:rip'" { | |||
| description | description | |||
| skipping to change at page 62, line 4 ¶ | skipping to change at page 55, line 5 ¶ | |||
| "RIP instance configuration."; | "RIP instance configuration."; | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Per-interface RIP configuration."; | "Per-interface RIP configuration."; | |||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "RIP is enabled on interfaces that have an entry in this | "RIP is enabled on interfaces that have an entry in this | |||
| list, unless 'enabled' is set to 'false' for that | list, unless 'enabled' is set to 'false' for that | |||
| entry."; | entry."; | |||
| leaf name { | leaf name { | |||
| type leafref { | type leafref { | |||
| path "../../../../../../rt:interfaces/rt:interface/" | path "../../../../../../rt:interfaces/rt:interface"; | |||
| + "rt:name"; | ||||
| } | } | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| } | } | |||
| leaf metric { | leaf metric { | |||
| type rip-metric; | type rip-metric; | |||
| default "1"; | default "1"; | |||
| } | } | |||
| skipping to change at page 62, line 50 ¶ | skipping to change at page 55, line 49 ¶ | |||
| o ietf-interfaces [RFC7223], | o ietf-interfaces [RFC7223], | |||
| o ietf-ip [RFC7277], | o ietf-ip [RFC7277], | |||
| o ietf-routing (Section 7), | o ietf-routing (Section 7), | |||
| o ietf-ipv4-unicast-routing (Section 8), | o ietf-ipv4-unicast-routing (Section 8), | |||
| o ietf-ipv6-unicast-routing (Section 9). | o ietf-ipv6-unicast-routing (Section 9). | |||
| We assume a simple network set-up as shown in Figure 4: router "A" | We assume a simple network set-up as shown in Figure 3: router "A" | |||
| uses static default routes with the "ISP" router as the next-hop. | uses static default routes with the "ISP" router as the next-hop. | |||
| IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
| interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
| +-----------------+ | +-----------------+ | |||
| | | | | | | |||
| | Router ISP | | | Router ISP | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| skipping to change at page 63, line 28 ¶ | skipping to change at page 56, line 28 ¶ | |||
| eth0|192.0.2.1 | eth0|192.0.2.1 | |||
| +--------+--------+ | +--------+--------+ | |||
| | | | | | | |||
| | Router A | | | Router A | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| eth1|198.51.100.1 | eth1|198.51.100.1 | |||
| |2001:db8:0:2::1 | |2001:db8:0:2::1 | |||
| | | | | |||
| Figure 4: Example network configuration | Figure 3: Example network configuration | |||
| A reply to the NETCONF <get> message sent by router "A" would then be | A reply to the NETCONF <get> message sent by router "A" would then be | |||
| as follows: | as follows: | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <rpc-reply | <rpc-reply | |||
| message-id="101" | message-id="101" | |||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | |||
| xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | |||
| xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | |||
| xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type" | xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type" | |||
| xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip" | xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip" | |||
| xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> | xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> | |||
| <data> | <data> | |||
| <if:interfaces> | <if:interfaces> | |||
| <if:interface> | <if:interface> | |||
| <if:name>eth0</if:name> | <if:name>eth0</if:name> | |||
| <if:type>ianaift:ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <if:description> | <if:description> | |||
| Uplink to ISP. | Uplink to ISP. | |||
| </if:description> | </if:description> | |||
| <ip:ipv4> | <ip:ipv4> | |||
| <ip:address> | <ip:address> | |||
| <ip:ip>192.0.2.1</ip:ip> | <ip:ip>192.0.2.1</ip:ip> | |||
| <ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
| </ip:address> | </ip:address> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
| </ip:ipv4> | </ip:ipv4> | |||
| <ip:ipv6> | <ip:ipv6> | |||
| <ip:address> | <ip:address> | |||
| <ip:ip>2001:0db8:0:1::1</ip:ip> | <ip:ip>2001:0db8:0:1::1</ip:ip> | |||
| <ip:prefix-length>64</ip:prefix-length> | <ip:prefix-length>64</ip:prefix-length> | |||
| </ip:address> | </ip:address> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:autoconf> | <ip:autoconf> | |||
| <ip:create-global-addresses>false</ip:create-global-addresses> | <ip:create-global-addresses>false</ip:create-global-addresses> | |||
| </ip:autoconf> | </ip:autoconf> | |||
| </ip:ipv6> | </ip:ipv6> | |||
| </if:interface> | </if:interface> | |||
| <if:interface> | <if:interface> | |||
| <if:name>eth1</if:name> | <if:name>eth1</if:name> | |||
| <if:type>ianaift:ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <if:description> | <if:description> | |||
| Interface to the internal network. | Interface to the internal network. | |||
| </if:description> | </if:description> | |||
| <ip:ipv4> | <ip:ipv4> | |||
| <ip:address> | <ip:address> | |||
| <ip:ip>198.51.100.1</ip:ip> | <ip:ip>198.51.100.1</ip:ip> | |||
| <ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
| </ip:address> | </ip:address> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
| </ip:ipv4> | </ip:ipv4> | |||
| <ip:ipv6> | <ip:ipv6> | |||
| <ip:address> | <ip:address> | |||
| <ip:ip>2001:0db8:0:2::1</ip:ip> | <ip:ip>2001:0db8:0:2::1</ip:ip> | |||
| <ip:prefix-length>64</ip:prefix-length> | <ip:prefix-length>64</ip:prefix-length> | |||
| </ip:address> | </ip:address> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:autoconf> | <ip:autoconf> | |||
| <ip:create-global-addresses>false</ip:create-global-addresses> | <ip:create-global-addresses>false</ip:create-global-addresses> | |||
| </ip:autoconf> | </ip:autoconf> | |||
| </ip:ipv6> | </ip:ipv6> | |||
| </if:interface> | </if:interface> | |||
| </if:interfaces> | </if:interfaces> | |||
| <if:interfaces-state> | <if:interfaces-state> | |||
| <if:interface> | <if:interface> | |||
| <if:name>eth0</if:name> | <if:name>eth0</if:name> | |||
| <if:type>ianaift:ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | |||
| <if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
| <if:statistics> | <rt:routing-instance>rtr0</rt:routing-instance> | |||
| <if:discontinuity-time> | <if:statistics> | |||
| 2014-10-24T17:11:27+00:58 | <if:discontinuity-time> | |||
| </if:discontinuity-time> | 2014-10-24T17:11:27+00:58 | |||
| </if:statistics> | </if:discontinuity-time> | |||
| <ip:ipv4> | </if:statistics> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:ipv4> | |||
| <ip:mtu>1500</ip:mtu> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:address> | <ip:mtu>1500</ip:mtu> | |||
| <ip:ip>192.0.2.1</ip:ip> | <ip:address> | |||
| <ip:prefix-length>24</ip:prefix-length> | <ip:ip>192.0.2.1</ip:ip> | |||
| </ip:address> | <ip:prefix-length>24</ip:prefix-length> | |||
| </ip:ipv4> | </ip:address> | |||
| <ip:ipv6> | </ip:ipv4> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:ipv6> | |||
| <ip:mtu>1500</ip:mtu> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:address> | <ip:mtu>1500</ip:mtu> | |||
| <ip:ip>2001:0db8:0:1::1</ip:ip> | <ip:address> | |||
| <ip:prefix-length>64</ip:prefix-length> | <ip:ip>2001:0db8:0:1::1</ip:ip> | |||
| </ip:address> | <ip:prefix-length>64</ip:prefix-length> | |||
| </ip:ipv6> | </ip:address> | |||
| </if:interface> | ||||
| <if:interface> | ||||
| <if:name>eth1</if:name> | ||||
| <if:type>ianaift:ethernetCsmacd</if:type> | ||||
| <if:oper-status>up</if:oper-status> | ||||
| <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | ||||
| <if:statistics> | ||||
| <if:discontinuity-time> | ||||
| 2014-10-24T17:11:27+00:59 | ||||
| </if:discontinuity-time> | ||||
| </if:statistics> | ||||
| <ip:ipv4> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:mtu>1500</ip:mtu> | ||||
| <ip:address> | ||||
| <ip:ip>198.51.100.1</ip:ip> | ||||
| <ip:prefix-length>24</ip:prefix-length> | ||||
| </ip:address> | ||||
| </ip:ipv4> | ||||
| <ip:ipv6> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:mtu>1500</ip:mtu> | ||||
| <ip:address> | ||||
| <ip:ip>2001:0db8:0:2::1</ip:ip> | ||||
| <ip:prefix-length>64</ip:prefix-length> | ||||
| </ip:address> | ||||
| </ip:ipv6> | ||||
| </if:interface> | ||||
| </if:interfaces-state> | ||||
| <rt:routing> | ||||
| <rt:routing-instance> | ||||
| <rt:name>rtr0</rt:name> | ||||
| <rt:description>Router A</rt:description> | ||||
| <rt:interfaces> | ||||
| <rt:interface> | ||||
| <rt:name>eth1</rt:name> | ||||
| <v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | <v6ur:send-advertisements>true</v6ur:send-advertisements> | |||
| <v6ur:prefix-list> | <v6ur:prefix-list> | |||
| <v6ur:prefix> | <v6ur:prefix> | |||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | |||
| </v6ur:prefix> | </v6ur:prefix> | |||
| </v6ur:prefix-list> | </v6ur:prefix-list> | |||
| </v6ur:ipv6-router-advertisements> | </v6ur:ipv6-router-advertisements> | |||
| </rt:interface> | </ip:ipv6> | |||
| </rt:interfaces> | </if:interface> | |||
| <rt:routing-protocols> | <if:interface> | |||
| <rt:routing-protocol> | <if:name>eth1</if:name> | |||
| <rt:type>rt:static</rt:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <rt:name>st0</rt:name> | <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | |||
| <rt:description> | <if:oper-status>up</if:oper-status> | |||
| Static routing is used for the internal network. | <rt:routing-instance>rtr0</rt:routing-instance> | |||
| </rt:description> | <if:statistics> | |||
| <rt:static-routes> | <if:discontinuity-time> | |||
| <v4ur:ipv4> | 2014-10-24T17:11:27+00:59 | |||
| <v4ur:route> | </if:discontinuity-time> | |||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | </if:statistics> | |||
| <v4ur:next-hop> | <ip:ipv4> | |||
| <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | <ip:forwarding>true</ip:forwarding> | |||
| </v4ur:next-hop> | <ip:mtu>1500</ip:mtu> | |||
| </v4ur:route> | <ip:address> | |||
| </v4ur:ipv4> | <ip:ip>198.51.100.1</ip:ip> | |||
| <v6ur:ipv6> | <ip:prefix-length>24</ip:prefix-length> | |||
| <v6ur:route> | </ip:address> | |||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | ||||
| <v6ur:next-hop> | </ip:ipv4> | |||
| <v6ur:next-hop-address>2001:db8:0:1::2</v6ur:next-hop-address> | <ip:ipv6> | |||
| </v6ur:next-hop> | <ip:forwarding>true</ip:forwarding> | |||
| </v6ur:route> | <ip:mtu>1500</ip:mtu> | |||
| </v6ur:ipv6> | <ip:address> | |||
| </rt:static-routes> | <ip:ip>2001:0db8:0:2::1</ip:ip> | |||
| </rt:routing-protocol> | <ip:prefix-length>64</ip:prefix-length> | |||
| </rt:routing-protocols> | </ip:address> | |||
| </rt:routing-instance> | ||||
| </rt:routing> | ||||
| <rt:routing-state> | ||||
| <rt:routing-instance> | ||||
| <rt:name>rtr0</rt:name> | ||||
| <rt:default-ribs> | ||||
| <rt:default-rib> | ||||
| <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | ||||
| <rt:rib-name>ipv4-master</rt:rib-name> | ||||
| </rt:default-rib> | ||||
| <rt:default-rib> | ||||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | ||||
| <rt:rib-name>ipv6-master</rt:rib-name> | ||||
| </rt:default-rib> | ||||
| </rt:default-ribs> | ||||
| <rt:interfaces> | ||||
| <rt:interface> | ||||
| <rt:name>eth0</rt:name> | ||||
| </rt:interface> | ||||
| <rt:interface> | ||||
| <rt:name>eth1</rt:name> | ||||
| <v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | <v6ur:send-advertisements>true</v6ur:send-advertisements> | |||
| <v6ur:prefix-list> | <v6ur:prefix-list> | |||
| <v6ur:prefix> | <v6ur:prefix> | |||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | |||
| </v6ur:prefix> | </v6ur:prefix> | |||
| </v6ur:prefix-list> | </v6ur:prefix-list> | |||
| </v6ur:ipv6-router-advertisements> | </v6ur:ipv6-router-advertisements> | |||
| </rt:interface> | </ip:ipv6> | |||
| </rt:interfaces> | </if:interface> | |||
| <rt:routing-protocols> | </if:interfaces-state> | |||
| <rt:routing-protocol> | <rt:routing> | |||
| <rt:type>rt:static</rt:type> | <rt:routing-instance> | |||
| <rt:name>st0</rt:name> | <rt:name>rtr0</rt:name> | |||
| <rt:route-preference>5</rt:route-preference> | <rt:description>Router A</rt:description> | |||
| </rt:routing-protocol> | <rt:router-id>192.0.2.1</rt:router-id> | |||
| </rt:routing-protocols> | <rt:interfaces> | |||
| </rt:routing-instance> | <rt:interface>eth0</rt:interface> | |||
| <rt:ribs> | <rt:interface>eth1</rt:interface> | |||
| <rt:rib> | </rt:interfaces> | |||
| <rt:name>ipv4-master</rt:name> | <rt:routing-protocols> | |||
| <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | <rt:routing-protocol> | |||
| <rt:routes> | <rt:type>rt:static</rt:type> | |||
| <rt:route> | <rt:name>st0</rt:name> | |||
| <v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | <rt:description> | |||
| <rt:next-hop> | Static routing is used for the internal network. | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | </rt:description> | |||
| </rt:next-hop> | <rt:static-routes> | |||
| <rt:route-preference>0</rt:route-preference> | <v4ur:ipv4> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <v4ur:route> | |||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | <v4ur:destination-prefix> | |||
| </rt:route> | 0.0.0.0/0 | |||
| <rt:route> | </v4ur:destination-prefix> | |||
| <v4ur:destination-prefix>198.51.100.0/24</v4ur:destination-prefix> | <v4ur:next-hop> | |||
| <rt:next-hop> | <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | |||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | </v4ur:next-hop> | |||
| </rt:next-hop> | </v4ur:route> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | </v4ur:ipv4> | |||
| <rt:route-preference>0</rt:route-preference> | <v6ur:ipv6> | |||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | <v6ur:route> | |||
| </rt:route> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
| <rt:route> | <v6ur:next-hop> | |||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | <v6ur:next-hop-address> | |||
| <rt:source-protocol>rt:static</rt:source-protocol> | 2001:db8:0:1::2 | |||
| <rt:route-preference>5</rt:route-preference> | </v6ur:next-hop-address> | |||
| <rt:next-hop> | </v6ur:next-hop> | |||
| <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | </v6ur:route> | |||
| </rt:next-hop> | </v6ur:ipv6> | |||
| <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | </rt:static-routes> | |||
| </rt:route> | </rt:routing-protocol> | |||
| </rt:routes> | </rt:routing-protocols> | |||
| </rt:rib> | </rt:routing-instance> | |||
| <rt:rib> | </rt:routing> | |||
| <rt:name>ipv6-master</rt:name> | <rt:routing-state> | |||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | <rt:routing-instance> | |||
| <rt:routes> | <rt:name>rtr0</rt:name> | |||
| <rt:route> | <rt:interfaces> | |||
| <v6ur:destination-prefix> | <rt:interface>eth0</rt:interface> | |||
| 2001:db8:0:1::/64 | <rt:interface>eth1</rt:interface> | |||
| </v6ur:destination-prefix> | </rt:interfaces> | |||
| <rt:next-hop> | <rt:routing-protocols> | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:routing-protocol> | |||
| </rt:next-hop> | <rt:type>rt:static</rt:type> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <rt:name>st0</rt:name> | |||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:destination-prefix> | ||||
| 2001:db8:0:2::/64 | ||||
| </v6ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <v6ur:next-hop-address>2001:db8:0:1::2</v6ur:next-hop-address> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:static</rt:source-protocol> | ||||
| <rt:route-preference>5</rt:route-preference> | <rt:route-preference>5</rt:route-preference> | |||
| <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | </rt:routing-protocol> | |||
| </rt:route> | </rt:routing-protocols> | |||
| </rt:routes> | <rt:ribs> | |||
| </rt:rib> | <rt:rib> | |||
| </rt:ribs> | <rt:name>ipv4-master</rt:name> | |||
| </rt:routing-state> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
| </data> | <rt:default-rib>true</rt:default-rib> | |||
| </rpc-reply> | <rt:routes> | |||
| <rt:route> | ||||
| <v4ur:destination-prefix> | ||||
| 192.0.2.1/24 | ||||
| </v4ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:destination-prefix> | ||||
| 198.51.100.0/24 | ||||
| </v4ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | ||||
| <rt:source-protocol>rt:static</rt:source-protocol> | ||||
| <rt:route-preference>5</rt:route-preference> | ||||
| <rt:next-hop> | ||||
| <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | ||||
| </rt:next-hop> | ||||
| <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| </rt:routes> | ||||
| </rt:rib> | ||||
| <rt:rib> | ||||
| <rt:name>ipv6-master</rt:name> | ||||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | ||||
| <rt:default-rib>true</rt:default-rib> | ||||
| <rt:routes> | ||||
| <rt:route> | ||||
| <v6ur:destination-prefix> | ||||
| 2001:db8:0:1::/64 | ||||
| </v6ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:destination-prefix> | ||||
| 2001:db8:0:2::/64 | ||||
| </v6ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <v6ur:next-hop-address> | ||||
| 2001:db8:0:1::2 | ||||
| </v6ur:next-hop-address> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:static</rt:source-protocol> | ||||
| <rt:route-preference>5</rt:route-preference> | ||||
| <rt:last-updated>2014-10-24T18:02:45+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| </rt:routes> | ||||
| </rt:rib> | ||||
| </rt:ribs> | ||||
| </rt:routing-instance> | ||||
| </rt:routing-state> | ||||
| </data> | ||||
| </rpc-reply> | ||||
| Appendix E. Change Log | Appendix E. Change Log | |||
| RFC Editor: Remove this section upon publication as an RFC. | RFC Editor: Remove this section upon publication as an RFC. | |||
| E.1. Changes Between Versions -16 and -17 | E.1. 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.2. Changes Between Versions -16 and -17 | ||||
| o Added Acee as a co-author. | o Added Acee as a co-author. | |||
| o Removed all traces of route filters. | o Removed all traces of route filters. | |||
| o Removed numeric IDs of list entries in state data. | o Removed numeric IDs of list entries in state data. | |||
| o Removed all next-hop cases except "simple-next-hop" and "special- | o Removed all next-hop cases except "simple-next-hop" and "special- | |||
| next-hop". | next-hop". | |||
| o Removed feature "multipath-routes". | o Removed feature "multipath-routes". | |||
| o Augmented "ietf-interfaces" module with a leaf-list of leafrefs | o Augmented "ietf-interfaces" module with a leaf-list of leafrefs | |||
| pointing form state data of an interface entry to the routing | pointing form state data of an interface entry to the routing | |||
| instance(s) to which the interface is assigned. | instance(s) to which the interface is assigned. | |||
| E.2. Changes Between Versions -15 and -16 | E.3. Changes Between Versions -15 and -16 | |||
| o Added 'type' as the second key component of 'routing-protocol', | o Added 'type' as the second key component of 'routing-protocol', | |||
| both in configuration and state data. | both in configuration and state data. | |||
| o The restriction of no more than one connected RIB per address | o The restriction of no more than one connected RIB per address | |||
| family was removed. | family was removed. | |||
| o Removed the 'id' key of routes in RIBs. This list has no keys | o Removed the 'id' key of routes in RIBs. This list has no keys | |||
| anymore. | anymore. | |||
| skipping to change at page 70, line 29 ¶ | skipping to change at page 64, line 9 ¶ | |||
| o Added next-hop lists to state data. | o Added next-hop lists to state data. | |||
| o Added two cases for specifying next-hops indirectly - via a new | o Added two cases for specifying next-hops indirectly - via a new | |||
| RIB or a recursive list of next-hops. | RIB or a recursive list of next-hops. | |||
| o Reorganized next-hop in static routes. | o Reorganized next-hop in static routes. | |||
| o Removed all 'if-feature' statements from state data. | o Removed all 'if-feature' statements from state data. | |||
| E.3. Changes Between Versions -14 and -15 | E.4. Changes Between Versions -14 and -15 | |||
| o Removed all defaults from state data. | o Removed all defaults from state data. | |||
| o Removed default from 'cur-hop-limit' in config. | o Removed default from 'cur-hop-limit' in config. | |||
| E.4. Changes Between Versions -13 and -14 | E.5. Changes Between Versions -13 and -14 | |||
| o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | |||
| feature. | feature. | |||
| o Removed default value of 'cur-hop-limit' in state data. | o Removed default value of 'cur-hop-limit' in state data. | |||
| o Moved parts of descriptions and all references on IPv6 RA | o Moved parts of descriptions and all references on IPv6 RA | |||
| parameters from state data to configuration. | parameters from state data to configuration. | |||
| o Added reference to RFC 6536 in the Security section. | o Added reference to RFC 6536 in the Security section. | |||
| E.5. Changes Between Versions -12 and -13 | E.6. Changes Between Versions -12 and -13 | |||
| o Wrote appendix about minimum implementation. | o Wrote appendix about minimum implementation. | |||
| o Remove "when" statement for IPv6 router interface state data - it | o Remove "when" statement for IPv6 router interface state data - it | |||
| was dependent on a config value that may not be present. | was dependent on a config value that may not be present. | |||
| o Extra container for the next-hop list. | o Extra container for the next-hop list. | |||
| o Names rather than numeric ids are used for referring to list | o Names rather than numeric ids are used for referring to list | |||
| entries in state data. | entries in state data. | |||
| skipping to change at page 71, line 25 ¶ | skipping to change at page 65, line 5 ¶ | |||
| o | o | |||
| o Removed "if-feature multiple-ribs;" from connected-ribs. | o Removed "if-feature multiple-ribs;" from connected-ribs. | |||
| o "rib-name" instead of "name" is used as the name of leafref nodes. | o "rib-name" instead of "name" is used as the name of leafref nodes. | |||
| o "next-hop" instead of "nexthop" or "gateway" used throughout, both | o "next-hop" instead of "nexthop" or "gateway" used throughout, both | |||
| in node names and text. | in node names and text. | |||
| E.6. Changes Between Versions -11 and -12 | E.7. Changes Between Versions -11 and -12 | |||
| o Removed feature "advanced-router" and introduced two features | o Removed feature "advanced-router" and introduced two features | |||
| instead: "multiple-ribs" and "multipath-routes". | instead: "multiple-ribs" and "multipath-routes". | |||
| o Unified the keys of config and state versions of "routing- | o Unified the keys of config and state versions of "routing- | |||
| instance" and "rib" lists. | instance" and "rib" lists. | |||
| o Numerical identifiers of state list entries are not keys anymore, | o Numerical identifiers of state list entries are not keys anymore, | |||
| but they are constrained using the "unique" statement. | but they are constrained using the "unique" statement. | |||
| o Updated acknowledgements. | o Updated acknowledgements. | |||
| E.7. Changes Between Versions -10 and -11 | E.8. Changes Between Versions -10 and -11 | |||
| o Migrated address families from IANA enumerations to identities. | o Migrated address families from IANA enumerations to identities. | |||
| o Terminology and node names aligned with the I2RS RIB model: router | o Terminology and node names aligned with the I2RS RIB model: router | |||
| -> routing instance, routing table -> RIB. | -> routing instance, routing table -> RIB. | |||
| o Introduced uint64 keys for state lists: routing-instance, rib, | o Introduced uint64 keys for state lists: routing-instance, rib, | |||
| route, nexthop. | route, nexthop. | |||
| o Described the relationship between system-controlled and user- | o Described the relationship between system-controlled and user- | |||
| skipping to change at page 72, line 13 ¶ | skipping to change at page 65, line 42 ¶ | |||
| router". | router". | |||
| o Made nexthop into a choice in order to allow for nexthop-list | o Made nexthop into a choice in order to allow for nexthop-list | |||
| (I2RS requirement). | (I2RS requirement). | |||
| o Added nexthop-list with entries having priorities (backup) and | o Added nexthop-list with entries having priorities (backup) and | |||
| weights (load balancing). | weights (load balancing). | |||
| o Updated bibliography references. | o Updated bibliography references. | |||
| E.8. Changes Between Versions -09 and -10 | E.9. Changes Between Versions -09 and -10 | |||
| o Added subtree for state data ("/routing-state"). | o Added subtree for state data ("/routing-state"). | |||
| o Terms "system-controlled entry" and "user-controlled entry" | o Terms "system-controlled entry" and "user-controlled entry" | |||
| defined and used. | defined and used. | |||
| o New feature "user-defined-routing-tables". Nodes that are useful | o New feature "user-defined-routing-tables". Nodes that are useful | |||
| only with user-defined routing tables are now conditional. | only with user-defined routing tables are now conditional. | |||
| o Added grouping "router-id". | o Added grouping "router-id". | |||
| o In routing tables, "source-protocol" attribute of routes now | o In routing tables, "source-protocol" attribute of routes now | |||
| reports only protocol type, and its datatype is "identityref". | reports only protocol type, and its datatype is "identityref". | |||
| o Renamed "main-routing-table" to "default-routing-table". | o Renamed "main-routing-table" to "default-routing-table". | |||
| E.9. Changes Between Versions -08 and -09 | E.10. Changes Between Versions -08 and -09 | |||
| o Fixed "must" expresion for "connected-routing-table". | o Fixed "must" expresion for "connected-routing-table". | |||
| o Simplified "must" expression for "main-routing-table". | o Simplified "must" expression for "main-routing-table". | |||
| o Moved per-interface configuration of a new routing protocol under | o Moved per-interface configuration of a new routing protocol under | |||
| 'routing-protocol'. This also affects the 'example-rip' module. | 'routing-protocol'. This also affects the 'example-rip' module. | |||
| E.10. Changes Between Versions -07 and -08 | E.11. Changes Between Versions -07 and -08 | |||
| o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
| E.11. Changes Between Versions -06 and -07 | E.12. Changes Between Versions -06 and -07 | |||
| o The contents of <get-reply> in Appendix D was updated: "eth[01]" | o The contents of <get-reply> in Appendix D was updated: "eth[01]" | |||
| is used as the value of "location", and "forwarding" is on for | is used as the value of "location", and "forwarding" is on for | |||
| both interfaces and both IPv4 and IPv6. | both interfaces and both IPv4 and IPv6. | |||
| o The "must" expression for "main-routing-table" was modified to | o The "must" expression for "main-routing-table" was modified to | |||
| avoid redundant error messages reporting address family mismatch | avoid redundant error messages reporting address family mismatch | |||
| when "name" points to a non-existent routing table. | when "name" points to a non-existent routing table. | |||
| o The default behavior for IPv6 RA prefix advertisements was | o The default behavior for IPv6 RA prefix advertisements was | |||
| clarified. | clarified. | |||
| o Changed type of "rt:router-id" to "ip:dotted-quad". | o Changed type of "rt:router-id" to "ip:dotted-quad". | |||
| o Type of "rt:router-id" changed to "yang:dotted-quad". | o Type of "rt:router-id" changed to "yang:dotted-quad". | |||
| o Fixed missing prefixes in XPath expressions. | o Fixed missing prefixes in XPath expressions. | |||
| E.12. Changes Between Versions -05 and -06 | E.13. Changes Between Versions -05 and -06 | |||
| o Document title changed: "Configuration" was replaced by | o Document title changed: "Configuration" was replaced by | |||
| "Management". | "Management". | |||
| o New typedefs "routing-table-ref" and "route-filter-ref". | o New typedefs "routing-table-ref" and "route-filter-ref". | |||
| o Double slashes "//" were removed from XPath expressions and | o Double slashes "//" were removed from XPath expressions and | |||
| replaced with the single "/". | replaced with the single "/". | |||
| o Removed uniqueness requirement for "router-id". | o Removed uniqueness requirement for "router-id". | |||
| skipping to change at page 73, line 36 ¶ | skipping to change at page 67, line 15 ¶ | |||
| o Complete data tree is now in Appendix A. | o Complete data tree is now in Appendix A. | |||
| o Changed type of "source-protocol" from "leafref" to "string". | o Changed type of "source-protocol" from "leafref" to "string". | |||
| o Clarified the relationship between routing protocol instances and | o Clarified the relationship between routing protocol instances and | |||
| connected routing tables. | connected routing tables. | |||
| o Added a must constraint saying that a routing table connected to | o Added a must constraint saying that a routing table connected to | |||
| the direct pseudo-protocol must not be a main routing table. | the direct pseudo-protocol must not be a main routing table. | |||
| E.13. Changes Between Versions -04 and -05 | E.14. Changes Between Versions -04 and -05 | |||
| o Routing tables are now global, i.e., "routing-tables" is a child | o Routing tables are now global, i.e., "routing-tables" is a child | |||
| of "routing" rather than "router". | of "routing" rather than "router". | |||
| o "must" statement for "static-routes" changed to "when". | o "must" statement for "static-routes" changed to "when". | |||
| o Added "main-routing-tables" containing references to main routing | o Added "main-routing-tables" containing references to main routing | |||
| tables for each address family. | tables for each address family. | |||
| o Removed the defaults for "address-family" and "safi" and made them | o Removed the defaults for "address-family" and "safi" and made them | |||
| skipping to change at page 74, line 24 ¶ | skipping to change at page 68, line 5 ¶ | |||
| o The "direct" pseudo-protocol is always connected to main routing | o The "direct" pseudo-protocol is always connected to main routing | |||
| tables. | tables. | |||
| o Entries in the list of connected routing tables renamed from | o Entries in the list of connected routing tables renamed from | |||
| "routing-table" to "connected-routing-table". | "routing-table" to "connected-routing-table". | |||
| o Added "must" constraint saying that a routing table must not be | o Added "must" constraint saying that a routing table must not be | |||
| its own recipient. | its own recipient. | |||
| E.14. Changes Between Versions -03 and -04 | E.15. Changes Between Versions -03 and -04 | |||
| o Changed "error-tag" for both RPC operations from "missing element" | o Changed "error-tag" for both RPC operations from "missing element" | |||
| to "data-missing". | to "data-missing". | |||
| o Removed the decrementing behavior for advertised IPv6 prefix | o Removed the decrementing behavior for advertised IPv6 prefix | |||
| parameters "valid-lifetime" and "preferred-lifetime". | parameters "valid-lifetime" and "preferred-lifetime". | |||
| o Changed the key of the static route lists from "seqno" to "id" | o Changed the key of the static route lists from "seqno" to "id" | |||
| because the routes needn't be sorted. | because the routes needn't be sorted. | |||
| o Added 'must' constraint saying that "preferred-lifetime" must not | o Added 'must' constraint saying that "preferred-lifetime" must not | |||
| be greater than "valid-lifetime". | be greater than "valid-lifetime". | |||
| E.15. Changes Between Versions -02 and -03 | E.16. Changes Between Versions -02 and -03 | |||
| o Module "iana-afn-safi" moved to I-D "iana-if-type". | o Module "iana-afn-safi" moved to I-D "iana-if-type". | |||
| o Removed forwarding table. | o Removed forwarding table. | |||
| o RPC "get-route" changed to "active-route". Its output is a list | o RPC "get-route" changed to "active-route". Its output is a list | |||
| of routes (for multi-path routing). | of routes (for multi-path routing). | |||
| o New RPC "route-count". | o New RPC "route-count". | |||
| skipping to change at page 75, line 22 ¶ | skipping to change at page 69, line 5 ¶ | |||
| "ietf-ip". | "ietf-ip". | |||
| o Added "router-id" leaf. | o Added "router-id" leaf. | |||
| o Specified the names for IPv4/IPv6 unicast main routing tables. | o Specified the names for IPv4/IPv6 unicast main routing tables. | |||
| o Route parameter "last-modified" changed to "age". | o Route parameter "last-modified" changed to "age". | |||
| o Added container "recipient-routing-tables". | o Added container "recipient-routing-tables". | |||
| E.16. Changes Between Versions -01 and -02 | E.17. Changes Between Versions -01 and -02 | |||
| o Added module "ietf-ipv6-unicast-routing". | o Added module "ietf-ipv6-unicast-routing". | |||
| o The example in Appendix D now uses IP addresses from blocks | o The example in Appendix D now uses IP addresses from blocks | |||
| reserved for documentation. | reserved for documentation. | |||
| o Direct routes appear by default in the forwarding table. | o Direct routes appear by default in the forwarding table. | |||
| o Network layer interfaces must be assigned to a router instance. | o Network layer interfaces must be assigned to a router instance. | |||
| Additional interface configuration may be present. | Additional interface configuration may be present. | |||
| skipping to change at page 75, line 46 ¶ | skipping to change at page 69, line 29 ¶ | |||
| o Additional "must" statements were added. | o Additional "must" statements were added. | |||
| o The "route-content" grouping for IPv4 and IPv6 unicast now | o The "route-content" grouping for IPv4 and IPv6 unicast now | |||
| includes the material from the "ietf-routing" version via "uses | includes the material from the "ietf-routing" version via "uses | |||
| rt:route-content". | rt:route-content". | |||
| o Explanation of symbols in the tree representation of data model | o Explanation of symbols in the tree representation of data model | |||
| hierarchy. | hierarchy. | |||
| E.17. Changes Between Versions -00 and -01 | E.18. Changes Between Versions -00 and -01 | |||
| o AFN/SAFI-independent stuff was moved to the "ietf-routing" module. | o AFN/SAFI-independent stuff was moved to the "ietf-routing" module. | |||
| o Typedefs for AFN and SAFI were placed in a separate "iana-afn- | o Typedefs for AFN and SAFI were placed in a separate "iana-afn- | |||
| safi" module. | safi" module. | |||
| o Names of some data nodes were changed, in particular "routing- | o Names of some data nodes were changed, in particular "routing- | |||
| process" is now "router". | process" is now "router". | |||
| o The restriction of a single AFN/SAFI per router was lifted. | o The restriction of a single AFN/SAFI per router was lifted. | |||
| End of changes. 156 change blocks. | ||||
| 1078 lines changed or deleted | 738 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||