| < draft-ietf-netmod-routing-cfg-09.txt | draft-ietf-netmod-routing-cfg-10.txt > | |||
|---|---|---|---|---|
| NETMOD L. Lhotka | NETMOD L. Lhotka | |||
| Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
| Intended status: Standards Track February 23, 2013 | Intended status: Standards Track July 13, 2013 | |||
| Expires: August 27, 2013 | Expires: January 14, 2014 | |||
| A YANG Data Model for Routing Management | A YANG Data Model for Routing Management | |||
| draft-ietf-netmod-routing-cfg-09 | draft-ietf-netmod-routing-cfg-10 | |||
| Abstract | Abstract | |||
| This document contains a specification of three YANG modules. | This document contains a specification of three YANG modules. | |||
| Together they form the core routing data model which serves as a | Together they form the core routing data model which serves as a | |||
| framework for configuring and managing a routing subsystem. It is | framework for configuring and managing a routing subsystem. It is | |||
| expected that these modules will be augmented by additional YANG | expected that these modules will be augmented by additional YANG | |||
| modules defining data models for individual routing protocols and | modules defining data models for individual routing protocols and | |||
| other related functions. The core routing data model provides common | other related functions. The core routing data model provides common | |||
| building blocks for such extensions - router instances, routes, | building blocks for such extensions - router instances, routes, | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on August 27, 2013. | This Internet-Draft will expire on January 14, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 18 ¶ | skipping to change at page 2, line 18 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | 2.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 6 | |||
| 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. The Design of the Core Routing Data Model . . . . . . . . . . 9 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 9 | |||
| 4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.1.1. Configuration of IPv6 Router Interfaces . . . . . . . 12 | 4.1.1. Parameters of IPv6 Router Interfaces . . . . . . . . . 13 | |||
| 4.2. Routes . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.2. Routes . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 14 | 4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 16 | 4.3.1. User-Defined Routing Tables . . . . . . . . . . . . . 16 | |||
| 4.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 16 | 4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 17 | |||
| 4.4.2. Defining New Routing Protocols . . . . . . . . . . . . 17 | 4.4.1. Routing Pseudo-Protocols . . . . . . . . . . . . . . . 17 | |||
| 4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 18 | 4.4.2. Defining New Routing Protocols . . . . . . . . . . . . 18 | |||
| 4.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 19 | 4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 5. Interactions with Other YANG Modules . . . . . . . . . . . . . 20 | 4.6. RPC Operations . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 20 | 5. Interactions with Other YANG Modules . . . . . . . . . . . . . 21 | |||
| 5.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 20 | 5.1. Module "ietf-interfaces" . . . . . . . . . . . . . . . . . 21 | |||
| 6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 22 | 5.2. Module "ietf-ip" . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 36 | 6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 40 | 7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 42 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 | 8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 46 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 52 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 61 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 54 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . . 54 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . . 54 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 63 | |||
| Appendix A. The Complete Data Tree . . . . . . . . . . . . . . . 55 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 63 | |||
| Appendix B. Example: Adding a New Routing Protocol . . . . . . . 57 | Appendix A. The Complete Data Trees . . . . . . . . . . . . . . . 64 | |||
| Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 60 | A.1. Configuration Data . . . . . . . . . . . . . . . . . . . . 64 | |||
| Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 65 | A.2. Operational State Data . . . . . . . . . . . . . . . . . . 65 | |||
| D.1. Changes Between Versions -08 and -09 . . . . . . . . . . . 65 | Appendix B. Example: Adding a New Routing Protocol . . . . . . . 68 | |||
| D.2. Changes Between Versions -07 and -08 . . . . . . . . . . . 65 | Appendix C. Example: NETCONF <get> Reply . . . . . . . . . . . . 71 | |||
| D.3. Changes Between Versions -06 and -07 . . . . . . . . . . . 65 | Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 77 | |||
| D.4. Changes Between Versions -05 and -06 . . . . . . . . . . . 65 | D.1. Changes Between Versions -09 and -10 . . . . . . . . . . . 77 | |||
| D.5. Changes Between Versions -04 and -05 . . . . . . . . . . . 66 | D.2. Changes Between Versions -08 and -09 . . . . . . . . . . . 77 | |||
| D.6. Changes Between Versions -03 and -04 . . . . . . . . . . . 67 | D.3. Changes Between Versions -07 and -08 . . . . . . . . . . . 77 | |||
| D.7. Changes Between Versions -02 and -03 . . . . . . . . . . . 67 | D.4. Changes Between Versions -06 and -07 . . . . . . . . . . . 77 | |||
| D.8. Changes Between Versions -01 and -02 . . . . . . . . . . . 68 | D.5. Changes Between Versions -05 and -06 . . . . . . . . . . . 78 | |||
| D.9. Changes Between Versions -00 and -01 . . . . . . . . . . . 68 | D.6. Changes Between Versions -04 and -05 . . . . . . . . . . . 78 | |||
| D.7. Changes Between Versions -03 and -04 . . . . . . . . . . . 79 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 69 | D.8. Changes Between Versions -02 and -03 . . . . . . . . . . . 79 | |||
| D.9. Changes Between Versions -01 and -02 . . . . . . . . . . . 80 | ||||
| D.10. Changes Between Versions -00 and -01 . . . . . . . . . . . 80 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 82 | ||||
| 1. Introduction | 1. Introduction | |||
| This document contains a specification of the following YANG modules: | This document contains a specification of the following YANG modules: | |||
| o Module "ietf-routing" provides generic components of a routing | o Module "ietf-routing" provides generic components of a routing | |||
| data model. | data model. | |||
| o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | |||
| module with additional data specific to IPv4 unicast. | module with additional data specific to IPv4 unicast. | |||
| skipping to change at page 5, line 31 ¶ | skipping to change at page 5, line 31 ¶ | |||
| The following terms are defined in [RFC6020]: | The following terms are defined in [RFC6020]: | |||
| o augment | o augment | |||
| o configuration data | o configuration data | |||
| o data model | o data model | |||
| o data node | o data node | |||
| o feature | ||||
| o mandatory node | o mandatory node | |||
| o module | o module | |||
| o state data | o state data | |||
| o RPC operation | o RPC operation | |||
| 2.1. Glossary of New Terms | 2.1. Glossary of New Terms | |||
| skipping to change at page 6, line 7 ¶ | skipping to change at page 6, line 7 ¶ | |||
| prefix, then it is up to the routing algorithm to select the | prefix, then it is up to the routing algorithm to select the | |||
| active route (or several active routes in the case of multi-path | active route (or several active routes in the case of multi-path | |||
| routing). | routing). | |||
| core routing data model: YANG data model resulting from the | core routing data model: YANG data model resulting from the | |||
| combination of "ietf-routing", "ietf-ipv4-unicast-routing" and | combination of "ietf-routing", "ietf-ipv4-unicast-routing" and | |||
| "ietf-ipv6-unicast-routing" modules. | "ietf-ipv6-unicast-routing" modules. | |||
| direct route: a route to a directly connected network. | direct route: a route to a directly connected network. | |||
| system-controlled entry: An entry of a list in operational state | ||||
| data ("config false") that is created by the system independently | ||||
| of what has been explicitly configured. An example is the default | ||||
| routing table. A client cannot cause this entry to be deleted but | ||||
| may be able to configure it. | ||||
| user-controlled entry: An entry of a list in operational state data | ||||
| ("config false") that is created and deleted as a direct | ||||
| consequence of certain configuration changes. An example is an | ||||
| additional user-defined routing table. | ||||
| 2.2. Tree Diagrams | 2.2. Tree Diagrams | |||
| 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. The meaning of the symbols in these | appear in the main text. The meaning of the symbols in these | |||
| diagrams is as follows: | diagrams is as follows: | |||
| o Brackets "[" and "]" enclose list keys. | o Brackets "[" and "]" enclose list keys. | |||
| o Abbreviations before data node names: "rw" means configuration | o Abbreviations before data node names: "rw" means configuration | |||
| (read-write) and "ro" state data (read-only). | (read-write) and "ro" state data (read-only). | |||
| o Symbols after data node names: "?" means an optional node and "*" | o Symbols after data node names: "?" means an optional node and "*" | |||
| denotes a "leaf-list". | denotes a "list" or "leaf-list". | |||
| o Parentheses enclose choice and case nodes, and case nodes are also | o Parentheses enclose choice and case nodes, and case nodes are also | |||
| marked with a colon (":"). | marked with a colon (":"). | |||
| o Ellipsis ("...") stands for contents of subtrees that are not | o Ellipsis ("...") stands for contents of subtrees that are not | |||
| shown. | shown. | |||
| 2.3. Prefixes in Data Node Names | 2.3. Prefixes in Data Node Names | |||
| In this document, names of data nodes, RPC methods and other data | In this document, names of data nodes, RPC methods and other data | |||
| model objects are used mostly without a prefix, as long as it is | model objects are used mostly without a prefix, as long as it is | |||
| clear from the context in which YANG module each name is defined. | clear from the context in which YANG module each name is defined. | |||
| Otherwise, names are prefixed using the standard prefix associated | Otherwise, names are prefixed using the standard prefix associated | |||
| with the corresponding YANG module, as shown in Table 1. | with the corresponding YANG module, as shown in Table 1. | |||
| +--------+---------------------------+--------------+ | +--------+---------------------------+--------------+ | |||
| | Prefix | YANG module | Reference | | | Prefix | YANG module | Reference | | |||
| +--------+---------------------------+--------------+ | +--------+---------------------------+--------------+ | |||
| | ianaaf | iana-afn-safi | [IANA-IF-AF] | | | ianaaf | iana-afn-safi | [IANA-AF] | | |||
| | | | | | | | | | | |||
| | if | ietf-interfaces | [YANG-IF] | | | if | ietf-interfaces | [YANG-IF] | | |||
| | | | | | | | | | | |||
| | ip | ietf-ip | [YANG-IP] | | | ip | ietf-ip | [YANG-IP] | | |||
| | | | | | | | | | | |||
| | rt | ietf-routing | Section 6 | | | rt | ietf-routing | Section 6 | | |||
| | | | | | | | | | | |||
| | v4ur | ietf-ipv4-unicast-routing | Section 7 | | | v4ur | ietf-ipv4-unicast-routing | Section 7 | | |||
| | | | | | | | | | | |||
| | v6ur | ietf-ipv6-unicast-routing | Section 8 | | | v6ur | ietf-ipv6-unicast-routing | Section 8 | | |||
| skipping to change at page 9, line 12 ¶ | skipping to change at page 9, line 12 ¶ | |||
| flexible enough to facilitate such a mapping and accommodate data | flexible enough to facilitate such a mapping and accommodate data | |||
| models with different logic. | models with different logic. | |||
| 4. The Design of the Core Routing Data Model | 4. The Design of the Core Routing Data Model | |||
| The core routing data model consists of three YANG modules. The | The core routing data model consists of three YANG modules. The | |||
| first module, "ietf-routing", defines the generic components of a | first module, "ietf-routing", defines the generic components of a | |||
| routing system. The other two modules, "ietf-ipv4-unicast-routing" | routing system. The other two modules, "ietf-ipv4-unicast-routing" | |||
| and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | |||
| with additional data nodes that are needed for IPv4 and IPv6 unicast | with additional data nodes that are needed for IPv4 and IPv6 unicast | |||
| routing, respectively. An abridged view of the data hierarchy is | routing, respectively. Figures 1 and 2 show abridged views of the | |||
| shown in Figure 1. See Appendix A for the complete data tree. | configuration and operational state data hierarchies. See Appendix A | |||
| for the complete data trees. | ||||
| +--rw routing | +--rw routing | |||
| +--rw router [name] | +--rw router* [name] | |||
| | +--rw name | | +--rw name | |||
| | +--rw type? | | +--rw type? | |||
| | +--rw enabled? | | +--rw enabled? | |||
| | +--rw router-id? | | +--rw router-id? | |||
| | +--rw description? | | +--rw description? | |||
| | +--rw main-routing-tables | | +--rw default-routing-tables | |||
| | | +--rw main-routing-table [address-family safi] | | | +--rw default-routing-table* [address-family safi] | |||
| | | +--rw address-family | | | +--rw address-family | |||
| | | +--rw safi | | | +--rw safi | |||
| | | +--rw name? | | | +--rw name | |||
| | +--rw interfaces | | +--rw interfaces | |||
| | | +--rw interface [name] | | | +--rw interface* [name] | |||
| | | +--rw name | | | +--rw name | |||
| | | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | | ... | | | ... | |||
| | +--rw routing-protocols | | +--rw routing-protocols | |||
| | +--rw routing-protocol [name] | | +--rw routing-protocol* [name] | |||
| | +--rw name | | +--rw name | |||
| | +--rw description? | | +--rw description? | |||
| | +--rw enabled? | | +--rw enabled? | |||
| | +--rw type | | +--rw type | |||
| | +--rw connected-routing-tables | | +--rw connected-routing-tables | |||
| | | ... | | | ... | |||
| | +--rw static-routes | | +--rw static-routes | |||
| | ... | | ... | |||
| +--rw routing-tables | +--rw routing-tables | |||
| | +--rw routing-table [name] | | +--rw routing-table* [name] | |||
| | +--rw name | | +--rw name | |||
| | +--rw address-family | | +--rw address-family | |||
| | +--rw safi | | +--rw safi | |||
| | +--rw description? | | +--rw description? | |||
| | +--ro routes | ||||
| | | +--ro route | ||||
| | | ... | ||||
| | +--rw recipient-routing-tables | | +--rw recipient-routing-tables | |||
| | +--rw recipient-routing-table [name] | | +--rw recipient-routing-table* [name] | |||
| | ... | | ... | |||
| +--rw route-filters | +--rw route-filters | |||
| +--rw route-filter [name] | +--rw route-filter* [name] | |||
| +--rw name | +--rw name | |||
| +--rw description? | +--rw description? | |||
| +--rw type | +--rw type | |||
| Figure 1: Data hierarchy of the core routing data model. | Figure 1: Configuration data hierarchy. | |||
| As can be seen from Figure 1, the core routing data model introduces | +--ro routing-state | |||
| several generic components of a routing framework: routers, routing | +--ro router* [name] | |||
| tables containing lists of routes, routing protocols and route | | +--ro name | |||
| filters. The following subsections describe these components in more | | +--ro type? | |||
| detail. | | +--ro router-id? | |||
| | +--ro default-routing-tables | ||||
| | | +--ro default-routing-table* [address-family safi] | ||||
| | | +--ro address-family | ||||
| | | +--ro safi | ||||
| | | +--ro name | ||||
| | +--ro interfaces | ||||
| | | +--ro interface* [name] | ||||
| | | +--ro name | ||||
| | | +--ro v6ur:ipv6-router-advertisements | ||||
| | | ... | ||||
| | +--ro routing-protocols | ||||
| | +--ro routing-protocol* [name] | ||||
| | +--ro name | ||||
| | +--ro type | ||||
| | +--ro connected-routing-tables | ||||
| | ... | ||||
| +--ro routing-tables | ||||
| | +--ro routing-table* [name] | ||||
| | +--ro name | ||||
| | +--ro address-family | ||||
| | +--ro safi | ||||
| | +--ro routes | ||||
| | | +--ro route* | ||||
| | | ... | ||||
| | +--ro recipient-routing-tables | ||||
| | +--ro recipient-routing-table* [name] | ||||
| | ... | ||||
| +--ro route-filters | ||||
| +--ro route-filter* [name] | ||||
| +--ro name | ||||
| +--ro type | ||||
| Figure 2: Operational state data hierarchy. | ||||
| As can be seen from Figures 1 and 2, the core routing data model | ||||
| introduces several generic components of a routing framework: | ||||
| routers, routing tables containing lists of routes, routing protocols | ||||
| and route filters. The following subsections describe these | ||||
| components in more detail. | ||||
| By combining the components in various ways, and possibly augmenting | By combining the components in various ways, and possibly augmenting | |||
| them with appropriate contents defined in other modules, various | them with appropriate contents defined in other modules, various | |||
| routing setups can be realized. | routing systems can be realized. | |||
| +--------+ | +--------+ | |||
| | direct | +---+ +--------------+ +---+ +--------------+ | | direct | +---+ +--------------+ +---+ +--------------+ | |||
| | routes |--->| F |--->| |<---| F |<---| | | | routes |--->| F |--->| |<---| F |<---| | | |||
| +--------+ +---+ | main | +---+ | additional | | +--------+ +---+ | default | +---+ | additional | | |||
| | routing | | routing | | | routing | | routing | | |||
| +--------+ +---+ | table | +---+ | table | | +--------+ +---+ | table | +---+ | table | | |||
| | static |--->| F |--->| |--->| F |--->| | | | static |--->| F |--->| |--->| F |--->| | | |||
| | routes | +---+ +--------------+ +---+ +--------------+ | | routes | +---+ +--------------+ +---+ +--------------+ | |||
| +--------+ ^ | ^ | | +--------+ ^ | ^ | | |||
| | v | v | | v | v | |||
| +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
| | F | | F | | F | | F | | | F | | F | | F | | F | | |||
| +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
| ^ | ^ | | ^ | ^ | | |||
| | v | v | | v | v | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| | routing | | routing | | | routing | | routing | | |||
| | protocol | | protocol | | | protocol | | protocol | | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| Figure 2: Example setup of a routing system | Figure 3: Example setup of a routing system | |||
| The example in Figure 2 shows a typical (though certainly not the | The example in Figure 3 shows a typical (though certainly not the | |||
| only possible) organization of a more complex routing subsystem for a | only possible) organization of a more complex routing subsystem for a | |||
| single address family. Several of its features are worth mentioning: | single address family. Several of its features are worth mentioning: | |||
| o Along with the main routing table, which must always be present, | o Along with the default routing table, which is always present, an | |||
| an additional routing table is configured. | additional routing table is configured. | |||
| o Each routing protocol instance, including the "static" and | o Each routing protocol instance, including the "static" and | |||
| "direct" pseudo-protocols, is connected to one routing table with | "direct" pseudo-protocols, is connected to one routing table with | |||
| which it can exchange routes (in both directions, except for the | which it can exchange routes (in both directions, except for the | |||
| "static" and "direct" pseudo-protocols). | "static" and "direct" pseudo-protocols). | |||
| o Routing tables may also be connected to each other and exchange | o Routing tables may also be connected to each other and exchange | |||
| routes in either direction (or both). | routes in either direction (or both). | |||
| o Route exchanges along all connections may be controlled by means | o Route exchanges along all connections may be controlled by means | |||
| of route filters, denoted by "F" in Figure 2. | of route filters, denoted by "F" in Figure 3. | |||
| 4.1. Router | 4.1. Router | |||
| Each router instance in the core routing data model represents a | Each router instance in the core routing data model represents a | |||
| logical router. The exact semantics of this term is left to | logical router. The exact semantics of this term is left to | |||
| implementations. For example, router instances may be completely | implementations. For example, router instances may be completely | |||
| isolated virtual routers or, alternatively, they may internally share | isolated virtual routers or, alternatively, they may internally share | |||
| certain information. | certain information. | |||
| A router instance together with its operational status is represented | ||||
| as an entry of the list "/routing-state/router", and identified by a | ||||
| unique name. Configuration of that router instance appears as entry | ||||
| of the list "/routing/router" whose key is the router instance name. | ||||
| An implementation MAY support multiple types of logical routers | An implementation MAY support multiple types of logical routers | |||
| simultaneously. Instances of all router types are organized as | simultaneously. Instances of all router types are organized as | |||
| entries of the same flat "router" list. In order to discriminate | entries of the same flat "router" list. In order to discriminate | |||
| router instances belonging to different types, the "type" leaf is | router instances belonging to different types, the "type" leaf is | |||
| defined as a child of the "router" node. | defined as a child of the "router" node. | |||
| An implementation MAY pose restrictions on allowed router types and | An implementation MAY create one or more system-controlled router | |||
| entries, and MAY also pose restrictions on allowed router types and | ||||
| on the number of supported instances for each type. For example, a | on the number of supported instances for each type. For example, a | |||
| simple router implementation may support only one router instance of | simple router implementation may support only one system-controlled | |||
| the default type "standard-router". | router instance of the default type "standard-router" and may not | |||
| allow creation of any user-controlled instances. | ||||
| Each network layer interface has to be assigned to one or more router | Each network layer interface has to be assigned to one or more router | |||
| instances in order to be able to participate in packet forwarding, | instances in order to be able to participate in packet forwarding, | |||
| routing protocols and other operations of those router instances. | routing protocols and other operations of those router instances. | |||
| The assignment is accomplished by creating a corresponding entry in | The assignment is accomplished by creating a corresponding entry in | |||
| the list of router interfaces ("rt:interface"). The key of the list | the list of router interfaces ("rt:interface"). The key of the list | |||
| entry is the name of a configured network layer interface, i.e., the | entry is the name of a configured network layer interface, see the | |||
| value of a node /if:interfaces/if:interface/if:name defined in the | ||||
| "ietf-interfaces" module [YANG-IF]. | "ietf-interfaces" module [YANG-IF]. | |||
| In YANG terms, the list of router interfaces is modeled as the "list" | In YANG terms, the list of router interfaces is modeled as the "list" | |||
| node rather than "leaf-list" in order to allow for adding, via | node rather than "leaf-list" in order to allow for adding, via | |||
| augmentation, other configuration or state data related to the | augmentation, other configuration or state data related to the | |||
| corresponding router interface. | corresponding router interface. | |||
| Implementations MAY specify additional rules for the assignment of | Implementations MAY specify additional rules for the assignment of | |||
| interfaces to logical routers. For example, it may be required that | interfaces to logical routers. For example, it may be required that | |||
| the sets of interfaces assigned to different logical routers be | the sets of interfaces assigned to different logical routers be | |||
| disjoint. | disjoint. | |||
| 4.1.1. Configuration of IPv6 Router Interfaces | 4.1.1. Parameters of IPv6 Router Interfaces | |||
| The module "ietf-ipv6-unicast-routing" augments the definition of the | The module "ietf-ipv6-unicast-routing" augments the definition of the | |||
| data node "rt:interface" with definitions of the following | data node "rt:interface", in both configuration and operational state | |||
| configuration variables as required by [RFC4861], sec. 6.2.1: | data, with definitions of 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, | |||
| o min-rtr-adv-interval, | o min-rtr-adv-interval, | |||
| o managed-flag, | o managed-flag, | |||
| o other-config-flag, | o other-config-flag, | |||
| skipping to change at page 14, line 29 ¶ | skipping to change at page 15, line 29 ¶ | |||
| o "outgoing-interface": network interface that should be used for | o "outgoing-interface": network interface that should be used for | |||
| sending packets with destination addresses belonging to "dest- | sending packets with destination addresses belonging to "dest- | |||
| prefix". | prefix". | |||
| The above list of route attributes suffices for a simple static | The above list of route attributes suffices for a simple static | |||
| routing configuration. It is expected that future modules defining | routing configuration. It is expected that future modules defining | |||
| routing protocols will add other route attributes such as metrics or | routing protocols will add other route attributes such as metrics or | |||
| preferences. | preferences. | |||
| Routes and their attributes are used both in configuration data, for | Routes and their attributes are used both in configuration data, for | |||
| example as manually configured static routes, and in state data, for | example as manually configured static routes, and in operational | |||
| example as entries in routing tables. | state data, for example as entries in routing tables. | |||
| 4.3. Routing Tables | 4.3. Routing Tables | |||
| Routing tables are lists of routes complemented with administrative | Routing tables are lists of routes complemented with administrative | |||
| data, namely: | data, namely: | |||
| o "source-protocol": name of the routing protocol from which the | o "source-protocol": type of the routing protocol from which the | |||
| route was originally obtained. | route was originally obtained. | |||
| o "last-updated": the date and time when the route was last updated, | o "last-updated": the date and time when the route was last updated, | |||
| or inserted into the routing table. | or inserted into the routing table. | |||
| Each routing table must contain only routes of the same address | Each routing table must contain only routes of the same address | |||
| family. Address family information consists of two parameters - | family. Address family information consists of two parameters - | |||
| "address-family" and "safi" (Subsequent Address Family Identifier, | "address-family" and "safi" (Subsequent Address Family Identifier, | |||
| SAFI). The permitted values for these two parameters are defined by | SAFI). The permitted values for these two parameters are defined by | |||
| IANA and represented using YANG enumeration types "ianaaf:address- | IANA and represented using YANG enumeration datatypes "ianaaf: | |||
| family" and "ianaaf:subsequent-address-family" [IANA-IF-AF]. | address-family" and "ianaaf:subsequent-address-family" [IANA-AF]. | |||
| In the core routing data model, the "routing-table" node represents | In the core routing data model, routing tables are operational state | |||
| configuration while the descendant list of routes is defined as state | data represented as entries of the list "/routing-state/ | |||
| data. The contents of route lists are controlled and manipulated by | routing-tables/routing-table". The contents of routing tables are | |||
| routing protocol operations which may result in route additions, | controlled and manipulated by routing protocol operations which may | |||
| removals and modifications. This also includes manipulations via the | result in route additions, removals and modifications. This also | |||
| "static" and/or "direct" pseudo-protocols, see Section 4.4.1. | includes manipulations via the "static" and/or "direct" pseudo- | |||
| protocols, see Section 4.4.1. | ||||
| In order to activate an address family for use within a router | Routing tables are global, which means that a routing table may be | |||
| instance, a client configures an entry of the list /routing/router/ | used by any or all router instances. However, an implementation MAY | |||
| main-routing-tables/main-routing-table. This entry contains a | specify rules and restrictions for sharing routing tables among | |||
| reference to a routing table which henceforth serves as the so-called | router instances. | |||
| main routing table for the router instance and address family. | ||||
| Section 4.4 explains the role of main routing tables. | ||||
| Routing tables are global, which means that a configured routing | Each router instance must have, for every supported address family, | |||
| table may be used by any or all router instances. | one routing table selected as the so-called default routing table. | |||
| This selection is recorded in the list "default-routing-table". The | ||||
| role of default routing tables is explained in Section 4.4. | ||||
| Server implementations MAY pose restrictions regarding the number of | Simple router implementations will typically create one system- | |||
| supported routing tables, and rules for configuration and use of | controlled routing table per supported address family, and declare it | |||
| routing tables. For example: | as a default routing table (via a system-controlled entry of the | |||
| "default-routing-table" list). | ||||
| o A server may support no more than one routing table per address | 4.3.1. User-Defined Routing Tables | |||
| family. | ||||
| o Router instances (of a certain type) may not be allowed to share | More complex router implementations allow for multiple routing tables | |||
| routing tables, i.e., each routing table is used by no more than | per address family that are used for policy routing and other | |||
| one router instance. | purposes. If it is the case, the NETCONF server SHALL advertise the | |||
| feature "user-defined-routing-tables". This feature activates | ||||
| additional nodes in both configuration and operational state data, | ||||
| and enables the client to: | ||||
| For servers supporting multiple routing tables per address family, | o Configure new user-controlled routing tables by creating entries | |||
| additional tables can be configured by creating new entries in the | in the "/routing/routing-tables/routing-table" list. | |||
| "routing-table" list, either as a part of factory-default | ||||
| configuration, or by a client's action. | ||||
| The way how a routing system uses information from routing tables for | o Configure any (system-controlled or user-controlled) routing table | |||
| actual packet forwarding is outside the scope of this document. | as the default routing table for an address family. | |||
| o Connect a routing protocol instance to a non-default routing table | ||||
| (see Section 4.4). | ||||
| o Configure a routing table as a recipient routing table of another | ||||
| routing table (see below). | ||||
| Every routing table can serve as a source of routes for other routing | Every routing table can serve as a source of routes for other routing | |||
| tables. To achieve this, one or more recipient routing tables may be | tables of the same address family. To achieve this, one or more | |||
| specified in the configuration of the source routing table. | recipient routing tables may be specified in the configuration of the | |||
| Optionally, a route filter may be configured for any or all recipient | source routing table. Optionally, a route filter may be configured | |||
| routing tables. Such a route filter then selects and/or manipulates | for any or all recipient routing tables. Such a route filter then | |||
| the routes that are passed between the source and recipient routing | selects and/or manipulates the routes that are passed between the | |||
| table. | source and recipient routing table. | |||
| A routing table MUST NOT appear among its own recipient routing | A routing table MUST NOT appear among its own recipient routing | |||
| tables. A recipient routing table also MUST be of the same address | tables. | |||
| family as its source routing table. | ||||
| 4.4. Routing Protocols | 4.4. Routing Protocols | |||
| The core routing data model provides an open-ended framework for | The core routing data model provides an open-ended framework for | |||
| defining multiple routing protocol instances within each router | defining multiple routing protocol instances within a router | |||
| instance. Each routing protocol instance MUST be assigned a type, | instance. Each routing protocol instance MUST be assigned a type, | |||
| which is an identity derived from the "rt:routing-protocol" base | which is an identity derived from the "rt:routing-protocol" base | |||
| identity. The core routing data model defines two identities for the | identity. The core routing data model defines two identities for the | |||
| direct and static pseudo-protocols (Section 4.4.1). | direct and static pseudo-protocols (Section 4.4.1). | |||
| Each routing protocol instance is connected to exactly one routing | Each routing protocol instance is connected to exactly one routing | |||
| table for each address family that the routing protocol instance | table for each address family that the routing protocol instance | |||
| supports. Routes learned from the network by a routing protocol are | supports. Routes learned from the network by a routing protocol are | |||
| normally installed into the connected routing table(s) and, | normally installed into the connected routing table(s) and, | |||
| conversely, routes from the connected routing table(s) are normally | conversely, routes from the connected routing table(s) are normally | |||
| injected into the routing protocol. However, routing protocol | injected into the routing protocol. However, routing protocol | |||
| implementations MAY specify rules that restrict this exchange of | implementations MAY specify rules that restrict this exchange of | |||
| routes in either direction (or both directions). | routes in either direction (or both directions). | |||
| A routing table is connected to a routing protocol instance by | On devices supporting the "user-defined-routing-tables" feature, a | |||
| creating a corresponding entry in the "connected-routing-table" list. | routing table (system-controlled or user-controlled) is connected to | |||
| If such an entry is not configured for an address family, then the | a routing protocol instance by configuring a corresponding entry in | |||
| main routing table MUST be used as the connected routing table for | the "connected-routing-table" list. If such an entry is not | |||
| this address family. | configured for an address family, then the default routing table MUST | |||
| be used as the connected routing table for this address family. | ||||
| In addition, two independent route filters (see Section 4.5) may be | In addition, two independent route filters (see Section 4.5) may be | |||
| configured for each connected routing table to apply client-defined | configured for each connected routing table to apply client-defined | |||
| policies controlling the exchange of routes in both directions | policies controlling the exchange of routes in both directions | |||
| between the routing protocol instance and the connected routing | between the routing protocol instance and the connected routing | |||
| table: | table: | |||
| o import filter controls which routes are passed from the routing | o import filter controls which routes are passed from the routing | |||
| protocol instance to the connected routing table, | protocol instance to the connected routing table, | |||
| skipping to change at page 17, line 11 ¶ | skipping to change at page 18, line 15 ¶ | |||
| from both "direct" and "static" protocol instances are passed to the | from both "direct" and "static" protocol instances are passed to the | |||
| connected routing table (subject to route filters, if any), but an | connected routing table (subject to route filters, if any), but an | |||
| exchange in the opposite direction is not allowed. | exchange in the opposite direction is not allowed. | |||
| Every router instance MUST implement exactly one instance of the | Every router instance MUST implement exactly one instance of the | |||
| "direct" pseudo-protocol type. The name of this instance MUST also | "direct" pseudo-protocol type. The name of this instance MUST also | |||
| be "direct". It is the source of direct routes for all configured | be "direct". It is the source of direct routes for all configured | |||
| address families. Direct routes are normally supplied by the | address families. Direct routes are normally supplied by the | |||
| operating system kernel, based on the configuration of network | operating system kernel, based on the configuration of network | |||
| interface addresses, see Section 5.2. The "direct" pseudo-protocol | interface addresses, see Section 5.2. The "direct" pseudo-protocol | |||
| MUST always be connected to the main routing tables of all supported | MUST always be connected to the default routing tables of all | |||
| address families. Unlike other routing protocol types, this | supported address families. Unlike other routing protocol types, | |||
| connection cannot be changed in the configuration. Direct routes MAY | this connection cannot be changed in the configuration. Direct | |||
| be filtered before they appear in the main routing table. | routes MAY be filtered before they appear in the default routing | |||
| table. | ||||
| A pseudo-protocol of the type "static" allows for specifying routes | A pseudo-protocol of the type "static" allows for specifying routes | |||
| manually. It MAY be configured in zero or multiple instances, | manually. It MAY be configured in zero or multiple instances, | |||
| although a typical configuration will have exactly one instance per | although a typical configuration will have exactly one instance per | |||
| logical router. | logical router. | |||
| Static routes are configured within the "static-routes" container, | Static routes are configured within the "static-routes" container, | |||
| see Figure 3. | see Figure 4. | |||
| +--rw static-routes | +--rw static-routes | |||
| +--rw v4ur:ipv4 | +--rw v4ur:ipv4 | |||
| | +--rw v4ur:route [id] | | +--rw v4ur:route* [id] | |||
| | +--rw v4ur:id | | +--rw v4ur:id | |||
| | +--rw v4ur:description? | | +--rw v4ur:description? | |||
| | +--rw v4ur:outgoing-interface? | | +--rw v4ur:outgoing-interface? | |||
| | +--rw v4ur:dest-prefix | | +--rw v4ur:dest-prefix | |||
| | +--rw v4ur:next-hop? | | +--rw v4ur:next-hop? | |||
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6 | |||
| +--rw v6ur:route [id] | +--rw v6ur:route* [id] | |||
| +--rw v6ur:id | +--rw v6ur:id | |||
| +--rw v6ur:description? | +--rw v6ur:description? | |||
| +--rw v6ur:outgoing-interface? | +--rw v6ur:outgoing-interface? | |||
| +--rw v6ur:dest-prefix | +--rw v6ur:dest-prefix | |||
| +--rw v6ur:next-hop? | +--rw v6ur:next-hop? | |||
| Figure 3: Structure of "static-routes" subtree. | Figure 4: Structure of "static-routes" subtree. | |||
| 4.4.2. Defining New Routing Protocols | 4.4.2. Defining New Routing Protocols | |||
| It is expected that future YANG modules will create data models for | It is expected that future YANG modules will create data models for | |||
| additional routing protocol types. Such a new module has to define | additional routing protocol types. Such a new module has to define | |||
| the protocol-specific configuration and state data, and it has to fit | the protocol-specific configuration and state data, and it has to fit | |||
| it into the core routing framework in the following way: | it into the core routing framework in the following way: | |||
| o A new identity MUST be defined for the routing protocol and its | o A new identity MUST be defined for the routing protocol and its | |||
| base identity MUST be set to "rt:routing-protocol", or to an | base identity MUST be set to "rt:routing-protocol", or to an | |||
| skipping to change at page 18, line 19 ¶ | skipping to change at page 19, line 24 ¶ | |||
| /rt:routing-tables/rt:routing-table/rt:route | /rt:routing-tables/rt:routing-table/rt:route | |||
| and | and | |||
| /rt:active-route/rt:output/rt:route, | /rt:active-route/rt:output/rt:route, | |||
| and possibly other places in the configuration, state data and RPC | and possibly other places in the configuration, state data and RPC | |||
| input or output. | input or output. | |||
| o Configuration parameters and state data for the new protocol can | o Configuration parameters and/or state data for the new protocol | |||
| be defined by augmenting the "routing-protocol" data node. | can be defined by augmenting the "routing-protocol" data node | |||
| under both "/routing" and "/routing-state". | ||||
| o Per-interface configuration, including activation of the routing | o Per-interface configuration, including activation of the routing | |||
| protocol on individual interfaces, can use references to entries | protocol on individual interfaces, can use references to entries | |||
| in the list of router interfaces (rt:interface). | in the list of router interfaces (rt:interface). | |||
| By using the "when" statement, the augmented configuration parameters | By using the "when" statement, the augmented configuration parameters | |||
| and state data specific to the new protocol SHOULD be made | and state data specific to the new protocol SHOULD be made | |||
| conditional and valid only if the value of "rt:type" is equal to the | conditional and valid only if the value of "rt:type" or "rt:source- | |||
| new protocol's identity. It is also RECOMMENDED that the protocol- | protocol" is equal to the new protocol's identity. It is also | |||
| specific data be encapsulated in appropriately named containers. | RECOMMENDED that the protocol-specific data be encapsulated in | |||
| appropriately named containers. | ||||
| The above steps are implemented by the example YANG module for the | The above steps are implemented by the example YANG module for the | |||
| RIP routing protocol in Appendix B. | RIP routing protocol in Appendix B. | |||
| 4.5. Route Filters | 4.5. Route Filters | |||
| The core routing data model provides a skeleton for defining route | The core routing data model provides a skeleton for defining route | |||
| filters that can be used to restrict the set of routes being | filters that can be used to restrict the set of routes being | |||
| exchanged between a routing protocol instance and a connected routing | exchanged between a routing protocol instance and a connected routing | |||
| table, or between a source and a recipient routing table. Route | table, or between a source and a recipient routing table. Route | |||
| filters may also manipulate routes, i.e., add, delete, or modify | filters may also manipulate routes, i.e., add, delete, or modify | |||
| their attributes. | their attributes. | |||
| Route filters are global, which means that a configured route filter | Route filters are global, which means that a configured route filter | |||
| may be used by any or all router instances. | may be used by any or all router instances. However, an | |||
| implementation MAY specify rules and restrictions for sharing route | ||||
| filters among router instances. | ||||
| By itself, the route filtering framework defined in this document | By itself, the route filtering framework defined in this document | |||
| allows for applying only two extreme routing policies which are | allows for applying only two extreme routing policies which are | |||
| represented by the following pre-defined route filter types: | represented by the following pre-defined route filter types: | |||
| o "deny-all-route-filter": all routes are blocked, | o "deny-all-route-filter": all routes are blocked, | |||
| o "allow-all-route-filter": all routes are permitted. | o "allow-all-route-filter": all routes are permitted. | |||
| Note that the latter type is equivalent to no route filter. | The latter type is equivalent to no route filter. | |||
| It is expected that more comprehensive route filtering frameworks | It is expected that more comprehensive route filtering frameworks | |||
| will be developed separately. | will be developed separately. | |||
| Each route filter is identified by a name which MUST be unique within | Each route filter is identified by a unique name. Its type MUST be | |||
| the entire configuration. Its type MUST be specified by the "type" | specified by the "type" identity reference - this opens the space for | |||
| identity reference - this opens the space for multiple route | multiple route filtering framework implementations. | |||
| filtering framework implementations. | ||||
| 4.6. RPC Operations | 4.6. RPC Operations | |||
| The "ietf-routing" module defines two RPC operations: | The "ietf-routing" module defines two RPC operations: | |||
| o active-route: query the routing system for the active route(s) | o active-route: query the routing system for the active route(s) | |||
| that are currently used for sending datagrams to a destination | that are currently used for sending datagrams to a destination | |||
| host whose address is passed as an input parameter. | host whose address is passed as an input parameter. | |||
| o route-count: retrieve the total number of entries in a routing | o route-count: retrieve the total number of entries in a routing | |||
| skipping to change at page 22, line 11 ¶ | skipping to change at page 23, line 11 ¶ | |||
| 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. | |||
| 6. Routing YANG Module | 6. Routing YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-routing@2013-02-23.yang" | <CODE BEGINS> file "ietf-routing@2013-07-13.yang" | |||
| module ietf-routing { | module ietf-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
| prefix "rt"; | prefix "rt"; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| skipping to change at page 22, line 49 ¶ | skipping to change at page 23, line 49 ¶ | |||
| <mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz> | |||
| "; | "; | |||
| description | description | |||
| "This YANG module defines essential components that may be used | "This YANG module defines essential components for the management | |||
| for configuring a routing subsystem. | of a routing subsystem. | |||
| Copyright (c) 2012 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices. | |||
| "; | "; | |||
| revision 2013-02-23 { | revision 2013-07-13 { | |||
| 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 */ | ||||
| feature user-defined-routing-tables { | ||||
| description | ||||
| "Indicates that the device supports additional routing tables | ||||
| defined by the user. | ||||
| Devices that do not support this feature MUST provide exactly | ||||
| one routing table per supported address family. These routing | ||||
| tables then appear as entries of the list | ||||
| /routing-state/routing-tables/routing-table. | ||||
| "; | ||||
| } | ||||
| /* Identities */ | /* Identities */ | |||
| identity router-type { | identity router-type { | |||
| description | description | |||
| "Base identity from which router type identities are derived. | "Base identity from which router type identities are derived. | |||
| It is primarily intended for discriminating among different | It is primarily intended for discriminating among different | |||
| types of logical routers or router virtualization. | types of logical routers or router virtualization. | |||
| "; | "; | |||
| } | } | |||
| skipping to change at page 24, line 37 ¶ | skipping to change at page 25, line 50 ¶ | |||
| "Route filter that permits all routes."; | "Route filter that permits all routes."; | |||
| } | } | |||
| /* Type Definitions */ | /* Type Definitions */ | |||
| typedef router-ref { | typedef router-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:router/rt:name"; | path "/rt:routing/rt:router/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a router | "This type is used for leafs that reference a router instance | |||
| instance."; | configuration."; | |||
| } | ||||
| typedef router-state-ref { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:router/rt:name"; | ||||
| } | ||||
| description | ||||
| "This type is used for leafs that reference state data of a | ||||
| router instance."; | ||||
| } | } | |||
| typedef routing-table-ref { | typedef routing-table-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:routing-tables/rt:routing-table/rt:name"; | path "/rt:routing/rt:routing-tables/rt:routing-table/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a routing table."; | "This type is used for leafs that reference a routing table | |||
| configuration."; | ||||
| } | ||||
| typedef routing-table-state-ref { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-tables/rt:routing-table/" | ||||
| + "rt:name"; | ||||
| } | ||||
| description | ||||
| "This type is used for leafs that reference a routing table in | ||||
| state data."; | ||||
| } | } | |||
| typedef route-filter-ref { | typedef route-filter-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | path "/rt:routing/rt:route-filters/rt:route-filter/rt:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used for leafs that reference a route filter."; | "This type is used for leafs that reference a route filter | |||
| configuration."; | ||||
| } | } | |||
| typedef route-filter-state-ref { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:route-filters/rt:route-filter/" | ||||
| + "rt:name"; | ||||
| } | ||||
| description | ||||
| "This type is used for leafs that reference a route filter in | ||||
| state data."; | ||||
| } | ||||
| /* Groupings */ | /* Groupings */ | |||
| grouping afn-safi { | grouping afn-safi { | |||
| description | description | |||
| "This grouping provides two parameters specifying address | "This grouping provides two parameters specifying address | |||
| family and subsequent address family."; | family and subsequent address family."; | |||
| leaf address-family { | leaf address-family { | |||
| type ianaaf:address-family; | type ianaaf:address-family; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Address family."; | "Address family."; | |||
| } | } | |||
| leaf safi { | leaf safi { | |||
| type ianaaf:subsequent-address-family; | type ianaaf:subsequent-address-family; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Subsequent address family."; | "Subsequent address family."; | |||
| } | } | |||
| } | } | |||
| grouping router-id { | ||||
| description | ||||
| "This grouping provides the definition of router ID."; | ||||
| leaf router-id { | ||||
| type yang:dotted-quad; | ||||
| description | ||||
| "Router ID - 32-bit number in the form of a dotted quad."; | ||||
| } | ||||
| } | ||||
| grouping route-content { | grouping route-content { | |||
| description | description | |||
| "Generic parameters of routes."; | "Generic parameters of static routes (configuration)."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "Outgoing interface."; | "Outgoing interface."; | |||
| } | } | |||
| } | } | |||
| grouping route-state-content { | ||||
| description | ||||
| "Generic parameters of routes in state data."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-state-ref; | ||||
| description | ||||
| "Outgoing interface."; | ||||
| } | ||||
| } | ||||
| /* RPC Methods */ | /* RPC Methods */ | |||
| rpc active-route { | rpc active-route { | |||
| description | description | |||
| "Return the active route (or multiple routes, in the case of | "Return the active route (or multiple routes, in the case of | |||
| multi-path routing) to a destination address. | multi-path routing) to a destination address. | |||
| Parameters | Parameters | |||
| 1. 'router-name', | 1. 'router-name', | |||
| skipping to change at page 26, line 13 ¶ | skipping to change at page 28, line 30 ¶ | |||
| If the router instance with 'router-name' doesn't exist, then | If the router instance with 'router-name' doesn't exist, then | |||
| this operation SHALL fail with error-tag 'data-missing' and | this operation SHALL fail with error-tag 'data-missing' and | |||
| error-app-tag 'router-not-found'. | error-app-tag 'router-not-found'. | |||
| If no active route for 'destination-address' exists, no output | If no active route for 'destination-address' exists, no output | |||
| is returned - the server SHALL send an <rpc-reply> containing | is returned - the server SHALL send an <rpc-reply> containing | |||
| a single element <ok>. | a single element <ok>. | |||
| "; | "; | |||
| input { | input { | |||
| leaf router-name { | leaf router-name { | |||
| type router-ref; | type router-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Name of the router instance whose forwarding information | "Name of the router instance whose forwarding information | |||
| base is being queried."; | base is being queried."; | |||
| } | } | |||
| container destination-address { | container destination-address { | |||
| description | description | |||
| "Network layer destination address. | "Network layer destination address. | |||
| Address family specific modules MUST augment this | Address family specific modules MUST augment this | |||
| skipping to change at page 27, line 10 ¶ | skipping to change at page 29, line 27 ¶ | |||
| 1. 'routing-table-name'. | 1. 'routing-table-name'. | |||
| If the routing table with the name specified in | If the routing table with the name specified in | |||
| 'routing-table-name' doesn't exist, then this operation SHALL | 'routing-table-name' doesn't exist, then this operation SHALL | |||
| fail with error-tag 'data-missing' and error-app-tag | fail with error-tag 'data-missing' and error-app-tag | |||
| 'routing-table-not-found'. | 'routing-table-not-found'. | |||
| "; | "; | |||
| input { | input { | |||
| leaf routing-table { | leaf routing-table { | |||
| type routing-table-ref; | type routing-table-state-ref; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Name of the routing table."; | "Name of the routing table."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf number-of-routes { | leaf number-of-routes { | |||
| type uint32; | type uint32; | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Number of routes in the routing table."; | "Number of routes in the routing table."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* Data Nodes */ | /* Operational state data */ | |||
| container routing { | container routing-state { | |||
| config "false"; | ||||
| description | description | |||
| "Routing parameters."; | "Operational state of the routing subsystem."; | |||
| list router { | list router { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Each list entry is a container for configuration and state | "Each list entry is a container for operational state data of | |||
| data of a single (logical) router instance. | a router instance. | |||
| An implementation MAY create one or more instances on its | ||||
| own, other instances MAY be created by configuration. | ||||
| "; | "; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name of the router instance."; | "The name of the router instance."; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base router-type; | base router-type; | |||
| } | } | |||
| default "rt:standard-router"; | default "rt:standard-router"; | |||
| description | description | |||
| "This leaf specifies the router type. | "The router type, primarily intended for discriminating | |||
| It is primarily intended as a means for discriminating | ||||
| among different types of logical routers, route | among different types of logical routers, route | |||
| virtualization, master-slave arrangements etc., while | virtualization, master-slave arrangements etc., while | |||
| keeping all such router instances in the same flat list. | keeping all router instances in the same flat list. | |||
| "; | ||||
| } | ||||
| uses router-id { | ||||
| description | ||||
| "Global router ID. | ||||
| An implementation may choose a value if none is | ||||
| configured. | ||||
| Routing protocols MAY override this global parameter. | ||||
| "; | ||||
| } | ||||
| container default-routing-tables { | ||||
| description | ||||
| "Default routing tables used by the router instance."; | ||||
| list default-routing-table { | ||||
| key "address-family safi"; | ||||
| description | ||||
| "Each list entry specifies the default routing table for | ||||
| one address family. | ||||
| The default routing table is operationally connected to | ||||
| all routing protocols for which a connected routing | ||||
| table has not been explicitly configured. | ||||
| The 'direct' pseudo-protocol is always connected to the | ||||
| default routing tables. | ||||
| "; | ||||
| uses afn-safi; | ||||
| leaf name { | ||||
| type routing-table-state-ref; | ||||
| mandatory "true"; | ||||
| description | ||||
| "Name of an existing routing table to be used as the | ||||
| default routing table for the given router instance | ||||
| and address family."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container interfaces { | ||||
| description | ||||
| "Router interfaces."; | ||||
| list interface { | ||||
| key "name"; | ||||
| description | ||||
| "List of network layer interfaces assigned to the router | ||||
| instance."; | ||||
| leaf name { | ||||
| type if:interface-state-ref; | ||||
| description | ||||
| "A reference to the name of a configured network layer | ||||
| interface."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container routing-protocols { | ||||
| description | ||||
| "Container for the list of routing protocol instances."; | ||||
| list routing-protocol { | ||||
| key "name"; | ||||
| description | ||||
| "Operational state of a routing protocol instance. | ||||
| "; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the routing protocol instance."; | ||||
| } | ||||
| leaf type { | ||||
| type identityref { | ||||
| base routing-protocol; | ||||
| } | ||||
| mandatory "true"; | ||||
| description | ||||
| "Type of the routing protocol."; | ||||
| } | ||||
| container connected-routing-tables { | ||||
| if-feature user-defined-routing-tables; | ||||
| description | ||||
| "Container for connected routing tables. | ||||
| "; | ||||
| list connected-routing-table { | ||||
| key "name"; | ||||
| description | ||||
| "List of routing tables to which the routing protocol | ||||
| instance is connected (at most one routing table per | ||||
| address family). | ||||
| "; | ||||
| leaf name { | ||||
| type routing-table-state-ref; | ||||
| description | ||||
| "Name of an existing routing table."; | ||||
| } | ||||
| leaf import-filter { | ||||
| type route-filter-state-ref; | ||||
| description | ||||
| "Reference to a route filter that is used for | ||||
| filtering routes passed from this routing protocol | ||||
| instance to the routing table specified by the | ||||
| 'name' sibling node. | ||||
| If this leaf is not present, the behavior is | ||||
| protocol-specific, but typically it means that all | ||||
| routes are accepted. | ||||
| "; | ||||
| } | ||||
| leaf export-filter { | ||||
| type route-filter-state-ref; | ||||
| description | ||||
| "Reference to a route filter that is used for | ||||
| filtering routes passed from the routing table | ||||
| specified by the 'name' sibling node to this | ||||
| routing protocol instance. | ||||
| If this leaf is not present, the behavior is | ||||
| protocol-specific - typically it means that all | ||||
| routes are accepted. | ||||
| The 'direct' and 'static' pseudo-protocols accept | ||||
| no routes from any routing table. | ||||
| "; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container routing-tables { | ||||
| description | ||||
| "Container for routing tables."; | ||||
| list routing-table { | ||||
| key "name"; | ||||
| description | ||||
| "Each entry represents a routing table identified by the | ||||
| 'name' key. All routes in a routing table MUST belong to | ||||
| the same address family. | ||||
| The server MUST create the default routing table for each | ||||
| address family, and MAY create other routing tables. | ||||
| Additional routing tables MAY be created in the | ||||
| configuration. | ||||
| "; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the routing table."; | ||||
| } | ||||
| uses afn-safi; | ||||
| container routes { | ||||
| description | ||||
| "Current contents of the routing table."; | ||||
| list route { | ||||
| description | ||||
| "A routing table entry. This data node MUST be | ||||
| augmented with information specific for routes of each | ||||
| address family."; | ||||
| uses route-state-content; | ||||
| leaf source-protocol { | ||||
| type identityref { | ||||
| base routing-protocol; | ||||
| } | ||||
| mandatory "true"; | ||||
| description | ||||
| "Type of the routing protocol from which the route | ||||
| originated."; | ||||
| } | ||||
| leaf last-updated { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "Time stamp of the last modification of the route. If | ||||
| the route was never modified, it is the time when | ||||
| the route was inserted into the routing table."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container recipient-routing-tables { | ||||
| if-feature user-defined-routing-tables; | ||||
| description | ||||
| "Container for recipient routing tables."; | ||||
| list recipient-routing-table { | ||||
| key "name"; | ||||
| description | ||||
| "List of routing tables that receive routes from this | ||||
| routing table."; | ||||
| leaf name { | ||||
| type routing-table-state-ref; | ||||
| description | ||||
| "The name of the recipient routing table."; | ||||
| } | ||||
| leaf filter { | ||||
| type route-filter-state-ref; | ||||
| description | ||||
| "A route filter which is applied to the routes passed | ||||
| to the recipient routing table."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container route-filters { | ||||
| description | ||||
| "Container for route filters."; | ||||
| list route-filter { | ||||
| key "name"; | ||||
| description | ||||
| "Route filters are used for filtering and/or manipulating | ||||
| routes that are passed between a routing protocol and a | ||||
| routing table and vice versa, or between two routing | ||||
| tables. | ||||
| It is expected that other modules augment this list with | ||||
| contents specific for a particular route filter type. | ||||
| "; | "; | |||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the route filter."; | ||||
| } | ||||
| leaf type { | ||||
| type identityref { | ||||
| base route-filter; | ||||
| } | ||||
| mandatory "true"; | ||||
| description | ||||
| "Type of the route-filter - an identity derived from the | ||||
| 'route-filter' base identity."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| /* Configuration Data */ | ||||
| container routing { | ||||
| description | ||||
| "Configuration parameters for the routing subsystem."; | ||||
| list router { | ||||
| key "name"; | ||||
| description | ||||
| "Configuration of a router instance. | ||||
| "; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name of the router instance. | ||||
| The names for system-created router instances are assigned | ||||
| by the system. The same name then has to be used in the | ||||
| configuration. | ||||
| An arbitrary name may be chosen if the router instance is | ||||
| created in the configuration. | ||||
| "; | ||||
| } | ||||
| leaf type { | ||||
| type identityref { | ||||
| base router-type; | ||||
| } | ||||
| default "rt:standard-router"; | ||||
| description | ||||
| "The router type."; | ||||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "Enable/disable the router instance. | "Enable/disable the router instance. | |||
| If this parameter is false, the parent router instance is | If this parameter is false, the parent router instance is | |||
| disabled, despite any other configuration that might be | disabled and does not appear in operational state data, | |||
| present. | despite any other configuration that might be present. | |||
| "; | "; | |||
| } | } | |||
| leaf router-id { | uses router-id { | |||
| type yang:dotted-quad; | ||||
| description | description | |||
| "Global router ID - 32-bit number in the form of a dotted | "Configuration of the global router ID."; | |||
| quad. | ||||
| An implementation MAY select a value if this parameter is | ||||
| not configured. | ||||
| Routing protocols MAY override this global parameter | ||||
| inside their configuration. | ||||
| "; | ||||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the router."; | "Textual description of the router instance."; | |||
| } | } | |||
| container main-routing-tables { | container default-routing-tables { | |||
| if-feature user-defined-routing-tables; | ||||
| description | description | |||
| "Main routing tables used by the router instance."; | "Configuration of the default routing tables used by the | |||
| list main-routing-table { | router instance. | |||
| The default routing table for an addressed family if by | ||||
| default connected to all routing protocol instances | ||||
| supporting that address family, and always receives direct | ||||
| routes. | ||||
| "; | ||||
| list default-routing-table { | ||||
| must "address-family=/routing/routing-tables/" | must "address-family=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
| + "address-family and safi=/routing/routing-tables/" | + "address-family and safi=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/safi" { | + "routing-table[name=current()/name]/safi" { | |||
| error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
| description | description | |||
| "The entry's address family MUST match that of the | "The entry's address family MUST match that of the | |||
| referenced routing table."; | referenced routing table."; | |||
| } | } | |||
| key "address-family safi"; | key "address-family safi"; | |||
| description | description | |||
| "Each list entry specifies the main routing table for one | "Each list entry configures the default routing table for | |||
| address family. | one address family."; | |||
| The main routing table is operationally connected to all | ||||
| routing protocols for which a connected routing table | ||||
| has not been explicitly configured. | ||||
| The 'direct' pseudo-protocol is always connected to the | ||||
| main routing table. | ||||
| Address families that don't have their entry in this | ||||
| list MUST NOT be used in the rest of the router instance | ||||
| configuration. | ||||
| "; | ||||
| uses afn-safi; | uses afn-safi; | |||
| leaf name { | leaf name { | |||
| type routing-table-ref; | type string; | |||
| mandatory "true"; | ||||
| description | description | |||
| "Name of an existing routing table to be used as the | "Name of an existing routing table to be used as the | |||
| main routing table for the given router instance and | default routing table for the given router instance | |||
| address family."; | and address family."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Router interface parameters."; | "Configuration of router interface parameters."; | |||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of network layer interfaces assigned to the router | "List of network layer interfaces assigned to the router | |||
| instance."; | instance."; | |||
| leaf name { | leaf name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "A reference to the name of a configured network layer | "A reference to the name of a configured network layer | |||
| interface."; | interface."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container routing-protocols { | container routing-protocols { | |||
| description | description | |||
| "Container for the list of configured routing protocol | "Configuration of routing protocol instances."; | |||
| instances."; | ||||
| list routing-protocol { | list routing-protocol { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "An instance of a routing protocol."; | "Each entry contains configuration of a routing protocol | |||
| instance."; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name of the routing protocol instance."; | "An arbitrary name of the routing protocol instance."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the routing protocol | "Textual description of the routing protocol | |||
| instance."; | instance."; | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "Enable/disable the routing protocol instance. | "Enable/disable the routing protocol instance. | |||
| If this parameter is false, the parent routing | If this parameter is false, the parent routing | |||
| protocol instance is disabled, despite any other | protocol instance is disabled and does not appear in | |||
| operational state data, despite any other | ||||
| configuration that might be present. | configuration that might be present. | |||
| "; | "; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base routing-protocol; | base routing-protocol; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Type of the routing protocol - an identity derived | "Type of the routing protocol - an identity derived | |||
| from the 'routing-protocol' base identity."; | from the 'routing-protocol' base identity."; | |||
| } | } | |||
| container connected-routing-tables { | container connected-routing-tables { | |||
| if-feature user-defined-routing-tables; | ||||
| description | description | |||
| "Container for connected routing tables. | "Configuration of connected routing tables. | |||
| "; | "; | |||
| list connected-routing-table { | list connected-routing-table { | |||
| must "not(/routing/routing-tables/" | must "not(/routing/routing-tables/" | |||
| + "routing-table[name=current()/" | + "routing-table[name=current()/" | |||
| + "preceding-sibling::connected-routing-table/" | + "preceding-sibling::connected-routing-table/" | |||
| + "name and address-family=/routing/routing-tables/" | + "name and address-family=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
| + "address-family and safi=/routing/routing-tables/" | + "address-family and safi=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/safi])" { | + "routing-table[name=current()/name]/safi])" { | |||
| error-message "Duplicate address family for " | error-message "Duplicate address family for " | |||
| skipping to change at page 31, line 4 ¶ | skipping to change at page 38, line 33 ¶ | |||
| + "preceding-sibling::connected-routing-table/" | + "preceding-sibling::connected-routing-table/" | |||
| + "name and address-family=/routing/routing-tables/" | + "name and address-family=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
| + "address-family and safi=/routing/routing-tables/" | + "address-family and safi=/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/safi])" { | + "routing-table[name=current()/name]/safi])" { | |||
| error-message "Duplicate address family for " | error-message "Duplicate address family for " | |||
| + "connected routing tables."; | + "connected routing tables."; | |||
| description | description | |||
| "For each AFN/SAFI pair there MUST NOT be more than | "For each AFN/SAFI pair there MUST NOT be more than | |||
| one connected routing table."; | one connected routing table."; | |||
| } | } | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of routing tables to which the routing protocol | "List of routing tables to which the routing protocol | |||
| instance is connected (at most one routing table per | instance is connected (at most one routing table per | |||
| address family). | address family). | |||
| If no connected routing table is configured for an | If no connected routing table is configured for an | |||
| address family, the routing protocol MUST be | address family, the routing protocol is connected to | |||
| operationally connected to the main routing table | the default routing table for that address family. | |||
| for that address family. | ||||
| "; | "; | |||
| leaf name { | leaf name { | |||
| type routing-table-ref; | type routing-table-ref; | |||
| must "../../../type != 'rt:direct' or " | must "../../../type != 'rt:direct' or " | |||
| + "../../../../../main-routing-tables/ " | + "../../../../../default-routing-tables/ " | |||
| + "main-routing-table/name=." { | + "default-routing-table/name=." { | |||
| error-message "The 'direct' protocol can be " | error-message "The 'direct' protocol can be " | |||
| + "connected only to a main routing " | + "connected only to a default " | |||
| + "table."; | + "routing table."; | |||
| description | description | |||
| "For the 'direct' pseudo-protocol, the connected | "For the 'direct' pseudo-protocol, the connected | |||
| routing table must always be a main routing | routing table must always be a default routing | |||
| table."; | table."; | |||
| } | } | |||
| description | description | |||
| "Name of an existing routing table."; | "Name of an existing routing table."; | |||
| } | } | |||
| leaf import-filter { | leaf import-filter { | |||
| type route-filter-ref; | type route-filter-ref; | |||
| description | description | |||
| "Reference to a route filter that is used for | "Configuration of import filter."; | |||
| filtering routes passed from this routing protocol | ||||
| instance to the routing table specified by the | ||||
| 'name' sibling node. | ||||
| If this leaf is not present, the behavior is | ||||
| protocol-specific, but typically it means that all | ||||
| routes are accepted. | ||||
| "; | ||||
| } | } | |||
| leaf export-filter { | leaf export-filter { | |||
| type route-filter-ref; | type route-filter-ref; | |||
| description | description | |||
| "Reference to a route filter that is used for | "Configuration of export filter."; | |||
| filtering routes passed from the routing table | ||||
| specified by the 'name' sibling node to this | ||||
| routing protocol instance. | ||||
| If this leaf is not present, the behavior is | ||||
| protocol-specific - typically it means that all | ||||
| routes are accepted. | ||||
| The 'direct' and 'static' pseudo-protocols accept | ||||
| no routes from any routing table. | ||||
| "; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| container static-routes { | container static-routes { | |||
| when "../type='rt:static'" { | when "../type='rt:static'" { | |||
| description | description | |||
| "This container is only valid for the 'static' | "This container is only valid for the 'static' | |||
| routing protocol."; | routing protocol."; | |||
| } | } | |||
| description | description | |||
| "Configuration of 'static' pseudo-protocol. | "Configuration of the 'static' pseudo-protocol. | |||
| Address family specific modules augment this node with | Address family specific modules augment this node with | |||
| their lists of routes. | their lists of routes. | |||
| "; | "; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container routing-tables { | container routing-tables { | |||
| description | description | |||
| "Container for configured routing tables."; | "Configured routing tables."; | |||
| list routing-table { | list routing-table { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Each entry represents a routing table identified by the | "Each entry represents a configured routing table | |||
| 'name' key. All routes in a routing table MUST belong to | identified by the 'name' key. | |||
| the same address family."; | ||||
| Entries having the same key as a system-provided entry of | ||||
| the list /routing-state/routing-tables/routing-tables are | ||||
| used for configuring parameters of that entry. Other | ||||
| entries define additional user-provided routing tables. | ||||
| "; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name of the routing table."; | "The name of the routing table."; | |||
| } | } | |||
| uses afn-safi; | uses afn-safi; | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the routing table."; | "Textual description of the routing table."; | |||
| } | } | |||
| container routes { | ||||
| config "false"; | ||||
| description | ||||
| "Current contents of the routing table (state data)."; | ||||
| list route { | ||||
| description | ||||
| "A routing table entry. This data node MUST be | ||||
| augmented with information specific for routes of each | ||||
| address family."; | ||||
| uses route-content; | ||||
| leaf source-protocol { | ||||
| type string; | ||||
| mandatory "true"; | ||||
| description | ||||
| 'Routing protocol instance from which the route | ||||
| originated. | ||||
| It must be either "direct" or the name of a | ||||
| configured routing protocol instance. | ||||
| '; | ||||
| } | ||||
| leaf last-updated { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "Time stamp of the last modification of the route. If | ||||
| the route was never modified, it is the time when | ||||
| the route was inserted into the routing table."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container recipient-routing-tables { | container recipient-routing-tables { | |||
| if-feature user-defined-routing-tables; | ||||
| description | description | |||
| "Container for recipient routing tables."; | "Configuration of recipient routing tables."; | |||
| list recipient-routing-table { | list recipient-routing-table { | |||
| must "name != ../../name" { | must "name != ../../name" { | |||
| error-message "Source and recipient routing tables " | error-message "Source and recipient routing tables " | |||
| + "are identical."; | + "are identical."; | |||
| description | description | |||
| "A routing table MUST NOT appear among its recipient | "A routing table MUST NOT appear among its recipient | |||
| routing tables."; | routing tables."; | |||
| } | } | |||
| must "/routing/routing-tables/" | must "/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
| skipping to change at page 34, line 4 ¶ | skipping to change at page 40, line 38 ¶ | |||
| } | } | |||
| must "/routing/routing-tables/" | must "/routing/routing-tables/" | |||
| + "routing-table[name=current()/name]/" | + "routing-table[name=current()/name]/" | |||
| + "address-family=../../address-family and /routing/" | + "address-family=../../address-family and /routing/" | |||
| + "routing-tables/routing-table[name=current()/name]/" | + "routing-tables/routing-table[name=current()/name]/" | |||
| + "safi=../../safi" { | + "safi=../../safi" { | |||
| error-message "Address family mismatch."; | error-message "Address family mismatch."; | |||
| description | description | |||
| "Address family of the recipient routing table MUST | "Address family of the recipient routing table MUST | |||
| match the source table."; | match the source table."; | |||
| } | } | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of routing tables that receive routes from this | "Each entry configures a recipient routing table."; | |||
| routing table."; | ||||
| leaf name { | leaf name { | |||
| type routing-table-ref; | type routing-table-ref; | |||
| description | description | |||
| "The name of the recipient routing table."; | "The name of the recipient routing table."; | |||
| } | } | |||
| leaf filter { | leaf filter { | |||
| type route-filter-ref; | type route-filter-ref; | |||
| description | description | |||
| "A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
| to the recipient routing table."; | to the recipient routing table."; | |||
| skipping to change at page 34, line 21 ¶ | skipping to change at page 41, line 4 ¶ | |||
| type routing-table-ref; | type routing-table-ref; | |||
| description | description | |||
| "The name of the recipient routing table."; | "The name of the recipient routing table."; | |||
| } | } | |||
| leaf filter { | leaf filter { | |||
| type route-filter-ref; | type route-filter-ref; | |||
| description | description | |||
| "A route filter which is applied to the routes passed | "A route filter which is applied to the routes passed | |||
| to the recipient routing table."; | to the recipient routing table."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container route-filters { | container route-filters { | |||
| description | description | |||
| "Container for configured route filters."; | "Configuration of route filters."; | |||
| list route-filter { | list route-filter { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Route filters are used for filtering and/or manipulating | "Each entry configures a named route filter."; | |||
| routes that are passed between a routing protocol and a | ||||
| routing table and vice versa, or between two routing | ||||
| tables. | ||||
| It is expected that other modules augment this list with | ||||
| contents specific for a particular route filter type. | ||||
| "; | ||||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name of the route filter."; | "The name of the route filter."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route filter."; | "Textual description of the route filter."; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type identityref { | type identityref { | |||
| base route-filter; | base route-filter; | |||
| } | } | |||
| mandatory "true"; | mandatory "true"; | |||
| description | description | |||
| "Type of the route-filter - an identity derived from the | "Type of the route filter.."; | |||
| 'route-filter' base identity."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 7. IPv4 Unicast Routing YANG Module | 7. IPv4 Unicast Routing YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-02-23.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2013-07-13.yang" | |||
| module ietf-ipv4-unicast-routing { | module ietf-ipv4-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | |||
| prefix "v4ur"; | prefix "v4ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| skipping to change at page 36, line 46 ¶ | skipping to change at page 42, line 46 ¶ | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz> | |||
| "; | "; | |||
| description | description | |||
| "This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
| configuration and state data for IPv4 unicast routing. | configuration and operational state data for IPv4 unicast | |||
| routing. | ||||
| Copyright (c) 2012 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices. | |||
| "; | "; | |||
| revision 2013-02-23 { | revision 2013-07-13 { | |||
| 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"; | |||
| } | } | |||
| /* Groupings */ | /* Groupings */ | |||
| grouping route-content { | grouping route-content { | |||
| description | description | |||
| skipping to change at page 37, line 51 ¶ | skipping to change at page 44, line 4 ¶ | |||
| description | description | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "The 'address' leaf augments the 'rt:destination-address' | "The 'address' leaf augments the 'rt:destination-address' | |||
| parameter of the 'rt:active-route' operation."; | parameter of the 'rt:active-route' operation."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "IPv4 destination address."; | "IPv4 destination address."; | |||
| } | ||||
| } | ||||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/rt:route" { | |||
| when "rt:address-family='ipv4' and rt:safi='nlri-unicast'" { | when "rt:address-family='ipv4' and rt:safi='nlri-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
| } | } | |||
| description | description | |||
| "Contents of the reply to 'rt:active-route' operation."; | "Contents of the reply to 'rt:active-route' operation."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| /* Data nodes */ | /* Operational state */ | |||
| augment "/rt:routing-state/rt:routing-tables/rt:routing-table/" | ||||
| + "rt:routes/rt:route" { | ||||
| when "../../rt:address-family = 'ipv4' and ../../rt:safi = " | ||||
| + "'nlri-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment defines the content of IPv4 unicast routes."; | ||||
| uses route-content; | ||||
| } | ||||
| /* Configuration */ | ||||
| augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:router/rt:routing-protocols/" | |||
| + "rt:routing-protocol/rt:static-routes" { | + "rt:routing-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific for IPv4 unicast."; | pseudo-protocol with data specific for IPv4 unicast."; | |||
| container ipv4 { | container ipv4 { | |||
| 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."; | |||
| skipping to change at page 39, line 4 ¶ | skipping to change at page 45, line 19 ¶ | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| uses rt:route-content; | uses rt:route-content; | |||
| uses route-content { | uses route-content { | |||
| refine "dest-prefix" { | refine "dest-prefix" { | |||
| mandatory "true"; | mandatory "true"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing/rt:routing-tables/rt:routing-table/rt:routes/" | ||||
| + "rt:route" { | ||||
| when "../../rt:address-family = 'ipv4' and ../../rt:safi = " | ||||
| + "'nlri-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv4 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment defines the content of IPv4 unicast routes."; | ||||
| uses route-content; | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 8. IPv6 Unicast Routing YANG Module | 8. IPv6 Unicast Routing YANG Module | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number and all occurrences of the revision date below with | actual RFC number and all occurrences of the revision date below with | |||
| the date of RFC publication (and remove this note). | the date of RFC publication (and remove this note). | |||
| <CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-02-23.yang" | <CODE BEGINS> file "ietf-ipv6-unicast-routing@2013-07-13.yang" | |||
| module ietf-ipv6-unicast-routing { | module ietf-ipv6-unicast-routing { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | |||
| prefix "v6ur"; | prefix "v6ur"; | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| skipping to change at page 41, line 5 ¶ | skipping to change at page 47, line 5 ¶ | |||
| WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
| <mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
| Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
| <mailto:lhotka@nic.cz> | <mailto:lhotka@nic.cz> | |||
| "; | "; | |||
| description | description | |||
| "This YANG module augments the 'ietf-routing' module with basic | "This YANG module augments the 'ietf-routing' module with basic | |||
| configuration and state data for IPv6 unicast routing. | configuration and operational state data for IPv6 unicast | |||
| routing. | ||||
| Copyright (c) 2012 IETF Trust and the persons identified as | Copyright (c) 2013 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices. | RFC itself for full legal notices. | |||
| "; | "; | |||
| revision 2013-02-23 { | revision 2013-07-13 { | |||
| 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"; | |||
| } | } | |||
| /* Groupings */ | /* Groupings */ | |||
| grouping route-content { | grouping route-content { | |||
| description | description | |||
| skipping to change at page 42, line 24 ¶ | skipping to change at page 48, line 26 ¶ | |||
| augment "/rt:active-route/rt:output/rt:route" { | augment "/rt:active-route/rt:output/rt:route" { | |||
| when "rt:address-family='ipv6' and rt:safi='nlri-unicast'" { | when "rt:address-family='ipv6' and rt:safi='nlri-unicast'" { | |||
| description | description | |||
| "This augment is valid only for IPv6 unicast."; | "This augment is valid only for IPv6 unicast."; | |||
| } | } | |||
| description | description | |||
| "Contents of the reply to 'rt:active-route' operation."; | "Contents of the reply to 'rt:active-route' operation."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| /* Data nodes */ | /* Operational state data */ | |||
| augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | augment "/rt:routing-state/rt:router/rt:interfaces/rt:interface" { | |||
| when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | |||
| + "ip:ipv6/ip:enabled='true'" { | + "ip:ipv6/ip:enabled='true'" { | |||
| description | description | |||
| "This augment is only valid for router interfaces with | "This augment is only valid for router interfaces with | |||
| enabled IPv6."; | enabled IPv6."; | |||
| } | } | |||
| description | description | |||
| "IPv6-specific parameters of router interfaces."; | "IPv6-specific parameters of router interfaces."; | |||
| container ipv6-router-advertisements { | container ipv6-router-advertisements { | |||
| description | description | |||
| skipping to change at page 43, line 4 ¶ | skipping to change at page 49, line 5 ¶ | |||
| "A flag indicating whether or not the router sends periodic | "A flag indicating whether or not the router sends periodic | |||
| Router Advertisements and responds to Router | Router Advertisements and responds to Router | |||
| Solicitations."; | Solicitations."; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvSendAdvertisements."; | AdvSendAdvertisements."; | |||
| } | } | |||
| leaf max-rtr-adv-interval { | leaf max-rtr-adv-interval { | |||
| type uint16 { | type uint16 { | |||
| range "4..1800"; | range "4..1800"; | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| default "600"; | default "600"; | |||
| description | description | |||
| "The maximum time allowed between sending unsolicited | "The maximum time allowed between sending unsolicited | |||
| multicast Router Advertisements from the interface."; | multicast Router Advertisements from the interface."; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| MaxRtrAdvInterval."; | MaxRtrAdvInterval."; | |||
| } | } | |||
| leaf min-rtr-adv-interval { | leaf min-rtr-adv-interval { | |||
| type uint16 { | type uint16 { | |||
| range "3..1350"; | range "3..1350"; | |||
| } | } | |||
| units "seconds"; | units "seconds"; | |||
| must ". <= 0.75 * ../max-rtr-adv-interval" { | ||||
| description | ||||
| "The value MUST NOT be greater than 75 % of | ||||
| 'max-rtr-adv-interval'."; | ||||
| } | ||||
| description | description | |||
| "The minimum time allowed between sending unsolicited | "The minimum time allowed between sending unsolicited | |||
| multicast Router Advertisements from the interface. | multicast Router Advertisements from the interface. | |||
| The default value to be used operationally if this leaf is | The default value to be used operationally if this leaf is | |||
| not configured is determined as follows: | not configured is determined as follows: | |||
| - if max-rtr-adv-interval >= 9 seconds, the default value | - if max-rtr-adv-interval >= 9 seconds, the default value | |||
| is 0.33 * max-rtr-adv-interval; | is 0.33 * max-rtr-adv-interval; | |||
| skipping to change at page 45, line 45 ¶ | skipping to change at page 51, line 41 ¶ | |||
| If this parameter is not configured, a value of 3 * | If this parameter is not configured, a value of 3 * | |||
| max-rtr-adv-interval SHOULD be used. | max-rtr-adv-interval SHOULD be used. | |||
| "; | "; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvDefaultLifeTime."; | AdvDefaultLifeTime."; | |||
| } | } | |||
| container prefix-list { | container prefix-list { | |||
| description | description | |||
| "A list of prefixes to be placed in Prefix Information | "A list of prefixes that are placed in Prefix Information | |||
| options in Router Advertisement messages sent from the | options in Router Advertisement messages sent from the | |||
| interface. | interface. | |||
| By default, all prefixes that the router advertises via | By default, these are all prefixes that the router | |||
| routing protocols as being on-link for the interface from | advertises via routing protocols as being on-link for the | |||
| which the advertisement is sent. | interface from which the advertisement is sent. | |||
| Prefixes that do not have their entries in the child | ||||
| 'prefix' list are advertised with the default values of | ||||
| all parameters. | ||||
| The link-local prefix SHOULD NOT be included in the list | The link-local prefix SHOULD NOT be included in the list | |||
| of advertised prefixes. | of advertised prefixes. | |||
| "; | "; | |||
| reference | reference | |||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | |||
| AdvPrefixList."; | AdvPrefixList."; | |||
| list prefix { | list prefix { | |||
| key "prefix-spec"; | key "prefix-spec"; | |||
| description | description | |||
| "Advertised prefix entry with parameters."; | ||||
| leaf prefix-spec { | ||||
| type inet:ipv6-prefix; | ||||
| description | ||||
| "IPv6 address prefix."; | ||||
| } | ||||
| leaf valid-lifetime { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| default "2592000"; | ||||
| description | ||||
| "The value to be placed in the Valid Lifetime in the | ||||
| Prefix Information option. The designated value of all | ||||
| 1's (0xffffffff) represents infinity. | ||||
| "; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | ||||
| AdvValidLifetime."; | ||||
| } | ||||
| leaf on-link-flag { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "The value to be placed in the on-link flag ('L-bit') | ||||
| field in the Prefix Information option."; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | ||||
| AdvOnLinkFlag."; | ||||
| } | ||||
| leaf preferred-lifetime { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| default "604800"; | ||||
| description | ||||
| "The value to be placed in the Preferred Lifetime in | ||||
| the Prefix Information option, in seconds. The | ||||
| designated value of all 1's (0xffffffff) represents | ||||
| infinity."; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | ||||
| AdvPreferredLifetime."; | ||||
| } | ||||
| leaf autonomous-flag { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "The value to be placed in the Autonomous Flag field in | ||||
| the Prefix Information option."; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - | ||||
| AdvAutonomousFlag."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing-state/rt:routing-tables/rt:routing-table/" | ||||
| + "rt:routes/rt:route" { | ||||
| when "../../rt:address-family = 'ipv6' and ../../rt:safi = " | ||||
| + "'nlri-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment defines the content of IPv6 unicast routes."; | ||||
| uses route-content; | ||||
| } | ||||
| /* Configuration */ | ||||
| augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | ||||
| when "/if:interfaces/if:interface[if:name=current()/rt:name]/" | ||||
| + "ip:ipv6/ip:enabled='true'" { | ||||
| description | ||||
| "This augment is only valid for router interfaces with | ||||
| enabled IPv6."; | ||||
| } | ||||
| description | ||||
| "Configuration of IPv6-specific parameters of router | ||||
| interfaces."; | ||||
| container ipv6-router-advertisements { | ||||
| description | ||||
| "Configuration of IPv6 Router Advertisements. | ||||
| See the corresponding parameters under /rt:routing-state for | ||||
| detailed descriptions and references. | ||||
| "; | ||||
| leaf send-advertisements { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "A flag indicating whether or not the router sends periodic | ||||
| Router Advertisements and responds to Router | ||||
| Solicitations."; | ||||
| } | ||||
| leaf max-rtr-adv-interval { | ||||
| type uint16 { | ||||
| range "4..1800"; | ||||
| } | ||||
| units "seconds"; | ||||
| default "600"; | ||||
| description | ||||
| "The maximum time allowed between sending unsolicited | ||||
| multicast Router Advertisements from the interface."; | ||||
| } | ||||
| leaf min-rtr-adv-interval { | ||||
| type uint16 { | ||||
| range "3..1350"; | ||||
| } | ||||
| units "seconds"; | ||||
| must ". <= 0.75 * ../max-rtr-adv-interval" { | ||||
| description | ||||
| "The value MUST NOT be greater than 75 % of | ||||
| 'max-rtr-adv-interval'."; | ||||
| } | ||||
| description | ||||
| "The minimum time allowed between sending unsolicited | ||||
| multicast Router Advertisements from the interface. | ||||
| "; | ||||
| } | ||||
| leaf managed-flag { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "The boolean value to be placed in the 'Managed address | ||||
| configuration' flag field in the Router Advertisement."; | ||||
| } | ||||
| leaf other-config-flag { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "The boolean value to be placed in the 'Other | ||||
| configuration' flag field in the Router Advertisement."; | ||||
| } | ||||
| leaf link-mtu { | ||||
| type uint32; | ||||
| default "0"; | ||||
| description | ||||
| "The value to be placed in MTU options sent by the router. | ||||
| A value of zero indicates that no MTU options are sent."; | ||||
| } | ||||
| leaf reachable-time { | ||||
| type uint32 { | ||||
| range "0..3600000"; | ||||
| } | ||||
| units "milliseconds"; | ||||
| default "0"; | ||||
| description | ||||
| "The value to be placed in the Reachable Time field in the | ||||
| Router Advertisement messages sent by the router. The | ||||
| value zero means unspecified (by this router)."; | ||||
| } | ||||
| leaf retrans-timer { | ||||
| type uint32; | ||||
| units "milliseconds"; | ||||
| default "0"; | ||||
| description | ||||
| "The value to be placed in the Retrans Timer field in the | ||||
| Router Advertisement messages sent by the router. The | ||||
| value zero means unspecified (by this router)."; | ||||
| } | ||||
| leaf cur-hop-limit { | ||||
| type uint8; | ||||
| default "64"; | ||||
| description | ||||
| "The default value to be placed in the Cur Hop Limit field | ||||
| in the Router Advertisement messages sent by the router. | ||||
| "; | ||||
| } | ||||
| leaf default-lifetime { | ||||
| type uint16 { | ||||
| range "0..9000"; | ||||
| } | ||||
| units "seconds"; | ||||
| description | ||||
| "The value to be placed in the Router Lifetime field of | ||||
| Router Advertisements sent from the interface, in seconds. | ||||
| "; | ||||
| } | ||||
| container prefix-list { | ||||
| description | ||||
| "Configuration of prefixes to be placed in Prefix | ||||
| Information options in Router Advertisement messages sent | ||||
| from the interface. | ||||
| Prefixes that are advertised by default but do not have | ||||
| their entries in the child 'prefix' list are advertised | ||||
| with the default values of all parameters. | ||||
| "; | ||||
| list prefix { | ||||
| key "prefix-spec"; | ||||
| description | ||||
| "Advertised prefix entry."; | "Advertised prefix entry."; | |||
| leaf prefix-spec { | leaf prefix-spec { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "IPv6 address prefix."; | "IPv6 address prefix."; | |||
| } | } | |||
| choice control-adv-prefixes { | choice control-adv-prefixes { | |||
| default "advertise"; | default "advertise"; | |||
| description | description | |||
| "The prefix either may be explicitly removed from the | "The prefix either may be explicitly removed from the | |||
| skipping to change at page 46, line 46 ¶ | skipping to change at page 56, line 40 ¶ | |||
| default set of advertised prefixes. | default set of advertised prefixes. | |||
| "; | "; | |||
| } | } | |||
| case advertise { | case advertise { | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| default "2592000"; | default "2592000"; | |||
| description | description | |||
| "The value to be placed in the Valid Lifetime in | "The value to be placed in the Valid Lifetime in | |||
| the Prefix Information option, in seconds. The | the Prefix Information option."; | |||
| designated value of all 1's (0xffffffff) | ||||
| represents infinity. | ||||
| "; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 | ||||
| (IPv6) - AdvValidLifetime."; | ||||
| } | } | |||
| leaf on-link-flag { | leaf on-link-flag { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "The value to be placed in the on-link flag | "The value to be placed in the on-link flag | |||
| ('L-bit') field in the Prefix Information | ('L-bit') field in the Prefix Information | |||
| option."; | option."; | |||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 | ||||
| (IPv6) - AdvOnLinkFlag."; | ||||
| } | } | |||
| leaf preferred-lifetime { | leaf preferred-lifetime { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| must ". <= ../valid-lifetime" { | must ". <= ../valid-lifetime" { | |||
| description | description | |||
| "This value MUST NOT be greater than | "This value MUST NOT be greater than | |||
| valid-lifetime."; | valid-lifetime."; | |||
| } | } | |||
| default "604800"; | default "604800"; | |||
| description | description | |||
| "The value to be placed in the Preferred Lifetime | "The value to be placed in the Preferred Lifetime | |||
| in the Prefix Information option, in seconds. The | in the Prefix Information option."; | |||
| designated value of all 1's (0xffffffff) | ||||
| represents infinity. | ||||
| "; | ||||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 | ||||
| (IPv6) - AdvPreferredLifetime."; | ||||
| } | } | |||
| leaf autonomous-flag { | leaf autonomous-flag { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "The value to be placed in the Autonomous Flag | "The value to be placed in the Autonomous Flag | |||
| field in the Prefix Information option."; | field in the Prefix Information option."; | |||
| reference | ||||
| "RFC 4861: Neighbor Discovery for IP version 6 | ||||
| (IPv6) - AdvAutonomousFlag."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:router/rt:routing-protocols/" | |||
| + "rt:routing-protocol/rt:static-routes" { | + "rt:routing-protocol/rt:static-routes" { | |||
| description | description | |||
| "This augment defines the configuration of the 'static' | "This augment defines the configuration of the 'static' | |||
| pseudo-protocol with data specific for IPv6 unicast."; | pseudo-protocol with data specific for 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 { | |||
| skipping to change at page 48, line 28 ¶ | skipping to change at page 58, line 4 ¶ | |||
| leaf id { | leaf id { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| "Numeric identifier of the route. | "Numeric identifier of the route. | |||
| It is not required that the routes be sorted by their | It is not required that the routes be sorted by their | |||
| 'id'. | 'id'. | |||
| "; | "; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Textual description of the route."; | "Textual description of the route."; | |||
| } | } | |||
| uses rt:route-content; | uses rt:route-content; | |||
| uses route-content { | uses route-content { | |||
| refine "dest-prefix" { | refine "dest-prefix" { | |||
| mandatory "true"; | mandatory "true"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/rt:routing/rt:routing-tables/rt:routing-table/rt:routes/" | ||||
| + "rt:route" { | ||||
| when "../../rt:address-family = 'ipv6' and ../../rt:safi = " | ||||
| + "'nlri-unicast'" { | ||||
| description | ||||
| "This augment is valid only for IPv6 unicast."; | ||||
| } | ||||
| description | ||||
| "This augment defines the content of IPv6 unicast routes."; | ||||
| uses route-content; | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number (and remove this note). | actual RFC number (and remove this note). | |||
| This document registers the following namespace URIs in the IETF XML | This document registers the following namespace URIs in the IETF XML | |||
| skipping to change at page 52, line 14 ¶ | skipping to change at page 61, line 14 ¶ | |||
| 10. Security Considerations | 10. Security Considerations | |||
| Configuration and state data conforming to the core routing data | Configuration and state data conforming to the core routing data | |||
| model (defined in this document) are designed to be accessed via the | model (defined in this document) are designed to be accessed via the | |||
| NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | NETCONF protocol [RFC6241]. The lowest NETCONF layer is the secure | |||
| transport layer and the mandatory-to-implement secure transport is | transport layer and the mandatory-to-implement secure transport is | |||
| SSH [RFC6242]. | SSH [RFC6242]. | |||
| A number of data nodes defined in the YANG modules belonging to the | A number of data nodes defined in the YANG modules belonging to the | |||
| core routing data model are writable/creatable/deletable (i.e., | configuration part of the core routing data model are writable/ | |||
| "config true" in YANG terms, which is the default). These data nodes | creatable/deletable (i.e., "config true" in YANG terms, which is the | |||
| may be considered sensitive or vulnerable in some network | default). These data nodes may be considered sensitive or vulnerable | |||
| environments. Write operations to these data nodes, such as "edit- | in some network environments. Write operations to these data nodes, | |||
| config", can have negative effects on the network if the protocol | such as "edit-config", can have negative effects on the network if | |||
| operations are not properly protected. | the protocol operations are not properly protected. | |||
| The vulnerable "config true" subtrees and data nodes are the | The vulnerable "config true" subtrees and data nodes are the | |||
| following: | following: | |||
| /routing/router/interfaces/interface This list assigns a network | /routing/router/interfaces/interface This list assigns a network | |||
| layer interface to a router instance and may also specify | layer interface to a router instance and may also specify | |||
| interface parameters related to routing. | interface parameters related to routing. | |||
| /routing/router/routing-protocols/routing-protocol This list | /routing/router/routing-protocols/routing-protocol This list | |||
| specifies the routing protocols configured on a device. | specifies the routing protocols configured on a device. | |||
| skipping to change at page 53, line 8 ¶ | skipping to change at page 62, line 8 ¶ | |||
| configured routing tables used by the device. | configured routing tables used by the device. | |||
| Unauthorized access to any of these lists can adversely affect the | Unauthorized access to any of these lists can adversely affect the | |||
| routing subsystem of both the local device and the network. This may | routing subsystem of both the local device and the network. This may | |||
| lead to network malfunctions, delivery of packets to inappropriate | lead to network malfunctions, delivery of packets to inappropriate | |||
| destinations and other problems. | destinations and other problems. | |||
| 11. Acknowledgments | 11. Acknowledgments | |||
| The author wishes to thank Martin Bjorklund, Joel Halpern, | The author wishes to thank Martin Bjorklund, Joel Halpern, | |||
| Wes Hardaker, Andrew McGregor, Thomas Morin, Tom Petch, | Wes Hardaker, Andrew McGregor, Xiang Li, Thomas Morin, Tom Petch, | |||
| Bruno Rijsman, Juergen Schoenwaelder, Phil Shafer, Dave Thaler and | Bruno Rijsman, Juergen Schoenwaelder, Phil Shafer, Dave Thaler and | |||
| Yi Yang for their helpful comments and suggestions. | Yi Yang for their helpful comments and suggestions. | |||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [IANA-IF-AF] | [IANA-AF] Bjorklund, M., "IANA Address Family Numbers and Subsequent | |||
| Bjorklund, M., "IANA Interface Type and Address Family | Address Family Identifiers YANG Module", | |||
| YANG Modules", draft-ietf-netmod-iana-if-type-04 (work in | draft-ietf-netmod-iana-afn-safi-00 (work in progress), | |||
| progress), June 2012. | July 2013. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| January 2004. | January 2004. | |||
| [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
| "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
| September 2007. | September 2007. | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| Network Configuration Protocol (NETCONF)", RFC 6020, | Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| September 2010. | September 2010. | |||
| [RFC6021bis] | [RFC6021bis] | |||
| Schoenwaelder, J., Ed., "Common YANG Data Types", | Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| draft-ietf-netmod-rfc6021-bis-00 (work in progress), | draft-ietf-netmod-rfc6021-bis-03 (work in progress), | |||
| February 2013. | May 2013. | |||
| [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
| Bierman, "NETCONF Configuration Protocol", RFC 6241, | Bierman, "NETCONF Configuration Protocol", RFC 6241, | |||
| June 2011. | June 2011. | |||
| [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | [YANG-IF] Bjorklund, M., "A YANG Data Model for Interface | |||
| Configuration", draft-ietf-netmod-interfaces-cfg-09 (work | Management", draft-ietf-netmod-interfaces-cfg-12 (work in | |||
| in progress), February 2013. | progress), July 2013. | |||
| [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Configuration", | [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Management", | |||
| draft-ietf-netmod-ip-cfg-09 (work in progress), | draft-ietf-netmod-ip-cfg-09 (work in progress), | |||
| February 2013. | February 2013. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | |||
| Data Model Documents", RFC 6087, January 2011. | Data Model Documents", RFC 6087, January 2011. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, June 2011. | |||
| Appendix A. The Complete Data Tree | Appendix A. The Complete Data Trees | |||
| This appendix presents the complete data tree of the core routing | This appendix presents the complete configuration and operational | |||
| data model. See Section 2.2 for an explanation of symbols. Data | state data trees of the core routing data model. | |||
| type of every leaf node is shown near the right end of the | ||||
| corresponding line. | See Section 2.2 for an explanation of the symbols used. Data type of | |||
| every leaf node is shown near the right end of the corresponding | ||||
| line. | ||||
| A.1. Configuration Data | ||||
| +--rw routing | +--rw routing | |||
| +--rw router [name] | +--rw router* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw type? identityref | | +--rw type? identityref | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw router-id? yang:dotted-quad | | +--rw router-id? yang:dotted-quad | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw main-routing-tables | | +--rw default-routing-tables | |||
| | | +--rw main-routing-table [address-family safi] | | | +--rw default-routing-table* [address-family safi] | |||
| | | +--rw address-family ianaaf:address-family | | | +--rw address-family ianaaf:address-family | |||
| | | +--rw safi ianaaf:subsequent-address-family | | | +--rw safi ianaaf:subsequent-address-family | |||
| | | +--rw name? routing-table-ref | | | +--rw name string | |||
| | +--rw interfaces | | +--rw interfaces | |||
| | | +--rw interface [name] | | | +--rw interface* [name] | |||
| | | +--rw name if:interface-ref | | | +--rw name if:interface-ref | |||
| | | +--rw v6ur:ipv6-router-advertisements | | | +--rw v6ur:ipv6-router-advertisements | |||
| | | +--rw v6ur:send-advertisements? boolean | | | +--rw v6ur:send-advertisements? boolean | |||
| | | +--rw v6ur:max-rtr-adv-interval? uint16 | | | +--rw v6ur:max-rtr-adv-interval? uint16 | |||
| | | +--rw v6ur:min-rtr-adv-interval? uint16 | | | +--rw v6ur:min-rtr-adv-interval? uint16 | |||
| | | +--rw v6ur:managed-flag? boolean | | | +--rw v6ur:managed-flag? boolean | |||
| | | +--rw v6ur:other-config-flag? boolean | | | +--rw v6ur:other-config-flag? boolean | |||
| | | +--rw v6ur:link-mtu? uint32 | | | +--rw v6ur:link-mtu? uint32 | |||
| | | +--rw v6ur:reachable-time? uint32 | | | +--rw v6ur:reachable-time? uint32 | |||
| | | +--rw v6ur:retrans-timer? uint32 | | | +--rw v6ur:retrans-timer? uint32 | |||
| | | +--rw v6ur:cur-hop-limit? uint8 | | | +--rw v6ur:cur-hop-limit? uint8 | |||
| | | +--rw v6ur:default-lifetime? uint16 | | | +--rw v6ur:default-lifetime? uint16 | |||
| | | +--rw v6ur:prefix-list | | | +--rw v6ur:prefix-list | |||
| | | +--rw v6ur:prefix [prefix-spec] | | | +--rw v6ur:prefix* [prefix-spec] | |||
| | | +--rw v6ur:prefix-spec inet:ipv6-prefix | | | +--rw v6ur:prefix-spec inet:ipv6-prefix | |||
| | | +--rw (control-adv-prefixes)? | | | +--rw (control-adv-prefixes)? | |||
| | | +--:(no-advertise) | | | +--:(no-advertise) | |||
| | | | +--rw v6ur:no-advertise? empty | | | | +--rw v6ur:no-advertise? empty | |||
| | | +--:(advertise) | | | +--:(advertise) | |||
| | | +--rw v6ur:valid-lifetime? uint32 | | | +--rw v6ur:valid-lifetime? uint32 | |||
| | | +--rw v6ur:on-link-flag? boolean | | | +--rw v6ur:on-link-flag? boolean | |||
| | | +--rw v6ur:preferred-lifetime? uint32 | | | +--rw v6ur:preferred-lifetime? uint32 | |||
| | | +--rw v6ur:autonomous-flag? boolean | | | +--rw v6ur:autonomous-flag? boolean | |||
| | +--rw routing-protocols | | +--rw routing-protocols | |||
| | +--rw routing-protocol [name] | | +--rw routing-protocol* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw type identityref | | +--rw type identityref | |||
| | +--rw connected-routing-tables | | +--rw connected-routing-tables | |||
| | | +--rw connected-routing-table [name] | | | +--rw connected-routing-table* [name] | |||
| | | +--rw name routing-table-ref | | | +--rw name routing-table-ref | |||
| | | +--rw import-filter? route-filter-ref | | | +--rw import-filter? route-filter-ref | |||
| | | +--rw export-filter? route-filter-ref | | | +--rw export-filter? route-filter-ref | |||
| | +--rw static-routes | | +--rw static-routes | |||
| | +--rw v4ur:ipv4 | | +--rw v4ur:ipv4 | |||
| | | +--rw v4ur:route [id] | | | +--rw v4ur:route* [id] | |||
| | | +--rw v4ur:id uint32 | | | +--rw v4ur:id uint32 | |||
| | | +--rw v4ur:description? string | | | +--rw v4ur:description? string | |||
| | | +--rw v4ur:outgoing-interface? if:interface-ref | | | +--rw v4ur:outgoing-interface? if:interface-ref | |||
| | | +--rw v4ur:dest-prefix inet:ipv4-prefix | | | +--rw v4ur:dest-prefix inet:ipv4-prefix | |||
| | | +--rw v4ur:next-hop? inet:ipv4-address | | | +--rw v4ur:next-hop? inet:ipv4-address | |||
| | +--rw v6ur:ipv6 | | +--rw v6ur:ipv6 | |||
| | +--rw v6ur:route [id] | | +--rw v6ur:route* [id] | |||
| | +--rw v6ur:id uint32 | | +--rw v6ur:id uint32 | |||
| | +--rw v6ur:description? string | | +--rw v6ur:description? string | |||
| | +--rw v6ur:outgoing-interface? if:interface-ref | | +--rw v6ur:outgoing-interface? if:interface-ref | |||
| | +--rw v6ur:dest-prefix inet:ipv6-prefix | | +--rw v6ur:dest-prefix inet:ipv6-prefix | |||
| | +--rw v6ur:next-hop? inet:ipv6-address | | +--rw v6ur:next-hop? inet:ipv6-address | |||
| +--rw routing-tables | +--rw routing-tables | |||
| | +--rw routing-table [name] | | +--rw routing-table* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw address-family ianaaf:address-family | | +--rw address-family ianaaf:address-family | |||
| | +--rw safi ianaaf:subsequent-address-family | | +--rw safi ianaaf:subsequent-address-family | |||
| | +--rw description? string | | +--rw description? string | |||
| | +--ro routes | ||||
| | | +--ro route | ||||
| | | +--ro outgoing-interface? if:interface-ref | ||||
| | | +--ro source-protocol string | ||||
| | | +--ro last-updated? yang:date-and-time | ||||
| | | +--ro v4ur:dest-prefix? inet:ipv4-prefix | ||||
| | | +--ro v4ur:next-hop? inet:ipv4-address | ||||
| | | +--ro v6ur:dest-prefix? inet:ipv6-prefix | ||||
| | | +--ro v6ur:next-hop? inet:ipv6-address | ||||
| | +--rw recipient-routing-tables | | +--rw recipient-routing-tables | |||
| | +--rw recipient-routing-table [name] | | +--rw recipient-routing-table* [name] | |||
| | +--rw name routing-table-ref | | +--rw name routing-table-ref | |||
| | +--rw filter? route-filter-ref | | +--rw filter? route-filter-ref | |||
| +--rw route-filters | +--rw route-filters | |||
| +--rw route-filter [name] | +--rw route-filter* [name] | |||
| +--rw name string | +--rw name string | |||
| +--rw description? string | +--rw description? string | |||
| +--rw type identityref | +--rw type identityref | |||
| A.2. Operational State Data | ||||
| +--ro routing-state | ||||
| +--ro router* [name] | ||||
| | +--ro name string | ||||
| | +--ro type? identityref | ||||
| | +--ro router-id? yang:dotted-quad | ||||
| | +--ro default-routing-tables | ||||
| | | +--ro default-routing-table* [address-family safi] | ||||
| | | +--ro address-family ianaaf:address-family | ||||
| | | +--ro safi ianaaf:subsequent-address-family | ||||
| | | +--ro name routing-table-state-ref | ||||
| | +--ro interfaces | ||||
| | | +--ro interface* [name] | ||||
| | | +--ro name if:interface-state-ref | ||||
| | | +--ro v6ur:ipv6-router-advertisements | ||||
| | | +--ro v6ur:send-advertisements? boolean | ||||
| | | +--ro v6ur:max-rtr-adv-interval? uint16 | ||||
| | | +--ro v6ur:min-rtr-adv-interval? uint16 | ||||
| | | +--ro v6ur:managed-flag? boolean | ||||
| | | +--ro v6ur:other-config-flag? boolean | ||||
| | | +--ro v6ur:link-mtu? uint32 | ||||
| | | +--ro v6ur:reachable-time? uint32 | ||||
| | | +--ro v6ur:retrans-timer? uint32 | ||||
| | | +--ro v6ur:cur-hop-limit? uint8 | ||||
| | | +--ro v6ur:default-lifetime? uint16 | ||||
| | | +--ro v6ur:prefix-list | ||||
| | | +--ro v6ur:prefix* [prefix-spec] | ||||
| | | +--ro v6ur:prefix-spec inet:ipv6-prefix | ||||
| | | +--ro v6ur:valid-lifetime? uint32 | ||||
| | | +--ro v6ur:on-link-flag? boolean | ||||
| | | +--ro v6ur:preferred-lifetime? uint32 | ||||
| | | +--ro v6ur:autonomous-flag? boolean | ||||
| | +--ro routing-protocols | ||||
| | +--ro routing-protocol* [name] | ||||
| | +--ro name string | ||||
| | +--ro type identityref | ||||
| | +--ro connected-routing-tables | ||||
| | +--ro connected-routing-table* [name] | ||||
| | +--ro name routing-table-state-ref | ||||
| | +--ro import-filter? route-filter-state-ref | ||||
| | +--ro export-filter? route-filter-state-ref | ||||
| +--ro routing-tables | ||||
| | +--ro routing-table* [name] | ||||
| | +--ro name string | ||||
| | +--ro address-family ianaaf:address-family | ||||
| | +--ro safi ianaaf:subsequent-address-family | ||||
| | +--ro routes | ||||
| | | +--ro route* | ||||
| | | +--ro outgoing-interface? if:interface-state-ref | ||||
| | | +--ro source-protocol identityref | ||||
| | | +--ro last-updated? yang:date-and-time | ||||
| | | +--ro v4ur:dest-prefix? inet:ipv4-prefix | ||||
| | | +--ro v4ur:next-hop? inet:ipv4-address | ||||
| | | +--ro v6ur:dest-prefix? inet:ipv6-prefix | ||||
| | | +--ro v6ur:next-hop? inet:ipv6-address | ||||
| | +--ro recipient-routing-tables | ||||
| | +--ro recipient-routing-table* [name] | ||||
| | +--ro name routing-table-state-ref | ||||
| | +--ro filter? route-filter-state-ref | ||||
| +--ro route-filters | ||||
| +--ro route-filter* [name] | ||||
| +--ro name string | ||||
| +--ro type identityref | ||||
| Appendix B. Example: Adding a New Routing Protocol | Appendix B. Example: Adding a New Routing Protocol | |||
| This appendix demonstrates how the core routing data model can be | This appendix demonstrates how the core routing data model can be | |||
| extended to support a new routing protocol. The YANG module | extended to support a new routing protocol. The YANG module | |||
| "example-rip" shown below is intended only as an illustration rather | "example-rip" shown below is intended only as an illustration rather | |||
| than a real definition of a data model for the RIP routing protocol. | than a real definition of a data model for the RIP routing protocol. | |||
| For the sake of brevity, we do not follow all the guidelines | For the sake of brevity, we do not follow all the guidelines | |||
| specified in [RFC6087]. See also Section 4.4.2. | specified in [RFC6087]. See also Section 4.4.2. | |||
| module example-rip { | module example-rip { | |||
| skipping to change at page 57, line 51 ¶ | skipping to change at page 68, line 51 ¶ | |||
| } | } | |||
| 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/rt:routing-tables/rt:routing-table/rt:routes/" | augment "/rt:routing-state/rt:routing-tables/rt:routing-table/" | |||
| + "rt:route" { | + "rt:routes/rt:route" { | |||
| when "rt:source-protocol = 'rip:rip'" { | ||||
| description | ||||
| "This augment is only valid for a routes whose source | ||||
| protocol is RIP."; | ||||
| } | ||||
| description | description | |||
| "RIP-specific route attributes."; | "RIP-specific route attributes."; | |||
| uses route-content; | uses route-content; | |||
| } | } | |||
| augment "/rt:active-route/rt:output/rt:route" { | augment "/rt: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:router/rt:routing-protocols/" | augment "/rt:routing/rt:router/rt:routing-protocols/" | |||
| + "rt:routing-protocol" { | + "rt:routing-protocol" { | |||
| when "rt:type = 'rip:rip'" { | when "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 { | |||
| description | description | |||
| "RIP instance configuration."; | "RIP instance configuration."; | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Per-interface RIP configuration."; | "Per-interface RIP configuration."; | |||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| skipping to change at page 60, line 21 ¶ | skipping to change at page 71, line 21 ¶ | |||
| o ietf-interfaces [YANG-IF], | o ietf-interfaces [YANG-IF], | |||
| o ietf-ip [YANG-IP], | o ietf-ip [YANG-IP], | |||
| o ietf-routing (Section 6), | o ietf-routing (Section 6), | |||
| o ietf-ipv4-unicast-routing (Section 7), | o ietf-ipv4-unicast-routing (Section 7), | |||
| o ietf-ipv6-unicast-routing (Section 8). | o ietf-ipv6-unicast-routing (Section 8). | |||
| We assume a simple network setup as shown in Figure 4: router "A" | We assume a simple network setup as shown in Figure 5: router "A" | |||
| uses static default routes with the "ISP" router as the next hop. | uses static default routes with the "ISP" router as the next hop. | |||
| IPv6 router advertisements are configured only on the "eth1" | IPv6 router advertisements are configured only on the "eth1" | |||
| interface and disabled on the upstream "eth0" interface. | interface and disabled on the upstream "eth0" interface. | |||
| +-----------------+ | +-----------------+ | |||
| | | | | | | |||
| | Router ISP | | | Router ISP | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| |2001:db8:0:1::2 | |2001:db8:0:1::2 | |||
| skipping to change at page 60, line 46 ¶ | skipping to change at page 71, line 46 ¶ | |||
| eth0|192.0.2.1 | eth0|192.0.2.1 | |||
| +--------+--------+ | +--------+--------+ | |||
| | | | | | | |||
| | Router A | | | Router A | | |||
| | | | | | | |||
| +--------+--------+ | +--------+--------+ | |||
| eth1|198.51.100.1 | eth1|198.51.100.1 | |||
| |2001:db8:0:2::1 | |2001:db8:0:2::1 | |||
| | | | | |||
| Figure 4: Example network configuration | Figure 5: Example network configuration | |||
| A reply to the NETCONF <get> message sent by router "A" would then be | A reply to the NETCONF <get> message sent by router "A" would then be | |||
| as follows: | as follows: | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <rpc-reply | <rpc-reply | |||
| message-id="101" | message-id="101" | |||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | |||
| xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | |||
| xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | |||
| xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip" | xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip" | |||
| xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> | xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing"> | |||
| <data> | <data> | |||
| <if:interfaces> | <if:interfaces> | |||
| <if:interface> | <if:interface> | |||
| <if:name>eth0</if:name> | <if:name>eth0</if:name> | |||
| <if:type>ethernetCsmacd</if:type> | <if:type>ethernetCsmacd</if:type> | |||
| <if:location>eth0</if:location> | <if:description> | |||
| <ip:ipv4> | Uplink to ISP. | |||
| <ip:address> | </if:description> | |||
| <ip:ip>192.0.2.1</ip:ip> | <ip:ipv4> | |||
| <ip:prefix-length>24</ip:prefix-length> | <ip:address> | |||
| </ip:address> | <ip:ip>192.0.2.1</ip:ip> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:prefix-length>24</ip:prefix-length> | |||
| </ip:ipv4> | </ip:address> | |||
| <ip:ipv6> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:address> | </ip:ipv4> | |||
| <ip:ip>2001:0db8:0:1::1</ip:ip> | <ip:ipv6> | |||
| <ip:prefix-length>64</ip:prefix-length> | <ip:address> | |||
| </ip:address> | <ip:ip>2001:0db8:0:1::1</ip:ip> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:prefix-length>64</ip:prefix-length> | |||
| <ip:autoconf> | </ip:address> | |||
| <ip:create-global-addresses>false</ip:create-global-addresses> | <ip:forwarding>true</ip:forwarding> | |||
| </ip:autoconf> | <ip:autoconf> | |||
| </ip:ipv6> | <ip:create-global-addresses>false</ip:create-global-addresses> | |||
| </if:interface> | </ip:autoconf> | |||
| <if:interface> | </ip:ipv6> | |||
| <if:name>eth1</if:name> | </if:interface> | |||
| <if:type>ethernetCsmacd</if:type> | <if:interface> | |||
| <if:location>eth1</if:location> | <if:name>eth1</if:name> | |||
| <ip:ipv4> | <if:type>ethernetCsmacd</if:type> | |||
| <ip:address> | <if:description> | |||
| <ip:ip>198.51.100.1</ip:ip> | Interface to the internal network. | |||
| <ip:prefix-length>24</ip:prefix-length> | </if:description> | |||
| </ip:address> | <ip:ipv4> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:address> | |||
| </ip:ipv4> | <ip:ip>198.51.100.1</ip:ip> | |||
| <ip:ipv6> | <ip:prefix-length>24</ip:prefix-length> | |||
| <ip:address> | </ip:address> | |||
| <ip:ip>2001:0db8:0:2::1</ip:ip> | <ip:forwarding>true</ip:forwarding> | |||
| <ip:prefix-length>64</ip:prefix-length> | </ip:ipv4> | |||
| </ip:address> | <ip:ipv6> | |||
| <ip:forwarding>true</ip:forwarding> | <ip:address> | |||
| <ip:autoconf> | <ip:ip>2001:0db8:0:2::1</ip:ip> | |||
| <ip:create-global-addresses>false</ip:create-global-addresses> | <ip:prefix-length>64</ip:prefix-length> | |||
| </ip:autoconf> | </ip:address> | |||
| </ip:ipv6> | <ip:forwarding>true</ip:forwarding> | |||
| </if:interface> | <ip:autoconf> | |||
| </if:interfaces> | <ip:create-global-addresses>false</ip:create-global-addresses> | |||
| <rt:routing> | </ip:autoconf> | |||
| <rt:router> | </ip:ipv6> | |||
| <rt:name>rtr0</rt:name> | </if:interface> | |||
| <rt:router-id>192.0.2.1</rt:router-id> | </if:interfaces> | |||
| <rt:description>Router A</rt:description> | <if:interfaces-state> | |||
| <rt:main-routing-tables> | <if:interface> | |||
| <rt:main-routing-table> | <if:name>eth0</if:name> | |||
| <if:type>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> | ||||
| 2013-07-02T17:11:27+00:58 | ||||
| </if:discontinuity-time> | ||||
| </if:statistics> | ||||
| </if:interface> | ||||
| <if:interface> | ||||
| <if:name>eth1</if:name> | ||||
| <if:type>ethernetCsmacd</if:type> | ||||
| <if:oper-status>up</if:oper-status> | ||||
| <if:phys-address>00:0C:42:E5:B1:EA</if:phys-address> | ||||
| <if:statistics> | ||||
| <if:discontinuity-time> | ||||
| 2013-07-02T17:11:27+00:59 | ||||
| </if:discontinuity-time> | ||||
| </if:statistics> | ||||
| </if:interface> | ||||
| </if:interfaces-state> | ||||
| <rt:routing> | ||||
| <rt:router> | ||||
| <rt:name>rtr0</rt:name> | ||||
| <rt:description>Router A</rt:description> | ||||
| <rt:interfaces> | ||||
| <rt:interface> | ||||
| <rt:name>eth1</rt:name> | ||||
| <v6ur:ipv6-router-advertisements> | ||||
| <v6ur: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> | ||||
| </rt:interface> | ||||
| </rt:interfaces> | ||||
| <rt:routing-protocols> | ||||
| <rt:routing-protocol> | ||||
| <rt:name>st0</rt:name> | ||||
| <rt:description> | ||||
| Static routing is used for the internal network. | ||||
| </rt:description> | ||||
| <rt:type>rt:static</rt:type> | ||||
| <rt:static-routes> | ||||
| <v4ur:ipv4> | ||||
| <v4ur:route> | ||||
| <v4ur:id>1</v4ur:id> | ||||
| <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
| <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
| </v4ur:route> | ||||
| </v4ur:ipv4> | ||||
| <v6ur:ipv6> | ||||
| <v6ur:route> | ||||
| <v6ur:id>1</v6ur:id> | ||||
| <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | ||||
| <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | ||||
| </v6ur:route> | ||||
| </v6ur:ipv6> | ||||
| </rt:static-routes> | ||||
| </rt:routing-protocol> | ||||
| </rt:routing-protocols> | ||||
| </rt:router> | ||||
| </rt:routing> | ||||
| <rt:routing-state> | ||||
| <rt:router> | ||||
| <rt:name>rtr0</rt:name> | ||||
| <rt:router-id>192.0.2.1</rt:router-id> | ||||
| <rt:default-routing-tables> | ||||
| <rt:default-routing-table> | ||||
| <rt:address-family>ipv4</rt:address-family> | ||||
| <rt:safi>nlri-unicast</rt:safi> | ||||
| <rt:name>ipv4-unicast</rt:name> | ||||
| </rt:default-routing-table> | ||||
| <rt:default-routing-table> | ||||
| <rt:address-family>ipv6</rt:address-family> | ||||
| <rt:safi>nlri-unicast</rt:safi> | ||||
| <rt:name>ipv6-unicast</rt:name> | ||||
| </rt:default-routing-table> | ||||
| </rt:default-routing-tables> | ||||
| <rt:interfaces> | ||||
| <rt:interface> | ||||
| <rt:name>eth0</rt:name> | ||||
| </rt:interface> | ||||
| <rt:interface> | ||||
| <rt:name>eth1</rt:name> | ||||
| <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> | ||||
| </rt:interface> | ||||
| </rt:interfaces> | ||||
| <rt:routing-protocols> | ||||
| <rt:routing-protocol> | ||||
| <rt:name>st0</rt:name> | ||||
| <rt:type>rt:static</rt:type> | ||||
| </rt:routing-protocol> | ||||
| </rt:routing-protocols> | ||||
| </rt:router> | ||||
| <rt:routing-tables> | ||||
| <rt:routing-table> | ||||
| <rt:name>ipv4-unicast</rt:name> | ||||
| <rt:address-family>ipv4</rt:address-family> | <rt:address-family>ipv4</rt:address-family> | |||
| <rt:safi>nlri-unicast</rt:safi> | <rt:safi>nlri-unicast</rt:safi> | |||
| <rt:name>ipv4-unicast</rt:name> | <rt:routes> | |||
| </rt:main-routing-table> | <rt:route> | |||
| <rt:main-routing-table> | <v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | |||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| <rt:source-protocol>rt:direct</rt:source-protocol> | ||||
| <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
| <rt:source-protocol>rt:static</rt:source-protocol> | ||||
| <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
| <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| </rt:routes> | ||||
| </rt:routing-table> | ||||
| <rt:routing-table> | ||||
| <rt:name>ipv6-unicast</rt:name> | ||||
| <rt:address-family>ipv6</rt:address-family> | <rt:address-family>ipv6</rt:address-family> | |||
| <rt:safi>nlri-unicast</rt:safi> | <rt:safi>nlri-unicast</rt:safi> | |||
| <rt:name>ipv6-unicast</rt:name> | <rt:routes> | |||
| </rt:main-routing-table> | <rt:route> | |||
| </rt:main-routing-tables> | <v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | |||
| <rt:interfaces> | <rt:outgoing-interface>eth0</rt:outgoing-interface> | |||
| <rt:interface> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| <rt:name>eth0</rt:name> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
| </rt:interface> | </rt:route> | |||
| <rt:interface> | <rt:route> | |||
| <rt:name>eth1</rt:name> | <v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | |||
| <v6ur:ipv6-router-advertisements> | <rt:outgoing-interface>eth1</rt:outgoing-interface> | |||
| <v6ur:send-advertisements>true</v6ur:send-advertisements> | <rt:source-protocol>rt:direct</rt:source-protocol> | |||
| <v6ur:prefix-list> | <rt:last-updated>2013-07-02T17:11:27+01:00</rt:last-updated> | |||
| <v6ur:prefix> | </rt:route> | |||
| <v6ur:prefix-spec>2001:db8:0:2::/64</v6ur:prefix-spec> | <rt:route> | |||
| </v6ur:prefix> | <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | |||
| </v6ur:prefix-list> | <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | |||
| </v6ur:ipv6-router-advertisements> | <rt:source-protocol>rt:static</rt:source-protocol> | |||
| </rt:interface> | <rt:last-updated>2013-07-02T18:02:45+01:00</rt:last-updated> | |||
| </rt:interfaces> | </rt:route> | |||
| <rt:routing-protocols> | </rt:routes> | |||
| <rt:routing-protocol> | </rt:routing-table> | |||
| <rt:name>st0</rt:name> | </rt:routing-tables> | |||
| <rt:description> | </rt:routing-state> | |||
| Static routing is used for the internal network. | </data> | |||
| </rt:description> | </rpc-reply> | |||
| <rt:type>rt:static</rt:type> | ||||
| <rt:static-routes> | ||||
| <v4ur:ipv4> | ||||
| <v4ur:route> | ||||
| <v4ur:id>1</v4ur:id> | ||||
| <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
| <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
| </v4ur:route> | ||||
| </v4ur:ipv4> | ||||
| <v6ur:ipv6> | ||||
| <v6ur:route> | ||||
| <v6ur:id>1</v6ur:id> | ||||
| <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | ||||
| <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | ||||
| </v6ur:route> | ||||
| </v6ur:ipv6> | ||||
| </rt:static-routes> | ||||
| </rt:routing-protocol> | ||||
| </rt:routing-protocols> | ||||
| </rt:router> | ||||
| <rt:routing-tables> | ||||
| <rt:routing-table> | ||||
| <rt:name>ipv4-unicast</rt:name> | ||||
| <rt:address-family>ipv4</rt:address-family> | ||||
| <rt:safi>nlri-unicast</rt:safi> | ||||
| <rt:routes> | ||||
| <rt:route> | ||||
| <v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | ||||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| <rt:source-protocol>direct</rt:source-protocol> | ||||
| <rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| <rt:source-protocol>direct</rt:source-protocol> | ||||
| <rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | ||||
| <rt:source-protocol>st0</rt:source-protocol> | ||||
| <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
| <rt:last-updated>2012-10-02T18:02:45+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| </rt:routes> | ||||
| </rt:routing-table> | ||||
| <rt:routing-table> | ||||
| <rt:name>ipv6-unicast</rt:name> | ||||
| <rt:address-family>ipv6</rt:address-family> | ||||
| <rt:safi>nlri-unicast</rt:safi> | ||||
| <rt:routes> | ||||
| <rt:route> | ||||
| <v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | ||||
| <rt:outgoing-interface>eth0</rt:outgoing-interface> | ||||
| <rt:source-protocol>direct</rt:source-protocol> | ||||
| <rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | ||||
| <rt:outgoing-interface>eth1</rt:outgoing-interface> | ||||
| <rt:source-protocol>direct</rt:source-protocol> | ||||
| <rt:last-updated>2012-10-02T17:11:27+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| <rt:route> | ||||
| <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | ||||
| <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | ||||
| <rt:source-protocol>st0</rt:source-protocol> | ||||
| <rt:last-updated>2012-10-02T18:02:45+01:00</rt:last-updated> | ||||
| </rt:route> | ||||
| </rt:routes> | ||||
| </rt:routing-table> | ||||
| </rt:routing-tables> | ||||
| </rt:routing> | ||||
| </data> | ||||
| </rpc-reply> | ||||
| Appendix D. Change Log | Appendix D. Change Log | |||
| RFC Editor: remove this section upon publication as an RFC. | RFC Editor: remove this section upon publication as an RFC. | |||
| D.1. Changes Between Versions -08 and -09 | D.1. Changes Between Versions -09 and -10 | |||
| o Added subtree for operational state data ("/routing-state"). | ||||
| o Terms "system-controlled entry" and "user-controlled entry" | ||||
| defined and used. | ||||
| o New feature "user-defined-routing-tables". Nodes that are useful | ||||
| only with user-defined routing tables are now conditional. | ||||
| o Added grouping "router-id". | ||||
| o In routing tables, "source-protocol" attribute of routes now | ||||
| reports only protocol type, and its datatype is "identityref". | ||||
| o Renamed "main-routing-table" to "default-routing-table". | ||||
| D.2. Changes Between Versions -08 and -09 | ||||
| o Fixed "must" expresion for "connected-routing-table". | o Fixed "must" expresion for "connected-routing-table". | |||
| o Simplified "must" expression for "main-routing-table". | o Simplified "must" expression for "main-routing-table". | |||
| o Moved per-interface configuration of a new routing protocol under | o Moved per-interface configuration of a new routing protocol under | |||
| 'routing-protocol'. This also affects the 'example-rip' module. | 'routing-protocol'. This also affects the 'example-rip' module. | |||
| D.2. Changes Between Versions -07 and -08 | D.3. Changes Between Versions -07 and -08 | |||
| o Changed reference from RFC6021 to RFC6021bis. | o Changed reference from RFC6021 to RFC6021bis. | |||
| D.3. Changes Between Versions -06 and -07 | D.4. Changes Between Versions -06 and -07 | |||
| o The contents of <get-reply> in Appendix C was updated: "eth[01]" | o The contents of <get-reply> in Appendix C was updated: "eth[01]" | |||
| is used as the value of "location", and "forwarding" is on for | is used as the value of "location", and "forwarding" is on for | |||
| both interfaces and both IPv4 and IPv6. | both interfaces and both IPv4 and IPv6. | |||
| o The "must" expression for "main-routing-table" was modified to | o The "must" expression for "main-routing-table" was modified to | |||
| avoid redundant error messages reporting address family mismatch | avoid redundant error messages reporting address family mismatch | |||
| when "name" points to a non-existent routing table. | when "name" points to a non-existent routing table. | |||
| o The default behavior for IPv6 RA prefix advertisements was | o The default behavior for IPv6 RA prefix advertisements was | |||
| clarified. | clarified. | |||
| o Changed type of "rt:router-id" to "ip:dotted-quad". | o Changed type of "rt:router-id" to "ip:dotted-quad". | |||
| o Type of "rt:router-id" changed to "yang:dotted-quad". | o Type of "rt:router-id" changed to "yang:dotted-quad". | |||
| o Fixed missing prefixes in XPath expressions. | o Fixed missing prefixes in XPath expressions. | |||
| D.4. Changes Between Versions -05 and -06 | D.5. 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 66, line 15 ¶ | skipping to change at page 78, line 33 ¶ | |||
| o Complete data tree is now in Appendix A. | o Complete data tree is now in Appendix A. | |||
| o Changed type of "source-protocol" from "leafref" to "string". | o Changed type of "source-protocol" from "leafref" to "string". | |||
| o Clarified the relationship between routing protocol instances and | o Clarified the relationship between routing protocol instances and | |||
| connected routing tables. | connected routing tables. | |||
| o Added a must constraint saying that a routing table connected to | o Added a must constraint saying that a routing table connected to | |||
| the direct pseudo-protocol must not be a main routing table. | the direct pseudo-protocol must not be a main routing table. | |||
| D.5. Changes Between Versions -04 and -05 | D.6. 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 67, line 5 ¶ | skipping to change at page 79, line 21 ¶ | |||
| o The "direct" pseudo-protocol is always connected to main routing | o The "direct" pseudo-protocol is always connected to main routing | |||
| tables. | tables. | |||
| o Entries in the list of connected routing tables renamed from | o Entries in the list of connected routing tables renamed from | |||
| "routing-table" to "connected-routing-table". | "routing-table" to "connected-routing-table". | |||
| o Added "must" constraint saying that a routing table must not be | o Added "must" constraint saying that a routing table must not be | |||
| its own recipient. | its own recipient. | |||
| D.6. Changes Between Versions -03 and -04 | D.7. Changes Between Versions -03 and -04 | |||
| o Changed "error-tag" for both RPC methods from "missing element" to | o Changed "error-tag" for both RPC methods from "missing element" to | |||
| "data-missing". | "data-missing". | |||
| o Removed the decrementing behavior for advertised IPv6 prefix | o Removed the decrementing behavior for advertised IPv6 prefix | |||
| parameters "valid-lifetime" and "preferred-lifetime". | parameters "valid-lifetime" and "preferred-lifetime". | |||
| o Changed the key of the static route lists from "seqno" to "id" | o Changed the key of the static route lists from "seqno" to "id" | |||
| because the routes needn't be sorted. | because the routes needn't be sorted. | |||
| o Added 'must' constraint saying that "preferred-lifetime" must not | o Added 'must' constraint saying that "preferred-lifetime" must not | |||
| be greater than "valid-lifetime". | be greater than "valid-lifetime". | |||
| D.7. Changes Between Versions -02 and -03 | D.8. 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 68, line 5 ¶ | skipping to change at page 80, line 20 ¶ | |||
| "ietf-ip". | "ietf-ip". | |||
| o Added "router-id" leaf. | o Added "router-id" leaf. | |||
| o Specified the names for IPv4/IPv6 unicast main routing tables. | o Specified the names for IPv4/IPv6 unicast main routing tables. | |||
| o Route parameter "last-modified" changed to "age". | o Route parameter "last-modified" changed to "age". | |||
| o Added container "recipient-routing-tables". | o Added container "recipient-routing-tables". | |||
| D.8. Changes Between Versions -01 and -02 | D.9. Changes Between Versions -01 and -02 | |||
| o Added module "ietf-ipv6-unicast-routing". | o Added module "ietf-ipv6-unicast-routing". | |||
| o The example in Appendix C now uses IP addresses from blocks | o The example in Appendix C 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 68, line 29 ¶ | skipping to change at page 80, line 44 ¶ | |||
| o Additional "must" statements were added. | o Additional "must" statements were added. | |||
| o The "route-content" grouping for IPv4 and IPv6 unicast now | o The "route-content" grouping for IPv4 and IPv6 unicast now | |||
| includes the material from the "ietf-routing" version via "uses | includes the material from the "ietf-routing" version via "uses | |||
| rt:route-content". | rt:route-content". | |||
| o Explanation of symbols in the tree representation of data model | o Explanation of symbols in the tree representation of data model | |||
| hierarchy. | hierarchy. | |||
| D.9. Changes Between Versions -00 and -01 | D.10. 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. 184 change blocks. | ||||
| 588 lines changed or deleted | 1223 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/ | ||||