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. |