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/