draft-ietf-netmod-routing-cfg-01.txt | draft-ietf-netmod-routing-cfg-02.txt | |||
---|---|---|---|---|
NETMOD L. Lhotka | NETMOD L. Lhotka | |||
Internet-Draft CESNET | Internet-Draft CZ.NIC | |||
Intended status: Standards Track September 23, 2011 | Intended status: Standards Track February 20, 2012 | |||
Expires: March 26, 2012 | Expires: August 23, 2012 | |||
A YANG Data Model for Routing Configuration | A YANG Data Model for Routing Configuration | |||
draft-ietf-netmod-routing-cfg-01 | draft-ietf-netmod-routing-cfg-02 | |||
Abstract | Abstract | |||
This document contains a specification of three YANG modules that | This document contains a specification of four YANG modules. | |||
together provide a data model for essential configuration of a | Together they form the core routing data model which serves as a | |||
routing subsystem. It is expected that this module will serve as a | basis for configuring a routing subsystem. It is therefore expected | |||
basis for further development of data models for individual routing | that this module will be augmented by additional YANG modules | |||
protocols and other related functions. The present data model | defining data models for individual routing protocols and other | |||
defines the common building blocks for such configurations - router | related functions. The core routing data model provides common | |||
instances, routes, routing tables, routing protocols and route | building blocks for such configurations - router instances, routes, | |||
filters. | routing tables, routing protocols and route filters. | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on March 26, 2012. | This Internet-Draft will expire on August 23, 2012. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2012 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 17 | skipping to change at page 2, line 17 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | 2.1. Glossary of New Terms . . . . . . . . . . . . . . . . . . 4 | |||
2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | 2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 | |||
3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | 4. The Design of the Core Routing Data Model . . . . . . . . . . 7 | |||
4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Router . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1.1. Configuration of IPv6 Router Interfaces . . . . . . . 10 | |||
4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 12 | 4.3. Routing Tables . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.4.1. Defining New Routing Protocols . . . . . . . . . . . . 13 | 4.4. Routing Protocols . . . . . . . . . . . . . . . . . . . . 13 | |||
4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 15 | 4.4.1. Defining New Routing Protocols . . . . . . . . . . . . 14 | |||
4.6. RPC Operation . . . . . . . . . . . . . . . . . . . . . . 16 | 4.5. Route Filters . . . . . . . . . . . . . . . . . . . . . . 17 | |||
5. IANA AFN and SAFI YANG Module . . . . . . . . . . . . . . . . 17 | 4.6. RPC Operation . . . . . . . . . . . . . . . . . . . . . . 18 | |||
6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 25 | 5. IANA AFN and SAFI YANG Module . . . . . . . . . . . . . . . . 19 | |||
7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 34 | 6. Routing YANG Module . . . . . . . . . . . . . . . . . . . . . 27 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | 7. IPv4 Unicast Routing YANG Module . . . . . . . . . . . . . . . 37 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | 8. IPv6 Unicast Routing YANG Module . . . . . . . . . . . . . . . 41 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 41 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 51 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . . 42 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . . 42 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
Appendix A. Example - Adding a New Routing Protocol . . . . . . . 43 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 53 | |||
A.1. Example YANG Module for Routing Information | 12.2. Informative References . . . . . . . . . . . . . . . . . . 53 | |||
Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 43 | Appendix A. Example: Adding a New Routing Protocol . . . . . . . 54 | |||
A.2. Sample Reply to the NETCONF <get> Message . . . . . . . . 45 | Appendix B. Example: Reply to the NETCONF <get> Message . . . . . 57 | |||
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 50 | Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 63 | |||
B.1. Changes Between Versions -00 and -01 . . . . . . . . . . . 50 | C.1. Changes Between Versions -01 and -02 . . . . . . . . . . . 63 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 51 | C.2. Changes Between Versions -00 and -01 . . . . . . . . . . . 63 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 64 | ||||
1. Introduction | 1. Introduction | |||
This document contains an initial specification of three YANG | This document contains a specification of four YANG modules: | |||
modules: | ||||
o Module "ietf-routing" provides generic components of a routing | o Module "ietf-routing" provides generic components of a routing | |||
data model. | data model. | |||
o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | o Module "ietf-ipv4-unicast-routing" augments the "ietf-routing" | |||
module with additional data specific to IPv4 unicast. | module with additional data specific to IPv4 unicast. | |||
o Module "ietf-ipv6-unicast-routing" augments the "ietf-routing" | ||||
module with additional data specific to IPv6 unicast, including | ||||
the configuration variables required by [RFC4861]. | ||||
o Module "iana-afn-safi" contains two type definitions translating | o Module "iana-afn-safi" contains two type definitions translating | |||
IANA registries "Address Family Numbers" [IANA-AFN] and | IANA registries "Address Family Numbers" [IANA-AFN] and | |||
"Subsequent Address Family Identifiers" [IANA-SAFI] to YANG | "Subsequent Address Family Identifiers" [IANA-SAFI] to YANG | |||
enumerations. | enumerations. | |||
ED. QUESTION: Would it be possible/useful to publish the "iana-afn- | The first three modules together define the so-called core routing | |||
safi" module as a separate I-D, perhaps together with "iana-if-type"? | data model. This data model will serve as a basis for the | |||
development of data models for more sophisticated routing | ||||
The first two modules together define the so-called core routing data | configurations. While these three modules can be directly used for | |||
model. This data model will serve as a basis for the development of | simple IP devices with static routing, their main purpose is to | |||
data models for more sophisticated routing configurations. While | provide essential building blocks for more complicated setups | |||
these two modules can be directly used for simple IPv4-only devices | involving multiple routing protocols, multicast routing, additional | |||
with static routing, their main purpose is to provide essential | address families, advanced functions such as route filtering or | |||
building blocks for more complicated setups involving other address | policy routing etc. To this end, it is expected that the core | |||
families such as IPv6, multicast routing, multiple routing protocols, | routing data model will be augmented by numerous modules developed by | |||
and advanced functions such as route filtering or policy routing. To | other IETF working groups. | |||
this end, it is expected that this module will be augmented by | ||||
numerous modules developed by other IETF working groups. | ||||
2. Terminology and Notation | 2. Terminology and Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The following terms are defined in [RFC6241]: | The following terms are defined in [RFC6241]: | |||
o client | o client | |||
skipping to change at page 5, line 10 | skipping to change at page 5, line 10 | |||
o RPC operation | o RPC operation | |||
2.1. Glossary of New Terms | 2.1. Glossary of New Terms | |||
active route: a route which is actually used for packet forwarding. | active route: a route which is actually used for packet forwarding. | |||
If there are multiple candidate routes with a matching destination | If there are multiple candidate routes with a matching destination | |||
prefix, then it is up to the routing algorithm to select the | prefix, then it is up to the routing algorithm to select the | |||
active route. | active route. | |||
core routing data model: YANG data model resulting from the | core routing data model: YANG data model resulting from the | |||
combination of "ietf-routing" and "ietf-ipv4-unicast-routing-cfg" | combination of "ietf-routing", "ietf-ipv4-unicast-routing-cfg" and | |||
modules. | "ietf-ipv6-unicast-routing-cfg" modules. | |||
direct route: a route to a directly connected network. | ||||
2.2. Prefixes in Data Node Names | 2.2. Prefixes in Data Node Names | |||
In this document, names of data nodes are used mostly without a | In this document, names of data nodes are used mostly without a | |||
prefix, as long as it is clear from the context in which YANG module | prefix, as long as it is clear from the context in which YANG module | |||
each name is defined. Otherwise, names are prefixed with their | each name is defined. Otherwise, names are prefixed with their | |||
standard prefix associated with the corresponding YANG module, as | standard prefix associated with the corresponding YANG module, as | |||
shown in Table 1. | shown in Table 1. | |||
+--------+---------------------------+------------+ | +--------+---------------------------+------------+ | |||
| Prefix | YANG module | Reference | | | Prefix | YANG module | Reference | | |||
+--------+---------------------------+------------+ | +--------+---------------------------+------------+ | |||
| eth | ex-ethernet | [YANG-IF] | | | eth | ex-ethernet | [YANG-IF] | | |||
| | | | | | | | | | |||
| if | ietf-interfaces | [YANG-IF] | | | if | ietf-interfaces | [YANG-IF] | | |||
| | | | | | | | | | |||
| inet | ietf-inet-types | [RFC6021] | | ||||
| | | | | ||||
| ip | ietf-ip | [YANG-IP] | | | ip | ietf-ip | [YANG-IP] | | |||
| | | | | | | | | | |||
| rip | example-rip | Appendix A | | | rip | example-rip | Appendix A | | |||
| | | | | | | | | | |||
| 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 | | ||||
| | | | | ||||
| yang | ietf-yang-types | [RFC6021] | | | yang | ietf-yang-types | [RFC6021] | | |||
| | | | | ||||
| inet | ietf-inet-types | [RFC6021] | | ||||
+--------+---------------------------+------------+ | +--------+---------------------------+------------+ | |||
Table 1: Prefixes and corresponding YANG modules | Table 1: Prefixes and corresponding YANG modules | |||
3. Objectives | 3. Objectives | |||
The initial design of the core routing data model was driven by the | The initial design of the core routing data model was driven by the | |||
following objectives: | following objectives: | |||
o The data model should be suitable for the common address families, | o The data model should be suitable for the common address families, | |||
skipping to change at page 7, line 7 | skipping to change at page 7, line 7 | |||
routing information. | routing information. | |||
o Device vendors will want to map the data models built on this | o Device vendors will want to map the data models built on this | |||
generic framework to their proprietary data models and | generic framework to their proprietary data models and | |||
configuration interfaces. Therefore, the framework should be | configuration interfaces. Therefore, the framework should be | |||
flexible enough to facilitate such a mapping and accommodate data | flexible enough to facilitate such a mapping and accommodate data | |||
models with different logic. | models with different logic. | |||
4. The Design of the Core Routing Data Model | 4. The Design of the Core Routing Data Model | |||
The core routing data model consists of two YANG modules. The first | The core routing data model consists of three YANG modules. The | |||
module, "ietf-routing", defines the generic components of a routing | first module, "ietf-routing", defines the generic components of a | |||
system. The second module, "ietf-ipv4-unicast-routing", augments the | routing system. The other two modules, "ietf-ipv4-unicast-routing" | |||
"ietf-routing" module with new data nodes that are needed for IPv4 | and "ietf-ipv6-unicast-routing", augment the "ietf-routing" module | |||
unicast routing. | with additional data nodes that are needed for IPv4 and IPv6 unicast | |||
routing, respectively. The combined data hierarchy is shown in | ||||
The combined data hierarchy defined by both YANG modules is shown in | Figure 1, where brackets contain list keys and question marks | |||
Figure 1. | indicate optional data nodes. Nodes that represent configuration are | |||
labeled with "rw" while operational state data have the "ro" label. | ||||
+--rw routing | +--rw routing | |||
+--rw router [name] | +--rw router [name] | |||
+--rw name | +--rw name | |||
+--rw description? | +--rw description? | |||
+--rw enabled? | +--rw enabled? | |||
+--rw routing-protocols | +--rw interfaces | |||
| +--rw routing-protocol [name] | | +--rw interface [name] | |||
| +--rw name | | +--rw name | |||
| +--rw description? | | +--rw v6ur:ipv6-router-advertisements | |||
| +--rw type | | +--rw v6ur:send-advertisements? | |||
| +--rw connected-routing-tables | | +--rw v6ur:max-rtr-adv-interval? | |||
| | +--rw connected-routing-table [name] | | +--rw v6ur:min-rtr-adv-interval? | |||
| | +--rw name | | +--rw v6ur:managed-flag? | |||
| | +--rw import-filter? | | +--rw v6ur:other-config-flag? | |||
| | +--rw export-filter? | | +--rw v6ur:link-mtu? | |||
| +--rw v4ur:ipv4-unicast-static-routes | | +--rw v6ur:reachable-time? | |||
| +--rw v4ur:static-route [id] | | +--rw v6ur:retrans-timer? | |||
| +--rw v4ur:id | | +--rw v6ur:cur-hop-limit? | |||
| +--rw v4ur:description? | | +--rw v6ur:default-lifetime? | |||
| +--rw v4ur:destination-prefix? | | +--rw v6ur:prefix-list | |||
| +--rw v4ur:next-hop? | | +--rw v6ur:prefix [seqno] | |||
| +--rw v4ur:outgoing-interface? | | +--rw v6ur:seqno | |||
+--rw route-filters | | +--rw v6ur:prefix-spec? | |||
| +--rw route-filter [name] | | +--rw v6ur:valid-lifetime? | |||
| +--rw name | | +--rw v6ur:on-link-flag? | |||
| +--rw description? | | +--rw v6ur:preferred-lifetime? | |||
| +--rw type? | | +--rw v6ur:autonomous-flag? | |||
+--rw routing-tables | +--rw routing-protocols | |||
+--rw routing-table [name] | | +--rw routing-protocol [name] | |||
+--rw name | | +--rw name | |||
+--rw address-family? | | +--rw description? | |||
+--rw safi? | | +--rw type | |||
+--rw description? | | +--rw connected-routing-tables | |||
+--ro routes | | | +--rw routing-table [name] | |||
| +--ro route | | | +--rw name | |||
| +--ro source-protocol? | | | +--rw import-filter? | |||
| +--ro last-modified? | | | +--rw export-filter? | |||
| +--ro v4ur:destination-prefix? | | +--rw static-routes | |||
| +--ro v4ur:next-hop? | | +--rw v4ur:ipv4 | |||
| +--ro v4ur:outgoing-interface? | | | +--rw v4ur:route [seqno] | |||
+--rw recipient-routing-tables [recipient-name] | | | +--rw v4ur:seqno | |||
+--rw recipient-name | | | +--rw v4ur:description? | |||
+--rw filter? | | | +--rw v4ur:outgoing-interface? | |||
| | +--rw v4ur:dest-prefix? | ||||
| | +--rw v4ur:next-hop? | ||||
| +--rw v6ur:ipv6 | ||||
| +--rw v6ur:route [seqno] | ||||
| +--rw v6ur:seqno | ||||
| +--rw v6ur:description? | ||||
| +--rw v6ur:outgoing-interface? | ||||
| +--rw v6ur:dest-prefix? | ||||
| +--rw v6ur:next-hop? | ||||
+--rw route-filters | ||||
| +--rw route-filter [name] | ||||
| +--rw name | ||||
| +--rw description? | ||||
| +--rw type? | ||||
+--rw routing-tables | ||||
+--rw routing-table [name] | ||||
+--rw name | ||||
+--rw address-family? | ||||
+--rw safi? | ||||
+--rw description? | ||||
+--ro routes | ||||
| +--ro route | ||||
| +--ro source-protocol? | ||||
| +--ro last-modified? | ||||
| +--ro v4ur:outgoing-interface? | ||||
| +--ro v4ur:dest-prefix? | ||||
| +--ro v4ur:next-hop? | ||||
| +--ro v6ur:outgoing-interface? | ||||
| +--ro v6ur:dest-prefix? | ||||
| +--ro v6ur:next-hop? | ||||
+--rw recipient-routing-tables [recipient-name] | ||||
+--rw recipient-name | ||||
+--rw filter? | ||||
Figure 1: Data hierarchy of "ietf-routing" and "ietf-ipv4-unicast- | Figure 1: Data hierarchy of the core routing data model. | |||
routing" modules. | ||||
As can be see from Figure 1, the core routing data model introduces | As can be seen from Figure 1, the core routing data model introduces | |||
several generic components of a routing framework: routers, routing | several generic components of a routing framework: routers, routing | |||
tables containing routes, routing protocols, route filters and RPC | tables containing routes, routing protocols, route filters and RPC | |||
operations. The following subsections provide further details about | operations. The following subsections describe these components in | |||
these components. | 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 setups can be realized. | |||
+------------+ | +--------+ +------------+ | |||
| FIB | | | direct | +---+ | | | |||
| routes |--->| F |--->| FIB | | ||||
+--------+ +---+ | | | ||||
+------------+ | +------------+ | |||
^ | ^ | |||
| | | | |||
+---+ | +---+ | |||
| F | | | F | | |||
+---+ | +---+ | |||
^ | ^ | |||
+--------+ | | | | |||
| direct | +---+ +--------------+ +---+ +--------------+ | +--------------+ +---+ +--------------+ | |||
| routes |--->| F |--->| |<---| F |<---| | | +--------+ | |<---| F |<---| | | |||
+--------+ +---+ | main | +---+ | additional | | | static | +---+ | main | +---+ | additional | | |||
| routing | | routing | | | routes |--->| F |--->| routing | | routing | | |||
+--------+ +---+ | table | +---+ | table | | +--------+ +---+ | table | +---+ | table | | |||
| static |--->| F |--->| |--->| F |--->| | | | |--->| F |--->| | | |||
| 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 the routing subsystem | Figure 2: Example setup of the routing subsystem | |||
Figure 2 shows an example of a more complicated setup. Several of | The example in Figure 2 shows a typical (though certainly not the | |||
its features are worth mentioning: | only possible) organization of a more complex routing subsystem. | |||
Several of its features are worth mentioning: | ||||
o Along with the main routing table, which must always be present, | o Along with the main routing table, which must always be present, | |||
an additional routing table is configured. | an 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 exactly one routing | "direct" pseudo-protocols, is connected to exactly one routing | |||
table with which it can exchange routes (in both directions, | table with which it can exchange routes (in both directions, | |||
except for the "static" and "direct" pseudo-protocols). | except for the "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 one or both directions. | routes in either direction (or both). | |||
o The forwarding information base (FIB) is a special routing table | o The forwarding information base (FIB) is a special routing table | |||
which must always be present. Typically, the FIB receives the | which must always be present. Typically, the FIB contains the | |||
active routes from the main routing table and the operating system | "direct" routes for all configured interfaces and also receives | |||
kernel uses this information for packet forwarding. | the active routes from the main routing table. The operating | |||
system kernel uses this information for packet forwarding. | ||||
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 2. | |||
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 | |||
(virtual) router whose configuration and operation is independent of | (logical) router whose configuration and operation is independent of | |||
other router instances. Although it it not enforced by the data | other router instances. Although it it not enforced by the data | |||
model, different router instances normally do not internally share | model, different router instances normally do not internally share | |||
any data. They may, however, communicate with each other via routing | any data. They may, however, communicate with each other via routing | |||
protocols. | protocols. | |||
Logical network interfaces must be assigned to a router instance in | ||||
order to be able to participate in packet forwarding, routing | ||||
protocols and other operations of that router instance. The | ||||
assignment is accomplished by creating a corresponding entry in the | ||||
list of router interfaces ("/router/interfaces/interface"). The key | ||||
of the list entry MUST be the name of a configured logical interface. | ||||
A logical interface MUST NOT be assigned to more than one router | ||||
instance. | ||||
Apart from the key, each entry of the "/router/interfaces/interface" | ||||
list MAY contain other configuration or operational state data | ||||
related to the corresponding logical interface. | ||||
4.1.1. Configuration of IPv6 Router Interfaces | ||||
The module "ietf-ipv6-unicast-routing" augments the definition of the | ||||
data node "/router/interfaces/interface" with definitions of the | ||||
following configuration variables as required by [RFC4861], sec. | ||||
6.2.1: | ||||
o send-advertisements, | ||||
o max-rtr-adv-interval, | ||||
o min-rtr-adv-interval, | ||||
o managed-flag, | ||||
o other-config-flag, | ||||
o link-mtu, | ||||
o reachable-time, | ||||
o retrans-timer, | ||||
o cur-hop-limit, | ||||
o default-lifetime, | ||||
o prefix-list: a list of prefixes to be advertised. The following | ||||
parameters are associated with each prefix in the list: | ||||
* valid-lifetime, | ||||
* on-link-flag, | ||||
* preferred-lifetime, | ||||
* autonomous-flag. | ||||
The definitions and descriptions of the above parameters can be found | ||||
in the text of the module "ietf-ipv6-unicast-routing" (Section 8). | ||||
NOTE: The "IsRouter" flag, which is also required by [RFC4861], was | ||||
omitted. Is is expected that this variable will be implemented in | ||||
another module, either "ietf-interfaces" or "ietf-ip". | ||||
4.2. Route | 4.2. Route | |||
Routes are basic units of information in a routing system. The core | Routes are basic units of information in a routing system. The core | |||
routing data model defines only the following minimal set of route | routing data model defines only the following minimal set of route | |||
attributes: | attributes: | |||
o destination-prefix - IP prefix specifying the set of destination | o destination-prefix - IP prefix specifying the set of destination | |||
addresses for which the route may be used. This attribute is | addresses for which the route may be used. This attribute is | |||
mandatory. | mandatory. | |||
skipping to change at page 11, line 17 | skipping to change at page 12, line 29 | |||
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 - name of the routing protocol from which the | |||
route was originally obtained. | route was originally obtained. | |||
o last-modified - date and time of last modification, or | o last-modified - date and time of last modification, or | |||
installation, of the route. | installation, of the route. | |||
In the core routing data model, the contents of routing tables (list | Each routing table may only contain routes of the same address family | |||
of routes) are defined as operational state data. Routing protocol | (AFN and SAFI). | |||
operations result in route additions, removals and modifications. | ||||
This also includes manipulations via the "static" pseudo-protocol. | In the core routing data model, the "routing-table" node represents | |||
configuration while the descendant list of routes is defined as | ||||
operational state data. The contents of such lists are controlled by | ||||
routing protocol operations which may result in route additions, | ||||
removals and modifications. This also includes manipulations via the | ||||
"static" pseudo-protocol. | ||||
At least the following two routing tables MUST be configured for each | At least the following two routing tables MUST be configured for each | |||
router instance: | router instance and each supported AFN/SAFI pair: | |||
1. Forwarding information base (FIB) contains active routes that are | 1. Forwarding information base (FIB) contains active routes that are | |||
used by the operating system kernel for forwarding datagrams. | used by the operating system kernel for forwarding datagrams. | |||
2. Main routing table to which all routing protocol instances are | 2. Main routing table to which all routing protocol instances are | |||
connected by default. | connected by default, with the exception of the "direct" pseudo- | |||
protocol (Section 4.4): direct routes only appear in the FIB | ||||
table by default. | ||||
The main routing table SHOULD serve as the source of active routes | The main routing table SHOULD serve as the default source of active | |||
for the FIB. | routes for the FIB. | |||
One or more additional routing tables MAY be configured by creating | One or more additional routing tables MAY be configured by creating | |||
new entries in the "routing-table" list, either being a part of | new entries in the "routing-table" list, either being a part of | |||
factory-default configuration or configured by the client. | factory-default configuration or configured by the client. | |||
The naming scheme for routing tables, as well as restrictions on the | The naming scheme for routing tables, as well as restrictions on the | |||
number and configurability of routing tables are implementation- | number and configurability of routing tables are implementation- | |||
specific. | specific. | |||
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. To achieve this, one or more recipient routing tables may be | |||
specified in the configuration of the source routing table. In | specified in the configuration of the source routing table. In | |||
addition, a route filter may be configured for each recipient routing | addition, a route filter may be configured for each recipient routing | |||
table, which selects and/or manipulates the routes that are passed on | table, which selects and/or manipulates the routes that are passed on | |||
between the source and recipient routing table. | between the source and recipient 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. Each of them is | defining multiple routing protocol instances. Each of them is | |||
identified by a name, which MUST be unique within a router instance, | identified by a name, which MUST be unique within a router instance. | |||
and MUST be assigned a type from a selection which includes all | Each protocol MUST be assigned a type, which MUST be an identity | |||
routing protocol types supported by the server, such as static, RIP, | derived from the "rt:routing-protocol" base identity. The core | |||
OSPF or BGP. | routing data model defines two identities for the "direct" and | |||
"static" pseudo-protocols. | ||||
Each routing protocol instance is connected to exactly one routing | Each routing protocol instance is connected to exactly one routing | |||
table. By default, every routing protocol instance is connected to | table. By default, every routing protocol instance SHOULD be | |||
the main routing table, but any routing protocol instance can be | connected to the main routing table. An implementation MAY allow any | |||
configured to use a different routing table, provided such an extra | or all routing protocol instances to be configured to use a different | |||
table exists. | routing table. | |||
Routes learned from the network by a routing protocol are passed to | Routes learned from the network by a routing protocol are passed to | |||
the connected routing table and vice versa - routes appearing in a | the connected routing table and vice versa - routes appearing in a | |||
routing table are passed to all routing protocols connected to the | routing table are passed to all routing protocols connected to the | |||
table (except "direct" and "static" pseudo-protocols) and advertised | table (except "direct" and "static" pseudo-protocols) and advertised | |||
by that protocol to the network. | by that protocol to the network. | |||
Two independent route filters (see Section 4.5) may be defined for a | Two independent route filters (see Section 4.5) may be defined for a | |||
routing protocol instance to control the exchange of routes in both | routing protocol instance to control the exchange of routes in both | |||
directions between the routing protocol instance and the connected | directions between the routing protocol instance and the connected | |||
skipping to change at page 12, line 40 | skipping to change at page 14, line 8 | |||
o import filter controls which routes are passed from a routing | o import filter controls which routes are passed from a routing | |||
protocol instance to the routing table, | protocol instance to the routing table, | |||
o export filter controls which routes the routing protocol instance | o export filter controls which routes the routing protocol instance | |||
may receive from the connected routing table. | may receive from the connected routing table. | |||
Note that, for historical reasons, the terms import and export are | Note that, for historical reasons, the terms import and export are | |||
used from the viewpoint of a routing table. | used from the viewpoint of a routing table. | |||
The "ietf-routing" module defines two special routing protocols - | The core routing data model defines two special routing protocols - | |||
"direct" and "static". Both are in fact pseudo-protocols, which | "direct" and "static". Both are in fact pseudo-protocols, which | |||
means that they are confined to the local device and do not exchange | means that they are confined to the local device and do not exchange | |||
any routing information with neighboring routers. Routes from both | any routing information with neighboring routers. Routes from both | |||
"direct" and "static" protocol instances are passed to the connected | "direct" and "static" protocol instances are passed to the connected | |||
routing table (subject to route filters, if any), but an exchange in | routing table (subject to route filters, if any), but an exchange in | |||
the opposite direction is not allowed. | the opposite direction is not allowed. | |||
Every router instance MUST contain exactly one instance of the | Every router instance MUST contain exactly one instance of the | |||
"direct" pseudo-protocol. It is the source of routes to directly | "direct" pseudo-protocol. It is the source of direct routes which | |||
connected networks (so-called direct routes). Such routes are | are normally supplied by the operating system kernel, based on the | |||
supplied by the operating system kernel, based on the detected and | detected and configured network interfaces, and they SHOULD by | |||
configured network interfaces, and they usually appear in the main | default appear in the FIB routing table. However, using the | |||
routing table. However, using the framework defined in this | framework defined in this document, the target routing table for | |||
document, the target routing table for direct routes can be changed | direct routes MAY be changed by connecting the "direct" protocol | |||
by connecting the "direct" protocol instance to a non-default routing | instance to a non-default routing table. Direct routes can also be | |||
table, and the direct routes can also be filtered before they appear | filtered before they appear in the routing table. | |||
in the routing table. | ||||
The "static" routing pseudo-protocol allows for specifying routes | The "static" routing pseudo-protocol 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 implementation will have exactly one instance. | although a typical implementation will have exactly one instance per | |||
router. | ||||
4.4.1. Defining New Routing Protocols | 4.4.1. 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. In order to do so, the new module | additional routing protocol types. In order to do so, the new module | |||
has to define the protocol-specific information and fit it to the | has to define the protocol-specific information and fit it into the | |||
core routing framework in the following way: | 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 | |||
identity derived from "rt:routing-protocol". | identity derived from "rt:routing-protocol". | |||
o Additional route attributes MAY be defined. Their definitions | o Additional route attributes MAY be defined. Their definitions | |||
then have to be inserted as operational state data by augmenting | then have to be inserted as operational state data by augmenting | |||
the definition of "rt:route" inside "rt:routing-table", and | the definition of "rt:route" inside "rt:routing-table", and | |||
possibly to other places in configuration data and RPC input or | possibly to other places in the configuration, operational state | |||
output. | data and RPC input or output. | |||
o The recommended way of defining configuration data specific to a | o Per-interface configuration parameters can be added by augmenting | |||
new protocol is to augment the "routing-protocol" list entry with | the data node "rt:interface" (the list of router interfaces). | |||
a container that encapsulates the configuration hierarchy of the | ||||
new protocol. The "augment" statement SHOULD be made conditional | o Other configuration parameters can be defined by augmenting the | |||
by using a "when" substatement requiring that the new nodes be | "routing-protocol" data node. By using the "when" statement, this | |||
used only if the "type" leaf node is equal to the new protocol's | augment SHOULD be made conditional and valid only if the value of | |||
identity. | the "rt:type" child leaf equals to the new protocol's identity. | |||
It is recommended that both per-interface and other configuration | ||||
data specific to the new protocol be encapsulated in an appropriately | ||||
named container. | ||||
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 A. First, the module defines a new | RIP routing protocol in Appendix A. First, the module defines a new | |||
identity for the RIP protocol: | identity for the RIP protocol: | |||
identity rip { | identity rip { | |||
base rt:routing-protocol; | base rt:routing-protocol; | |||
description "Identity for the RIP routing protocol."; | description "Identity for the RIP routing protocol."; | |||
} | } | |||
Second, new route attributes specific for the RIP protocol ("metric" | New route attributes specific to the RIP protocol ("metric" and | |||
and "tag") are defined in a grouping and then added to route | "tag") are defined in a grouping and then added to the route | |||
definitions appearing in "routing-table" and in the output part of | definitions appearing in "routing-table" and in the output part of | |||
"get-route" RPC method: | the "get-route" RPC method: | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
"RIP-specific route content."; | "RIP-specific route content."; | |||
leaf metric { | leaf metric { | |||
type rip-metric; | type rip-metric; | |||
} | } | |||
leaf tag { | leaf tag { | |||
type uint16; | type uint16; | |||
default "0"; | default "0"; | |||
skipping to change at page 14, line 40 | skipping to change at page 16, line 40 | |||
"RIP-specific route components."; | "RIP-specific route components."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:get-route/rt:output/rt:route" { | augment "/rt:get-route/rt:output/rt:route" { | |||
description | description | |||
"Add RIP-specific route content."; | "Add RIP-specific route content."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
The "when" substatement in the first "augment" guarantees that the | Per-interface configuration data are defined by the following | |||
new route attributes are only valid when the source protocol is RIP. | "augment" statement: | |||
Finally, RIP-specific configuration data are integrated into the "rt: | augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | |||
when "../../rt:routing-protocols/rt:routing-protocol/rt:type = " | ||||
+ "'rip:rip'"; | ||||
container rip { | ||||
description | ||||
"Per-interface RIP configuration."; | ||||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
} | ||||
leaf metric { | ||||
type rip-metric; | ||||
default "1"; | ||||
} | ||||
} | ||||
} | ||||
Finally, global RIP configuration data are integrated into the "rt: | ||||
routing-protocol" node by using the following "augment" statement, | routing-protocol" node by using the following "augment" statement, | |||
which applies only to routing protocol instances whose type is "rip: | which is valid only for routing protocol instances whose type is | |||
rip": | "rip:rip": | |||
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'"; | |||
container rip-configuration { | container rip { | |||
container rip-interfaces { | ||||
list rip-interface { | ||||
key "name"; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
} | ||||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
} | ||||
leaf metric { | ||||
type rip-metric; | ||||
default "1"; | ||||
} | ||||
} | ||||
} | ||||
leaf update-interval { | leaf update-interval { | |||
type uint8 { | type uint8 { | |||
range "10..60"; | range "10..60"; | |||
} | } | |||
units "seconds"; | units "seconds"; | |||
default "30"; | default "30"; | |||
description | description | |||
"Time interval between periodic updates."; | "Time interval between periodic updates."; | |||
} | } | |||
} | } | |||
} | } | |||
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 routing table, or | exchanged between a routing protocol instance and a connected routing | |||
between a source and a recipient routing table. Route filters may | table, or between a source and a recipient routing table. Route | |||
also manipulate routes, i.e., add, delete, or modify their | filters may also manipulate routes, i.e., add, delete, or modify | |||
properties. | their properties. | |||
By itself, the route filtering framework defined in this document | By itself, the route filtering framework defined in this document | |||
allows to establish only the two extreme routing policies in which | allows to establish only the two extreme routing policies in which | |||
either all routes are allowed or all routes are rejected. It is | either all routes are allowed or all routes are rejected. It is | |||
expected that real route filtering framework(s) will be developed | expected that real route filtering frameworks will be developed | |||
separately. | separately. | |||
Each route filter is identified by a name which MUST be unique within | Each route filter is identified by a name which MUST be unique within | |||
a router instance. Its type MUST be specified by the "type" identity | a router instance. Its type MUST be specified by the "type" identity | |||
reference - this opens the space for multiple route filtering | reference - this opens the space for multiple route filtering | |||
framework implementations. The default value for route filter type | framework implementations. The default value for route filter type | |||
is the identity "deny-all-route-filter" defined in the "ietf-routing" | is the identity "deny-all-route-filter" defined in the "ietf-routing" | |||
module, which represents a route filtering policy in which all routes | module, which represents a route filtering policy in which all routes | |||
are rejected. | are rejected. | |||
4.6. RPC Operation | 4.6. RPC Operation | |||
The "ietf-routing" module defines the "get-route" RPC operation. It | The "ietf-routing" module defines the "get-route" RPC operation. It | |||
is used for querying the forwarding information base of a router | is used for querying the forwarding information base of a router | |||
instance. The first input parameter is the name of the router | instance. The first input parameter is the name of the router | |||
instance whose FIB is to be queried, and the second parameter is a | instance whose FIB is to be queried, and the second parameter is a | |||
destination address. Modules for particular address families are | destination address. Modules for particular address families are | |||
expected to augment the "destination-address" container with the | expected to augment the "destination-address" container with the | |||
"address" leaf, as it is done in the "ietf-ipv4-unicast-routing" | "address" leaf, as it is done in the "ietf-ipv4-unicast-routing" and | |||
module. | "ietf-ipv6-unicast-routing" modules. | |||
The server replies with an active route which is used for forwarding | The server replies with an active route which is used for forwarding | |||
datagrams to the destination address within the selected router | datagrams to the destination address within the selected router | |||
instance. Again, modules for particular address families are | instance. Again, modules for particular address families are | |||
expected to augment the definition of output parameters with AFN/ | expected to augment the definition of output parameters with AFN/ | |||
SAFI-specific contents. | SAFI-specific contents. | |||
5. IANA AFN and SAFI YANG Module | 5. IANA AFN and SAFI 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 "iana-afn-safi@2011-09-23.yang" | <CODE BEGINS> file "iana-afn-safi@2012-02-20.yang" | |||
module iana-afn-safi { | module iana-afn-safi { | |||
namespace "urn:ietf:params:xml:ns:yang:iana-afn-safi"; | namespace "urn:ietf:params:xml:ns:yang:iana-afn-safi"; | |||
prefix "ianaaf"; | prefix "ianaaf"; | |||
organization | organization | |||
"IANA"; | "IANA"; | |||
skipping to change at page 17, line 46 | skipping to change at page 19, line 46 | |||
"This YANG module provides two typedefs containing YANG | "This YANG module provides two typedefs containing YANG | |||
definitions for the following IANA-registered enumerations: | definitions for the following IANA-registered enumerations: | |||
- Address Family Numbers (AFN) | - Address Family Numbers (AFN) | |||
- Subsequent Address Family Identifiers (SAFI) | - Subsequent Address Family Identifiers (SAFI) | |||
The latest revision of this YANG module can be obtained from the | The latest revision of this YANG module can be obtained from the | |||
IANA web site. | IANA web site. | |||
Copyright (c) 2011 IETF Trust and the persons identified as | Copyright (c) 2012 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 2011-09-23 { | revision 2012-02-20 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
typedef address-family { | typedef address-family { | |||
type enumeration { | type enumeration { | |||
enum other { | enum other { | |||
value "0"; | value "0"; | |||
skipping to change at page 25, line 11 | skipping to change at page 27, line 11 | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
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@2011-09-23.yang" | <CODE BEGINS> file "ietf-routing@2012-02-20.yang" | |||
module ietf-routing { | module ietf-routing { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; | |||
prefix "rt"; | prefix "rt"; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix "yang"; | |||
} | } | |||
import ietf-interfaces { | ||||
prefix "if"; | ||||
} | ||||
import iana-afn-safi { | import iana-afn-safi { | |||
prefix "ianaaf"; | prefix "ianaaf"; | |||
} | } | |||
organization | organization | |||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
WG Chair: David Kessens | WG Chair: David Kessens | |||
<mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
<mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@cesnet.cz> | <mailto:lhotka@nic.cz> | |||
"; | "; | |||
description | description | |||
"This module contains YANG definitions of essential components | "This module contains YANG definitions of essential components | |||
that may be used for configuring a routing subsystem. | that may be used for configuring a routing subsystem. | |||
Copyright (c) 2011 IETF Trust and the persons identified as | Copyright (c) 2012 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 2011-09-23 { | revision 2012-02-20 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity routing-protocol { | identity routing-protocol { | |||
description | description | |||
skipping to change at page 27, line 38 | skipping to change at page 29, line 42 | |||
"Subsequent address family identifier of routes in the | "Subsequent address family identifier of routes in the | |||
routing table."; | routing table."; | |||
} | } | |||
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."; | |||
} | } | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
"Generic parameters of routes."; | "Generic parameters of routes. | |||
leaf source-protocol { | ||||
type string; | A module for an address family should define a specific | |||
version of this grouping containing 'uses rt:route-content'. | ||||
"; | ||||
leaf outgoing-interface { | ||||
type if:interface-ref; | ||||
description | description | |||
"The name of the routing protocol instance from which the | "Outgoing interface."; | |||
route comes. This routing protocol must be configured | ||||
(automatically or manually) in the device."; | ||||
} | } | |||
leaf last-modified { | ||||
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 to the routing table."; | ||||
} | ||||
} | } | |||
/* RPC Methods */ | /* RPC Methods */ | |||
rpc get-route { | rpc get-route { | |||
description | description | |||
"Query the forwarding information base of a router instance | "Query the forwarding information base of a router instance | |||
whose name is given as the first parameter 'router-name'. The | whose name is given as the first parameter 'router-name'. The | |||
second parameter 'destination-address' should be augmented in | second parameter 'destination-address' should be augmented in | |||
order to support destination addresses of all supported | order to support destination addresses of all supported | |||
skipping to change at page 28, line 43 | skipping to change at page 30, line 42 | |||
a leaf named 'address'. | a leaf named 'address'. | |||
"; | "; | |||
} | } | |||
} | } | |||
output { | output { | |||
container route { | container route { | |||
uses afn-safi; | uses afn-safi; | |||
description | description | |||
"Contents of the reply specific for each address family | "Contents of the reply specific for each address family | |||
should be defined through augmenting."; | should be defined through augmenting."; | |||
uses route-content; | ||||
} | } | |||
} | } | |||
} | } | |||
/* Data Nodes */ | /* Data Nodes */ | |||
container routing { | container routing { | |||
description | description | |||
"Routing parameters."; | "Routing parameters."; | |||
list router { | list router { | |||
key "name"; | key "name"; | |||
unique "interfaces/interface/name"; | ||||
description | description | |||
"Each list entry is a container for configuration and | "Each list entry is a container for configuration and | |||
operational state data of a single (logical) router."; | operational state data of a single (logical) router."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The unique router name."; | "The unique router name."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the router."; | "Textual description of the router."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | description | |||
"Enable or disable the router. The default value is 'true', | "Enable or disable the router. The default value is 'true', | |||
which means that the router is enabled."; | which means that the router is enabled."; | |||
} | } | |||
container interfaces { | ||||
description | ||||
"Router interface parameters."; | ||||
list interface { | ||||
key "name"; | ||||
description | ||||
"List of logical interfaces assigned to the router | ||||
instance. Any logical interface can only be assigned to | ||||
one router instance."; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
description | ||||
"A reference to the name of a configured logical | ||||
interface."; | ||||
} | ||||
} | ||||
} | ||||
container routing-protocols { | container routing-protocols { | |||
description | description | |||
"Container for the list of configured routing protocol | "Container for the list of configured routing protocol | |||
instances."; | instances."; | |||
list routing-protocol { | list routing-protocol { | |||
key "name"; | key "name"; | |||
description | description | |||
"An instance of a routing protocol."; | "An instance of a routing protocol."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
skipping to change at page 30, line 9 | skipping to change at page 32, line 25 | |||
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 { | |||
description | description | |||
"Container for connected routing tables."; | "Container for connected routing tables."; | |||
list connected-routing-table { | list routing-table { | |||
must "not(../../../../routing-tables/" | ||||
+ "routing-table[current()/" | ||||
+ "preceding-sibling::routing-table/name]/" | ||||
+ "address-family=../../../../routing-tables/" | ||||
+ "routing-table[current()/name]/" | ||||
+ "address-family and ../../../../routing-tables/" | ||||
+ "routing-table[current()/" | ||||
+ "preceding-sibling::routing-table/name]/safi=../" | ||||
+ "../../../routing-tables/routing-table[current()/" | ||||
+ "name]/safi)" { | ||||
error-message | ||||
"Each routing protocol may have no more than one | ||||
connected routing table for each AFN and SAFI."; | ||||
description | ||||
"For each AFN/SAFI pair there may be at most 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. No more than one routing | instance is connected. | |||
table may be configured for each AFN/SAFI pair. | ||||
Implementation may provide default routing tables | Implementation may provide default routing tables | |||
for some AFN/SAFI pairs, which are used if the | for some AFN/SAFI pairs, which are used if the | |||
corresponding entry is not configured. | corresponding entry is not configured. | |||
"; | "; | |||
leaf name { | leaf name { | |||
type leafref { | type leafref { | |||
path "../../../../../routing-tables/routing-table/" | path "../../../../../routing-tables/routing-table/" | |||
+ "name"; | + "name"; | |||
} | } | |||
description | description | |||
"This must be the name of an existing routing | "Reference to an existing routing table."; | |||
table."; | ||||
} | } | |||
leaf import-filter { | leaf import-filter { | |||
type leafref { | type leafref { | |||
path "../../../../../route-filters/route-filter/" | path "../../../../../route-filters/route-filter/" | |||
+ "name"; | + "name"; | |||
} | } | |||
description | description | |||
"Reference to a route filter that is used for | "Reference to a route filter that is used for | |||
filtering routes passed from this routing protocol | filtering routes passed from this routing protocol | |||
instance to the routing table specified by the | instance to the routing table specified by the | |||
skipping to change at page 31, line 12 | skipping to change at page 33, line 44 | |||
specified by the 'name' sibling node to this | specified by the 'name' sibling node to this | |||
routing protocol instance. If this leaf is not | routing protocol instance. If this leaf is not | |||
present, the behavior is protocol-specific - | present, the behavior is protocol-specific - | |||
typically it means that all routes are accepted, | typically it means that all routes are accepted, | |||
except for the 'direct' and 'static' | except for the 'direct' and 'static' | |||
pseudo-protocols which accept no routes from any | pseudo-protocols which accept no routes from any | |||
routing table."; | routing table."; | |||
} | } | |||
} | } | |||
} | } | |||
container static-routes { | ||||
must "../type='static'" { | ||||
error-message | ||||
"Static routes may be configured only for 'static' | ||||
routing protocol."; | ||||
description | ||||
"This container is only valid for the 'static' | ||||
routing protocol."; | ||||
} | ||||
description | ||||
"Configuration of 'static' pseudo-protocol."; | ||||
} | ||||
} | } | |||
} | } | |||
container route-filters { | container route-filters { | |||
description | description | |||
"Container for configured route filters."; | "Container for configured route filters."; | |||
list route-filter { | list route-filter { | |||
key "name"; | key "name"; | |||
description | description | |||
"Route filters are used for filtering and/or manipulating | "Route filters are used for filtering and/or manipulating | |||
routes that are passed between a routing protocol and a | routes that are passed between a routing protocol and a | |||
skipping to change at page 32, line 27 | skipping to change at page 35, line 23 | |||
description | description | |||
"Textual description of the routing table."; | "Textual description of the routing table."; | |||
} | } | |||
container routes { | container routes { | |||
config "false"; | config "false"; | |||
description | description | |||
"Current contents of the routing table (operational | "Current contents of the routing table (operational | |||
state data)."; | state data)."; | |||
list route { | list route { | |||
description | description | |||
"A routing table entry. It is expected that this data | "A routing table entry. This data node must augmented | |||
node will be augmented with information specific for | with information specific for routes of each address | |||
routes of each address family."; | family."; | |||
uses route-content; | leaf source-protocol { | |||
type leafref { | ||||
path "../../../../../routing-protocols/" | ||||
+ "routing-protocol/name"; | ||||
} | ||||
description | ||||
"The name of the routing protocol instance from | ||||
which the route comes. This routing protocol must | ||||
be configured (automatically or manually) in the | ||||
device."; | ||||
} | ||||
leaf last-modified { | ||||
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 to the routing | ||||
table."; | ||||
} | ||||
} | } | |||
} | } | |||
list recipient-routing-tables { | list recipient-routing-tables { | |||
key "recipient-name"; | key "recipient-name"; | |||
description | description | |||
"A list of routing tables that receive routes from this | "A list of routing tables that receive routes from this | |||
routing table."; | routing table."; | |||
leaf recipient-name { | leaf recipient-name { | |||
type leafref { | type leafref { | |||
path "../../../routing-table/name"; | path "../../../routing-table/name"; | |||
skipping to change at page 34, line 11 | skipping to change at page 37, line 11 | |||
} | } | |||
<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@2011-09-23.yang" | <CODE BEGINS> file "ietf-ipv4-unicast-routing@2012-02-20.yang" | |||
module ietf-ipv4-unicast-routing { | module ietf-ipv4-unicast-routing { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; | |||
prefix "v4ur"; | prefix "v4ur"; | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix "rt"; | |||
} | } | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix "inet"; | |||
} | } | |||
import ietf-interfaces { | ||||
prefix "if"; | ||||
} | ||||
organization | organization | |||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <http://tools.ietf.org/wg/netmod/> | |||
WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
WG Chair: David Kessens | WG Chair: David Kessens | |||
<mailto:david.kessens@nsn.com> | <mailto:david.kessens@nsn.com> | |||
WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
<mailto:j.schoenwaelder@jacobs-university.de> | <mailto:j.schoenwaelder@jacobs-university.de> | |||
Editor: Ladislav Lhotka | Editor: Ladislav Lhotka | |||
<mailto:lhotka@cesnet.cz> | <mailto:lhotka@nic.cz> | |||
"; | "; | |||
description | description | |||
"This module augments the 'ietf-routing' module with YANG | "This module augments the 'ietf-routing' module with YANG | |||
definitions for basic configuration of IPv4 unicast routing. | definitions for basic configuration of IPv4 unicast routing. | |||
Copyright (c) 2011 IETF Trust and the persons identified as | Copyright (c) 2012 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 2011-09-23 { | revision 2012-02-20 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | "RFC XXXX: A YANG Data Model for Routing Configuration"; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping route-content { | grouping route-content { | |||
description | description | |||
"Specific parameters of IPv4 unicast routes."; | "Parameters of IPv4 unicast routes."; | |||
leaf destination-prefix { | uses rt:route-content; | |||
leaf dest-prefix { | ||||
type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
description | description | |||
"IPv4 destination prefix."; | "IPv4 destination prefix."; | |||
} | } | |||
leaf next-hop { | leaf next-hop { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"IPv4 address of the next hop."; | "IPv4 address of the next hop."; | |||
} | } | |||
leaf outgoing-interface { | ||||
type if:interface-ref; | ||||
description | ||||
"Outgoing interface."; | ||||
} | ||||
} | } | |||
/* RPC Methods */ | /* RPC Methods */ | |||
augment "/rt:get-route/rt:input/rt:destination-address" { | augment "/rt:get-route/rt:input/rt:destination-address" { | |||
when "address-family='ipV4' and safi='nlri-unicast'" { | when "address-family='ipV4' and safi='nlri-unicast'" { | |||
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:get-route' operation."; | parameter of the 'rt:get-route' operation."; | |||
leaf address { | leaf address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"IPv4 destination address."; | "IPv4 destination address."; | |||
} | } | |||
} | } | |||
augment "/rt:get-route/rt:output/rt:route" { | augment "/rt:get-route/rt:output/rt:route" { | |||
when "address-family='ipV4' and safi='nlri-unicast'" { | when "address-family='ipV4' and 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:get-route' operation."; | "Contents of the reply to 'rt:get-route' operation."; | |||
skipping to change at page 36, line 29 | skipping to change at page 39, line 21 | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"Contents of the reply to 'rt:get-route' operation."; | "Contents of the reply to 'rt:get-route' operation."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
/* Data nodes */ | /* Data nodes */ | |||
augment "/rt:routing/rt:router/rt:routing-protocols/" | augment "/rt:routing/rt:router/rt:routing-protocols/" | |||
+ "rt:routing-protocol" { | + "rt:routing-protocol/rt:static-routes" { | |||
when "rt:type='rt:static'" { | ||||
description | ||||
"The augment is only valid for the 'static' | ||||
pseudo-protocol."; | ||||
} | ||||
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-unicast-static-routes { | 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."; | |||
list static-route { | list route { | |||
key "id"; | key "seqno"; | |||
ordered-by "user"; | ordered-by "user"; | |||
description | description | |||
"A user-ordered list of static routes."; | "A user-ordered list of static routes."; | |||
leaf id { | leaf seqno { | |||
type string; | type uint16; | |||
description | description | |||
"An identification string for the route."; | "Sequential number of the route."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of the route."; | "Textual description of the route."; | |||
} | } | |||
uses route-content; | uses route-content; | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at page 38, line 5 | skipping to change at page 41, line 5 | |||
"This augment is valid only for IPv4 unicast."; | "This augment is valid only for IPv4 unicast."; | |||
} | } | |||
description | description | |||
"This augment defines the content of IPv4 unicast routes."; | "This augment defines the content of IPv4 unicast routes."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8. IANA Considerations | 8. IPv6 Unicast Routing YANG Module | |||
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | ||||
actual RFC number and all occurrences of the revision date below with | ||||
the date of RFC publication (and remove this note). | ||||
<CODE BEGINS> file "ietf-ipv6-unicast-routing@2012-02-20.yang" | ||||
module ietf-ipv6-unicast-routing { | ||||
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; | ||||
prefix "v6ur"; | ||||
import ietf-routing { | ||||
prefix "rt"; | ||||
} | ||||
import ietf-inet-types { | ||||
prefix "inet"; | ||||
} | ||||
import ietf-interfaces { | ||||
prefix "if"; | ||||
} | ||||
import ietf-ip { | ||||
prefix "ip"; | ||||
} | ||||
organization | ||||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | ||||
contact | ||||
"WG Web: <http://tools.ietf.org/wg/netmod/> | ||||
WG List: <mailto:netmod@ietf.org> | ||||
WG Chair: David Kessens | ||||
<mailto:david.kessens@nsn.com> | ||||
WG Chair: Juergen Schoenwaelder | ||||
<mailto:j.schoenwaelder@jacobs-university.de> | ||||
Editor: Ladislav Lhotka | ||||
<mailto:lhotka@nic.cz> | ||||
"; | ||||
description | ||||
"This module augments the 'ietf-routing' module with YANG | ||||
definitions for basic configuration of IPv6 unicast routing. | ||||
Copyright (c) 2012 IETF Trust and the persons identified as | ||||
authors of the code. All rights reserved. | ||||
Redistribution and use in source and binary forms, with or | ||||
without modification, is permitted pursuant to, and subject to | ||||
the license terms contained in, the Simplified BSD License set | ||||
forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see the | ||||
RFC itself for full legal notices. | ||||
"; | ||||
revision 2012-02-20 { | ||||
description | ||||
"Initial revision."; | ||||
reference | ||||
"RFC XXXX: A YANG Data Model for Routing Configuration"; | ||||
} | ||||
/* Groupings */ | ||||
grouping route-content { | ||||
description | ||||
"Specific parameters of IPv6 unicast routes."; | ||||
uses rt:route-content; | ||||
leaf dest-prefix { | ||||
type inet:ipv6-prefix; | ||||
description | ||||
"IPv6 destination prefix."; | ||||
} | ||||
leaf next-hop { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 address of the next hop."; | ||||
} | ||||
} | ||||
/* RPC Methods */ | ||||
augment "/rt:get-route/rt:input/rt:destination-address" { | ||||
when "address-family='ipV6' and safi='nlri-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"The 'address' leaf augments the 'rt:destination-address' | ||||
parameter of the 'rt:get-route' operation."; | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"IPv6 destination address."; | ||||
} | ||||
} | ||||
augment "/rt:get-route/rt:output/rt:route" { | ||||
when "address-family='ipV6' and safi='nlri-unicast'" { | ||||
description | ||||
"This augment is valid only for IPv6 unicast."; | ||||
} | ||||
description | ||||
"Contents of the reply to 'rt:get-route' operation."; | ||||
uses route-content; | ||||
} | ||||
/* Data nodes */ | ||||
augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | ||||
when "/if:interfaces/if:interface[name=current()/name] " | ||||
+ "/ip:ipv6/ip:enabled='true'" { | ||||
description | ||||
"This augment is only valid for router interfaces with | ||||
enabled IPv6. | ||||
NOTE: Parameter 'is-router' is not included, it is expected | ||||
that it will be implemented by the 'ietf-ip' module. | ||||
"; | ||||
} | ||||
description | ||||
"IPv6-specific parameters of router interfaces."; | ||||
container ipv6-router-advertisements { | ||||
description | ||||
"Parameters of IPv6 Router Advertisements."; | ||||
reference | ||||
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6). | ||||
RFC 4862: IPv6 Stateless Address Autoconfiguration. | ||||
"; | ||||
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"; | ||||
description | ||||
"The minimum time allowed between sending unsolicited | ||||
multicast Router Advertisements from the interface. | ||||
Must be no greater than 0.75 * max-rtr-adv-interval. | ||||
Its default value is dynamic: | ||||
- if max-rtr-adv-interval >= 9 seconds, the default value | ||||
is 0.33 * max-rtr-adv-interval; | ||||
- otherwise it is max-rtr-adv-interval. | ||||
"; | ||||
} | ||||
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. | ||||
The value should be set to the current diameter of the | ||||
Internet. The value zero means unspecified (by this | ||||
router). | ||||
The default should be set to the value specified in IANA | ||||
Assigned Numbers that was in effect at the time of | ||||
implementation. | ||||
"; | ||||
reference | ||||
"IANA: IP Parameters, | ||||
http://www.iana.org/assignments/ip-parameters"; | ||||
} | ||||
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. | ||||
MUST be either zero or between MaxRtrAdvInterval and 9000 | ||||
seconds. A value of zero indicates that the router is not | ||||
to be used as a default router. These limits may be | ||||
overridden by specific documents that describe how IPv6 | ||||
operates over different link layers. | ||||
The default value is dynamic and should be set to 3 * | ||||
max-rtr-adv-interval. | ||||
"; | ||||
} | ||||
container prefix-list { | ||||
description | ||||
"A list of prefixes to be placed in Prefix Information | ||||
options in Router Advertisement messages sent from the | ||||
interface. | ||||
Default: all prefixes that the router advertises via | ||||
routing protocols as being on-link for the interface from | ||||
which the advertisement is sent. The link-local prefix | ||||
should not be included in the list of advertised prefixes. | ||||
"; | ||||
list prefix { | ||||
key "seqno"; | ||||
unique "prefix-spec"; | ||||
description | ||||
"Advertised prefix entry."; | ||||
leaf seqno { | ||||
type uint8; | ||||
description | ||||
"Sequential number of the entry."; | ||||
} | ||||
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, in seconds. The designated | ||||
value of all 1's (0xffffffff) represents infinity. | ||||
Implementations may allow valid-lifetime to be | ||||
specified in two ways: | ||||
1. a time that decrements in real time, that is, one | ||||
that will result in a Lifetime of zero at the | ||||
specified time in the future, | ||||
2. a fixed time that stays the same in consecutive | ||||
advertisements. | ||||
"; | ||||
} | ||||
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."; | ||||
} | ||||
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. | ||||
Implementations MAY allow AdvPreferredLifetime to be | ||||
specified in two ways: | ||||
1. a time that decrements in real time, that is, one | ||||
that will result in a Lifetime of zero at a | ||||
specified time in the future, | ||||
2. a fixed time that stays the same in consecutive | ||||
advertisements. | ||||
"; | ||||
} | ||||
leaf autonomous-flag { | ||||
type boolean; | ||||
default "true"; | ||||
description | ||||
"The value to be placed in the Autonomous Flag field in | ||||
the Prefix Information option."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||
augment "/rt:routing/rt:router/rt:routing-protocols/" | ||||
+ "rt:routing-protocol/rt:static-routes" { | ||||
description | ||||
"This augment defines the configuration of the 'static' | ||||
pseudo-protocol with data specific for IPv6 unicast."; | ||||
container ipv6 { | ||||
description | ||||
"Configuration of a 'static' pseudo-protocol instance | ||||
consists of a list of routes."; | ||||
list route { | ||||
key "seqno"; | ||||
ordered-by "user"; | ||||
description | ||||
"A user-ordered list of static routes."; | ||||
leaf seqno { | ||||
type uint16; | ||||
description | ||||
"Sequential number of the route."; | ||||
} | ||||
leaf description { | ||||
type string; | ||||
description | ||||
"Textual description of the route."; | ||||
} | ||||
uses route-content; | ||||
} | ||||
} | ||||
} | ||||
augment "/rt:routing/rt:router/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> | ||||
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 | |||
registry [RFC3688]: | registry [RFC3688]: | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
URI: urn:ietf:params:xml:ns:yang:ietf-routing | URI: urn:ietf:params:xml:ns:yang:ietf-routing | |||
skipping to change at page 38, line 30 | skipping to change at page 49, line 30 | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
URI: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | URI: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
URI: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing | ||||
Registrant Contact: The IESG. | ||||
XML: N/A, the requested URI is an XML namespace. | ||||
---------------------------------------------------------- | ||||
---------------------------------------------------------- | ||||
URI: urn:ietf:params:xml:ns:yang:iana-afn-safi | URI: urn:ietf:params:xml:ns:yang:iana-afn-safi | |||
Registrant Contact: IANA. | Registrant Contact: IANA. | |||
XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
---------------------------------------------------------- | ---------------------------------------------------------- | |||
This document registers the following YANG modules in the YANG Module | This document registers the following YANG modules in the YANG Module | |||
Names registry [RFC6020]: | Names registry [RFC6020]: | |||
skipping to change at page 39, line 20 | skipping to change at page 50, line 20 | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
name: ietf-ipv4-unicast-routing | name: ietf-ipv4-unicast-routing | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing | |||
prefix: v4ur | prefix: v4ur | |||
reference: RFC XXXX | reference: RFC XXXX | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
name: ietf-ipv6-unicast-routing | ||||
namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing | ||||
prefix: v6ur | ||||
reference: RFC XXXX | ||||
------------------------------------------------------------------- | ||||
------------------------------------------------------------------- | ||||
name: iana-afn-safi | name: iana-afn-safi | |||
namespace: urn:ietf:params:xml:ns:yang:iana-afn-safi | namespace: urn:ietf:params:xml:ns:yang:iana-afn-safi | |||
prefix: ianaaf | prefix: ianaaf | |||
reference: RFC XXXX | reference: RFC XXXX | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
9. Security Considerations | 10. Security Considerations | |||
The YANG modules defined in this document are designed to be accessed | The YANG modules defined in this document are designed to be accessed | |||
via the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the | via the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the | |||
secure transport layer and the mandatory-to-implement secure | secure transport layer and the mandatory-to-implement secure | |||
transport is SSH [RFC6242]. | transport is SSH [RFC6242]. | |||
A number of data nodes defined in the YANG modules are writable/ | A number of data nodes defined in the YANG modules are writable/ | |||
creatable/deletable (i.e., "config true" in YANG terms, which is the | creatable/deletable (i.e., "config true" in YANG terms, which is the | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations to these data nodes, | in some network environments. Write operations to these data nodes, | |||
such as "edit-config", can have negative effects on the network if | such as "edit-config", can have negative effects on the network if | |||
the operations are not properly protected. | the 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: | |||
/rt:routing/rt:router/rt:interfaces/rt:interface This list assigns a | ||||
logical interface to a router instance and may also specify | ||||
interface parameters related to routing. | ||||
/rt:routing/rt:router/rt:routing-protocols/rt:routing-protocol This | /rt:routing/rt:router/rt:routing-protocols/rt:routing-protocol This | |||
list specifies the routing protocols configured on a device. | list specifies the routing protocols configured on a device. | |||
/rt:routing/rt:router/rt:route-filters/rt:route-filter This list | /rt:routing/rt:router/rt:route-filters/rt:route-filter This list | |||
specifies the configured route filters which represent the | specifies the configured route filters which represent the | |||
administrative policies for redistributing and modifying routing | administrative policies for redistributing and modifying routing | |||
information. | information. | |||
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. | |||
10. Acknowledgments | 11. Acknowledgments | |||
The author wishes to thank Martin Bjorklund, Joel Halpern, Tom Petch | The author wishes to thank Martin Bjorklund, Joel Halpern, Tom Petch | |||
and Juergen Schoenwaelder for their helpful comments and suggestions. | and Juergen Schoenwaelder for their helpful comments and suggestions. | |||
11. References | 12. References | |||
11.1. Normative References | 12.1. Normative References | |||
[IANA-AFN] | [IANA-AFN] | |||
IANA, "Address Family Numbers.", January 2011. | IANA, "Address Family Numbers.", January 2011. | |||
[IANA-SAFI] | [IANA-SAFI] | |||
IANA, "Subsequent Address Family Identifiers (SAFI) | IANA, "Subsequent Address Family Identifiers (SAFI) | |||
Parameters.", March 2011. | Parameters.", March 2011. | |||
[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, | ||||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | ||||
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. | |||
[RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
RFC 6021, September 2010. | RFC 6021, September 2010. | |||
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
Bierman, "NETCONF Configuration Protocol", RFC 6241, | Bierman, "NETCONF Configuration Protocol", RFC 6241, | |||
June 2011. | June 2011. | |||
[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-02 (work | Configuration", draft-ietf-netmod-interfaces-cfg-03 (work | |||
in progress), September 2011. | in progress), February 2012. | |||
[YANG-IP] Bjorklund, M., "A YANG Data Model for IP Configuration", | [YANG-IP] Bjorklund, M., "A YANG Data Model for IP Configuration", | |||
draft-ietf-netmod-ip-cfg-00 (work in progress), | draft-ietf-netmod-ip-cfg-02 (work in progress), | |||
September 2011. | February 2012. | |||
11.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. Example - Adding a New Routing Protocol | Appendix A. 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. Appendix A.1 contains | extended to support a new routing protocol. The YANG module | |||
the YANG module which is used for this purpose. It is intended only | "example-rip" shown below is intended only as an illustration rather | |||
as an illustration and not as a real definition of a data model for | than a real definition of a data model for the RIP routing protocol. | |||
the RIP routing protocol. Also, for the sake of brevity, we do not | For the sake of brevity, we do not follow all the guidelines | |||
follow all the guidelines specified in [RFC6087]. | specified in [RFC6087]. See also Section 4.4.1. | |||
Appendix A.2 then contains a complete instance XML document - a reply | ||||
to the NETCONF <get> message from a server that uses the RIP protocol | ||||
as well as static routing. | ||||
A.1. Example YANG Module for Routing Information | ||||
Protocol | ||||
<CODE BEGINS> file "example-rip@2011-09-23.yang" | <CODE BEGINS> file "example-rip@2012-02-20.yang" | |||
module example-rip { | module example-rip { | |||
namespace "http://example.com/rip"; | namespace "http://example.com/rip"; | |||
prefix "rip"; | prefix "rip"; | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix "rt"; | |||
} | } | |||
import ietf-interfaces { | ||||
prefix "if"; | ||||
} | ||||
identity rip { | identity rip { | |||
base rt:routing-protocol; | base rt:routing-protocol; | |||
description | description | |||
"Identity for the RIP routing protocol."; | "Identity for the RIP routing protocol."; | |||
} | } | |||
typedef rip-metric { | typedef rip-metric { | |||
type uint8 { | type uint8 { | |||
range "0..16"; | range "0..16"; | |||
} | } | |||
skipping to change at page 44, line 14 | skipping to change at page 55, line 4 | |||
type rip-metric; | type rip-metric; | |||
} | } | |||
leaf tag { | leaf tag { | |||
type uint16; | type uint16; | |||
default "0"; | default "0"; | |||
description | description | |||
"This leaf may be used to carry additional info, e.g. AS | "This leaf may be used to carry additional info, e.g. AS | |||
number."; | number."; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | ||||
+ "rt:routes/rt:route" { | ||||
when "../../../../rt:routing-protocols/" | ||||
+ "rt:routing-protocol[rt:name=current()/rt:source-protocol]/" | ||||
+ "rt:type='rip:rip'" { | ||||
description | ||||
"This augment is only valid if the source protocol from which | ||||
the route originated is RIP."; | ||||
} | ||||
description | ||||
"RIP-specific route components."; | ||||
uses route-content; | ||||
} | ||||
augment "/rt:get-route/rt:output/rt:route" { | augment "/rt:get-route/rt:output/rt:route" { | |||
description | description | |||
"Add RIP-specific route content."; | "Add RIP-specific route content."; | |||
uses route-content; | uses route-content; | |||
} | } | |||
augment "/rt:routing/rt:router/rt:interfaces/rt:interface" { | ||||
when "../../rt:routing-protocols/rt:routing-protocol/rt:type = " | ||||
+ "'rip:rip'"; | ||||
container rip { | ||||
description | ||||
"Per-interface RIP configuration."; | ||||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
} | ||||
leaf metric { | ||||
type rip-metric; | ||||
default "1"; | ||||
} | ||||
} | ||||
} | ||||
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'"; | |||
container rip-configuration { | container rip { | |||
container rip-interfaces { | ||||
list rip-interface { | ||||
key "name"; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
} | ||||
leaf enabled { | ||||
type boolean; | ||||
default "true"; | ||||
} | ||||
leaf metric { | ||||
type rip-metric; | ||||
default "1"; | ||||
} | ||||
} | ||||
} | ||||
leaf update-interval { | leaf update-interval { | |||
type uint8 { | type uint8 { | |||
range "10..60"; | range "10..60"; | |||
} | } | |||
units "seconds"; | units "seconds"; | |||
default "30"; | default "30"; | |||
description | description | |||
"Time interval between periodic updates."; | "Time interval between periodic updates."; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/" | ||||
+ "rt:routes/rt:route" { | ||||
when "../../../../rt:routing-protocols/" | ||||
+ "rt:routing-protocol[rt:name=current()/rt:source-protocol]/" | ||||
+ "rt:type='rip:rip'" { | ||||
description | ||||
"This augment is only valid if the source protocol from which | ||||
the route originated is RIP."; | ||||
} | ||||
description | ||||
"RIP-specific route components."; | ||||
uses route-content; | ||||
} | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
A.2. Sample Reply to the NETCONF <get> Message | Appendix B. Example: Reply to the NETCONF <get> Message | |||
This section contains a sample reply to the NETCONF <get> message, | This section contains a sample reply to the NETCONF <get> message, | |||
which could be sent by a server supporting (and advertising in the | which could be sent by a server supporting (i.e., advertising them in | |||
NETCONF <hello> message) the following YANG modules: | the NETCONF <hello> message) the following YANG modules: | |||
o ietf-interfaces [YANG-IF], | o ietf-interfaces [YANG-IF], | |||
o ex-ethernet [YANG-IF], | o ex-ethernet [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 example-rip (Appendix A.1). | o ietf-ipv6-unicast-routing (Section 8). | |||
We assume a simple network setup as shown in Figure 3: routers "ISP" | We assume a simple network setup as shown in Figure 3: router "A" | |||
and "A" use RIP for exchanging routing information whereas static | uses static default routes with the "ISP" router as the next hop. | |||
routing is used in the private network. In order to avoid the | IPv6 router advertisements are configured only on the "eth1" | |||
redistribution of the routes to the private subnetworks | interface and disabled on the upstream "eth0" interface. | |||
192.168.1.0/24 and 192.168.2.0/24 in RIP, an export filter is used in | ||||
the RIP protocol configuration preventing the routes from the main | ||||
routing table from appearing in RIP updates. | ||||
+-----------------+ | +-----------------+ | |||
| | | | | | |||
| Router ISP | | | Router ISP | | |||
| | | | | | |||
+--------+--------+ | +--------+--------+ | |||
|2001:db8:0:1::2 | ||||
|192.0.2.2 | |192.0.2.2 | |||
| | | | |||
| | | | |||
|2001:db8:0:1::1 | ||||
eth0|192.0.2.1 | eth0|192.0.2.1 | |||
+--------+--------+ | +--------+--------+ | |||
| | | | | | |||
| Router A | | | Router A | | |||
| | | | | | |||
+--------+--------+ | +--------+--------+ | |||
eth1|192.168.1.1 | eth1|198.51.100.1 | |||
| | |2001:db8:0:2::1 | |||
| | ||||
|192.168.1.254 | ||||
+--------+--------+ | ||||
| | | ||||
| Router B | | ||||
| | | ||||
+--------+--------+ | ||||
|192.168.2.1 | ||||
| | | | |||
Figure 3: Example network configuration | Figure 3: Example network configuration | |||
Router "A" then could send the following XML document as its reply to | Router "A" then could send the following XML document as its reply to | |||
the NETCONF <get> message: | the NETCONF <get> message: | |||
<?xml version="1.0"?> | <?xml version="1.0"?> | |||
<rpc-reply | ||||
<nc:rpc-reply | ||||
message-id="101" | message-id="101" | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns:v4ur="urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing" | |||
xmlns:v6ur="urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing" | ||||
xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | |||
xmlns:eth="http://example.com/ethernet" | xmlns:eth="http://example.com/ethernet" | |||
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"> | |||
xmlns:rip="http://example.com/rip"> | <data> | |||
<nc: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>05:00.0</if:location> | <if:location>05:00.0</if:location> | |||
<ip:ipv4> | <ip:ipv4> | |||
<ip:address> | <ip:address> | |||
<ip:ip>192.0.2.1</ip:ip> | <ip:ip>192.0.2.1</ip:ip> | |||
<ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
</ip:address> | </ip:address> | |||
</ip:ipv4> | </ip:ipv4> | |||
<ip:ipv6> | ||||
<ip:address> | ||||
<ip:ip>2001:0db8:0:1::1</ip:ip> | ||||
<ip:prefix-length>64</ip:prefix-length> | ||||
</ip:address> | ||||
<ip:autoconf> | ||||
<ip:create-global-addresses>false</ip:create-global-addresses> | ||||
</ip:autoconf> | ||||
</ip:ipv6> | ||||
</if:interface> | </if:interface> | |||
<if:interface> | <if:interface> | |||
<if:name>eth1</if:name> | <if:name>eth1</if:name> | |||
<if:type>ethernetCsmacd</if:type> | <if:type>ethernetCsmacd</if:type> | |||
<if:location>05:00.1</if:location> | <if:location>05:00.1</if:location> | |||
<ip:ipv4> | <ip:ipv4> | |||
<ip:address> | <ip:address> | |||
<ip:ip>192.168.1.1</ip:ip> | <ip:ip>198.51.100.1</ip:ip> | |||
<ip:prefix-length>24</ip:prefix-length> | <ip:prefix-length>24</ip:prefix-length> | |||
</ip:address> | </ip:address> | |||
</ip:ipv4> | </ip:ipv4> | |||
<ip:ipv6> | ||||
<ip:address> | ||||
<ip:ip>2001:0db8:0:2::1</ip:ip> | ||||
<ip:prefix-length>64</ip:prefix-length> | ||||
</ip:address> | ||||
<ip:autoconf> | ||||
<ip:create-global-addresses>false</ip:create-global-addresses> | ||||
</ip:autoconf> | ||||
</ip:ipv6> | ||||
</if:interface> | </if:interface> | |||
</if:interfaces> | </if:interfaces> | |||
<rt:routing> | <rt:routing> | |||
<rt:router> | <rt:router> | |||
<rt:name>inet-0</rt:name> | <rt:name>rtr0</rt:name> | |||
<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:seqno>1</v6ur:seqno> | ||||
<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-protocols> | |||
<rt:routing-protocol> | <rt:routing-protocol> | |||
<rt:name>direct</rt:name> | <rt:name>direct</rt:name> | |||
<rt:type>rt:direct</rt:type> | <rt:type>rt:direct</rt:type> | |||
</rt:routing-protocol> | </rt:routing-protocol> | |||
<rt:routing-protocol> | <rt:routing-protocol> | |||
<rt:name>st0</rt:name> | <rt:name>st0</rt:name> | |||
<rt:description> | <rt:description> | |||
Static routing is used for the internal network. | Static routing is used for the internal network. | |||
</rt:description> | </rt:description> | |||
<rt:type>rt:static</rt:type> | <rt:type>rt:static</rt:type> | |||
<ipv4-unicast-static-routes> | <rt:static-routes> | |||
<static-route> | <v4ur:ipv4> | |||
<id>id-6378</id> | <v4ur:route> | |||
<destination-prefix>192.168.2.0/24</destination-prefix> | <v4ur:seqno>1</v4ur:seqno> | |||
<next-hop>192.168.1.254</next-hop> | <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | |||
</static-route> | <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | |||
</ipv4-unicast-static-routes> | </v4ur:route> | |||
</rt:routing-protocol> | </v4ur:ipv4> | |||
<rt:routing-protocol> | <v6ur:ipv6> | |||
<rt:name>rip0</rt:name> | <v6ur:route> | |||
<rt:description> | <v6ur:seqno>1</v6ur:seqno> | |||
RIP is used on the uplink. Static routes to the | <v6ur:dest-prefix>::/0</v6ur:dest-prefix> | |||
internal networks are not advertized in RIP. | <v6ur:next-hop>2001:db8:0:1::2</v6ur:next-hop> | |||
</rt:description> | </v6ur:route> | |||
<rt:type>rip:rip</rt:type> | </v6ur:ipv6> | |||
</rt:static-routes> | ||||
<rt:connected-routing-tables> | <rt:connected-routing-tables> | |||
<rt:connected-routing-table> | <rt:routing-table> | |||
<rt:name>ipv4-unicast-main</rt:name> | <rt:name>ipv4-unicast-main</rt:name> | |||
<rt:export-filter>deny-all</rt:export-filter> | </rt:routing-table> | |||
</rt:connected-routing-table> | <rt:routing-table> | |||
<rt:name>ipv6-unicast-main</rt:name> | ||||
</rt:routing-table> | ||||
</rt:connected-routing-tables> | </rt:connected-routing-tables> | |||
<rip:rip-configuration> | ||||
<rip:rip-interfaces> | ||||
<rip:rip-interface> | ||||
<rip:name>eth0</rip:name> | ||||
</rip:rip-interface> | ||||
</rip:rip-interfaces> | ||||
</rip:rip-configuration> | ||||
</rt:routing-protocol> | </rt:routing-protocol> | |||
</rt:routing-protocols> | </rt:routing-protocols> | |||
<rt:route-filters> | ||||
<rt:route-filter> | ||||
<rt:name>deny-all</rt:name> | ||||
</rt:route-filter> | ||||
</rt:route-filters> | ||||
<rt:routing-tables> | <rt:routing-tables> | |||
<rt:routing-table> | <rt:routing-table> | |||
<rt:name>ipv4-unicast-fib</rt:name> | <rt:name>ipv4-unicast-fib</rt:name> | |||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.0.2.1/24</destination-prefix> | <v4ur:dest-prefix>192.0.2.1/24</v4ur:dest-prefix> | |||
<v4ur:outgoing-interface>eth0</v4ur:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | <rt:source-protocol>direct</rt:source-protocol> | |||
<outgoing-interface>eth0</outgoing-interface> | <rt:last-modified>2012-02-20T17:11:27+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:27+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.168.1.0/24</destination-prefix> | <v4ur:dest-prefix>198.51.100.0/24</v4ur:dest-prefix> | |||
<v4ur:outgoing-interface>eth1</v4ur:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | <rt:source-protocol>direct</rt:source-protocol> | |||
<outgoing-interface>eth1</outgoing-interface> | <rt:last-modified>2012-02-20T17:11:27+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:27+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.168.2.0/24</destination-prefix> | <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | |||
<v4ur:next-hop>192.0.2.2</v4ur:next-hop> | ||||
<rt:source-protocol>st0</rt:source-protocol> | <rt:source-protocol>st0</rt:source-protocol> | |||
<next-hop>192.168.1.254</next-hop> | <rt:last-modified>2012-02-20T18:02:45+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:32+01:00</rt:last-modified> | ||||
</rt:route> | ||||
<rt:route> | ||||
<destination-prefix>0.0.0.0/0</destination-prefix> | ||||
<rt:source-protocol>rip0</rt:source-protocol> | ||||
<next-hop>192.0.2.2</next-hop> | ||||
<rip:metric>2</rip:metric> | ||||
<rip:tag>64500</rip:tag> | ||||
<rt:last-modified>2011-09-23T18:02:45+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:routing-table> | </rt:routing-table> | |||
<rt:routing-table> | <rt:routing-table> | |||
<rt:name>ipv4-unicast-main</rt:name> | <rt:name>ipv6-unicast-fib</rt:name> | |||
<rt:recipient-routing-tables> | <rt:address-family>ipV6</rt:address-family> | |||
<rt:recipient-name>ipv4-unicast-fib</rt:recipient-name> | <rt:safi>nlri-unicast</rt:safi> | |||
</rt:recipient-routing-tables> | ||||
<rt:routes> | <rt:routes> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.0.2.1/24</destination-prefix> | <v6ur:dest-prefix>2001:db8:0:1::/64</v6ur:dest-prefix> | |||
<v6ur:outgoing-interface>eth0</v6ur:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | <rt:source-protocol>direct</rt:source-protocol> | |||
<outgoing-interface>eth0</outgoing-interface> | <rt:last-modified>2012-02-20T17:11:27+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:27+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.168.1.0/24</destination-prefix> | <v6ur:dest-prefix>2001:db8:0:2::/64</v6ur:dest-prefix> | |||
<v6ur:outgoing-interface>eth1</v6ur:outgoing-interface> | ||||
<rt:source-protocol>direct</rt:source-protocol> | <rt:source-protocol>direct</rt:source-protocol> | |||
<outgoing-interface>eth1</outgoing-interface> | <rt:last-modified>2012-02-20T17:11:27+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:27+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
<rt:route> | <rt:route> | |||
<destination-prefix>192.168.2.0/24</destination-prefix> | <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:source-protocol>st0</rt:source-protocol> | |||
<next-hop>192.168.1.254</next-hop> | <rt:last-modified>2012-02-20T18:02:45+01:00</rt:last-modified> | |||
<rt:last-modified>2011-09-23T17:11:32+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
</rt:routes> | ||||
</rt:routing-table> | ||||
<rt:routing-table> | ||||
<rt:name>ipv4-unicast-main</rt:name> | ||||
<rt:recipient-routing-tables> | ||||
<rt:recipient-name>ipv4-unicast-fib</rt:recipient-name> | ||||
</rt:recipient-routing-tables> | ||||
<rt:routes> | ||||
<rt:route> | <rt:route> | |||
<destination-prefix>0.0.0.0/0</destination-prefix> | <v4ur:dest-prefix>0.0.0.0/0</v4ur:dest-prefix> | |||
<rt:source-protocol>rip0</rt:source-protocol> | <rt:source-protocol>st0</rt:source-protocol> | |||
<next-hop>192.0.2.2</next-hop> | <v4ur:next-hop>192.0.2.2</v4ur:next-hop> | |||
<rip:metric>2</rip:metric> | <rt:last-modified>2012-02-20T18:02:45+01:00</rt:last-modified> | |||
<rip:tag>64500</rip:tag> | </rt:route> | |||
<rt:last-modified>2011-09-23T18:02:45+01:00</rt:last-modified> | </rt:routes> | |||
</rt:routing-table> | ||||
<rt:routing-table> | ||||
<rt:name>ipv6-unicast-main</rt:name> | ||||
<rt:address-family>ipV6</rt:address-family> | ||||
<rt:safi>nlri-unicast</rt:safi> | ||||
<rt:recipient-routing-tables> | ||||
<rt:recipient-name>ipv6-unicast-fib</rt:recipient-name> | ||||
</rt:recipient-routing-tables> | ||||
<rt:routes> | ||||
<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-modified>2012-02-20T18:02:45+01:00</rt:last-modified> | ||||
</rt:route> | </rt:route> | |||
</rt:routes> | </rt:routes> | |||
</rt:routing-table> | </rt:routing-table> | |||
</rt:routing-tables> | </rt:routing-tables> | |||
</rt:router> | </rt:router> | |||
</rt:routing> | </rt:routing> | |||
</nc:data> | ||||
</nc:rpc-reply> | ||||
Appendix B. Change Log | </data> | |||
</rpc-reply> | ||||
Appendix C. Change Log | ||||
RFC Editor: remove this section upon publication as an RFC. | RFC Editor: remove this section upon publication as an RFC. | |||
B.1. Changes Between Versions -00 and -01 | C.1. Changes Between Versions -01 and -02 | |||
o Added module "ietf-ipv6-unicast-routing". | ||||
o The example in Appendix B now uses IP addresses from blocks | ||||
reserved for documentation. | ||||
o Direct routes appear by default in the FIB table. | ||||
o Logical interfaces must be assigned to a router instance. | ||||
Additional interface configuration may be present. | ||||
o The "when" statement is only used with "augment", "must" is used | ||||
elsewhere. | ||||
o Additional "must" statements were added. | ||||
o The "route-content" grouping for IPv4 and IPv6 unicast now | ||||
includes the material from the "ietf-routing" version via "uses | ||||
rt:route-content". | ||||
o Explanation of symbols in the tree representation of data model | ||||
hierarchy. | ||||
C.2. 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. | |||
skipping to change at page 51, line 8 | skipping to change at page 64, line 8 | |||
o RPC operation "delete-route" was removed. | o RPC operation "delete-route" was removed. | |||
o Illegal XPath references from "get-route" to the datastore were | o Illegal XPath references from "get-route" to the datastore were | |||
fixed. | fixed. | |||
o Section "Security Considerations" was written. | o Section "Security Considerations" was written. | |||
Author's Address | Author's Address | |||
Ladislav Lhotka | Ladislav Lhotka | |||
CESNET | CZ.NIC | |||
Email: lhotka@cesnet.cz | Email: lhotka@nic.cz | |||
End of changes. 143 change blocks. | ||||
417 lines changed or deleted | 1032 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |