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