| < draft-ietf-netmod-routing-cfg-22.txt | draft-ietf-netmod-routing-cfg-23.txt > | |||
|---|---|---|---|---|
| NETMOD Working Group L. Lhotka | NETMOD Working Group L. Lhotka | |||
| Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
| Intended status: Standards Track A. Lindem | Intended status: Standards Track A. Lindem | |||
| Expires: January 6, 2017 Cisco Systems | Expires: February 19, 2017 Cisco Systems | |||
| July 05, 2016 | August 18, 2016 | |||
| A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
| draft-ietf-netmod-routing-cfg-22 | draft-ietf-netmod-routing-cfg-23 | |||
| Abstract | Abstract | |||
| This document contains a specification of three YANG modules and one | This document contains a specification of three YANG modules and one | |||
| submodule. Together they form the core routing data model which | submodule. Together they form the core routing data model which | |||
| serves as a framework for configuring and managing a routing | serves as a framework for configuring and managing a routing | |||
| subsystem. It is expected that these modules will be augmented by | subsystem. It is expected that these modules will be augmented by | |||
| additional YANG modules defining data models for control plane | additional YANG modules defining data models for control plane | |||
| protocols, route filters and other functions. The core routing data | protocols, route filters and other functions. The core routing data | |||
| model provides common building blocks for such extensions - routes, | model provides common building blocks for such extensions -- routes, | |||
| routing information bases (RIB), and control plane protocols. | routing information bases (RIB), and control plane protocols. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 6, 2017. | This Internet-Draft will expire on February 19, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | |||
| 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | |||
| 4.1. System-Controlled and User-Controlled List Entries . . . 8 | 4.1. System-Controlled and User-Controlled List Entries . . . 8 | |||
| 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 9 | 5. Basic Building Blocks . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5.1. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.2. Routing Information Base (RIB) . . . . . . . . . . . . . 9 | 5.2. Routing Information Base (RIB) . . . . . . . . . . . . . 9 | |||
| 5.3. Control Plane Protocol . . . . . . . . . . . . . . . . . 10 | 5.3. Control Plane Protocol . . . . . . . . . . . . . . . . . 10 | |||
| 5.3.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 10 | 5.3.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . 10 | |||
| 5.3.2. Defining New Control Plane Protocols . . . . . . . . 11 | 5.3.2. Defining New Control Plane Protocols . . . . . . . . 11 | |||
| 5.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 12 | 5.4. Parameters of IPv6 Router Advertisements . . . . . . . . 12 | |||
| 5.5. Parameters of IPv6 Router Advertisements . . . . . . . . 12 | ||||
| 6. Interactions with Other YANG Modules . . . . . . . . . . . . 13 | 6. Interactions with Other YANG Modules . . . . . . . . . . . . 13 | |||
| 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13 | 6.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . 13 | |||
| 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 13 | 6.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Routing Management YANG Module . . . . . . . . . . . . . . . 14 | 7. Routing Management YANG Module . . . . . . . . . . . . . . . 14 | |||
| 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 27 | 8. IPv4 Unicast Routing Management YANG Module . . . . . . . . . 26 | |||
| 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 33 | 9. IPv6 Unicast Routing Management YANG Module . . . . . . . . . 32 | |||
| 9.1. IPv6 Router Advertisements Submodule . . . . . . . . . . 38 | 9.1. IPv6 Router Advertisements Submodule . . . . . . . . . . 37 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 50 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 51 | 13.2. Informative References . . . . . . . . . . . . . . . . . 50 | |||
| Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 51 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . 51 | |||
| A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 51 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . 51 | |||
| A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 53 | A.2. State Data . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 55 | Appendix B. Minimum Implementation . . . . . . . . . . . . . . . 54 | |||
| Appendix C. Example: Adding a New Control Plane Protocol . . . . 55 | Appendix C. Example: Adding a New Control Plane Protocol . . . . 54 | |||
| Appendix D. Example: NETCONF <get> Reply . . . . . . . . . . . . 57 | Appendix D. Data Tree Example . . . . . . . . . . . . . . . . . 57 | |||
| Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 64 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 65 | |||
| E.1. Changes Between Versions -21 and -22 . . . . . . . . . . 64 | E.1. Changes Between Versions -22 and -23 . . . . . . . . . . 65 | |||
| E.2. Changes Between Versions -20 and -21 . . . . . . . . . . 64 | E.2. Changes Between Versions -21 and -22 . . . . . . . . . . 65 | |||
| E.3. Changes Between Versions -19 and -20 . . . . . . . . . . 64 | E.3. Changes Between Versions -20 and -21 . . . . . . . . . . 65 | |||
| E.4. Changes Between Versions -18 and -19 . . . . . . . . . . 64 | E.4. Changes Between Versions -19 and -20 . . . . . . . . . . 66 | |||
| E.5. Changes Between Versions -17 and -18 . . . . . . . . . . 65 | E.5. Changes Between Versions -18 and -19 . . . . . . . . . . 66 | |||
| E.6. Changes Between Versions -16 and -17 . . . . . . . . . . 65 | E.6. Changes Between Versions -17 and -18 . . . . . . . . . . 66 | |||
| E.7. Changes Between Versions -15 and -16 . . . . . . . . . . 66 | E.7. Changes Between Versions -16 and -17 . . . . . . . . . . 67 | |||
| E.8. Changes Between Versions -14 and -15 . . . . . . . . . . 66 | E.8. Changes Between Versions -15 and -16 . . . . . . . . . . 67 | |||
| E.9. Changes Between Versions -13 and -14 . . . . . . . . . . 66 | E.9. Changes Between Versions -14 and -15 . . . . . . . . . . 68 | |||
| E.10. Changes Between Versions -12 and -13 . . . . . . . . . . 67 | E.10. Changes Between Versions -13 and -14 . . . . . . . . . . 68 | |||
| E.11. Changes Between Versions -11 and -12 . . . . . . . . . . 67 | E.11. Changes Between Versions -12 and -13 . . . . . . . . . . 68 | |||
| E.12. Changes Between Versions -10 and -11 . . . . . . . . . . 68 | E.12. Changes Between Versions -11 and -12 . . . . . . . . . . 69 | |||
| E.13. Changes Between Versions -09 and -10 . . . . . . . . . . 68 | E.13. Changes Between Versions -10 and -11 . . . . . . . . . . 69 | |||
| E.14. Changes Between Versions -08 and -09 . . . . . . . . . . 68 | E.14. Changes Between Versions -09 and -10 . . . . . . . . . . 69 | |||
| E.15. Changes Between Versions -07 and -08 . . . . . . . . . . 69 | E.15. Changes Between Versions -08 and -09 . . . . . . . . . . 70 | |||
| E.16. Changes Between Versions -06 and -07 . . . . . . . . . . 69 | E.16. Changes Between Versions -07 and -08 . . . . . . . . . . 70 | |||
| E.17. Changes Between Versions -05 and -06 . . . . . . . . . . 69 | E.17. Changes Between Versions -06 and -07 . . . . . . . . . . 70 | |||
| E.18. Changes Between Versions -04 and -05 . . . . . . . . . . 70 | E.18. Changes Between Versions -05 and -06 . . . . . . . . . . 70 | |||
| E.19. Changes Between Versions -03 and -04 . . . . . . . . . . 70 | E.19. Changes Between Versions -04 and -05 . . . . . . . . . . 71 | |||
| E.20. Changes Between Versions -02 and -03 . . . . . . . . . . 71 | E.20. Changes Between Versions -03 and -04 . . . . . . . . . . 72 | |||
| E.21. Changes Between Versions -01 and -02 . . . . . . . . . . 71 | E.21. Changes Between Versions -02 and -03 . . . . . . . . . . 72 | |||
| E.22. Changes Between Versions -00 and -01 . . . . . . . . . . 72 | E.22. Changes Between Versions -01 and -02 . . . . . . . . . . 73 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 72 | E.23. Changes Between Versions -00 and -01 . . . . . . . . . . 73 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73 | ||||
| 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. Its | module with additional data specific to IPv6 unicast. Its | |||
| submodule "ietf-ipv6-router-advertisements" also augments the | submodule "ietf-ipv6-router-advertisements" also augments the | |||
| "ietf-interfaces" module [RFC7223] with IPv6 router configuration | "ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277] modules with | |||
| variables required by [RFC4861]. | IPv6 router configuration variables required by [RFC4861]. | |||
| These modules together define the so-called core routing data model, | These modules together define the so-called core routing data model, | |||
| which is intended as a basis for future data model development | which is intended as a basis for future data model development | |||
| covering more sophisticated routing systems. While these three | covering more sophisticated routing systems. While these three | |||
| modules can be directly used for simple IP devices with static | modules can be directly used for simple IP devices with static | |||
| routing (see Appendix B), their main purpose is to provide essential | routing (see Appendix B), their main purpose is to provide essential | |||
| building blocks for more complicated data models involving multiple | building blocks for more complicated data models involving multiple | |||
| control plane protocols, multicast routing, additional address | control plane protocols, multicast routing, additional address | |||
| families, and advanced functions such as route filtering or policy | families, and advanced functions such as route filtering or policy | |||
| routing. To this end, it is expected that the core routing data | routing. To this end, it is expected that the core routing data | |||
| skipping to change at page 4, line 21 ¶ | skipping to change at page 4, line 21 ¶ | |||
| The following terms are defined in [RFC6241]: | The following terms are defined in [RFC6241]: | |||
| o client, | o client, | |||
| o message, | o message, | |||
| o protocol operation, | o protocol operation, | |||
| o server. | o server. | |||
| The following terms are defined in [RFC6020]: | The following terms are defined in [I-D.ietf-netmod-rfc6020bis]: | |||
| o action, | ||||
| o augment, | o augment, | |||
| o configuration data, | o configuration data, | |||
| o container, | o container, | |||
| o container with presence, | o container with presence, | |||
| o data model, | o data model, | |||
| skipping to change at page 5, line 37 ¶ | skipping to change at page 5, line 37 ¶ | |||
| A simplified graphical representation of the complete data tree is | A simplified graphical representation of the complete data tree is | |||
| presented in Appendix A, and similar diagrams of its various subtrees | presented in Appendix A, and similar diagrams of its various subtrees | |||
| appear in the main text. | appear in the main text. | |||
| o Brackets "[" and "]" enclose list keys. | o Brackets "[" and "]" enclose list keys. | |||
| o Curly braces "{" and "}" contain names of optional features that | o Curly braces "{" and "}" contain names of optional features that | |||
| make the corresponding node conditional. | make the corresponding node conditional. | |||
| o Abbreviations before data node names: "rw" means configuration | o Abbreviations before data node names: "rw" means configuration | |||
| (read-write), "ro" state data (read-only), "-x" RPC operations, | (read-write), "ro" state data (read-only), "-x" RPC operations or | |||
| and "-n" notifications. | actions, and "-n" notifications. | |||
| o Symbols after data node names: "?" means an optional node, "!" a | o Symbols after data node names: "?" means an optional node, "!" a | |||
| container with presence, and "*" denotes a "list" or "leaf-list". | container with presence, and "*" denotes a "list" or "leaf-list". | |||
| o Parentheses enclose choice and case nodes, and case nodes are also | o Parentheses enclose choice and case nodes, and case nodes are also | |||
| marked with a colon (":"). | marked with a colon (":"). | |||
| o Ellipsis ("...") stands for contents of subtrees that are not | o Ellipsis ("...") stands for contents of subtrees that are not | |||
| shown. | shown. | |||
| 2.3. Prefixes in Data Node Names | 2.3. Prefixes in Data Node Names | |||
| In this document, names of data nodes, RPC operations and other data | In this document, names of data nodes, actions and other data model | |||
| model objects are often used without a prefix, as long as it is clear | objects are often used without a prefix, as long as it is clear from | |||
| from the context in which YANG module each name is defined. | the context in which YANG module each name is defined. Otherwise, | |||
| Otherwise, names are prefixed using the standard prefix associated | names are prefixed using the standard prefix associated with the | |||
| with the corresponding YANG module, as shown in Table 1. | corresponding YANG module, as shown in Table 1. | |||
| +--------+---------------------------+-----------+ | +--------+---------------------------+-----------+ | |||
| | Prefix | YANG module | Reference | | | Prefix | YANG module | Reference | | |||
| +--------+---------------------------+-----------+ | +--------+---------------------------+-----------+ | |||
| | if | ietf-interfaces | [RFC7223] | | | if | ietf-interfaces | [RFC7223] | | |||
| | ip | ietf-ip | [RFC7277] | | | ip | ietf-ip | [RFC7277] | | |||
| | rt | ietf-routing | Section 7 | | | rt | ietf-routing | Section 7 | | |||
| | v4ur | ietf-ipv4-unicast-routing | Section 8 | | | v4ur | ietf-ipv4-unicast-routing | Section 8 | | |||
| | v6ur | ietf-ipv6-unicast-routing | Section 9 | | | v6ur | ietf-ipv6-unicast-routing | Section 9 | | |||
| | yang | ietf-yang-types | [RFC6991] | | | yang | ietf-yang-types | [RFC6991] | | |||
| skipping to change at page 7, line 14 ¶ | skipping to change at page 7, line 14 ¶ | |||
| 4. The Design of the Core Routing Data Model | 4. The Design of the Core Routing Data Model | |||
| The core routing data model consists of three YANG modules and one | The core routing data model consists of three YANG modules and one | |||
| submodule. The first module, "ietf-routing", defines the generic | submodule. The first module, "ietf-routing", defines the generic | |||
| components of a routing system. The other two modules, "ietf-ipv4- | components of a routing system. The other two modules, "ietf-ipv4- | |||
| unicast-routing" and "ietf-ipv6-unicast-routing", augment the "ietf- | unicast-routing" and "ietf-ipv6-unicast-routing", augment the "ietf- | |||
| routing" module with additional data nodes that are needed for IPv4 | routing" module with additional data nodes that are needed for IPv4 | |||
| and IPv6 unicast routing, respectively. Module "ietf-ipv6-unicast- | and IPv6 unicast routing, respectively. Module "ietf-ipv6-unicast- | |||
| routing" has a submodule, "ietf-ipv6-router-advertisements", that | routing" has a submodule, "ietf-ipv6-router-advertisements", that | |||
| defines configuration variables for IPv6 router advertisements as | augments the "ietf-interfaces" [RFC7223] and "ietf-ip" [RFC7277] | |||
| required by [RFC4861]. Figures 1 and 2 show abridged views of the | modules with configuration variables for IPv6 router advertisements | |||
| as required by [RFC4861]. Figures 1 and 2 show abridged views of the | ||||
| configuration and state data hierarchies. See Appendix A for the | configuration and state data hierarchies. See Appendix A for the | |||
| complete data trees. | complete data trees. | |||
| +--rw routing | +--rw routing | |||
| +--rw router-id? | +--rw router-id? | |||
| +--rw control-plane-protocols | +--rw control-plane-protocols | |||
| | +--rw control-plane-protocol* [type name] | | +--rw control-plane-protocol* [type name] | |||
| | +--rw type | | +--rw type | |||
| | +--rw name | | +--rw name | |||
| | +--rw description? | | +--rw description? | |||
| skipping to change at page 8, line 19 ¶ | skipping to change at page 8, line 19 ¶ | |||
| +--ro control-plane-protocols | +--ro control-plane-protocols | |||
| | +--ro control-plane-protocol* [type name] | | +--ro control-plane-protocol* [type name] | |||
| | +--ro type | | +--ro type | |||
| | +--ro name | | +--ro name | |||
| +--ro ribs | +--ro ribs | |||
| +--ro rib* [name] | +--ro rib* [name] | |||
| +--ro name | +--ro name | |||
| +--ro address-family | +--ro address-family | |||
| +--ro default-rib? | +--ro default-rib? | |||
| +--ro routes | +--ro routes | |||
| +--ro route* | | +--ro route* | |||
| ... | | ... | |||
| Figure 2: State data hierarchy. | Figure 2: State data hierarchy. | |||
| As can be seen from Figures 1 and 2, the core routing data model | As can be seen from Figures 1 and 2, the core routing data model | |||
| introduces several generic components of a routing framework: routes, | introduces several generic components of a routing framework: routes, | |||
| RIBs containing lists of routes, and control plane protocols. | RIBs containing lists of routes, and control plane protocols. | |||
| Section 5 describes these components in more detail. | Section 5 describes these components in more detail. | |||
| 4.1. System-Controlled and User-Controlled List Entries | 4.1. System-Controlled and User-Controlled List Entries | |||
| skipping to change at page 9, line 30 ¶ | skipping to change at page 9, line 30 ¶ | |||
| 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. Route | 5.1. 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": address prefix specifying the set of | |||
| addresses for which the route may be used. This attribute is | destination addresses for which the route may be used. This | |||
| mandatory. | attribute is mandatory. | |||
| o "route-preference": an integer value (also known as administrative | o "route-preference": an integer value (also known as administrative | |||
| distance) that is used for selecting a preferred route among | distance) that is used for selecting a preferred route among | |||
| routes with the same destination prefix. A lower value means a | routes with the same destination prefix. A lower value means a | |||
| more preferred route. | more preferred route. | |||
| o "next-hop": determines the action to be performed with a packet. | o "next-hop": determines the outgoing interface and/or next-hop | |||
| address(es), other operation to be performed with a packet. | ||||
| Routes are primarily state data that appear as entries of RIBs | Routes are primarily state data that appear as entries of RIBs | |||
| (Section 5.2) but they may also be found in configuration data, for | (Section 5.2) but they may also be found in configuration data, for | |||
| example as manually configured static routes. In the latter case, | example as manually configured static routes. In the latter case, | |||
| configurable route attributes are generally a subset of route | configurable route attributes are generally a subset of attributes | |||
| attributes described above. | defined for RIB routes. | |||
| 5.2. Routing Information Base (RIB) | 5.2. Routing Information Base (RIB) | |||
| Every implementation of the core routing data model manages one or | Every implementation of the core routing data model manages one or | |||
| more routing information bases (RIB). A RIB is a list of routes | more routing information bases (RIB). A RIB is a list of routes | |||
| complemented with administrative data. Each RIB contains only routes | complemented with administrative data. Each RIB contains only routes | |||
| of one address family. An address family is represented by an | of one address family. An address family is represented by an | |||
| identity derived from the "rt:address-family" base identity. | identity derived from the "rt:address-family" base identity. | |||
| In the core routing data model, RIBs are state data represented as | In the core routing data model, RIBs are state data represented as | |||
| skipping to change at page 10, line 25 ¶ | skipping to change at page 10, line 25 ¶ | |||
| the so-called default RIB. Its role is explained in Section 5.3. | the so-called default RIB. Its role is explained in Section 5.3. | |||
| Simple router implementations that do not advertise the feature | Simple router implementations that do not advertise the feature | |||
| "multiple-ribs" will typically create one system-controlled RIB per | "multiple-ribs" will typically create one system-controlled RIB per | |||
| supported address family, and mark it as the default RIB. | supported address family, and mark it as the default RIB. | |||
| More complex router implementations advertising the "multiple-ribs" | More complex router implementations advertising the "multiple-ribs" | |||
| feature support multiple RIBs per address family that can be used for | feature support multiple RIBs per address family that can be used for | |||
| policy routing and other purposes. | policy routing and other purposes. | |||
| The following action (see Section 7.15 of | ||||
| [I-D.ietf-netmod-rfc6020bis]) is defined for the "rib" list: | ||||
| o active-route -- return the active RIB route for the destination | ||||
| address that is specified as the action's input parameter. | ||||
| 5.3. Control Plane Protocol | 5.3. Control Plane Protocol | |||
| The core routing data model provides an open-ended framework for | The core routing data model provides an open-ended framework for | |||
| defining multiple control plane protocol instances, e.g., for Layer 3 | defining multiple control plane protocol instances, e.g., for Layer 3 | |||
| routing protocols. Each routing protocol instance MUST be assigned a | routing protocols. Each control plane protocol instance MUST be | |||
| type, which is an identity derived from the "rt:control-plane- | assigned a type, which is an identity derived from the "rt:control- | |||
| protocol" base identity. The core routing data model defines two | plane-protocol" base identity. The core routing data model defines | |||
| identities for the direct and static pseudo-protocols | two identities for the direct and static pseudo-protocols | |||
| (Section 5.3.1). | (Section 5.3.1). | |||
| Multiple control plane protocol instances of the same type MAY be | Multiple control plane protocol instances of the same type MAY be | |||
| configured. | configured. | |||
| 5.3.1. Routing Pseudo-Protocols | 5.3.1. Routing Pseudo-Protocols | |||
| The core routing data model defines two special routing protocol | The core routing data model defines two special routing protocol | |||
| types - "direct" and "static". Both are in fact pseudo-protocols, | types -- "direct" and "static". Both are in fact pseudo-protocols, | |||
| which means they are confined to the local device and do not exchange | which means that they are confined to the local device and do not | |||
| any routing information with adjacent routers. | exchange any routing information with adjacent routers. | |||
| Every implementation of the core routing data model MUST provide | Every implementation of the core routing data model MUST provide | |||
| exactly one instance of the "direct" pseudo-protocol type. It is the | exactly one instance of the "direct" pseudo-protocol type. It is the | |||
| source of direct routes for all configured address families. Direct | source of direct routes for all configured address families. Direct | |||
| routes are normally supplied by the operating system kernel, based on | routes are normally supplied by the operating system kernel, based on | |||
| the configuration of network interface addresses, see Section 6.2. | the configuration of network interface addresses, see Section 6.2. | |||
| Direct routes MUST be installed in default RIBs of all supported | ||||
| address families. | ||||
| A pseudo-protocol of the type "static" allows for specifying routes | A pseudo-protocol of the type "static" allows for specifying routes | |||
| manually. It MAY be configured in zero or multiple instances, | manually. It MAY be configured in zero or multiple instances, | |||
| although a typical configuration will have exactly one instance. | although a typical configuration will have exactly one instance. | |||
| 5.3.2. Defining New Control Plane Protocols | 5.3.2. Defining New Control Plane Protocols | |||
| It is expected that future YANG modules will create data models for | It is expected that future YANG modules will create data models for | |||
| additional control plane protocol types. Such a new module has to | additional control plane protocol types. Such a new module has to | |||
| define the protocol-specific configuration and state data, and it has | define the protocol-specific configuration and state data, and it has | |||
| skipping to change at page 11, line 28 ¶ | skipping to change at page 11, line 34 ¶ | |||
| to an identity derived from "rt:control-plane-protocol". | to an identity derived from "rt:control-plane-protocol". | |||
| o Additional route attributes MAY be defined, preferably in one | o Additional route attributes MAY be defined, preferably in one | |||
| place by means of defining a YANG grouping. The new attributes | place by means of defining a YANG grouping. The new attributes | |||
| have to be inserted by augmenting the definitions of the nodes | have to be inserted by augmenting the definitions of the nodes | |||
| /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route | /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route | |||
| and | and | |||
| /rt:fib-route/rt:output/rt:route, | /rt:routing-state/rt:ribs/rt:rib/rt:output/rt:route, | |||
| and possibly other places in the configuration, state data, | and possibly other places in the configuration, state data, | |||
| notifications, and RPC input or output. | notifications, and input/output parameters of actions or RPC | |||
| operations. | ||||
| o Configuration parameters and/or state data for the new protocol | o Configuration parameters and/or state data for the new protocol | |||
| can be defined by augmenting the "control-plane-protocol" data | can be defined by augmenting the "control-plane-protocol" data | |||
| node under both "/routing" and "/routing-state". | node under both "/routing" and "/routing-state". | |||
| By using a "when" statement, the augmented configuration parameters | By using a "when" statement, the augmented configuration parameters | |||
| and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
| conditional and valid only if the value of "rt:type" or "rt:source- | conditional and valid only if the value of "rt:type" or "rt:source- | |||
| protocol" is equal to the new protocol's identity. | protocol" is equal to (or derived from) the new protocol's identity. | |||
| It is also RECOMMENDED that protocol-specific data nodes be | It is also RECOMMENDED that protocol-specific data nodes be | |||
| encapsulated in an appropriately named container with presence. Such | encapsulated in an appropriately named container with presence. Such | |||
| a container may contain mandatory data nodes that are otherwise | a container may contain mandatory data nodes that are otherwise | |||
| forbidden at the top level of an augment. | forbidden at the top level of an augment. | |||
| The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
| RIP routing protocol in Appendix C. | RIP routing protocol in Appendix C. | |||
| 5.4. RPC Operations | 5.4. Parameters of IPv6 Router Advertisements | |||
| The "ietf-routing" module defines one RPC operation: | ||||
| o fib-route: query the routing system for the active route in the | ||||
| Forwarding Information Base (FIB). It is the route that is | ||||
| currently used for sending datagrams to a destination host whose | ||||
| address is passed as the input parameter. | ||||
| 5.5. Parameters of IPv6 Router Advertisements | ||||
| YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is | YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is | |||
| a submodule of the "ietf-ipv6-unicast-routing" module, augments the | a submodule of the "ietf-ipv6-unicast-routing" module, augments the | |||
| configuration and state data of IPv6 interfaces with definitions of | configuration and state data of IPv6 interfaces with definitions of | |||
| the following variables as required by [RFC4861], sec. 6.2.1: | the following variables as required by [RFC4861], sec. 6.2.1: | |||
| o send-advertisements, | o send-advertisements, | |||
| o max-rtr-adv-interval, | o max-rtr-adv-interval, | |||
| skipping to change at page 13, line 18 ¶ | skipping to change at page 13, line 12 ¶ | |||
| implemented in the "ietf-ip" module [RFC7277] (leaf | implemented in the "ietf-ip" module [RFC7277] (leaf | |||
| "ip:forwarding"). | "ip:forwarding"). | |||
| 2. The original specification [RFC4861] allows the implementations | 2. The original specification [RFC4861] allows the implementations | |||
| to decide whether the "valid-lifetime" and "preferred-lifetime" | to decide whether the "valid-lifetime" and "preferred-lifetime" | |||
| parameters remain the same in consecutive advertisements, or | parameters remain the same in consecutive advertisements, or | |||
| decrement in real time. However, the latter behavior seems | decrement in real time. However, the latter behavior seems | |||
| problematic because the values might be reset again to the | problematic because the values might be reset again to the | |||
| (higher) configured values after a configuration is reloaded. | (higher) configured values after a configuration is reloaded. | |||
| Moreover, no implementation is known to use the decrementing | Moreover, no implementation is known to use the decrementing | |||
| behavior. The "ietf-ipv6-unicast-routing" module therefore | behavior. The "ietf-ipv6-router-advertisements" submodule | |||
| assumes the former behavior with constant values. | therefore stipulates the former behavior with constant values. | |||
| 6. Interactions with Other YANG Modules | 6. Interactions with Other YANG Modules | |||
| The semantics of the core routing data model also depends on several | The semantics of the core routing data model also depends on several | |||
| configuration parameters that are defined in other YANG modules. | configuration parameters that are defined in other YANG modules. | |||
| 6.1. Module "ietf-interfaces" | 6.1. Module "ietf-interfaces" | |||
| The following boolean switch is defined in the "ietf-interfaces" YANG | The following boolean switch is defined in the "ietf-interfaces" YANG | |||
| module [RFC7223]: | module [RFC7223]: | |||
| skipping to change at page 14, line 34 ¶ | skipping to change at page 14, line 29 ¶ | |||
| direct route. The destination prefix of this route is set according | direct route. The destination prefix of this route is set according | |||
| to the configured IP address and network prefix/mask, and the | to the configured IP address and network prefix/mask, and the | |||
| interface is set as the outgoing interface for that route. | interface is set as the outgoing interface for that route. | |||
| 7. Routing Management YANG Module | 7. Routing Management YANG Module | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-routing@2016-07-01.yang" | <CODE BEGINS> file "ietf-routing@2016-08-18.yang" | |||
| module ietf-routing { | module ietf-routing { | |||
| yang-version "1.1"; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
| prefix "rt"; | prefix "rt"; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| skipping to change at page 15, line 44 ¶ | skipping to change at page 15, line 41 ¶ | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | 'OPTIONAL' in the module text are to be interpreted as described | |||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | in RFC 2119 (http://tools.ietf.org/html/rfc2119). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | |||
| full legal notices."; | full legal notices."; | |||
| revision 2016-07-01 { | revision 2016-08-18 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Features */ | /* Features */ | |||
| feature multiple-ribs { | feature multiple-ribs { | |||
| description | description | |||
| "This feature indicates that the server supports user-defined | "This feature indicates that the server supports user-defined | |||
| RIBs. | RIBs. | |||
| Servers that do not advertise this feature SHOULD provide | Servers that do not advertise this feature SHOULD provide | |||
| exactly one system-controlled RIB per supported address family | exactly one system-controlled RIB per supported address family | |||
| and make them also the default RIBs. These RIBs then appear as | and make them also the default RIBs. These RIBs then appear as | |||
| entries of the list /routing-state/ribs/rib."; | entries of the list /routing-state/ribs/rib."; | |||
| } | } | |||
| skipping to change at page 18, line 45 ¶ | skipping to change at page 18, line 43 ¶ | |||
| enum receive { | enum receive { | |||
| description | description | |||
| "The packet will be received by the local system."; | "The packet will be received by the local system."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Special next-hop options."; | "Special next-hop options."; | |||
| } | } | |||
| } | } | |||
| grouping next-hop-classifiers { | ||||
| description | ||||
| "This grouping provides two next-hop classifiers."; | ||||
| leaf priority { | ||||
| type enumeration { | ||||
| enum primary { | ||||
| value "1"; | ||||
| description | ||||
| "Primary next-hop."; | ||||
| } | ||||
| enum backup { | ||||
| value "2"; | ||||
| description | ||||
| "Backup next-hop."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Simple priority for distinguishing between primary and | ||||
| backup next-hops. | ||||
| Backup next-hops are used if and only if no primary | ||||
| next-hops are reachable."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| must ". = 0 or not(../../next-hop/weight = 0)" { | ||||
| error-message "Illegal combination of zero and non-zero " | ||||
| + "next-hop weights."; | ||||
| description | ||||
| "Next-hop weights must be either all zero (equal | ||||
| load-balancing) or all non-zero."; | ||||
| } | ||||
| description | ||||
| "This parameter specifies the weight of the next-hop for load | ||||
| balancing. The number specifies the relative fraction of the | ||||
| traffic that will use the corresponding next-hop. | ||||
| A value of 0 represents equal load-balancing. | ||||
| If both primary and backup next-hops are present, then the | ||||
| weights for each priority level are used separately."; | ||||
| } | ||||
| } | ||||
| grouping next-hop-content { | grouping next-hop-content { | |||
| description | description | |||
| "Generic parameters of next-hops in static routes."; | "Generic parameters of next-hops in static routes."; | |||
| choice next-hop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for next-hops in static routes. | "Options for next-hops in static routes. | |||
| Modules for address families MUST augment this choice with | ||||
| the 'next-hop-address' case, which is a leaf containing a | ||||
| gateway address of that address family. | ||||
| It is expected that further cases will be added through | It is expected that further cases will be added through | |||
| augments from other modules."; | augments from other modules."; | |||
| leaf outgoing-interface { | case simple-next-hop { | |||
| type if:interface-ref; | ||||
| description | description | |||
| "Name of the outgoing interface."; | "This case represents a simple next hop consisting of the | |||
| next-hop address and/or outgoing interface. | ||||
| Modules for address families MUST augment this case with a | ||||
| leaf containing a next-hop address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| } | } | |||
| case special-next-hop { | case special-next-hop { | |||
| uses special-next-hop; | uses special-next-hop; | |||
| } | } | |||
| case next-hop-list { | case next-hop-list { | |||
| container next-hop-list { | container next-hop-list { | |||
| description | description | |||
| "Container for multiple next-hops."; | "Container for multiple next-hops."; | |||
| list next-hop { | list next-hop { | |||
| key "index"; | key "index"; | |||
| description | description | |||
| "An entry of a next-hop list."; | "An entry of a next-hop list. | |||
| Modules for address families MUST augment this list | ||||
| with a leaf containing a next-hop address of that | ||||
| address family."; | ||||
| leaf index { | leaf index { | |||
| type string; | type string; | |||
| description | description | |||
| "An user-specified identifier utilised to uniquely | "An user-specified identifier utilised to uniquely | |||
| reference the next-hop entry in the next-hop list. | reference the next-hop entry in the next-hop list. | |||
| The value of this index has no semantic meaning | The value of this index has no semantic meaning | |||
| other than for referencing the entry."; | other than for referencing the entry."; | |||
| } | } | |||
| choice address-or-interface { | leaf outgoing-interface { | |||
| mandatory "true"; | type if:interface-ref; | |||
| description | description | |||
| "Choice between outgoing interface and next-hop | "Name of the outgoing interface."; | |||
| address in next-hop list entries. | ||||
| Modules for address families MUST augment this | ||||
| choice with the 'next-hop-address' case, which is a | ||||
| leaf containing a gateway address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| } | } | |||
| uses next-hop-classifiers; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping next-hop-state-content { | grouping next-hop-state-content { | |||
| description | description | |||
| "Generic parameters of next-hops in state data."; | "Generic parameters of next-hops in state data."; | |||
| choice next-hop-options { | choice next-hop-options { | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Options for next-hops in state data. | "Options for next-hops in state data. | |||
| Modules for address families MUST augment this choice with | ||||
| the 'next-hop-address' case, which is a leaf containing a | ||||
| gateway address of that address family. | ||||
| It is expected that further cases will be added through | It is expected that further cases will be added through | |||
| augments from other modules, e.g., for recursive | augments from other modules, e.g., for recursive | |||
| next-hops."; | next-hops."; | |||
| leaf outgoing-interface { | case simple-next-hop { | |||
| type if:interface-state-ref; | ||||
| description | description | |||
| "Name of the outgoing interface."; | "This case represents a simple next hop consisting of the | |||
| next-hop address and/or outgoing interface. | ||||
| Modules for address families MUST augment this case with a | ||||
| leaf containing a next-hop address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-state-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| } | } | |||
| case special-next-hop { | case special-next-hop { | |||
| uses special-next-hop; | uses special-next-hop; | |||
| } | } | |||
| case next-hop-list { | case next-hop-list { | |||
| container next-hop-list { | container next-hop-list { | |||
| description | description | |||
| "Container for multiple next-hops."; | "Container for multiple next-hops."; | |||
| list next-hop { | list next-hop { | |||
| description | description | |||
| "An entry of a next-hop list."; | "An entry of a next-hop list. | |||
| choice address-or-interface { | ||||
| mandatory "true"; | ||||
| description | ||||
| "Choice between outgoing interface and next-hop | ||||
| address in next-hop list entries. | ||||
| Modules for address families MUST augment this | Modules for address families MUST augment this list | |||
| choice with the 'next-hop-address' case, which is a | with a leaf containing a next-hop address of that | |||
| leaf containing a gateway address of that address | address family."; | |||
| family."; | leaf outgoing-interface { | |||
| leaf outgoing-interface { | type if:interface-state-ref; | |||
| type if:interface-state-ref; | description | |||
| description | "Name of the outgoing interface."; | |||
| "Name of the outgoing interface."; | ||||
| } | ||||
| } | } | |||
| uses next-hop-classifiers; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping route-metadata { | grouping route-metadata { | |||
| description | description | |||
| "Common route metadata."; | "Common route metadata."; | |||
| leaf source-protocol { | leaf source-protocol { | |||
| type identityref { | type identityref { | |||
| base routing-protocol; | base routing-protocol; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| skipping to change at page 24, line 21 ¶ | skipping to change at page 23, line 17 ¶ | |||
| } | } | |||
| uses address-family; | uses address-family; | |||
| leaf default-rib { | leaf default-rib { | |||
| if-feature "multiple-ribs"; | if-feature "multiple-ribs"; | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "This flag has the value of 'true' if and only if the RIB | "This flag has the value of 'true' if and only if the RIB | |||
| is the default RIB for the given address family. | is the default RIB for the given address family. | |||
| A default RIB always receives direct routes. By default | By default, control plane protocols place their routes | |||
| it also receives routes from all routing protocols."; | in the default RIBs."; | |||
| } | } | |||
| container routes { | container routes { | |||
| description | description | |||
| "Current content of the RIB."; | "Current content of the RIB."; | |||
| list route { | list route { | |||
| description | description | |||
| "A RIB route entry. This data node MUST be augmented | "A RIB route entry. This data node MUST be augmented | |||
| with information specific for routes of each address | with information specific for routes of each address | |||
| family."; | family."; | |||
| leaf route-preference { | leaf route-preference { | |||
| skipping to change at page 24, line 48 ¶ | skipping to change at page 23, line 44 ¶ | |||
| smaller value means a more preferred route."; | smaller value means a more preferred route."; | |||
| } | } | |||
| container next-hop { | container next-hop { | |||
| description | description | |||
| "Route's next-hop attribute."; | "Route's next-hop attribute."; | |||
| uses next-hop-state-content; | uses next-hop-state-content; | |||
| } | } | |||
| uses route-metadata; | uses route-metadata; | |||
| } | } | |||
| } | } | |||
| action active-route { | ||||
| description | ||||
| "Return the active RIB route that is used for the | ||||
| destination address. | ||||
| Address family specific modules MUST augment input | ||||
| parameters with a leaf named 'destination-address'."; | ||||
| output { | ||||
| container route { | ||||
| description | ||||
| "The active RIB route for the specified destination. | ||||
| If no route exists in the RIB for the destination | ||||
| address, no output is returned. | ||||
| Address family specific modules MUST augment this | ||||
| container with appropriate route contents."; | ||||
| container next-hop { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| uses route-metadata; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| /* Configuration Data */ | /* Configuration Data */ | |||
| container routing { | container routing { | |||
| description | description | |||
| "Configuration parameters for the routing subsystem."; | "Configuration parameters for the routing subsystem."; | |||
| uses router-id { | uses router-id { | |||
| if-feature "router-id"; | if-feature "router-id"; | |||
| description | description | |||
| "Configuration of the global router ID. Routing protocols | "Configuration of the global router ID. Routing protocols | |||
| that use router ID can use this parameter or override it | that use router ID can use this parameter or override it | |||
| with another value."; | with another value."; | |||
| } | } | |||
| skipping to change at page 25, line 43 ¶ | skipping to change at page 25, line 19 ¶ | |||
| "An arbitrary name of the control plane protocol | "An arbitrary name of the control plane protocol | |||
| instance."; | instance."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the control plane protocol | "Textual description of the control plane protocol | |||
| instance."; | instance."; | |||
| } | } | |||
| container static-routes { | container static-routes { | |||
| when "../type='rt:static'" { | when "derived-from-or-self(../type, 'rt:static')" { | |||
| description | description | |||
| "This container is only valid for the 'static' routing | "This container is only valid for the 'static' routing | |||
| protocol."; | protocol."; | |||
| } | } | |||
| description | description | |||
| "Configuration of the 'static' pseudo-protocol. | "Configuration of the 'static' pseudo-protocol. | |||
| Address-family-specific modules augment this node with | Address-family-specific modules augment this node with | |||
| their lists of routes."; | their lists of routes."; | |||
| } | } | |||
| skipping to change at page 27, line 4 ¶ | skipping to change at page 26, line 28 ¶ | |||
| mandatory "false"; | mandatory "false"; | |||
| } | } | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the RIB."; | "Textual description of the RIB."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| /* RPC operations */ | ||||
| rpc fib-route { | ||||
| description | ||||
| "Return the active FIB route that is used for sending packets | ||||
| to a destination address."; | ||||
| input { | ||||
| container destination-address { | ||||
| description | ||||
| "Network layer destination address. | ||||
| Address family specific modules MUST augment this | ||||
| container with a leaf named 'address'."; | ||||
| uses address-family; | ||||
| } | ||||
| } | ||||
| output { | ||||
| container route { | ||||
| description | ||||
| "The active FIB route for the specified destination. | ||||
| If no active FIB route exists for the destination address, | ||||
| no output is returned - the server SHALL send an | ||||
| <rpc-reply> containing a single element <ok>. | ||||
| Address family specific modules MUST augment this list | ||||
| with appropriate route contents."; | ||||
| uses address-family; | ||||
| container next-hop { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| uses route-metadata; | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 8. IPv4 Unicast Routing Management YANG Module | 8. IPv4 Unicast Routing Management YANG Module | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-07-01.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-08-18.yang" | |||
| module ietf-ipv4-unicast-routing { | module ietf-ipv4-unicast-routing { | |||
| yang-version "1.1"; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | |||
| prefix "v4ur"; | prefix "v4ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| "WG Web: <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> | |||
| skipping to change at page 29, line 4 ¶ | skipping to change at page 27, line 40 ¶ | |||
| Copyright (c) 2016 IETF Trust and the persons identified as | Copyright (c) 2016 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | 'OPTIONAL' in the module text are to be interpreted as described | |||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | in RFC 2119 (http://tools.ietf.org/html/rfc2119). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | |||
| full legal notices."; | full legal notices."; | |||
| revision 2016-07-01 { | revision 2016-08-18 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv4-unicast { | identity ipv4-unicast { | |||
| base rt:ipv4; | base rt:ipv4; | |||
| description | description | |||
| "This identity represents the IPv4 unicast address family."; | "This identity represents the IPv4 unicast address family."; | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
| when "../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "derived-from-or-self(../../rt:address-family, " | |||
| + "'v4ur:ipv4-unicast')" { | ||||
| description | description | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments an IPv4 unicast route."; | "This leaf augments an IPv4 unicast route."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| description | description | |||
| "IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:next-hop/rt:next-hop-options" { | + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | |||
| when "../../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "derived-from-or-self(../../../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 | |||
| "Augment 'next-hop-options' in IPv4 unicast routes."; | "Augment 'simple-next-hop' case in IPv4 unicast routes."; | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the next-hop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" | + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" | |||
| + "rt:next-hop-list/rt:next-hop/rt:address-or-interface" { | + "rt:next-hop-list/rt:next-hop" { | |||
| when "../../../../../rt:address-family = 'v4ur:ipv4-unicast'" { | when "derived-from-or-self(../../../../../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 'next-hop-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 next-hop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment | ||||
| "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { | ||||
| when "derived-from-or-self(../../rt:address-family, " | ||||
| + "'v4ur:ipv4-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast RIBs."; | ||||
| } | ||||
| description | ||||
| "This augment adds the input parameter of the 'active-route' | ||||
| action."; | ||||
| leaf destination-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 destination address."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route" { | ||||
| when "derived-from-or-self(../../../rt:address-family, " | ||||
| + "'v4ur:ipv4-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment adds the destination prefix to the reply of the | ||||
| 'active-route' action."; | ||||
| leaf destination-prefix { | ||||
| type inet:ipv4-prefix; | ||||
| description | ||||
| "IPv4 destination prefix."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" | ||||
| + "rt:simple-next-hop" { | ||||
| when "derived-from-or-self(../../../../rt:address-family, " | ||||
| + "'v4ur:ipv4-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'simple-next-hop' case in the reply to the | ||||
| 'active-route' action."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" | ||||
| + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" { | ||||
| when "derived-from-or-self(../../../../../../rt:address-family, " | ||||
| + "'v4ur:ipv4-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop-list' case in the reply to the | ||||
| 'active-route' action."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| /* Configuration data */ | /* Configuration data */ | |||
| augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
| + "rt:control-plane-protocol/rt:static-routes" { | + "rt:control-plane-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific to IPv4 unicast."; | pseudo-protocol with data specific to IPv4 unicast."; | |||
| container ipv4 { | container ipv4 { | |||
| description | description | |||
| "Configuration of a 'static' pseudo-protocol instance | "Configuration of a 'static' pseudo-protocol instance | |||
| skipping to change at page 31, line 10 ¶ | skipping to change at page 31, line 24 ¶ | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| container next-hop { | container next-hop { | |||
| description | description | |||
| "Configuration of next-hop."; | "Configuration of next-hop."; | |||
| uses rt:next-hop-content { | uses rt:next-hop-content { | |||
| augment "next-hop-options" { | augment "next-hop-options/simple-next-hop" { | |||
| description | description | |||
| "Augment 'next-hop-options' in IPv4 static routes."; | "Augment 'simple-next-hop' case in IPv4 static | |||
| routes."; | ||||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the next-hop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "next-hop-options/next-hop-list/next-hop-list/" | augment "next-hop-options/next-hop-list/next-hop-list/" | |||
| + "next-hop/address-or-interface" { | + "next-hop" { | |||
| description | description | |||
| "Augment 'next-hop-options' in IPv4 static routes."; | "Augment 'next-hop-list' case in IPv4 static | |||
| routes."; | ||||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 address of the next-hop."; | "IPv4 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC operations */ | ||||
| augment "/rt:fib-route/rt:input/rt:destination-address" { | ||||
| when "rt:address-family='v4ur:ipv4-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "This leaf augments the 'rt:destination-address' parameter of | ||||
| the 'rt:fib-route' operation."; | ||||
| leaf address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 destination address."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route" { | ||||
| when "rt:address-family='v4ur:ipv4-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "This leaf augments the reply to the 'rt:fib-route' | ||||
| operation."; | ||||
| leaf destination-prefix { | ||||
| type inet:ipv4-prefix; | ||||
| description | ||||
| "IPv4 destination prefix."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | ||||
| + "rt:next-hop-options" { | ||||
| when "../rt:address-family='v4ur:ipv4-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop-options' in the reply to the 'rt:fib-route' | ||||
| operation."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | ||||
| + "rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/" | ||||
| + "rt:next-hop/rt:address-or-interface" { | ||||
| when "../rt:address-family='v4ur:ipv4-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop' list entry in the reply to the | ||||
| 'rt:fib-route' operation."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 9. IPv6 Unicast Routing Management YANG Module | 9. IPv6 Unicast Routing Management YANG Module | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv6-unicast-routing@2016-07-01.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2016-08-18.yang" | |||
| module ietf-ipv6-unicast-routing { | module ietf-ipv6-unicast-routing { | |||
| yang-version "1.1"; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | |||
| prefix "v6ur"; | prefix "v6ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| include ietf-ipv6-router-advertisements { | include ietf-ipv6-router-advertisements { | |||
| revision-date 2016-07-01; | revision-date 2016-08-18; | |||
| } | } | |||
| 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: Lou Berger | WG Chair: Lou Berger | |||
| skipping to change at page 34, line 26 ¶ | skipping to change at page 33, line 28 ¶ | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and | |||
| 'OPTIONAL' in the module text are to be interpreted as described | 'OPTIONAL' in the module text are to be interpreted as described | |||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | in RFC 2119 (http://tools.ietf.org/html/rfc2119). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | |||
| full legal notices."; | full legal notices."; | |||
| revision 2016-07-01 { | revision 2016-08-18 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* Identities */ | /* Identities */ | |||
| identity ipv6-unicast { | identity ipv6-unicast { | |||
| base rt:ipv6; | base rt:ipv6; | |||
| description | description | |||
| "This identity represents the IPv6 unicast address family."; | "This identity represents the IPv6 unicast address family."; | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
| when "../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "derived-from-or-self(../../rt:address-family, " | |||
| + "'v6ur:ipv6-unicast')" { | ||||
| description | description | |||
| "This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
| } | } | |||
| description | description | |||
| "This leaf augments an IPv6 unicast route."; | "This leaf augments an IPv6 unicast route."; | |||
| leaf destination-prefix { | leaf destination-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 destination prefix."; | "IPv6 destination prefix."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:next-hop/rt:next-hop-options" { | + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { | |||
| when "../../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "derived-from-or-self(../../../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 | |||
| "Augment 'next-hop-options' in IPv6 unicast routes."; | "Augment 'simple-next-hop' case in IPv6 unicast routes."; | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" | |||
| + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" | + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" | |||
| + "rt:next-hop-list/rt:next-hop/rt:address-or-interface" { | + "rt:next-hop-list/rt:next-hop" { | |||
| when "../../../../../rt:address-family = 'v6ur:ipv6-unicast'" { | when "derived-from-or-self(../../../../../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 'next-hop-list' case of IPv6 unicast | "This leaf augments the 'next-hop-list' case of IPv6 unicast | |||
| routes."; | routes."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment | ||||
| "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { | ||||
| when "derived-from-or-self(../../rt:address-family, " | ||||
| + "'v6ur:ipv6-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast RIBs."; | ||||
| } | ||||
| description | ||||
| "This augment adds the input parameter of the 'active-route' | ||||
| action."; | ||||
| leaf destination-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 destination address."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route" { | ||||
| when "derived-from-or-self(../../../rt:address-family, " | ||||
| + "'v6ur:ipv6-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment adds the destination prefix to the reply of the | ||||
| 'active-route' action."; | ||||
| leaf destination-prefix { | ||||
| type inet:ipv6-prefix; | ||||
| description | ||||
| "IPv6 destination prefix."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" | ||||
| + "rt:simple-next-hop" { | ||||
| when "derived-from-or-self(../../../../rt:address-family, " | ||||
| + "'v6ur:ipv6-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'simple-next-hop' case in the reply to the | ||||
| 'active-route' action."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | ||||
| + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/" | ||||
| + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" { | ||||
| when "derived-from-or-self(../../../../../../rt:address-family, " | ||||
| + "'v6ur:ipv6-unicast')" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop-list' case in the reply to the | ||||
| 'active-route' action."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| /* Configuration data */ | /* Configuration data */ | |||
| augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
| + "rt:control-plane-protocol/rt:static-routes" { | + "rt:control-plane-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific to IPv6 unicast."; | pseudo-protocol with data specific to IPv6 unicast."; | |||
| container ipv6 { | container ipv6 { | |||
| description | description | |||
| "Configuration of a 'static' pseudo-protocol instance | "Configuration of a 'static' pseudo-protocol instance | |||
| skipping to change at page 36, line 4 ¶ | skipping to change at page 36, line 31 ¶ | |||
| augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
| + "rt:control-plane-protocol/rt:static-routes" { | + "rt:control-plane-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific to IPv6 unicast."; | pseudo-protocol with data specific to IPv6 unicast."; | |||
| container ipv6 { | container ipv6 { | |||
| description | description | |||
| "Configuration of a 'static' pseudo-protocol instance | "Configuration of a 'static' pseudo-protocol instance | |||
| consists of a list of routes."; | consists of a list of routes."; | |||
| list route { | list route { | |||
| key "destination-prefix"; | key "destination-prefix"; | |||
| description | description | |||
| "A list of static routes."; | "A list of static routes."; | |||
| 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."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| container next-hop { | container next-hop { | |||
| description | description | |||
| "Configuration of next-hop."; | "Configuration of next-hop."; | |||
| uses rt:next-hop-content { | uses rt:next-hop-content { | |||
| augment "next-hop-options" { | augment "next-hop-options/simple-next-hop" { | |||
| description | description | |||
| "Augment 'next-hop-options' in IPv6 static routes."; | "Augment 'simple-next-hop' case in IPv6 static | |||
| routes."; | ||||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| augment "next-hop-options/next-hop-list/next-hop-list/" | augment "next-hop-options/next-hop-list/next-hop-list/" | |||
| + "next-hop/address-or-interface" { | + "next-hop" { | |||
| description | description | |||
| "Augment 'next-hop-options' in IPv6 static routes."; | "Augment 'next-hop-list' case in IPv6 static | |||
| routes."; | ||||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "IPv6 address of the next-hop."; | "IPv6 address of the next-hop."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* RPC operations */ | ||||
| augment "/rt:fib-route/rt:input/rt:destination-address" { | ||||
| when "rt:address-family='v6ur:ipv6-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "This leaf augments the 'rt:destination-address' parameter of | ||||
| the 'rt:fib-route' operation."; | ||||
| leaf address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 destination address."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route" { | ||||
| when "rt:address-family='v6ur:ipv6-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "This leaf augments the reply to the 'rt:fib-route' | ||||
| operation."; | ||||
| leaf destination-prefix { | ||||
| type inet:ipv6-prefix; | ||||
| description | ||||
| "IPv6 destination prefix."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | ||||
| + "rt:next-hop-options" { | ||||
| when "../rt:address-family='v6ur:ipv6-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop-options' in the reply to the 'rt:fib-route' | ||||
| operation."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/" | ||||
| + "rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/" | ||||
| + "rt:next-hop/rt:address-or-interface" { | ||||
| when "../rt:address-family='v6ur:ipv6-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "Augment 'next-hop' list entry in the reply to the | ||||
| 'rt:fib-route' operation."; | ||||
| leaf next-hop-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the next-hop."; | ||||
| } | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 9.1. IPv6 Router Advertisements Submodule | 9.1. IPv6 Router Advertisements Submodule | |||
| RFC Editor: In this section, replace all occurrences of 'XXXX' with | RFC Editor: In this section, replace all occurrences of 'XXXX' with | |||
| the actual RFC number and all occurrences of the revision date below | the actual RFC number and all occurrences of the revision date below | |||
| with the date of RFC publication (and remove this note). | with the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv6-router-advertisements@2016-07-01.yang" | <CODE BEGINS> file "ietf-ipv6-router-advertisements@2016-08-18.yang" | |||
| submodule ietf-ipv6-router-advertisements { | submodule ietf-ipv6-router-advertisements { | |||
| yang-version "1.1"; | ||||
| belongs-to ietf-ipv6-unicast-routing { | belongs-to ietf-ipv6-unicast-routing { | |||
| prefix "v6ur"; | prefix "v6ur"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| skipping to change at page 39, line 42 ¶ | skipping to change at page 39, line 8 ¶ | |||
| 'OPTIONAL' in the module text are to be interpreted as described | 'OPTIONAL' in the module text are to be interpreted as described | |||
| in RFC 2119 (http://tools.ietf.org/html/rfc2119). | in RFC 2119 (http://tools.ietf.org/html/rfc2119). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
| (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | (http://tools.ietf.org/html/rfcXXXX); see the RFC itself for | |||
| full legal notices."; | full legal notices."; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)."; | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)."; | |||
| revision 2016-07-01 { | revision 2016-08-18 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Routing Management"; | "RFC XXXX: A YANG Data Model for Routing Management"; | |||
| } | } | |||
| /* State data */ | /* State data */ | |||
| augment "/if:interfaces-state/if:interface/ip:ipv6" { | augment "/if:interfaces-state/if:interface/ip:ipv6" { | |||
| description | description | |||
| skipping to change at page 49, line 38 ¶ | skipping to change at page 49, line 8 ¶ | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| name: ietf-ipv6-router-advertisements | name: ietf-ipv6-router-advertisements | |||
| parent: ietf-ipv6-unicast-routing | parent: ietf-ipv6-unicast-routing | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| 11. Security Considerations | 11. Security Considerations | |||
| Configuration and state data conforming to the core routing data | Configuration and state data conforming to the core routing data | |||
| model (defined in this document) are designed to be accessed via the | model (defined in this document) are designed to be accessed via a | |||
| NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | management protocol with secure transport layer, such as NETCONF | |||
| transport layer and the mandatory-to-implement secure transport is | [RFC6241]. The NETCONF access control model [RFC6536] provides the | |||
| SSH [RFC6242]. The NETCONF access control model [RFC6536] provides | means to restrict access for particular NETCONF users to a pre- | |||
| the means to restrict access for particular NETCONF users to a pre- | ||||
| configured subset of all available NETCONF protocol operations and | configured subset of all available NETCONF protocol operations and | |||
| content. | content. | |||
| A number of data nodes defined in the YANG modules belonging to the | A number of configuration data nodes defined in the YANG modules | |||
| configuration part of the core routing data model are | belonging to the core routing data model are writable/creatable/ | |||
| writable/creatable/deletable (i.e., "config true" in YANG terms, | deletable (i.e., "config true" in YANG terms, which is the default). | |||
| which is the default). These data nodes may be considered sensitive | These data nodes may be considered sensitive or vulnerable in some | |||
| or vulnerable in some network environments. Write operations to | network environments. Write operations to these data nodes, such as | |||
| these data nodes, such as "edit-config", can have negative effects on | "edit-config" in NETCONF, can have negative effects on the network if | |||
| the network if the protocol operations are not properly protected. | the protocol operations are not properly protected. | |||
| The vulnerable "config true" parameters and subtrees are the | The vulnerable "config true" parameters and subtrees are the | |||
| following: | following: | |||
| /routing/control-plane-protocols/control-plane-protocol: This list | /routing/control-plane-protocols/control-plane-protocol: This list | |||
| specifies the control plane protocols configured on a device. | specifies the control plane protocols configured on a device. | |||
| /routing/ribs/rib: This list specifies the RIBs configured for the | /routing/ribs/rib: This list specifies the RIBs configured for the | |||
| device. | device. | |||
| Unauthorised access to any of these lists can adversely affect the | Unauthorised access to any of these lists can adversely affect the | |||
| routing subsystem of both the local device and the network. This may | routing subsystem of both the local device and the network. This may | |||
| lead to network malfunctions, delivery of packets to inappropriate | lead to network malfunctions, delivery of packets to inappropriate | |||
| destinations and other problems. | destinations and other problems. | |||
| 12. Acknowledgments | 12. Acknowledgments | |||
| The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean | The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean | |||
| Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini, | Bogdanovic, Jeff Haas, Joel Halpern, Wes Hardaker, Sriganesh Kini, | |||
| David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Stephane | David Lamparter, Andrew McGregor, Jan Medved, Xiang Li, Stephane | |||
| Litkowski, Thomas Morin, Tom Petch, Bruno Rijsman, | Litkowski, Thomas Morin, Tom Petch, Yingzhen Qu, Bruno Rijsman, | |||
| Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang, Derek Man- | Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Yi Yang, Derek Man- | |||
| Kit Yeung and Jeffrey Zhang for their helpful comments and | Kit Yeung and Jeffrey Zhang for their helpful comments and | |||
| suggestions. | suggestions. | |||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [I-D.ietf-netmod-rfc6020bis] | ||||
| Bjorklund, M., "The YANG 1.1 Data Modeling Language", | ||||
| draft-ietf-netmod-rfc6020bis-14 (work in progress), June | ||||
| 2016. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <http://www.rfc-editor.org/info/rfc3688>. | <http://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
| skipping to change at page 51, line 24 ¶ | skipping to change at page 51, line 5 ¶ | |||
| [RFC7223] Bjorklund, M., "A YANG Data Model for Interface | [RFC7223] Bjorklund, M., "A YANG Data Model for Interface | |||
| Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | |||
| <http://www.rfc-editor.org/info/rfc7223>. | <http://www.rfc-editor.org/info/rfc7223>. | |||
| [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", | [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", | |||
| RFC 7277, DOI 10.17487/RFC7277, June 2014, | RFC 7277, DOI 10.17487/RFC7277, June 2014, | |||
| <http://www.rfc-editor.org/info/rfc7277>. | <http://www.rfc-editor.org/info/rfc7277>. | |||
| 13.2. Informative References | 13.2. Informative References | |||
| [I-D.ietf-netmod-yang-json] | ||||
| Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| draft-ietf-netmod-yang-json-10 (work in progress), March | ||||
| 2016. | ||||
| [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | |||
| Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, | Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, | |||
| January 2011, <http://www.rfc-editor.org/info/rfc6087>. | January 2011, <http://www.rfc-editor.org/info/rfc6087>. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
| Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | ||||
| <http://www.rfc-editor.org/info/rfc6242>. | ||||
| [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Protocol (NETCONF) Access Control Model", RFC 6536, | Protocol (NETCONF) Access Control Model", RFC 6536, | |||
| DOI 10.17487/RFC6536, March 2012, | DOI 10.17487/RFC6536, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6536>. | <http://www.rfc-editor.org/info/rfc6536>. | |||
| [RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", | [RFC7895] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Module | |||
| RFC 7224, DOI 10.17487/RFC7224, May 2014, | Library", RFC 7895, DOI 10.17487/RFC7895, June 2016, | |||
| <http://www.rfc-editor.org/info/rfc7224>. | <http://www.rfc-editor.org/info/rfc7895>. | |||
| Appendix A. The Complete Data Trees | Appendix A. The Complete Data Trees | |||
| This appendix presents the complete configuration and state data | This appendix presents the complete configuration and state data | |||
| trees of the core routing data model. See Section 2.2 for an | trees of the core routing data model. See Section 2.2 for an | |||
| explanation of the symbols used. Data type of every leaf node is | explanation of the symbols used. Data type of every leaf node is | |||
| shown near the right end of the corresponding line. | shown near the right end of the corresponding line. | |||
| A.1. Configuration Data | A.1. Configuration Data | |||
| +--rw routing | +--rw routing | |||
| +--rw router-id? yang:dotted-quad | +--rw router-id? yang:dotted-quad | |||
| +--rw control-plane-protocols | +--rw control-plane-protocols | |||
| | +--rw control-plane-protocol* [type name] | | +--rw control-plane-protocol* [type name] | |||
| | +--rw type identityref | | +--rw type identityref | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw static-routes | | +--rw static-routes | |||
| | +--rw v6ur:ipv6 | | +--rw v6ur:ipv6 | |||
| | | +--rw v6ur:route* [destination-prefix] | | | +--rw v6ur:route* [destination-prefix] | |||
| | | +--rw v6ur:destination-prefix inet:ipv6-prefix | | | +--rw v6ur:destination-prefix inet:ipv6-prefix | |||
| | | +--rw v6ur:description? string | | | +--rw v6ur:description? string | |||
| | | +--rw v6ur:next-hop | | | +--rw v6ur:next-hop | |||
| | | +--rw (v6ur:next-hop-options) | | | +--rw (v6ur:next-hop-options) | |||
| | | +--:(v6ur:outgoing-interface) | | | +--:(v6ur:simple-next-hop) | |||
| | | | +--rw v6ur:outgoing-interface? | | | | +--rw v6ur:outgoing-interface? | |||
| | | | +--rw v6ur:next-hop-address? | ||||
| | | +--:(v6ur:special-next-hop) | | | +--:(v6ur:special-next-hop) | |||
| | | | +--rw v6ur:special-next-hop? | | | | +--rw v6ur:special-next-hop? enumeration | |||
| | | +--:(v6ur:next-hop-list) | | | +--:(v6ur:next-hop-list) | |||
| | | | +--rw v6ur:next-hop-list | | | +--rw v6ur:next-hop-list | |||
| | | | +--rw v6ur:next-hop* [index] | | | +--rw v6ur:next-hop* [index] | |||
| | | | +--rw v6ur:index string | | | +--rw v6ur:index string | |||
| | | | +--rw (v6ur:address-or-interface) | | | +--rw v6ur:outgoing-interface? | |||
| | | | | +--:(v6ur:outgoing-interface) | | | +--rw v6ur:next-hop-address? | |||
| | | | | | +--rw v6ur:outgoing-interface? | ||||
| | | | | +--:(v6ur:next-hop-address) | ||||
| | | | | +--rw v6ur:next-hop-address? | ||||
| | | | +--rw v6ur:priority? enumeration | ||||
| | | | +--rw v6ur:weight? uint8 | ||||
| | | +--:(v6ur:next-hop-address) | ||||
| | | +--rw v6ur:next-hop-address? | ||||
| | +--rw v4ur:ipv4 | | +--rw v4ur:ipv4 | |||
| | +--rw v4ur:route* [destination-prefix] | | +--rw v4ur:route* [destination-prefix] | |||
| | +--rw v4ur:destination-prefix inet:ipv4-prefix | | +--rw v4ur:destination-prefix inet:ipv4-prefix | |||
| | +--rw v4ur:description? string | | +--rw v4ur:description? string | |||
| | +--rw v4ur:next-hop | | +--rw v4ur:next-hop | |||
| | +--rw (v4ur:next-hop-options) | | +--rw (v4ur:next-hop-options) | |||
| | +--:(v4ur:outgoing-interface) | | +--:(v4ur:simple-next-hop) | |||
| | | +--rw v4ur:outgoing-interface? | | | +--rw v4ur:outgoing-interface? | |||
| | | +--rw v4ur:next-hop-address? | ||||
| | +--:(v4ur:special-next-hop) | | +--:(v4ur:special-next-hop) | |||
| | | +--rw v4ur:special-next-hop? | | | +--rw v4ur:special-next-hop? enumeration | |||
| | +--:(v4ur:next-hop-list) | | +--:(v4ur:next-hop-list) | |||
| | | +--rw v4ur:next-hop-list | | +--rw v4ur:next-hop-list | |||
| | | +--rw v4ur:next-hop* [index] | | +--rw v4ur:next-hop* [index] | |||
| | | +--rw v4ur:index string | | +--rw v4ur:index string | |||
| | | +--rw (v4ur:address-or-interface) | | +--rw v4ur:outgoing-interface? | |||
| | | | +--:(v4ur:outgoing-interface) | | +--rw v4ur:next-hop-address? | |||
| | | | | +--rw v4ur:outgoing-interface? | ||||
| | | | +--:(v4ur:next-hop-address) | ||||
| | | | +--rw v4ur:next-hop-address? | ||||
| | | +--rw v4ur:priority? enumeration | ||||
| | | +--rw v4ur:weight? uint8 | ||||
| | +--:(v4ur:next-hop-address) | ||||
| | +--rw v4ur:next-hop-address? | ||||
| +--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 | |||
| A.2. State Data | A.2. State Data | |||
| +--ro routing-state | ||||
| +--ro router-id? yang:dotted-quad | +--ro routing-state | |||
| +--ro interfaces | | +--ro router-id? yang:dotted-quad | |||
| | +--ro interface* if:interface-state-ref | | +--ro interfaces | |||
| +--ro control-plane-protocols | | | +--ro interface* if:interface-state-ref | |||
| | +--ro control-plane-protocol* [type name] | | +--ro control-plane-protocols | |||
| | +--ro type identityref | | | +--ro control-plane-protocol* [type name] | |||
| | +--ro name string | | | +--ro type identityref | |||
| +--ro ribs | | | +--ro name string | |||
| +--ro rib* [name] | | +--ro ribs | |||
| +--ro name string | | +--ro rib* [name] | |||
| +--ro address-family identityref | | +--ro name string | |||
| +--ro default-rib? boolean {multiple-ribs}? | | +--ro address-family identityref | |||
| +--ro routes | | +--ro default-rib? boolean {multiple-ribs}? | |||
| +--ro route* | | +--ro routes | |||
| +--ro route-preference? route-preference | | | +--ro route* | |||
| +--ro next-hop | | | +--ro route-preference? route-preference | |||
| | +--ro (next-hop-options) | | | +--ro next-hop | |||
| | +--:(outgoing-interface) | | | | +--ro (next-hop-options) | |||
| | | +--ro outgoing-interface? | | | | +--:(simple-next-hop) | |||
| | +--:(special-next-hop) | | | | | +--ro outgoing-interface? | |||
| | | +--ro special-next-hop? enumeration | | | | | +--ro v6ur:next-hop-address? | |||
| | +--:(next-hop-list) | | | | | +--ro v4ur:next-hop-address? | |||
| | | +--ro next-hop-list | | | | +--:(special-next-hop) | |||
| | | +--ro next-hop* | | | | | +--ro special-next-hop? enumeration | |||
| | | +--ro (address-or-interface) | | | | +--:(next-hop-list) | |||
| | | | +--:(outgoing-interface) | | | | +--ro next-hop-list | |||
| | | | | +--ro outgoing-interface? | | | | +--ro next-hop* | |||
| | | | +--:(v6ur:address) | | | | +--ro outgoing-interface? | |||
| | | | | +--ro v6ur:address? | | | | +--ro v6ur:address? | |||
| | | | +--:(v4ur:address) | | | | +--ro v4ur:address? | |||
| | | | +--ro v4ur:address? | | | +--ro source-protocol identityref | |||
| | | +--ro priority? enumeration | | | +--ro active? empty | |||
| | | +--ro weight? uint8 | | | +--ro last-updated? yang:date-and-time | |||
| | +--:(v6ur:next-hop-address) | | | +--ro v6ur:destination-prefix? inet:ipv6-prefix | |||
| | | +--ro v6ur:next-hop-address? | | | +--ro v4ur:destination-prefix? inet:ipv4-prefix | |||
| | +--:(v4ur:next-hop-address) | | +---x active-route | |||
| | +--ro v4ur:next-hop-address? | | +---w input | |||
| +--ro source-protocol identityref | | | +---w v6ur:destination-address? inet:ipv6-address | |||
| +--ro active? empty | | | +---w v4ur:destination-address? inet:ipv4-address | |||
| +--ro last-updated? yang:date-and-time | | +--ro output | |||
| +--ro v6ur:destination-prefix? inet:ipv6-prefix | | +--ro route | |||
| +--ro v4ur:destination-prefix? inet:ipv4-prefix | | +--ro next-hop | |||
| | | +--ro (next-hop-options) | ||||
| | | +--:(simple-next-hop) | ||||
| | | | +--ro outgoing-interface? | ||||
| | | | +--ro v6ur:next-hop-address? | ||||
| | | | +--ro v4ur:next-hop-address? | ||||
| | | +--:(special-next-hop) | ||||
| | | | +--ro special-next-hop? enumeration | ||||
| | | +--:(next-hop-list) | ||||
| | | +--ro next-hop-list | ||||
| | | +--ro next-hop* | ||||
| | | +--ro outgoing-interface? | ||||
| | | +--ro v6ur:next-hop-address? | ||||
| | | +--ro v4ur:next-hop-address? | ||||
| | +--ro source-protocol identityref | ||||
| | +--ro active? empty | ||||
| | +--ro last-updated? yang:date-and-time | ||||
| | +--ro v6ur:destination-prefix? inet:ipv6-prefix | ||||
| | +--ro v4ur:destination-prefix? inet:ipv4-prefix | ||||
| Appendix B. Minimum Implementation | Appendix B. Minimum Implementation | |||
| Some parts and options of the core routing model, such as user- | Some parts and options of the core routing model, such as user- | |||
| defined RIBs, are intended only for advanced routers. This appendix | defined RIBs, are intended only for advanced routers. This appendix | |||
| gives basic non-normative guidelines for implementing a bare minimum | gives basic non-normative guidelines for implementing a bare minimum | |||
| of available functions. Such an implementation may be used for hosts | of available functions. Such an implementation may be used for hosts | |||
| or very simple routers. | or very simple routers. | |||
| A minimum implementation does not support the feature "multiple- | A minimum implementation does not support the feature "multiple- | |||
| skipping to change at page 55, line 37 ¶ | skipping to change at page 54, line 51 ¶ | |||
| This appendix demonstrates how the core routing data model can be | This appendix demonstrates how the core routing data model can be | |||
| extended to support a new control plane protocol. The YANG module | extended to support a new control plane protocol. The YANG module | |||
| "example-rip" shown below is intended as an illustration rather than | "example-rip" shown below is intended as an illustration rather than | |||
| a real definition of a data model for the RIP routing protocol. For | a real definition of a data model for the RIP routing protocol. For | |||
| the sake of brevity, this module does not obey all the guidelines | the sake of brevity, this module does not obey all the guidelines | |||
| specified in [RFC6087]. See also Section 5.3.2. | specified in [RFC6087]. See also Section 5.3.2. | |||
| module example-rip { | module example-rip { | |||
| yang-version "1.1"; | ||||
| namespace "http://example.com/rip"; | namespace "http://example.com/rip"; | |||
| prefix "rip"; | prefix "rip"; | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| } | } | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| skipping to change at page 56, line 29 ¶ | skipping to change at page 55, line 44 ¶ | |||
| leaf tag { | leaf tag { | |||
| type uint16; | type uint16; | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "This leaf may be used to carry additional info, e.g. AS | "This leaf may be used to carry additional info, e.g. AS | |||
| number."; | number."; | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { | |||
| when "rt:source-protocol = 'rip:rip'" { | when "derived-from-or-self(rt:source-protocol, 'rip:rip')" { | |||
| description | description | |||
| "This augment is only valid for a routes whose source | "This augment is only valid for a routes whose source | |||
| protocol is RIP."; | protocol is RIP."; | |||
| } | } | |||
| description | description | |||
| "RIP-specific route attributes."; | "RIP-specific route attributes."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| augment "/rt:fib-route/rt:output/rt:route" { | augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" | |||
| + "rt:output/rt:route" { | ||||
| description | description | |||
| "RIP-specific route attributes in the output of 'active-route' | "RIP-specific route attributes in the output of 'active-route' | |||
| RPC."; | RPC."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
| + "rt:control-plane-protocol" { | + "rt:control-plane-protocol" { | |||
| when "rt:type = 'rip:rip'" { | when "derived-from-or-self(rt:type,'rip:rip')" { | |||
| description | description | |||
| "This augment is only valid for a routing protocol instance | "This augment is only valid for a routing protocol instance | |||
| of type 'rip'."; | of type 'rip'."; | |||
| } | } | |||
| container rip { | container rip { | |||
| presence "RIP configuration"; | presence "RIP configuration"; | |||
| description | description | |||
| "RIP instance configuration."; | "RIP instance configuration."; | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| skipping to change at page 57, line 43 ¶ | skipping to change at page 57, line 12 ¶ | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| default "30"; | default "30"; | |||
| description | description | |||
| "Time interval between periodic updates."; | "Time interval between periodic updates."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Appendix D. Example: NETCONF <get> Reply | Appendix D. Data Tree Example | |||
| This section contains a sample reply to the NETCONF <get> message, | ||||
| which could be sent by a server supporting (i.e., advertising them in | ||||
| the NETCONF <hello> message) the following YANG modules: | ||||
| o ietf-interfaces [RFC7223], | ||||
| o iana-if-type [RFC7224], | ||||
| o ietf-ip [RFC7277], | ||||
| o ietf-routing (Section 7), | This section contains an example instance data tree in the JSON | |||
| encoding [I-D.ietf-netmod-yang-json], containing both configuration | ||||
| and state data. The data conforms to a data model that is defined by | ||||
| the following YANG library specification [RFC7895]: | ||||
| o ietf-ipv4-unicast-routing (Section 8), | { | |||
| "ietf-yang-library:modules-state": { | ||||
| "module-set-id": "3e9be92f252db56fe912cd61a6f516ecf2f46315", | ||||
| "module": [ | ||||
| { | ||||
| "name": "ietf-routing", | ||||
| "revision": "2016-08-18", | ||||
| "feature": [ | ||||
| "multiple-ribs", | ||||
| "router-id" | ||||
| ], | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", | ||||
| "conformance-type": "implement" | ||||
| }, | ||||
| { | ||||
| "name": "ietf-ipv4-unicast-routing", | ||||
| "revision": "2016-08-18", | ||||
| "namespace": | ||||
| "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing", | ||||
| "conformance-type": "implement" | ||||
| }, | ||||
| { | ||||
| "name": "ietf-ipv6-unicast-routing", | ||||
| "revision": "2016-08-18", | ||||
| "namespace": | ||||
| "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing", | ||||
| "conformance-type": "implement", | ||||
| "submodule": [ | ||||
| { | ||||
| "name": "ietf-ipv6-router-advertisements", | ||||
| "revision": "2016-08-18" | ||||
| } | ||||
| ] | ||||
| o ietf-ipv6-unicast-routing (Section 9). | }, | |||
| { | ||||
| "name": "ietf-interfaces", | ||||
| "revision": "2014-05-08", | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", | ||||
| "conformance-type": "implement" | ||||
| }, | ||||
| { | ||||
| "name": "iana-if-type", | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", | ||||
| "revision": "", | ||||
| "conformance-type": "implement" | ||||
| }, | ||||
| { | ||||
| "name": "ietf-inet-types", | ||||
| "revision": "2013-07-15", | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", | ||||
| "conformance-type": "import" | ||||
| }, | ||||
| { | ||||
| "name": "ietf-yang-types", | ||||
| "revision": "2013-07-15", | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", | ||||
| "conformance-type": "import" | ||||
| }, | ||||
| { | ||||
| "name": "ietf-ip", | ||||
| "revision": "2014-06-16", | ||||
| "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", | ||||
| "conformance-type": "implement" | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| We assume a simple network set-up as shown in Figure 3: router "A" | A simple network set-up as shown in Figure 3 is assumed: router "A" | |||
| uses static default routes with the "ISP" router as the next-hop. | uses static default routes with the "ISP" router as the next-hop. | |||
| IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
| interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
| +-----------------+ | +-----------------+ | |||
| | | | | | | |||
| | Router ISP | | | Router ISP | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| |2001:db8:0:1::2 | |2001:db8:0:1::2 | |||
| skipping to change at page 58, line 39 ¶ | skipping to change at page 59, line 27 ¶ | |||
| | | | | | | |||
| | Router A | | | Router A | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| eth1|198.51.100.1 | eth1|198.51.100.1 | |||
| |2001:db8:0:2::1 | |2001:db8:0:2::1 | |||
| | | | | |||
| Figure 3: Example network configuration | Figure 3: Example network configuration | |||
| A reply to the NETCONF <get> message sent by router "A" would then be | The instance data tree could then be as follows: | |||
| as follows: | ||||
| <?xml version="1.0"?> | ||||
| <rpc-reply | ||||
| message-id="101" | ||||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | ||||
| 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: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:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> | ||||
| <data> | ||||
| <if:interfaces> | ||||
| <if:interface> | ||||
| <if:name>eth0</if:name> | ||||
| <if:type>ianaift:ethernetCsmacd</if:type> | ||||
| <if:description> | ||||
| Uplink to ISP. | ||||
| </if:description> | ||||
| <ip:ipv4> | ||||
| <ip:address> | ||||
| <ip:ip>192.0.2.1</ip:ip> | ||||
| <ip:prefix-length>24</ip:prefix-length> | ||||
| </ip:address> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| </ip:ipv4> | ||||
| <ip:ipv6> | ||||
| <ip:address> | ||||
| <ip:ip>2001:0db8:0:1::1</ip:ip> | ||||
| <ip:prefix-length>64</ip:prefix-length> | ||||
| </ip:address> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:autoconf> | ||||
| <ip:create-global-addresses>false</ip:create-global-addresses> | ||||
| </ip:autoconf> | ||||
| </ip:ipv6> | ||||
| </if:interface> | ||||
| <if:interface> | ||||
| <if:name>eth1</if:name> | ||||
| <if:type>ianaift:ethernetCsmacd</if:type> | ||||
| <if:description> | ||||
| Interface to the internal network. | ||||
| </if:description> | ||||
| <ip:ipv4> | ||||
| <ip:address> | ||||
| <ip:ip>198.51.100.1</ip:ip> | ||||
| <ip:prefix-length>24</ip:prefix-length> | ||||
| </ip:address> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| </ip:ipv4> | ||||
| <ip:ipv6> | ||||
| <ip:address> | ||||
| <ip:ip>2001:0db8:0:2::1</ip:ip> | ||||
| <ip:prefix-length>64</ip:prefix-length> | ||||
| </ip:address> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:autoconf> | ||||
| <ip:create-global-addresses>false</ip:create-global-addresses> | ||||
| </ip:autoconf> | ||||
| <v6ur:ipv6-router-advertisements> | ||||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | ||||
| </v6ur:ipv6-router-advertisements> | ||||
| </ip:ipv6> | ||||
| </if:interface> | ||||
| </if:interfaces> | ||||
| <if:interfaces-state> | ||||
| <if:interface> | ||||
| <if:name>eth0</if:name> | ||||
| <if:type>ianaift:ethernetCsmacd</if:type> | ||||
| <if:phys-address>00:0C:42:E5:B1:E9</if:phys-address> | ||||
| <if:oper-status>up</if:oper-status> | ||||
| <if:statistics> | ||||
| <if:discontinuity-time> | ||||
| 2015-10-24T17:11:27+02:00 | ||||
| </if:discontinuity-time> | ||||
| </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> | ||||
| <v6ur:ipv6-router-advertisements> | ||||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | ||||
| <v6ur:prefix-list> | ||||
| <v6ur:prefix> | ||||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | ||||
| </v6ur:prefix> | ||||
| </v6ur:prefix-list> | ||||
| </v6ur:ipv6-router-advertisements> | ||||
| </ip:ipv6> | ||||
| </if:interface> | ||||
| <if:interface> | ||||
| <if:name>eth1</if:name> | ||||
| <if:type>ianaift:ethernetCsmacd</if:type> | ||||
| <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | ||||
| <if:oper-status>up</if:oper-status> | ||||
| <if:statistics> | ||||
| <if:discontinuity-time> | ||||
| 2015-10-24T17:11:29+02:00 | ||||
| </if:discontinuity-time> | ||||
| </if:statistics> | ||||
| <ip:ipv4> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:mtu>1500</ip:mtu> | ||||
| <ip:address> | ||||
| <ip:ip>198.51.100.1</ip:ip> | ||||
| <ip:prefix-length>24</ip:prefix-length> | ||||
| </ip:address> | ||||
| </ip:ipv4> | ||||
| <ip:ipv6> | ||||
| <ip:forwarding>true</ip:forwarding> | ||||
| <ip:mtu>1500</ip:mtu> | ||||
| <ip:address> | ||||
| <ip:ip>2001:0db8:0:2::1</ip:ip> | ||||
| <ip:prefix-length>64</ip:prefix-length> | ||||
| </ip:address> | ||||
| <v6ur:ipv6-router-advertisements> | ||||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | ||||
| <v6ur:prefix-list> | ||||
| <v6ur:prefix> | ||||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | ||||
| </v6ur:prefix> | ||||
| </v6ur:prefix-list> | ||||
| </v6ur:ipv6-router-advertisements> | ||||
| </ip:ipv6> | ||||
| </if:interface> | ||||
| </if:interfaces-state> | ||||
| <rt:routing> | ||||
| <rt:router-id>192.0.2.1</rt:router-id> | ||||
| <rt:control-plane-protocols> | ||||
| <rt:control-plane-protocol> | ||||
| <rt:type>rt:static</rt:type> | ||||
| <rt:name>st0</rt:name> | ||||
| <rt:description> | ||||
| Static routing is used for the internal network. | ||||
| </rt:description> | ||||
| <rt:static-routes> | ||||
| <v4ur:ipv4> | ||||
| <v4ur:route> | ||||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | ||||
| <v4ur:next-hop> | ||||
| <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | ||||
| </v4ur:next-hop> | ||||
| </v4ur:route> | ||||
| </v4ur:ipv4> | ||||
| <v6ur:ipv6> | ||||
| <v6ur:route> | ||||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | ||||
| <v6ur:next-hop> | ||||
| <v6ur:next-hop-address>2001:db8:0:1::2</v6ur:next-hop-address> | ||||
| </v6ur:next-hop> | ||||
| </v6ur:route> | ||||
| </v6ur:ipv6> | ||||
| </rt:static-routes> | ||||
| </rt:control-plane-protocol> | ||||
| </rt:control-plane-protocols> | ||||
| </rt:routing> | ||||
| <rt:routing-state> | ||||
| <rt:interfaces> | ||||
| <rt:interface>eth0</rt:interface> | ||||
| <rt:interface>eth1</rt:interface> | ||||
| </rt:interfaces> | ||||
| <rt:control-plane-protocols> | ||||
| <rt:control-plane-protocol> | ||||
| <rt:type>rt:static</rt:type> | ||||
| <rt:name>st0</rt:name> | ||||
| </rt:control-plane-protocol> | ||||
| </rt:control-plane-protocols> | ||||
| <rt:ribs> | ||||
| <rt:rib> | ||||
| <rt:name>ipv4-master</rt:name> | ||||
| <rt:address-family>v4ur:ipv4-unicast</rt:address-family> | ||||
| <rt:default-rib>true</rt:default-rib> | ||||
| <rt:routes> | ||||
| <rt:route> | ||||
| <v4ur:destination-prefix>192.0.2.1/24</v4ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:last-updated>2015-10-24T17:11:27+02:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:destination-prefix> | ||||
| 198.51.100.0/24 | ||||
| </v4ur:destination-prefix> | ||||
| <rt:next-hop> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| </rt:next-hop> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:route-preference>0</rt:route-preference> | ||||
| <rt:last-updated>2015-10-24T17:11:27+02:00</rt:last-updated> | ||||
| </rt:route> | { | |||
| <rt:route> | "ietf-interfaces:interfaces": { | |||
| <v4ur:destination-prefix>0.0.0.0/0</v4ur:destination-prefix> | "interface": [ | |||
| <rt:source-protocol>rt:static</rt:source-protocol> | { | |||
| <rt:route-preference>5</rt:route-preference> | "name": "eth0", | |||
| <rt:next-hop> | "type": "iana-if-type:ethernetCsmacd", | |||
| <v4ur:next-hop-address>192.0.2.2</v4ur:next-hop-address> | "description": "Uplink to ISP.", | |||
| </rt:next-hop> | "ietf-ip:ipv4": { | |||
| <rt:last-updated>2015-10-24T18:02:45+02:00</rt:last-updated> | "address": [ | |||
| </rt:route> | { | |||
| </rt:routes> | "ip": "192.0.2.1", | |||
| </rt:rib> | "prefix-length": 24 | |||
| <rt:rib> | } | |||
| <rt:name>ipv6-master</rt:name> | ], | |||
| <rt:address-family>v6ur:ipv6-unicast</rt:address-family> | "forwarding": true | |||
| <rt:default-rib>true</rt:default-rib> | }, | |||
| <rt:routes> | "ietf-ip:ipv6": { | |||
| <rt:route> | "address": [ | |||
| <v6ur:destination-prefix> | { | |||
| 2001:db8:0:1::/64 | "ip": "2001:0db8:0:1::1", | |||
| </v6ur:destination-prefix> | "prefix-length": 64 | |||
| <rt:next-hop> | } | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ], | |||
| </rt:next-hop> | "forwarding": true, | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | "autoconf": { | |||
| <rt:route-preference>0</rt:route-preference> | "create-global-addresses": false | |||
| <rt:last-updated>2015-10-24T17:11:27+02:00</rt:last-updated> | } | |||
| </rt:route> | } | |||
| <rt:route> | }, | |||
| <v6ur:destination-prefix> | { | |||
| 2001:db8:0:2::/64 | "name": "eth1", | |||
| </v6ur:destination-prefix> | "type": "iana-if-type:ethernetCsmacd", | |||
| <rt:next-hop> | "description": "Interface to the internal network.", | |||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | "ietf-ip:ipv4": { | |||
| </rt:next-hop> | "address": [ | |||
| <rt:source-protocol>rt:direct</rt:source-protocol> | { | |||
| <rt:route-preference>0</rt:route-preference> | "ip": "198.51.100.1", | |||
| <rt:last-updated>2015-10-24T17:11:27+02:00</rt:last-updated> | "prefix-length": 24 | |||
| </rt:route> | } | |||
| <rt:route> | ], | |||
| <v6ur:destination-prefix>::/0</v6ur:destination-prefix> | "forwarding": true | |||
| <rt:next-hop> | }, | |||
| <v6ur:next-hop-address> | "ietf-ip:ipv6": { | |||
| 2001:db8:0:1::2 | "address": [ | |||
| </v6ur:next-hop-address> | { | |||
| </rt:next-hop> | "ip": "2001:0db8:0:2::1", | |||
| <rt:source-protocol>rt:static</rt:source-protocol> | "prefix-length": 64 | |||
| <rt:route-preference>5</rt:route-preference> | } | |||
| <rt:last-updated>2015-10-24T18:02:45+02:00</rt:last-updated> | ], | |||
| </rt:route> | "forwarding": true, | |||
| </rt:routes> | "autoconf": { | |||
| </rt:rib> | "create-global-addresses": false | |||
| </rt:ribs> | }, | |||
| </rt:routing-state> | "ietf-ipv6-unicast-routing:ipv6-router-advertisements": { | |||
| </data> | "send-advertisements": true | |||
| </rpc-reply> | } | |||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-interfaces:interfaces-state": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "phys-address": "00:0C:42:E5:B1:E9", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2015-10-24T17:11:27+02:00" | ||||
| }, | ||||
| "ietf-ip:ipv4": { | ||||
| "forwarding": true, | ||||
| "mtu": 1500, | ||||
| "address": [ | ||||
| { | ||||
| "ip": "192.0.2.1", | ||||
| "prefix-length": 24 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-ip:ipv6": { | ||||
| "forwarding": true, | ||||
| "mtu": 1500, | ||||
| "address": [ | ||||
| { | ||||
| "ip": "2001:0db8:0:1::1", | ||||
| "prefix-length": 64 | ||||
| } | ||||
| ], | ||||
| "ietf-ipv6-unicast-routing:ipv6-router-advertisements": { | ||||
| "send-advertisements": true, | ||||
| "prefix-list": { | ||||
| "prefix": [ | ||||
| { | ||||
| "prefix-spec": "2001:db8:0:2::/64" | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "phys-address": "00:0C:42:E5:B1:EA", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2015-10-24T17:11:29+02:00" | ||||
| }, | ||||
| "ietf-ip:ipv4": { | ||||
| "forwarding": true, | ||||
| "mtu": 1500, | ||||
| "address": [ | ||||
| { | ||||
| "ip": "198.51.100.1", | ||||
| "prefix-length": 24 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-ip:ipv6": { | ||||
| "forwarding": true, | ||||
| "mtu": 1500, | ||||
| "address": [ | ||||
| { | ||||
| "ip": "2001:0db8:0:2::1", | ||||
| "prefix-length": 64 | ||||
| } | ||||
| ], | ||||
| "ietf-ipv6-unicast-routing:ipv6-router-advertisements": { | ||||
| "send-advertisements": true, | ||||
| "prefix-list": { | ||||
| "prefix": [ | ||||
| { | ||||
| "prefix-spec": "2001:db8:0:2::/64" | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-routing:routing": { | ||||
| "router-id": "192.0.2.1", | ||||
| "control-plane-protocols": { | ||||
| "control-plane-protocol": [ | ||||
| { | ||||
| "type": "ietf-routing:static", | ||||
| "name": "st0", | ||||
| "description": | ||||
| "Static routing is used for the internal network.", | ||||
| "static-routes": { | ||||
| "ietf-ipv4-unicast-routing:ipv4": { | ||||
| "route": [ | ||||
| { | ||||
| "destination-prefix": "0.0.0.0/0", | ||||
| "next-hop": { | ||||
| "next-hop-address": "192.0.2.2" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-ipv6-unicast-routing:ipv6": { | ||||
| "route": [ | ||||
| { | ||||
| "destination-prefix": "::/0", | ||||
| "next-hop": { | ||||
| "next-hop-address": "2001:db8:0:1::2" | ||||
| <!-- Local Variables: --> | } | |||
| <!-- nxml-child-indent: 1 --> | } | |||
| <!-- End: --> | ] | |||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "ietf-routing:routing-state": { | ||||
| "interfaces": { | ||||
| "interface": [ | ||||
| "eth0", | ||||
| "eth1" | ||||
| ] | ||||
| }, | ||||
| "control-plane-protocols": { | ||||
| "control-plane-protocol": [ | ||||
| { | ||||
| "type": "ietf-routing:static", | ||||
| "name": "st0" | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ribs": { | ||||
| "rib": [ | ||||
| { | ||||
| "name": "ipv4-master", | ||||
| "address-family": "ietf-ipv4-unicast-routing:ipv4-unicast", | ||||
| "default-rib": true, | ||||
| "routes": { | ||||
| "route": [ | ||||
| { | ||||
| "ietf-ipv4-unicast-routing:destination-prefix": | ||||
| "192.0.2.1/24", | ||||
| "next-hop": { | ||||
| "outgoing-interface": "eth0" | ||||
| }, | ||||
| "route-preference": 0, | ||||
| "source-protocol": "ietf-routing:direct", | ||||
| "last-updated": "2015-10-24T17:11:27+02:00" | ||||
| }, | ||||
| { | ||||
| "ietf-ipv4-unicast-routing:destination-prefix": | ||||
| "198.51.100.0/24", | ||||
| "next-hop": { | ||||
| "outgoing-interface": "eth1" | ||||
| }, | ||||
| "source-protocol": "ietf-routing:direct", | ||||
| "route-preference": 0, | ||||
| "last-updated": "2015-10-24T17:11:27+02:00" | ||||
| }, | ||||
| { | ||||
| "ietf-ipv4-unicast-routing:destination-prefix": | ||||
| "0.0.0.0/0", | ||||
| "source-protocol": "ietf-routing:static", | ||||
| "route-preference": 5, | ||||
| "next-hop": { | ||||
| "ietf-ipv4-unicast-routing:next-hop-address": | ||||
| "192.0.2.2" | ||||
| }, | ||||
| "last-updated": "2015-10-24T18:02:45+02:00" | ||||
| } | ||||
| ] | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ipv6-master", | ||||
| "address-family": "ietf-ipv6-unicast-routing:ipv6-unicast", | ||||
| "default-rib": true, | ||||
| "routes": { | ||||
| "route": [ | ||||
| { | ||||
| "ietf-ipv6-unicast-routing:destination-prefix": | ||||
| "2001:db8:0:1::/64", | ||||
| "next-hop": { | ||||
| "outgoing-interface": "eth0" | ||||
| }, | ||||
| "source-protocol": "ietf-routing:direct", | ||||
| "route-preference": 0, | ||||
| "last-updated": "2015-10-24T17:11:27+02:00" | ||||
| }, | ||||
| { | ||||
| "ietf-ipv6-unicast-routing:destination-prefix": | ||||
| "2001:db8:0:2::/64", | ||||
| "next-hop": { | ||||
| "outgoing-interface": "eth1" | ||||
| }, | ||||
| "source-protocol": "ietf-routing:direct", | ||||
| "route-preference": 0, | ||||
| "last-updated": "2015-10-24T17:11:27+02:00" | ||||
| }, | ||||
| { | ||||
| "ietf-ipv6-unicast-routing:destination-prefix": | ||||
| "::/0", | ||||
| "next-hop": { | ||||
| "ietf-ipv6-unicast-routing:next-hop-address": | ||||
| "2001:db8:0:1::2" | ||||
| }, | ||||
| "source-protocol": "ietf-routing:static", | ||||
| "route-preference": 5, | ||||
| "last-updated": "2015-10-24T18:02:45+02:00" | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Appendix E. Change Log | Appendix E. Change Log | |||
| RFC Editor: Remove this section upon publication as an RFC. | RFC Editor: Remove this section upon publication as an RFC. | |||
| E.1. Changes Between Versions -21 and -22 | E.1. Changes Between Versions -22 and -23 | |||
| o Removed "route-tag" feature. | ||||
| o Removed next-hop classifiers. | ||||
| o Fixed invalid when expressions in augments. | ||||
| o In simple-next-hop, an address, outgoing interface or both can be | ||||
| specified. | ||||
| o RPC "fib-route" changed into RIB action "active-route". | ||||
| o The requirement that direct routes be always placed in default | ||||
| RIBs. | ||||
| E.2. Changes Between Versions -21 and -22 | ||||
| o Added "next-hop-list" as a new case of the "next-hop-options" | o Added "next-hop-list" as a new case of the "next-hop-options" | |||
| choice. | choice. | |||
| o Renamed "routing protocol" to "control plane protocol" in both the | o Renamed "routing protocol" to "control plane protocol" in both the | |||
| YANG modules and I-D text. | YANG modules and I-D text. | |||
| E.2. Changes Between Versions -20 and -21 | E.3. Changes Between Versions -20 and -21 | |||
| o Routing instances were removed. | o Routing instances were removed. | |||
| o IPv6 RA parameters were moved to the "ietf-ipv6-router- | o IPv6 RA parameters were moved to the "ietf-ipv6-router- | |||
| advertisements". | advertisements". | |||
| E.3. Changes Between Versions -19 and -20 | E.4. Changes Between Versions -19 and -20 | |||
| o Assignment of L3 interfaces to routing instances is now part of | o Assignment of L3 interfaces to routing instances is now part of | |||
| interface configuration. | interface configuration. | |||
| o Next-hop options in configuration were aligned with state data. | o Next-hop options in configuration were aligned with state data. | |||
| o It is recommended to enclose protocol-specific configuration in a | o It is recommended to enclose protocol-specific configuration in a | |||
| presence container. | presence container. | |||
| E.4. Changes Between Versions -18 and -19 | E.5. Changes Between Versions -18 and -19 | |||
| o The leaf "route-preference" was removed from the "routing- | o The leaf "route-preference" was removed from the "routing- | |||
| protocol" container in both "routing" and "routing-state". | protocol" container in both "routing" and "routing-state". | |||
| o The "vrf-routing-instance" identity was added in support of a | o The "vrf-routing-instance" identity was added in support of a | |||
| common routing-instance type in addition to the "default-routing- | common routing-instance type in addition to the "default-routing- | |||
| instance". | instance". | |||
| o Removed "enabled" switch from "routing-protocol". | o Removed "enabled" switch from "routing-protocol". | |||
| E.5. Changes Between Versions -17 and -18 | E.6. Changes Between Versions -17 and -18 | |||
| o The container "ribs" was moved under "routing-instance" (in both | o The container "ribs" was moved under "routing-instance" (in both | |||
| "routing" and "routing-state"). | "routing" and "routing-state"). | |||
| o Typedefs "rib-ref" and "rib-state-ref" were removed. | o Typedefs "rib-ref" and "rib-state-ref" were removed. | |||
| o Removed "recipient-ribs" (both state and configuration). | o Removed "recipient-ribs" (both state and configuration). | |||
| o Removed "connected-ribs" from "routing-protocol" (both state and | o Removed "connected-ribs" from "routing-protocol" (both state and | |||
| configuration). | configuration). | |||
| skipping to change at page 65, line 37 ¶ | skipping to change at page 67, line 7 ¶ | |||
| rather than list (both config and state). The opposite reference | rather than list (both config and state). The opposite reference | |||
| from "if:interface" to "rt:routing-instance" was changed to a | from "if:interface" to "rt:routing-instance" was changed to a | |||
| single leaf (an interface cannot belong to multiple routing | single leaf (an interface cannot belong to multiple routing | |||
| instances). | instances). | |||
| o Specification of a default RIB is now a simple flag under "rib" | o Specification of a default RIB is now a simple flag under "rib" | |||
| (both config and state). | (both config and state). | |||
| o Default RIBs are marked by a flag in state data. | o Default RIBs are marked by a flag in state data. | |||
| E.6. Changes Between Versions -16 and -17 | E.7. Changes Between Versions -16 and -17 | |||
| o Added Acee as a co-author. | o Added Acee as a co-author. | |||
| o Removed all traces of route filters. | o Removed all traces of route filters. | |||
| o Removed numeric IDs of list entries in state data. | o Removed numeric IDs of list entries in state data. | |||
| o Removed all next-hop cases except "simple-next-hop" and "special- | o Removed all next-hop cases except "simple-next-hop" and "special- | |||
| next-hop". | next-hop". | |||
| o Removed feature "multipath-routes". | o Removed feature "multipath-routes". | |||
| o Augmented "ietf-interfaces" module with a leaf-list of leafrefs | o Augmented "ietf-interfaces" module with a leaf-list of leafrefs | |||
| pointing form state data of an interface entry to the routing | pointing form state data of an interface entry to the routing | |||
| instance(s) to which the interface is assigned. | instance(s) to which the interface is assigned. | |||
| E.7. Changes Between Versions -15 and -16 | E.8. Changes Between Versions -15 and -16 | |||
| o Added 'type' as the second key component of 'routing-protocol', | o Added 'type' as the second key component of 'routing-protocol', | |||
| both in configuration and state data. | both in configuration and state data. | |||
| o The restriction of no more than one connected RIB per address | o The restriction of no more than one connected RIB per address | |||
| family was removed. | family was removed. | |||
| o Removed the 'id' key of routes in RIBs. This list has no keys | o Removed the 'id' key of routes in RIBs. This list has no keys | |||
| anymore. | anymore. | |||
| skipping to change at page 66, line 40 ¶ | skipping to change at page 68, line 12 ¶ | |||
| o Added next-hop lists to state data. | o Added next-hop lists to state data. | |||
| o Added two cases for specifying next-hops indirectly - via a new | o Added two cases for specifying next-hops indirectly - via a new | |||
| RIB or a recursive list of next-hops. | RIB or a recursive list of next-hops. | |||
| o Reorganized next-hop in static routes. | o Reorganized next-hop in static routes. | |||
| o Removed all 'if-feature' statements from state data. | o Removed all 'if-feature' statements from state data. | |||
| E.8. Changes Between Versions -14 and -15 | E.9. Changes Between Versions -14 and -15 | |||
| o Removed all defaults from state data. | o Removed all defaults from state data. | |||
| o Removed default from 'cur-hop-limit' in config. | o Removed default from 'cur-hop-limit' in config. | |||
| E.9. Changes Between Versions -13 and -14 | E.10. Changes Between Versions -13 and -14 | |||
| o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | o Removed dependency of 'connected-ribs' on the 'multiple-ribs' | |||
| feature. | feature. | |||
| o Removed default value of 'cur-hop-limit' in state data. | o Removed default value of 'cur-hop-limit' in state data. | |||
| o Moved parts of descriptions and all references on IPv6 RA | o Moved parts of descriptions and all references on IPv6 RA | |||
| parameters from state data to configuration. | parameters from state data to configuration. | |||
| o Added reference to RFC 6536 in the Security section. | o Added reference to RFC 6536 in the Security section. | |||
| E.10. Changes Between Versions -12 and -13 | E.11. Changes Between Versions -12 and -13 | |||
| o Wrote appendix about minimum implementation. | o Wrote appendix about minimum implementation. | |||
| o Remove "when" statement for IPv6 router interface state data - it | o Remove "when" statement for IPv6 router interface state data - it | |||
| was dependent on a config value that may not be present. | was dependent on a config value that may not be present. | |||
| o Extra container for the next-hop list. | o Extra container for the next-hop list. | |||
| o Names rather than numeric ids are used for referring to list | o Names rather than numeric ids are used for referring to list | |||
| entries in state data. | entries in state data. | |||
| skipping to change at page 67, line 37 ¶ | skipping to change at page 69, line 8 ¶ | |||
| o | o | |||
| o Removed "if-feature multiple-ribs;" from connected-ribs. | o Removed "if-feature multiple-ribs;" from connected-ribs. | |||
| o "rib-name" instead of "name" is used as the name of leafref nodes. | o "rib-name" instead of "name" is used as the name of leafref nodes. | |||
| o "next-hop" instead of "nexthop" or "gateway" used throughout, both | o "next-hop" instead of "nexthop" or "gateway" used throughout, both | |||
| in node names and text. | in node names and text. | |||
| E.11. Changes Between Versions -11 and -12 | E.12. Changes Between Versions -11 and -12 | |||
| o Removed feature "advanced-router" and introduced two features | o Removed feature "advanced-router" and introduced two features | |||
| instead: "multiple-ribs" and "multipath-routes". | instead: "multiple-ribs" and "multipath-routes". | |||
| o Unified the keys of config and state versions of "routing- | o Unified the keys of config and state versions of "routing- | |||
| instance" and "rib" lists. | instance" and "rib" lists. | |||
| o Numerical identifiers of state list entries are not keys anymore, | o Numerical identifiers of state list entries are not keys anymore, | |||
| but they are constrained using the "unique" statement. | but they are constrained using the "unique" statement. | |||
| o Updated acknowledgements. | o Updated acknowledgements. | |||
| E.12. Changes Between Versions -10 and -11 | E.13. 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 68, line 29 ¶ | skipping to change at page 69, line 45 ¶ | |||
| router". | router". | |||
| o Made nexthop into a choice in order to allow for nexthop-list | o Made nexthop into a choice in order to allow for nexthop-list | |||
| (I2RS requirement). | (I2RS requirement). | |||
| o Added nexthop-list with entries having priorities (backup) and | o Added nexthop-list with entries having priorities (backup) and | |||
| weights (load balancing). | weights (load balancing). | |||
| o Updated bibliography references. | o Updated bibliography references. | |||
| E.13. Changes Between Versions -09 and -10 | E.14. Changes Between Versions -09 and -10 | |||
| o Added subtree for state data ("/routing-state"). | o Added subtree for state data ("/routing-state"). | |||
| o Terms "system-controlled entry" and "user-controlled entry" | o Terms "system-controlled entry" and "user-controlled entry" | |||
| defined and used. | defined and used. | |||
| o New feature "user-defined-routing-tables". Nodes that are useful | o New feature "user-defined-routing-tables". Nodes that are useful | |||
| only with user-defined routing tables are now conditional. | only with user-defined routing tables are now conditional. | |||
| o Added grouping "router-id". | o Added grouping "router-id". | |||
| o In routing tables, "source-protocol" attribute of routes now | o In routing tables, "source-protocol" attribute of routes now | |||
| reports only protocol type, and its datatype is "identityref". | reports only protocol type, and its datatype is "identityref". | |||
| o Renamed "main-routing-table" to "default-routing-table". | o Renamed "main-routing-table" to "default-routing-table". | |||
| E.14. Changes Between Versions -08 and -09 | E.15. Changes Between Versions -08 and -09 | |||
| o Fixed "must" expression for "connected-routing-table". | o Fixed "must" expression for "connected-routing-table". | |||
| o Simplified "must" expression for "main-routing-table". | o Simplified "must" expression for "main-routing-table". | |||
| o Moved per-interface configuration of a new routing protocol under | o Moved per-interface configuration of a new routing protocol under | |||
| 'routing-protocol'. This also affects the 'example-rip' module. | 'routing-protocol'. This also affects the 'example-rip' module. | |||
| E.15. Changes Between Versions -07 and -08 | E.16. Changes Between Versions -07 and -08 | |||
| o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
| E.16. Changes Between Versions -06 and -07 | E.17. Changes Between Versions -06 and -07 | |||
| o The contents of <get-reply> in Appendix D was updated: "eth[01]" | o The contents of <get-reply> in Appendix D was updated: "eth[01]" | |||
| is used as the value of "location", and "forwarding" is on for | is used as the value of "location", and "forwarding" is on for | |||
| both interfaces and both IPv4 and IPv6. | both interfaces and both IPv4 and IPv6. | |||
| o The "must" expression for "main-routing-table" was modified to | o The "must" expression for "main-routing-table" was modified to | |||
| avoid redundant error messages reporting address family mismatch | avoid redundant error messages reporting address family mismatch | |||
| when "name" points to a non-existent routing table. | when "name" points to a non-existent routing table. | |||
| o The default behavior for IPv6 RA prefix advertisements was | o The default behavior for IPv6 RA prefix advertisements was | |||
| clarified. | clarified. | |||
| o Changed type of "rt:router-id" to "ip:dotted-quad". | o Changed type of "rt:router-id" to "ip:dotted-quad". | |||
| o Type of "rt:router-id" changed to "yang:dotted-quad". | o Type of "rt:router-id" changed to "yang:dotted-quad". | |||
| o Fixed missing prefixes in XPath expressions. | o Fixed missing prefixes in XPath expressions. | |||
| E.17. Changes Between Versions -05 and -06 | E.18. 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 70, line 5 ¶ | skipping to change at page 71, line 20 ¶ | |||
| o Complete data tree is now in Appendix A. | o Complete data tree is now in Appendix A. | |||
| o Changed type of "source-protocol" from "leafref" to "string". | o Changed type of "source-protocol" from "leafref" to "string". | |||
| o Clarified the relationship between routing protocol instances and | o Clarified the relationship between routing protocol instances and | |||
| connected routing tables. | connected routing tables. | |||
| o Added a must constraint saying that a routing table connected to | o Added a must constraint saying that a routing table connected to | |||
| the direct pseudo-protocol must not be a main routing table. | the direct pseudo-protocol must not be a main routing table. | |||
| E.18. Changes Between Versions -04 and -05 | E.19. 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 70, line 40 ¶ | skipping to change at page 72, line 8 ¶ | |||
| o The "direct" pseudo-protocol is always connected to main routing | o The "direct" pseudo-protocol is always connected to main routing | |||
| tables. | tables. | |||
| o Entries in the list of connected routing tables renamed from | o Entries in the list of connected routing tables renamed from | |||
| "routing-table" to "connected-routing-table". | "routing-table" to "connected-routing-table". | |||
| o Added "must" constraint saying that a routing table must not be | o Added "must" constraint saying that a routing table must not be | |||
| its own recipient. | its own recipient. | |||
| E.19. Changes Between Versions -03 and -04 | E.20. Changes Between Versions -03 and -04 | |||
| o Changed "error-tag" for both RPC operations from "missing element" | o Changed "error-tag" for both RPC operations from "missing element" | |||
| to "data-missing". | to "data-missing". | |||
| o Removed the decrementing behavior for advertised IPv6 prefix | o Removed the decrementing behavior for advertised IPv6 prefix | |||
| parameters "valid-lifetime" and "preferred-lifetime". | parameters "valid-lifetime" and "preferred-lifetime". | |||
| o Changed the key of the static route lists from "seqno" to "id" | o Changed the key of the static route lists from "seqno" to "id" | |||
| because the routes needn't be sorted. | because the routes needn't be sorted. | |||
| o Added 'must' constraint saying that "preferred-lifetime" must not | o Added 'must' constraint saying that "preferred-lifetime" must not | |||
| be greater than "valid-lifetime". | be greater than "valid-lifetime". | |||
| E.20. Changes Between Versions -02 and -03 | E.21. 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 71, line 37 ¶ | skipping to change at page 73, line 5 ¶ | |||
| "ietf-ip". | "ietf-ip". | |||
| o Added "router-id" leaf. | o Added "router-id" leaf. | |||
| o Specified the names for IPv4/IPv6 unicast main routing tables. | o Specified the names for IPv4/IPv6 unicast main routing tables. | |||
| o Route parameter "last-modified" changed to "age". | o Route parameter "last-modified" changed to "age". | |||
| o Added container "recipient-routing-tables". | o Added container "recipient-routing-tables". | |||
| E.21. Changes Between Versions -01 and -02 | E.22. Changes Between Versions -01 and -02 | |||
| o Added module "ietf-ipv6-unicast-routing". | o Added module "ietf-ipv6-unicast-routing". | |||
| o The example in Appendix D now uses IP addresses from blocks | o The example in Appendix D now uses IP addresses from blocks | |||
| reserved for documentation. | reserved for documentation. | |||
| o Direct routes appear by default in the forwarding table. | o Direct routes appear by default in the forwarding table. | |||
| o Network layer interfaces must be assigned to a router instance. | o Network layer interfaces must be assigned to a router instance. | |||
| Additional interface configuration may be present. | Additional interface configuration may be present. | |||
| skipping to change at page 72, line 12 ¶ | skipping to change at page 73, line 29 ¶ | |||
| o Additional "must" statements were added. | o Additional "must" statements were added. | |||
| o The "route-content" grouping for IPv4 and IPv6 unicast now | o The "route-content" grouping for IPv4 and IPv6 unicast now | |||
| includes the material from the "ietf-routing" version via "uses | includes the material from the "ietf-routing" version via "uses | |||
| rt:route-content". | rt:route-content". | |||
| o Explanation of symbols in the tree representation of data model | o Explanation of symbols in the tree representation of data model | |||
| hierarchy. | hierarchy. | |||
| E.22. Changes Between Versions -00 and -01 | E.23. 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. 140 change blocks. | ||||
| 778 lines changed or deleted | 848 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/ | ||||