rfc9403.original   rfc9403.txt 
Network Working Group A. Lindem Internet Engineering Task Force (IETF) A. Lindem
Internet-Draft LabN Consulting LLC Request for Comments: 9403 LabN Consulting, L.L.C.
Intended status: Standards Track Y. Qu Category: Standards Track Y. Qu
Expires: 8 December 2023 Futurewei ISSN: 2070-1721 Futurewei Technologies
6 June 2023 November 2023
RIB Extension YANG Data Model A YANG Data Model for RIB Extensions
draft-ietf-rtgwg-yang-rib-extend-22
Abstract Abstract
A Routing Information Base (RIB) is a list of routes and their A Routing Information Base (RIB) is a list of routes and their
corresponding administrative data and operational state. corresponding administrative data and operational state.
RFC 8349 defines the basic building blocks for the RIB data model, RFC 8349 defines the basic building blocks for the RIB data model,
and this model augments it to support multiple next-hops (aka, paths) and this model augments it to support multiple next hops (aka paths)
for each route as well as additional attributes. for each route as well as additional attributes.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on 8 December 2023. 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/rfc9403.
Copyright Notice Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the Copyright (c) 2023 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 (https://trustee.ietf.org/ Provisions Relating to IETF Documents
license-info) in effect on the date of publication of this document. (https://trustee.ietf.org/license-info) in effect on the date of
Please review these documents carefully, as they describe your rights publication of this document. Please review these documents
and restrictions with respect to this document. Code Components carefully, as they describe your rights and restrictions with respect
extracted from this document must include Revised BSD License text as to this document. Code Components extracted from this document must
described in Section 4.e of the Trust Legal Provisions and are include Revised BSD License text as described in Section 4.e of the
provided without warranty as described in the Revised BSD License. Trust Legal Provisions and are provided without warranty as described
in the Revised BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction
2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 2. Terminology and Notation
2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Tree Diagrams
2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 2.2. Prefixes in Data Node Names
3. Design of the Model . . . . . . . . . . . . . . . . . . . . . 4 3. Design of the Model
3.1. Tags and Preference . . . . . . . . . . . . . . . . . . . 4 3.1. Tags and Preferences
3.2. Repair Path . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Repair Path
4. RIB Model Tree . . . . . . . . . . . . . . . . . . . . . . . 6 4. RIB Model Tree
5. RIB Extension YANG Model . . . . . . . . . . . . . . . . . . 6 5. RIB Extension YANG Module
6. Security Considerations . . . . . . . . . . . . . . . . . . . 13 6. Security Considerations
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 7. IANA Considerations
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 8. References
8.1. Normative References . . . . . . . . . . . . . . . . . . 15 8.1. Normative References
8.2. Informative References . . . . . . . . . . . . . . . . . 16 8.2. Informative References
Appendix A. Combined Tree Diagram . . . . . . . . . . . . . . . 16 Appendix A. Combined Tree Diagram
Appendix B. ietf-rib-extension.yang example . . . . . . . . . . 20 Appendix B. ietf-rib-extension.yang example
Appendix C. Acknowledgments . . . . . . . . . . . . . . . . . . 25 Acknowledgments
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 Authors' Addresses
1. Introduction 1. Introduction
This document defines a YANG [RFC7950] data model which extends the This document defines a YANG data model [RFC7950] that extends the
RIB data model defined in the ietf-routing YANG module [RFC8349] with RIB data model defined in the ietf-routing YANG module [RFC8349] with
more route attributes. more route attributes.
A RIB is a collection of routes with attributes controlled and A RIB is a collection of routes with attributes controlled and
manipulated by control-plane protocols. Each RIB contains only manipulated by control plane protocols. Each RIB contains only
routes of one address family [RFC8349]. Within a protocol, routes routes of one address family [RFC8349]. Within a protocol, routes
are selected based on the metrics in use by that protocol, and the are selected based on the metrics in use by that protocol, and the
protocol installs the routes to RIB. The RIB selects the preferred protocol installs the routes to the RIB. The RIB selects the
or active route by comparing the route-preference (aka, preferred or active route by comparing the route preference (aka
administrative distance) of the candidate routes installed different administrative distance) of the candidate routes installed by
protocols. different protocols.
The module defined in this document extends the RIB to support more The module defined in this document extends the RIB to support more
route attributes, such as multiple next-hops, route metrics, and route attributes, such as multiple next hops, route metrics, and
administrative tags. administrative tags.
The YANG modules in this document conform to the Network Management The YANG modules defined and discussed in this document conform to
Datastore Architecture (NMDA) [RFC8342]. the Network Management Datastore Architecture (NMDA) [RFC8342].
2. Terminology and Notation 2. Terminology and Notation
The following terms are defined in [RFC8342]: The following terms are defined in [RFC8342]:
* configuration * configuration
* system state * system state
* operational state * operational state
skipping to change at page 3, line 42 skipping to change at line 125
* leaf * leaf
* list * list
* mandatory node * mandatory node
* module * module
* schema tree * schema tree
* RPC (Remote Procedure Call) operation The following term is defined in [RFC8349], Section 5.2:
The following terms are defined in [RFC8349] Section 5.2:
* RIB * RIB
2.1. Tree Diagrams 2.1. Tree Diagrams
Tree diagrams used in this document follow the notation defined in Tree diagrams used in this document follow the notation defined in
[RFC8340]. [RFC8340].
2.2. Prefixes in Data Node Names 2.2. Prefixes in Data Node Names
In this document, names of data nodes, actions, and other data model In this document, names of data nodes, actions, and other data model
objects are often used without a prefix, as long as it is clear from objects are often used without a prefix, as long as it is clear from
the context in which YANG module each name is defined. Otherwise, the context in which YANG module each name is defined. Otherwise,
names are prefixed using the standard prefix associated with the names are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1. corresponding YANG module, as shown in Table 1.
+========+===========================+===========+ +========+===========================+===========+
| Prefix | YANG module | Reference | | Prefix | YANG Module | Reference |
+========+===========================+===========+ +========+===========================+===========+
| if | ietf-interfaces | [RFC8343] | | if | ietf-interfaces | [RFC8343] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| rt | ietf-routing | [RFC8349] | | rt | ietf-routing | [RFC8349] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| v4ur | ietf-ipv4-unicast-routing | [RFC8349] | | v4ur | ietf-ipv4-unicast-routing | [RFC8349] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| v6ur | ietf-ipv6-unicast-routing | [RFC8349] | | v6ur | ietf-ipv6-unicast-routing | [RFC8349] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| inet | ietf-inet-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] |
+--------+---------------------------+-----------+ +--------+---------------------------+-----------+
| ospf | ietf-ospf | [RFC9129] |
+--------+---------------------------+-----------+
| isis | ietf-isis | [RFC9130] |
+--------+---------------------------+-----------+
Table 1: Prefixes and Corresponding YANG Modules Table 1: Prefixes and Corresponding YANG Modules
3. Design of the Model 3. Design of the Model
The YANG module defined in this document augments the ietf-routing The YANG module defined in this document augments the ietf-routing,
YANG modules defined in [RFC8349], which provide a basis for routing ietf-ipv4-unicast-routing, and ietf-ipv6-unicast-routing YANG modules
system data model development. Together with YANG modules defined in defined in [RFC8349], which provide a basis for routing system data
[RFC8349], a generic RIB YANG model is defined to implement and model development. Together with the ietf-routing YANG module and
monitor a RIB. other YANG modules defined in [RFC8349], a generic RIB YANG data
model is defined herein to implement and monitor a RIB.
The modules in [RFC8349] also define the basic configuration and The modules in [RFC8349] also define the basic configuration and
operational state for both IPv4 and IPv6 static routes. This operational state for both IPv4 and IPv6 static routes. This
document provides augmentations for static routes to support multiple document provides augmentations for static routes to support multiple
next-hops and more next-hop attributes. next hops and more next-hop attributes.
3.1. Tags and Preference 3.1. Tags and Preferences
Individual route tags are supported at both the route and next-hop Individual route tags are supported at both the route and next-hop
level. A preference per next-hop is also supported for selection of level. A preference per next hop is also supported for selection of
the most preferred reachable static route. the most preferred reachable static route.
The following tree snapshot shows tag and preference which augment The following tree snapshot shows tag and preference entries that
static IPv4 unicast routes and IPv6 unicast routes next-hop. augment static IPv4 unicast route and IPv6 unicast route next hops.
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/rt:static-routes/v4ur:ipv4 /rt:control-plane-protocol/rt:static-routes/v4ur:ipv4
/v4ur:route/v4ur:next-hop/v4ur:next-hop-options /v4ur:route/v4ur:next-hop/v4ur:next-hop-options
/v4ur:simple-next-hop: /v4ur:simple-next-hop:
+--rw preference? uint32 +--rw preference? uint32
+--rw tag? uint32 +--rw tag? uint32
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/rt:static-routes/v4ur:ipv4 /rt:control-plane-protocol/rt:static-routes/v4ur:ipv4
/v4ur:route/v4ur:next-hop/v4ur:next-hop-options /v4ur:route/v4ur:next-hop/v4ur:next-hop-options
skipping to change at page 5, line 29 skipping to change at line 209
/v6ur:route/v6ur:next-hop/v6ur:next-hop-options /v6ur:route/v6ur:next-hop/v6ur:next-hop-options
/v6ur:simple-next-hop: /v6ur:simple-next-hop:
+--rw preference? uint32 +--rw preference? uint32
+--rw tag? uint32 +--rw tag? uint32
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/rt:static-routes/v6ur:ipv6 /rt:control-plane-protocol/rt:static-routes/v6ur:ipv6
/v6ur:route/v6ur:next-hop/v6ur:next-hop-options /v6ur:route/v6ur:next-hop/v6ur:next-hop-options
/v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop: /v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop:
+--rw preference? uint32 +--rw preference? uint32
+--rw tag? uint32 +--rw tag? uint32
augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route:
+--ro metric? uint32
+--ro tag* uint32
+--ro application-tag? uint32
3.2. Repair Path 3.2. Repair Path
The IP Fast Reroute (IPFRR) calculation by routing protocol pre- The IP Fast Reroute (IPFRR) calculation by routing protocol
computes repair paths [RFC5714], and the repair paths are installed precomputes repair paths [RFC5714], and the repair paths are
in the RIB. installed in the RIB.
Each route next-hop in the RIB is augmented with a repair path, and Each route next hop in the RIB is augmented with a repair path and is
is shown in the following tree snapshot. shown in the following tree snapshot.
augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route
/rt:next-hop/rt:next-hop-options/rt:simple-next-hop: /rt:next-hop/rt:next-hop-options/rt:simple-next-hop:
+--ro repair-path +--ro repair-path
+--ro outgoing-interface? if:interface-state-ref +--ro outgoing-interface? if:interface-state-ref
+--ro next-hop-address? inet:ip-address-no-zone +--ro next-hop-address? inet:ip-address-no-zone
+--ro metric? uint32 +--ro metric? uint32
augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route
/rt:next-hop/rt:next-hop-options/rt:next-hop-list /rt:next-hop/rt:next-hop-options/rt:next-hop-list
/rt:next-hop-list/rt:next-hop: /rt:next-hop-list/rt:next-hop:
+--ro repair-path +--ro repair-path
+--ro outgoing-interface? if:interface-state-ref +--ro outgoing-interface? if:interface-state-ref
+--ro next-hop-address? inet:ip-address-no-zone +--ro next-hop-address? inet:ip-address-no-zone
+--ro metric? uint32 +--ro metric? uint32
4. RIB Model Tree 4. RIB Model Tree
The ietf-routing.yang tree with the augmentations herein is included The ietf-routing.yang tree with the augmentations herein is included
in Appendix A. The meaning of the symbols can be found in [RFC8340]. in Appendix A. The meanings of the symbols can be found in
[RFC8340].
5. RIB Extension YANG Model 5. RIB Extension YANG Module
<CODE BEGINS> file "ietf-rib-extension@2023-06-06.yang" This YANG module references [RFC6991], [RFC8343], [RFC8349],
[RFC9129], [RFC9130], and [RFC5714].
<CODE BEGINS> file "ietf-rib-extension@2023-11-01.yang"
module ietf-rib-extension { module ietf-rib-extension {
yang-version "1.1"; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-rib-extension"; namespace "urn:ietf:params:xml:ns:yang:ietf-rib-extension";
prefix rib-ext; prefix rib-ext;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix inet;
reference "RFC 6991: Common YANG Data Types"; reference
"RFC 6991: Common YANG Data Types";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix if;
reference "RFC 8343: A YANG Data Model for Interface reference
Management (NMDA Version)"; "RFC 8343: A YANG Data Model for Interface
Management";
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix rt;
reference "RFC 8349: A YANG Data Model for Routing reference
Management (NMDA Version)"; "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)";
} }
import ietf-ipv4-unicast-routing { import ietf-ipv4-unicast-routing {
prefix "v4ur"; prefix v4ur;
reference "RFC 8349: A YANG Data Model for Routing reference
Management (NMDA Version)"; "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)";
} }
import ietf-ipv6-unicast-routing { import ietf-ipv6-unicast-routing {
prefix "v6ur"; prefix v6ur;
reference "RFC 8349: A YANG Data Model for Routing reference
Management (NMDA Version)"; "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)";
} }
organization import ietf-ospf {
"IETF RTGWG - Routing Working Group"; prefix ospf;
reference "RFC 9129: YANG Data Model for the OSPF Protocol";
}
import ietf-isis {
prefix isis;
reference "RFC 9130: YANG Data Model for the IS-IS Protocol";
}
organization
"IETF RTGWG (Routing Area Working Group)";
contact contact
"WG Web: <https://datatracker.ietf.org/group/rtgwg/> "WG Web: <https://datatracker.ietf.org/wg/rtgwg/>
WG List: <mailto:rtgwg@ietf.org> WG List: <mailto:rtgwg@ietf.org>
Author: Acee Lindem Author: Acee Lindem
<mailto:acee.ietf@gmail.com> <mailto:acee.ietf@gmail.com>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yingzhen.qu@futurewei.com>"; <mailto:yingzhen.qu@futurewei.com>";
description description
"This YANG module extends the RIB defined in the ietf-routing "This YANG module extends the RIB defined in the ietf-routing
YANG module with additional route attributes. YANG module with additional route attributes.
This YANG module conforms to the Network Management This YANG module conforms to the Network Management
Datastore Architecture (NDMA) as described in RFC 8342. Datastore Architecture (NMDA) as described in RFC 8342.
Copyright (c) 2023 IETF Trust and the persons identified as Copyright (c) 2023 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC 9403; see the
see the RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2023-06-06 { revision 2023-11-01 {
description description
"Initial Version"; "Initial version.";
reference reference
"RFC XXXX: A YANG Data Model for RIB Extensions."; "RFC 9403: A YANG Data Model for RIB Extensions";
} }
/* Groupings */ /* Groupings */
grouping rib-statistics { grouping rib-statistics {
description description
"Statistics grouping used for RIB augmentation."; "Statistics grouping used for RIB augmentation.";
container statistics { container statistics {
config false; config false;
description description
"Container for RIB statistics."; "Container for RIB statistics.";
leaf total-routes { leaf total-routes {
type uint32; type uint32;
description description
"Total number of routes in the RIB"; "Total number of routes in the RIB.";
} }
leaf total-active-routes { leaf total-active-routes {
type uint32; type uint32;
description description
"Total number of active routes in the RIB. An active "Total number of active routes in the RIB. An active
route is the route that is preferred over other routes route is the route that is preferred over other routes
to the same destination prefix."; to the same destination prefix.";
} }
leaf total-route-memory { leaf total-route-memory {
type uint64; type uint64;
units "bytes"; units "bytes";
description description
"Total memory for all routes in the RIB."; "Total memory for all routes in the RIB.";
} }
list protocol-statistics { list protocol-statistics {
skipping to change at page 8, line 31 skipping to change at line 373
type identityref { type identityref {
base rt:routing-protocol; base rt:routing-protocol;
} }
description description
"Routing protocol installing routes in the RIB."; "Routing protocol installing routes in the RIB.";
} }
leaf routes { leaf routes {
type uint32; type uint32;
description description
"Total number of routes in the RIB for the routing "Total number of routes in the RIB for the routing
protocol identified by the 'protocol'."; protocol identified by the 'protocol' entry.";
} }
leaf active-routes { leaf active-routes {
type uint32; type uint32;
description description
"Total number of active routes in the RIB for the routing "Total number of active routes in the RIB for the
protocol for the routing protocol identified by the routing protocol identified by the 'protocol' entry.
'protocol'. An active route is preferred over other An active route is preferred over other routes to the
routes to the same destination prefix."; same destination prefix.";
} }
leaf route-memory { leaf route-memory {
type uint64; type uint64;
units "bytes"; units "bytes";
description description
"Total memory for all routes in the RIB for the routing "Total memory for all routes in the RIB for the
protocol identified by the 'protocol'."; routing protocol identified by the 'protocol'
entry.";
} }
} }
} }
} }
grouping attributes {
description
"Common attributes applicable to all routes.";
leaf metric {
type uint32;
description
"The metric is a numeric value indicating the cost
of the route from the perspective of the routing
protocol installing the route. In general, routes with
a lower metric installed by the same routing protocol
are lower cost to reach and are preferable to routes
with a higher metric. However, metrics from different
routing protocols are not comparable.";
}
leaf-list tag {
type uint32;
description
"A tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as
advertisement and filtering of the route.";
}
leaf application-tag {
type uint32;
description
"The application-specific tag is an additional tag that
can be used by applications that require semantics and/or
policy different from that of the tag. For example,
the tag is usually automatically advertised in OSPF
AS-External Link State Advertisements (LSAs) while this
application-specific tag is not advertised implicitly.";
}
}
grouping repair-path { grouping repair-path {
description description
"Grouping for IP Fast Reroute repair path."; "Grouping for the IP Fast Reroute (IPFRR) repair path.";
container repair-path { container repair-path {
description description
"IP Fast Reroute next-hop repair path."; "IPFRR next-hop repair path.";
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-state-ref; type if:interface-state-ref;
description description
"Name of the outgoing interface."; "Name of the outgoing interface.";
} }
leaf next-hop-address { leaf next-hop-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"IP address of the next hop."; "IP address of the next hop.";
} }
leaf metric { leaf metric {
type uint32; type uint32;
description description
"The metric for the repair path. While the IP Fast "The metric for the repair path. While the reroute
Reroute re-route repair is local and the metric is repair is local and the metric is not advertised
not advertised externally, the metric for repair path externally, the metric for the repair path is useful
is useful for troubleshooting purposes."; for troubleshooting purposes.";
} }
reference reference
"RFC 5714: IP Fast Reroute Framework."; "RFC 5714: IP Fast Reroute Framework";
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/"
+ "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/" + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/"
+ "v4ur:simple-next-hop" + "v4ur:simple-next-hop" {
{
description description
"Augment 'simple-next-hop' case in IPv4 unicast route."; "Augment 'simple-next-hop' case in IPv4 unicast route.";
leaf preference { leaf preference {
type uint32; type uint32;
default "1"; default "1";
description description
"The preference is used to select among multiple static "The preference is used to select among multiple static
routes. Routes with a lower preference next-hop are routes. Routes with a lower next-hop preference value
preferred and equal preference routes result in are preferred, and equal-preference routes result in
Equal-Cost-Multi-Path (ECMP) static routes."; Equal-Cost Multipath (ECMP) static routes.";
} }
leaf tag { leaf tag {
type uint32; type uint32;
default "0"; default "0";
description description
"The tag is a 32-bit opaque value associated with the "The tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as route that can be used for policy decisions such as
advertisement and filtering of the route."; advertisement and filtering of the route.";
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/"
+ "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/" + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/"
+ "v4ur:next-hop-list/v4ur:next-hop-list/v4ur:next-hop" + "v4ur:next-hop-list/v4ur:next-hop-list/v4ur:next-hop" {
{
description description
"Augment static route configuration 'next-hop-list'."; "Augment static route configuration 'next-hop-list'.";
leaf preference { leaf preference {
type uint32; type uint32;
default "1"; default "1";
description description
"The preference is used to select among multiple static "The preference is used to select among multiple static
routes. Routes with a lower preference next-hop are routes. Routes with a lower next-hop preference value
preferred and equal preference routes result in are preferred, and equal-preference routes result in
Equal-Cost-Multi-Path (ECMP) static routes."; ECMP static routes.";
} }
leaf tag { leaf tag {
type uint32; type uint32;
default "0"; default "0";
description description
"The tag is a 32-bit opaque value associated with the "The tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as route that can be used for policy decisions such as
advertisement and filtering of the route."; advertisement and filtering of the route.";
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/"
+ "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/" + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/"
+ "v6ur:simple-next-hop" + "v6ur:simple-next-hop" {
{
description description
"Augment 'simple-next-hop' case in IPv6 unicast route."; "Augment 'simple-next-hop' case in IPv6 unicast route.";
leaf preference { leaf preference {
type uint32; type uint32;
default "1"; default "1";
description description
"The preference is used to select among multiple static "The preference is used to select among multiple static
routes. Routes with a lower preference next-hop are routes. Routes with a lower next-hop preference value
preferred and equal preference routes result in are preferred, and equal-preference routes result in
Equal-Cost-Multi-Path (ECMP) static routes."; ECMP static routes.";
} }
leaf tag { leaf tag {
type uint32; type uint32;
default "0"; default "0";
description description
"The tag is a 32-bit opaque value associated with the "The tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as route that can be used for policy decisions such as
advertisement and filtering of the route."; advertisement and filtering of the route.";
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/"
+ "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/" + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/"
+ "v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop" + "v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop" {
{
description description
"Augment static route configuration 'next-hop-list'."; "Augment static route configuration 'next-hop-list'.";
leaf preference { leaf preference {
type uint32; type uint32;
default "1"; default "1";
description description
"The preference is used to select among multiple static "The preference is used to select among multiple static
routes. Routes with a lower preference next-hop are routes. Routes with a lower next-hop preference value
preferred and equal preference routes result in are preferred, and equal-preference routes result in
Equal-Cost-Multi-Path (ECMP) static routes."; ECMP static routes.";
} }
leaf tag { leaf tag {
type uint32; type uint32;
default "0"; default "0";
description description
"The tag is a 32-bit opaque value associated with the "The tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as route that can be used for policy decisions such as
advertisement and filtering of the route."; advertisement and filtering of the route.";
} }
} }
augment "/rt:routing/rt:ribs/rt:rib" augment "/rt:routing/rt:ribs/rt:rib" {
{
description description
"Augment a RIB with statistics."; "Augment a RIB with statistics.";
uses rib-statistics; uses rib-statistics;
} }
augment "/rt:routing/rt:ribs/rt:rib/" augment "/rt:routing/rt:ribs/rt:rib/"
+ "rt:routes/rt:route" + "rt:routes/rt:route" {
{
description description
"Augment a route in RIB with attributes."; "Augment a route in the RIB with common attributes.";
uses attributes; leaf metric {
when "not(derived-from("
+ "../rt:source-protocol, 'ospf:ospf')) "
+ "and not(derived-from( "
+ "../rt:source-protocol, 'isis:isis'))" {
description
"This augmentation is only valid for routes that don't
have OSPF or IS-IS as the source protocol. The YANG
data models for OSPF and IS-IS already include a
'metric' augmentation for routes.";
}
type uint32;
description
"The metric is a numeric value indicating the cost
of the route from the perspective of the routing
protocol installing the route. In general, routes with
a lower metric installed by the same routing protocol
are lower cost to reach and are preferable to routes
with a higher metric. However, metrics from different
routing protocols are not comparable.";
}
leaf-list tag {
when "not(derived-from("
+ "../rt:source-protocol, 'ospf:ospf')) "
+ "and not(derived-from( "
+ "../rt:source-protocol, 'isis:isis'))" {
description
"This augmentation is only valid for routes that don't
have OSPF or IS-IS as the source protocol. The YANG
data models for OSPF and IS-IS already include a 'tag'
augmentation for routes.";
}
type uint32;
description
"A tag is a 32-bit opaque value associated with the
route that can be used for policy decisions such as
advertisement and filtering of the route.";
}
leaf application-tag {
type uint32;
description
"The application-specific tag is an additional tag that
can be used by applications that require semantics and/or
policy different from that of the tag. For example,
the tag is usually automatically advertised in OSPF
AS-External Link State Advertisements (LSAs) while this
application-specific tag is not advertised implicitly.";
}
} }
augment "/rt:routing/rt:ribs/rt:rib/" augment "/rt:routing/rt:ribs/rt:rib/"
+ "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/"
+ "rt:simple-next-hop" + "rt:simple-next-hop" {
{
description description
"Augment simple-next-hop with repair-path."; "Augment 'simple-next-hop' with 'repair-path'.";
uses repair-path; uses repair-path;
} }
augment "/rt:routing/rt:ribs/rt:rib/" augment "/rt:routing/rt:ribs/rt:rib/"
+ "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/"
+ "rt:next-hop-list/rt:next-hop-list/rt:next-hop" + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
{
description description
"Augment the next-hop with a repair path."; "Augment the next hop with a repair path.";
uses repair-path; uses repair-path;
} }
} }
<CODE ENDS> <CODE ENDS>
6. Security Considerations 6. Security Considerations
The YANG module specified in this document defines a schema for data The YANG module specified in this document defines a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC8446]. [RFC8446].
The NETCONF access control model [RFC8341] provides the means to The Network Configuration Access Control Model (NACM) [RFC8341]
restrict access for particular NETCONF or RESTCONF users to a pre- provides the means to restrict access for particular NETCONF or
configured subset of all available NETCONF or RESTCONF protocol RESTCONF users to a preconfigured subset of all available NETCONF or
operations and content. RESTCONF protocol operations and content.
There are a number of data nodes defined in ietf-rib-extensions.yang There are a number of data nodes defined in the ietf-rib-
module that are writable/creatable/deletable (i.e., config true, extension.yang module that are writable/creatable/deletable (i.e.,
which is the default). These data nodes may be considered sensitive config true, which is the default). These data nodes may be
or vulnerable in some network environments. Write operations (e.g., considered sensitive or vulnerable in some network environments.
edit-config) to these data nodes without proper protection can have a Write operations (e.g., edit-config) to these data nodes without
negative effect on network operations. These are the subtrees and proper protection can have a negative effect on network operations.
data nodes and their sensitivity/vulnerability: These are the subtrees and data nodes and their sensitivity/
vulnerability:
/v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:preference * /v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:preference
/v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:tag * /v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:tag
/v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list * /v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list
/v4ur:next-hop/rib-ext:preference /v4ur:next-hop/rib-ext:preference
/v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list * /v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list
/v4ur:next-hop/rib-ext:tag /v4ur:next-hop/rib-ext:tag
/v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:preference * /v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:preference
/v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:tag * /v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:tag
/v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list
* /v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list
/v6ur:next-hop/rib-ext:preference /v6ur:next-hop/rib-ext:preference
/v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list * /v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list
/v6ur:next-hop/rib-ext:tag /v6ur:next-hop/rib-ext:tag
For these augmentations to ietf-routing.yang, the ability to For these augmentations to ietf-routing.yang, the ability to
delete, add, and modify IPv4 and IPv6 static route preference and delete, add, and modify IPv4 and IPv6 static route preferences and
tag would allow traffic to be misrouted. tags would allow traffic to be misrouted.
Some of the readable data nodes in the ietf-rib-extensions.yang Some of the readable data nodes in the ietf-rib-extension.yang module
module may be considered sensitive or vulnerable in some network may be considered sensitive or vulnerable in some network
environments. It is thus important to control read access (e.g., via environments. It is thus important to control read access (e.g., via
get, get-config, or notification) to these data nodes. These are the get, get-config, or notification) to these data nodes. These are the
subtrees and data nodes and their sensitivity/vulnerability: subtrees and data nodes and their sensitivity/vulnerability:
/rt:routing/rt:ribs/rt:rib/rib-ext:statistics * /rt:routing/rt:ribs/rt:rib/rib-ext:statistics
/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:metric * /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:metric
/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:tag * /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:tag
/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route /rib- * /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:application-
ext:application-tag tag
/rt:route/rt:next-hop/rt:next-hop-options/rt:simple-next-hop /rib- * /rt:route/rt:next-hop/rt:next-hop-options/rt:simple-next-hop/rib-
ext:repair-path ext:repair-path
/rt:routes/rt:route/rt:next-hop/rt:next-hop-options /rt:next-hop- * /rt:routes/rt:route/rt:next-hop/rt:next-hop-options/rt:next-hop-
list/rt:next-hop-list/rt:next-hop/rib-ext:repair-path list/rt:next-hop-list/rt:next-hop/rib-ext:repair-path
The exposure of the Routing Information Base (RIB) will expose the Exposing the RIB will expose the routing topology of the network.
routing topology of the network. This may be undesirable due to This may be undesirable due to the fact that such exposure may
the fact that exposure may facilitate other attacks. facilitate other attacks. Additionally, network operators may
Additionally, network operators may consider their topologies to consider their topologies to be sensitive confidential data.
be sensitive confidential data.
All the security considerations for [RFC8349] writable and readable All the security considerations for writable and readable data nodes
data nodes apply to the augmentations described herein. defined in [RFC8349] apply to the augmentations described herein.
7. IANA Considerations 7. IANA Considerations
This document registers a URI in the IETF XML registry [RFC3688]. This document registers the following URI in the "IETF XML Registry"
Following the format in [RFC3688], the following registration is [RFC3688].
requested to be made:
URI: urn:ietf:params:xml:ns:yang:ietf-rib-extension URI: urn:ietf:params:xml:ns:yang:ietf-rib-extension
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
This document registers a YANG module in the YANG Module Names IANA has registered the following YANG module in the "YANG Module
registry [RFC6020]. Names" registry [RFC6020].
name: ietf-rib-extension Name: ietf-rib-extension
namespace: urn:ietf:params:xml:ns:yang:ietf-rib-extension Namespace: urn:ietf:params:xml:ns:yang:ietf-rib-extension
prefix: rib-ext Prefix: rib-ext
reference: RFC XXXX Reference: RFC 9403
8. References 8. References
8.1. Normative References 8.1. Normative References
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
skipping to change at page 16, line 28 skipping to change at line 753
[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
Routing Management (NMDA Version)", RFC 8349, Routing Management (NMDA Version)", RFC 8349,
DOI 10.17487/RFC8349, March 2018, DOI 10.17487/RFC8349, March 2018,
<https://www.rfc-editor.org/info/rfc8349>. <https://www.rfc-editor.org/info/rfc8349>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>. <https://www.rfc-editor.org/info/rfc8446>.
[RFC9129] Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem,
"YANG Data Model for the OSPF Protocol", RFC 9129,
DOI 10.17487/RFC9129, October 2022,
<https://www.rfc-editor.org/info/rfc9129>.
[RFC9130] Litkowski, S., Ed., Yeung, D., Lindem, A., Zhang, J., and
L. Lhotka, "YANG Data Model for the IS-IS Protocol",
RFC 9130, DOI 10.17487/RFC9130, October 2022,
<https://www.rfc-editor.org/info/rfc9130>.
[W3C.REC-xml-20081126]
Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and
F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth
Edition)", World Wide Web Consortium Recommendation REC-
xml-20081126, November 2008,
<https://www.w3.org/TR/2008/REC-xml-20081126>.
8.2. Informative References 8.2. Informative References
[RFC5714] Shand, M. and S. Bryant, "IP Fast Reroute Framework", [RFC5714] Shand, M. and S. Bryant, "IP Fast Reroute Framework",
RFC 5714, DOI 10.17487/RFC5714, January 2010, RFC 5714, DOI 10.17487/RFC5714, January 2010,
<https://www.rfc-editor.org/info/rfc5714>. <https://www.rfc-editor.org/info/rfc5714>.
[RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG",
RFC 7951, DOI 10.17487/RFC7951, August 2016,
<https://www.rfc-editor.org/info/rfc7951>.
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
<https://www.rfc-editor.org/info/rfc8340>. <https://www.rfc-editor.org/info/rfc8340>.
[RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
"Handling Long Lines in Content of Internet-Drafts and "Handling Long Lines in Content of Internet-Drafts and
RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
<https://www.rfc-editor.org/info/rfc8792>. <https://www.rfc-editor.org/info/rfc8792>.
Appendix A. Combined Tree Diagram Appendix A. Combined Tree Diagram
This appendix includes the combined ietf-routing.yang, ietf-ipv4- This appendix provides the combined ietf-routing.yang, ietf-ipv4-
unicast-routing.yang, ietf-ipv6-unicast-routing.yang and ietf-rib- unicast-routing.yang, ietf-ipv6-unicast-routing.yang, and ietf-rib-
extensions.yang tree diagram. extension.yang tree diagram.
module: ietf-routing module: ietf-routing
+--rw routing +--rw routing
+--rw router-id? yang:dotted-quad {router-id}? +--rw router-id? yang:dotted-quad {router-id}?
+--ro interfaces +--ro interfaces
| +--ro interface* if:interface-ref | +--ro interface* if:interface-ref
+--rw control-plane-protocols +--rw control-plane-protocols
| +--rw control-plane-protocol* [type name] | +--rw control-plane-protocol* [type name]
| +--rw type identityref | +--rw type identityref
| +--rw name string | +--rw name string
| +--rw description? string | +--rw description? string
| +--rw static-routes | +--rw static-routes
| +--rw v4ur:ipv4 | +--rw v4ur:ipv4
| | +--rw v4ur:route* [destination-prefix] | | +--rw v4ur:route* [destination-prefix]
| | +--rw v4ur:destination-prefix inet:ipv4-prefix | | +--rw v4ur:destination-prefix inet:ipv4-prefix
| | +--rw v4ur:description? string | | +--rw v4ur:description? string
| | +--rw v4ur:next-hop | | +--rw v4ur:next-hop
| | +--rw (v4ur:next-hop-options) | | +--rw (v4ur:next-hop-options)
| | +--:(v4ur:simple-next-hop) | | +--:(v4ur:simple-next-hop)
| | | +--rw v4ur:outgoing-interface? | | | +--rw v4ur:outgoing-interface?
| | | | if:interface-ref | | | | if:interface-ref
| | | +--rw v4ur:next-hop-address? | | | +--rw v4ur:next-hop-address?
| | | | inet:ipv4-address | | | | inet:ipv4-address
| | | +--rw rib-ext:preference? uint32 | | | +--rw rib-ext:preference? uint32
| | | +--rw rib-ext:tag? uint32 | | | +--rw rib-ext:tag? uint32
| | +--:(v4ur:special-next-hop) | | +--:(v4ur:special-next-hop)
| | | +--rw v4ur:special-next-hop? enumeration | | | +--rw v4ur:special-next-hop? enumeration
| | +--:(v4ur:next-hop-list) | | +--:(v4ur:next-hop-list)
| | +--rw v4ur:next-hop-list | | +--rw v4ur:next-hop-list
| | +--rw v4ur:next-hop* [index] | | +--rw v4ur:next-hop* [index]
| | +--rw v4ur:index string | | +--rw v4ur:index string
| | +--rw v4ur:outgoing-interface? | | +--rw v4ur:outgoing-interface?
| | | if:interface-ref | | | if:interface-ref
| | +--rw v4ur:next-hop-address? | | +--rw v4ur:next-hop-address?
| | | inet:ipv4-address | | | inet:ipv4-address
| | +--rw rib-ext:preference? uint32 | | +--rw rib-ext:preference? uint32
| | +--rw rib-ext:tag? uint32 | | +--rw rib-ext:tag? uint32
| +--rw v6ur:ipv6 | +--rw v6ur:ipv6
| +--rw v6ur:route* [destination-prefix] | +--rw v6ur:route* [destination-prefix]
| +--rw v6ur:destination-prefix inet:ipv6-prefix | +--rw v6ur:destination-prefix inet:ipv6-prefix
| +--rw v6ur:description? string | +--rw v6ur:description? string
| +--rw v6ur:next-hop | +--rw v6ur:next-hop
| +--rw (v6ur:next-hop-options) | +--rw (v6ur:next-hop-options)
| +--:(v6ur:simple-next-hop) | +--:(v6ur:simple-next-hop)
| | +--rw v6ur:outgoing-interface? | | +--rw v6ur:outgoing-interface?
| | | if:interface-ref | | | if:interface-ref
| | +--rw v6ur:next-hop-address? | | +--rw v6ur:next-hop-address?
| | | inet:ipv6-address | | | inet:ipv6-address
| | +--rw rib-ext:preference? uint32 | | +--rw rib-ext:preference? uint32
| | +--rw rib-ext:tag? uint32 | | +--rw rib-ext:tag? uint32
| +--:(v6ur:special-next-hop) | +--:(v6ur:special-next-hop)
| | +--rw v6ur:special-next-hop? enumeration | | +--rw v6ur:special-next-hop? enumeration
| +--:(v6ur:next-hop-list) | +--:(v6ur:next-hop-list)
| +--rw v6ur:next-hop-list | +--rw v6ur:next-hop-list
| +--rw v6ur:next-hop* [index] | +--rw v6ur:next-hop* [index]
| +--rw v6ur:index string | +--rw v6ur:index string
| +--rw v6ur:outgoing-interface? | +--rw v6ur:outgoing-interface?
| | if:interface-ref | | if:interface-ref
| +--rw v6ur:next-hop-address? | +--rw v6ur:next-hop-address?
| | inet:ipv6-address | | inet:ipv6-address
| +--rw rib-ext:preference? uint32 | +--rw rib-ext:preference? uint32
| +--rw rib-ext:tag? uint32 | +--rw rib-ext:tag? uint32
+--rw ribs +--rw ribs
+--rw rib* [name] +--rw rib* [name]
+--rw name string +--rw name string
+--rw address-family identityref +--rw address-family identityref
+--ro default-rib? boolean {multiple-ribs}? +--ro default-rib? boolean {multiple-ribs}?
+--ro routes +--ro routes
| +--ro route* [] | +--ro route* []
| +--ro route-preference? route-preference | +--ro route-preference? route-preference
| +--ro next-hop | +--ro next-hop
| | +--ro (next-hop-options) | | +--ro (next-hop-options)
| | +--:(simple-next-hop) | | +--:(simple-next-hop)
| | | +--ro outgoing-interface? if:interface-ref | | | +--ro outgoing-interface?
| | | +--ro v4ur:next-hop-address? inet:ipv4-address | | | | if:interface-ref
| | | +--ro v6ur:next-hop-address? inet:ipv6-address | | | +--ro v4ur:next-hop-address?
| | | +--ro rib-ext:repair-path | | | | inet:ipv4-address
| | | +--ro rib-ext:outgoing-interface? | | | +--ro v6ur:next-hop-address?
| | | | if:interface-state-ref | | | | inet:ipv6-address
| | | +--ro rib-ext:next-hop-address? | | | +--ro rib-ext:repair-path
| | | | inet:ip-address-no-zone | | | +--ro rib-ext:outgoing-interface?
| | | +--ro rib-ext:metric? uint32 | | | | if:interface-state-ref
| | +--:(special-next-hop) | | | +--ro rib-ext:next-hop-address?
| | | +--ro special-next-hop? enumeration | | | | inet:ip-address-no-zone
| | +--:(next-hop-list) | | | +--ro rib-ext:metric? uint32
| | +--ro next-hop-list | | +--:(special-next-hop)
| | +--ro next-hop* [] | | | +--ro special-next-hop? enumeration
| | +--ro outgoing-interface? | | +--:(next-hop-list)
| | | if:interface-ref | | +--ro next-hop-list
| | +--ro v4ur:address? | | +--ro next-hop* []
| | | inet:ipv4-address | | +--ro outgoing-interface?
| | +--ro v6ur:address? | | | if:interface-ref
| | | inet:ipv6-address | | +--ro v4ur:address?
| | +--ro rib-ext:repair-path | | | inet:ipv4-address
| | +--ro rib-ext:outgoing-interface? | | +--ro v6ur:address?
| | | if:interface-state-ref | | | inet:ipv6-address
| | +--ro rib-ext:next-hop-address? | | +--ro rib-ext:repair-path
| | | inet:ip-address-no-zone | | +--ro rib-ext:outgoing-interface?
| | +--ro rib-ext:metric? uint32 | | | if:interface-state-ref
| +--ro source-protocol identityref | | +--ro rib-ext:next-hop-address?
| +--ro active? empty | | | inet:ip-address-no-zone
| +--ro last-updated? yang:date-and-time | | +--ro rib-ext:metric? uint32
| +--ro v4ur:destination-prefix? inet:ipv4-prefix | +--ro source-protocol identityref
| +--ro v6ur:destination-prefix? inet:ipv6-prefix | +--ro active? empty
| +--ro rib-ext:metric? uint32 | +--ro last-updated? yang:date-and-time
| +--ro rib-ext:tag* uint32 | +--ro v4ur:destination-prefix? inet:ipv4-prefix
| +--ro rib-ext:application-tag? uint32 | +--ro v6ur:destination-prefix? inet:ipv6-prefix
+---x active-route | +--ro rib-ext:metric? uint32
| +---w input | +--ro rib-ext:tag* uint32
| | +---w v4ur:destination-address? inet:ipv4-address | +--ro rib-ext:application-tag? uint32
| | +---w v6ur:destination-address? inet:ipv6-address +---x active-route
| +--ro output | +---w input
| +--ro route | | +---w v4ur:destination-address? inet:ipv4-address
| +--ro next-hop | | +---w v6ur:destination-address? inet:ipv6-address
| | +--ro (next-hop-options) | +--ro output
| | +--:(simple-next-hop) | +--ro route
| | | +--ro outgoing-interface? if:interface-ref | +--ro next-hop
| | | +--ro v4ur:next-hop-address? | | +--ro (next-hop-options)
| | | | inet:ipv4-address | | +--:(simple-next-hop)
| | | +--ro v6ur:next-hop-address? | | | +--ro outgoing-interface?
| | | | inet:ipv6-address | | | | if:interface-ref
| | +--:(special-next-hop) | | | +--ro v4ur:next-hop-address?
| | | +--ro special-next-hop? enumeration | | | | inet:ipv4-address
| | +--:(next-hop-list) | | | +--ro v6ur:next-hop-address?
| | +--ro next-hop-list | | | | inet:ipv6-address
| | +--ro next-hop* [] | | +--:(special-next-hop)
| | +--ro outgoing-interface? | | | +--ro special-next-hop? enumeration
| | | if:interface-ref | | +--:(next-hop-list)
| | +--ro v4ur:next-hop-address? | | +--ro next-hop-list
| | | inet:ipv4-address | | +--ro next-hop* []
| | +--ro v6ur:next-hop-address? | | +--ro outgoing-interface?
| | | inet:ipv6-address | | | if:interface-ref
| +--ro source-protocol identityref | | +--ro v4ur:next-hop-address?
| +--ro active? empty | | | inet:ipv4-address
| +--ro last-updated? yang:date-and-time | | +--ro v6ur:next-hop-address?
| +--ro v4ur:destination-prefix? inet:ipv4-prefix | | | inet:ipv6-address
| +--ro v6ur:destination-prefix? inet:ipv6-prefix | +--ro source-protocol identityref
+--rw description? string | +--ro active? empty
+--ro rib-ext:statistics | +--ro last-updated? yang:date-and-time
+--ro rib-ext:total-routes? uint32 | +--ro v4ur:destination-prefix? inet:ipv4-prefix
+--ro rib-ext:total-active-routes? uint32 | +--ro v6ur:destination-prefix? inet:ipv6-prefix
+--ro rib-ext:total-route-memory? uint64 +--rw description? string
+--ro rib-ext:protocol-statistics* [] +--ro rib-ext:statistics
+--ro rib-ext:protocol? identityref +--ro rib-ext:total-routes? uint32
+--ro rib-ext:routes? uint32 +--ro rib-ext:total-active-routes? uint32
+--ro rib-ext:active-routes? uint32 +--ro rib-ext:total-route-memory? uint64
+--ro rib-ext:route-memory? uint64 +--ro rib-ext:protocol-statistics* []
+--ro rib-ext:protocol? identityref
+--ro rib-ext:routes? uint32
+--ro rib-ext:active-routes? uint32
+--ro rib-ext:route-memory? uint64
Appendix B. ietf-rib-extension.yang example Appendix B. ietf-rib-extension.yang example
The following is an XML example using the RIB extension module and The following is an XML example [W3C.REC-xml-20081126] using the RIB
RFC 8349. extension module and RFC 8349.
Note: '\' line wrapping per [RFC8792]. | Note: '\' line wrapping per [RFC8792].
<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"> <routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<control-plane-protocols> <control-plane-protocols>
<control-plane-protocol> <control-plane-protocol>
<type>static</type> <type>static</type>
<name>static-routing-protocol</name> <name>static-routing-protocol</name>
<static-routes> <static-routes>
<ipv4 xmlns="urn:ietf:params:xml:ns:yang:\ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv4-unicast-routing"> ietf-ipv4-unicast-routing">
<route> <route>
skipping to change at page 21, line 32 skipping to change at line 1019
</destination-prefix> </destination-prefix>
<next-hop> <next-hop>
<next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\ <next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv4-unicast-routing">192.0.2.2</next-hop-address> ietf-ipv4-unicast-routing">192.0.2.2</next-hop-address>
<repair-path xmlns="urn:ietf:params:xml:ns:yang:\ <repair-path xmlns="urn:ietf:params:xml:ns:yang:\
ietf-rib-extension"> ietf-rib-extension">
<next-hop-address>203.0.113.1</next-hop-address> <next-hop-address>203.0.113.1</next-hop-address>
<metric>200</metric> <metric>200</metric>
</repair-path> </repair-path>
</next-hop> </next-hop>
<route-preference>110</route-preference> <route-preference>120</route-preference>
<source-protocol xmlns:ospf="urn:ietf:params:xml:ns:yang:\ <source-protocol xmlns:rip="urn:ietf:params:xml:ns:yang:\
ietf-ospf">ospf:ospf</source-protocol> ietf-rip">rip:rip</source-protocol>
<last-updated>2015-10-24T18:02:45+02:00</last-updated> <last-updated>2015-10-24T18:02:45+02:00</last-updated>
</route> </route>
</routes> </routes>
</rib> </rib>
<rib> <rib>
<name>ipv6-primary</name> <name>ipv6-primary</name>
<address-family xmlns:v6ur="urn:ietf:params:xml:ns:yang:\ <address-family xmlns:v6ur="urn:ietf:params:xml:ns:yang:\
ietf-ipv6-unicast-routing">v6ur:ipv6-unicast</address-family> ietf-ipv6-unicast-routing">v6ur:ipv6-unicast</address-family>
<default-rib>true</default-rib> <default-rib>true</default-rib>
<routes> <routes>
skipping to change at page 22, line 4 skipping to change at line 1039
ietf-ipv6-unicast-routing">v6ur:ipv6-unicast</address-family> ietf-ipv6-unicast-routing">v6ur:ipv6-unicast</address-family>
<default-rib>true</default-rib> <default-rib>true</default-rib>
<routes> <routes>
<route> <route>
<destination-prefix xmlns="urn:ietf:params:xml:ns:yang:\ <destination-prefix xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv6-unicast-routing">0::/0</destination-prefix> ietf-ipv6-unicast-routing">0::/0</destination-prefix>
<next-hop> <next-hop>
<next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\ <next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv6-unicast-routing">2001:db8:aaaa::1111\ ietf-ipv6-unicast-routing">2001:db8:aaaa::1111\
</next-hop-address> </next-hop-address>
</next-hop> </next-hop>
<route-preference>5</route-preference> <route-preference>5</route-preference>
<source-protocol>static</source-protocol> <source-protocol>static</source-protocol>
<last-updated>2015-10-24T18:02:45+02:00</last-updated> <last-updated>2015-10-24T18:02:45+02:00</last-updated>
</route> </route>
<route> <route>
<destination-prefix xmlns="urn:ietf:params:xml:ns:yang:\ <destination-prefix xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv6-unicast-routing">2001:db8:bbbb::/64\ ietf-ipv6-unicast-routing">2001:db8:bbbb::/64\
</destination-prefix> </destination-prefix>
<next-hop> <next-hop>
<next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\ <next-hop-address xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ipv6-unicast-routing">2001:db8:aaaa::1111\ ietf-ipv6-unicast-routing">2001:db8:aaaa::1111\
</next-hop-address> </next-hop-address>
<repair-path xmlns="urn:ietf:params:xml:ns:yang:\ <repair-path xmlns="urn:ietf:params:xml:ns:yang:\
ietf-rib-extension"> ietf-rib-extension">
<next-hop-address>2001:db8:cccc::2222</next-hop-address> <next-hop-address>2001:db8:cccc::2222</next-hop-address>
<metric>200</metric> <metric>200</metric>
</repair-path> </repair-path>
</next-hop> </next-hop>
<route-preference>110</route-preference> <route-preference>120</route-preference>
<source-protocol xmlns:ospf="urn:ietf:params:xml:ns:yang:\ <source-protocol xmlns:rip="urn:ietf:params:xml:ns:yang:\
ietf-ospf">ospf:ospf</source-protocol> ietf-rip">rip:rip</source-protocol>
<last-updated>2015-10-24T18:02:45+02:00</last-updated> <last-updated>2015-10-24T18:02:45+02:00</last-updated>
</route> </route>
</routes> </routes>
</rib> </rib>
</ribs> </ribs>
</routing> </routing>
The following is the same example using JSON format. The following is the same example using JSON format [RFC7951].
{ {
"ietf-routing:routing": { "ietf-routing:routing": {
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
"type": "static", "type": "static",
"name": "static-routing-protocol", "name": "static-routing-protocol",
"static-routes": { "static-routes": {
"ietf-ipv4-unicast-routing:ipv4": { "ietf-ipv4-unicast-routing:ipv4": {
skipping to change at page 24, line 4 skipping to change at line 1134
}, },
{ {
"next-hop": { "next-hop": {
"ietf-rib-extension:repair-path": { "ietf-rib-extension:repair-path": {
"next-hop-address": "203.0.113.1", "next-hop-address": "203.0.113.1",
"metric": 200 "metric": 200
}, },
"ietf-ipv4-unicast-routing:next-hop-address": \ "ietf-ipv4-unicast-routing:next-hop-address": \
"192.0.2.2" "192.0.2.2"
}, },
"route-preference": 110, "route-preference": 120,
"source-protocol": "ietf-ospf:ospf", "source-protocol": "ietf-rip:rip",
"last-updated": "2015-10-24T18:02:45+02:00", "last-updated": "2015-10-24T18:02:45+02:00",
"ietf-ipv4-unicast-routing:destination-prefix": \ "ietf-ipv4-unicast-routing:destination-prefix": \
"198.51.100.0/24" "198.51.100.0/24"
} }
] ]
} }
}, },
{ {
"name": "ipv6-primary", "name": "ipv6-primary",
"address-family": "ietf-ipv6-unicast-routing:ipv6-unicast", "address-family": "ietf-ipv6-unicast-routing:ipv6-unicast",
skipping to change at page 24, line 38 skipping to change at line 1168
}, },
{ {
"next-hop": { "next-hop": {
"ietf-rib-extension:repair-path": { "ietf-rib-extension:repair-path": {
"next-hop-address": "2001:db8:cccc::2222", "next-hop-address": "2001:db8:cccc::2222",
"metric": 200 "metric": 200
}, },
"ietf-ipv6-unicast-routing:next-hop-address": \ "ietf-ipv6-unicast-routing:next-hop-address": \
"2001:db8:aaaa::1111" "2001:db8:aaaa::1111"
}, },
"route-preference": 110, "route-preference": 120,
"source-protocol": "ietf-ospf:ospf", "source-protocol": "ietf-rip:rip",
"last-updated": "2015-10-24T18:02:45+02:00", "last-updated": "2015-10-24T18:02:45+02:00",
"ietf-ipv6-unicast-routing:destination-prefix": \ "ietf-ipv6-unicast-routing:destination-prefix": \
"2001:db8:bbbb::/64" "2001:db8:bbbb::/64"
} }
] ]
} }
} }
] ]
} }
} }
} }
Appendix C. Acknowledgments Acknowledgments
The RFC text was produced using Marshall Rose's xml2rfc tool.
The authors wish to thank Les Ginsberg, Krishna Deevi, and Suyoung The authors wish to thank Les Ginsberg, Krishna Deevi, and Suyoung
Yoon for their helpful comments and suggestions. Yoon for their helpful comments and suggestions.
The authors wish to thank Tom Petch, Rob Wilton, Chris Hopps, Martin The authors wish to thank Tom Petch, Rob Wilton, Chris Hopps, Martin
Bjorklund, Jeffrey Zhang, Eric Vyncke, Lars Eggert, and Bo Wu for Björklund, Jeffrey Zhang, Éric Vyncke, Lars Eggert, and Bo Wu for
their reviews and comments. their reviews and comments.
Authors' Addresses Authors' Addresses
Acee Lindem Acee Lindem
LabN Consulting LLC LabN Consulting, L.L.C.
301 Midenhall Way 301 Midenhall Way
Cary, NC 27513 Cary, NC 27513
United States of America United States of America
Email: acee.ietf@gmail.com Email: acee.ietf@gmail.com
Yingzhen Qu Yingzhen Qu
Futurewei Futurewei Technologies
2330 Central Expressway 2330 Central Expressway
Santa Clara, CA 95050 Santa Clara, CA 95050
United States of America United States of America
Email: yingzhen.qu@futurewei.com Email: yingzhen.qu@futurewei.com
 End of changes. 114 change blocks. 
417 lines changed or deleted 462 lines changed or added

This html diff was produced by rfcdiff 1.48.