draft-ietf-i2rs-rib-data-model-05.txt   draft-ietf-i2rs-rib-data-model-06.txt 
Network Working Group L. Wang Network Working Group L. Wang
Internet-Draft Individual Internet-Draft Individual
Intended status: Standards Track H. Ananthakrishnan Intended status: Standards Track H. Ananthakrishnan
Expires: September 18, 2016 Packet Design Expires: January 4, 2017 Packet Design
M. Chen M. Chen
Huawei Huawei
A. Dass A. Dass
S. Kini S. Kini
Ericsson Ericsson
N. Bahadur N. Bahadur
Bracket Computing Bracket Computing
March 17, 2016 July 3, 2016
A YANG Data Model for Routing Information Base (RIB) A YANG Data Model for Routing Information Base (RIB)
draft-ietf-i2rs-rib-data-model-05 draft-ietf-i2rs-rib-data-model-06
Abstract Abstract
This document defines a YANG data model for Routing Information Base This document defines a YANG data model for Routing Information Base
(RIB) that aligns with the I2RS RIB information model. (RIB) that aligns with the I2RS RIB information model.
Requirements Language Requirements Language
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
skipping to change at page 1, line 45 skipping to change at page 1, line 45
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 September 18, 2016. This Internet-Draft will expire on January 4, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 33 skipping to change at page 2, line 33
1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3 1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3
2. Model Structure . . . . . . . . . . . . . . . . . . . . . . . 3 2. Model Structure . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. RIB Capability . . . . . . . . . . . . . . . . . . . . . 7 2.1. RIB Capability . . . . . . . . . . . . . . . . . . . . . 7
2.2. Routing Instance and Rib . . . . . . . . . . . . . . . . 8 2.2. Routing Instance and Rib . . . . . . . . . . . . . . . . 8
2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 14 2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 14
2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 18 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 18
3. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 20 3. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 20
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 64
5. Security Considerations . . . . . . . . . . . . . . . . . . . 64 5. Security Considerations . . . . . . . . . . . . . . . . . . . 64
6. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 64 6. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 65
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 64 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 65
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 64 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.1. Normative References . . . . . . . . . . . . . . . . . . 64 8.1. Normative References . . . . . . . . . . . . . . . . . . 65
8.2. Informative References . . . . . . . . . . . . . . . . . 65 8.2. Informative References . . . . . . . . . . . . . . . . . 65
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 66
1. Introduction 1. Introduction
The Interface to the Routing System (I2RS) The Interface to the Routing System (I2RS)
[I-D.ietf-i2rs-architecture] provides read and write access to the [I-D.ietf-i2rs-architecture] provides read and write access to the
information and state within the routing process that exists inside information and state within the routing process that exists inside
the routing elements, this is achieved via the protocol message the routing elements, this is achieved via protocol message exchange
exchange between I2RS clients and I2RS agents associated with the between I2RS clients and I2RS agents associated with the routing
routing system. One of the functions of I2RS is to read and write system. One of the functions of I2RS is to read and write data of
data of Routing Information Base (RIB). Routing Information Base (RIB). [I-D.ietf-i2rs-usecase-reqs-summary]
[I-D.ietf-i2rs-usecase-reqs-summary] introduces a set of RIB use introduces a set of RIB use cases. The RIB information model is
cases. The RIB information model is defined in defined in [I-D.ietf-i2rs-rib-info-model].
[I-D.ietf-i2rs-rib-info-model].
This document defines a YANG [RFC6020][RFC6991] data model for the This document defines a YANG [RFC6020][RFC6991] data model for the
RIB that satisfies the RIB use cases and aligns with the RIB RIB that satisfies the RIB use cases and aligns with the RIB
information model. information model.
1.1. Definitions and Acronyms 1.1. Definitions and Acronyms
RIB: Routing Information Base RIB: Routing Information Base
Information Model (IM): An abstract model of a conceptual domain, Information Model (IM): An abstract model of a conceptual domain,
independent of a specific implementation or data representation. independent of a specific implementation or data representation.
1.2. Tree Diagrams 1.2. Tree Diagrams
A simplified graphical representation of the data model is used in A simplified graphical representation of the data model is used in
this document. The meaning of the symbols in these diagrams is as this document. The meaning of the symbols in these diagrams is as
follows: follows:
o Brackets "[" and "]" enclose list keys. o Brackets "[" and "]" enclose list keys.
o Curly braces "{" and "}" contain names of optional features that
make the corresponding node conditional.
o Abbreviations before data node names: "rw" means configuration o Abbreviations before data node names: "rw" means configuration
(read-write) and "ro" state data (read-only). (read-write) and "ro" state data (read-only).
o Symbols after data node names: "?" means an optional node and "*" o Symbols after data node names: "?" means an optional node and "*"
denotes a "list" and "leaf-list". denotes a "list" and "leaf-list".
o Parentheses enclose choice and case nodes, and case nodes are also o Parentheses enclose choice and case nodes, and case nodes are also
marked with a colon (":"). marked with a colon (":").
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2. Model Structure 2. Model Structure
The following figure shows an overview of structure tree of the ietf- The following figure shows an overview of structure tree of the ietf-
i2rs-rib module. To give a whole view of the structure tree, some i2rs-rib module. To give a whole view of the structure tree, some
details of the tree are omitted. The relevant details are introduced details of the tree are omitted. The relevant details are introduced
in the following sub-sections. in the subsequent sub-sections.
module: ietf-i2rs-rib module: ietf-i2rs-rib
+--rw routing-instance +--rw routing-instance
+--rw name string +--rw name string
+--rw interface-list* [name] +--rw interface-list* [name]
| +--rw name if:interface-ref | +--rw name if:interface-ref
+--rw router-id? yang:dotted-quad +--rw router-id? yang:dotted-quad
+--rw lookup-limit? uint8 +--rw lookup-limit? uint8
+--rw rib-list* [name] +--rw rib-list* [name]
+--rw name string +--rw name string
+--rw rib-family rib-family-def +--rw address-family rib-family-def
+--rw ip-rpf-check? boolean +--rw ip-rpf-check? boolean
+--rw route-list* [route-index] +--rw route-list* [route-index]
+--rw route-index uint64 | +--rw route-index uint64
+--rw match | +--rw match
| +--rw (route-type)? | | +--rw (route-type)?
| +--:(ipv4) | | +--:(ipv4)
| | ... | | | ...
| +--:(ipv6) | | +--:(ipv6)
| | ... | | | ...
| +--:(mpls-route) | | +--:(mpls-route)
| | ... | | | ...
| +--:(mac-route) | | +--:(mac-route)
| | ... | | | ...
| +--:(interface-route) | | +--:(interface-route)
| ... | | ...
+--rw nexthop | +--rw nexthop
| +--rw nexthop-id? uint32 | | +--rw nexthop-id? uint32
| +--rw sharing-flag? boolean | | +--rw sharing-flag? boolean
| +--rw (nexthop-type)? | | +--rw (nexthop-type)?
| +--:(nexthop-base) | | +--:(nexthop-base)
| | ... | | | ...
| +--:(nexthop-chain) {nexthop-chain}? | | +--:(nexthop-chain) {nexthop-chain}?
| | ... | | | ...
| +--:(nexthop-replicates) {nexthop-replicates}? | | +--:(nexthop-replicates) {nexthop-replicates}?
| | ... | | | ...
| +--:(nexthop-protection) {nexthop-protection}? | | +--:(nexthop-protection) {nexthop-protection}?
| | ... | | | ...
| +--:(nexthop-load-balance) {nexthop-load-balance}? | | +--:(nexthop-load-balance) {nexthop-load-balance}?
| ... | | ...
+--rw route-statistic | +--rw route-status
| ... | | ...
+--rw route-attributes | +--rw route-attributes
| ... | | ...
+--rw route-vendor-attributes | +--rw route-vendor-attributes
+--rw nexthop-list* [nexthop-member-id]
+--rw nexthop-member-id uint32
rpcs: rpcs:
+---x rib-add +---x rib-add
| +---w input | +---w input
| | +---w rib-name string | | +---w name string
| | +---w rib-family rib-family-def | | +---w address-family rib-family-def
| | +---w ip-rpf-check? boolean | | +---w ip-rpf-check? boolean
| +--ro output | +--ro output
| +--ro result uint32 | +--ro result uint32
| +--ro reason? string | +--ro reason? string
+---x rib-delete +---x rib-delete
| +---w input | +---w input
| | +---w rib-name string | | +---w name string
| +--ro output | +--ro output
| +--ro result uint32 | +--ro result uint32
| +--ro reason? string | +--ro reason? string
+---x route-add +---x route-add
| +---w input | +---w input
| | +---w return-failure-detail? boolean | | +---w return-failure-detail? boolean
| | +---w rib-name string | | +---w rib-name string
| | +---w routes | | +---w routes
| | +---w route-list* [route-index] | | +---w route-list* [route-index]
| | ... | | ...
skipping to change at page 7, line 18 skipping to change at page 7, line 20
| | | ... | | | ...
| | +--:(nexthop-replicates) {nexthop-replicates}? | | +--:(nexthop-replicates) {nexthop-replicates}?
| | | ... | | | ...
| | +--:(nexthop-protection) {nexthop-protection}? | | +--:(nexthop-protection) {nexthop-protection}?
| | | ... | | | ...
| | +--:(nexthop-load-balance) {nexthop-load-balance}? | | +--:(nexthop-load-balance) {nexthop-load-balance}?
| | ... | | ...
| +--ro nexthop-state nexthop-state-def | +--ro nexthop-state nexthop-state-def
+---n route-change +---n route-change
+--ro rib-name string +--ro rib-name string
+--ro rib-family rib-family-def +--ro address-family rib-family-def
+--ro route-index uint64 +--ro route-index uint64
+--ro match +--ro match
| +--ro (route-type)? | +--ro (route-type)?
| +--:(ipv4) | +--:(ipv4)
| | ... | | ...
| +--:(ipv6) | +--:(ipv6)
| | ... | | ...
| +--:(mpls-route) | +--:(mpls-route)
| | ... | | ...
| +--:(mac-route) | +--:(mac-route)
| | ... | | ...
| +--:(interface-route) | +--:(interface-route)
| ... | ...
+--ro route-installed-state route-installed-state-def +--ro route-installed-state route-installed-state-def
+--ro route-state route-state-def +--ro route-state route-state-def
+--ro route-change-reason route-reason-def +--ro route-change-reason route-reason-def
Figure 1: Overview of I2RS Rib Module Structure Figure 1: Overview of I2RS RIB Module Structure
2.1. RIB Capability 2.1. RIB Capability
RIB capability negotiation is very important because not all of the RIB capability negotiation is very important because not all of the
hardware will be able to support all kinds of nexthops and there hardware will be able to support all kinds of nexthops and there
should be a limitation on how many levels of lookup can be might be a limitation on how many levels of lookup can be practically
practically performed. Therefore, a RIB data model MUST specify a performed. Therefore, a RIB data model MUST specify a way for an
way for an external entity to learn about the functional capabilities external entity to learn about the functional capabilities of a
of a network device. network device.
At the same time, nexthop chains can be used to specify multiple At the same time, nexthop chains can be used to specify multiple
headers over a packet, before that particular packet is forwarded. headers over a packet, before that particular packet is forwarded.
Not every network device will be able to support all kinds of nexthop Not every network device will be able to support all kinds of nexthop
chains along with the arbitrary number of headers which are chained chains along with the arbitrary number of headers which are chained
together. The RIB data model MUST provide a way to expose the together. The RIB data model MUST provide a way to expose the
nexthop chaining capability supported by a given network device. nexthop chaining capability supported by a given network device.
This module uses the feature and if-feature statements to achieve This module uses the feature and if-feature statements to achieve
above capability negotiation. above capability advertisement.
2.2. Routing Instance and Rib 2.2. Routing Instance and Rib
A routing instance, in the context of the RIB information model, is a A routing instance, in the context of the RIB information model, is a
collection of RIBs, interfaces, and routing protocol parameters. A collection of RIBs, interfaces, and routing protocol parameters. A
routing instance creates a logical slice of the router and can allow routing instance creates a logical slice of the router and can allow
multiple different logical slices; across a set of routers; to multiple different logical slices, across a set of routers, to
communicate with each other. And the routing protocol parameters communicate with each other. The routing protocol parameters control
control the information available in the RIBs. More detail about the information available in the RIBs. More detail about routing
routing instance can be found in Section 2.2 of instance can be found in Section 2.2 of
[I-D.ietf-i2rs-rib-info-model]. [I-D.ietf-i2rs-rib-info-model].
For a routing instance, there will be multiple RIBs. Therefore, this For a routing instance, there can be multiple RIBs. Therefore, this
model uses "list" to express the RIBs. The structure tree is shown model uses "list" to express the RIBs. The structure tree is shown
as following figure. below:
+--rw routing-instance +--rw routing-instance
+--rw name string +--rw name string
+--rw interface-list* [name] +--rw interface-list* [name]
| +--rw name if:interface-ref | +--rw name if:interface-ref
+--rw router-id? yang:dotted-quad +--rw router-id? yang:dotted-quad
+--rw lookup-limit? uint8 +--rw lookup-limit? uint8
+--rw rib-list* [name] +--rw rib-list* [name]
+--rw name string +--rw name string
+--rw rib-family rib-family-def +--rw address-family rib-family-def
+--rw ip-rpf-check? boolean +--rw ip-rpf-check? boolean
+--rw route-list* [route-index] +--rw route-list* [route-index]
... (refer to Section 2.3) ... (refer to Section 2.3)
Figure 2: Routing Instance Structure Figure 2: Routing Instance Structure
2.3. Route 2.3. Route
A route is essentially a match condition and an action following that A route is essentially a match condition and an action following that
match. The match condition specifies the kind of route (e.g., IPv4, match. The match condition specifies the kind of route (e.g., IPv4,
skipping to change at page 9, line 10 skipping to change at page 9, line 10
route MUST associate with the following attributes: route MUST associate with the following attributes:
o ROUTE_PREFERENCE: See Section 2.3 of o ROUTE_PREFERENCE: See Section 2.3 of
[I-D.ietf-i2rs-rib-info-model]. [I-D.ietf-i2rs-rib-info-model].
o ACTIVE: Indicates whether a route has at least one fully resolved o ACTIVE: Indicates whether a route has at least one fully resolved
nexthop and is therefore eligible for installation in the FIB. nexthop and is therefore eligible for installation in the FIB.
o INSTALLED: Indicates whether the route got installed in the FIB. o INSTALLED: Indicates whether the route got installed in the FIB.
In addition, a route can associate with one or more optional route In addition, a route can be associated with one or more optional
attributes(e.g., route-vendor-attributes). route attributes (e.g., route-vendor-attributes).
For a RIB, there will have a number of routes, so the routes are A RIB will have a number of routes, so the routes are expressed as a
expressed as a list under a specific rib. Each rib has its own route list under a specific rib. Each RIB has its own route list.
list.
+--rw route-list* [route-index] +--rw route-list* [route-index]
+--rw route-index uint64 +--rw route-index uint64
+--rw match +--rw match
| +--rw (route-type)? | +--rw (route-type)?
| +--:(ipv4) | +--:(ipv4)
| | +--rw ipv4 | | +--rw ipv4
| | +--rw (ip-route-match-type)? | | +--rw (ip-route-match-type)?
| | +--:(dest-ipv4-address) | | +--:(dest-ipv4-address)
| | | ... | | | ...
skipping to change at page 10, line 9 skipping to change at page 10, line 9
| +--rw interface-identifier if:interface-ref | +--rw interface-identifier if:interface-ref
+--rw nexthop +--rw nexthop
| ...(refer to Section 2.4) | ...(refer to Section 2.4)
Figure 3: Routes Structure Figure 3: Routes Structure
2.4. Nexthop 2.4. Nexthop
A nexthop represents an object resulting from a route lookup. As A nexthop represents an object resulting from a route lookup. As
illustrated in Section 2.4 of [I-D.ietf-i2rs-rib-info-model], to illustrated in Section 2.4 of [I-D.ietf-i2rs-rib-info-model], to
support various of use cases (e.g., load balance, protection, support various use cases (e.g., load balance, protection, multicast
multicast or the combination of them), the nexthop is modelled as a or a combination of them), the nexthop is modeled as a multi-level
multi-level structure and supports recursion. The first level of the structure and supports recursion. The first level of the nexthop
nexthop includes the following four types: includes the following four types:
o Base: The "base" nexthop is the foundation of all other nexthop o Base: The "base" nexthop is the foundation of all other nexthop
types. It includes the follow basic nexthops: types. It includes the follow basic nexthops:
* nexthop-id * nexthop-id
* IPv4 address * IPv4 address
* IPv6 address * IPv6 address
skipping to change at page 10, line 39 skipping to change at page 10, line 39
* egress-interface with MAC address * egress-interface with MAC address
* logical-tunnel * logical-tunnel
* tunnel-encap * tunnel-encap
* tunnel-decap * tunnel-decap
* rib-name * rib-name
o Chain:Provide a way to perform multiple operations on a packet by o Chain: Provide a way to perform multiple operations on a packet by
logically combining them. logically combining them.
o Load-balance: Designed for load-balance case where it normally o Load-balance: Designed for load-balance case where it normally
will have multiple weighted nexthops. will have multiple weighted nexthops.
o Protection: Designed for protection scenario where it normally o Protection: Designed for protection scenario where it normally
will have primary and standby nexthop. will have primary and standby nexthop.
o Replicate: Designed for multiple destinations forwarding. o Replicate: Designed for multiple destinations forwarding.
skipping to change at page 11, line 25 skipping to change at page 11, line 25
| +--:(nexthop-replicates) {nexthop-replicates}? | +--:(nexthop-replicates) {nexthop-replicates}?
| | +--rw nexthop-replicates | | +--rw nexthop-replicates
| | +--rw nexthop-list* [nexthop-member-id] | | +--rw nexthop-list* [nexthop-member-id]
| | +--rw nexthop-member-id uint32 | | +--rw nexthop-member-id uint32
| +--:(nexthop-protection) {nexthop-protection}? | +--:(nexthop-protection) {nexthop-protection}?
| | +--rw nexthop-protection | | +--rw nexthop-protection
| | +--rw nexthop-list* [nexthop-member-id] | | +--rw nexthop-list* [nexthop-member-id]
| | +--rw nexthop-member-id uint32 | | +--rw nexthop-member-id uint32
| | +--rw nexthop-preference nexthop-preference-def | | +--rw nexthop-preference nexthop-preference-def
| +--:(nexthop-load-balance) {nexthop-load-balance}? | +--:(nexthop-load-balance) {nexthop-load-balance}?
| +--rw nexthop-lbs | +--rw nexthop-lb
| +--rw nexthop-list* [nexthop-member-id] | +--rw nexthop-list* [nexthop-member-id]
| +--rw nexthop-member-id uint32 | +--rw nexthop-member-id uint32
| +--rw nexthop-lb-weight nexthop-lb-weight-def | +--rw nexthop-lb-weight nexthop-lb-weight-def
Figure 4: Nexthop Structure Figure 4: Nexthop Structure
Figure 5 (as shown blow) is a sub-tree of nexthop, it's under the Figure 5 (as shown blow) is a sub-tree of nexthop, it's under the
nexthop base node and shows that structure of the "base" nexthop. nexthop base node and shows that structure of the "base" nexthop.
+--:(nexthop-base) +--:(nexthop-base)
skipping to change at page 14, line 21 skipping to change at page 14, line 21
| | +--rw rib-name? string | | +--rw rib-name? string
| +--:(nexthop-identifier) | +--:(nexthop-identifier)
| +--rw nexthop-ref nexthop-ref | +--rw nexthop-ref nexthop-ref
Figure 5: Nexthop Base Structure Figure 5: Nexthop Base Structure
2.5. RPC Operations 2.5. RPC Operations
This module defines the following RPC operations: This module defines the following RPC operations:
o rib-add: It is defined to add a rib to a routing instance. A name o rib-add: Add a RIB to a routing instance. A name of the rib,
of the rib, address family of the rib and whether the RPF check is address family of the RIB and (optionally) whether the RPF check
enabled are passed as the input parameters. The output is the is enabled are passed as the input parameters. The output is the
result of the add operation: result of the add operation:
* true - success; * true - success;
* false - failed; when failed, the i2rs agent may return the * false - failed; when failed, the i2rs agent may return the
specific reason that causes the failure. specific reason that causes the failure.
o rib-delete: It is defined to delete a rib from a routing instance. o rib-delete: Delete a RIB from a routing instance. When a RIB is
When a rib is deleted, all routes installed in the rib will be deleted, all routes installed in the RIB will be deleted. A name
deleted. A name of the rib is passed as the input parameter. The of the RIB is passed as the input parameter. The output is the
output is the result of the delete operation: result of the delete operation:
* true - success; * true - success;
* false - failed; when failed, the i2rs agent may return the * false - failed; when failed, the i2rs agent may return the
specific reason that causes the failure. specific reason that causes the failure.
o route-add: It is defined to add a route or a set of routes to a o route-add: Add a route or a set of routes to a rib. A RIB name,
rib. A rib name, the route prefix(es), route attributes, route the route prefix(es), route attributes, route vendor attributes,
vendor attributes, nexthop and whether return failure detail are nexthop and whether return failure detail are passed as the input
passed as the input parameters. Before calling the route-add rpc, parameters. Before calling the route-add rpc, it is required to
it is required to call the nh-add rpc to create and/or return the call the nh-add rpc to create and/or return the nexthop
nexthop identifier. The output is a combination of the route identifier. The output is a combination of the route operation
operation states that include: states that include:
* success-count: the numbers of routes that are successfully * success-count: the number of routes that were successfully
added; added;
* failed-count: the numbers of the routes that are failed to be * failed-count: the number of the routes that failed to be added;
added;
* failure-detail: shows the specific failed routes that failure * failure-detail: shows the specific routes that failed to be
reason. added.
o route-delete: It is defined to delete a route or a set of routes o route-delete: Delete a route or a set of routes from a rib. A
from a rib. A name of the rib, the route prefix(es) and whether name of the rib, the route prefix(es) and whether to return
return failure detail are passed as the input parameters. The failure detail are passed as the input parameters. The output is
output is combination of the route operation states that include: a combination of route operation states that include:
* success-count: the numbers of routes that are successfully * success-count: the number of routes that were successfully
deleted; deleted;
* failed-count: the numbers of the routes that are failed to be * failed-count: the number of the routes that failed to be
deleted; deleted;
* failure-detail: shows the specific failed routes that failure * failure-detail: shows the specific routes that failed to be
reason. deleted.
o route-update: It is defined to update a route or a set of routes. o route-update: Update a route or a set of routes. A RIB name, the
A rib name, the route prefix(es), or route attributes, or route route prefix(es), or route attributes, or route vendor attributes,
vendor attributes, or nexthop are passed as the input parameters. or nexthop are passed as the input parameters. The match
The match conditions can be either route prefix(es), or route conditions can be either route prefix(es), or route attributes, or
attributes, or route vendor attributes, or nexthop. The update route vendor attributes, or nexthop. The update actions include:
actions include: update the nexthop, update the route attributes, update the nexthop, update the route attributes, update the route
update the route vendor attributes. The output is combination of vendor attributes. The output is combination of the route
the route operation states that include: operation states that include:
* success-count: the numbers of routes that are successfully * success-count: the number of routes that were successfully
updated; updated;
* failed-count: the numbers of the routes that are failed to be * failed-count: the number of the routes that failed to be
updated; updated;
* failure-detail: shows the specific failed routes that failure * failure-detail: shows the specific routes that failed to be
reason. updated.
o nh-add: It is defined to add a nexthop to a rib. A name of the o nh-add: Add a nexthop to a rib. A name of the RIB and a nexthop
rib and a nexthop are passed as the input parameters. The network are passed as the input parameters. The network node is required
node is required to allocate a nexthop identifier to the nexthop. to allocate a nexthop identifier to the nexthop. The outputs
The outputs include the result of the nexthop add operation. include the result of the nexthop add operation.
* true - success; when success, a nexthop identifier will be * true - success; when success, a nexthop identifier will be
returned to the i2rs client. returned to the i2rs client.
* false - failed; when failed, the i2rs agent may return the * false - failed; when failed, the i2rs agent may return the
specific reason that causes the failure. specific reason that causes the failure.
o nh-delete: It is defined to delete a nexthop from a rib. A name o nh-delete: Delete a nexthop from a rib. A name of a RIB and a
of a rib and a nexthop or nexthop identifier are passed as the nexthop or nexthop identifier are passed as the input parameters.
input parameters. The output is the result of the delete The output is the result of the delete operation:
operation:
* true - success; * true - success;
* false - failed; when failed, the i2rs agent may return the * false - failed; when failed, the i2rs agent may return the
specific reason that causes the failure. specific reason that causes the failure.
The structure tree of rpcs is showing in following figure. The structure tree of rpcs is shown in following figure.
rpcs: rpcs:
+---x rib-add +---x rib-add
| +---w input | +---w input
| | +---w rib-name string | | +---w rib-name string
| | +---w rib-family rib-family-def | | +---w address-family rib-family-def
| | +---w ip-rpf-check? boolean | | +---w ip-rpf-check? boolean
| +--ro output | +--ro output
| +--ro result uint32 | +--ro result uint32
| +--ro reason? string | +--ro reason? string
+---x rib-delete +---x rib-delete
| +---w input | +---w input
| | +---w rib-name string | | +---w rib-name string
| +--ro output | +--ro output
| +--ro result uint32 | +--ro result uint32
| +--ro reason? string | +--ro reason? string
skipping to change at page 18, line 10 skipping to change at page 18, line 10
| ... | ...
+--ro output +--ro output
+--ro result uint32 +--ro result uint32
+--ro reason? string +--ro reason? string
Figure 6: RPCs Structure Figure 6: RPCs Structure
2.6. Notifications 2.6. Notifications
Asynchronous notifications are sent by the RIB manager of a network Asynchronous notifications are sent by the RIB manager of a network
device to an external entity when some event triggers on the network device to an external entity when some event triggers on the network
device. A RIB data-model MUST support sending 2 kind of asynchronous device. An implementation of this RIB data model MUST support
notifications. sending two kinds of asynchronous notifications.
1. Route change notification: 1. Route change notification:
o Installed (Indicates whether the route got installed in the FIB) ; o Installed (Indicates whether the route got installed in the FIB) ;
o Active (Indicates whether a route has at least one fully resolved o Active (Indicates whether a route has at least one fully resolved
nexthop and is therefore eligible for installation in the FIB) ; nexthop and is therefore eligible for installation in the FIB) ;
o Reason - E.g. Not authorized o Reason - E.g. Not authorized
2. Nexthop resolution status notification 2. Nexthop resolution status notification
Nexthops can be fully resolved nexthops or an unresolved nexthop. Nexthops can be fully resolved or an unresolved.
A resolved nexthop has adequate level of information to send the A resolved nexthop has an adequate level of information to send the
outgoing packet towards the destination by forwarding it on an outgoing packet towards the destination by forwarding it on an
interface of a directly connected neighbor. interface to a directly connected neighbor.
An unresolved nexthop is something that requires the RIB manager to An unresolved nexthop is something that requires the RIB manager to
determine the final resolved nexthop. For example, in a case when a determine the final resolved nexthop. In one example, a nexthop
nexthop could be an IP address. The RIB manager would resolve how to could be an IP address. The RIB manager would resolve how to reach
reach that IP address, e.g. by checking if that particular IP is that IP address, e.g. by checking if that particular IP address is
address reachable by regular IP forwarding or by a MPLS tunnel or by reachable by regular IP forwarding or by a MPLS tunnel or by both.
both. If the RIB manager cannot resolve the nexthop, then the If the RIB manager cannot resolve the nexthop, then the nexthop
nexthop remains in an unresolved state and is NOT a suitable remains in an unresolved state and is NOT a suitable candidate for
candidate for installation in the FIB. installation in the FIB.
An implementation of this RIB data model MUST support sending route- An implementation of this RIB data model MUST support sending route-
change notifications whenever a route transitions between the change notifications whenever a route transitions between the
following states: following states:
o from the active state to the inactive state o from the active state to the inactive state
o from the inactive state to the active state o from the inactive state to the active state
o from the installed state to the uninstalled state o from the installed state to the uninstalled state
o from the uninstalled state to the installed state o from the uninstalled state to the installed state
A single notification MAY be used when a route transition from A single notification MAY be used when a route transitions from
inactive/uninstalled to active/installed or in the other direction. inactive/uninstalled to active/installed or in the other direction.
The structure tree of notifications is shown in the following figure. The structure tree of notifications is shown in the following figure.
notifications: notifications:
+---n nexthop-resolution-status-change +---n nexthop-resolution-status-change
| +--ro nexthop | +--ro nexthop
| | +--ro nexthop-id uint32 | | +--ro nexthop-id uint32
| | +--ro sharing-flag boolean | | +--ro sharing-flag boolean
| | +--ro (nexthop-type)? | | +--ro (nexthop-type)?
skipping to change at page 19, line 28 skipping to change at page 19, line 28
| | | ... | | | ...
| | +--:(nexthop-replicates) {nexthop-replicates}? | | +--:(nexthop-replicates) {nexthop-replicates}?
| | | ... | | | ...
| | +--:(nexthop-protection) {nexthop-protection}? | | +--:(nexthop-protection) {nexthop-protection}?
| | | ... | | | ...
| | +--:(nexthop-load-balance) {nexthop-load-balance}? | | +--:(nexthop-load-balance) {nexthop-load-balance}?
| | ... | | ...
| +--ro nexthop-state nexthop-state-def | +--ro nexthop-state nexthop-state-def
+---n route-change +---n route-change
+--ro rib-name string +--ro rib-name string
+--ro rib-family rib-family-def +--ro address-family rib-family-def
+--ro route-index uint64 +--ro route-index uint64
+--ro match +--ro match
| +--ro (route-type)? | +--ro (route-type)?
| +--:(ipv4) | +--:(ipv4)
| | ... | | ...
| +--:(ipv6) | +--:(ipv6)
| | ... | | ...
| +--:(mpls-route) | +--:(mpls-route)
| | ... | | ...
| +--:(mac-route) | +--:(mac-route)
skipping to change at page 20, line 7 skipping to change at page 20, line 7
| +--:(interface-route) | +--:(interface-route)
| ... | ...
+--ro route-installed-state route-installed-state-def +--ro route-installed-state route-installed-state-def
+--ro route-state route-state-def +--ro route-state route-state-def
+--ro route-change-reason route-change-reason-def +--ro route-change-reason route-change-reason-def
Figure 7: Notifications Structure Figure 7: Notifications Structure
3. YANG Modules 3. YANG Modules
<CODE BEGINS> file "ietf-i2rs-rib@2016-03-17.yang" <CODE BEGINS> file "ietf-i2rs-rib@2016-07-04.yang"
module ietf-i2rs-rib { module ietf-i2rs-rib {
namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib"; namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib";
// replace with iana namespace when assigned // replace with iana namespace when assigned
prefix "iir"; prefix "iir";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
//rfc6991 //rfc6991
} }
skipping to change at page 20, line 36 skipping to change at page 20, line 36
organization organization
"IETF I2RS (Interface to Routing System) Working Group"; "IETF I2RS (Interface to Routing System) Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/i2rs/> "WG Web: <http://tools.ietf.org/wg/i2rs/>
WG List: <mailto:i2rs@ietf.org> WG List: <mailto:i2rs@ietf.org>
WG Chair: Susan Hares WG Chair: Susan Hares
<mailto:shares@ndzh.com> <mailto:shares@ndzh.com>
WG Chair: Jeffrey Haas WG Chair: Russ White
<mailto:jhaas@pfrc.org> <mailto:russ@riw.us>
Editor: Lixing Wang Editor: Lixing Wang
<mailto:wang_little_star@sina.com> <mailto:wang_little_star@sina.com>
Editor: Hariharan Ananthakrishnan Editor: Hariharan Ananthakrishnan
<mailto:hari@packetdesign.com> <mailto:hari@packetdesign.com>
Editor: Mach(Guoyi) Chen Editor: Mach(Guoyi) Chen
<mailto:mach.chen@huawei.com> <mailto:mach.chen@huawei.com>
skipping to change at page 21, line 11 skipping to change at page 21, line 11
Editor: Sriganesh Kini Editor: Sriganesh Kini
<mailto:sriganesh.kini@ericsson.com> <mailto:sriganesh.kini@ericsson.com>
Editor: Nitin Bahadur Editor: Nitin Bahadur
<mailto:nitin_bahadur@yahoo.com>"; <mailto:nitin_bahadur@yahoo.com>";
description description
"This module defines a YANG data model for "This module defines a YANG data model for
Routing Information Base (RIB) that aligns Routing Information Base (RIB) that aligns
with the I2RS RIB information model."; with the I2RS RIB information model.";
revision "2016-03-17" { revision "2016-07-04" {
description "initial revision"; description "initial revision";
reference "draft-ietf-i2rs-data-model-05"; reference "draft-ietf-i2rs-data-model-06";
} }
//Features //Features
feature nexthop-tunnel { feature nexthop-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
tunnel nexthop capability."; tunnel nexthop capability.";
} }
feature nexthop-chain { feature nexthop-chain {
description description
"This feature means that a node support "This feature means that a node supports
chain nexthop capability."; chain nexthop capability.";
} }
feature nexthop-protection { feature nexthop-protection {
description description
"This feature means that a node support "This feature means that a node supports
protection nexthop capability."; protection nexthop capability.";
} }
feature nexthop-replicates { feature nexthop-replicates {
description description
"This feature means that a node support "This feature means that a node supports
relicates nexthop capability."; replicates nexthop capability.";
} }
feature nexthop-load-balance { feature nexthop-load-balance {
description description
"This feature means that a node support "This feature means that a node supports
load balance nexthop capability."; load balance nexthop capability.";
} }
feature ipv4-tunnel { feature ipv4-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
IPv4 tunnel encapsulation capability."; IPv4 tunnel encapsulation capability.";
} }
feature ipv6-tunnel { feature ipv6-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
IPv6 tunnel encapsulation capability."; IPv6 tunnel encapsulation capability.";
} }
feature mpls-tunnel { feature mpls-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
MPLS tunnel encapsulation capability."; MPLS tunnel encapsulation capability.";
} }
feature vxlan-tunnel { feature vxlan-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
VxLAN tunnel encapsulation capability."; VxLAN tunnel encapsulation capability.";
} }
feature gre-tunnel { feature gre-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
GRE tunnel encapsulation capability."; GRE tunnel encapsulation capability.";
} }
feature nvgre-tunnel { feature nvgre-tunnel {
description description
"This feature means that a node support "This feature means that a node supports
NvGRE tunnel encapsulation capability."; NvGRE tunnel encapsulation capability.";
} }
feature route-vendor-attributes { feature route-vendor-attributes {
description description
"This feature means that a node support "This feature means that a node supports
route vendor attributes."; route vendor attributes.";
} }
//Identities and Type Definitions //Identities and Type Definitions
identity mpls-label-action { identity mpls-label-action {
description description
"Base identify from which all mpls label "Base identity from which all MPLS label
operations are derived. operations are derived.
The MPLS label stack operations include: The MPLS label stack operations include:
push - to add a new label to a label stack, push - to add a new label to a label stack,
pop - to pop the top label from a label stack, pop - to pop the top label from a label stack,
swap - to change the top label of a label swap - to exchange the top label of a label
stack with new label."; stack with new label.";
} }
identity label-push { identity label-push {
base "mpls-label-action"; base "mpls-label-action";
description description
"MPLS label stack operation: push."; "MPLS label stack operation: push.";
} }
identity label-pop { identity label-pop {
base "mpls-label-action"; base "mpls-label-action";
skipping to change at page 23, line 32 skipping to change at page 23, line 32
typedef mpls-label-action-def { typedef mpls-label-action-def {
type identityref { type identityref {
base "mpls-label-action"; base "mpls-label-action";
} }
description description
"MPLS label action def."; "MPLS label action def.";
} }
identity tunnel-decap-action { identity tunnel-decap-action {
description description
"Base identify from which all tunnel decap "Base identity from which all tunnel decap
actions are derived. actions are derived.
Tunnel decap actions include: Tunnel decap actions include:
ipv4-decap - to decap an IPv4 tunnel, ipv4-decap - to decap an IPv4 tunnel,
ipv6-decap - to decap an IPv6 tunnel."; ipv6-decap - to decap an IPv6 tunnel.";
} }
identity ipv4-decap { identity ipv4-decap {
base "tunnel-decap-action"; base "tunnel-decap-action";
description description
"IPv4 tunnel decap."; "IPv4 tunnel decap.";
skipping to change at page 24, line 13 skipping to change at page 24, line 13
typedef tunnel-decap-action-def { typedef tunnel-decap-action-def {
type identityref { type identityref {
base "tunnel-decap-action"; base "tunnel-decap-action";
} }
description description
"Tunnel decap def."; "Tunnel decap def.";
} }
identity ttl-action { identity ttl-action {
description description
"Base identify from which all TTL "Base identity from which all TTL
actions are derived."; actions are derived.";
} }
identity no-action { identity no-action {
base "ttl-action"; base "ttl-action";
description description
"Do nothing regarding the TTL."; "Do nothing regarding the TTL.";
} }
identity copy-to-inner { identity copy-to-inner {
base "ttl-action"; base "ttl-action";
description description
"Copy the TTL of the outer header "Copy the TTL of the outer header
to inner header."; to the inner header.";
} }
identity decrease-and-copy-to-inner { identity decrease-and-copy-to-inner {
base "ttl-action"; base "ttl-action";
description description
"Decrease TTL by one and copy the TTL "Decrease TTL by one and copy the TTL
to inner header."; to the inner header.";
} }
identity decrease-and-copy-to-next { identity decrease-and-copy-to-next {
base "ttl-action"; base "ttl-action";
description description
"Decrease TTL by one and copy the TTL "Decrease TTL by one and copy the TTL
to the next header.For example: when to the next header.For example: when
MPLS label swapping, decrease the TTL MPLS label swapping, decrease the TTL
of the in label and copy it to the out of the inner label and copy it to the
label."; outer label.";
} }
typedef ttl-action-def { typedef ttl-action-def {
type identityref { type identityref {
base "ttl-action"; base "ttl-action";
} }
description description
"TTL action def."; "TTL action def.";
} }
identity hop-limit-action { identity hop-limit-action {
description description
"Base identify from which all hop limit "Base identity from which all hop limit
actions are derived."; actions are derived.";
} }
identity hop-limit-no-action { identity hop-limit-no-action {
base "hop-limit-action"; base "hop-limit-action";
description description
"Do nothing regarding the hop limit."; "Do nothing regarding the hop limit.";
} }
identity hop-limit-copy-to-inner { identity hop-limit-copy-to-inner {
base "hop-limit-action"; base "hop-limit-action";
description description
"Copy the hop limit of the outer header "Copy the hop limit of the outer header
to inner header."; to the inner header.";
} }
typedef hop-limit-action-def { typedef hop-limit-action-def {
type identityref { type identityref {
base "hop-limit-action"; base "hop-limit-action";
} }
description description
"IPv6 hop limit action def."; "IPv6 hop limit action def.";
} }
identity special-nexthop { identity special-nexthop {
description description
"Base identify from which all special "Base identity from which all special
nexthops are derived."; nexthops are derived.";
} }
identity discard { identity discard {
base "special-nexthop"; base "special-nexthop";
description description
"This indicates that the network "This indicates that the network
device should drop the packet and device should drop the packet and
increment a drop counter."; increment a drop counter.";
} }
skipping to change at page 26, line 13 skipping to change at page 26, line 13
"This indicates that the network "This indicates that the network
device should drop the packet, device should drop the packet,
increment a drop counter and send increment a drop counter and send
back an appropriate error message back an appropriate error message
(like ICMP error)."; (like ICMP error).";
} }
identity receive { identity receive {
base "special-nexthop"; base "special-nexthop";
description description
"This indicates that that the traffic is "This indicates that the traffic is
destined for the network device. For destined for the network device. For
example, protocol packets or OAM packets. example, protocol packets or OAM packets.
All locally destined traffic SHOULD be All locally destined traffic SHOULD be
throttled to avoid a denial of service throttled to avoid a denial of service
attack on the router's control plane. An attack on the router's control plane. An
optional rate-limiter can be specified optional rate-limiter can be specified
to indicate how to throttle traffic to indicate how to throttle traffic
destined for the control plane."; destined for the control plane.";
} }
skipping to change at page 26, line 40 skipping to change at page 26, line 40
typedef special-nexthop-def { typedef special-nexthop-def {
type identityref { type identityref {
base "special-nexthop"; base "special-nexthop";
} }
description description
"Special nexthop def."; "Special nexthop def.";
} }
identity ip-route-match-type { identity ip-route-match-type {
description description
"Base identify from which all route "Base identity from which all route
match types are derived. match types are derived.
Route match type could be: Route match type could be:
match source, or match source, or
match destination, or match destination, or
match source and destination."; match source and destination.";
} }
identity match-ip-src { identity match-ip-src {
base "ip-route-match-type"; base "ip-route-match-type";
description description
skipping to change at page 27, line 14 skipping to change at page 27, line 14
} }
identity match-ip-dest { identity match-ip-dest {
base "ip-route-match-type"; base "ip-route-match-type";
description description
"Destination route match type"; "Destination route match type";
} }
identity match-ip-src-dest { identity match-ip-src-dest {
base "ip-route-match-type"; base "ip-route-match-type";
description description
"Src and Dest route match type"; "Source and Destination route match type";
} }
typedef ip-route-match-type-def { typedef ip-route-match-type-def {
type identityref { type identityref {
base "ip-route-match-type"; base "ip-route-match-type";
} }
description description
"IP route match type def."; "IP route match type def.";
} }
identity rib-family { identity rib-family {
description description
"Base identify from which all rib "Base identity from which all RIB
address families are derived."; address families are derived.";
} }
identity ipv4-rib-family { identity ipv4-rib-family {
base "rib-family"; base "rib-family";
description description
"IPv4 rib address family."; "IPv4 RIB address family.";
} }
identity ipv6-rib-family { identity ipv6-rib-family {
base "rib-family"; base "rib-family";
description description
"IPv6 rib address family."; "IPv6 RIB address family.";
} }
identity mpls-rib-family { identity mpls-rib-family {
base "rib-family"; base "rib-family";
description description
"MPLS rib address family."; "MPLS RIB address family.";
} }
identity ieee-mac-rib-family { identity ieee-mac-rib-family {
base "rib-family"; base "rib-family";
description description
"MAC rib address family."; "MAC RIB address family.";
} }
typedef rib-family-def { typedef rib-family-def {
type identityref { type identityref {
base "rib-family"; base "rib-family";
} }
description description
"Rib address family def."; "Rib address family def.";
} }
identity route-type { identity route-type {
description description
"Base identify from which all route types "Base identity from which all route types
are derived."; are derived.";
} }
identity ipv4-route { identity ipv4-route {
base "route-type"; base "route-type";
description description
"IPv4 route type."; "IPv4 route type.";
} }
identity ipv6-route { identity ipv6-route {
skipping to change at page 29, line 12 skipping to change at page 29, line 12
typedef route-type-def { typedef route-type-def {
type identityref { type identityref {
base "route-type"; base "route-type";
} }
description description
"Route type def."; "Route type def.";
} }
identity tunnel-type { identity tunnel-type {
description description
"Base identify from which all tunnel "Base identity from which all tunnel
types are derived."; types are derived.";
} }
identity ipv4-tunnel { identity ipv4-tunnel {
base "tunnel-type"; base "tunnel-type";
description description
"IPv4 tunnel type"; "IPv4 tunnel type";
} }
identity ipv6-tunnel { identity ipv6-tunnel {
skipping to change at page 30, line 14 skipping to change at page 30, line 14
typedef tunnel-type-def { typedef tunnel-type-def {
type identityref { type identityref {
base "tunnel-type"; base "tunnel-type";
} }
description description
"Tunnel type def."; "Tunnel type def.";
} }
identity route-state { identity route-state {
description description
"Base identify from which all route "Base identity from which all route
states are derived."; states are derived.";
} }
identity active { identity active {
base "route-state"; base "route-state";
description description
"Active state."; "Active state.";
} }
identity inactive { identity inactive {
skipping to change at page 30, line 40 skipping to change at page 30, line 40
typedef route-state-def { typedef route-state-def {
type identityref { type identityref {
base "route-state"; base "route-state";
} }
description description
"Route state def."; "Route state def.";
} }
identity nexthop-state { identity nexthop-state {
description description
"Base identify from which all nexthop "Base identity from which all nexthop
states are derived."; states are derived.";
} }
identity resolved { identity resolved {
base "nexthop-state"; base "nexthop-state";
description description
"Reolved nexthop state."; "Reolved nexthop state.";
} }
identity unresolved { identity unresolved {
skipping to change at page 31, line 18 skipping to change at page 31, line 18
typedef nexthop-state-def { typedef nexthop-state-def {
type identityref { type identityref {
base "nexthop-state"; base "nexthop-state";
} }
description description
"Nexthop state def."; "Nexthop state def.";
} }
identity route-installed-state { identity route-installed-state {
description description
"Base identify from which all route "Base identity from which all route
installed states are derived."; installed states are derived.";
} }
identity uninstalled { identity uninstalled {
base "route-installed-state"; base "route-installed-state";
description description
"Uninstalled state."; "Uninstalled state.";
} }
identity installed { identity installed {
skipping to change at page 31, line 46 skipping to change at page 31, line 46
base "route-installed-state"; base "route-installed-state";
} }
description description
"Route installed state def."; "Route installed state def.";
} }
//Route change reason identities //Route change reason identities
identity route-change-reason { identity route-change-reason {
description description
"Base identify from which all route change "Base identity from which all route change
reasons are derived."; reasons are derived.";
} }
identity lower-route-preference { identity lower-route-preference {
base "route-change-reason"; base "route-change-reason";
description description
"This route was installed in the FIB because it had "This route was installed in the FIB because it had
a lower route preference value (and thus a higher a lower route preference value (and thus was more
route preference) than the route it replaced."; preferred) than the route it replaced.";
} }
identity higher-route-preference { identity higher-route-preference {
base "route-change-reason"; base "route-change-reason";
description description
"This route was uninstalled from the FIB because it had "This route was uninstalled from the FIB because it had
a higher route preference value (and thus a lower a higher route preference value (and thus was less
route preference) than the route that replaced it."; preferred) than the route that replaced it.";
} }
identity resolved-nexthop { identity resolved-nexthop {
base "route-change-reason"; base "route-change-reason";
description description
"This route was made active because at least "This route was made active because at least
one of its nexthops was resolved."; one of its nexthops was resolved.";
} }
identity unresolved-nexthop { identity unresolved-nexthop {
skipping to change at page 32, line 46 skipping to change at page 32, line 46
description description
"Route change reason def."; "Route change reason def.";
} }
typedef nexthop-preference-def { typedef nexthop-preference-def {
type uint8 { type uint8 {
range "1..99"; range "1..99";
} }
description description
"Nexthop-preference is used for protection schemes. "Nexthop-preference is used for protection schemes.
It is an integer value between 1 and 99. A lower It is an integer value between 1 and 99. Lower
value indicates higher preference. To download N values are more preferred. To download N
nexthops to the FIB, the N nexthops with the lowest nexthops to the FIB, the N nexthops with the lowest
value are selected."; value are selected. If there are more than N
nexthops that have the same preference, an
implementation of i2rs client should select N
nexthops and download them, as for how to select
the nexthops is left to the implementations.";
} }
typedef nexthop-lb-weight-def { typedef nexthop-lb-weight-def {
type uint8 { type uint8 {
range "1..99"; range "1..99";
} }
description description
"Nhop-lb-weight is a number between 1 and 99."; "Nexthop-lb-weight is used for load-balancing.
Each list member MUST be assigned a weight
between 1 and 99. The weight determines the
proportion of traffic to be sent over a nexthop
used for forwarding as a ratio of the weight of
this nexthop divided by the weights of all the
nexthops of this route that are used for forwarding.
To perform equal load-balancing, one MAY specify
a weight of 0 for all the member nexthops. The
value 0 is reserved for equal load-balancing
and if applied, MUST be applied to all member nexthops.";
} }
typedef nexthop-ref { typedef nexthop-ref {
type leafref { type leafref {
path "/iir:routing-instance" + path "/iir:routing-instance" +
"/iir:rib-list" + "/iir:rib-list" +
"/iir:route-list" + "/iir:route-list" +
"/iir:nexthop" + "/iir:nexthop" +
"/iir:nexthop-id"; "/iir:nexthop-id";
} }
skipping to change at page 36, line 35 skipping to change at page 36, line 49
description description
"The interface used for matching."; "The interface used for matching.";
} }
} }
} }
} }
} }
grouping route { grouping route {
description description
"The common attributes used for all types of route."; "The common attributes used for all types of routes.";
uses route-prefix; uses route-prefix;
container nexthop { container nexthop {
description description
"The nexthop of the route."; "The nexthop of the route.";
uses nexthop; uses nexthop;
} }
container route-statistic { //In the information model, it is called route-statistic
container route-status {
description description
"The statistic information of the route."; "The status information of the route.";
leaf route-state { leaf route-state {
type route-state-def; type route-state-def;
config false; config false;
description description
"Indicate a route's state: Active or Inactive."; "Indicate a route's state: Active or Inactive.";
} }
leaf route-installed-state { leaf route-installed-state {
type route-installed-state-def; type route-installed-state-def;
config false; config false;
description description
"Indicate that a route's installed states: "Indicate that a route's installed states:
Installed or uninstalled."; Installed or uninstalled.";
} }
leaf route-reason { leaf route-reason {
type route-change-reason-def; type route-change-reason-def;
config false; config false;
description description
"Indicate the route reason."; "Indicate the reason that causes the route change.";
} }
} }
container route-attributes { container route-attributes {
description description
"Route attributes."; "Route attributes.";
uses route-attributes; uses route-attributes;
} }
container route-vendor-attributes { container route-vendor-attributes {
description description
"Route vendor attributes."; "Route vendor attributes.";
uses route-vendor-attributes; uses route-vendor-attributes;
} }
} }
grouping nexthop-list { grouping nexthop-list {
description description
"A generic nexthop list."; "A generic nexthop list.";
list nexthop-list { list nexthop-list {
key "nexthop-member-id"; key "nexthop-member-id";
description description
"A list of nexthop."; "A list of nexthops.";
leaf nexthop-member-id { leaf nexthop-member-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"A nexthop identifier that points "A nexthop identifier that points
to a nexthop list member. to a nexthop list member.
A nexthop list member is a nexthop."; A nexthop list member is a nexthop.";
} }
} }
} }
skipping to change at page 38, line 19 skipping to change at page 38, line 34
description description
"A nexthop identifier that points "A nexthop identifier that points
to a nexthop list member. to a nexthop list member.
A nexthop list member is a nexthop."; A nexthop list member is a nexthop.";
} }
leaf nexthop-preference { leaf nexthop-preference {
type nexthop-preference-def; type nexthop-preference-def;
mandatory true; mandatory true;
description description
"Nexthop-preference is used for protection schemes. "Nexthop-preference is used for protection schemes.
It is an integer value between 1 and 99. A lower It is an integer value between 1 and 99. Lower
value indicates higher preference. To download a values are more preferred. To download a
primary/standby/tertiary group to the FIB, the primary/standby/tertiary group to the FIB, the
nexthops that are resolved and have two highest nexthops that are resolved and are most preferred
preferences are selected."; are selected.";
} }
} }
} }
grouping nexthop-list-w { grouping nexthop-list-w {
description description
"A nexthop list with weight parameter."; "A nexthop list with weight parameter.";
list nexthop-list { list nexthop-list {
key "nexthop-member-id"; key "nexthop-member-id";
description description
skipping to change at page 40, line 10 skipping to change at page 40, line 26
case nexthop-protection { case nexthop-protection {
if-feature nexthop-protection; if-feature nexthop-protection;
container nexthop-protection { container nexthop-protection {
description description
"A protection nexthop."; "A protection nexthop.";
uses nexthop-list-p; uses nexthop-list-p;
} }
} }
case nexthop-load-balance { case nexthop-load-balance {
if-feature nexthop-load-balance; if-feature nexthop-load-balance;
container nexthop-lbs { container nexthop-lb {
description description
"A load balance nexthop."; "A load balance nexthop.";
uses nexthop-list-w; uses nexthop-list-w;
} }
} }
} }
} }
grouping nexthop-base { grouping nexthop-base {
description description
skipping to change at page 41, line 24 skipping to change at page 41, line 40
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
leaf ipv4-address { leaf ipv4-address {
type inet:ipv4-address; type inet:ipv4-address;
mandatory true; mandatory true;
description description
"The nexthop points to an interface with "The nexthop points to an interface with
an IPv4 address."; an IPv4 address.";
} }
description description
"The nexthop is an Egress-interface and an ip "The nexthop is an egress-interface and an IP
address.This can be used in cases e.g.where address. This can be used in cases e.g. where
the ip address is a link-local address."; the IP address is a link-local address.";
} }
} }
case egress-interface-ipv6-nexthop { case egress-interface-ipv6-nexthop {
container egress-interface-ipv6-address { container egress-interface-ipv6-address {
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
mandatory true; mandatory true;
description description
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
leaf ipv6-address { leaf ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description description
"The nexthop points to an interface with "The nexthop points to an interface with
an IPv6 address."; an IPv6 address.";
} }
description description
"The nexthop is an Egress-interface and an ip "The nexthop is an egress-interface and an IP
address.This can be used in cases e.g.where address. This can be used in cases e.g. where
the ip address is a link-local address."; the IP address is a link-local address.";
} }
} }
case egress-interface-mac-nexthop { case egress-interface-mac-nexthop {
container egress-interface-mac-address { container egress-interface-mac-address {
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
mandatory true; mandatory true;
description description
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
leaf ieee-mac-address { leaf ieee-mac-address {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The nexthop points to an interface with "The nexthop points to an interface with
a specific mac-address."; a specific mac-address.";
} }
description description
"The egress interface must be an ethernet "The egress interface must be an Ethernet
interface. Address resolution is not required interface. Address resolution is not required
for this nexthop."; for this nexthop.";
} }
} }
case tunnel-encap-nexthop { case tunnel-encap-nexthop {
if-feature nexthop-tunnel; if-feature nexthop-tunnel;
container tunnel-encap { container tunnel-encap {
uses tunnel-encap; uses tunnel-encap;
description description
"This can be an encap representing an IP tunnel or "This can be an encap representing an IP tunnel or
skipping to change at page 43, line 4 skipping to change at page 43, line 21
description description
"This is to specify decapsulating a tunnel header."; "This is to specify decapsulating a tunnel header.";
} }
} }
case logical-tunnel-nexthop { case logical-tunnel-nexthop {
if-feature nexthop-tunnel; if-feature nexthop-tunnel;
container logical-tunnel { container logical-tunnel {
uses logical-tunnel; uses logical-tunnel;
description description
"This can be a MPLS LSP or a GRE tunnel (or others "This can be a MPLS LSP or a GRE tunnel (or others
as defined in This document), that is represented as defined in this document), that is represented
by a unique identifier (e.g. name)."; by a unique identifier (e.g. name).";
} }
} }
case rib-name-nexthop { case rib-name-nexthop {
leaf rib-name { leaf rib-name {
type string; type string;
description description
"A nexthop pointing to a rib indicates that the "A nexthop pointing to a RIB indicates that the
route lookup needs to continue in The specified route lookup needs to continue in the specified
rib. This is a way to perform chained lookups."; rib. This is a way to perform chained lookups.";
} }
} }
case nexthop-identifier { case nexthop-identifier {
leaf nexthop-ref { leaf nexthop-ref {
type nexthop-ref; type nexthop-ref;
mandatory true; mandatory true;
description description
"A nexthop reference that points to a nexthop."; "A nexthop reference that points to a nexthop.";
} }
skipping to change at page 44, line 10 skipping to change at page 44, line 26
} }
} }
grouping ipv4-header { grouping ipv4-header {
description description
"The IPv4 header encapsulation information."; "The IPv4 header encapsulation information.";
leaf src-ipv4-address { leaf src-ipv4-address {
type inet:ipv4-address; type inet:ipv4-address;
mandatory true; mandatory true;
description description
"The source ip address of the header."; "The source IP address of the header.";
} }
leaf dest-ipv4-address { leaf dest-ipv4-address {
type inet:ipv4-address; type inet:ipv4-address;
mandatory true; mandatory true;
description description
"The destination ip address of the header."; "The destination IP address of the header.";
} }
leaf protocol { leaf protocol {
type uint8; type uint8;
mandatory true; mandatory true;
description description
"The protocol id of the header."; "The protocol id of the header.";
} }
leaf ttl { leaf ttl {
type uint8; type uint8;
description description
skipping to change at page 44, line 35 skipping to change at page 45, line 4
type uint8; type uint8;
description description
"The TTL of the header."; "The TTL of the header.";
} }
leaf dscp { leaf dscp {
type uint8; type uint8;
description description
"The DSCP field of the header."; "The DSCP field of the header.";
} }
} }
grouping ipv6-header { grouping ipv6-header {
description description
"The IPv6 header encapsulation information."; "The IPv6 header encapsulation information.";
leaf src-ipv6-address { leaf src-ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description description
"The source ip address of the header."; "The source IP address of the header.";
} }
leaf dest-ipv6-address { leaf dest-ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description description
"The destination ip address of the header."; "The destination IP address of the header.";
} }
leaf next-header { leaf next-header {
type uint8; type uint8;
mandatory true; mandatory true;
description description
"The next header of the IPv6 header."; "The next header of the IPv6 header.";
} }
leaf traffic-class { leaf traffic-class {
type uint8; type uint8;
description description
skipping to change at page 46, line 4 skipping to change at page 46, line 20
mandatory true; mandatory true;
description description
"The subnet identifier of the NvGRE header."; "The subnet identifier of the NvGRE header.";
} }
leaf flow-id { leaf flow-id {
type uint16; type uint16;
description description
"The flow identifier of the NvGRE header."; "The flow identifier of the NvGRE header.";
} }
} }
grouping vxlan-header { grouping vxlan-header {
description description
"The VxLAN encapsulation header information."; "The VxLAN encapsulation header information.";
choice vxlan-type { choice vxlan-type {
description description
"NvGRE can use eigher IPv4 "NvGRE can use either IPv4
or IPv6 header for encapsulation."; or IPv6 header for encapsulation.";
case ipv4 { case ipv4 {
uses ipv4-header; uses ipv4-header;
} }
case ipv6 { case ipv6 {
uses ipv6-header; uses ipv6-header;
} }
} }
leaf vxlan-identifier { leaf vxlan-identifier {
type uint32; type uint32;
skipping to change at page 46, line 37 skipping to change at page 47, line 6
description description
"The GRE encapsulation header information."; "The GRE encapsulation header information.";
choice dest-address-type { choice dest-address-type {
description description
"GRE options: IPv4 and IPv6"; "GRE options: IPv4 and IPv6";
case ipv4 { case ipv4 {
leaf ipv4-dest { leaf ipv4-dest {
type inet:ipv4-address; type inet:ipv4-address;
mandatory true; mandatory true;
description description
"The destination ip address of the GRE header."; "The destination IP address of the GRE header.";
} }
} }
case ipv6 { case ipv6 {
leaf ipv6-dest { leaf ipv6-dest {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description description
"The destination ip address of the GRE header."; "The destination IP address of the GRE header.";
} }
} }
} }
leaf protocol-type { leaf protocol-type {
type uint16; type uint16;
mandatory true; mandatory true;
description description
"The protocol type of the GRE header."; "The protocol type of the GRE header.";
} }
leaf key { leaf key {
skipping to change at page 48, line 5 skipping to change at page 48, line 22
"The s-bit of the label to be pushed. "; "The s-bit of the label to be pushed. ";
} }
leaf tc-value { leaf tc-value {
type uint8; type uint8;
description description
"The traffic class value of the label to be pushed."; "The traffic class value of the label to be pushed.";
} }
leaf ttl-value { leaf ttl-value {
type uint8; type uint8;
description description
"The TTL value of the label to to be pushed."; "The TTL value of the label to be pushed.";
} }
} }
} }
case label-swap { case label-swap {
container label-swap { container label-swap {
description description
"Label swap operation."; "Label swap operation.";
leaf in-label { leaf in-label {
type uint32; type uint32;
mandatory true; mandatory true;
skipping to change at page 48, line 35 skipping to change at page 49, line 4
leaf ttl-action { leaf ttl-action {
type ttl-action-def; type ttl-action-def;
description description
"The label ttl actions: "The label ttl actions:
- No-action, or - No-action, or
- Copy to inner label,or - Copy to inner label,or
- Decrease (the in label) by 1 and - Decrease (the in label) by 1 and
copy to the out label."; copy to the out label.";
} }
} }
} }
} }
} }
} }
grouping tunnel-encap{ grouping tunnel-encap{
description description
"Tunnel encapsulation inforamtion."; "Tunnel encapsulation information.";
choice tunnel-type { choice tunnel-type {
description description
"Tunnel options for next-hops."; "Tunnel options for next-hops.";
case ipv4 { case ipv4 {
if-feature ipv4-tunnel; if-feature ipv4-tunnel;
container ipv4-header { container ipv4-header {
uses ipv4-header; uses ipv4-header;
description description
"IPv4 header."; "IPv4 header.";
} }
} }
case ipv6 { case ipv6 {
if-feature ipv6-tunnel; if-feature ipv6-tunnel;
container ipv6-header { container ipv6-header {
uses ipv6-header; uses ipv6-header;
description description
"IPv6 header."; "IPv6 header.";
} }
} }
skipping to change at page 49, line 52 skipping to change at page 50, line 20
uses vxlan-header; uses vxlan-header;
description description
"VxLAN header."; "VxLAN header.";
} }
} }
} }
} }
grouping tunnel-decap { grouping tunnel-decap {
description description
"Tunnel decapsulation inforamtion."; "Tunnel decapsulation information.";
choice tunnel-type { choice tunnel-type {
description description
"Nexthop tunnel type options."; "Nexthop tunnel type options.";
case ipv4 { case ipv4 {
if-feature ipv4-tunnel; if-feature ipv4-tunnel;
container ipv4-decap { container ipv4-decap {
description description
"IPv4 decap."; "IPv4 decap.";
leaf ipv4-decap { leaf ipv4-decap {
type tunnel-decap-action-def; type tunnel-decap-action-def;
skipping to change at page 51, line 29 skipping to change at page 51, line 46
description description
"Route attributes."; "Route attributes.";
leaf route-preference { leaf route-preference {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"ROUTE_PREFERENCE: This is a numerical value that "ROUTE_PREFERENCE: This is a numerical value that
allows for comparing routes from different allows for comparing routes from different
protocols. Static configuration is also protocols. Static configuration is also
considered a protocol for the purpose of this considered a protocol for the purpose of this
field. It iss also known as administrative-distance. field. It is also known as administrative-distance.
The lower the value, the higher the preference."; The lower the value, the higher the preference.";
} }
leaf local-only { leaf local-only {
type boolean ; type boolean ;
mandatory true; mandatory true;
description description
"Indicate whether the attributes is local only."; "Indicate whether the attributes is local only.";
} }
container address-family-route-attributes{ container address-family-route-attributes{
description description
skipping to change at page 52, line 4 skipping to change at page 52, line 21
description description
"Address family related route attributes."; "Address family related route attributes.";
case ip-route-attributes { case ip-route-attributes {
} }
case mpls-route-attributes { case mpls-route-attributes {
} }
case ethernet-route-attributes { case ethernet-route-attributes {
} }
} }
} }
} }
container routing-instance { container routing-instance {
description description
"A routing instance, in the context of "A routing instance, in the context of
the RIB information model, is a collection the RIB information model, is a collection
of RIBs, interfaces, and routing parameters"; of RIBs, interfaces, and routing parameters";
leaf name { leaf name {
type string; type string;
mandatory true;
description description
"The name of the routing instance.This MUST "The name of the routing instance. This MUST
be unique across all routing instances in be unique across all routing instances in
a given network device."; a given network device.";
} }
list interface-list { list interface-list {
key "name"; key "name";
description description
"This represents the list of interfaces associated "This represents the list of interfaces associated
with this routing instance. The interface list helps with this routing instance. The interface list helps
constrain the boundaries of packet forwarding. constrain the boundaries of packet forwarding.
Packets coming on these interfaces are directly Packets coming on these interfaces are directly
skipping to change at page 53, line 8 skipping to change at page 53, line 24
key "name"; key "name";
description description
"A list of RIBs that are associated with the routing "A list of RIBs that are associated with the routing
instance."; instance.";
leaf name { leaf name {
type string; type string;
mandatory true; mandatory true;
description description
"A reference to the name of each rib."; "A reference to the name of each rib.";
} }
leaf rib-family { leaf address-family {
type rib-family-def; type rib-family-def;
mandatory true; mandatory true;
description description
"The address family of a rib."; "The address family of a rib.";
} }
leaf ip-rpf-check { leaf ip-rpf-check {
type boolean; type boolean;
description description
"Each RIB can be optionally associated with a "Each RIB can be optionally associated with a
ENABLE_IP_RPF_CHECK attribute that enables Reverse ENABLE_IP_RPF_CHECK attribute that enables Reverse
path forwarding (RPF) checks on all IP routes in that path forwarding (RPF) checks on all IP routes in that
RIB. Reverse path forwarding (RPF) check is used to RIB. Reverse path forwarding (RPF) check is used to
prevent spoofing and limit malicious traffic."; prevent spoofing and limit malicious traffic.";
} }
list route-list { list route-list {
key "route-index"; key "route-index";
description description
"A list of routes of a rib."; "A list of routes of a rib.";
uses route; uses route;
} }
// This is a list that maintains the nexthops added to the rib.
uses nexthop-list;
} }
} }
/*RPC Operations*/ //RPC Operations
rpc rib-add { rpc rib-add {
description description
"To add a rib to a instance"; "To add a RIB to a instance";
input { input {
leaf rib-name { leaf name {
type string; type string;
mandatory true; mandatory true;
description description
"A reference to the name of the rib "A reference to the name of the RIB
that is to be added."; that is to be added.";
} }
leaf rib-family { leaf address-family {
type rib-family-def; type rib-family-def;
mandatory true; mandatory true;
description description
"The address family of the rib."; "The address family of the rib.";
} }
leaf ip-rpf-check { leaf ip-rpf-check {
type boolean; type boolean;
description description
"Each RIB can be optionally associated with a "Each RIB can be optionally associated with a
ENABLE_IP_RPF_CHECK attribute that enables Reverse ENABLE_IP_RPF_CHECK attribute that enables Reverse
skipping to change at page 54, line 31 skipping to change at page 54, line 49
leaf reason { leaf reason {
type string; type string;
description description
"The specific reason that causes the failure."; "The specific reason that causes the failure.";
} }
} }
} }
rpc rib-delete { rpc rib-delete {
description description
"To delete a rib from a routing instance. "To delete a RIB from a routing instance.
After deleting the rib, all routes installed After deleting the rib, all routes installed
in the rib will be deleted as well."; in the RIB will be deleted as well.";
input { input {
leaf rib-name { leaf name {
type string; type string;
mandatory true; mandatory true;
description description
"A reference to the name of the rib "A reference to the name of the RIB
that is to be deleted."; that is to be deleted.";
} }
} }
output { output {
leaf result { leaf result {
type boolean; type boolean;
mandatory true; mandatory true;
description description
"Return the result of the rib-delete operation. "Return the result of the rib-delete operation.
true - success; true - success;
skipping to change at page 58, line 24 skipping to change at page 58, line 43
container updated-route-attr { container updated-route-attr {
uses route-attributes; uses route-attributes;
description description
"The route attributes used for updating."; "The route attributes used for updating.";
} }
} }
case update-route-vendor-attributes { case update-route-vendor-attributes {
container updated-route-vendor-attr { container updated-route-vendor-attr {
uses route-vendor-attributes; uses route-vendor-attributes;
description description
"The vender route attributes used for updating."; "The vendor route attributes used for updating.";
} }
} }
} }
} }
rpc route-update { rpc route-update {
description description
"To update a route or a list of route of a rib. "To update a route or a list of route of a rib.
The inputs: The inputs:
1. The match conditions, could be: 1. The match conditions, could be:
a. route prefix, or a. route prefix, or
b. route attributes, or b. route attributes, or
c. nexthop; c. nexthop;
2. The update parameters to be used: 2. The update parameters to be used:
a. new nexthop; a. new nexthop;
b. new route attributes;nexthop b. new route attributes;nexthop
Actions: Actions:
1. update the nexthop 1. update the nexthop
2. update the route attributes 2. update the route attributes
skipping to change at page 61, line 4 skipping to change at page 61, line 22
} }
} }
output { output {
uses route-operation-state; uses route-operation-state;
} }
} }
rpc nh-add { rpc nh-add {
description description
"To add a nexthop to a rib. "To add a nexthop to a rib.
Inputs parameters: Inputs parameters:
1. rib name 1. RIB name
2. nexthop; 2. nexthop;
Actions: Actions:
Add the nexthop to the rib Add the nexthop to the RIB
Outputs: Outputs:
1.Operation result: 1.Operation result:
true - success true - success
false - failed; false - failed;
2. nexthop identifier."; 2. nexthop identifier.";
input { input {
leaf rib-name { leaf rib-name {
type string; type string;
mandatory true; mandatory true;
description description
skipping to change at page 61, line 41 skipping to change at page 62, line 10
false - failed;"; false - failed;";
} }
leaf reason { leaf reason {
type string; type string;
description description
"The specific reason that causes the failure."; "The specific reason that causes the failure.";
} }
leaf nexthop-id { leaf nexthop-id {
type uint32; type uint32;
description description
"A nexthop identifer that is allocated to the nexthop."; "A nexthop identifier that is allocated to the nexthop.";
} }
} }
} }
rpc nh-delete { rpc nh-delete {
description description
"To delete a nexthop from a rib"; "To delete a nexthop from a rib";
input { input {
leaf rib-name { leaf rib-name {
type string; type string;
skipping to change at page 63, line 6 skipping to change at page 63, line 25
notification route-change { notification route-change {
description description
"Route change notification."; "Route change notification.";
leaf rib-name { leaf rib-name {
type string; type string;
mandatory true; mandatory true;
description description
"A reference to the name of a rib."; "A reference to the name of a rib.";
} }
leaf rib-family { leaf address-family {
type rib-family-def; type rib-family-def;
mandatory true; mandatory true;
description description
"A reference to address family of a rib."; "The address family of a rib.";
} }
uses route-prefix; uses route-prefix;
leaf route-installed-state { leaf route-installed-state {
type route-installed-state-def; type route-installed-state-def;
mandatory true; mandatory true;
description description
"Indicates whether the route got installed in the FIB."; "Indicates whether the route got installed in the FIB.";
} }
leaf route-state { leaf route-state {
type route-state-def; type route-state-def;
skipping to change at page 63, line 48 skipping to change at page 64, line 19
"The reason that causes the route change."; "The reason that causes the route change.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4. IANA Considerations 4. IANA Considerations
This document requests to register a URI in the "IETF XML registry" This document requests to register a URI in the "ns" registry with
[RFC3688]: the "IETF XML registry" [RFC3688]:
-------------------------------------------------------------------- --------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib URI: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib
Registrant Contact: The IESG.XML: Registrant Contact: The IESG.
N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
-------------------------------------------------------------------- --------------------------------------------------------------------
This document requests to register a YANG module in the "YANG Module This document requests to register a YANG module in the "YANG Module
Names registry" [RFC6020]: Names registry" [RFC6020]:
-------------------------------------------------------------------- --------------------------------------------------------------------
name: ietf-i2rs-rib name: ietf-i2rs-rib
namespace: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib namespace: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib
prefix: iir prefix: iir
reference: RFC XXXX reference: RFC XXXX
-------------------------------------------------------------------- --------------------------------------------------------------------
5. Security Considerations 5. Security Considerations
This document introduces no extra new security threat and SHOULD I2RS protocol provides read and write access to the information and
follow the security requirements as stated in state (e.g., RIB) within the routing process that exists inside the
[I-D.ietf-i2rs-architecture]. routing elements. These information and state are normally
considered sensitive or vulnerable. Improper write operations to
these information and state can have negative effects on the network.
The I2RS protocol will provide security mechanisms as required in
[I-D.ietf-i2rs-security-environment-reqs] and
[I-D.ietf-i2rs-protocol-security-requirements].
The YANG data model defined in this document itself will not
introduce extra security issues.
6. Contributors 6. Contributors
The following individuals also contribute to this document. The following individuals also contribute to this document.
o Zekun He, Tencent Holdings Ltd o Zekun He, Tencent Holdings Ltd
o Sujian Lu, Tencent Holdings Ltd o Sujian Lu, Tencent Holdings Ltd
o Jeffery Zhang, Juniper Networks o Jeffery Zhang, Juniper Networks
7. Acknowledgements 7. Acknowledgements
The authors would like to thank Chris Bowers for his review, The authors would like to thank Chris Bowers and John Scudder for his
suggestion and comments to this document. review, suggestion and comments to this document.
8. References 8. References
8.1. Normative References 8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <http://www.rfc-editor.org/info/rfc2119>.
skipping to change at page 65, line 23 skipping to change at page 65, line 47
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013, RFC 6991, DOI 10.17487/RFC6991, July 2013,
<http://www.rfc-editor.org/info/rfc6991>. <http://www.rfc-editor.org/info/rfc6991>.
8.2. Informative References 8.2. Informative References
[I-D.ietf-i2rs-architecture] [I-D.ietf-i2rs-architecture]
Atlas, A., Halpern, J., Hares, S., Ward, D., and T. Atlas, A., Halpern, J., Hares, S., Ward, D., and T.
Nadeau, "An Architecture for the Interface to the Routing Nadeau, "An Architecture for the Interface to the Routing
System", draft-ietf-i2rs-architecture-13 (work in System", draft-ietf-i2rs-architecture-15 (work in
progress), February 2016. progress), April 2016.
[I-D.ietf-i2rs-protocol-security-requirements]
Hares, S., Migault, D., and J. Halpern, "I2RS Security
Related Requirements", draft-ietf-i2rs-protocol-security-
requirements-06 (work in progress), May 2016.
[I-D.ietf-i2rs-rib-info-model] [I-D.ietf-i2rs-rib-info-model]
Bahadur, N., Kini, S., and J. Medved, "Routing Information Bahadur, N., Kini, S., and J. Medved, "Routing Information
Base Info Model", draft-ietf-i2rs-rib-info-model-08 (work Base Info Model", draft-ietf-i2rs-rib-info-model-08 (work
in progress), October 2015. in progress), October 2015.
[I-D.ietf-i2rs-security-environment-reqs]
Migault, D., Halpern, J., and S. Hares, "I2RS Environment
Security Requirements", draft-ietf-i2rs-security-
environment-reqs-01 (work in progress), April 2016.
[I-D.ietf-i2rs-usecase-reqs-summary] [I-D.ietf-i2rs-usecase-reqs-summary]
Hares, S. and M. Chen, "Summary of I2RS Use Case Hares, S. and M. Chen, "Summary of I2RS Use Case
Requirements", draft-ietf-i2rs-usecase-reqs-summary-02 Requirements", draft-ietf-i2rs-usecase-reqs-summary-02
(work in progress), March 2016. (work in progress), March 2016.
Authors' Addresses Authors' Addresses
Lixing Wang Lixing Wang
Individual Individual
 End of changes. 156 change blocks. 
262 lines changed or deleted 298 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/