summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8431.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8431.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8431.txt')
-rw-r--r--doc/rfc/rfc8431.txt3979
1 files changed, 3979 insertions, 0 deletions
diff --git a/doc/rfc/rfc8431.txt b/doc/rfc/rfc8431.txt
new file mode 100644
index 0000000..544332d
--- /dev/null
+++ b/doc/rfc/rfc8431.txt
@@ -0,0 +1,3979 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) L. Wang
+Request for Comments: 8431 Individual
+Category: Standards Track M. Chen
+ISSN: 2070-1721 Huawei
+ A. Dass
+ Ericsson
+ H. Ananthakrishnan
+ Netflix
+ S. Kini
+ Individual
+ N. Bahadur
+ Uber
+ September 2018
+
+
+ A YANG Data Model for the Routing Information Base (RIB)
+
+Abstract
+
+ This document defines a YANG data model for the Routing Information
+ Base (RIB) that aligns with the Interface to the Routing System
+ (I2RS) RIB information model.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8431.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 1]
+
+RFC 8431 RIB Data Model September 2018
+
+
+Copyright Notice
+
+ Copyright (c) 2018 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3
+ 1.2. Definitions and Abbreviations . . . . . . . . . . . . . . 3
+ 1.3. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. Model Structure . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2.1. RIB Capability . . . . . . . . . . . . . . . . . . . . . 8
+ 2.2. Routing Instance and RIB . . . . . . . . . . . . . . . . 8
+ 2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+ 2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 11
+ 2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 15
+ 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 20
+ 3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 22
+ 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 67
+ 5. Security Considerations . . . . . . . . . . . . . . . . . . . 67
+ 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 68
+ 6.1. Normative References . . . . . . . . . . . . . . . . . . 68
+ 6.2. Informative References . . . . . . . . . . . . . . . . . 69
+ Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 70
+ Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 70
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 71
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 2]
+
+RFC 8431 RIB Data Model September 2018
+
+
+1. Introduction
+
+ The Interface to the Routing System (I2RS) [RFC7921] provides read
+ and write access to the information and state within the routing
+ process that exists inside the routing elements; this is achieved via
+ protocol message exchange between I2RS clients and I2RS agents
+ associated with the routing system. One of the functions of I2RS is
+ to read and write data of the Routing Information Base (RIB).
+ [I2RS-REQS] introduces a set of RIB use cases. The RIB information
+ model is defined in [RFC8430].
+
+ This document defines a YANG data model [RFC7950] [RFC6991] for the
+ RIB that satisfies the RIB use cases and aligns with the RIB
+ information model.
+
+1.1. Requirements Language
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+1.2. Definitions and Abbreviations
+
+ RIB: Routing Information Base
+
+ FIB: Forwarding Information Base
+
+ RPC: Remote Procedure Call
+
+ IM: Information Model. An abstract model of a conceptual domain,
+ which is independent of a specific implementation or data
+ representation.
+
+1.3. Tree Diagrams
+
+ Tree diagrams used in this document follow the notation defined in
+ [RFC8340].
+
+2. Model Structure
+
+ The following figure shows an overview of the structure tree of the
+ ietf-i2rs-rib module. To give a whole view of the structure tree,
+ some details of the tree are omitted. The relevant details are
+ introduced in the subsequent subsections.
+
+
+
+
+
+Wang, et al. Standards Track [Page 3]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ module: ietf-i2rs-rib
+ +--rw routing-instance
+ +--rw name string
+ +--rw interface-list* [name]
+ | +--rw name if:interface-ref
+ +--rw router-id? yang:dotted-quad
+ +--rw lookup-limit? uint8
+ +--rw rib-list* [name]
+ +--rw name string
+ +--rw address-family address-family-definition
+ +--rw ip-rpf-check? boolean
+ +--rw route-list* [route-index]
+ | +--rw route-index uint64
+ | +--rw match
+ | | +--rw (route-type)?
+ | | +--:(ipv4)
+ | | | ...
+ | | +--:(ipv6)
+ | | | ...
+ | | +--:(mpls-route)
+ | | | ...
+ | | +--:(mac-route)
+ | | | ...
+ | | +--:(interface-route)
+ | | ...
+ | +--rw nexthop
+ | | +--rw nexthop-id? uint32
+ | | +--rw sharing-flag? boolean
+ | | +--rw (nexthop-type)?
+ | | +--:(nexthop-base)
+ | | | ...
+ | | +--:(nexthop-chain) {nexthop-chain}?
+ | | | ...
+ | | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | | ...
+ | | +--:(nexthop-protection) {nexthop-protection}?
+ | | | ...
+ | | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | | ...
+ | +--rw route-status
+ | | ...
+ | +--rw route-attributes
+ | | ...
+ | +--rw route-vendor-attributes
+ +--rw nexthop-list* [nexthop-member-id]
+ +--rw nexthop-member-id uint32
+
+
+
+
+
+Wang, et al. Standards Track [Page 4]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ rpcs:
+ +---x rib-add
+ | +---w input
+ | | +---w name string
+ | | +---w address-family address-family-definition
+ | | +---w ip-rpf-check? boolean
+ | +--ro output
+ | +--ro result boolean
+ | +--ro reason? string
+ +---x rib-delete
+ | +---w input
+ | | +---w name string
+ | +--ro output
+ | +--ro result boolean
+ | +--ro reason? string
+ +---x route-add
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+ | | +---w routes
+ | | +---w route-list* [route-index]
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+ +---x route-delete
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+ | | +---w routes
+ | | +---w route-list* [route-index]
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+ +---x route-update
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+
+
+
+
+Wang, et al. Standards Track [Page 5]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ | | +---w (match-options)?
+ | | +--:(match-route-prefix)
+ | | | ...
+ | | +--:(match-route-attributes)
+ | | | ...
+ | | +--:(match-route-vendor-attributes) {...}?
+ | | | ...
+ | | +--:(match-nexthop)
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+ +---x nh-add
+ | +---w input
+ | | +---w rib-name string
+ | | +---w nexthop-id? uint32
+ | | +---w sharing-flag? boolean
+ | | +---w (nexthop-type)?
+ | | +--:(nexthop-base)
+ | | | ...
+ | | +--:(nexthop-chain) {nexthop-chain}?
+ | | | ...
+ | | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | | ...
+ | | +--:(nexthop-protection) {nexthop-protection}?
+ | | | ...
+ | | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | | ...
+ | +--ro output
+ | +--ro result boolean
+ | +--ro reason? string
+ | +--ro nexthop-id? uint32
+ +---x nh-delete
+ +---w input
+ | +---w rib-name string
+ | +---w nexthop-id? uint32
+ | +---w sharing-flag? boolean
+ | +---w (nexthop-type)?
+ | +--:(nexthop-base)
+ | | ...
+ | +--:(nexthop-chain) {nexthop-chain}?
+ | | ...
+ | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | ...
+
+
+
+Wang, et al. Standards Track [Page 6]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ | +--:(nexthop-protection) {nexthop-protection}?
+ | | ...
+ | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | ...
+ +--ro output
+ +--ro result boolean
+ +--ro reason? string
+ notifications:
+ +---n nexthop-resolution-status-change
+ | +--ro nexthop
+ | | +--ro nexthop-id? uint32
+ | | +--ro sharing-flag? boolean
+ | | +--ro (nexthop-type)?
+ | | +--:(nexthop-base)
+ | | | ...
+ | | +--:(nexthop-chain) {nexthop-chain}?
+ | | | ...
+ | | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | | ...
+ | | +--:(nexthop-protection) {nexthop-protection}?
+ | | | ...
+ | | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | | ...
+ | +--ro nexthop-state nexthop-state-definition
+ +---n route-change
+ +--ro rib-name string
+ +--ro address-family address-family-definition
+ +--ro route-index uint64
+ +--ro match
+ | +--ro (route-type)?
+ | +--:(ipv4)
+ | | ...
+ | +--:(ipv6)
+ | | ...
+ | +--:(mpls-route)
+ | | ...
+ | +--:(mac-route)
+ | | ...
+ | +--:(interface-route)
+ | ...
+ +--ro route-installed-state route-installed-state-definition
+ +--ro route-state route-state-definition
+ +--ro route-change-reasons* [route-change-reason]
+ +--ro route-change-reason route-change-reason-definition
+
+ Figure 1: Overview of I2RS RIB Module Structure
+
+
+
+
+
+Wang, et al. Standards Track [Page 7]
+
+RFC 8431 RIB Data Model September 2018
+
+
+2.1. RIB Capability
+
+ RIB capability negotiation is very important because not all of the
+ hardware will be able to support all kinds of nexthops, and there
+ might be a limitation on how many levels of lookup can be practically
+ performed. Therefore, a RIB data model needs to specify a way for an
+ external entity to learn about the functional capabilities of a
+ network device.
+
+ At the same time, nexthop chains can be used to specify multiple
+ headers over a packet before that particular packet is forwarded.
+ Not every network device will be able to support all kinds of nexthop
+ chains along with the arbitrary number of headers that are chained
+ together. The RIB data model needs a way to expose the nexthop
+ chaining capability supported by a given network device.
+
+ This module uses the feature and if-feature statements to achieve
+ above capability advertisement.
+
+2.2. Routing Instance and RIB
+
+ A routing instance, in the context of the RIB information model, is a
+ collection of RIBs, interfaces, and routing protocol parameters. A
+ routing instance creates a logical slice of the router and can allow
+ multiple different logical slices, across a set of routers, to
+ communicate with each other. The routing protocol parameters control
+ the information available in the RIBs. More details about a routing
+ instance can be found in Section 2.2 of [RFC8430].
+
+ For a routing instance, there can be multiple RIBs. Therefore, this
+ model uses "list" to express the RIBs. The structure tree is shown
+ below:
+
+ +--rw routing-instance
+ +--rw name string
+ +--rw interface-list* [name]
+ | +--rw name if:interface-ref
+ +--rw router-id? yang:dotted-quad
+ +--rw lookup-limit? uint8
+ +--rw rib-list* [name]
+ +--rw name string
+ +--rw address-family address-family-definition
+ +--rw ip-rpf-check? boolean
+ +--rw route-list* [route-index]
+ ... // refer to Section 2.3
+
+ Figure 2: Routing Instance Structure
+
+
+
+
+Wang, et al. Standards Track [Page 8]
+
+RFC 8431 RIB Data Model September 2018
+
+
+2.3. Route
+
+ A route is essentially a match condition and an action following that
+ match. The match condition specifies the kind of route (e.g., IPv4,
+ MPLS, Media Access Control (MAC), Interface, etc.) and the set of
+ fields to match on.
+
+ A route MUST contain the ROUTE_PREFERENCE attribute (see Section 2.3
+ of [RFC8430]).
+
+ In addition, a route MUST associate with the following status
+ attributes in responses to a RIB writing/reading operation:
+
+ o Active: Indicates whether a route has at least one fully resolved
+ nexthop and is therefore eligible for installation in the FIB.
+
+ o Installed: Indicates whether the route got installed in the FIB.
+
+ o Reason: Indicates the specific reason that caused the failure,
+ e.g., "Not authorized".
+
+ In addition, a route can be associated with one or more optional
+ route-attributes (e.g., route-vendor-attributes).
+
+ A RIB will have a number of routes, so the routes are expressed as a
+ list under a specific RIB. Each RIB has its own route list.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 9]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ +--rw route-list* [route-index]
+ +--rw route-index uint64
+ +--rw match
+ | +--rw (route-type)?
+ | +--:(ipv4)
+ | | +--rw ipv4
+ | | +--rw (ip-route-match-type)?
+ | | +--:(dest-ipv4-address)
+ | | | ...
+ | | +--:(src-ipv4-address)
+ | | | ...
+ | | +--:(dest-src-ipv4-address)
+ | | ...
+ | +--:(ipv6)
+ | | +--rw ipv6
+ | | +--rw (ip-route-match-type)?
+ | | +--:(dest-ipv6-address)
+ | | | ...
+ | | +--:(src-ipv6-address)
+ | | | ...
+ | | +--:(dest-src-ipv6-address)
+ | | ...
+ | +--:(mpls-route)
+ | | +--rw mpls-label uint32
+ | +--:(mac-route)
+ | | +--rw mac-address uint32
+ | +--:(interface-route)
+ | +--rw interface-identifier if:interface-ref
+ +--rw nexthop
+ | ...(refer to Section 2.4)
+
+ Figure 3: Routes Structure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 10]
+
+RFC 8431 RIB Data Model September 2018
+
+
+2.4. Nexthop
+
+ A nexthop represents an object resulting from a route lookup. As
+ illustrated in Figure 4 of [RFC8430], to support various use cases
+ (e.g., load-balancing, protection, multicast, or a combination of
+ them), the nexthop is modeled as a multilevel structure and supports
+ recursion. The first level of the nexthop includes the following
+ four types:
+
+ o Base: The "base" nexthop is the foundation of all other nexthop
+ types. It includes the following basic nexthops:
+
+ * nexthop-id
+
+ * IPv4 address
+
+ * IPv6 address
+
+ * egress-interface
+
+ * egress-interface with IPv4 address
+
+ * egress-interface with IPv6 address
+
+ * egress-interface with MAC address
+
+ * logical-tunnel
+
+ * tunnel-encapsulation
+
+ * tunnel-decapsulation
+
+ * rib-name
+
+ o Chain: The "chain" nexthop provides a way to perform multiple
+ operations on a packet by logically combining them.
+
+ o Load-Balance: The "load-balance" nexthop is designed for a load-
+ balance case where it normally will have multiple weighted
+ nexthops.
+
+ o Protection: The "protection" nexthop is designed for a protection
+ scenario where it normally will have primary and standby nexthop.
+
+ o Replicate: The "replicate" nexthop is designed for multiple
+ destinations forwarding.
+
+
+
+
+
+Wang, et al. Standards Track [Page 11]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ The structure tree of nexthop is shown in the following figures.
+
+ +--rw nexthop
+ | +--rw nexthop-id? uint32
+ | +--rw sharing-flag? boolean
+ | +--rw (nexthop-type)?
+ | +--:(nexthop-base)
+ | | ...(refer to Figure 5)
+ | +--:(nexthop-chain) {nexthop-chain}?
+ | | +--rw nexthop-chain
+ | | +--rw nexthop-list* [nexthop-member-id]
+ | | +--rw nexthop-member-id uint32
+ | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | +--rw nexthop-replicate
+ | | +--rw nexthop-list* [nexthop-member-id]
+ | | +--rw nexthop-member-id uint32
+ | +--:(nexthop-protection) {nexthop-protection}?
+ | | +--rw nexthop-protection
+ | | +--rw nexthop-list* [nexthop-member-id]
+ | | +--rw nexthop-member-id uint32
+ | | +--rw nexthop-preference nexthop-preference-definition
+ | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | +--rw nexthop-lb
+ | +--rw nexthop-list* [nexthop-member-id]
+ | +--rw nexthop-member-id uint32
+ | +--rw nexthop-lb-weight nexthop-lb-weight-definition
+
+ Figure 4: Nexthop Structure
+
+ Figure 5 (as shown below) is a subtree of nexthop. It's under the
+ nexthop base node and shows the structure of the "base" nexthop.
+
++--:(nexthop-base)
+| +--rw nexthop-base
+| +--rw (nexthop-base-type)?
+| +--:(special-nexthop)
+| | +--rw special? special-nexthop-definition
+| +--:(egress-interface-nexthop)
+| | +--rw outgoing-interface if:interface-ref
+| +--:(ipv4-address-nexthop)
+| | +--rw ipv4-address inet:ipv4-address
+| +--:(ipv6-address-nexthop)
+| | +--rw ipv6-address inet:ipv6-address
+| +--:(egress-interface-ipv4-nexthop)
+| | +--rw egress-interface-ipv4-address
+| | +--rw outgoing-interface if:interface-ref
+| | +--rw ipv4-address inet:ipv4-address
+
+
+
+
+Wang, et al. Standards Track [Page 12]
+
+RFC 8431 RIB Data Model September 2018
+
+
+| +--:(egress-interface-ipv6-nexthop)
+| | +--rw egress-interface-ipv6-address
+| | +--rw outgoing-interface if:interface-ref
+| | +--rw ipv6-address inet:ipv6-address
+| +--:(egress-interface-mac-nexthop)
+| | +--rw egress-interface-mac-address
+| | +--rw outgoing-interface if:interface-ref
+| | +--rw ieee-mac-address yang:mac-address
+| +--:(tunnel-encapsulation-nexthop) {nexthop-tunnel}?
+| | +--rw tunnel-encapsulation
+| | +--rw (tunnel-type)?
+| | +--:(ipv4) {ipv4-tunnel}?
+| | | +--rw ipv4-header
+| | | +--rw src-ipv4-address inet:ipv4-address
+| | | +--rw dest-ipv4-address inet:ipv4-address
+| | | +--rw protocol uint8
+| | | +--rw ttl? uint8
+| | | +--rw dscp? uint8
+| | +--:(ipv6) {ipv6-tunnel}?
+| | | +--rw ipv6-header
+| | | +--rw src-ipv6-address inet:ipv6-address
+| | | +--rw dest-ipv6-address inet:ipv6-address
+| | | +--rw next-header uint8
+| | | +--rw traffic-class? uint8
+| | | +--rw flow-label?
+| | | inet:ipv6-flow-label
+| | | +--rw hop-limit? uint8
+| | +--:(mpls) {mpls-tunnel}?
+| | | +--rw mpls-header
+| | | +--rw label-operations* [label-oper-id]
+| | | +--rw label-oper-id uint32
+| | | +--rw (label-actions)?
+| | | +--:(label-push)
+| | | | +--rw label-push
+| | | | +--rw label uint32
+| | | | +--rw s-bit? boolean
+| | | | +--rw tc-value? uint8
+| | | | +--rw ttl-value? uint8
+| | | +--:(label-swap)
+| | | +--rw label-swap
+| | | +--rw out-label uint32
+| | | +--rw ttl-action?
+| | | ttl-action-definition
+| | +--:(gre) {gre-tunnel}?
+| | | +--rw gre-header
+| | | +--rw (dest-address-type)?
+
+
+
+
+
+Wang, et al. Standards Track [Page 13]
+
+RFC 8431 RIB Data Model September 2018
+
+
+| | | | +--:(ipv4)
+| | | | | +--rw ipv4-dest inet:ipv4-address
+| | | | +--:(ipv6)
+| | | | +--rw ipv6-dest inet:ipv6-address
+| | | +--rw protocol-type uint16
+| | | +--rw key? uint64
+| | +--:(nvgre) {nvgre-tunnel}?
+| | | +--rw nvgre-header
+| | | +--rw (nvgre-type)?
+| | | | +--:(ipv4)
+| | | | | +--rw src-ipv4-address inet:ipv4-address
+| | | | | +--rw dest-ipv4-address inet:ipv4-address
+| | | | | +--rw protocol uint8
+| | | | | +--rw ttl? uint8
+| | | | | +--rw dscp? uint8
+| | | | +--:(ipv6)
+| | | | +--rw src-ipv6-address inet:ipv6-address
+| | | | +--rw dest-ipv6-address inet:ipv6-address
+| | | | +--rw next-header uint8
+| | | | +--rw traffic-class? uint8
+| | | | +--rw flow-label?
+| | | | inet:ipv6-flow-label
+| | | | +--rw hop-limit? uint8
+| | | +--rw virtual-subnet-id uint32
+| | | +--rw flow-id? uint8
+| | +--:(vxlan) {vxlan-tunnel}?
+| | +--rw vxlan-header
+| | +--rw (vxlan-type)?
+| | | +--:(ipv4)
+| | | | +--rw src-ipv4-address inet:ipv4-address
+| | | | +--rw dest-ipv4-address inet:ipv4-address
+| | | | +--rw protocol uint8
+| | | | +--rw ttl? uint8
+| | | | +--rw dscp? uint8
+| | | +--:(ipv6)
+| | | +--rw src-ipv6-address inet:ipv6-address
+| | | +--rw dest-ipv6-address inet:ipv6-address
+| | | +--rw next-header uint8
+| | | +--rw traffic-class? uint8
+| | | +--rw flow-label? inet:ipv6-flow-label
+| | | +--rw hop-limit? uint8
+| | +--rw vxlan-identifier uint32
+| +--:(tunnel-decapsulation-nexthop) {nexthop-tunnel}?
+| | +--rw tunnel-decapsulation
+| | +--rw (tunnel-type)?
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 14]
+
+RFC 8431 RIB Data Model September 2018
+
+
+| | +--:(ipv4) {ipv4-tunnel}?
+| | | +--rw ipv4-decapsulation
+| | | +--rw ipv4-decapsulation
+| | | tunnel-decapsulation-action-definition
+| | | +--rw ttl-action? ttl-action-definition
+| | +--:(ipv6) {ipv6-tunnel}?
+| | | +--rw ipv6-decapsulation
+| | | +--rw ipv6-decapsulation
+| | | tunnel-decapsulation-action-definition
+| | | +--rw hop-limit-action?
+| | | hop-limit-action-definition
+| | +--:(mpls) {mpls-tunnel}?
+| | +--rw label-pop
+| | +--rw label-pop mpls-label-action-definition
+| | +--rw ttl-action? ttl-action-definition
+| +--:(logical-tunnel-nexthop) {nexthop-tunnel}?
+| | +--rw logical-tunnel
+| | +--rw tunnel-type tunnel-type-definition
+| | +--rw tunnel-name string
+| +--:(rib-name-nexthop)
+| | +--rw rib-name? string
+| +--:(nexthop-identifier)
+| +--rw nexthop-ref nexthop-ref
+
+ Figure 5: Nexthop Base Structure
+
+2.5. RPC Operations
+
+ This module defines the following RPC operations:
+
+ o rib-add: Add a RIB to a routing instance. The following are
+ passed as the input parameters: the name of the RIB, the address
+ family of the RIB, and (optionally) whether the RPF check is
+ enabled. The output is the result of the add operation:
+
+ * true - success
+
+ * false - failed (when failed, the I2RS agent may return the
+ specific reason that caused the failure)
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 15]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ o rib-delete: Delete a RIB from a routing instance. When a RIB is
+ deleted, all routes installed in the RIB will be deleted. A rib-
+ name is passed as the input parameter. The output is the result
+ of the delete operation:
+
+ * true - success
+
+ * false - failed (when failed, the I2RS agent may return the
+ specific reason that caused the failure)
+
+ o route-add: Add a route or a set of routes to a RIB. The following
+ are passed as the input parameters: the name of the RIB, the route
+ prefix(es), the route-attributes, the route-vendor-attributes, the
+ nexthop, and the "whether to return failure details" indication.
+ Before calling the route-add rpc, it is required to call the nh-
+ add rpc to create and/or return the nexthop identifier. However,
+ in situations when the nexthop already exists and the nexthop-id
+ is known, this action is not expected. The output is a
+ combination of the route operation states while querying the
+ appropriate node in the data tree, which includes:
+
+ * success-count: the number of routes that were successfully
+ added;
+
+ * failed-count: the number of the routes that failed to be added;
+ and,
+
+ * failure-detail: this shows the specific routes that failed to
+ be added.
+
+ o route-delete: Delete a route or a set of routes from a RIB. The
+ following are passed as the input parameters: the name of the RIB,
+ the route prefix(es), and the "whether to return failure details"
+ indication. The output is a combination of route operation
+ states, which includes:
+
+ * success-count: the number of routes that were successfully
+ deleted;
+
+ * failed-count: the number of the routes that failed to be
+ deleted; and,
+
+ * failure-detail: this shows the specific routes that failed to
+ be deleted.
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 16]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ o route-update: Update a route or a set of routes. The following
+ are passed as the input parameters: the name of the RIB, the route
+ prefix(es), the route-attributes, the route-vendor-attributes, or
+ the nexthop. The match conditions can be either route prefix(es),
+ route-attributes, route-vendor-attributes, or nexthops. The
+ update actions include the following: update the nexthops, update
+ the route-attributes, and update the route-vendor-attributes. The
+ output is a combination of the route operation states, which
+ includes:
+
+ * success-count: the number of routes that were successfully
+ updated;
+
+ * failed-count: the number of the routes that failed to be
+ updated; and,
+
+ * failure-detail: this shows the specific routes that failed to
+ be updated.
+
+ o nh-add: Add a nexthop to a RIB. The following are passed as the
+ input parameters: the name of the RIB and the nexthop. The
+ network node is required to allocate a nexthop identifier to the
+ nexthop. The outputs include the result of the nexthop add
+ operation.
+
+ * true - success (when success, a nexthop identifier will be
+ returned to the I2RS client)
+
+ * false - failed (when failed, the I2RS agent may return the
+ specific reason that caused the failure)
+
+ o nh-delete: Delete a nexthop from a RIB. The following are passed
+ as the input parameters: the name of the RIB and a nexthop or
+ nexthop identifier. The output is the result of the delete
+ operation:
+
+ * true - success
+
+ * false - failed (when failed, the I2RS agent may return the
+ specific reason that caused the failure)
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 17]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ The structure tree of rpcs is shown in following figure.
+
+ rpcs:
+ +---x rib-add
+ | +---w input
+ | | +---w rib-name string
+ | | +---w address-family address-family-definition
+ | | +---w ip-rpf-check? boolean
+ | +--ro output
+ | +--ro result uint32
+ | +--ro reason? string
+ +---x rib-delete
+ | +---w input
+ | | +---w rib-name string
+ | +--ro output
+ | +--ro result uint32
+ | +--ro reason? string
+ +---x route-add
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+ | | +---w routes
+ | | +---w route-list* [route-index]
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+ +---x route-delete
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+ | | +---w routes
+ | | +---w route-list* [route-index]
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 18]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ +---x route-update
+ | +---w input
+ | | +---w return-failure-detail? boolean
+ | | +---w rib-name string
+ | | +---w (match-options)?
+ | | +--:(match-route-prefix)
+ | | | ...
+ | | +--:(match-route-attributes)
+ | | | ...
+ | | +--:(match-route-vendor-attributes) {...}?
+ | | | ...
+ | | +--:(match-nexthop)
+ | | ...
+ | +--ro output
+ | +--ro success-count uint32
+ | +--ro failed-count uint32
+ | +--ro failure-detail
+ | +--ro failed-routes* [route-index]
+ | +--ro route-index uint32
+ | +--ro error-code? uint32
+ +---x nh-add
+ | +---w input
+ | | +---w rib-name string
+ | | +---w nexthop-id? uint32
+ | | +---w sharing-flag? boolean
+ | | +---w (nexthop-type)?
+ | | ...
+ | +--ro output
+ | +--ro result uint32
+ | +--ro reason? string
+ | +--ro nexthop-id? uint32
+ +---x nh-delete
+ +---w input
+ | +---w rib-name string
+ | +---w nexthop-id? uint32
+ | +---w sharing-flag? boolean
+ | +---w (nexthop-type)?
+ | ...
+ +--ro output
+ +--ro result uint32
+ +--ro reason? string
+
+ Figure 6: RPCs Structure
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 19]
+
+RFC 8431 RIB Data Model September 2018
+
+
+2.6. Notifications
+
+ Asynchronous notifications are sent by the RIB manager of a network
+ device to an external entity when some event triggers on the network
+ device. An implementation of this RIB data model MUST support
+ sending two kinds of asynchronous notifications.
+
+ 1. Route change notification:
+
+ o Installed (indicates whether the route got installed in the FIB)
+
+ o Active (indicates whether a route has at least one fully resolved
+ nexthop and is therefore eligible for installation in the FIB)
+
+ o Reason (e.g., "Not authorized")
+
+ 2. Nexthop resolution status notification
+
+ Nexthops can be fully resolved or unresolved.
+
+ A resolved nexthop has an adequate level of information to send the
+ outgoing packet towards the destination by forwarding it on an
+ interface to a directly connected neighbor.
+
+ An unresolved nexthop is something that requires the RIB manager to
+ determine the final resolved nexthop. In one example, a nexthop
+ could be an IP address. The RIB manager would resolve how to reach
+ that IP address, e.g., by checking if that particular IP address is
+ reachable by regular IP forwarding, by an MPLS tunnel, or by both.
+ If the RIB manager cannot resolve the nexthop, then the nexthop
+ remains in an unresolved state and is NOT a suitable candidate for
+ installation in the FIB.
+
+ An implementation of this RIB data model MUST support sending route-
+ change notifications whenever a route transitions between the
+ following states:
+
+ o from the active state to the inactive state
+
+ o from the inactive state to the active state
+
+ o from the installed state to the uninstalled state
+
+ o from the uninstalled state to the installed state
+
+ A single notification MAY be used when a route transitions from
+ inactive/uninstalled to active/installed or in the other direction.
+
+
+
+
+Wang, et al. Standards Track [Page 20]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ The structure tree of notifications is shown in the following figure.
+
+ notifications:
+ +---n nexthop-resolution-status-change
+ | +--ro nexthop
+ | | +--ro nexthop-id uint32
+ | | +--ro sharing-flag boolean
+ | | +--ro (nexthop-type)?
+ | | +--:(nexthop-base)
+ | | | ...
+ | | +--:(nexthop-chain) {nexthop-chain}?
+ | | | ...
+ | | +--:(nexthop-replicate) {nexthop-replicate}?
+ | | | ...
+ | | +--:(nexthop-protection) {nexthop-protection}?
+ | | | ...
+ | | +--:(nexthop-load-balance) {nexthop-load-balance}?
+ | | ...
+ | +--ro nexthop-state nexthop-state-definition
+ +---n route-change
+ +--ro rib-name string
+ +--ro address-family address-family-definition
+ +--ro route-index uint64
+ +--ro match
+ | +--ro (route-type)?
+ | +--:(ipv4)
+ | | ...
+ | +--:(ipv6)
+ | | ...
+ | +--:(mpls-route)
+ | | ...
+ | +--:(mac-route)
+ | | ...
+ | +--:(interface-route)
+ | ...
+ +--ro route-installed-state route-installed-state-definition
+ +--ro route-state route-state-definition
+ +--ro route-change-reason route-change-reason-definition
+
+ Figure 7: Notifications Structure
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 21]
+
+RFC 8431 RIB Data Model September 2018
+
+
+3. YANG Module
+
+ This YANG module references [RFC2784], [RFC7348], [RFC7637], and
+ [RFC8344].
+
+ <CODE BEGINS> file "ietf-i2rs-rib@2018-09-13.yang"
+
+ module ietf-i2rs-rib {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib";
+ prefix iir;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference "RFC 6991";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference "RFC 8344";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference "RFC 6991";
+ }
+
+ organization
+ "IETF I2RS (Interface to Routing System) Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2rs/>
+ WG List: <mailto:i2rs@ietf.org>
+
+ Editor: Lixing Wang
+ <mailto:wang_little_star@sina.com>
+
+ Editor: Mach(Guoyi) Chen
+ <mailto:mach.chen@huawei.com>
+
+ Editor: Amit Dass
+ <mailto:dass.amit@gmail.com>
+
+ Editor: Hariharan Ananthakrishnan
+ <mailto:hari@netflix.com>
+
+ Editor: Sriganesh Kini
+ <mailto:sriganeshkini@gmail.com>
+
+ Editor: Nitin Bahadur
+ <mailto:nitin_bahadur@yahoo.com>";
+
+
+
+Wang, et al. Standards Track [Page 22]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "This module defines a YANG data model for
+ Routing Information Base (RIB) that aligns
+ with the I2RS RIB information model.
+
+ Copyright (c) 2018 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 8341; see
+ the RFC itself for full legal notices.";
+
+ revision 2018-09-13 {
+ description
+ "initial revision";
+ reference "RFC 8431";
+ }
+
+ //Features
+
+ feature nexthop-tunnel {
+ description
+ "This feature means that a node supports
+ tunnel nexthop capability.";
+ }
+
+ feature nexthop-chain {
+ description
+ "This feature means that a node supports
+ chain nexthop capability.";
+ }
+
+ feature nexthop-protection {
+ description
+ "This feature means that a node supports
+ protection nexthop capability.";
+ }
+
+ feature nexthop-replicate {
+ description
+ "This feature means that a node supports
+ replicate nexthop capability.";
+
+
+
+Wang, et al. Standards Track [Page 23]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+
+ feature nexthop-load-balance {
+ description
+ "This feature means that a node supports
+ load-balance nexthop capability.";
+ }
+
+ feature ipv4-tunnel {
+ description
+ "This feature means that a node supports
+ IPv4 tunnel encapsulation capability.";
+ }
+
+ feature ipv6-tunnel {
+ description
+ "This feature means that a node supports
+ IPv6 tunnel encapsulation capability.";
+ }
+
+ feature mpls-tunnel {
+ description
+ "This feature means that a node supports
+ MPLS tunnel encapsulation capability.";
+ }
+
+ feature vxlan-tunnel {
+ description
+ "This feature means that a node supports
+ Virtual eXtensible Local Area Network
+ (VXLAN) tunnel encapsulation capability.";
+ reference "RFC 7348";
+ }
+
+ feature gre-tunnel {
+ description
+ "This feature means that a node supports
+ GRE tunnel encapsulation capability.";
+ reference "RFC 2784";
+ }
+
+ feature nvgre-tunnel {
+ description
+ "This feature means that a node supports
+ Network Virtualization Using GRE (NVGRE)
+ tunnel encapsulation capability.";
+ reference "RFC 7637";
+ }
+
+
+
+Wang, et al. Standards Track [Page 24]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ feature route-vendor-attributes {
+ description
+ "This feature means that a node supports
+ route vendor attributes.";
+ }
+
+ //Identities and Type Definitions
+
+ identity mpls-label-action {
+ description
+ "Base identity from which all MPLS label
+ operations are derived.
+
+ The MPLS label stack operations include:
+ push - to add a new label to a label stack
+ pop - to pop the top label from a label stack
+ swap - to exchange the top label of a label
+ stack with a new label";
+ }
+
+ identity label-push {
+ base mpls-label-action;
+ description
+ "MPLS label stack operation: push.";
+ }
+
+ identity label-pop {
+ base mpls-label-action;
+ description
+ "MPLS label stack operation: pop.";
+ }
+
+ identity label-swap {
+ base mpls-label-action;
+ description
+ "MPLS label stack operation: swap.";
+ }
+
+ typedef mpls-label-action-definition {
+ type identityref {
+ base mpls-label-action;
+ }
+ description
+ "MPLS label action definition.";
+ }
+
+ identity tunnel-decapsulation-action {
+ description
+
+
+
+Wang, et al. Standards Track [Page 25]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ "Base identity from which all tunnel decapsulation
+ actions are derived.
+ Tunnel decapsulation actions include
+ ipv4-decapsulation (to decapsulate an IPv4 tunnel)
+ ipv6-decapsulation (to decapsulate an IPv6 tunnel)";
+ }
+
+ identity ipv4-decapsulation {
+ base tunnel-decapsulation-action;
+ description
+ "IPv4 tunnel decapsulation.";
+ }
+
+ identity ipv6-decapsulation {
+ base tunnel-decapsulation-action;
+ description
+ "IPv6 tunnel decapsulation.";
+ }
+
+ typedef tunnel-decapsulation-action-definition {
+ type identityref {
+ base tunnel-decapsulation-action;
+ }
+ description
+ "Tunnel decapsulation definition.";
+ }
+
+ identity ttl-action {
+ description
+ "Base identity from which all TTL
+ actions are derived.";
+ }
+
+ identity no-action {
+ base ttl-action;
+ description
+ "Do nothing regarding the TTL.";
+ }
+
+ identity copy-to-inner {
+ base ttl-action;
+ description
+ "Copy the TTL of the outer header
+ to the inner header.";
+ }
+
+ identity decrease-and-copy-to-inner {
+ base ttl-action;
+
+
+
+Wang, et al. Standards Track [Page 26]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "Decrease TTL by one and copy the TTL
+ to the inner header.";
+ }
+
+ identity decrease-and-copy-to-next {
+ base ttl-action;
+ description
+ "Decrease TTL by one and copy the TTL
+ to the next header; for example, when
+ MPLS label swapping, decrease the TTL
+ of the in_label and copy it to the
+ out_label.";
+ }
+
+ typedef ttl-action-definition {
+ type identityref {
+ base ttl-action;
+ }
+ description
+ "TTL action definition.";
+ }
+
+ identity hop-limit-action {
+ description
+ "Base identity from which all hop limit
+ actions are derived.";
+ }
+
+ identity hop-limit-no-action {
+ base hop-limit-action;
+ description
+ "Do nothing regarding the hop limit.";
+ }
+
+ identity hop-limit-copy-to-inner {
+ base hop-limit-action;
+ description
+ "Copy the hop limit of the outer header
+ to the inner header.";
+ }
+
+ typedef hop-limit-action-definition {
+ type identityref {
+ base hop-limit-action;
+ }
+ description
+ "IPv6 hop limit action definition.";
+
+
+
+Wang, et al. Standards Track [Page 27]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+
+ identity special-nexthop {
+ description
+ "Base identity from which all special
+ nexthops are derived.";
+ }
+
+ identity discard {
+ base special-nexthop;
+ description
+ "This indicates that the network
+ device should drop the packet and
+ increment a drop counter.";
+ }
+
+ identity discard-with-error {
+ base special-nexthop;
+ description
+ "This indicates that the network
+ device should drop the packet,
+ increment a drop counter, and send
+ back an appropriate error message
+ (like ICMP error).";
+ }
+
+ identity receive {
+ base special-nexthop;
+ description
+ "This indicates that the traffic is
+ destined for the network device, e.g.,
+ protocol packets or Operations,
+ Administration, and Maintenance (OAM) packets.
+ All locally destined traffic SHOULD be
+ throttled to avoid a denial-of-service
+ attack on the router's control plane. An
+ optional rate-limiter can be specified
+ to indicate how to throttle traffic
+ destined for the control plane.";
+ }
+
+ identity cos-value {
+ base special-nexthop;
+ description
+ "Cos-value special nexthop.";
+ }
+
+ typedef special-nexthop-definition {
+
+
+
+Wang, et al. Standards Track [Page 28]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ type identityref {
+ base special-nexthop;
+ }
+ description
+ "Special nexthop definition.";
+ }
+
+ identity ip-route-match-type {
+ description
+ "Base identity from which all route
+ match types are derived.
+ The route match type could be:
+ match source, or
+ match destination, or
+ match source and destination.";
+ }
+
+ identity match-ip-src {
+ base ip-route-match-type;
+ description
+ "Source route match type.";
+ }
+
+ identity match-ip-dest {
+ base ip-route-match-type;
+ description
+ "Destination route match type";
+ }
+
+ identity match-ip-src-dest {
+ base ip-route-match-type;
+ description
+ "Source and Destination route match type";
+ }
+
+ typedef ip-route-match-type-definition {
+ type identityref {
+ base ip-route-match-type;
+ }
+ description
+ "IP route match type definition.";
+ }
+
+ identity address-family {
+ description
+ "Base identity from which all RIB
+ address families are derived.";
+ }
+
+
+
+Wang, et al. Standards Track [Page 29]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ identity ipv4-address-family {
+ base address-family;
+ description
+ "IPv4 RIB address family.";
+ }
+
+ identity ipv6-address-family {
+ base address-family;
+ description
+ "IPv6 RIB address family.";
+ }
+
+ identity mpls-address-family {
+ base address-family;
+ description
+ "MPLS RIB address family.";
+ }
+
+ identity ieee-mac-address-family {
+ base address-family;
+ description
+ "MAC RIB address family.";
+ }
+
+ typedef address-family-definition {
+ type identityref {
+ base address-family;
+ }
+ description
+ "RIB address family definition.";
+ }
+
+ identity route-type {
+ description
+ "Base identity from which all route types
+ are derived.";
+ }
+
+ identity ipv4-route {
+ base route-type;
+ description
+ "IPv4 route type.";
+ }
+
+ identity ipv6-route {
+ base route-type;
+ description
+ "IPv6 route type.";
+
+
+
+Wang, et al. Standards Track [Page 30]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+
+ identity mpls-route {
+ base route-type;
+ description
+ "MPLS route type.";
+ }
+
+ identity ieee-mac {
+ base route-type;
+ description
+ "MAC route type.";
+ }
+
+ identity interface {
+ base route-type;
+ description
+ "Interface route type.";
+ }
+
+ typedef route-type-definition {
+ type identityref {
+ base route-type;
+ }
+ description
+ "Route type definition.";
+ }
+
+ identity tunnel-type {
+ description
+ "Base identity from which all tunnel
+ types are derived.";
+ }
+
+ identity ipv4-tunnel {
+ base tunnel-type;
+ description
+ "IPv4 tunnel type";
+ }
+
+ identity ipv6-tunnel {
+ base tunnel-type;
+ description
+ "IPv6 tunnel type";
+ }
+
+ identity mpls-tunnel {
+ base tunnel-type;
+
+
+
+Wang, et al. Standards Track [Page 31]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "MPLS tunnel type";
+ }
+
+ identity gre-tunnel {
+ base tunnel-type;
+ description
+ "GRE tunnel type";
+ }
+
+ identity vxlan-tunnel {
+ base tunnel-type;
+ description
+ "VXLAN tunnel type";
+ }
+
+ identity nvgre-tunnel {
+ base tunnel-type;
+ description
+ "NVGRE tunnel type";
+ }
+
+ typedef tunnel-type-definition {
+ type identityref {
+ base tunnel-type;
+ }
+ description
+ "Tunnel type definition.";
+ }
+
+ identity route-state {
+ description
+ "Base identity from which all route
+ states are derived.";
+ }
+
+ identity active {
+ base route-state;
+ description
+ "Active state.";
+ }
+
+ identity inactive {
+ base route-state;
+ description
+ "Inactive state.";
+ }
+
+
+
+
+Wang, et al. Standards Track [Page 32]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ typedef route-state-definition {
+ type identityref {
+ base route-state;
+ }
+ description
+ "Route state definition.";
+ }
+
+ identity nexthop-state {
+ description
+ "Base identity from which all nexthop
+ states are derived.";
+ }
+
+ identity resolved {
+ base nexthop-state;
+ description
+ "Resolved nexthop state.";
+ }
+
+ identity unresolved {
+ base nexthop-state;
+ description
+ "Unresolved nexthop state.";
+ }
+
+ typedef nexthop-state-definition {
+ type identityref {
+ base nexthop-state;
+ }
+ description
+ "Nexthop state definition.";
+ }
+
+ identity route-installed-state {
+ description
+ "Base identity from which all route
+ installed states are derived.";
+ }
+
+ identity uninstalled {
+ base route-installed-state;
+ description
+ "Uninstalled state.";
+ }
+
+ identity installed {
+ base route-installed-state;
+
+
+
+Wang, et al. Standards Track [Page 33]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "Installed state.";
+ }
+
+ typedef route-installed-state-definition {
+ type identityref {
+ base route-installed-state;
+ }
+ description
+ "Route installed state definition.";
+ }
+
+ //Route Change Reason Identities
+
+ identity route-change-reason {
+ description
+ "Base identity from which all route change
+ reasons are derived.";
+ }
+
+ identity lower-route-preference {
+ base route-change-reason;
+ description
+ "This route was installed in the FIB because it had
+ a lower route preference value (and thus was more
+ preferred) than the route it replaced.";
+ }
+
+ identity higher-route-preference {
+ base route-change-reason;
+ description
+ "This route was uninstalled from the FIB because it had
+ a higher route preference value (and thus was less
+ preferred) than the route that replaced it.";
+ }
+
+ identity resolved-nexthop {
+ base route-change-reason;
+ description
+ "This route was made active because at least
+ one of its nexthops was resolved.";
+ }
+
+ identity unresolved-nexthop {
+ base route-change-reason;
+ description
+ "This route was made inactive because all of
+ its nexthops are unresolved.";
+
+
+
+Wang, et al. Standards Track [Page 34]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+
+ typedef route-change-reason-definition {
+ type identityref {
+ base route-change-reason;
+ }
+ description
+ "Route change reason definition.";
+ }
+
+ typedef nexthop-preference-definition {
+ type uint8 {
+ range "1..99";
+ }
+ description
+ "Nexthop-preference is used for protection schemes.
+ It is an integer value between 1 and 99. Lower
+ values are preferred. To download N
+ nexthops to the FIB, the N nexthops with the lowest
+ value are selected. If there are more than N
+ nexthops that have the same preference, an
+ implementation of the I2RS client should select N
+ nexthops and download them. As for how to select
+ the nexthops, this is left to the implementations.";
+ }
+
+ typedef nexthop-lb-weight-definition {
+ type uint8 {
+ range "1..99";
+ }
+ description
+ "Nexthop-lb-weight is used for load-balancing.
+ Each list member SHOULD 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 sum of 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.
+ Note that the weight of 0 is special because of
+ historical reasons. It's typically used in
+ hardware devices to signify ECMP.";
+ }
+
+
+
+
+Wang, et al. Standards Track [Page 35]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ typedef nexthop-ref {
+ type leafref {
+ path "/iir:routing-instance" +
+ "/iir:rib-list" +
+ "/iir:route-list" +
+ "/iir:nexthop" +
+ "/iir:nexthop-id";
+ }
+ description
+ "A nexthop reference that provides
+ an indirection reference to a nexthop.";
+ }
+
+ //Groupings
+
+ grouping route-prefix {
+ description
+ "The common attributes used for all types of route prefixes.";
+ leaf route-index {
+ type uint64;
+ mandatory true;
+ description
+ "Route index.";
+ }
+ container match {
+ description
+ "The match condition specifies the
+ kind of route (IPv4, MPLS, etc.)
+ and the set of fields to match on.";
+ choice route-type {
+ description
+ "Route types: IPv4, IPv6, MPLS, MAC, etc.";
+ case ipv4 {
+ description
+ "IPv4 route case.";
+ container ipv4 {
+ description
+ "IPv4 route match.";
+ choice ip-route-match-type {
+ description
+ "IP route match type options:
+ match source, or
+ match destination, or
+ match source and destination.";
+ case dest-ipv4-address {
+ leaf dest-ipv4-prefix {
+ type inet:ipv4-prefix;
+ mandatory true;
+
+
+
+Wang, et al. Standards Track [Page 36]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "An IPv4 destination address as the match.";
+ }
+ }
+ case src-ipv4-address {
+ leaf src-ipv4-prefix {
+ type inet:ipv4-prefix;
+ mandatory true;
+ description
+ "An IPv4 source address as the match.";
+ }
+ }
+ case dest-src-ipv4-address {
+ container dest-src-ipv4-address {
+ description
+ "A combination of an IPv4 source and
+ an IPv4 destination address as the match.";
+ leaf dest-ipv4-prefix {
+ type inet:ipv4-prefix;
+ mandatory true;
+ description
+ "The IPv4 destination address of the match.";
+ }
+ leaf src-ipv4-prefix {
+ type inet:ipv4-prefix;
+ mandatory true;
+ description
+ "The IPv4 source address of the match.";
+ }
+ }
+ }
+ }
+ }
+ }
+ case ipv6 {
+ description
+ "IPv6 route case.";
+ container ipv6 {
+ description
+ "IPv6 route match.";
+ choice ip-route-match-type {
+ description
+ "IP route match type options:
+ match source,
+ match destination, or
+ match source and destination.";
+ case dest-ipv6-address {
+ leaf dest-ipv6-prefix {
+
+
+
+Wang, et al. Standards Track [Page 37]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ type inet:ipv6-prefix;
+ mandatory true;
+ description
+ "An IPv6 destination address as the match.";
+ }
+ }
+ case src-ipv6-address {
+ leaf src-ipv6-prefix {
+ type inet:ipv6-prefix;
+ mandatory true;
+ description
+ "An IPv6 source address as the match.";
+ }
+ }
+ case dest-src-ipv6-address {
+ container dest-src-ipv6-address {
+ description
+ "A combination of an IPv6 source and
+ an IPv6 destination address as the match.";
+ leaf dest-ipv6-prefix {
+ type inet:ipv6-prefix;
+ mandatory true;
+ description
+ "The IPv6 destination address of the match.";
+ }
+ leaf src-ipv6-prefix {
+ type inet:ipv6-prefix;
+ mandatory true;
+ description
+ "The IPv6 source address of the match.";
+ }
+ }
+ }
+ }
+ }
+ }
+ case mpls-route {
+ description
+ "MPLS route case.";
+ leaf mpls-label {
+ type uint32;
+ mandatory true;
+ description
+ "The label used for matching.";
+ }
+ }
+ case mac-route {
+ description
+
+
+
+Wang, et al. Standards Track [Page 38]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ "MAC route case.";
+ leaf mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "The MAC address used for matching.";
+ }
+ }
+ case interface-route {
+ description
+ "Interface route case.";
+ leaf interface-identifier {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "The interface used for matching.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping route {
+ description
+ "The common attributes used for all types of routes.";
+ uses route-prefix;
+ container nexthop {
+ description
+ "The nexthop of the route.";
+ uses nexthop;
+ }
+ //In the information model, it is called route-statistic
+ container route-status {
+ description
+ "The status information of the route.";
+ leaf route-state {
+ type route-state-definition;
+ config false;
+ description
+ "Indicate a route's state: active or inactive.";
+ }
+ leaf route-installed-state {
+ type route-installed-state-definition;
+ config false;
+ description
+ "Indicate that a route's installed states:
+ installed or uninstalled.";
+ }
+
+
+
+Wang, et al. Standards Track [Page 39]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ leaf route-reason {
+ type route-change-reason-definition;
+ config false;
+ description
+ "Indicate the reason that caused the route change.";
+ }
+ }
+ container route-attributes {
+ description
+ "Route attributes.";
+ uses route-attributes;
+ }
+ container route-vendor-attributes {
+ description
+ "Route vendor attributes.";
+ uses route-vendor-attributes;
+ }
+ }
+
+ grouping nexthop-list {
+ description
+ "A generic nexthop list.";
+ list nexthop-list {
+ key "nexthop-member-id";
+ description
+ "A list of nexthops.";
+ leaf nexthop-member-id {
+ type uint32;
+ mandatory true;
+ description
+ "A nexthop identifier that points
+ to a nexthop list member.
+ A nexthop list member is a nexthop.";
+ }
+ }
+ }
+
+ grouping nexthop-list-p {
+ description
+ "A nexthop list with preference parameter.";
+ list nexthop-list {
+ key "nexthop-member-id";
+ description
+ "A list of nexthop.";
+ leaf nexthop-member-id {
+ type uint32;
+ mandatory true;
+ description
+
+
+
+Wang, et al. Standards Track [Page 40]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ "A nexthop identifier that points
+ to a nexthop list member.
+ A nexthop list member is a nexthop.";
+ }
+ leaf nexthop-preference {
+ type nexthop-preference-definition;
+ mandatory true;
+ description
+ "Nexthop-preference is used for protection schemes.
+ It is an integer value between 1 and 99. Lower
+ values are more preferred. To download a
+ primary/standby/tertiary group to the FIB, the
+ nexthops that are resolved and are most preferred
+ are selected.";
+ }
+ }
+ }
+
+ grouping nexthop-list-w {
+ description
+ "A nexthop list with a weight parameter.";
+ list nexthop-list {
+ key "nexthop-member-id";
+ description
+ "A list of nexthop.";
+ leaf nexthop-member-id {
+ type uint32;
+ mandatory true;
+ description
+ "A nexthop identifier that points
+ to a nexthop list member.
+ A nexthop list member is a nexthop.";
+ }
+ leaf nexthop-lb-weight {
+ type nexthop-lb-weight-definition;
+ mandatory true;
+ description
+ "The weight of a nexthop of
+ the load-balance nexthops.";
+ }
+ }
+ }
+
+ grouping nexthop {
+ description
+ "The nexthop structure.";
+ leaf nexthop-id {
+ type uint32;
+
+
+
+Wang, et al. Standards Track [Page 41]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "An identifier that refers to a nexthop.";
+ }
+ leaf sharing-flag {
+ type boolean;
+ description
+ "To indicate whether a nexthop is sharable
+ or non-sharable:
+ true - sharable (which means the nexthop can be
+ shared with other routes)
+ false - non-sharable (which means the nexthop can
+ not be shared with other routes)";
+ }
+ choice nexthop-type {
+ description
+ "Nexthop type options.";
+ case nexthop-base {
+ container nexthop-base {
+ description
+ "The base nexthop.";
+ uses nexthop-base;
+ }
+ }
+ case nexthop-chain {
+ if-feature "nexthop-chain";
+ container nexthop-chain {
+ description
+ "A chain nexthop.";
+ uses nexthop-list;
+ }
+ }
+ case nexthop-replicate {
+ if-feature "nexthop-replicate";
+ container nexthop-replicate {
+ description
+ "A replicate nexthop.";
+ uses nexthop-list;
+ }
+ }
+ case nexthop-protection {
+ if-feature "nexthop-protection";
+ container nexthop-protection {
+ description
+ "A protection nexthop.";
+ uses nexthop-list-p;
+ }
+ }
+ case nexthop-load-balance {
+
+
+
+Wang, et al. Standards Track [Page 42]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ if-feature "nexthop-load-balance";
+ container nexthop-lb {
+ description
+ "A load-balance nexthop.";
+ uses nexthop-list-w;
+ }
+ }
+ }
+ }
+
+ grouping nexthop-base {
+ description
+ "The base nexthop.";
+ choice nexthop-base-type {
+ description
+ "Nexthop base type options.";
+ case special-nexthop {
+ leaf special {
+ type special-nexthop-definition;
+ description
+ "A special nexthop.";
+ }
+ }
+ case egress-interface-nexthop {
+ leaf outgoing-interface {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "The nexthop is an outgoing interface.";
+ }
+ }
+ case ipv4-address-nexthop {
+ leaf ipv4-address {
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "The nexthop is an IPv4 address.";
+ }
+ }
+ case ipv6-address-nexthop {
+ leaf ipv6-address {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "The nexthop is an IPv6 address.";
+ }
+ }
+ case egress-interface-ipv4-nexthop {
+
+
+
+Wang, et al. Standards Track [Page 43]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ container egress-interface-ipv4-address {
+ leaf outgoing-interface {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "Name of the outgoing interface.";
+ }
+ leaf ipv4-address {
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "The nexthop points to an interface with
+ an IPv4 address.";
+ }
+ description
+ "The nexthop is an egress-interface and an IP
+ address. This can be used in cases where, e.g.,
+ the IP address is a link-local address.";
+ }
+ }
+ case egress-interface-ipv6-nexthop {
+ container egress-interface-ipv6-address {
+ leaf outgoing-interface {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "Name of the outgoing interface.";
+ }
+ leaf ipv6-address {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "The nexthop points to an interface with
+ an IPv6 address.";
+ }
+ description
+ "The nexthop is an egress-interface and an IP
+ address. This can be used in cases where, e.g.,
+ the IP address is a link-local address.";
+ }
+ }
+ case egress-interface-mac-nexthop {
+ container egress-interface-mac-address {
+ leaf outgoing-interface {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "Name of the outgoing interface.";
+
+
+
+Wang, et al. Standards Track [Page 44]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ leaf ieee-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "The nexthop points to an interface with
+ a specific MAC address.";
+ }
+ description
+ "The egress-interface must be an Ethernet
+ interface. Address resolution is not required
+ for this nexthop.";
+ }
+ }
+ case tunnel-encapsulation-nexthop {
+ if-feature "nexthop-tunnel";
+ container tunnel-encapsulation {
+ uses tunnel-encapsulation;
+ description
+ "This can be an encapsulation representing an IP
+ tunnel, MPLS tunnel, or others as defined in the info
+ model. An optional egress-interface can be chained
+ to the tunnel encapsulation to indicate which
+ interface to send the packet out on. The
+ egress-interface is useful when the network device
+ contains Ethernet interfaces and one needs to
+ perform address resolution for the IP packet.";
+ }
+ }
+ case tunnel-decapsulation-nexthop {
+ if-feature "nexthop-tunnel";
+ container tunnel-decapsulation {
+ uses tunnel-decapsulation;
+ description
+ "This is to specify the decapsulation of a tunnel
+ header.";
+ }
+ }
+ case logical-tunnel-nexthop {
+ if-feature "nexthop-tunnel";
+ container logical-tunnel {
+ uses logical-tunnel;
+ description
+ "This can be an MPLS Label Switched Path (LSP)
+ or a GRE tunnel (or others as defined in this
+ document) that is represented by a unique
+ identifier (e.g., name).";
+ }
+
+
+
+Wang, et al. Standards Track [Page 45]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ case rib-name-nexthop {
+ leaf rib-name {
+ type string;
+ description
+ "A nexthop pointing to a RIB indicates that the
+ route lookup needs to continue in the specified
+ RIB. This is a way to perform chained lookups.";
+ }
+ }
+ case nexthop-identifier {
+ leaf nexthop-ref {
+ type nexthop-ref;
+ mandatory true;
+ description
+ "A nexthop reference that points to a nexthop.";
+ }
+ }
+ }
+ }
+
+ grouping route-vendor-attributes {
+ description
+ "Route vendor attributes.";
+ }
+
+ grouping logical-tunnel {
+ description
+ "A logical tunnel that is identified
+ by a type and a tunnel name.";
+ leaf tunnel-type {
+ type tunnel-type-definition;
+ mandatory true;
+ description
+ "A tunnel type.";
+ }
+ leaf tunnel-name {
+ type string;
+ mandatory true;
+ description
+ "A tunnel name that points to a logical tunnel.";
+ }
+ }
+
+ grouping ipv4-header {
+ description
+ "The IPv4 header encapsulation information.";
+ leaf src-ipv4-address {
+
+
+
+Wang, et al. Standards Track [Page 46]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "The source IP address of the header.";
+ }
+ leaf dest-ipv4-address {
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "The destination IP address of the header.";
+ }
+ leaf protocol {
+ type uint8;
+ mandatory true;
+ description
+ "The protocol id of the header.";
+ }
+ leaf ttl {
+ type uint8;
+ description
+ "The TTL of the header.";
+ }
+ leaf dscp {
+ type uint8;
+ description
+ "The Differentiated Services Code Point
+ (DSCP) field of the header.";
+ }
+ }
+
+ grouping ipv6-header {
+ description
+ "The IPv6 header encapsulation information.";
+ leaf src-ipv6-address {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "The source IP address of the header.";
+ }
+ leaf dest-ipv6-address {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "The destination IP address of the header.";
+ }
+ leaf next-header {
+ type uint8;
+ mandatory true;
+
+
+
+Wang, et al. Standards Track [Page 47]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "The next header of the IPv6 header.";
+ }
+ leaf traffic-class {
+ type uint8;
+ description
+ "The traffic class value of the header.";
+ }
+ leaf flow-label {
+ type inet:ipv6-flow-label;
+ description
+ "The flow label of the header.";
+ }
+ leaf hop-limit {
+ type uint8 {
+ range "1..255";
+ }
+ description
+ "The hop limit of the header.";
+ }
+ }
+
+ grouping nvgre-header {
+ description
+ "The NVGRE header encapsulation information.";
+ choice nvgre-type {
+ description
+ "NVGRE can use either an IPv4
+ or an IPv6 header for encapsulation.";
+ case ipv4 {
+ uses ipv4-header;
+ }
+ case ipv6 {
+ uses ipv6-header;
+ }
+ }
+ leaf virtual-subnet-id {
+ type uint32;
+ mandatory true;
+ description
+ "The subnet identifier of the NVGRE header.";
+ }
+ leaf flow-id {
+ type uint8;
+ description
+ "The flow identifier of the NVGRE header.";
+ }
+ }
+
+
+
+Wang, et al. Standards Track [Page 48]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ grouping vxlan-header {
+ description
+ "The VXLAN encapsulation header information.";
+ choice vxlan-type {
+ description
+ "NVGRE can use either an IPv4
+ or an IPv6 header for encapsulation.";
+ case ipv4 {
+ uses ipv4-header;
+ }
+ case ipv6 {
+ uses ipv6-header;
+ }
+ }
+ leaf vxlan-identifier {
+ type uint32;
+ mandatory true;
+ description
+ "The VXLAN identifier of the VXLAN header.";
+ }
+ }
+
+ grouping gre-header {
+ description
+ "The GRE encapsulation header information.";
+ choice dest-address-type {
+ description
+ "GRE options: IPv4 and IPv6";
+ case ipv4 {
+ leaf ipv4-dest {
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "The destination IP address of the GRE header.";
+ }
+ }
+ case ipv6 {
+ leaf ipv6-dest {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "The destination IP address of the GRE header.";
+ }
+ }
+ }
+ leaf protocol-type {
+ type uint16;
+ mandatory true;
+
+
+
+Wang, et al. Standards Track [Page 49]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "The protocol type of the GRE header.";
+ }
+ leaf key {
+ type uint64;
+ description
+ "The GRE key of the GRE header.";
+ }
+ }
+
+ grouping mpls-header {
+ description
+ "The MPLS encapsulation header information.";
+ list label-operations {
+ key "label-oper-id";
+ description
+ "Label operations.";
+ leaf label-oper-id {
+ type uint32;
+ description
+ "An optional identifier that points
+ to a label operation.";
+ }
+ choice label-actions {
+ description
+ "Label action options.";
+ case label-push {
+ container label-push {
+ description
+ "Label push operation.";
+ leaf label {
+ type uint32;
+ mandatory true;
+ description
+ "The label to be pushed.";
+ }
+ leaf s-bit {
+ type boolean;
+ description
+ "The s-bit ('Bottom of Stack' bit) of the label to be
+ pushed.";
+ }
+ leaf tc-value {
+ type uint8;
+ description
+ "The traffic class value of the label to be pushed.";
+ }
+ leaf ttl-value {
+
+
+
+Wang, et al. Standards Track [Page 50]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ type uint8;
+ description
+ "The TTL value of the label to be pushed.";
+ }
+ }
+ }
+ case label-swap {
+ container label-swap {
+ description
+ "Label swap operation.";
+ leaf in-label {
+ type uint32;
+ mandatory true;
+ description
+ "The label to be swapped.";
+ }
+ leaf out-label {
+ type uint32;
+ mandatory true;
+ description
+ "The out MPLS label.";
+ }
+ leaf ttl-action {
+ type ttl-action-definition;
+ description
+ "The label TTL actions:
+ - No-action
+ - Copy to inner label
+ - Decrease (the in-label)
+ by 1 and copy to the out-label";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping tunnel-encapsulation {
+ description
+ "Tunnel encapsulation information.";
+ choice tunnel-type {
+ description
+ "Tunnel options for nexthops.";
+ case ipv4 {
+ if-feature "ipv4-tunnel";
+ container ipv4-header {
+ uses ipv4-header;
+ description
+
+
+
+Wang, et al. Standards Track [Page 51]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ "IPv4 header.";
+ }
+ }
+ case ipv6 {
+ if-feature "ipv6-tunnel";
+ container ipv6-header {
+ uses ipv6-header;
+ description
+ "IPv6 header.";
+ }
+ }
+ case mpls {
+ if-feature "mpls-tunnel";
+ container mpls-header {
+ uses mpls-header;
+ description
+ "MPLS header.";
+ }
+ }
+ case gre {
+ if-feature "gre-tunnel";
+ container gre-header {
+ uses gre-header;
+ description
+ "GRE header.";
+ }
+ }
+ case nvgre {
+ if-feature "nvgre-tunnel";
+ container nvgre-header {
+ uses nvgre-header;
+ description
+ "NVGRE header.";
+ }
+ }
+ case vxlan {
+ if-feature "vxlan-tunnel";
+ container vxlan-header {
+ uses vxlan-header;
+ description
+ "VXLAN header.";
+ }
+ }
+ }
+ }
+
+ grouping tunnel-decapsulation {
+ description
+
+
+
+Wang, et al. Standards Track [Page 52]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ "Tunnel decapsulation information.";
+ choice tunnel-type {
+ description
+ "Nexthop tunnel type options.";
+ case ipv4 {
+ if-feature "ipv4-tunnel";
+ container ipv4-decapsulation {
+ description
+ "IPv4 decapsulation.";
+ leaf ipv4-decapsulation {
+ type tunnel-decapsulation-action-definition;
+ mandatory true;
+ description
+ "IPv4 decapsulation operations.";
+ }
+ leaf ttl-action {
+ type ttl-action-definition;
+ description
+ "The TTL actions:
+ no-action or copy to inner header.";
+ }
+ }
+ }
+ case ipv6 {
+ if-feature "ipv6-tunnel";
+ container ipv6-decapsulation {
+ description
+ "IPv6 decapsulation.";
+ leaf ipv6-decapsulation {
+ type tunnel-decapsulation-action-definition;
+ mandatory true;
+ description
+ "IPv6 decapsulation operations.";
+ }
+ leaf hop-limit-action {
+ type hop-limit-action-definition;
+ description
+ "The hop limit actions:
+ no-action or copy to inner header.";
+ }
+ }
+ }
+ case mpls {
+ if-feature "mpls-tunnel";
+ container label-pop {
+ description
+ "MPLS decapsulation.";
+ leaf label-pop {
+
+
+
+Wang, et al. Standards Track [Page 53]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ type mpls-label-action-definition;
+ mandatory true;
+ description
+ "Pop a label from the label stack.";
+ }
+ leaf ttl-action {
+ type ttl-action-definition;
+ description
+ "The label TTL action.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping route-attributes {
+ description
+ "Route attributes.";
+ leaf route-preference {
+ type uint32;
+ mandatory true;
+ description
+ "ROUTE_PREFERENCE: This is a numerical value that
+ allows for comparing routes from different
+ protocols. Static configuration is also
+ considered a protocol for the purpose of this
+ field. It is also known as administrative-distance.
+ The lower the value, the higher the preference.";
+ }
+ leaf local-only {
+ type boolean;
+ mandatory true;
+ description
+ "Indicate whether the attribute is local only.";
+ }
+ container address-family-route-attributes {
+ description
+ "Address-family-related route attributes.";
+ choice route-type {
+ description
+ "Address-family-related route attributes. Future
+ documents should specify these attributes by augmenting
+ the cases in this choice.";
+ case ip-route-attributes {
+ }
+ case mpls-route-attributes {
+ }
+ case ethernet-route-attributes {
+
+
+
+Wang, et al. Standards Track [Page 54]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ }
+ }
+ }
+
+ container routing-instance {
+ description
+ "A routing instance, in the context of
+ the RIB information model, is a collection
+ of RIBs, interfaces, and routing parameters.";
+ leaf name {
+ type string;
+ description
+ "The name of the routing instance. This MUST
+ be unique across all routing instances in
+ a given network device.";
+ }
+ list interface-list {
+ key "name";
+ description
+ "This represents the list of interfaces associated
+ with this routing instance. The interface list helps
+ constrain the boundaries of packet forwarding.
+ Packets coming on these interfaces are directly
+ associated with the given routing instance. The
+ interface list contains a list of identifiers with
+ each identifier uniquely identifying an interface.";
+ leaf name {
+ type if:interface-ref;
+ description
+ "A reference to the name of a network-layer interface.";
+ }
+ }
+ leaf router-id {
+ type yang:dotted-quad;
+ description
+ "Router ID: The 32-bit number in the form of a dotted quad.";
+ }
+ leaf lookup-limit {
+ type uint8;
+ description
+ "A limit on how many levels of a lookup can be performed.";
+ }
+ list rib-list {
+ key "name";
+ description
+ "A list of RIBs that are associated with the routing
+ instance.";
+
+
+
+Wang, et al. Standards Track [Page 55]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ leaf name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of each RIB.";
+ }
+ leaf address-family {
+ type address-family-definition;
+ mandatory true;
+ description
+ "The address family of a RIB.";
+ }
+ leaf ip-rpf-check {
+ type boolean;
+ description
+ "Each RIB can be optionally associated with a
+ ENABLE_IP_RPF_CHECK attribute that enables Reverse
+ Path Forwarding (RPF) checks on all IP routes in that
+ RIB. An RPF check is used to
+ prevent spoofing and limit malicious traffic.";
+ }
+ list route-list {
+ key "route-index";
+ description
+ "A list of routes of a RIB.";
+ uses route;
+ }
+ // This is a list that maintains the nexthops added to the RIB.
+ uses nexthop-list;
+ }
+ }
+
+ //RPC Operations
+
+ rpc rib-add {
+ description
+ "To add a RIB to an instance";
+ input {
+ leaf name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of the RIB
+ that is to be added.";
+ }
+ leaf address-family {
+ type address-family-definition;
+ mandatory true;
+
+
+
+Wang, et al. Standards Track [Page 56]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "The address family of the RIB.";
+ }
+ leaf ip-rpf-check {
+ type boolean;
+ description
+ "Each RIB can be optionally associated with an
+ ENABLE_IP_RPF_CHECK attribute that enables
+ RPF checks on all IP routes in that
+ RIB. An RPF check is used to
+ prevent spoofing and limit malicious traffic.";
+ }
+ }
+ output {
+ leaf result {
+ type boolean;
+ mandatory true;
+ description
+ "Return the result of the rib-add operation.
+ true - success;
+ false - failed";
+ }
+ leaf reason {
+ type string;
+ description
+ "The specific reason that caused the failure.";
+ }
+ }
+ }
+
+ rpc rib-delete {
+ description
+ "To delete a RIB from a routing instance.
+ After deleting the RIB, all routes installed
+ in the RIB will be deleted as well.";
+ input {
+ leaf name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of the RIB
+ that is to be deleted.";
+ }
+ }
+ output {
+ leaf result {
+ type boolean;
+ mandatory true;
+
+
+
+Wang, et al. Standards Track [Page 57]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "Return the result of the rib-delete operation.
+ true - success;
+ false - failed";
+ }
+ leaf reason {
+ type string;
+ description
+ "The specific reason that caused failure.";
+ }
+ }
+ }
+
+ grouping route-operation-state {
+ description
+ "Route operation state.";
+ leaf success-count {
+ type uint32;
+ mandatory true;
+ description
+ "The numbers of routes that are successfully
+ added/deleted/updated.";
+ }
+ leaf failed-count {
+ type uint32;
+ mandatory true;
+ description
+ "The numbers of the routes that fail
+ to be added/deleted/updated.";
+ }
+ container failure-detail {
+ description
+ "The failure detail reflects the reason why a route
+ operation fails. It is an array that includes the route
+ index and error code of the failed route.";
+ list failed-routes {
+ key "route-index";
+ description
+ "The list of failed routes.";
+ leaf route-index {
+ type uint32;
+ description
+ "The route index of the failed route.";
+ }
+ leaf error-code {
+ type uint32;
+ description
+ "The error code that reflects the failure reason.
+
+
+
+Wang, et al. Standards Track [Page 58]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ 0 - Reserved
+ 1 - Trying to add a repeat route
+ 2 - Trying to delete or update a route that does not
+ exist
+ 3 - Malformed route attributes";
+ }
+ }
+ }
+ }
+
+ rpc route-add {
+ description
+ "To add a route or a list of routes to a RIB";
+ input {
+ leaf return-failure-detail {
+ type boolean;
+ default "false";
+ description
+ "Whether to return the failure detail.
+ true - return the failure detail
+ false - do not return the failure detail
+ The default is false.";
+ }
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ container routes {
+ description
+ "The routes to be added to the RIB.";
+ list route-list {
+ key "route-index";
+ description
+ "The list of routes to be added.";
+ uses route-prefix;
+ container route-attributes {
+ uses route-attributes;
+ description
+ "The route attributes.";
+ }
+ container route-vendor-attributes {
+ if-feature "route-vendor-attributes";
+ uses route-vendor-attributes;
+ description
+ "The route vendor attributes.";
+ }
+
+
+
+Wang, et al. Standards Track [Page 59]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ container nexthop {
+ uses nexthop;
+ description
+ "The nexthop of the added route.";
+ }
+ }
+ }
+ }
+ output {
+ uses route-operation-state;
+ }
+ }
+
+ rpc route-delete {
+ description
+ "To delete a route or a list of routes from a RIB";
+ input {
+ leaf return-failure-detail {
+ type boolean;
+ default "false";
+ description
+ "Whether to return the failure detail.
+ true - return the failure detail
+ false - do not return the failure detail
+ The default is false.";
+ }
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ container routes {
+ description
+ "The routes to be added to the RIB.";
+ list route-list {
+ key "route-index";
+ description
+ "The list of routes to be deleted.";
+ uses route-prefix;
+ }
+ }
+ }
+ output {
+ uses route-operation-state;
+ }
+ }
+
+
+
+
+Wang, et al. Standards Track [Page 60]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ grouping route-update-options {
+ description
+ "Update options:
+ 1. update the nexthop
+ 2. update the route attributes
+ 3. update the route-vendor-attributes";
+ choice update-options {
+ description
+ "Update options:
+ 1. update the nexthop
+ 2. update the route attributes
+ 3. update the route-vendor-attributes";
+ case update-nexthop {
+ container updated-nexthop {
+ uses nexthop;
+ description
+ "The nexthop used for updating.";
+ }
+ }
+ case update-route-attributes {
+ container updated-route-attr {
+ uses route-attributes;
+ description
+ "The route attributes used for updating.";
+ }
+ }
+ case update-route-vendor-attributes {
+ container updated-route-vendor-attr {
+ uses route-vendor-attributes;
+ description
+ "The vendor route attributes used for updating.";
+ }
+ }
+ }
+ }
+
+ rpc route-update {
+ description
+ "To update a route or a list of routes of a RIB.
+ The inputs:
+ 1. The match conditions, which could be:
+ a. route prefix,
+ b. route attributes, or
+ c. nexthop.
+ 2. The update parameters to be used:
+ a. new nexthop,
+ b. new route attributes, or
+ c. nexthop.
+
+
+
+Wang, et al. Standards Track [Page 61]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ Actions:
+ 1. update the nexthop
+ 2. update the route attributes
+ The outputs:
+ success-count - the number of routes updated
+ failed-count - the number of routes fail to update
+ failure-detail - the detail failure info
+ ";
+ input {
+ leaf return-failure-detail {
+ type boolean;
+ default "false";
+ description
+ "Whether to return the failure detail.
+ true - return the failure detail
+ false - do not return the failure detail
+ The default is false.";
+ }
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ choice match-options {
+ description
+ "Match options.";
+ case match-route-prefix {
+ description
+ "Update the routes that match the route
+ prefix(es) condition.";
+ container input-routes {
+ description
+ "The matched routes to be updated.";
+ list route-list {
+ key "route-index";
+ description
+ "The list of routes to be updated.";
+ uses route-prefix;
+ uses route-update-options;
+ }
+ }
+ }
+ case match-route-attributes {
+ description
+ "Update the routes that match the
+ route attributes condition.";
+ container input-route-attributes {
+
+
+
+Wang, et al. Standards Track [Page 62]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ description
+ "The route attributes are used for matching.";
+ uses route-attributes;
+ }
+ container update-parameters {
+ description
+ "Update options:
+ 1. update the nexthop
+ 2. update the route attributes
+ 3. update the route-vendor-attributes";
+ uses route-update-options;
+ }
+ }
+ case match-route-vendor-attributes {
+ if-feature "route-vendor-attributes";
+ description
+ "Update the routes that match the
+ vendor attributes condition";
+ container input-route-vendor-attributes {
+ description
+ "The vendor route attributes are used for matching.";
+ uses route-vendor-attributes;
+ }
+ container update-parameters-vendor {
+ description
+ "Update options:
+ 1. update the nexthop
+ 2. update the route attributes
+ 3. update the route-vendor-attributes";
+ uses route-update-options;
+ }
+ }
+ case match-nexthop {
+ description
+ "Update the routes that match the nexthop.";
+ container input-nexthop {
+ description
+ "The nexthop used for matching.";
+ uses nexthop;
+ }
+ container update-parameters-nexthop {
+ description
+ "Update options:
+ 1. update the nexthop
+ 2. update the route attributes
+ 3. update the route-vendor-attributes";
+ uses route-update-options;
+ }
+
+
+
+Wang, et al. Standards Track [Page 63]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ }
+ }
+ output {
+ uses route-operation-state;
+ }
+ }
+ rpc nh-add {
+ description
+ "To add a nexthop to a RIB.
+ Inputs parameters:
+ 1. rib-name
+ 2. nexthop
+ Actions:
+ Add the nexthop to the RIB
+ Outputs:
+ 1. Operation result:
+ true - success
+ false - failed
+ 2. nexthop identifier";
+ input {
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ uses nexthop;
+ }
+ output {
+ leaf result {
+ type boolean;
+ mandatory true;
+ description
+ "Return the result of the rib-add operation:
+ true - success
+ false - failed";
+ }
+ leaf reason {
+ type string;
+ description
+ "The specific reason that caused the failure.";
+ }
+ leaf nexthop-id {
+ type uint32;
+ description
+ "A nexthop identifier that is allocated to the nexthop.";
+ }
+
+
+
+Wang, et al. Standards Track [Page 64]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ }
+
+ rpc nh-delete {
+ description
+ "To delete a nexthop from a RIB";
+ input {
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ uses nexthop;
+ }
+ output {
+ leaf result {
+ type boolean;
+ mandatory true;
+ description
+ "Return the result of the rib-add operation:
+ true - success;
+ false - failed";
+ }
+ leaf reason {
+ type string;
+ description
+ "The specific reason that caused the failure.";
+ }
+ }
+ }
+
+ //Notifications
+
+ notification nexthop-resolution-status-change {
+ description
+ "Nexthop resolution status (resolved/unresolved)
+ notification.";
+ container nexthop {
+ description
+ "The nexthop.";
+ uses nexthop;
+ }
+ leaf nexthop-state {
+ type nexthop-state-definition;
+ mandatory true;
+ description
+ "Nexthop resolution status (resolved/unresolved)
+
+
+
+Wang, et al. Standards Track [Page 65]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ notification.";
+ }
+ }
+
+ notification route-change {
+ description
+ "Route change notification.";
+ leaf rib-name {
+ type string;
+ mandatory true;
+ description
+ "A reference to the name of a RIB.";
+ }
+ leaf address-family {
+ type address-family-definition;
+ mandatory true;
+ description
+ "The address family of a RIB.";
+ }
+ uses route-prefix;
+ leaf route-installed-state {
+ type route-installed-state-definition;
+ mandatory true;
+ description
+ "Indicates whether the route got installed in the FIB.";
+ }
+ leaf route-state {
+ type route-state-definition;
+ mandatory true;
+ description
+ "Indicates whether a route is active or inactive.";
+ }
+ list route-change-reasons {
+ key "route-change-reason";
+ description
+ "The reasons that cause the route change. A route
+ change may result from several reasons; for
+ example, a nexthop becoming resolved will make a
+ route A active, which is of better preference than
+ a currently active route B, which results in the
+ route A being installed";
+ leaf route-change-reason {
+ type route-change-reason-definition;
+ mandatory true;
+ description
+ "The reason that caused the route change.";
+ }
+ }
+
+
+
+Wang, et al. Standards Track [Page 66]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ }
+ }
+
+ <CODE ENDS>
+
+4. IANA Considerations
+
+ This document registers a URI in the "ns" registry within the "IETF
+ XML Registry" [RFC3688]:
+
+ -------------------------------------------------------------------
+ URI: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+ -------------------------------------------------------------------
+
+ This document registers a YANG module in the "YANG Module Names"
+ registry [RFC7950]:
+
+ -------------------------------------------------------------------
+ name: ietf-i2rs-rib
+ namespace: urn:ietf:params:xml:ns:yang:ietf-i2rs-rib
+ prefix: iir
+ reference: RFC 8431
+ -------------------------------------------------------------------
+
+5. Security Considerations
+
+ The YANG module specified in this document defines a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The NETCONF access control model [RFC8341] provides the means to
+ restrict access for particular NETCONF or RESTCONF users to a
+ preconfigured subset of all available NETCONF or RESTCONF protocol
+ operations and content.
+
+ The YANG module defines information that can be configurable in
+ certain instances, for example, a RIB, a route, a nexthop can be
+ created or deleted by client applications; the YANG module also
+ defines RPCs that can be used by client applications to add/delete
+ RIBs, routes, and nexthops. In such cases, a malicious client could
+ attempt to remove, add, or update a RIB, a route, or a nexthop by
+ creating or deleting corresponding elements in the RIB, route, and
+
+
+
+Wang, et al. Standards Track [Page 67]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ nexthop lists, respectively. Removing a RIB or a route could lead to
+ disruption or impact in performance of a service; updating a route
+ may lead to suboptimal path and degradation of service levels as well
+ as possibly disruption of service. For those reasons, it is
+ important that the NETCONF access control model is vigorously applied
+ to prevent misconfiguration by unauthorized clients.
+
+ There are a number of data nodes defined in this YANG module that are
+ writable/creatable/deletable (i.e., config true, which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ o RIB: A malicious client could attempt to remove a RIB from a
+ routing instance, for example, in order to sabotage the services
+ provided by the RIB or to add a RIB to a routing instance (hence,
+ to inject unauthorized traffic into the nexthop).
+
+ o route: A malicious client could attempt to remove or add a route
+ from/to a RIB, for example, in order to sabotage the services
+ provided by the RIB.
+
+ o nexthop: A malicious client could attempt to remove or add a
+ nexthop from/to RIB, which may lead to a suboptimal path, a
+ degradation of service levels, and a possible disruption of
+ service.
+
+6. References
+
+6.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+
+
+
+
+Wang, et al. Standards Track [Page 68]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management",
+ RFC 8344, DOI 10.17487/RFC8344, March 2018,
+ <https://www.rfc-editor.org/info/rfc8344>.
+
+ [RFC8430] Bahadur, N., Ed., Kini, S., Ed., and J. Medved, "RIB
+ Information Model", RFC 8430, DOI 10.17487/RFC8430,
+ September 2018, <http://www.rfc-editor.org/info/rfc8430>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+6.2. Informative References
+
+ [I2RS-REQS]
+ Hares, S. and M. Chen, "Summary of I2RS Use Case
+ Requirements", Work in Progress, draft-ietf-i2rs-usecase-
+ reqs-summary-03, November 2016.
+
+ [RFC2784] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P.
+ Traina, "Generic Routing Encapsulation (GRE)", RFC 2784,
+ DOI 10.17487/RFC2784, March 2000,
+ <https://www.rfc-editor.org/info/rfc2784>.
+
+
+
+Wang, et al. Standards Track [Page 69]
+
+RFC 8431 RIB Data Model September 2018
+
+
+ [RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger,
+ L., Sridhar, T., Bursell, M., and C. Wright, "Virtual
+ eXtensible Local Area Network (VXLAN): A Framework for
+ Overlaying Virtualized Layer 2 Networks over Layer 3
+ Networks", RFC 7348, DOI 10.17487/RFC7348, August 2014,
+ <https://www.rfc-editor.org/info/rfc7348>.
+
+ [RFC7637] Garg, P., Ed. and Y. Wang, Ed., "NVGRE: Network
+ Virtualization Using Generic Routing Encapsulation",
+ RFC 7637, DOI 10.17487/RFC7637, September 2015,
+ <https://www.rfc-editor.org/info/rfc7637>.
+
+ [RFC7921] Atlas, A., Halpern, J., Hares, S., Ward, D., and T.
+ Nadeau, "An Architecture for the Interface to the Routing
+ System", RFC 7921, DOI 10.17487/RFC7921, June 2016,
+ <https://www.rfc-editor.org/info/rfc7921>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+Acknowledgements
+
+ The authors would like to thank Chris Bowers, John Scudder, Tom
+ Petch, Mike McBride, and Ebben Aries for their review, suggestions,
+ and comments to this document.
+
+Contributors
+
+ The following individuals also contributed to this document.
+
+ o Zekun He, Tencent Holdings Ltd.
+
+ o Sujian Lu, Tencent Holdings Ltd.
+
+ o Jeffery Zhang, Juniper Networks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 70]
+
+RFC 8431 RIB Data Model September 2018
+
+
+Authors' Addresses
+
+ Lixing Wang
+ Individual
+
+ Email: wang_little_star@sina.com
+
+
+ Mach(Guoyi) Chen
+ Huawei
+
+ Email: mach.chen@huawei.com
+
+
+ Amit Dass
+ Ericsson
+
+ Email: dass.amit@gmail.com
+
+
+ Hariharan Ananthakrishnan
+ Netflix
+
+ Email: hari@netflix.com
+
+
+ Sriganesh Kini
+ Individual
+
+ Email: sriganeshkini@gmail.com
+
+
+ Nitin Bahadur
+ Uber
+
+ Email: nitin_bahadur@yahoo.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wang, et al. Standards Track [Page 71]
+