| < draft-ietf-netmod-routing-cfg-12.txt | draft-ietf-netmod-routing-cfg-13.txt > | |||
|---|---|---|---|---|
| NETMOD L. Lhotka | NETMOD L. Lhotka | |||
| Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
| Intended status: Standards Track November 07, 2013 | Intended status: Standards Track January 10, 2014 | |||
| Expires: May 11, 2014 | Expires: July 14, 2014 | |||
| A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
| draft-ietf-netmod-routing-cfg-12 | draft-ietf-netmod-routing-cfg-13 | |||
| Abstract | Abstract | |||
| This document contains a specification of three YANG modules. | This document contains a specification of three YANG modules. | |||
| Together they form the core routing data model which serves as a | Together they form the core routing data model which serves as a | |||
| framework for configuring and managing a routing subsystem. It is | framework for configuring and managing a routing subsystem. It is | |||
| expected that these modules will be augmented by additional YANG | expected that these modules will be augmented by additional YANG | |||
| modules defining data models for individual routing protocols and | modules defining data models for individual routing protocols and | |||
| other related functions. The core routing data model provides common | other related functions. The core routing data model provides common | |||
| building blocks for such extensions - routing instances, routes, | building blocks for such extensions - routing instances, routes, | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on May 11, 2014. | This Internet-Draft will expire on July 14, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 2, line 33 ¶ | skipping to change at page 2, line 33 ¶ | |||
| 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . . 16 | 5.3. Routing Information Base (RIB) . . . . . . . . . . . . . . 16 | |||
| 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . . 17 | 5.3.1. Multiple RIBs per Address Family . . . . . . . . . . . 17 | |||
| 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . . 17 | 5.4. Routing Protocol . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 18 | 5.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 18 | |||
| 5.4.2. Defining New Routing Protocols . . . . . . . . . . . . 20 | 5.4.2. Defining New Routing Protocols . . . . . . . . . . . . 20 | |||
| 5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . . 21 | 5.5. Route Filter . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 22 | 5.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 6. Interactions with Other YANG Modules . . . . . . . . . . . . . 23 | 6. Interactions with Other YANG Modules . . . . . . . . . . . . . 23 | |||
| 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 23 | 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 23 | |||
| 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 23 | 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 25 | 7. Routing Management YANG Module . . . . . . . . . . . . . . . . 25 | |||
| 8. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 47 | 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 47 | |||
| 9. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 54 | 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 54 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 71 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 71 | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 72 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 72 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . . 73 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 73 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . . 73 | 13.2. Informative References . . . . . . . . . . . . . . . . . . 73 | |||
| Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 74 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 74 | |||
| A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 74 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 74 | |||
| A.2. Operational State Data . . . . . . . . . . . . . . . . . . 76 | A.2. Operational State Data . . . . . . . . . . . . . . . . . . 76 | |||
| Appendix B. Example: Adding a New Routing Protocol . . . . . . . 78 | Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 78 | |||
| Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 81 | Appendix C. Example: Adding a New Routing Protocol . . . . . . . 79 | |||
| Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 87 | Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 82 | |||
| D.1. Changes Between Versions -11 and -12 . . . . . . . . . . . 87 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 89 | |||
| D.2. Changes Between Versions -10 and -11 . . . . . . . . . . . 87 | E.1. Changes Between Versions -12 and -13 . . . . . . . . . . . 89 | |||
| D.3. Changes Between Versions -09 and -10 . . . . . . . . . . . 87 | E.2. Changes Between Versions -11 and -12 . . . . . . . . . . . 89 | |||
| D.4. Changes Between Versions -08 and -09 . . . . . . . . . . . 88 | E.3. Changes Between Versions -10 and -11 . . . . . . . . . . . 90 | |||
| D.5. Changes Between Versions -07 and -08 . . . . . . . . . . . 88 | E.4. Changes Between Versions -09 and -10 . . . . . . . . . . . 90 | |||
| D.6. Changes Between Versions -06 and -07 . . . . . . . . . . . 88 | E.5. Changes Between Versions -08 and -09 . . . . . . . . . . . 90 | |||
| D.7. Changes Between Versions -05 and -06 . . . . . . . . . . . 88 | E.6. Changes Between Versions -07 and -08 . . . . . . . . . . . 91 | |||
| D.8. Changes Between Versions -04 and -05 . . . . . . . . . . . 89 | E.7. Changes Between Versions -06 and -07 . . . . . . . . . . . 91 | |||
| D.9. Changes Between Versions -03 and -04 . . . . . . . . . . . 90 | E.8. Changes Between Versions -05 and -06 . . . . . . . . . . . 91 | |||
| D.10. Changes Between Versions -02 and -03 . . . . . . . . . . . 90 | E.9. Changes Between Versions -04 and -05 . . . . . . . . . . . 92 | |||
| D.11. Changes Between Versions -01 and -02 . . . . . . . . . . . 91 | E.10. Changes Between Versions -03 and -04 . . . . . . . . . . . 92 | |||
| D.12. Changes Between Versions -00 and -01 . . . . . . . . . . . 91 | E.11. Changes Between Versions -02 and -03 . . . . . . . . . . . 93 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 92 | E.12. Changes Between Versions -01 and -02 . . . . . . . . . . . 93 | |||
| E.13. Changes Between Versions -00 and -01 . . . . . . . . . . . 94 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 95 | ||||
| 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. | |||
| o Module "ietf-ipv6-unicast-routing" augments the "ietf-routing" | o Module "ietf-ipv6-unicast-routing" augments the "ietf-routing" | |||
| module with additional data specific to IPv6 unicast, including | module with additional data specific to IPv6 unicast, including | |||
| the router configuration variables required by [RFC4861]. | the router configuration variables required by [RFC4861]. | |||
| These modules together define the so-called core routing data model, | These modules together define the so-called core routing data model, | |||
| which is proposed as a basis for the development of data models for | which is proposed as a basis for the development of data models for | |||
| configuration and management of more sophisticated routing systems. | configuration and management of more sophisticated routing systems. | |||
| While these three modules can be directly used for simple IP devices | While these three modules can be directly used for simple IP devices | |||
| with static routing, their main purpose is to provide essential | with static routing (see Appendix B), their main purpose is to | |||
| building blocks for more complicated setups involving multiple | provide essential building blocks for more complicated setups | |||
| routing protocols, multicast routing, additional address families, | involving multiple routing protocols, multicast routing, additional | |||
| and advanced functions such as route filtering or policy routing. To | address families, and advanced functions such as route filtering or | |||
| this end, it is expected that the core routing data model will be | policy routing. To this end, it is expected that the core routing | |||
| augmented by numerous modules developed by other IETF working groups. | data model will be 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 | |||
| skipping to change at page 5, line 48 ¶ | skipping to change at page 5, line 48 ¶ | |||
| o RPC operation | o RPC operation | |||
| 2.1. Glossary of New Terms | 2.1. Glossary of New Terms | |||
| active route: a route that is actually used for sending packets. If | active route: a route that is actually used for sending packets. If | |||
| there are multiple candidate routes with a matching destination | there are multiple candidate routes with a matching destination | |||
| prefix, then it is up to the routing algorithm to select the | prefix, then it is up to the routing algorithm to select the | |||
| active route. | active route. | |||
| core routing data model: YANG data model resulting from the | core routing data model: YANG data model comprising "ietf-routing", | |||
| combination of "ietf-routing", "ietf-ipv4-unicast-routing" and | "ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" | |||
| "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 routes together | routing information base (RIB): An object containing a list of | |||
| with other information. See Section 5.3 for details. | routes together with other information. See Section 5.3 for | |||
| details. | ||||
| system-controlled entry: An entry of a list in operational state | system-controlled entry: An entry of a list in operational state | |||
| data ("config false") that is created by the system independently | data ("config false") that is created by the system independently | |||
| of what has been explicitly configured. See Section 4.1 for | of what has been explicitly configured. See Section 4.1 for | |||
| details. | details. | |||
| user-controlled entry: An entry of a list in operational state data | user-controlled entry: An entry of a list in operational state data | |||
| ("config false") that is created and deleted as a direct | ("config false") that is created and deleted as a direct | |||
| consequence of certain configuration changes. See Section 4.1 for | consequence of certain configuration changes. See Section 4.1 for | |||
| details. | details. | |||
| skipping to change at page 10, line 15 ¶ | skipping to change at page 10, line 15 ¶ | |||
| +--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 default-ribs | |||
| | | +--rw default-rib* [address-family] | | | +--rw default-rib* [address-family] | |||
| | | +--rw address-family | | | +--rw address-family | |||
| | | +--rw name | | | +--rw rib-name | |||
| | +--rw interfaces | | +--rw interfaces | |||
| | | +--rw interface* [name] | | | +--rw interface* [name] | |||
| | | +--rw name | | | +--rw name | |||
| | | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | | ... | | | ... | |||
| | +--rw routing-protocols | | +--rw routing-protocols | |||
| | +--rw routing-protocol* [name] | | +--rw routing-protocol* [name] | |||
| | +--rw name | | +--rw name | |||
| | +--rw description? | | +--rw description? | |||
| | +--rw enabled? | | +--rw enabled? | |||
| skipping to change at page 11, line 8 ¶ | skipping to change at page 11, line 8 ¶ | |||
| +--rw route-filter* [name] | +--rw route-filter* [name] | |||
| +--rw name | +--rw name | |||
| +--rw description? | +--rw description? | |||
| +--rw type | +--rw type | |||
| Figure 1: Configuration data hierarchy. | Figure 1: Configuration data hierarchy. | |||
| +--ro routing-state | +--ro routing-state | |||
| +--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| | +--ro name | | +--ro name | |||
| | +--ro id? | | +--ro id | |||
| | +--ro type? | | +--ro type? | |||
| | +--ro router-id? | | +--ro router-id? | |||
| | +--ro default-ribs | | +--ro default-ribs | |||
| | | +--ro default-rib* [address-family] | | | +--ro default-rib* [address-family] | |||
| | | +--ro address-family | | | +--ro address-family | |||
| | | +--ro rib-id | | | +--ro rib-name | |||
| | +--ro interfaces | | +--ro interfaces | |||
| | | +--ro interface* [name] | | | +--ro interface* [name] | |||
| | | +--ro name | | | +--ro name | |||
| | | +--ro v6ur:ipv6-router-advertisements | | | +--ro v6ur:ipv6-router-advertisements | |||
| | | ... | | | ... | |||
| | +--ro routing-protocols | | +--ro routing-protocols | |||
| | +--ro routing-protocol* [name] | | +--ro routing-protocol* [name] | |||
| | +--ro name | | +--ro name | |||
| | +--ro type | | +--ro type | |||
| | +--ro connected-ribs | | +--ro connected-ribs | |||
| | ... | | ... | |||
| +--ro ribs | +--ro ribs | |||
| | +--ro rib* [name] | | +--ro rib* [name] | |||
| | +--ro name | | +--ro name | |||
| | +--ro id? | | +--ro id | |||
| | +--ro address-family | | +--ro address-family | |||
| | +--ro routes | | +--ro routes | |||
| | | +--ro route* | | | +--ro route* [id] | |||
| | | ... | | | ... | |||
| | +--ro recipient-ribs | | +--ro recipient-ribs | |||
| | +--ro recipient-rib* [rib-id] | | +--ro recipient-rib* [rib-name] | |||
| | ... | | ... | |||
| +--ro route-filters | +--ro route-filters | |||
| +--ro route-filter* [name] | +--ro route-filter* [name] | |||
| +--ro name | +--ro name | |||
| +--ro type | +--ro type | |||
| Figure 2: Operational state data hierarchy. | Figure 2: Operational state data hierarchy. | |||
| As can be seen from Figures 1 and 2, the core routing data model | As can be seen from Figures 1 and 2, the core routing data model | |||
| introduces several generic components of a routing framework: routing | introduces several generic components of a routing framework: routing | |||
| skipping to change at page 13, line 13 ¶ | skipping to change at page 13, line 13 ¶ | |||
| 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 operational state data, i.e., inside the | system-controlled entry in operational state data, i.e., inside the | |||
| "routing-state" container. | "routing-state" container. | |||
| Additional entries may be created in the configuration by the user | Additional entries may be created in the configuration by the user | |||
| via the NETCONF protocol. These are so-called user-controlled | 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 operational state version of the | then this entry also appears in the operational state version of the | |||
| list. | list. | |||
| Both versions of the list (in operational state data and | Corresponding entries in both versions of the list (in operational | |||
| configuration) use the "name" leaf as their key. | state data and 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 | |||
| with the corresponding entry in the operational state list, the key | with the corresponding entry in the operational state list, the key | |||
| of the configuration entry has to be set to the same value as the key | of the configuration entry has to be set to the same value as the key | |||
| of the state entry. | of the state entry. | |||
| An example can be seen in Appendix C: the "/routing-state/ | An example can be seen in Appendix D: the "/routing-state/ | |||
| routing-instance" list has a single system-controlled entry whose | routing-instance" list has a single system-controlled entry whose | |||
| "name" key has the value "rtr0". This entry is configured by the | "name" key has the value "rtr0". This entry is configured by the | |||
| "/routing/routing-instance" entry whose "name" key is also "rtr0". | "/routing/routing-instance" entry whose "name" key is also "rtr0". | |||
| Deleting a user-controlled entry from the configuration list results | Deleting a user-controlled entry from the configuration list results | |||
| in the removal of the corresponding entry in the operational state | in the removal of the corresponding entry in the operational state | |||
| list. In contrast, if a system-controlled entry is deleted from the | list. In contrast, if a system-controlled entry is deleted from the | |||
| configuration list, only the extra configuration specified in that | configuration list, only the extra configuration specified in that | |||
| entry is removed but the corresponding operational state entry | entry is removed but the corresponding operational state entry | |||
| remains in the list. | remains in the list. | |||
| skipping to change at page 13, line 49 ¶ | skipping to change at page 13, line 49 ¶ | |||
| devices, some parts and options of the data model are not needed and | devices, some parts and options of the data model are not needed and | |||
| would represent unnecessary complications for the implementation. | would represent unnecessary complications for the implementation. | |||
| Therefore, the core routing data model makes the advanced | Therefore, the core routing data model makes the advanced | |||
| functionality optional by means of two YANG features: | functionality optional by means of two YANG features: | |||
| o "multiple-ribs" - indicates that the device supports multiple RIBs | o "multiple-ribs" - indicates that the device supports multiple RIBs | |||
| per address family, routing protocols connected to non-default | per address family, routing protocols connected to non-default | |||
| RIBs, and RIBs configured as receivers of routes from other RIBs. | RIBs, and RIBs configured as receivers of routes from other RIBs. | |||
| o "multipath-routes" - indicates that the device supports routes | o "multipath-routes" - indicates that the device supports routes | |||
| with multiple nexthops. | with multiple next-hops. | |||
| See the "ietf-routing" module for details. | See the "ietf-routing" module for details. | |||
| 5. Basic Building Blocks | 5. Basic Building Blocks | |||
| This section describes the essential components of the core routing | This section describes the essential components of the core routing | |||
| data model. | data model. | |||
| 5.1. Routing Instance | 5.1. Routing Instance | |||
| Each routing instance in the core routing data model represents a | Each routing instance in the core routing data model represents a | |||
| logical router. The exact semantics of this term are left to | logical router. The exact semantics of this term are left to | |||
| implementations. For example, routing instances may be completely | implementations. For example, routing instances may be completely | |||
| isolated virtual routers or, alternatively, they may internally share | isolated virtual routers or, alternatively, they may internally share | |||
| certain information. | certain information. | |||
| A routing instance together with its operational status is | A routing instance together with its operational state is represented | |||
| represented as an entry of the list "/routing-state/ | as an entry of the list "/routing-state/routing-instance", and | |||
| routing-instance", and identified by a unique numeric identifier. | identified by a unique name. Configuration of that router instance | |||
| Configuration of that router instance appears as entry of the list | appears as an entry of the list "/routing/routing-instance". | |||
| "/routing/routing-instance" whose key is a routing instance name | ||||
| selected by the client. | ||||
| An implementation MAY support multiple types of logical routers | An implementation MAY support multiple types of logical routers | |||
| simultaneously. Instances of all routing instance types are | simultaneously. Instances of all routing instance types are | |||
| organized as entries of the same flat "routing-instance" list. In | organized as entries of the same flat "routing-instance" list. In | |||
| order to discriminate routing instances belonging to different types, | order to discriminate routing instances belonging to different types, | |||
| the "type" leaf is defined as a child of the "routing-instance" node. | the "type" leaf is defined as a child of the "routing-instance" node. | |||
| An implementation MAY create one or more system-controlled routing | An implementation MAY create one or more system-controlled routing | |||
| instances, and MAY also pose restrictions on allowed routing instance | instances, and MAY also pose restrictions on allowed routing instance | |||
| types and on the number of supported instances for each type. For | types and on the number of supported instances for each type. For | |||
| skipping to change at page 15, line 51 ¶ | skipping to change at page 15, line 48 ¶ | |||
| * valid-lifetime, | * valid-lifetime, | |||
| * on-link-flag, | * on-link-flag, | |||
| * preferred-lifetime, | * preferred-lifetime, | |||
| * autonomous-flag. | * autonomous-flag. | |||
| The definitions and descriptions of the above parameters can be found | The definitions and descriptions of the above parameters can be found | |||
| in the text of the module "ietf-ipv6-unicast-routing" (Section 9). | 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 [YANG-IP] (leaf "ip: | implemented in the "ietf-ip" module [YANG-IP] (leaf "ip: | |||
| forwarding"). | forwarding"). | |||
| 2. The original specification [RFC4861] allows the implementations | 2. The original specification [RFC4861] allows the implementations | |||
| to decide whether the "valid-lifetime" and "preferred-lifetime" | to decide whether the "valid-lifetime" and "preferred-lifetime" | |||
| parameters remain the same in consecutive advertisements, or | parameters remain the same in consecutive advertisements, or | |||
| skipping to change at page 16, line 31 ¶ | skipping to change at page 16, line 29 ¶ | |||
| 5.2. Route | 5.2. Route | |||
| Routes are basic elements of information in a routing system. The | Routes are basic elements of information in a routing system. The | |||
| core routing data model defines only the following minimal set of | core routing data model defines only the following minimal set of | |||
| route attributes: | route attributes: | |||
| o destination prefix: IP prefix specifying the set of destination | o destination prefix: IP prefix specifying the set of destination | |||
| addresses for which the route may be used. This attribute is | addresses for which the route may be used. This attribute is | |||
| mandatory. | mandatory. | |||
| o next hop or action: outgoing interface, IP address of one or more | o next-hop or action: outgoing interface, IP address of one or more | |||
| adjacent routers to which a packet should be forwarded, or a | adjacent routers to which a packet should be forwarded, or a | |||
| special action such as discarding the packet. | special action such as discarding the packet. | |||
| The above list of route attributes suffices for a simple static | The above list of route attributes suffices for a simple static | |||
| routing configuration. It is expected that future modules defining | routing configuration. It is expected that future modules defining | |||
| routing protocols will add other route attributes such as metrics or | routing protocols will add other route attributes such as metrics or | |||
| preferences. | preferences. | |||
| Routes and their attributes are used both in configuration data, for | Routes and their attributes are used both in configuration data, for | |||
| example as manually configured static routes, and in operational | example as manually configured static routes, and in operational | |||
| skipping to change at page 17, line 23 ¶ | skipping to change at page 17, line 20 ¶ | |||
| represented as entries of the list "/routing-state/ribs/rib". The | represented as entries of the list "/routing-state/ribs/rib". The | |||
| contents of RIBs are controlled and manipulated by routing protocol | contents of RIBs are controlled and manipulated by routing protocol | |||
| operations which may result in route additions, removals and | operations which may result in route additions, removals and | |||
| modifications. This also includes manipulations via the "static" | modifications. This also includes manipulations via the "static" | |||
| and/or "direct" pseudo-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 | RIBs are global, which means that a RIB may be used by any or all | |||
| routing instances. However, an implementation MAY specify rules and | routing instances. However, an implementation MAY specify rules and | |||
| restrictions for sharing RIBs among routing instances. | restrictions for sharing RIBs among routing instances. | |||
| Each routing instance must have, for every supported address family, | Each routing instance has, for every supported address family, one | |||
| one RIB selected as the so-called default RIB. This selection is | RIB selected as the so-called default RIB. This selection is | |||
| recorded in the list "default-rib". The role of default RIBs is | recorded in the list "default-rib". The role of default RIBs is | |||
| explained in 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 a default RIB (via a | supported address family, and declare it as the default RIB (via a | |||
| system-controlled entry of the "default-rib" list). | system-controlled entry of the "default-rib" list). | |||
| 5.3.1. Multiple RIBs per Address Family | 5.3.1. Multiple RIBs per Address Family | |||
| More complex router implementations advertising the "multiple-ribs" | More complex router implementations advertising the "multiple-ribs" | |||
| feature support multiple RIBs per address family that can be used for | feature support multiple RIBs per address family that can be used for | |||
| policy routing and other purposes. Every RIB can then serve as a | policy routing and other purposes. Every RIB can then serve as a | |||
| source of routes for other RIBs of the same address family. To | source of routes for other RIBs of the same address family. To | |||
| achieve this, one or more recipient RIBs may be specified in the | achieve this, one or more recipient RIBs may be specified in the | |||
| configuration of the source RIB. Optionally, a route filter may be | configuration of the source RIB. Optionally, a route filter may be | |||
| skipping to change at page 18, line 48 ¶ | skipping to change at page 18, line 46 ¶ | |||
| The core routing data model defines two special routing protocol | The core routing data model defines two special routing protocol | |||
| types - "direct" and "static". Both are in fact pseudo-protocols, | types - "direct" and "static". Both are in fact pseudo-protocols, | |||
| which means that they are confined to the local device and do not | which means that they are confined to the local device and do not | |||
| exchange any routing information with neighboring routers. Routes | exchange any routing information with neighboring routers. Routes | |||
| from both "direct" and "static" protocol instances are passed to the | from both "direct" and "static" protocol instances are passed to the | |||
| connected RIB (subject to route filters, if any), but an exchange in | connected RIB (subject to route filters, if any), but an exchange in | |||
| the opposite direction is not allowed. | 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. The name of this instance MUST also | "direct" pseudo-protocol type. It is the source of direct routes for | |||
| be "direct". It is the source of direct routes for all configured | all configured address families. Direct routes are normally supplied | |||
| address families. Direct routes are normally supplied by the | by the operating system kernel, based on the configuration of network | |||
| operating system kernel, based on the configuration of network | ||||
| interface addresses, see Section 6.2. The "direct" pseudo-protocol | interface addresses, see Section 6.2. The "direct" pseudo-protocol | |||
| MUST always be connected to the default RIBs of all supported address | MUST always be connected to the default RIBs of all supported address | |||
| families. Unlike other routing protocol types, this connection | families. Unlike other routing protocol types, this connection | |||
| cannot be changed in the configuration. Direct routes MAY be | cannot be changed in the configuration. Direct routes MAY be | |||
| filtered before they appear in the default RIB. | filtered before they appear in the default RIB. | |||
| A pseudo-protocol of the type "static" allows for specifying routes | A pseudo-protocol of the type "static" allows for specifying routes | |||
| manually. It MAY be configured in zero or multiple instances, | manually. It MAY be configured in zero or multiple instances, | |||
| although a typical configuration will have exactly one instance per | although a typical configuration will have exactly one instance per | |||
| routing instance. | routing instance. | |||
| Static routes are configured within the "static-routes" container, | Static routes are configured within the "static-routes" container, | |||
| see Figure 4. | see Figure 4. | |||
| +--rw static-routes | +--rw static-routes | |||
| +--rw v4ur:ipv4 | +--rw v4ur:ipv4 | |||
| | +--rw v4ur:route* [id] | | +--rw v4ur:route* [id] | |||
| | +--rw v4ur:id | | +--rw v4ur:id | |||
| | +--rw v4ur:description? | | +--rw v4ur:description? | |||
| | +--rw v4ur:destination-prefix | | +--rw v4ur:destination-prefix | |||
| | +--rw (nexthop-options) | | +--rw (next-hop-options) | |||
| | +--:(special-nexthop) | | +--:(special-next-hop) | |||
| | | +--rw v4ur:special-nexthop? | | | +--rw v4ur:special-next-hop? | |||
| | +--:(simple-nexthop) | | +--:(simple-next-hop) | |||
| | | +--rw v4ur:gateway? | | | +--rw v4ur:next-hop? | |||
| | | +--rw v4ur:outgoing-interface? | | | +--rw v4ur:outgoing-interface? | |||
| | +--:(nexthop-list) {rt:multipath-routes}? | | +--:(next-hop-list) {rt:multipath-routes}? | |||
| | +--rw v4ur:nexthop* [id] | | +--rw v4ur:next-hop-list | |||
| | +--rw v4ur:id | | +--rw v4ur:next-hop* [id] | |||
| | +--rw v4ur:address? | | +--rw v4ur:id | |||
| | +--rw v4ur:outgoing-interface? | | +--rw v4ur:address? | |||
| | +--rw v4ur:priority? | | +--rw v4ur:outgoing-interface? | |||
| | +--rw v4ur:weight? | | +--rw v4ur:priority? | |||
| | +--rw v4ur:weight? | ||||
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6 | |||
| +--rw v6ur:route* [id] | +--rw v6ur:route* [id] | |||
| +--rw v6ur:id | +--rw v6ur:id | |||
| +--rw v6ur:description? | +--rw v6ur:description? | |||
| +--rw v6ur:destination-prefix | +--rw v6ur:destination-prefix | |||
| +--rw (nexthop-options) | +--rw (next-hop-options) | |||
| +--:(special-nexthop) | +--:(special-next-hop) | |||
| | +--rw v6ur:special-nexthop? | | +--rw v6ur:special-next-hop? | |||
| +--:(simple-nexthop) | +--:(simple-next-hop) | |||
| | +--rw v6ur:gateway? | | +--rw v6ur:next-hop? | |||
| | +--rw v6ur:outgoing-interface? | | +--rw v6ur:outgoing-interface? | |||
| +--:(nexthop-list) {rt:multipath-routes}? | +--:(next-hop-list) {rt:multipath-routes}? | |||
| +--rw v6ur:nexthop* [id] | +--rw v6ur:next-hop-list | |||
| +--rw v6ur:id | +--rw v6ur:next-hop* [id] | |||
| +--rw v6ur:address? | +--rw v6ur:id | |||
| +--rw v6ur:outgoing-interface? | +--rw v6ur:address? | |||
| +--rw v6ur:priority? | +--rw v6ur:outgoing-interface? | |||
| +--rw v6ur:weight? | +--rw v6ur:priority? | |||
| +--rw v6ur:weight? | ||||
| Figure 4: Structure of "static-routes" subtree. | Figure 4: Structure of "static-routes" subtree. | |||
| 5.4.2. Defining New Routing Protocols | 5.4.2. Defining New Routing Protocols | |||
| It is expected that future YANG modules will create data models for | It is expected that future YANG modules will create data models for | |||
| additional routing protocol types. Such a new module has to define | additional routing protocol types. Such a new module has to define | |||
| the protocol-specific configuration and state data, and it has to fit | the protocol-specific configuration and state data, and it has to fit | |||
| it into the core routing framework in the following way: | it into the core routing framework in the following way: | |||
| skipping to change at page 21, line 39 ¶ | skipping to change at page 21, line 39 ¶ | |||
| in the list of routing instance interfaces (rt:interface). | in the list of routing instance interfaces (rt:interface). | |||
| By using the "when" statement, the augmented configuration parameters | By using the "when" statement, the augmented configuration parameters | |||
| and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
| conditional and valid only if the value of "rt:type" or "rt:source- | conditional and valid only if the value of "rt:type" or "rt:source- | |||
| protocol" is equal to the new protocol's identity. It is also | protocol" is equal to the new protocol's identity. It is also | |||
| RECOMMENDED that protocol-specific data nodes be encapsulated in | RECOMMENDED that protocol-specific data nodes be encapsulated in | |||
| appropriately named containers. | appropriately named containers. | |||
| The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
| RIP routing protocol in Appendix B. | RIP routing protocol in Appendix C. | |||
| 5.5. Route Filter | 5.5. Route Filter | |||
| The core routing data model provides a skeleton for defining route | The core routing data model provides a skeleton for defining route | |||
| filters that can be used to restrict the set of routes being | filters that can be used to restrict the set of routes being | |||
| exchanged between a routing protocol instance and a connected RIB, or | exchanged between a routing protocol instance and a connected RIB, or | |||
| between a source and a recipient RIB. Route filters may also | between a source and a recipient RIB. Route filters may also | |||
| manipulate routes, i.e., add, delete, or modify their attributes. | manipulate routes, i.e., add, delete, or modify their attributes. | |||
| Route filters are global, which means that a configured route filter | Route filters are global, which means that a configured route filter | |||
| skipping to change at page 22, line 26 ¶ | skipping to change at page 22, line 26 ¶ | |||
| will be developed separately. | will be developed separately. | |||
| Each route filter is identified by a unique name. Its type MUST be | Each route filter is identified by a unique name. Its type MUST be | |||
| specified by the "type" identity reference - this opens the space for | specified by the "type" identity reference - this opens the space for | |||
| multiple route filtering framework implementations. | multiple route filtering framework implementations. | |||
| 5.6. RPC Operations | 5.6. RPC Operations | |||
| The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines two RPC operations: | |||
| o active-route: query the routing system for the active route that | o active-route: query a routing instance for the active route that | |||
| is currently used for sending datagrams to a destination host | is currently used for sending datagrams to a destination host | |||
| whose address is passed as an input parameter. | whose address is passed as an input parameter. | |||
| o route-count: retrieve the total number of entries in a RIB. | o route-count: retrieve the total number of entries in a RIB. | |||
| 6. Interactions with Other YANG Modules | 6. Interactions with Other YANG Modules | |||
| The semantics of the core routing data model also depend on several | The semantics of the core routing data model also depend on several | |||
| configuration parameters that are defined in other YANG modules. | configuration parameters that are defined in other YANG modules. | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at page 25, line 5 ¶ | |||
| IPv6 routing functions, such as routing protocols. | IPv6 routing functions, such as routing protocols. | |||
| In addition, the "ietf-ip" module allows for configuring IPv4 and | In addition, the "ietf-ip" module allows for configuring IPv4 and | |||
| IPv6 addresses and network prefixes or masks on network layer | IPv6 addresses and network prefixes or masks on network layer | |||
| interfaces. Configuration of these parameters on an enabled | interfaces. Configuration of these parameters on an enabled | |||
| interface MUST result in an immediate creation of the corresponding | interface MUST result in an immediate creation of the corresponding | |||
| direct route. The destination prefix of this route is set according | direct route. The destination prefix of this route is set according | |||
| to the configured IP address and network prefix/mask, and the | to the configured IP address and network prefix/mask, and the | |||
| interface is set as the outgoing interface for that route. | interface is set as the outgoing interface for that route. | |||
| 7. Routing YANG Module | 7. Routing Management YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-routing@2013-11-07.yang" | <CODE BEGINS> file "ietf-routing@2014-01-10.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 | |||
| "WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| WG Chair: David Kessens | WG Chair: David Kessens | |||
| <mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz>"; | |||
| "; | ||||
| description | description | |||
| "This YANG module defines essential components for the management | "This YANG module defines essential components for the management | |||
| of a routing subsystem. | of a routing subsystem. | |||
| Copyright (c) 2013 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices."; | |||
| "; | ||||
| revision 2013-11-07 { | revision 2014-01-10 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Features */ | /* Features */ | |||
| feature multiple-ribs { | feature multiple-ribs { | |||
| description | description | |||
| "This feature indicates that the device supports multiple RIBS | "This feature indicates that the device supports multiple RIBS | |||
| per address family, and the framework for passing routes | per address family, and the framework for passing routes | |||
| between RIBs, or between routing protocols and RIBs. | between RIBs. | |||
| Devices that do not support this feature MUST provide exactly | Devices that do not support this feature MUST provide exactly | |||
| one system-controlled RIB per supported address family. These | one system-controlled RIB per supported address family. These | |||
| RIBs then appear as entries of the list | RIBs then appear as entries of the list | |||
| /routing-state/ribs/rib. | /routing-state/ribs/rib."; | |||
| "; | ||||
| } | } | |||
| feature multipath-routes { | feature multipath-routes { | |||
| description | description | |||
| "This feature indicates that the device supports multipath | "This feature indicates that the device supports multipath | |||
| routes that have a list of nexthops."; | routes that have a list of next-hops."; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity address-family { | identity address-family { | |||
| description | description | |||
| "Base identity from which identities describing address | "Base identity from which identities describing address | |||
| families are derived."; | families are derived."; | |||
| } | } | |||
| skipping to change at page 27, line 6 ¶ | skipping to change at page 27, line 4 ¶ | |||
| description | description | |||
| "Base identity from which identities describing address | "Base identity from which identities describing address | |||
| families are derived."; | families are derived."; | |||
| } | } | |||
| identity ipv4 { | identity ipv4 { | |||
| base address-family; | base address-family; | |||
| description | description | |||
| "This identity represents IPv4 address family."; | "This identity represents IPv4 address family."; | |||
| } | } | |||
| identity ipv6 { | identity ipv6 { | |||
| base address-family; | base address-family; | |||
| description | description | |||
| "This identity represents IPv6 address family."; | "This identity represents IPv6 address family."; | |||
| } | } | |||
| identity routing-instance-type { | identity routing-instance-type { | |||
| description | description | |||
| "Base identity from which identities describing routing | "Base identity from which identities describing routing | |||
| instance types are derived. | instance types are derived. | |||
| It is primarily intended for discriminating among different | It is primarily intended for discriminating among different | |||
| types of logical routers or router virtualization. | types of logical routers or router virtualization."; | |||
| "; | ||||
| } | } | |||
| identity standard-routing-instance { | identity standard-routing-instance { | |||
| base routing-instance-type; | base routing-instance-type; | |||
| description | description | |||
| "This identity represents a default routing instance."; | "This identity represents a default routing instance."; | |||
| } | } | |||
| identity routing-protocol { | identity routing-protocol { | |||
| description | description | |||
| skipping to change at page 28, line 29 ¶ | skipping to change at page 28, line 26 ¶ | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:routing-instance/rt:name"; | path "/rt:routing/rt:routing-instance/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a routing instance | "This type is used for leafs that reference a routing instance | |||
| configuration."; | configuration."; | |||
| } | } | |||
| typedef routing-instance-state-ref { | typedef routing-instance-state-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing-state/rt:routing-instance/rt:id"; | 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 { | typedef rib-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:ribs/rt:rib/rt:name"; | path "/rt:routing/rt:ribs/rt:rib/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a RIB | "This type is used for leafs that reference a RIB | |||
| configuration."; | configuration."; | |||
| } | } | |||
| typedef rib-state-ref { | typedef rib-state-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing-state/rt:ribs/rt:rib/rt:id"; | path "/rt:routing-state/rt:ribs/rt:rib/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a RIB in state | "This type is used for leafs that reference a RIB in state | |||
| data."; | data."; | |||
| } | } | |||
| typedef route-filter-ref { | typedef route-filter-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a route filter | "This type is used for leafs that reference a route filter | |||
| configuration."; | configuration."; | |||
| } | } | |||
| skipping to change at page 29, line 44 ¶ | skipping to change at page 29, line 40 ¶ | |||
| base address-family; | base address-family; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Address family."; | "Address family."; | |||
| } | } | |||
| } | } | |||
| grouping state-entry-id { | grouping state-entry-id { | |||
| description | description | |||
| "This grouping defines a unique identifier of entries in | "This grouping defines a unique identifier for entries in | |||
| several operational state lists."; | several operational state lists."; | |||
| leaf id { | leaf id { | |||
| type uint64 { | type uint64; | |||
| range "1..max"; | ||||
| } | ||||
| description | description | |||
| "Unique numerical identifier of a list entry in operational | "Unique numerical identifier of a list entry in operational | |||
| state."; | state. It may be used by protocols or tools that inspect | |||
| and/or manipulate operational state data and prefer | ||||
| fixed-size integers as list entry handles. | ||||
| These identifiers are always ephemeral, i.e., they may | ||||
| change after a reboot."; | ||||
| } | } | |||
| } | } | |||
| grouping router-id { | grouping router-id { | |||
| description | description | |||
| "This grouping provides the definition of router ID."; | "This grouping provides the definition of router ID."; | |||
| leaf router-id { | leaf router-id { | |||
| type yang:dotted-quad; | type yang:dotted-quad; | |||
| description | description | |||
| "Router ID - 32-bit number in the form of a dotted quad."; | "Router ID - 32-bit number in the form of a dotted quad. Some | |||
| protocols use this parameter for identifying a router to its | ||||
| neighbors."; | ||||
| } | } | |||
| } | } | |||
| grouping outgoing-interface { | grouping outgoing-interface { | |||
| description | description | |||
| "This grouping defines the outgoing interface for use in | "This grouping defines the outgoing interface for use in | |||
| nexthops."; | next-hops."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type leafref { | type leafref { | |||
| path "/routing-state/routing-instance/interfaces/interface/" | path "/routing-state/routing-instance/interfaces/interface/" | |||
| + "name"; | + "name"; | |||
| } | } | |||
| description | description | |||
| "Name of the outgoing interface."; | "Name of the outgoing interface."; | |||
| } | } | |||
| } | } | |||
| grouping special-nexthop { | grouping special-next-hop { | |||
| description | description | |||
| "This grouping provides the leaf for specifying special nexthop | "This grouping provides the leaf for specifying special | |||
| options."; | next-hop options."; | |||
| leaf special-nexthop { | leaf special-next-hop { | |||
| type enumeration { | type enumeration { | |||
| enum blackhole { | enum blackhole { | |||
| description | description | |||
| "Silently discard the packet."; | "Silently discard the packet."; | |||
| } | } | |||
| enum unreachable { | enum unreachable { | |||
| description | description | |||
| "Discard the packet and notify the sender with an error | "Discard the packet and notify the sender with an error | |||
| message indicating that the destination host is | message indicating that the destination host is | |||
| unreachable."; | unreachable."; | |||
| skipping to change at page 31, line 4 ¶ | skipping to change at page 31, line 6 ¶ | |||
| 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 network | "The packet will be received by the local network | |||
| device."; | device."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Special nexthop options."; | "Special next-hop options."; | |||
| } | } | |||
| } | } | |||
| grouping nexthop-classifiers { | grouping next-hop-classifiers { | |||
| description | description | |||
| "This grouping provides two nexthop classifiers."; | "This grouping provides two next-hop classifiers."; | |||
| leaf priority { | leaf priority { | |||
| type enumeration { | type enumeration { | |||
| enum primary { | enum primary { | |||
| value "1"; | value "1"; | |||
| description | description | |||
| "Primary nexthop."; | "Primary next-hop."; | |||
| } | } | |||
| enum backup { | enum backup { | |||
| value "2"; | value "2"; | |||
| description | description | |||
| "Backup nexthop."; | "Backup next-hop."; | |||
| } | } | |||
| } | } | |||
| default "primary"; | default "primary"; | |||
| description | description | |||
| "Simple priority for distinguishing between primary and | "Simple priority for distinguishing between primary and | |||
| backup nexthops. | backup next-hops. | |||
| Backup nexthops are used if and only if no primary nexthops | Backup next-hops are used if and only if no primary | |||
| are reachable. | next-hops are reachable."; | |||
| "; | ||||
| } | } | |||
| leaf weight { | leaf weight { | |||
| type uint8; | type uint8; | |||
| must ". = 0 or not(../../nexthop/weight = 0)" { | must ". = 0 or not(../../next-hop/weight = 0)" { | |||
| error-message "Illegal combination of zero and non-zero " | error-message "Illegal combination of zero and non-zero " | |||
| + "nexthop weights."; | + "next-hop weights."; | |||
| description | description | |||
| "Nexthop weights must be either all zero (equal | "Next-hop weights must be either all zero (equal | |||
| load-balancing) or all non-zero."; | load-balancing) or all non-zero."; | |||
| } | } | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "This parameter specifies the weight of the nexthop for load | "This parameter specifies the weight of the next-hop for load | |||
| balancing. The number specifies the relative fraction of the | balancing. The number specifies the relative fraction of the | |||
| traffic that will use the corresponding nexthop. | traffic that will use the corresponding next-hop. | |||
| The default value of 0 represents equal load-balancing. | The default value of 0 represents equal load-balancing. | |||
| If both primary and backup nexthops are present, then the | If both primary and backup next-hops are present, then the | |||
| weights for each priority level are used separately. | weights for each priority level are used separately."; | |||
| "; | ||||
| } | } | |||
| } | } | |||
| grouping nexthop-content { | grouping next-hop-content { | |||
| description | description | |||
| "Generic parameters of nexthops in routes."; | "Generic parameters of next-hops in routes."; | |||
| choice nexthop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for expressing the nexthop in routes."; | "Options for expressing the next-hop in routes."; | |||
| case special-nexthop { | case special-next-hop { | |||
| uses special-nexthop; | uses special-next-hop; | |||
| } | } | |||
| case simple-nexthop { | case simple-next-hop { | |||
| uses outgoing-interface; | uses outgoing-interface; | |||
| } | } | |||
| case nexthop-list { | case next-hop-list { | |||
| if-feature multipath-routes; | if-feature multipath-routes; | |||
| list nexthop { | container next-hop-list { | |||
| unique "id"; | list next-hop { | |||
| description | key "id"; | |||
| "An entry of a nexthop list."; | description | |||
| uses state-entry-id; | "An entry of a next-hop list."; | |||
| uses outgoing-interface; | uses state-entry-id; | |||
| uses nexthop-classifiers; | uses outgoing-interface; | |||
| uses next-hop-classifiers; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping route-metadata { | grouping route-metadata { | |||
| description | description | |||
| "Route metadata."; | "Route metadata."; | |||
| leaf source-protocol { | leaf source-protocol { | |||
| type identityref { | type identityref { | |||
| skipping to change at page 33, line 31 ¶ | skipping to change at page 33, line 33 ¶ | |||
| "Operational state of the routing subsystem."; | "Operational state of the routing subsystem."; | |||
| list routing-instance { | list routing-instance { | |||
| key "name"; | key "name"; | |||
| unique "id"; | unique "id"; | |||
| description | description | |||
| "Each list entry is a container for operational state data of | "Each list entry is a container for operational state data of | |||
| a routing instance. | a routing instance. | |||
| An implementation MAY create one or more system-controlled | An implementation MAY create one or more system-controlled | |||
| instances, other user-controlled instances MAY be created by | instances, other user-controlled instances MAY be created by | |||
| configuration. | configuration."; | |||
| "; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the routing instance. | "The name of the routing instance. | |||
| "; | ||||
| For system-controlled instances the name is persistent, | ||||
| i.e., it SHOULD NOT change across reboots."; | ||||
| } | ||||
| uses state-entry-id { | ||||
| refine "id" { | ||||
| mandatory "true"; | ||||
| } | ||||
| } | } | |||
| uses state-entry-id; | ||||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-instance-type; | base routing-instance-type; | |||
| } | } | |||
| default "rt:standard-routing-instance"; | default "rt:standard-routing-instance"; | |||
| description | description | |||
| "The routing instance type, primarily intended for | "The routing instance type, primarily intended for | |||
| discriminating among different types of logical routers, | discriminating among different types of logical routers, | |||
| route virtualization, master-slave arrangements etc., | route virtualization, master-slave arrangements etc., | |||
| while keeping all routing instances in the same flat list. | while keeping all routing instances in the same flat | |||
| "; | list."; | |||
| } | } | |||
| uses router-id { | uses router-id { | |||
| description | description | |||
| "Global router ID. | "Global router ID. | |||
| An implementation may choose a value if none is | An implementation may choose a value if none is | |||
| configured. | configured. | |||
| Routing protocols MAY override this global parameter. | Routing protocols that use router ID MAY override this | |||
| "; | global parameter."; | |||
| } | } | |||
| container default-ribs { | container default-ribs { | |||
| description | description | |||
| "Default RIBs used by the routing instance."; | "Default RIBs used by the routing instance."; | |||
| list default-rib { | list default-rib { | |||
| key "address-family"; | key "address-family"; | |||
| description | description | |||
| "Each list entry specifies the default RIB for one | "Each list entry specifies the default RIB for one | |||
| address family. | address family. | |||
| The default RIB is operationally connected to all | The default RIB is operationally connected to all | |||
| routing protocols for which a connected RIB has not been | routing protocols for which a connected RIB has not been | |||
| explicitly configured. | explicitly configured. | |||
| The 'direct' pseudo-protocol is always connected to the | The 'direct' pseudo-protocol is always connected to the | |||
| default RIBs. | default RIBs."; | |||
| "; | ||||
| uses address-family; | uses address-family; | |||
| leaf rib-id { | leaf rib-name { | |||
| type rib-state-ref; | type rib-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Name of an existing RIB to be used as the default RIB | "Name of an existing RIB to be used as the default RIB | |||
| for the given routing instance and address family."; | for the given routing instance and address family."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| skipping to change at page 35, line 16 ¶ | skipping to change at page 35, line 22 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 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 "name"; | key "name"; | |||
| description | description | |||
| "Operational state of a routing protocol instance. | "Operational state of a routing protocol instance. | |||
| "; | ||||
| An implementation MUST provide exactly one | ||||
| system-controlled instance of the type 'direct'. Other | ||||
| instances MAY be created by configuration."; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the routing protocol instance."; | "The name of the routing protocol instance. | |||
| For system-controlled instances this name is | ||||
| persistent, i.e., it SHOULD NOT change across | ||||
| reboots."; | ||||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-protocol; | base routing-protocol; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Type of the routing protocol."; | "Type of the routing protocol."; | |||
| } | } | |||
| container connected-ribs { | container connected-ribs { | |||
| if-feature multiple-ribs; | ||||
| description | description | |||
| "Container for connected RIBs. | "Container for connected RIBs."; | |||
| "; | ||||
| list connected-rib { | list connected-rib { | |||
| key "rib-id"; | key "rib-name"; | |||
| description | description | |||
| "List of RIBs to which the routing protocol instance | "List of RIBs to which the routing protocol instance | |||
| is connected (at most one RIB per address family). | is connected (at most one RIB per address | |||
| "; | family)."; | |||
| leaf rib-id { | ||||
| leaf rib-name { | ||||
| type rib-state-ref; | type rib-state-ref; | |||
| description | description | |||
| "Name of an existing RIB."; | "Name of an existing RIB."; | |||
| } | } | |||
| leaf import-filter { | leaf import-filter { | |||
| type route-filter-state-ref; | type route-filter-state-ref; | |||
| description | description | |||
| "Reference to a route filter that is used for | "Reference to a route filter that is used for | |||
| filtering routes passed from this routing protocol | filtering routes passed from this routing protocol | |||
| instance to the RIB specified by the 'name' | instance to the RIB specified by the 'rib-name' | |||
| sibling node. | sibling node. | |||
| If this leaf is not present, the behavior is | If this leaf is not present, the behavior is | |||
| protocol-specific, but typically it means that all | protocol-specific, but typically it means that all | |||
| routes are accepted. | routes are accepted."; | |||
| "; | ||||
| } | } | |||
| leaf export-filter { | leaf export-filter { | |||
| type route-filter-state-ref; | type route-filter-state-ref; | |||
| description | description | |||
| "Reference to a route filter that is used for | "Reference to a route filter that is used for | |||
| filtering routes passed from the RIB specified by | filtering routes passed from the RIB specified by | |||
| the 'name' sibling node to this routing protocol | the 'rib-name' sibling node to this routing | |||
| instance. | protocol instance. | |||
| If this leaf is not present, the behavior is | If this leaf is not present, the behavior is | |||
| protocol-specific - typically it means that all | protocol-specific - typically it means that all | |||
| routes are accepted. | routes are accepted. | |||
| The 'direct' and 'static' pseudo-protocols accept | The 'direct' and 'static' pseudo-protocols accept | |||
| no routes from any RIB. | no routes from any RIB."; | |||
| "; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container ribs { | container ribs { | |||
| description | description | |||
| "Container for RIBs."; | "Container for RIBs."; | |||
| list rib { | list rib { | |||
| key "name"; | key "name"; | |||
| unique "id"; | unique "id"; | |||
| description | description | |||
| "Each entry represents a RIB identified by the 'name' key. | "Each entry represents a RIB identified by the 'name' key. | |||
| All routes in a RIB MUST belong to the same address | All routes in a RIB MUST belong to the same address | |||
| family. | family. | |||
| The server MUST create the default RIB for each address | The server MUST provide a system-controlled default RIB | |||
| family, and MAY create other RIBs. Additional RIBs MAY be | for each address family, and MAY provide other | |||
| created in the configuration. | system-controlled RIBs. Additional RIBs MAY be created in | |||
| "; | the configuration."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the RIB."; | "The name of the RIB."; | |||
| } | } | |||
| uses state-entry-id; | uses state-entry-id { | |||
| refine "id" { | ||||
| mandatory "true"; | ||||
| } | ||||
| } | ||||
| uses address-family; | uses address-family; | |||
| container routes { | container routes { | |||
| description | description | |||
| "Current contents of the RIB."; | "Current contents of the RIB."; | |||
| list route { | list route { | |||
| unique "id"; | key "id"; | |||
| description | description | |||
| "A RIB route entry. This data node MUST be augmented | "A RIB route entry. This data node MUST be augmented | |||
| with information specific for routes of each address | with information specific for routes of each address | |||
| family."; | family."; | |||
| uses state-entry-id; | uses state-entry-id; | |||
| uses nexthop-content; | uses next-hop-content; | |||
| uses route-metadata; | uses route-metadata; | |||
| } | } | |||
| } | } | |||
| container recipient-ribs { | container recipient-ribs { | |||
| if-feature multiple-ribs; | if-feature multiple-ribs; | |||
| description | description | |||
| "Container for recipient RIBs."; | "Container for recipient RIBs."; | |||
| list recipient-rib { | list recipient-rib { | |||
| key "rib-id"; | key "rib-name"; | |||
| description | description | |||
| "List of RIBs that receive routes from this RIB."; | "List of RIBs that receive routes from this RIB."; | |||
| leaf rib-id { | leaf rib-name { | |||
| type rib-state-ref; | type rib-state-ref; | |||
| description | description | |||
| "The name of the recipient RIB."; | "The name of the recipient RIB."; | |||
| } | } | |||
| leaf filter { | leaf filter { | |||
| type route-filter-state-ref; | type route-filter-state-ref; | |||
| description | description | |||
| "A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
| to the recipient RIB."; | to the recipient RIB."; | |||
| } | } | |||
| skipping to change at page 37, line 39 ¶ | skipping to change at page 38, line 4 ¶ | |||
| type rib-state-ref; | type rib-state-ref; | |||
| description | description | |||
| "The name of the recipient RIB."; | "The name of the recipient RIB."; | |||
| } | } | |||
| leaf filter { | leaf filter { | |||
| type route-filter-state-ref; | type route-filter-state-ref; | |||
| description | description | |||
| "A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
| to the recipient RIB."; | to the recipient RIB."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container route-filters { | container route-filters { | |||
| description | description | |||
| "Container for route filters."; | "Container for route filters."; | |||
| list route-filter { | list route-filter { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Route filters are used for filtering and/or manipulating | "Route filters are used for filtering and/or manipulating | |||
| routes that are passed between a routing protocol and a | routes that are passed between a routing protocol and a | |||
| RIB and vice versa, or between two RIBs. | RIB and vice versa, or between two RIBs. | |||
| It is expected that other modules augment this list with | It is expected that other modules augment this list with | |||
| contents specific for a particular route filter type. | contents specific for a particular route filter type."; | |||
| "; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the route filter."; | "The name of the route filter."; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base route-filter; | base route-filter; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| skipping to change at page 38, line 34 ¶ | skipping to change at page 38, line 47 ¶ | |||
| } | } | |||
| /* Configuration Data */ | /* Configuration Data */ | |||
| container routing { | container routing { | |||
| description | description | |||
| "Configuration parameters for the routing subsystem."; | "Configuration parameters for the routing subsystem."; | |||
| list routing-instance { | list routing-instance { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Configuration of a routing instance. | "Configuration of a routing instance."; | |||
| "; | ||||
| 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 entries, the value of this leaf must | For system-controlled entries, the value of this leaf must | |||
| be the same as the name of the corresponding entry in | be the same as the name of the corresponding entry in | |||
| state data. | state data. | |||
| For user-controlled entries, an arbitrary name can be | For user-controlled entries, an arbitrary name can be | |||
| used. | used."; | |||
| "; | ||||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-instance-type; | base routing-instance-type; | |||
| } | } | |||
| default "rt:standard-routing-instance"; | default "rt:standard-routing-instance"; | |||
| description | description | |||
| "The type of the routing instance."; | "The type of the routing instance."; | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "Enable/disable the routing instance. | "Enable/disable the routing instance. | |||
| If this parameter is false, the parent routing instance is | If this parameter is false, the parent routing instance is | |||
| disabled and does not appear in operational state data, | disabled and does not appear in operational state data, | |||
| despite any other configuration that might be present. | despite any other configuration that might be present."; | |||
| "; | ||||
| } | } | |||
| uses router-id { | uses router-id { | |||
| description | description | |||
| "Configuration of the global router ID."; | "Configuration of the global router ID."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the routing instance."; | "Textual description of the routing instance."; | |||
| } | } | |||
| container default-ribs { | container default-ribs { | |||
| if-feature multiple-ribs; | if-feature multiple-ribs; | |||
| description | description | |||
| "Configuration of the default RIBs used by the routing | "Configuration of the default RIBs used by the routing | |||
| instance. | instance. | |||
| The default RIB for an addressed family if by default | The default RIB for an addressed family if by default | |||
| connected to all routing protocol instances supporting | connected to all routing protocol instances supporting | |||
| that address family, and always receives direct routes. | that address family, and always receives direct routes."; | |||
| "; | ||||
| list default-rib { | list default-rib { | |||
| must "address-family=/routing/ribs/rib[name=current()/" | must "address-family=/routing/ribs/rib[name=current()/" | |||
| + "name]/address-family" { | + "rib-name]/address-family" { | |||
| error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
| description | description | |||
| "The entry's address family MUST match that of the | "The entry's address family MUST match that of the | |||
| referenced RIB."; | referenced RIB."; | |||
| } | } | |||
| key "address-family"; | key "address-family"; | |||
| description | description | |||
| "Each list entry configures the default RIB for one | "Each list entry configures the default RIB for one | |||
| address family."; | address family."; | |||
| uses address-family; | uses address-family; | |||
| leaf name { | leaf rib-name { | |||
| type string; | type string; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Name of an existing RIB to be used as the default RIB | "Name of an existing RIB to be used as the default RIB | |||
| for the given routing instance and address family."; | for the given routing instance and address family."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| skipping to change at page 41, line 8 ¶ | skipping to change at page 41, line 17 ¶ | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "Enable/disable the routing protocol instance. | "Enable/disable the routing protocol instance. | |||
| If this parameter is false, the parent routing | If this parameter is false, the parent routing | |||
| protocol instance is disabled and does not appear in | protocol instance is disabled and does not appear in | |||
| operational state data, despite any other | operational state data, despite any other | |||
| configuration that might be present. | configuration that might be present."; | |||
| "; | ||||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-protocol; | base routing-protocol; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Type of the routing protocol - an identity derived | "Type of the routing protocol - an identity derived | |||
| from the 'routing-protocol' base identity."; | from the 'routing-protocol' base identity."; | |||
| } | } | |||
| container connected-ribs { | container connected-ribs { | |||
| if-feature multiple-ribs; | if-feature multiple-ribs; | |||
| description | description | |||
| "Configuration of connected RIBs. | "Configuration of connected RIBs."; | |||
| "; | ||||
| list connected-rib { | list connected-rib { | |||
| must "not(/routing/ribs/rib[name=current()/" | must "not(/routing/ribs/rib[name=current()/" | |||
| + "preceding-sibling::connected-rib/" | + "preceding-sibling::connected-rib/" | |||
| + "name and address-family=/routing/ribs/" | + "rib-name and address-family=/routing/ribs/" | |||
| + "rib[name=current()/name]/address-family])" { | + "rib[name=current()/rib-name]/address-family])" { | |||
| error-message | error-message | |||
| "Duplicate address family for connected RIBs."; | "Duplicate address family for connected RIBs."; | |||
| description | description | |||
| "For each address family, there MUST NOT be more | "For each address family, there MUST NOT be more | |||
| than one connected RIB."; | than one connected RIB."; | |||
| } | } | |||
| key "rib-name"; | key "rib-name"; | |||
| description | description | |||
| "List of RIBs to which the routing protocol instance | "List of RIBs to which the routing protocol instance | |||
| is connected (at most one RIB per address family). | is connected (at most one RIB per address family). | |||
| If no connected RIB is configured for an address | If no connected RIB is configured for an address | |||
| family, the routing protocol is connected to the | family, the routing protocol is connected to the | |||
| default RIB for that address family. | default RIB for that address family."; | |||
| "; | ||||
| leaf rib-name { | leaf rib-name { | |||
| type rib-ref; | type rib-ref; | |||
| must "../../../type != 'rt:direct' or " | must "../../../type != 'rt:direct' or " | |||
| + "../../../../../default-ribs/ " | + "../../../../../default-ribs/ " | |||
| + "default-rib/name=." { | + "default-rib/rib-name=." { | |||
| error-message "The 'direct' protocol can be " | error-message "The 'direct' protocol can be " | |||
| + "connected only to a default RIB."; | + "connected only to a default RIB."; | |||
| description | description | |||
| "For the 'direct' pseudo-protocol, the connected | "For the 'direct' pseudo-protocol, the connected | |||
| RIB must always be a default RIB."; | RIB must always be a default RIB."; | |||
| } | } | |||
| description | description | |||
| "Name of an existing RIB."; | "Name of an existing RIB."; | |||
| } | } | |||
| leaf import-filter { | leaf import-filter { | |||
| skipping to change at page 42, line 32 ¶ | skipping to change at page 42, line 39 ¶ | |||
| 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 | description | |||
| "Configured RIBs."; | "Configured RIBs."; | |||
| list rib { | list rib { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Each entry represents a configured RIB identified by the | "Each entry represents a configured RIB identified by the | |||
| 'name' key. | 'name' key. | |||
| Entries having the same key as a system-controlled entry | Entries having the same key as a system-controlled entry | |||
| of the list /routing-state/ribs/rib are used for | of the list /routing-state/ribs/rib are used for | |||
| configuring parameters of that entry. Other entries define | configuring parameters of that entry. Other entries define | |||
| additional user-controlled RIBs. | additional user-controlled RIBs."; | |||
| "; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the RIB. | "The name of the RIB. | |||
| For system-controlled entries, the value of this leaf | For system-controlled entries, the value of this leaf | |||
| must be the same as the name of the corresponding entry | must be the same as the name of the corresponding entry | |||
| in state data. | in state data. | |||
| For user-controlled entries, an arbitrary name can be | For user-controlled entries, an arbitrary name can be | |||
| used. | used."; | |||
| "; | ||||
| } | } | |||
| uses address-family; | uses address-family; | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the RIB."; | "Textual description of the RIB."; | |||
| } | } | |||
| container recipient-ribs { | container recipient-ribs { | |||
| if-feature multiple-ribs; | if-feature multiple-ribs; | |||
| description | description | |||
| "Configuration of recipient RIBs."; | "Configuration of recipient RIBs."; | |||
| list recipient-rib { | list recipient-rib { | |||
| must "name != ../../name" { | must "rib-name != ../../name" { | |||
| error-message | error-message | |||
| "Source and recipient RIBs are identical."; | "Source and recipient RIBs are identical."; | |||
| description | description | |||
| "A RIB MUST NOT appear among its recipient RIBs."; | "A RIB MUST NOT appear among its recipient RIBs."; | |||
| } | } | |||
| must "/routing/ribs/rib[name=current()/name]/" | must "/routing/ribs/rib[name=current()/rib-name]/" | |||
| + "address-family=../../address-family" { | + "address-family=../../address-family" { | |||
| error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
| description | description | |||
| "Address family of the recipient RIB MUST match that | "Address family of the recipient RIB MUST match that | |||
| of the source RIB."; | of the source RIB."; | |||
| } | } | |||
| key "rib-name"; | key "rib-name"; | |||
| description | description | |||
| "Each entry configures a recipient RIB."; | "Each entry configures a recipient RIB."; | |||
| leaf rib-name { | leaf rib-name { | |||
| skipping to change at page 44, line 45 ¶ | skipping to change at page 44, line 48 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC methods */ | /* RPC methods */ | |||
| rpc active-route { | rpc active-route { | |||
| description | description | |||
| "Return the active route that a routing-instance uses for | "Return the active route that a routing-instance uses for | |||
| sending packets to a destination address. | sending packets to a destination address."; | |||
| "; | ||||
| input { | input { | |||
| leaf routing-instance-id { | leaf routing-instance-name { | |||
| type routing-instance-state-ref; | type routing-instance-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Identifier of the routing instance whose forwarding | "Name of the routing instance whose forwarding information | |||
| information base is being queried. | base is being queried. | |||
| If the routing instance with 'id' equal to | If the routing instance with name equal to the value of | |||
| 'routing-instance-id' doesn't exist, then this operation | this parameter doesn't exist, then this operation SHALL | |||
| SHALL fail with error-tag 'data-missing' and error-app-tag | fail with error-tag 'data-missing' and error-app-tag | |||
| 'routing-instance-not-found'. | 'routing-instance-not-found'."; | |||
| "; | ||||
| } | } | |||
| container destination-address { | container destination-address { | |||
| description | description | |||
| "Network layer destination address. | "Network layer destination address. | |||
| Address family specific modules MUST augment this | Address family specific modules MUST augment this | |||
| container with a leaf named 'address'. | container with a leaf named 'address'."; | |||
| "; | ||||
| uses address-family; | uses address-family; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| container route { | container route { | |||
| description | description | |||
| "The active route for the specified destination. | "The active route for the specified destination. | |||
| If the routing instance has no active route for the | If the routing instance has no active route for the | |||
| destination address, no output is returned - the server | destination address, no output is returned - the server | |||
| SHALL send an <rpc-reply> containing a single element | SHALL send an <rpc-reply> containing a single element | |||
| <ok>. | <ok>. | |||
| Address family specific modules MUST augment this list | Address family specific modules MUST augment this list | |||
| with appropriate route contents. | with appropriate route contents."; | |||
| "; | ||||
| uses address-family; | uses address-family; | |||
| uses nexthop-content; | uses next-hop-content; | |||
| uses route-metadata; | uses route-metadata; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc route-count { | rpc route-count { | |||
| description | description | |||
| "Return the current number of routes in a RIB. | "Return the current number of routes in a RIB."; | |||
| If the RIB with 'id' equal to 'rib-id' doesn't exist, then | ||||
| this operation SHALL fail with error-tag 'data-missing' and | ||||
| error-app-tag 'rib-not-found'. | ||||
| "; | ||||
| input { | input { | |||
| leaf rib-id { | leaf rib-name { | |||
| type rib-state-ref; | type rib-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Identifier of the RIB."; | "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 { | output { | |||
| leaf number-of-routes { | leaf number-of-routes { | |||
| type uint64; | type uint64; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Number of routes in the RIB."; | "Number of routes in the RIB."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 8. IPv4 Unicast Routing YANG Module | 8. IPv4 Unicast Routing Management YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-11-07.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2014-01-10.yang" | |||
| module ietf-ipv4-unicast-routing { | module ietf-ipv4-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | |||
| prefix "v4ur"; | prefix "v4ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| WG Chair: David Kessens | WG Chair: David Kessens | |||
| <mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz>"; | |||
| "; | ||||
| description | description | |||
| "This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
| configuration and operational state data for IPv4 unicast | configuration and operational state data for IPv4 unicast | |||
| routing. | routing. | |||
| Copyright (c) 2013 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices."; | |||
| "; | ||||
| revision 2013-11-07 { | revision 2014-01-10 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv4-unicast { | identity ipv4-unicast { | |||
| base rt:ipv4; | base rt:ipv4; | |||
| skipping to change at page 48, line 46 ¶ | skipping to change at page 48, line 44 ¶ | |||
| 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:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:nexthop-options/rt:simple-nexthop" { | + "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-nexthop' case of IPv4 unicast | "This leaf augments the 'simple-next-hop' case of IPv4 unicast | |||
| routes."; | routes."; | |||
| leaf gateway { | ||||
| leaf next-hop { | ||||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the gateway."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:nexthop-options/rt:nexthop-list/rt:nexthop" { | + "rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/" | |||
| when "../../../rt:address-family = 'v4ur:ipv4-unicast'" { | + "rt:next-hop" { | |||
| 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."; | |||
| } | } | |||
| if-feature rt:multipath-routes; | ||||
| description | description | |||
| "This leaf augments the 'nexthop-list' case of IPv4 unicast | "This leaf augments the 'next-hop-list' case of IPv4 unicast | |||
| routes."; | routes."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the nexthop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| /* Configuration data */ | /* Configuration data */ | |||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
| + "rt:routing-protocol/rt:static-routes" { | + "rt:routing-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific to IPv4 unicast."; | pseudo-protocol with data specific to IPv4 unicast."; | |||
| skipping to change at page 50, line 5 ¶ | skipping to change at page 50, line 5 ¶ | |||
| ordered-by "user"; | ordered-by "user"; | |||
| description | description | |||
| "A user-ordered list of static routes."; | "A user-ordered list of static routes."; | |||
| leaf id { | leaf id { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| "Unique numeric identifier of the route. | "Unique numeric identifier of the route. | |||
| This value is unrelated to system-assigned keys of | This value is unrelated to system-assigned 'id' | |||
| routes in RIBs. | parameters of routes in RIBs."; | |||
| "; | ||||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
| } | } | |||
| choice nexthop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for expressing the nexthop in static routes."; | "Options for expressing the next-hop in static routes."; | |||
| case special-nexthop { | case special-next-hop { | |||
| uses rt:special-nexthop; | uses rt:special-next-hop; | |||
| } | } | |||
| case simple-nexthop { | case simple-next-hop { | |||
| leaf gateway { | leaf next-hop { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the gateway."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type leafref { | type leafref { | |||
| path "../../../../../../rt:interfaces/rt:interface/" | path "../../../../../../rt:interfaces/rt:interface/" | |||
| + "rt:name"; | + "rt:name"; | |||
| } | } | |||
| description | description | |||
| "Name of the outgoing interface. | "Name of the outgoing interface. | |||
| Only interfaces configured for the parent routing | Only interfaces configured for the ancestor routing | |||
| instance can be given. | instance can be given."; | |||
| "; | ||||
| } | } | |||
| } | } | |||
| case nexthop-list { | case next-hop-list { | |||
| if-feature rt:multipath-routes; | if-feature rt:multipath-routes; | |||
| list nexthop { | container next-hop-list { | |||
| key "id"; | list next-hop { | |||
| description | key "id"; | |||
| "An entry of a nexthop list."; | ||||
| leaf id { | ||||
| type uint32; | ||||
| description | description | |||
| "Unique numeric identifier of the entry. | "An entry of a next-hop list."; | |||
| leaf id { | ||||
| type uint32; | ||||
| description | ||||
| "Unique numeric identifier of the entry. | ||||
| This value is unrelated to system-assigned keys of | This value is unrelated to system-assigned 'id' | |||
| nexthops in RIBs. | parameters of next-hops in RIBs."; | |||
| "; | ||||
| } | ||||
| leaf address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the nexthop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type leafref { | ||||
| path "../../../../../../../rt:interfaces/" | ||||
| + "rt:interface/rt:name"; | ||||
| } | } | |||
| description | leaf address { | |||
| "Name of the outgoing interface. | type inet:ipv4-address; | |||
| description | ||||
| "IPv4 address of the next-hop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type leafref { | ||||
| path "../../../../../../../../rt:interfaces/" | ||||
| + "rt:interface/rt:name"; | ||||
| } | ||||
| description | ||||
| "Name of the outgoing interface. | ||||
| Only interfaces configured for the parent routing | Only interfaces configured for the ancestor | |||
| instance can be given. | routing instance can be given."; | |||
| "; | } | |||
| uses rt:next-hop-classifiers; | ||||
| } | } | |||
| uses rt:nexthop-classifiers; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC methods */ | /* RPC methods */ | |||
| augment "/rt:active-route/rt:input/rt:destination-address" { | augment "/rt:active-route/rt:input/rt:destination-address" { | |||
| skipping to change at page 52, line 4 ¶ | skipping to change at page 51, line 50 ¶ | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments the 'rt:destination-address' parameter of | "This leaf augments the 'rt:destination-address' parameter of | |||
| the 'rt:active-route' operation."; | the 'rt:active-route' operation."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 destination address."; | "IPv4 destination address."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/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 the reply to the 'rt:active-route' | "This leaf augments the reply to the 'rt:active-route' | |||
| operation."; | operation."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| description | description | |||
| "IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" | |||
| + "rt:simple-nexthop" { | + "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-nexthop' case in the reply to | "This leaf augments the 'simple-next-hop' case in the reply to | |||
| the 'rt:active-route' operation."; | the 'rt:active-route' operation."; | |||
| leaf gateway { | leaf next-hop { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the gateway."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" | |||
| + "rt:nexthop-list/rt:nexthop" { | + "rt:next-hop-list/rt:next-hop-list/rt: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."; | |||
| } | } | |||
| if-feature rt:multipath-routes; | if-feature rt:multipath-routes; | |||
| description | description | |||
| "This leaf augments the 'nexthop-list' case in the reply to the | "This leaf augments the 'next-hop-list' case in the reply to | |||
| 'rt:active-route' operation."; | the 'rt:active-route' operation."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the nexthop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 9. IPv6 Unicast Routing YANG Module | 9. IPv6 Unicast Routing Management YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-11-07.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2014-01-10.yang" | |||
| module ietf-ipv6-unicast-routing { | module ietf-ipv6-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | |||
| prefix "v6ur"; | prefix "v6ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| skipping to change at page 54, line 39 ¶ | skipping to change at page 54, line 39 ¶ | |||
| } | } | |||
| import ietf-ip { | import ietf-ip { | |||
| prefix "ip"; | prefix "ip"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| WG Chair: David Kessens | WG Chair: David Kessens | |||
| <mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz>"; | |||
| "; | ||||
| description | description | |||
| "This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
| configuration and operational state data for IPv6 unicast | configuration and operational state data for IPv6 unicast | |||
| routing. | routing. | |||
| Copyright (c) 2013 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices."; | |||
| "; | ||||
| revision 2013-11-07 { | revision 2014-01-10 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv6-unicast { | identity ipv6-unicast { | |||
| base rt:ipv6; | base rt:ipv6; | |||
| description | description | |||
| "This identity represents the IPv6 unicast address family."; | "This identity represents the IPv6 unicast address family."; | |||
| } | } | |||
| /* Operational state data */ | /* Operational state data */ | |||
| augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" | |||
| + "rt:interface" { | + "rt:interface" { | |||
| 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 | |||
| "IPv6-specific parameters of router interfaces."; | "IPv6-specific parameters of router interfaces."; | |||
| container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
| description | description | |||
| "Parameters of IPv6 Router Advertisements."; | "Parameters of IPv6 Router Advertisements."; | |||
| leaf send-advertisements { | leaf send-advertisements { | |||
| type boolean; | type boolean; | |||
| 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."; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvSendAdvertisements."; | AdvSendAdvertisements."; | |||
| skipping to change at page 56, line 44 ¶ | skipping to change at page 56, line 35 ¶ | |||
| description | description | |||
| "The minimum time allowed between sending unsolicited | "The minimum time allowed between sending unsolicited | |||
| multicast Router Advertisements from the interface. | multicast Router Advertisements from the interface. | |||
| The default value to be used operationally if this leaf is | The default value to be used operationally if this leaf is | |||
| not configured is determined as follows: | not configured is determined as follows: | |||
| - if max-rtr-adv-interval >= 9 seconds, the default value | - if max-rtr-adv-interval >= 9 seconds, the default value | |||
| is 0.33 * max-rtr-adv-interval; | is 0.33 * max-rtr-adv-interval; | |||
| - otherwise it is 0.75 * max-rtr-adv-interval. | - otherwise it is 0.75 * max-rtr-adv-interval."; | |||
| "; | ||||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| MinRtrAdvInterval."; | MinRtrAdvInterval."; | |||
| } | } | |||
| leaf managed-flag { | leaf managed-flag { | |||
| type boolean; | type boolean; | |||
| default "false"; | default "false"; | |||
| description | description | |||
| "The boolean value to be placed in the 'Managed address | "The boolean value to be placed in the 'Managed address | |||
| configuration' flag field in the Router Advertisement."; | configuration' flag field in the Router Advertisement."; | |||
| skipping to change at page 58, line 21 ¶ | skipping to change at page 58, line 12 ¶ | |||
| default "64"; | default "64"; | |||
| description | description | |||
| "The default value to be placed in the Cur Hop Limit field | "The default value to be placed in the Cur Hop Limit field | |||
| in the Router Advertisement messages sent by the router. | in the Router Advertisement messages sent by the router. | |||
| The value should be set to the current diameter of the | The value should be set to the current diameter of the | |||
| Internet. The value zero means unspecified (by this | Internet. The value zero means unspecified (by this | |||
| router). | router). | |||
| The default SHOULD be set to the value specified in IANA | The default SHOULD be set to the value specified in IANA | |||
| Assigned Numbers that was in effect at the time of | Assigned Numbers that was in effect at the time of | |||
| implementation. | implementation."; | |||
| "; | ||||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvCurHopLimit. | AdvCurHopLimit. | |||
| IANA: IP Parameters, | IANA: IP Parameters, | |||
| http://www.iana.org/assignments/ip-parameters | http://www.iana.org/assignments/ip-parameters"; | |||
| "; | ||||
| } | } | |||
| leaf default-lifetime { | leaf default-lifetime { | |||
| type uint16 { | type uint16 { | |||
| range "0..9000"; | range "0..9000"; | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "The value to be placed in the Router Lifetime field of | "The value to be placed in the Router Lifetime field of | |||
| Router Advertisements sent from the interface, in seconds. | Router Advertisements sent from the interface, in seconds. | |||
| MUST be either zero or between max-rtr-adv-interval and | MUST be either zero or between max-rtr-adv-interval and | |||
| 9000 seconds. A value of zero indicates that the router is | 9000 seconds. A value of zero indicates that the router is | |||
| not to be used as a default router. These limits may be | not to be used as a default router. These limits may be | |||
| overridden by specific documents that describe how IPv6 | overridden by specific documents that describe how IPv6 | |||
| operates over different link layers. | operates over different link layers. | |||
| If this parameter is not configured, a value of 3 * | If this parameter is not configured, a value of 3 * | |||
| max-rtr-adv-interval SHOULD be used. | max-rtr-adv-interval SHOULD be used."; | |||
| "; | ||||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvDefaultLifeTime."; | AdvDefaultLifeTime."; | |||
| } | } | |||
| container prefix-list { | container prefix-list { | |||
| description | description | |||
| "A list of prefixes that are placed in Prefix Information | "A list of prefixes that are placed in Prefix Information | |||
| options in Router Advertisement messages sent from the | options in Router Advertisement messages sent from the | |||
| interface. | interface. | |||
| By default, these are all prefixes that the router | By default, these are all prefixes that the router | |||
| advertises via routing protocols as being on-link for the | advertises via routing protocols as being on-link for the | |||
| interface from which the advertisement is sent. | interface from which the advertisement is sent. | |||
| The link-local prefix SHOULD NOT be included in the list | The link-local prefix SHOULD NOT be included in the list | |||
| of advertised prefixes. | of advertised prefixes."; | |||
| "; | ||||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvPrefixList."; | AdvPrefixList."; | |||
| list prefix { | list prefix { | |||
| key "prefix-spec"; | key "prefix-spec"; | |||
| description | description | |||
| "Advertised prefix entry with parameters."; | "Advertised prefix entry with parameters."; | |||
| leaf prefix-spec { | leaf prefix-spec { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 address prefix."; | "IPv6 address prefix."; | |||
| } | } | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| default "2592000"; | default "2592000"; | |||
| description | description | |||
| "The value to be placed in the Valid Lifetime in the | "The value to be 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."; | |||
| "; | ||||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvValidLifetime."; | AdvValidLifetime."; | |||
| } | } | |||
| leaf on-link-flag { | leaf on-link-flag { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "The value to be placed in the on-link flag ('L-bit') | "The value to be placed in the on-link flag ('L-bit') | |||
| field in the Prefix Information option."; | field in the Prefix Information option."; | |||
| skipping to change at page 60, line 47 ¶ | skipping to change at page 60, line 33 ¶ | |||
| 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:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:nexthop-options/rt:simple-nexthop" { | + "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-nexthop' case of IPv6 unicast | "This leaf augments the 'simple-next-hop' case of IPv6 unicast | |||
| routes."; | routes."; | |||
| leaf gateway { | leaf next-hop { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the gateway."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:nexthop-options/rt:nexthop-list/rt:nexthop" { | + "rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/" | |||
| when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | + "rt:next-hop" { | |||
| 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."; | |||
| } | } | |||
| if-feature rt:multipath-routes; | ||||
| description | description | |||
| "This leaf augments the 'nexthop-list' case of IPv6 unicast | "This leaf augments the 'next-hop-list' case of IPv6 unicast | |||
| routes."; | routes."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the nexthop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| /* Configuration data */ | /* Configuration data */ | |||
| augment | augment | |||
| "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" { | "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" { | |||
| when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | |||
| + "ip:ipv6/ip:enabled='true'" { | + "ip:ipv6/ip:enabled='true'" { | |||
| description | description | |||
| skipping to change at page 61, line 48 ¶ | skipping to change at page 61, line 36 ¶ | |||
| enabled IPv6."; | enabled IPv6."; | |||
| } | } | |||
| description | description | |||
| "Configuration of IPv6-specific parameters of router | "Configuration of IPv6-specific parameters of router | |||
| interfaces."; | interfaces."; | |||
| container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
| description | description | |||
| "Configuration of IPv6 Router Advertisements. | "Configuration of IPv6 Router Advertisements. | |||
| See the corresponding parameters under /rt:routing-state for | See the corresponding parameters under /rt:routing-state for | |||
| detailed descriptions and references. | detailed descriptions and references."; | |||
| "; | ||||
| leaf send-advertisements { | leaf send-advertisements { | |||
| type boolean; | type boolean; | |||
| default "false"; | default "false"; | |||
| description | description | |||
| "A flag indicating whether or not the router sends periodic | "A flag indicating whether or not the router sends periodic | |||
| Router Advertisements and responds to Router | Router Advertisements and responds to Router | |||
| Solicitations."; | Solicitations."; | |||
| } | } | |||
| leaf max-rtr-adv-interval { | leaf max-rtr-adv-interval { | |||
| type uint16 { | type uint16 { | |||
| skipping to change at page 62, line 32 ¶ | skipping to change at page 62, line 19 ¶ | |||
| range "3..1350"; | range "3..1350"; | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| must ". <= 0.75 * ../max-rtr-adv-interval" { | must ". <= 0.75 * ../max-rtr-adv-interval" { | |||
| description | description | |||
| "The value MUST NOT be greater than 75 % of | "The value MUST NOT be greater than 75 % of | |||
| 'max-rtr-adv-interval'."; | 'max-rtr-adv-interval'."; | |||
| } | } | |||
| description | description | |||
| "The minimum time allowed between sending unsolicited | "The minimum time allowed between sending unsolicited | |||
| multicast Router Advertisements from the interface. | multicast Router Advertisements from the interface."; | |||
| "; | ||||
| } | } | |||
| leaf managed-flag { | leaf managed-flag { | |||
| type boolean; | type boolean; | |||
| default "false"; | default "false"; | |||
| description | description | |||
| "The boolean value to be placed in the 'Managed address | "The boolean value to be placed in the 'Managed address | |||
| configuration' flag field in the Router Advertisement."; | configuration' flag field in the Router Advertisement."; | |||
| } | } | |||
| leaf other-config-flag { | leaf other-config-flag { | |||
| type boolean; | type boolean; | |||
| skipping to change at page 63, line 18 ¶ | skipping to change at page 63, line 4 ¶ | |||
| leaf reachable-time { | leaf reachable-time { | |||
| type uint32 { | type uint32 { | |||
| range "0..3600000"; | range "0..3600000"; | |||
| } | } | |||
| units "milliseconds"; | units "milliseconds"; | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "The value to be placed in the Reachable Time field in the | "The value to be placed in the Reachable Time field in the | |||
| Router Advertisement messages sent by the router. The | Router Advertisement messages sent by the router. The | |||
| value zero means unspecified (by this router)."; | value zero means unspecified (by this router)."; | |||
| } | } | |||
| leaf retrans-timer { | leaf retrans-timer { | |||
| type uint32; | type uint32; | |||
| units "milliseconds"; | units "milliseconds"; | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "The value to be placed in the Retrans Timer field in the | "The value to be placed in the Retrans Timer field in the | |||
| Router Advertisement messages sent by the router. The | Router Advertisement messages sent by the router. The | |||
| value zero means unspecified (by this router)."; | value zero means unspecified (by this router)."; | |||
| } | } | |||
| leaf cur-hop-limit { | leaf cur-hop-limit { | |||
| type uint8; | type uint8; | |||
| default "64"; | default "64"; | |||
| description | description | |||
| "The default value to be placed in the Cur Hop Limit field | "The default value to be placed in the Cur Hop Limit field | |||
| in the Router Advertisement messages sent by the router. | in the Router Advertisement messages sent by the | |||
| "; | router."; | |||
| } | } | |||
| leaf default-lifetime { | leaf default-lifetime { | |||
| type uint16 { | type uint16 { | |||
| range "0..9000"; | range "0..9000"; | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "The value to be placed in the Router Lifetime field of | "The value to be placed in the Router Lifetime field of | |||
| Router Advertisements sent from the interface, in seconds. | Router Advertisements sent from the interface, in | |||
| "; | seconds."; | |||
| } | } | |||
| container prefix-list { | container prefix-list { | |||
| description | description | |||
| "Configuration of prefixes to be placed in Prefix | "Configuration of prefixes to be placed in Prefix | |||
| Information options in Router Advertisement messages sent | Information options in Router Advertisement messages sent | |||
| from the interface. | from the interface. | |||
| Prefixes that are advertised by default but do not have | Prefixes that are advertised by default but do not have | |||
| their entries in the child 'prefix' list are advertised | their entries in the child 'prefix' list are advertised | |||
| with the default values of all parameters. | with the default values of all parameters."; | |||
| "; | ||||
| list prefix { | list prefix { | |||
| key "prefix-spec"; | key "prefix-spec"; | |||
| description | description | |||
| "Advertised prefix entry."; | "Advertised prefix entry."; | |||
| leaf prefix-spec { | leaf prefix-spec { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 address prefix."; | "IPv6 address prefix."; | |||
| } | } | |||
| choice control-adv-prefixes { | choice control-adv-prefixes { | |||
| skipping to change at page 64, line 30 ¶ | skipping to change at page 64, line 14 ¶ | |||
| description | description | |||
| "The prefix either may be explicitly removed from the | "The prefix either may be explicitly removed from the | |||
| set of advertised prefixes, or parameters with which | set of advertised prefixes, or parameters with which | |||
| it is advertised may be specified (default case)."; | it is advertised may be specified (default case)."; | |||
| leaf no-advertise { | leaf no-advertise { | |||
| type empty; | type empty; | |||
| description | description | |||
| "The prefix will not be advertised. | "The prefix will not be advertised. | |||
| This can be used for removing the prefix from the | This can be used for removing the prefix from the | |||
| default set of advertised prefixes. | default set of advertised prefixes."; | |||
| "; | ||||
| } | } | |||
| case advertise { | case advertise { | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| default "2592000"; | default "2592000"; | |||
| description | description | |||
| "The value to be placed in the Valid Lifetime in | "The value to be placed in the Valid Lifetime in | |||
| the Prefix Information option."; | the Prefix Information option."; | |||
| } | } | |||
| skipping to change at page 65, line 49 ¶ | skipping to change at page 65, line 34 ¶ | |||
| ordered-by "user"; | ordered-by "user"; | |||
| description | description | |||
| "A user-ordered list of static routes."; | "A user-ordered list of static routes."; | |||
| leaf id { | leaf id { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| "Unique numeric identifier of the route. | "Unique numeric identifier of the route. | |||
| This value is unrelated to system-assigned keys of | This value is unrelated to system-assigned 'id' | |||
| routes in RIBs. | parameters of routes in RIBs."; | |||
| "; | ||||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
| } | } | |||
| choice nexthop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for expressing the nexthop in static routes."; | "Options for expressing the next-hop in static routes."; | |||
| case special-nexthop { | case special-next-hop { | |||
| uses rt:special-nexthop; | uses rt:special-next-hop; | |||
| } | } | |||
| case simple-nexthop { | case simple-next-hop { | |||
| leaf gateway { | leaf next-hop { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the gateway."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type leafref { | type leafref { | |||
| path "../../../../../../rt:interfaces/rt:interface/" | path "../../../../../../rt:interfaces/rt:interface/" | |||
| + "rt:name"; | + "rt:name"; | |||
| } | } | |||
| description | description | |||
| "Name of the outgoing interface. | "Name of the outgoing interface. | |||
| Only interfaces configured for the parent routing | Only interfaces configured for the ancestor routing | |||
| instance can be given. | instance can be given."; | |||
| "; | ||||
| } | } | |||
| } | } | |||
| case nexthop-list { | case next-hop-list { | |||
| if-feature rt:multipath-routes; | if-feature rt:multipath-routes; | |||
| list nexthop { | container next-hop-list { | |||
| key "id"; | list next-hop { | |||
| description | key "id"; | |||
| "An entry of a nexthop list."; | ||||
| leaf id { | ||||
| type uint32; | ||||
| description | description | |||
| "Unique numeric identifier of the entry. | "An entry of a next-hop list."; | |||
| leaf id { | ||||
| type uint32; | ||||
| description | ||||
| "Unique numeric identifier of the entry. | ||||
| This value is unrelated to system-assigned keys of | This value is unrelated to system-assigned 'id' | |||
| nexthops in RIBs. | parameters of next-hops in RIBs."; | |||
| "; | ||||
| } | ||||
| leaf address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the nexthop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type leafref { | ||||
| path "../../../../../../../rt:interfaces/" | ||||
| + "rt:interface/rt:name"; | ||||
| } | } | |||
| description | leaf address { | |||
| "Name of the outgoing interface. | type inet:ipv6-address; | |||
| description | ||||
| "IPv6 address of the next-hop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type leafref { | ||||
| path "../../../../../../../../rt:interfaces/" | ||||
| + "rt:interface/rt:name"; | ||||
| } | ||||
| description | ||||
| "Name of the outgoing interface. | ||||
| Only interfaces configured for the parent routing | Only interfaces configured for the ancestor | |||
| instance can be given. | routing instance can be given."; | |||
| "; | } | |||
| uses rt:next-hop-classifiers; | ||||
| } | } | |||
| uses rt:nexthop-classifiers; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC methods */ | /* RPC methods */ | |||
| augment "/rt:active-route/rt:input/rt:destination-address" { | augment "/rt:active-route/rt:input/rt:destination-address" { | |||
| skipping to change at page 68, line 17 ¶ | skipping to change at page 67, line 49 ¶ | |||
| description | description | |||
| "This leaf augments the reply to the 'rt:active-route' | "This leaf augments the reply to the 'rt:active-route' | |||
| operation."; | operation."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" | |||
| + "rt:simple-nexthop" { | + "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-nexthop' case in the reply to | "This leaf augments the 'simple-next-hop' case in the reply to | |||
| the 'rt:active-route' operation."; | the 'rt:active-route' operation."; | |||
| leaf gateway { | leaf next-hop { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the gateway."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route/rt:nexthop-options/" | augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" | |||
| + "rt:nexthop-list/rt:nexthop" { | + "rt:next-hop-list/rt:next-hop-list/rt: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."; | |||
| } | } | |||
| if-feature rt:multipath-routes; | if-feature rt:multipath-routes; | |||
| description | description | |||
| "This leaf augments the 'nexthop-list' case in the reply to the | "This leaf augments the 'next-hop-list' case in the reply to | |||
| 'rt:active-route' operation."; | the 'rt:active-route' operation."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the nexthop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <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). | |||
| skipping to change at page 73, line 31 ¶ | skipping to change at page 73, line 31 ¶ | |||
| September 2010. | September 2010. | |||
| [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
| Bierman, "NETCONF Configuration Protocol", RFC 6241, | Bierman, "NETCONF Configuration Protocol", RFC 6241, | |||
| June 2011. | June 2011. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, July 2013. | RFC 6991, July 2013. | |||
| [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | |||
| Management", draft-ietf-netmod-interfaces-cfg-13 (work in | Management", draft-ietf-netmod-interfaces-cfg-15 (work in | |||
| progress), November 2013. | progress), December 2013. | |||
| [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", | [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", | |||
| draft-ietf-netmod-ip-cfg-11 (work in progress), | draft-ietf-netmod-ip-cfg-12 (work in progress), | |||
| October 2013. | January 2014. | |||
| 13.2. Informative References | 13.2. Informative References | |||
| [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | |||
| Data Model Documents", RFC 6087, January 2011. | Data Model Documents", RFC 6087, January 2011. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, June 2011. | |||
| Appendix A. The Complete Data Trees | Appendix A. The Complete Data Trees | |||
| skipping to change at page 74, line 26 ¶ | skipping to change at page 74, line 26 ¶ | |||
| +--rw routing | +--rw routing | |||
| +--rw routing-instance* [name] | +--rw routing-instance* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw type? identityref | | +--rw type? identityref | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw router-id? yang:dotted-quad | | +--rw router-id? yang:dotted-quad | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw default-ribs {multiple-ribs}? | | +--rw default-ribs {multiple-ribs}? | |||
| | | +--rw default-rib* [address-family] | | | +--rw default-rib* [address-family] | |||
| | | +--rw address-family identityref | | | +--rw address-family identityref | |||
| | | +--rw name string | | | +--rw rib-name string | |||
| | +--rw interfaces | | +--rw interfaces | |||
| | | +--rw interface* [name] | | | +--rw interface* [name] | |||
| | | +--rw name if:interface-ref | | | +--rw name if:interface-ref | |||
| | | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | | +--rw v6ur:send-advertisements? boolean | | | +--rw v6ur:send-advertisements? boolean | |||
| | | +--rw v6ur:max-rtr-adv-interval? uint16 | | | +--rw v6ur:max-rtr-adv-interval? uint16 | |||
| | | +--rw v6ur:min-rtr-adv-interval? uint16 | | | +--rw v6ur:min-rtr-adv-interval? uint16 | |||
| | | +--rw v6ur:managed-flag? boolean | | | +--rw v6ur:managed-flag? boolean | |||
| | | +--rw v6ur:other-config-flag? boolean | | | +--rw v6ur:other-config-flag? boolean | |||
| | | +--rw v6ur:link-mtu? uint32 | | | +--rw v6ur:link-mtu? uint32 | |||
| | | +--rw v6ur:reachable-time? uint32 | | | +--rw v6ur:reachable-time? uint32 | |||
| | | +--rw v6ur:retrans-timer? uint32 | | | +--rw v6ur:retrans-timer? uint32 | |||
| | | +--rw v6ur:cur-hop-limit? uint8 | | | +--rw v6ur:cur-hop-limit? uint8 | |||
| | | +--rw v6ur:default-lifetime? uint16 | | | +--rw v6ur:default-lifetime? uint16 | |||
| | | +--rw v6ur:prefix-list | | | +--rw v6ur:prefix-list | |||
| | | +--rw v6ur:prefix* [prefix-spec] | | | +--rw v6ur:prefix* [prefix-spec] | |||
| | | +--rw v6ur:prefix-spec inet:ipv6-prefix | | | +--rw v6ur:prefix-spec inet:ipv6-prefix | |||
| | | +--rw (control-adv-prefixes)? | | | +--rw (control-adv-prefixes)? | |||
| | | +--:(no-advertise) | | | +--:(no-advertise) | |||
| | | | +--rw v6ur:no-advertise? empty | | | | +--rw v6ur:no-advertise? empty | |||
| | | +--:(advertise) | | | +--:(advertise) | |||
| | | +--rw v6ur:valid-lifetime? uint32 | | | +--rw v6ur:valid-lifetime? uint32 | |||
| | | +--rw v6ur:on-link-flag? boolean | | | +--rw v6ur:on-link-flag? boolean | |||
| | | +--rw v6ur:preferred-lifetime? uint32 | | | +--rw v6ur:preferred-lifetime? uint32 | |||
| | | +--rw v6ur:autonomous-flag? boolean | | | +--rw v6ur:autonomous-flag? boolean | |||
| | +--rw routing-protocols | | +--rw routing-protocols | |||
| | +--rw routing-protocol* [name] | | +--rw routing-protocol* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw type identityref | | +--rw type identityref | |||
| | +--rw connected-ribs {multiple-ribs}? | | +--rw connected-ribs {multiple-ribs}? | |||
| | | +--rw connected-rib* [rib-name] | | | +--rw connected-rib* [rib-name] | |||
| | | +--rw rib-name rib-ref | | | +--rw rib-name rib-ref | |||
| | | +--rw import-filter? route-filter-ref | | | +--rw import-filter? route-filter-ref | |||
| | | +--rw export-filter? route-filter-ref | | | +--rw export-filter? route-filter-ref | |||
| | +--rw static-routes | | +--rw static-routes | |||
| | +--rw v4ur:ipv4 | | +--rw v4ur:ipv4 | |||
| | | +--rw v4ur:route* [id] | | | +--rw v4ur:route* [id] | |||
| | | +--rw v4ur:id uint32 | | | +--rw v4ur:id uint32 | |||
| | | +--rw v4ur:description? string | | | +--rw v4ur:description? string | |||
| | | +--rw v4ur:destination-prefix inet:ipv4-prefix | | | +--rw v4ur:destination-prefix inet:ipv4-prefix | |||
| | | +--rw (nexthop-options) | | | +--rw (next-hop-options) | |||
| | | +--:(special-nexthop) | | | +--:(special-next-hop) | |||
| | | | +--rw v4ur:special-nexthop? enumeration | | | | +--rw v4ur:special-next-hop? enumeration | |||
| | | +--:(simple-nexthop) | | | +--:(simple-next-hop) | |||
| | | | +--rw v4ur:gateway? inet:ipv4-address | | | | +--rw v4ur:next-hop? inet:ipv4-address | |||
| | | | +--rw v4ur:outgoing-interface? leafref | | | | +--rw v4ur:outgoing-interface? leafref | |||
| | | +--:(nexthop-list) {rt:multipath-routes}? | | | +--:(next-hop-list) {rt:multipath-routes}? | |||
| | | +--rw v4ur:nexthop* [id] | | | +--rw v4ur:next-hop-list | |||
| | | +--rw v4ur:id uint32 | | | +--rw v4ur:next-hop* [id] | |||
| | | +--rw v4ur:address? inet:ipv4-address | | | +--rw v4ur:id uint32 | |||
| | | +--rw v4ur:outgoing-interface? leafref | | | +--rw v4ur:address? | |||
| | | +--rw v4ur:priority? enumeration | | | +--rw v4ur:outgoing-interface? | |||
| | | +--rw v4ur:weight? uint8 | | | +--rw v4ur:priority? enumeration | |||
| | | +--rw v4ur:weight? uint8 | ||||
| | +--rw v6ur:ipv6 | | +--rw v6ur:ipv6 | |||
| | +--rw v6ur:route* [id] | | +--rw v6ur:route* [id] | |||
| | +--rw v6ur:id uint32 | | +--rw v6ur:id uint32 | |||
| | +--rw v6ur:description? string | | +--rw v6ur:description? string | |||
| | +--rw v6ur:destination-prefix inet:ipv6-prefix | | +--rw v6ur:destination-prefix inet:ipv6-prefix | |||
| | +--rw (nexthop-options) | | +--rw (next-hop-options) | |||
| | +--:(special-nexthop) | | +--:(special-next-hop) | |||
| | | +--rw v6ur:special-nexthop? enumeration | | | +--rw v6ur:special-next-hop? enumeration | |||
| | +--:(simple-nexthop) | | +--:(simple-next-hop) | |||
| | | +--rw v6ur:gateway? inet:ipv6-address | | | +--rw v6ur:next-hop? inet:ipv6-address | |||
| | | +--rw v6ur:outgoing-interface? leafref | | | +--rw v6ur:outgoing-interface? leafref | |||
| | +--:(nexthop-list) {rt:multipath-routes}? | | +--:(next-hop-list) {rt:multipath-routes}? | |||
| | +--rw v6ur:nexthop* [id] | | +--rw v6ur:next-hop-list | |||
| | +--rw v6ur:id uint32 | | +--rw v6ur:next-hop* [id] | |||
| | +--rw v6ur:address? inet:ipv6-address | | +--rw v6ur:id uint32 | |||
| | +--rw v6ur:outgoing-interface? leafref | | +--rw v6ur:address? | |||
| | +--rw v6ur:priority? enumeration | | +--rw v6ur:outgoing-interface? | |||
| | +--rw v6ur:weight? uint8 | | +--rw v6ur:priority? enumeration | |||
| | +--rw v6ur:weight? uint8 | ||||
| +--rw ribs | +--rw ribs | |||
| | +--rw rib* [name] | | +--rw rib* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw address-family identityref | | +--rw address-family identityref | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw recipient-ribs {multiple-ribs}? | | +--rw recipient-ribs {multiple-ribs}? | |||
| | +--rw recipient-rib* [rib-name] | | +--rw recipient-rib* [rib-name] | |||
| | +--rw rib-name rib-ref | | +--rw rib-name rib-ref | |||
| | +--rw filter? route-filter-ref | | +--rw filter? route-filter-ref | |||
| +--rw route-filters | +--rw route-filters | |||
| +--rw route-filter* [name] | +--rw route-filter* [name] | |||
| +--rw name string | +--rw name string | |||
| +--rw description? string | +--rw description? string | |||
| +--rw type identityref | +--rw type identityref | |||
| A.2. Operational State Data | A.2. Operational State Data | |||
| +--ro routing-state | +--ro routing-state | |||
| +--ro routing-instance* [name] | +--ro routing-instance* [name] | |||
| | +--ro name string | | +--ro name string | |||
| | +--ro id? uint64 | | +--ro id uint64 | |||
| | +--ro type? identityref | | +--ro type? identityref | |||
| | +--ro router-id? yang:dotted-quad | | +--ro router-id? yang:dotted-quad | |||
| | +--ro default-ribs | | +--ro default-ribs | |||
| | | +--ro default-rib* [address-family] | | | +--ro default-rib* [address-family] | |||
| | | +--ro address-family identityref | | | +--ro address-family identityref | |||
| | | +--ro rib-id rib-state-ref | | | +--ro rib-name rib-state-ref | |||
| | +--ro interfaces | | +--ro interfaces | |||
| | | +--ro interface* [name] | | | +--ro interface* [name] | |||
| | | +--ro name if:interface-state-ref | | | +--ro name if:interface-state-ref | |||
| | | +--ro v6ur:ipv6-router-advertisements | | | +--ro v6ur:ipv6-router-advertisements | |||
| | | +--ro v6ur:send-advertisements? boolean | | | +--ro v6ur:send-advertisements? boolean | |||
| | | +--ro v6ur:max-rtr-adv-interval? uint16 | | | +--ro v6ur:max-rtr-adv-interval? uint16 | |||
| | | +--ro v6ur:min-rtr-adv-interval? uint16 | | | +--ro v6ur:min-rtr-adv-interval? uint16 | |||
| | | +--ro v6ur:managed-flag? boolean | | | +--ro v6ur:managed-flag? boolean | |||
| | | +--ro v6ur:other-config-flag? boolean | | | +--ro v6ur:other-config-flag? boolean | |||
| | | +--ro v6ur:link-mtu? uint32 | | | +--ro v6ur:link-mtu? uint32 | |||
| | | +--ro v6ur:reachable-time? uint32 | | | +--ro v6ur:reachable-time? uint32 | |||
| | | +--ro v6ur:retrans-timer? uint32 | | | +--ro v6ur:retrans-timer? uint32 | |||
| | | +--ro v6ur:cur-hop-limit? uint8 | | | +--ro v6ur:cur-hop-limit? uint8 | |||
| | | +--ro v6ur:default-lifetime? uint16 | | | +--ro v6ur:default-lifetime? uint16 | |||
| | | +--ro v6ur:prefix-list | | | +--ro v6ur:prefix-list | |||
| | | +--ro v6ur:prefix* [prefix-spec] | | | +--ro v6ur:prefix* [prefix-spec] | |||
| | | +--ro v6ur:prefix-spec inet:ipv6-prefix | | | +--ro v6ur:prefix-spec inet:ipv6-prefix | |||
| | | +--ro v6ur:valid-lifetime? uint32 | | | +--ro v6ur:valid-lifetime? uint32 | |||
| | | +--ro v6ur:on-link-flag? boolean | | | +--ro v6ur:on-link-flag? boolean | |||
| | | +--ro v6ur:preferred-lifetime? uint32 | | | +--ro v6ur:preferred-lifetime? uint32 | |||
| | | +--ro v6ur:autonomous-flag? boolean | | | +--ro v6ur:autonomous-flag? boolean | |||
| | +--ro routing-protocols | | +--ro routing-protocols | |||
| | +--ro routing-protocol* [name] | | +--ro routing-protocol* [name] | |||
| | +--ro name string | | +--ro name string | |||
| | +--ro type identityref | | +--ro type identityref | |||
| | +--ro connected-ribs {multiple-ribs}? | | +--ro connected-ribs | |||
| | +--ro connected-rib* [rib-id] | | +--ro connected-rib* [rib-name] | |||
| | +--ro rib-id rib-state-ref | | +--ro rib-name rib-state-ref | |||
| | +--ro import-filter? route-filter-state-ref | | +--ro import-filter? route-filter-state-ref | |||
| | +--ro export-filter? route-filter-state-ref | | +--ro export-filter? route-filter-state-ref | |||
| +--ro ribs | +--ro ribs | |||
| | +--ro rib* [name] | | +--ro rib* [name] | |||
| | +--ro name string | | +--ro name string | |||
| | +--ro id? uint64 | | +--ro id uint64 | |||
| | +--ro address-family identityref | | +--ro address-family identityref | |||
| | +--ro routes | | +--ro routes | |||
| | | +--ro route* | | | +--ro route* [id] | |||
| | | +--ro id? uint64 | | | +--ro id uint64 | |||
| | | +--ro (nexthop-options) | | | +--ro (next-hop-options) | |||
| | | | +--:(special-nexthop) | | | | +--:(special-next-hop) | |||
| | | | | +--ro special-nexthop? enumeration | | | | | +--ro special-next-hop? enumeration | |||
| | | | +--:(simple-nexthop) | | | | +--:(simple-next-hop) | |||
| | | | | +--ro outgoing-interface? leafref | | | | | +--ro outgoing-interface? leafref | |||
| | | | | +--ro v4ur:gateway? inet:ipv4-address | | | | | +--ro v4ur:next-hop? inet:ipv4-address | |||
| | | | | +--ro v6ur:gateway? inet:ipv6-address | | | | | +--ro v6ur:next-hop? inet:ipv6-address | |||
| | | | +--:(nexthop-list) {multipath-routes}? | | | | +--:(next-hop-list) {multipath-routes}? | |||
| | | | +--ro nexthop* | | | | +--ro next-hop-list | |||
| | | | +--ro id? uint64 | | | | +--ro next-hop* [id] | |||
| | | | +--ro outgoing-interface? leafref | | | | +--ro id uint64 | |||
| | | | +--ro priority? enumeration | | | | +--ro outgoing-interface? leafref | |||
| | | | +--ro weight? uint8 | | | | +--ro priority? enumeration | |||
| | | | +--ro v4ur:address? inet:ipv4-address | | | | +--ro weight? uint8 | |||
| | | | +--ro v6ur:address? inet:ipv6-address | | | | +--ro v4ur:address? inet:ipv4-address | |||
| | | | +--ro v6ur:address? inet:ipv6-address | ||||
| | | +--ro source-protocol identityref | | | +--ro source-protocol identityref | |||
| | | +--ro last-updated? yang:date-and-time | | | +--ro last-updated? yang:date-and-time | |||
| | | +--ro v4ur:destination-prefix? inet:ipv4-prefix | | | +--ro v4ur:destination-prefix? inet:ipv4-prefix | |||
| | | +--ro v6ur:destination-prefix? inet:ipv6-prefix | | | +--ro v6ur:destination-prefix? inet:ipv6-prefix | |||
| | +--ro recipient-ribs {multiple-ribs}? | | +--ro recipient-ribs {multiple-ribs}? | |||
| | +--ro recipient-rib* [rib-id] | | +--ro recipient-rib* [rib-name] | |||
| | +--ro rib-id rib-state-ref | | +--ro rib-name rib-state-ref | |||
| | +--ro filter? route-filter-state-ref | | +--ro filter? route-filter-state-ref | |||
| +--ro route-filters | +--ro route-filters | |||
| +--ro route-filter* [name] | +--ro route-filter* [name] | |||
| +--ro name string | +--ro name string | |||
| +--ro type identityref | +--ro type identityref | |||
| Appendix B. Example: Adding a New Routing Protocol | Appendix B. Minimum Implementation | |||
| Some parts and options of the core routing model, such as route | ||||
| filters or multiple routing tables, are intended only for advanced | ||||
| routers. This appendix gives basic non-normative guidelines for | ||||
| implementing a bare minimum of available functions. Such an | ||||
| implementation may be used for hosts or very simple routers. | ||||
| A minimum implementation will provide a single system-controlled | ||||
| routing instance, and will not allow clients to create any user- | ||||
| controlled instances. | ||||
| Typically, neither of the features defined in the "ietf-routing" | ||||
| module ("multiple-ribs" and "multipath-routes") will be supported. | ||||
| This means that: | ||||
| o A single system-controlled RIB (routing table) is available for | ||||
| each supported address family - IPv4, IPv6 or both. These RIBs | ||||
| are the default RIBs, so they will also appear as system- | ||||
| controlled entries of the "default-rib" list in operational state | ||||
| data. No user-controlled RIBs are allowed. | ||||
| o Each route has no more than one "next-hop", "outgoing-interface" | ||||
| or "special-next-hop". | ||||
| In addition to the mandatory instance of the "direct" pseudo- | ||||
| protocol, a minimum implementation should support configured | ||||
| instance(s) of the "static" pseudo-protocol. Even with a single RIB | ||||
| 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 configuring appropriate route filters | ||||
| ("allow-all-route-filter" or "deny-all-route-filter"). | ||||
| Platforms with severely constrained resources may use deviations for | ||||
| restricting the data model, e.g., limiting the number of "static" | ||||
| routing protocol instances, preventing any route filters to be | ||||
| configured etc. | ||||
| Appendix C. Example: Adding a New Routing Protocol | ||||
| This appendix demonstrates how the core routing data model can be | This appendix demonstrates how the core routing data model can be | |||
| extended to support a new routing protocol. The YANG module | extended to support a new routing protocol. The YANG module | |||
| "example-rip" shown below is intended only as an illustration rather | "example-rip" shown below is intended only as an illustration rather | |||
| than a real definition of a data model for the RIP routing protocol. | than a real definition of a data model for the RIP routing protocol. | |||
| For the sake of brevity, we do not follow all the guidelines | For the sake of brevity, we do not follow all the guidelines | |||
| specified in [RFC6087]. See also Section 5.4.2. | specified in [RFC6087]. See also Section 5.4.2. | |||
| module example-rip { | module example-rip { | |||
| skipping to change at page 81, line 5 ¶ | skipping to change at page 82, line 5 ¶ | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| default "30"; | default "30"; | |||
| description | description | |||
| "Time interval between periodic updates."; | "Time interval between periodic updates."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Appendix C. Example: NETCONF <get> Reply | Appendix D. Example: NETCONF <get> Reply | |||
| This section contains a sample reply to the NETCONF <get> message, | This section contains a sample reply to the NETCONF <get> message, | |||
| which could be sent by a server supporting (i.e., advertising them in | which could be sent by a server supporting (i.e., advertising them in | |||
| the NETCONF <hello> message) the following YANG modules: | the NETCONF <hello> message) the following YANG modules: | |||
| o ietf-interfaces [YANG-IF], | o ietf-interfaces [YANG-IF], | |||
| o ietf-ip [YANG-IP], | o ietf-ip [YANG-IP], | |||
| o ietf-routing (Section 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 setup as shown in Figure 5: router "A" | We assume a simple network setup as shown in Figure 5: router "A" | |||
| uses static default routes with the "ISP" router as the next hop. | uses static default routes with the "ISP" router as the next-hop. | |||
| IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
| interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
| +-----------------+ | +-----------------+ | |||
| | | | | | | |||
| | Router ISP | | | Router ISP | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| |2001:db8:0:1::2 | |2001:db8:0:1::2 | |||
| |192.0.2.2 | |192.0.2.2 | |||
| skipping to change at page 82, line 9 ¶ | skipping to change at page 83, line 9 ¶ | |||
| 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: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>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> | |||
| skipping to change at page 82, line 39 ¶ | skipping to change at page 83, line 40 ¶ | |||
| <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>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> | |||
| skipping to change at page 83, line 17 ¶ | skipping to change at page 84, line 18 ¶ | |||
| <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>ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | |||
| <if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
| <if:statistics> | <if:statistics> | |||
| <if:discontinuity-time> | <if:discontinuity-time> | |||
| 2013-07-02T17:11:27+00:58 | 2013-07-02T17:11:27+00:58 | |||
| </if:discontinuity-time> | </if:discontinuity-time> | |||
| </if:statistics> | </if:statistics> | |||
| <ip:ipv4> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:mtu>1500</ip:mtu> | ||||
| <ip:address> | ||||
| <ip:ip>192.0.2.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:1::1</ip:ip> | ||||
| <ip:prefix-length>64</ip:prefix-length> | ||||
| </ip:address> | ||||
| </ip:ipv6> | ||||
| </if:interface> | </if:interface> | |||
| <if:interface> | <if:interface> | |||
| <if:name>eth1</if:name> | <if:name>eth1</if:name> | |||
| <if:type>ethernetCsmacd</if:type> | <if:type>ianaift:ethernetCsmacd</if:type> | |||
| <if:oper-status>up</if:oper-status> | <if:oper-status>up</if:oper-status> | |||
| <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | |||
| <if:statistics> | <if:statistics> | |||
| <if:discontinuity-time> | <if:discontinuity-time> | |||
| 2013-07-02T17:11:27+00:59 | 2013-07-02T17:11:27+00:59 | |||
| </if:discontinuity-time> | </if:discontinuity-time> | |||
| </if:statistics> | </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:interface> | |||
| </if:interfaces-state> | </if:interfaces-state> | |||
| <rt:routing> | <rt:routing> | |||
| <rt:routing-instance> | <rt:routing-instance> | |||
| <rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
| <rt:description>Router A</rt:description> | <rt:description>Router A</rt:description> | |||
| <rt:interfaces> | <rt:interfaces> | |||
| <rt:interface> | <rt:interface> | |||
| <rt:name>eth1</rt:name> | <rt:name>eth1</rt:name> | |||
| <v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
| skipping to change at page 84, line 4 ¶ | skipping to change at page 85, line 38 ¶ | |||
| <rt:interfaces> | <rt:interfaces> | |||
| <rt:interface> | <rt:interface> | |||
| <rt:name>eth1</rt:name> | <rt:name>eth1</rt:name> | |||
| <v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | <v6ur:send-advertisements>true</v6ur:send-advertisements> | |||
| <v6ur:prefix-list> | <v6ur:prefix-list> | |||
| <v6ur:prefix> | <v6ur:prefix> | |||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | |||
| </v6ur:prefix> | </v6ur:prefix> | |||
| </v6ur:prefix-list> | </v6ur:prefix-list> | |||
| </v6ur:ipv6-router-advertisements> | </v6ur:ipv6-router-advertisements> | |||
| </rt:interface> | </rt:interface> | |||
| </rt:interfaces> | </rt:interfaces> | |||
| <rt:routing-protocols> | <rt:routing-protocols> | |||
| <rt:routing-protocol> | <rt:routing-protocol> | |||
| <rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
| <rt:description> | <rt:description> | |||
| Static routing is used for the internal network. | Static routing is used for the internal network. | |||
| </rt:description> | </rt:description> | |||
| <rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
| <rt:static-routes> | <rt:static-routes> | |||
| <v4ur:ipv4> | <v4ur:ipv4> | |||
| <v4ur:route> | <v4ur:route> | |||
| <v4ur:id>1</v4ur:id> | <v4ur:id>1</v4ur:id> | |||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | |||
| <v4ur:gateway>192.0.2.2</v4ur:gateway> | <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | |||
| </v4ur:route> | </v4ur:route> | |||
| </v4ur:ipv4> | </v4ur:ipv4> | |||
| <v6ur:ipv6> | <v6ur:ipv6> | |||
| <v6ur:route> | <v6ur:route> | |||
| <v6ur:id>1</v6ur:id> | <v6ur:id>1</v6ur:id> | |||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
| <v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> | <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | |||
| </v6ur:route> | </v6ur:route> | |||
| </v6ur:ipv6> | </v6ur:ipv6> | |||
| </rt:static-routes> | </rt:static-routes> | |||
| </rt:routing-protocol> | </rt:routing-protocol> | |||
| </rt:routing-protocols> | </rt:routing-protocols> | |||
| </rt:routing-instance> | </rt:routing-instance> | |||
| </rt:routing> | </rt:routing> | |||
| <rt:routing-state> | <rt:routing-state> | |||
| <rt:routing-instance> | <rt:routing-instance> | |||
| <rt:name>rtr0</rt:name> | <rt:name>rtr0</rt:name> | |||
| <rt:id>2718281828</rt:id> | ||||
| <rt:router-id>192.0.2.1</rt:router-id> | <rt:router-id>192.0.2.1</rt:router-id> | |||
| <rt:default-ribs> | <rt:default-ribs> | |||
| <rt:default-rib> | <rt:default-rib> | |||
| <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
| <rt:rib-id>897932384</rt:rib-id> | <rt:rib-name>ipv4-master</rt:rib-name> | |||
| </rt:default-rib> | </rt:default-rib> | |||
| <rt:default-rib> | <rt:default-rib> | |||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
| <rt:rib-id>751058209</rt:rib-id> | <rt:rib-name>ipv6-master</rt:rib-name> | |||
| </rt:default-rib> | </rt:default-rib> | |||
| </rt:default-ribs> | </rt:default-ribs> | |||
| <rt:interfaces> | <rt:interfaces> | |||
| <rt:interface> | <rt:interface> | |||
| <rt:name>eth0</rt:name> | <rt:name>eth0</rt:name> | |||
| </rt:interface> | </rt:interface> | |||
| <rt:interface> | <rt:interface> | |||
| <rt:name>eth1</rt:name> | <rt:name>eth1</rt:name> | |||
| <v6ur:ipv6-router-advertisements> | <v6ur:ipv6-router-advertisements> | |||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | <v6ur:send-advertisements>true</v6ur:send-advertisements> | |||
| skipping to change at page 85, line 25 ¶ | skipping to change at page 87, line 11 ¶ | |||
| </rt:interfaces> | </rt:interfaces> | |||
| <rt:routing-protocols> | <rt:routing-protocols> | |||
| <rt:routing-protocol> | <rt:routing-protocol> | |||
| <rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
| <rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
| </rt:routing-protocol> | </rt:routing-protocol> | |||
| </rt:routing-protocols> | </rt:routing-protocols> | |||
| </rt:routing-instance> | </rt:routing-instance> | |||
| <rt:ribs> | <rt:ribs> | |||
| <rt:rib> | <rt:rib> | |||
| <rt:name>ipv4-main</rt:name> | <rt:name>ipv4-master</rt:name> | |||
| <rt:id>897932384</rt:id> | <rt:id>897932384</rt:id> | |||
| <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | |||
| <rt:routes> | <rt:routes> | |||
| <rt:route> | <rt:route> | |||
| <rt:id>626433832</rt:id> | <rt:id>626433832</rt:id> | |||
| <v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | <v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
| </rt:route> | </rt:route> | |||
| skipping to change at page 85, line 49 ¶ | skipping to change at page 87, line 35 ¶ | |||
| 198.51.100.0/24 | 198.51.100.0/24 | |||
| </v4ur:destination-prefix> | </v4ur:destination-prefix> | |||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
| </rt:route> | </rt:route> | |||
| <rt:route> | <rt:route> | |||
| <rt:id>971693993</rt:id> | <rt:id>971693993</rt:id> | |||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | |||
| <rt:source-protocol>rt:static</rt:source-protocol> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
| <v4ur:gateway>192.0.2.2</v4ur:gateway> | <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | |||
| <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | |||
| </rt:route> | </rt:route> | |||
| </rt:routes> | </rt:routes> | |||
| </rt:rib> | </rt:rib> | |||
| <rt:rib> | <rt:rib> | |||
| <rt:name>ipv6-main</rt:name> | <rt:name>ipv6-master</rt:name> | |||
| <rt:id>751058209</rt:id> | <rt:id>751058209</rt:id> | |||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | |||
| <rt:routes> | <rt:routes> | |||
| <rt:route> | <rt:route> | |||
| <rt:id>749445923</rt:id> | <rt:id>749445923</rt:id> | |||
| <v6ur:destination-prefix> | <v6ur:destination-prefix> | |||
| 2001:db8:0:1::/64 | 2001:db8:0:1::/64 | |||
| </v6ur:destination-prefix> | </v6ur:destination-prefix> | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| skipping to change at page 86, line 33 ¶ | skipping to change at page 88, line 18 ¶ | |||
| <v6ur:destination-prefix> | <v6ur:destination-prefix> | |||
| 2001:db8:0:2::/64 | 2001:db8:0:2::/64 | |||
| </v6ur:destination-prefix> | </v6ur:destination-prefix> | |||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
| </rt:route> | </rt:route> | |||
| <rt:route> | <rt:route> | |||
| <rt:id>862089986</rt:id> | <rt:id>862089986</rt:id> | |||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | |||
| <v6ur:gateway>2001:db8:0:1::2</v6ur:gateway> | <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | |||
| <rt:source-protocol>rt:static</rt:source-protocol> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
| <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | |||
| </rt:route> | </rt:route> | |||
| </rt:routes> | </rt:routes> | |||
| </rt:rib> | </rt:rib> | |||
| </rt:ribs> | </rt:ribs> | |||
| </rt:routing-state> | </rt:routing-state> | |||
| </data> | </data> | |||
| </rpc-reply> | </rpc-reply> | |||
| Appendix D. 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. | |||
| D.1. Changes Between Versions -11 and -12 | E.1. Changes Between Versions -12 and -13 | |||
| o Wrote appendix about minimum implementation. | ||||
| o Remove "when" statement for IPv6 router interface operational | ||||
| state - it was dependent on a config value that may not be | ||||
| present. | ||||
| o Extra container for the next-hop list. | ||||
| o Names rather than numeric ids are used for referring to list | ||||
| entries in operational state. | ||||
| o Numeric ids are always declared as mandatory and unique. Their | ||||
| description states that they are ephemeral. | ||||
| o Descriptions of "name" keys in operational state lists are | ||||
| required to be persistent. | ||||
| o | ||||
| o Removed "if-feature multiple-ribs;" from connected-ribs. | ||||
| o "rib-name" instead of "name" is used as the name of leafref nodes. | ||||
| o "next-hop" instead of "nexthop" or "gateway" used throughout, both | ||||
| in node names and text. | ||||
| E.2. 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. | |||
| D.2. Changes Between Versions -10 and -11 | E.3. 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 87, line 46 ¶ | skipping to change at page 90, line 29 ¶ | |||
| 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. | |||
| D.3. Changes Between Versions -09 and -10 | E.4. Changes Between Versions -09 and -10 | |||
| o Added subtree for operational state data ("/routing-state"). | o Added subtree for operational state data ("/routing-state"). | |||
| o Terms "system-controlled entry" and "user-controlled entry" | o Terms "system-controlled entry" and "user-controlled entry" | |||
| defined and used. | defined and used. | |||
| o New feature "user-defined-routing-tables". Nodes that are useful | o New feature "user-defined-routing-tables". Nodes that are useful | |||
| only with user-defined routing tables are now conditional. | only with user-defined routing tables are now conditional. | |||
| o Added grouping "router-id". | o Added grouping "router-id". | |||
| o In routing tables, "source-protocol" attribute of routes now | o In routing tables, "source-protocol" attribute of routes now | |||
| reports only protocol type, and its datatype is "identityref". | reports only protocol type, and its datatype is "identityref". | |||
| o Renamed "main-routing-table" to "default-routing-table". | o Renamed "main-routing-table" to "default-routing-table". | |||
| D.4. Changes Between Versions -08 and -09 | E.5. Changes Between Versions -08 and -09 | |||
| o Fixed "must" expresion for "connected-routing-table". | o Fixed "must" expresion for "connected-routing-table". | |||
| o Simplified "must" expression for "main-routing-table". | o Simplified "must" expression for "main-routing-table". | |||
| o Moved per-interface configuration of a new routing protocol under | o Moved per-interface configuration of a new routing protocol under | |||
| 'routing-protocol'. This also affects the 'example-rip' module. | 'routing-protocol'. This also affects the 'example-rip' module. | |||
| D.5. Changes Between Versions -07 and -08 | E.6. Changes Between Versions -07 and -08 | |||
| o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
| D.6. Changes Between Versions -06 and -07 | E.7. Changes Between Versions -06 and -07 | |||
| o The contents of <get-reply> in Appendix C was updated: "eth[01]" | o The contents of <get-reply> in Appendix 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. | |||
| D.7. Changes Between Versions -05 and -06 | E.8. 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 89, line 22 ¶ | skipping to change at page 92, line 5 ¶ | |||
| o Complete data tree is now in Appendix A. | o Complete data tree is now in Appendix A. | |||
| o Changed type of "source-protocol" from "leafref" to "string". | o Changed type of "source-protocol" from "leafref" to "string". | |||
| o Clarified the relationship between routing protocol instances and | o Clarified the relationship between routing protocol instances and | |||
| connected routing tables. | connected routing tables. | |||
| o Added a must constraint saying that a routing table connected to | o Added a must constraint saying that a routing table connected to | |||
| the direct pseudo-protocol must not be a main routing table. | the direct pseudo-protocol must not be a main routing table. | |||
| D.8. Changes Between Versions -04 and -05 | E.9. 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 90, line 8 ¶ | skipping to change at page 92, line 40 ¶ | |||
| o The "direct" pseudo-protocol is always connected to main routing | o The "direct" pseudo-protocol is always connected to main routing | |||
| tables. | tables. | |||
| o Entries in the list of connected routing tables renamed from | o Entries in the list of connected routing tables renamed from | |||
| "routing-table" to "connected-routing-table". | "routing-table" to "connected-routing-table". | |||
| o Added "must" constraint saying that a routing table must not be | o Added "must" constraint saying that a routing table must not be | |||
| its own recipient. | its own recipient. | |||
| D.9. Changes Between Versions -03 and -04 | E.10. Changes Between Versions -03 and -04 | |||
| o Changed "error-tag" for both RPC methods from "missing element" to | o Changed "error-tag" for both RPC methods from "missing element" to | |||
| "data-missing". | "data-missing". | |||
| o Removed the decrementing behavior for advertised IPv6 prefix | o Removed the decrementing behavior for advertised IPv6 prefix | |||
| parameters "valid-lifetime" and "preferred-lifetime". | parameters "valid-lifetime" and "preferred-lifetime". | |||
| o Changed the key of the static route lists from "seqno" to "id" | o Changed the key of the static route lists from "seqno" to "id" | |||
| because the routes needn't be sorted. | because the routes needn't be sorted. | |||
| o Added 'must' constraint saying that "preferred-lifetime" must not | o Added 'must' constraint saying that "preferred-lifetime" must not | |||
| be greater than "valid-lifetime". | be greater than "valid-lifetime". | |||
| D.10. Changes Between Versions -02 and -03 | E.11. 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 91, line 7 ¶ | skipping to change at page 93, line 37 ¶ | |||
| "ietf-ip". | "ietf-ip". | |||
| o Added "router-id" leaf. | o Added "router-id" leaf. | |||
| o Specified the names for IPv4/IPv6 unicast main routing tables. | o Specified the names for IPv4/IPv6 unicast main routing tables. | |||
| o Route parameter "last-modified" changed to "age". | o Route parameter "last-modified" changed to "age". | |||
| o Added container "recipient-routing-tables". | o Added container "recipient-routing-tables". | |||
| D.11. Changes Between Versions -01 and -02 | E.12. Changes Between Versions -01 and -02 | |||
| o Added module "ietf-ipv6-unicast-routing". | o Added module "ietf-ipv6-unicast-routing". | |||
| o The example in Appendix C now uses IP addresses from blocks | o The example in Appendix 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. | |||
| o The "when" statement is only used with "augment", "must" is used | o The "when" statement is only used with "augment", "must" is used | |||
| elsewhere. | elsewhere. | |||
| o Additional "must" statements were added. | o Additional "must" statements were added. | |||
| o The "route-content" grouping for IPv4 and IPv6 unicast now | o The "route-content" grouping for IPv4 and IPv6 unicast now | |||
| includes the material from the "ietf-routing" version via "uses | includes the material from the "ietf-routing" version via "uses | |||
| rt:route-content". | rt:route-content". | |||
| o Explanation of symbols in the tree representation of data model | o Explanation of symbols in the tree representation of data model | |||
| hierarchy. | hierarchy. | |||
| D.12. Changes Between Versions -00 and -01 | E.13. 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. 270 change blocks. | ||||
| 517 lines changed or deleted | 595 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/ | ||||