idnits 2.17.1 draft-ietf-rtgwg-yang-rib-extend-11.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 782 has weird spacing: '...-prefix ine...' == Line 807 has weird spacing: '...-prefix ine...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (9 May 2022) is 716 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 4 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group A. Lindem 3 Internet-Draft Cisco Systems 4 Intended status: Standards Track Y. Qu 5 Expires: 10 November 2022 Futurewei 6 9 May 2022 8 RIB Extension YANG Data Model 9 draft-ietf-rtgwg-yang-rib-extend-11 11 Abstract 13 A Routing Information Base (RIB) is a list of routes and their 14 corresponding administrative data and operational state. 16 RFC 8349 defines the basic building blocks for RIB, and this model 17 augments it to support multiple next-hops (aka, paths) for each route 18 as well as additional attributes. 20 Status of This Memo 22 This Internet-Draft is submitted in full conformance with the 23 provisions of BCP 78 and BCP 79. 25 Internet-Drafts are working documents of the Internet Engineering 26 Task Force (IETF). Note that other groups may also distribute 27 working documents as Internet-Drafts. The list of current Internet- 28 Drafts is at https://datatracker.ietf.org/drafts/current/. 30 Internet-Drafts are draft documents valid for a maximum of six months 31 and may be updated, replaced, or obsoleted by other documents at any 32 time. It is inappropriate to use Internet-Drafts as reference 33 material or to cite them other than as "work in progress." 35 This Internet-Draft will expire on 10 November 2022. 37 Copyright Notice 39 Copyright (c) 2022 IETF Trust and the persons identified as the 40 document authors. All rights reserved. 42 This document is subject to BCP 78 and the IETF Trust's Legal 43 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 44 license-info) in effect on the date of publication of this document. 45 Please review these documents carefully, as they describe your rights 46 and restrictions with respect to this document. Code Components 47 extracted from this document must include Revised BSD License text as 48 described in Section 4.e of the Trust Legal Provisions and are 49 provided without warranty as described in the Revised BSD License. 51 Table of Contents 53 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 54 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 55 2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 56 2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 57 3. Design of the Model . . . . . . . . . . . . . . . . . . . . . 4 58 3.1. Tags and Preference . . . . . . . . . . . . . . . . . . . 4 59 3.2. Repair Path . . . . . . . . . . . . . . . . . . . . . . . 5 60 4. RIB Model Tree . . . . . . . . . . . . . . . . . . . . . . . 6 61 5. RIB Extension YANG Model . . . . . . . . . . . . . . . . . . 6 62 6. Security Considerations . . . . . . . . . . . . . . . . . . . 13 63 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 64 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 65 8.1. Normative References . . . . . . . . . . . . . . . . . . 15 66 8.2. Informative References . . . . . . . . . . . . . . . . . 17 67 Appendix A. Combined Tree Diagram . . . . . . . . . . . . . . . 17 68 Appendix B. ietf-rib-extension.yang example . . . . . . . . . . 20 69 Appendix C. Acknowledgments . . . . . . . . . . . . . . . . . . 25 70 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 72 1. Introduction 74 This document defines a YANG [RFC7950] data model which extends the 75 RIBs defined in ietf-routing YANG module [RFC8349] with more route 76 attributes. 78 A RIB is a collection of routes with attributes controlled and 79 manipulated by control-plane protocols. Each RIB contains only 80 routes of one address family [RFC8349]. Within a protocol, routes 81 are selected based on the metrics in use by that protocol, and the 82 protocol installs the routes to RIB. RIB selects the preferred 83 routes by comparing the route-preference (aka, administrative 84 distance) of the associated protocol. 86 The module defined in this document extends the RIBs to support more 87 route attributes, such as multiple next-hops, route metrics, and 88 administrative tags. 90 The YANG modules in this document conform to the Network Management 91 Datastore Architecture (NMDA) [RFC8342]. 93 2. Terminology and Notation 95 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 96 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 97 "OPTIONAL" in this document are to be interpreted as described in BCP 98 14 [RFC2119] [RFC8174] when, and only when, they appear in all 99 capitals, as shown here. 101 The following terms are defined in [RFC8342]: 103 * configuration 105 * system state 107 * operational state 109 The following terms are defined in [RFC7950]: 111 * action 113 * augment 115 * container 117 * container with presence 119 * data model 121 * data node 123 * leaf 125 * list 127 * mandatory node 129 * module 131 * schema tree 133 * RPC (Remote Procedure Call) operation 135 The following terms are defined in [RFC8349] Section 5.2: 137 * RIB 139 2.1. Tree Diagrams 141 Tree diagrams used in this document follow the notation defined in 142 [RFC8340]. 144 2.2. Prefixes in Data Node Names 146 In this document, names of data nodes, actions, and other data model 147 objects are often used without a prefix, as long as it is clear from 148 the context in which YANG module each name is defined. Otherwise, 149 names are prefixed using the standard prefix associated with the 150 corresponding YANG module, as shown in Table 1. 152 +========+===========================+===========+ 153 | Prefix | YANG module | Reference | 154 +========+===========================+===========+ 155 | if | ietf-interfaces | [RFC8343] | 156 +--------+---------------------------+-----------+ 157 | rt | ietf-routing | [RFC8349] | 158 +--------+---------------------------+-----------+ 159 | v4ur | ietf-ipv4-unicast-routing | [RFC8349] | 160 +--------+---------------------------+-----------+ 161 | v6ur | ietf-ipv6-unicast-routing | [RFC8349] | 162 +--------+---------------------------+-----------+ 163 | inet | ietf-inet-types | [RFC6991] | 164 +--------+---------------------------+-----------+ 166 Table 1: Prefixes and Corresponding YANG Modules 168 3. Design of the Model 170 The YANG module defined in this document augments the ietf-routing 171 YANG model defined in [RFC8349], which provides a basis for routing 172 system data model development. Together with YANG modules defined in 173 [RFC8349], a generic RIB YANG model is defined to implement and 174 monitor a RIB. 176 The models in [RFC8349] also define the basic configuration and 177 operational state for both IPv4 and IPv6 static routes. This 178 document provides augmentations for static routes to support multiple 179 next-hops and more next-hop attributes. 181 3.1. Tags and Preference 183 Individual route tags are supported at both the route and next-hop 184 level. A preference per next-hop is also supported for selection of 185 the most preferred reachable static route. 187 The following tree snapshot shows tag and preference which augment 188 static IPv4 unicast routes and IPv6 unicast routes next-hop. 190 augment /rt:routing/rt:control-plane-protocols 191 /rt:control-plane-protocol/rt:static-routes/v4ur:ipv4 192 /v4ur:route/v4ur:next-hop/v4ur:next-hop-options 193 /v4ur:simple-next-hop: 194 +--rw preference? uint32 195 +--rw tag? uint32 196 augment /rt:routing/rt:control-plane-protocols 197 /rt:control-plane-protocol/rt:static-routes/v4ur:ipv4 198 /v4ur:route/v4ur:next-hop/v4ur:next-hop-options 199 /v4ur:next-hop-list/v4ur:next-hop-list/v4ur:next-hop: 200 +--rw preference? uint32 201 +--rw tag? uint32 202 augment /rt:routing/rt:control-plane-protocols 203 /rt:control-plane-protocol/rt:static-routes/v6ur:ipv6 204 /v6ur:route/v6ur:next-hop/v6ur:next-hop-options 205 /v6ur:simple-next-hop: 206 +--rw preference? uint32 207 +--rw tag? uint32 208 augment /rt:routing/rt:control-plane-protocols 209 /rt:control-plane-protocol/rt:static-routes/v6ur:ipv6 210 /v6ur:route/v6ur:next-hop/v6ur:next-hop-options 211 /v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop: 212 +--rw preference? uint32 213 +--rw tag? uint32 215 3.2. Repair Path 217 The IP Fast Reroute (IPFRR) pre-computes repair paths by routing 218 protocols [RFC5714], and the repair paths are installed in the RIB. 220 Each route in the RIB is augmented with repair paths if available, 221 and is shown in the following tree snapshot. 223 augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route 224 /rt:next-hop/rt:next-hop-options/rt:simple-next-hop: 225 +--ro repair-path 226 +--ro outgoing-interface? if:interface-state-ref 227 +--ro next-hop-address? inet:ip-address 228 +--ro metric? uint32 229 augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route 230 /rt:next-hop/rt:next-hop-options/rt:next-hop-list 231 /rt:next-hop-list/rt:next-hop: 232 +--ro repair-path 233 +--ro outgoing-interface? if:interface-state-ref 234 +--ro next-hop-address? inet:ip-address 235 +--ro metric? uint32 237 4. RIB Model Tree 239 The ietf-routing.yang tree with the augmentations herein is included 240 in Appendix A. The meaning of the symbols can be found in [RFC8340]. 242 5. RIB Extension YANG Model 244 file "ietf-rib-extension@2021-10-17.yang" 245 module ietf-rib-extension { 246 yang-version "1.1"; 247 namespace "urn:ietf:params:xml:ns:yang:ietf-rib-extension"; 249 prefix rib-ext; 251 import ietf-inet-types { 252 prefix "inet"; 253 reference "RFC 6991: Common YANG Data Types"; 254 } 256 import ietf-interfaces { 257 prefix "if"; 258 reference "RFC 8343: A YANG Data Model for Interface 259 Management (NMDA Version)"; 260 } 262 import ietf-routing { 263 prefix "rt"; 264 reference "RFC 8349: A YANG Data Model for Routing 265 Management (NMDA Version)"; 266 } 268 import ietf-ipv4-unicast-routing { 269 prefix "v4ur"; 270 reference "RFC 8349: A YANG Data Model for Routing 271 Management (NMDA Version)"; 272 } 274 import ietf-ipv6-unicast-routing { 275 prefix "v6ur"; 276 reference "RFC 8349: A YANG Data Model for Routing 277 Management (NMDA Version)"; 278 } 280 organization 281 "IETF RTGWG - Routing Working Group"; 283 contact 284 "WG Web: 285 WG List: 287 Author: Acee Lindem 288 289 Author: Yingzhen Qu 290 "; 292 description 293 "This document defines a YANG data model which extends 294 the RIBs defined in ietf-routing YANG module with more 295 route attributes. 297 This YANG model conforms to the Network Management 298 Datastore Architecture (NDMA) as described in RFC 8342. 300 Copyright (c) 2021 IETF Trust and the persons identified as 301 authors of the code. All rights reserved. 303 Redistribution and use in source and binary forms, with or 304 without modification, is permitted pursuant to, and subject 305 to the license terms contained in, the Simplified BSD License 306 set forth in Section 4.c of the IETF Trust's Legal Provisions 307 Relating to IETF Documents 308 (http://trustee.ietf.org/license-info). 310 This version of this YANG module is part of RFC XXXX; 311 see the RFC itself for full legal notices."; 313 revision 2021-10-17 { 314 description 315 "Initial Version"; 316 reference 317 "RFC XXXX: A YANG Data Model for RIB Extensions."; 318 } 319 /* Groupings */ 320 grouping rib-statistics { 321 description 322 "Statistics grouping used for RIB augmentation."; 323 container statistics { 324 config false; 325 description 326 "Container for RIB statistics."; 327 leaf total-routes { 328 type uint32; 329 description 330 "Total routes in the RIB"; 331 } 332 leaf total-active-routes { 333 type uint32; 334 description 335 "Total active routes in the RIB. An active route is 336 preferred over other routes to the same destination 337 prefix."; 338 } 339 leaf total-route-memory { 340 type uint64; 341 units "bytes"; 342 description 343 "Total memory for all routes in the RIB."; 344 } 345 list protocol-statistics { 346 description "RIB statistics per protocol."; 347 leaf protocol { 348 type identityref { 349 base rt:routing-protocol; 350 } 351 description "Routing protocol."; 352 } 353 leaf routes { 354 type uint32; 355 description 356 "Total routes for protocol in the RIB."; 357 } 358 leaf active-routes { 359 type uint32; 360 description 361 "Total active routes for protocol in the RIB. An active 362 route is preferred over other routes to the same 363 destination prefix."; 364 } 365 leaf route-memory { 366 type uint64; 367 units "bytes"; 368 description 369 "Total memory for all routes for protocol in the RIB."; 370 } 371 } 372 } 373 } 375 grouping next-hop { 376 description 377 "Next-hop grouping"; 378 leaf interface { 379 type if:interface-ref; 380 description 381 "Outgoing interface"; 382 } 383 leaf address { 384 type inet:ip-address; 385 description 386 "IPv4 or IPv6 Address of the next-hop."; 387 } 388 } 390 grouping attributes { 391 description 392 "Common attributes applicable to all routes."; 393 leaf metric { 394 type uint32; 395 description 396 "The metric is a numeric value indicating the cost 397 of the route from the perspective of the routing 398 protocol installing the route. In general, routes with 399 a lower metric installed by the same routing protocol 400 are lower cost to reach and are preferable to routes 401 with a higher metric. However, metrics from different 402 routing protocols are not directly comparable."; 403 } 404 leaf-list tag { 405 type uint32; 406 description 407 "A tag is a 32-bit opaque value associated with the 408 route that can be used for policy decisions such as 409 advertisement and filtering of the route."; 410 } 411 leaf application-tag { 412 type uint32; 413 description 414 "The application-specific tag is an additional tag that 415 can be used by applications that require semantics and/or 416 policy different from that of the tag. For example, 417 the tag is usually automatically advertised in OSPF 418 AS-External Link State Advertisements (LSAs) while this 419 application-specific tag is not advertised implicitly."; 420 } 421 } 422 grouping repair-path { 423 description 424 "Grouping for IP Fast Reroute repair path."; 425 container repair-path { 426 description 427 "IP Fast Reroute next-hop repair path."; 428 leaf outgoing-interface { 429 type if:interface-state-ref; 430 description 431 "Name of the outgoing interface."; 432 } 433 leaf next-hop-address { 434 type inet:ip-address; 435 description 436 "IP address of the next hop."; 437 } 438 leaf metric { 439 type uint32; 440 description 441 "The metric for the repair path. While the IP Fast 442 Reroute re-route repair is local and the metric is 443 not advertised externally, the metric for repair path 444 is useful for troubleshooting purposes."; 445 } 446 reference 447 "RFC 5714: IP Fast Reroute Framework."; 448 } 449 } 451 augment "/rt:routing/rt:control-plane-protocols/" 452 + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" 453 + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/" 454 + "v4ur:simple-next-hop" 455 { 456 description 457 "Augment 'simple-next-hop' case in IPv4 unicast route."; 458 leaf preference { 459 type uint32; 460 default "1"; 461 description 462 "The preference is used to select among multiple static 463 routes. Routes with a lower preference next-hop are 464 preferred and equal preference routes result in 465 Equal-Cost-Multi-Path (ECMP) static routes."; 466 } 467 leaf tag { 468 type uint32; 469 default "0"; 470 description 471 "The tag is a 32-bit opaque value associated with the 472 route that can be used for policy decisions such as 473 advertisement and filtering of the route."; 474 } 475 } 477 augment "/rt:routing/rt:control-plane-protocols/" 478 + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" 479 + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/" 480 + "v4ur:next-hop-list/v4ur:next-hop-list/v4ur:next-hop" 481 { 482 description 483 "Augment static route configuration 'next-hop-list'."; 485 leaf preference { 486 type uint32; 487 default "1"; 488 description 489 "The preference is used to select among multiple static 490 routes. Routes with a lower preference next-hop are 491 preferred and equal preference routes result in 492 Equal-Cost-Multi-Path (ECMP) static routes."; 493 } 494 leaf tag { 495 type uint32; 496 default "0"; 497 description 498 "The tag is a 32-bit opaque value associated with the 499 route that can be used for policy decisions such as 500 advertisement and filtering of the route."; 501 } 502 } 504 augment "/rt:routing/rt:control-plane-protocols/" 505 + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" 506 + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/" 507 + "v6ur:simple-next-hop" 508 { 509 description 510 "Augment 'simple-next-hop' case in IPv6 unicast route."; 512 leaf preference { 513 type uint32; 514 default "1"; 515 description 516 "The preference is used to select among multiple static 517 routes. Routes with a lower preference next-hop are 518 preferred and equal preference routes result in 519 Equal-Cost-Multi-Path (ECMP) static routes."; 520 } 521 leaf tag { 522 type uint32; 523 default "0"; 524 description 525 "The tag is a 32-bit opaque value associated with the 526 route that can be used for policy decisions such as 527 advertisement and filtering of the route."; 528 } 529 } 531 augment "/rt:routing/rt:control-plane-protocols/" 532 + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" 533 + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/" 534 + "v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop" 535 { 536 description 537 "Augment static route configuration 'next-hop-list'."; 539 leaf preference { 540 type uint32; 541 default "1"; 542 description 543 "The preference is used to select among multiple static 544 routes. Routes with a lower preference next-hop are 545 preferred and equal preference routes result in 546 Equal-Cost-Multi-Path (ECMP) static routes."; 547 } 548 leaf tag { 549 type uint32; 550 default "0"; 551 description 552 "The tag is a 32-bit opaque value associated with the 553 route that can be used for policy decisions such as 554 advertisement and filtering of the route."; 555 } 556 } 558 augment "/rt:routing/rt:ribs/rt:rib" 559 { 560 description 561 "Augment a RIB with statistics."; 562 uses rib-statistics; 563 } 565 augment "/rt:routing/rt:ribs/rt:rib/" 566 + "rt:routes/rt:route" 567 { 568 description 569 "Augment a route in RIB with attributes."; 570 uses attributes; 571 } 573 augment "/rt:routing/rt:ribs/rt:rib/" 574 + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" 575 + "rt:simple-next-hop" 576 { 577 description 578 "Augment simple-next-hop with repair-path."; 579 uses repair-path; 580 } 582 augment "/rt:routing/rt:ribs/rt:rib/" 583 + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/" 584 + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" 585 { 586 description 587 "Augment the multiple next hops with repair path."; 588 uses repair-path; 589 } 590 } 591 593 6. Security Considerations 595 The YANG module specified in this document defines a schema for data 596 that is designed to be accessed via network management protocols such 597 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 598 is the secure transport layer, and the mandatory-to-implement secure 599 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 600 is HTTPS, and the mandatory-to-implement secure transport is TLS 601 [RFC8446]. 603 The NETCONF access control model [RFC8341] provides the means to 604 restrict access for particular NETCONF or RESTCONF users to a pre- 605 configured subset of all available NETCONF or RESTCONF protocol 606 operations and content. 608 There are a number of data nodes defined in ietf-rib-extensions.yang 609 module that are writable/creatable/deletable (i.e., config true, 610 which is the default). These data nodes may be considered sensitive 611 or vulnerable in some network environments. Write operations (e.g., 612 edit-config) to these data nodes without proper protection can have a 613 negative effect on network operations. These are the subtrees and 614 data nodes and their sensitivity/vulnerability: 616 /v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:preference 618 /v4ur:next-hop-options/v4ur:simple-next-hop/rib-ext:tag 620 /v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list 621 /v4ur:next-hop/rib-ext:preference 623 /v4ur:next-hop-options/v4ur:next-hop-list/v4ur:next-hop-list 624 /v4ur:next-hop/rib-ext:tag 626 /v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:preference 628 /v6ur:next-hop-options/v6ur:simple-next-hop/rib-ext:tag 630 /v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list 631 /v6ur:next-hop/rib-ext:preference 633 /v6ur:next-hop-options/v6ur:next-hop-list/v6ur:next-hop-list 634 /v6ur:next-hop/rib-ext:tag 636 For these augmentations to ietf-routing.yang, the ability to 637 delete, add, and modify IPv4 and IPv6 static route preference and 638 tag would allow traffic to be misrouted. 640 Some of the readable data nodes in the ietf-rib-extensions.yang 641 module may be considered sensitive or vulnerable in some network 642 environments. It is thus important to control read access (e.g., via 643 get, get-config, or notification) to these data nodes. These are the 644 subtrees and data nodes and their sensitivity/vulnerability: 646 /rt:routing/rt:ribs/rt:rib/rib-ext:statistics 648 /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:metric 650 /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rib-ext:tag 652 /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route /rib- 653 ext:application-tag 654 /rt:route/rt:next-hop/rt:next-hop-options/rt:simple-next-hop /rib- 655 ext:repair-path 657 /rt:routes/rt:route/rt:next-hop/rt:next-hop-options /rt:next-hop- 658 list/rt:next-hop-list/rt:next-hop/rib-ext:repair-path 660 The exposure of the Routing Information Base (RIB) will expose the 661 routing topology of the network. This may be undesirable since 662 both due to the fact that exposure may facilitate other attacks. 663 Additionally, network operators may consider their topologies to 664 be sensitive confidential data. 666 All the security considerations for [RFC8349] writable and readable 667 data nodes apply to the augmentations described herein. 669 7. IANA Considerations 671 This document registers a URI in the IETF XML registry [RFC3688]. 672 Following the format in [RFC3688], the following registration is 673 requested to be made: 675 URI: urn:ietf:params:xml:ns:yang:ietf-rib-extension 676 Registrant Contact: The IESG. 677 XML: N/A, the requested URI is an XML namespace. 679 This document registers a YANG module in the YANG Module Names 680 registry [RFC6020]. 682 name: ietf-rib-extension 683 namespace: urn:ietf:params:xml:ns:yang:ietf-rib-extension 684 prefix: rib-ext 685 reference: RFC XXXX 687 8. References 689 8.1. Normative References 691 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 692 Requirement Levels", BCP 14, RFC 2119, 693 DOI 10.17487/RFC2119, March 1997, 694 . 696 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 697 DOI 10.17487/RFC3688, January 2004, 698 . 700 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 701 the Network Configuration Protocol (NETCONF)", RFC 6020, 702 DOI 10.17487/RFC6020, October 2010, 703 . 705 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 706 and A. Bierman, Ed., "Network Configuration Protocol 707 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 708 . 710 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 711 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 712 . 714 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 715 RFC 6991, DOI 10.17487/RFC6991, July 2013, 716 . 718 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 719 RFC 7950, DOI 10.17487/RFC7950, August 2016, 720 . 722 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 723 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 724 . 726 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 727 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 728 May 2017, . 730 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 731 Access Control Model", STD 91, RFC 8341, 732 DOI 10.17487/RFC8341, March 2018, 733 . 735 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 736 and R. Wilton, "Network Management Datastore Architecture 737 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 738 . 740 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 741 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 742 . 744 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 745 Routing Management (NMDA Version)", RFC 8349, 746 DOI 10.17487/RFC8349, March 2018, 747 . 749 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 750 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 751 . 753 8.2. Informative References 755 [RFC5714] Shand, M. and S. Bryant, "IP Fast Reroute Framework", 756 RFC 5714, DOI 10.17487/RFC5714, January 2010, 757 . 759 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 760 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 761 . 763 Appendix A. Combined Tree Diagram 765 This appendix includes the combined ietf-routing.yang, ietf-ipv4- 766 unicast-routing.yang, ietf-ipv6-unicast-routing.yang and ietf-rib- 767 extensions.yang tree diagram. 769 module: ietf-routing 770 +--rw routing 771 +--rw router-id? yang:dotted-quad {router-id}? 772 +--ro interfaces 773 | +--ro interface* if:interface-ref 774 +--rw control-plane-protocols 775 | +--rw control-plane-protocol* [type name] 776 | +--rw type identityref 777 | +--rw name string 778 | +--rw description? string 779 | +--rw static-routes 780 | +--rw v4ur:ipv4 781 | | +--rw v4ur:route* [destination-prefix] 782 | | +--rw v4ur:destination-prefix inet:ipv4-prefix 783 | | +--rw v4ur:description? string 784 | | +--rw v4ur:next-hop 785 | | +--rw (v4ur:next-hop-options) 786 | | +--:(v4ur:simple-next-hop) 787 | | | +--rw v4ur:outgoing-interface? 788 | | | | if:interface-ref 789 | | | +--rw v4ur:next-hop-address? 790 | | | | inet:ipv4-address 791 | | | +--rw rib-ext:preference? uint32 792 | | | +--rw rib-ext:tag? uint32 793 | | +--:(v4ur:special-next-hop) 794 | | | +--rw v4ur:special-next-hop? enumeration 795 | | +--:(v4ur:next-hop-list) 796 | | +--rw v4ur:next-hop-list 797 | | +--rw v4ur:next-hop* [index] 798 | | +--rw v4ur:index string 799 | | +--rw v4ur:outgoing-interface? 800 | | | if:interface-ref 801 | | +--rw v4ur:next-hop-address? 802 | | | inet:ipv4-address 803 | | +--rw rib-ext:preference? uint32 804 | | +--rw rib-ext:tag? uint32 805 | +--rw v6ur:ipv6 806 | +--rw v6ur:route* [destination-prefix] 807 | +--rw v6ur:destination-prefix inet:ipv6-prefix 808 | +--rw v6ur:description? string 809 | +--rw v6ur:next-hop 810 | +--rw (v6ur:next-hop-options) 811 | +--:(v6ur:simple-next-hop) 812 | | +--rw v6ur:outgoing-interface? 813 | | | if:interface-ref 814 | | +--rw v6ur:next-hop-address? 815 | | | inet:ipv6-address 816 | | +--rw rib-ext:preference? uint32 817 | | +--rw rib-ext:tag? uint32 818 | +--:(v6ur:special-next-hop) 819 | | +--rw v6ur:special-next-hop? enumeration 820 | +--:(v6ur:next-hop-list) 821 | +--rw v6ur:next-hop-list 822 | +--rw v6ur:next-hop* [index] 823 | +--rw v6ur:index string 824 | +--rw v6ur:outgoing-interface? 825 | | if:interface-ref 826 | +--rw v6ur:next-hop-address? 827 | | inet:ipv6-address 828 | +--rw rib-ext:preference? uint32 829 | +--rw rib-ext:tag? uint32 830 +--rw ribs 831 +--rw rib* [name] 832 +--rw name string 833 +--rw address-family identityref 834 +--ro default-rib? boolean {multiple-ribs}? 835 +--ro routes 836 | +--ro route* [] 837 | +--ro route-preference? route-preference 838 | +--ro next-hop 839 | | +--ro (next-hop-options) 840 | | +--:(simple-next-hop) 841 | | | +--ro outgoing-interface? if:interface-ref 842 | | | +--ro v4ur:next-hop-address? inet:ipv4-address 843 | | | +--ro v6ur:next-hop-address? inet:ipv6-address 844 | | | +--ro rib-ext:repair-path 845 | | | +--ro rib-ext:outgoing-interface? 846 | | | | if:interface-state-ref 847 | | | +--ro rib-ext:next-hop-address? 848 | | | | inet:ip-address 849 | | | +--ro rib-ext:metric? uint32 850 | | +--:(special-next-hop) 851 | | | +--ro special-next-hop? enumeration 852 | | +--:(next-hop-list) 853 | | +--ro next-hop-list 854 | | +--ro next-hop* [] 855 | | +--ro outgoing-interface? 856 | | | if:interface-ref 857 | | +--ro v4ur:address? 858 | | | inet:ipv4-address 859 | | +--ro v6ur:address? 860 | | | inet:ipv6-address 861 | | +--ro rib-ext:repair-path 862 | | +--ro rib-ext:outgoing-interface? 863 | | | if:interface-state-ref 864 | | +--ro rib-ext:next-hop-address? 865 | | | inet:ip-address 866 | | +--ro rib-ext:metric? uint32 867 | +--ro source-protocol identityref 868 | +--ro active? empty 869 | +--ro last-updated? yang:date-and-time 870 | +--ro v4ur:destination-prefix? inet:ipv4-prefix 871 | +--ro v6ur:destination-prefix? inet:ipv6-prefix 872 | +--ro rib-ext:metric? uint32 873 | +--ro rib-ext:tag* uint32 874 | +--ro rib-ext:application-tag? uint32 875 +---x active-route 876 | +---w input 877 | | +---w v4ur:destination-address? inet:ipv4-address 878 | | +---w v6ur:destination-address? inet:ipv6-address 879 | +--ro output 880 | +--ro route 881 | +--ro next-hop 882 | | +--ro (next-hop-options) 883 | | +--:(simple-next-hop) 884 | | | +--ro outgoing-interface? if:interface-ref 885 | | | +--ro v4ur:next-hop-address? inet:ipv4-address 886 | | | +--ro v6ur:next-hop-address? inet:ipv6-address 887 | | +--:(special-next-hop) 888 | | | +--ro special-next-hop? enumeration 889 | | +--:(next-hop-list) 890 | | +--ro next-hop-list 891 | | +--ro next-hop* [] 892 | | +--ro outgoing-interface? 893 | | | if:interface-ref 894 | | +--ro v4ur:next-hop-address? 895 | | | inet:ipv4-address 896 | | +--ro v6ur:next-hop-address? 897 | | | inet:ipv6-address 898 | +--ro source-protocol identityref 899 | +--ro active? empty 900 | +--ro last-updated? yang:date-and-time 901 | +--ro v4ur:destination-prefix? inet:ipv4-prefix 902 | +--ro v6ur:destination-prefix? inet:ipv6-prefix 903 +--rw description? string 904 +--ro rib-ext:statistics 905 +--ro rib-ext:total-routes? uint32 906 +--ro rib-ext:total-active-routes? uint32 907 +--ro rib-ext:total-route-memory? uint64 908 +--ro rib-ext:protocol-statistics* [] 909 +--ro rib-ext:protocol? identityref 910 +--ro rib-ext:routes? uint32 911 +--ro rib-ext:active-routes? uint32 912 +--ro rib-ext:route-memory? uint64 914 Appendix B. ietf-rib-extension.yang example 916 The following is an XML example using the RIB extension module and 917 RFC 8349. 919 920 921 922 static 923 static-routing-protocol 924 925 927 928 0.0.0.0/0 929 930 192.0.2.2 931 30 933 99 935 936 937 938 940 941 ::/0 942 943 2001:db8:aaaa::1111 944 30 946 66 948 949 950 951 952 953 954 955 956 ipv4-master 957 v4ur:ipv4-unicast 959 true 960 961 962 0.0.0.0/0 964 965 192.0.2.2 967 968 5 969 static 970 2015-10-24T18:02:45+02:00 971 972 973 198.51.100.0/24\ 975 976 977 192.0.2.2 979 981 203.0.113.1 982 200 983 984 985 110 986 ospf:ospf 988 2015-10-24T18:02:45+02:00 990 991 992 993 994 ipv6-master 995 v6ur:ipv6-unicast 997 true 998 999 1000 0::/0 1002 1003 2001:db8:aaaa::1111\ 1005 1006 1007 5 1008 static 1009 2015-10-24T18:02:45+02:00 1010 1011 1012 2001:db8:bbbb::/64\ 1014 1015 1016 2001:db8:aaaa::1111\ 1018 1019 1021 2001:db8:cccc::2222 1022 200 1023 1024 1025 110 1026 ospf:ospf 1028 2015-10-24T18:02:45+02:00 1029 1030 1031 1032 1033 1035 The following is the same example using JSON format. 1037 { 1038 "ietf-routing:routing": { 1039 "control-plane-protocols": { 1040 "control-plane-protocol": [ 1041 { 1042 "type": "static", 1043 "name": "static-routing-protocol", 1044 "static-routes": { 1045 "ietf-ipv4-unicast-routing:ipv4": { 1046 "route": [ 1047 { 1048 "destination-prefix": "0.0.0.0/0", 1049 "next-hop": { 1050 "next-hop-address": "192.0.2.2", 1051 "ietf-rib-extension:preference": 30, 1052 "ietf-rib-extension:tag": 99 1053 } 1054 } 1055 ] 1056 }, 1057 "ietf-ipv6-unicast-routing:ipv6": { 1058 "route": [ 1059 { 1060 "destination-prefix": "::/0", 1061 "next-hop": { 1062 "next-hop-address": "2001:db8:aaaa::1111", 1063 "ietf-rib-extension:preference": 30, 1064 "ietf-rib-extension:tag": 66 1065 } 1066 } 1067 ] 1068 } 1069 } 1070 } 1071 ] 1072 }, 1073 "ribs": { 1074 "rib": [ 1075 { 1076 "name": "ipv4-master", 1077 "address-family": "ietf-ipv4-unicast-routing:ipv4-unicast", 1078 "default-rib": true, 1079 "routes": { 1080 "route": [ 1081 { 1082 "next-hop": { 1083 "ietf-ipv4-unicast-routing:next-hop-address": \ 1084 "192.0.2.2" 1086 }, 1087 "route-preference": 5, 1088 "source-protocol": "static", 1089 "last-updated": "2015-10-24T18:02:45+02:00", 1090 "ietf-ipv4-unicast-routing:destination-prefix": \ 1091 "0.0.0.0/0" 1092 }, 1093 { 1094 "next-hop": { 1095 "ietf-rib-extension:repair-path": { 1096 "next-hop-address": "203.0.113.1", 1097 "metric": 200 1098 }, 1099 "ietf-ipv4-unicast-routing:next-hop-address": \ 1100 "192.0.2.2" 1101 }, 1102 "route-preference": 110, 1103 "source-protocol": "ietf-ospf:ospf", 1104 "last-updated": "2015-10-24T18:02:45+02:00", 1105 "ietf-ipv4-unicast-routing:destination-prefix": \ 1106 "198.51.100.0/24" 1107 } 1108 ] 1109 } 1110 }, 1111 { 1112 "name": "ipv6-master", 1113 "address-family": "ietf-ipv6-unicast-routing:ipv6-unicast", 1114 "default-rib": true, 1115 "routes": { 1116 "route": [ 1117 { 1118 "next-hop": { 1119 "ietf-ipv6-unicast-routing:next-hop-address": \ 1120 "2001:db8:aaaa::1111" 1121 }, 1122 "route-preference": 5, 1123 "source-protocol": "static", 1124 "last-updated": "2015-10-24T18:02:45+02:00", 1125 "ietf-ipv6-unicast-routing:destination-prefix": "::/0" 1126 }, 1127 { 1128 "next-hop": { 1129 "ietf-rib-extension:repair-path": { 1130 "next-hop-address": "2001:db8:cccc::2222", 1131 "metric": 200 1132 }, 1133 "ietf-ipv6-unicast-routing:next-hop-address": \ 1134 "2001:db8:aaaa::1111" 1135 }, 1136 "route-preference": 110, 1137 "source-protocol": "ietf-ospf:ospf", 1138 "last-updated": "2015-10-24T18:02:45+02:00", 1139 "ietf-ipv6-unicast-routing:destination-prefix": \ 1140 "2001:db8:bbbb::/64" 1141 } 1142 ] 1143 } 1144 } 1145 ] 1146 } 1147 } 1148 } 1150 Appendix C. Acknowledgments 1152 The RFC text was produced using Marshall Rose's xml2rfc tool. 1154 The authors wish to thank Les Ginsberg, Krishna Deevi, and Suyoung 1155 Yoon for their helpful comments and suggestions. 1157 The authors wish to thank Tom Petch, Rob Wilton and Chris Hopps for 1158 their reviews and comments. 1160 Authors' Addresses 1162 Acee Lindem 1163 Cisco Systems 1164 301 Midenhall Way 1165 Cary, NC 27513 1166 United States of America 1167 Email: acee@cisco.com 1169 Yingzhen Qu 1170 Futurewei 1171 2330 Central Expressway 1172 Santa Clara, CA 95050 1173 United States of America 1174 Email: yingzhen.qu@futurewei.com