idnits 2.17.1 draft-ietf-rtgwg-yang-rip-05.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 197 has weird spacing: '...address ine...' == Line 300 has weird spacing: '...et-name pre...' == Line 372 has weird spacing: '...address ine...' == Line 3178 has weird spacing: '...et-name pre...' == Line 3250 has weird spacing: '...address ine...' == (1 more instance...) -- The document date (September 30, 2017) is 2400 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) -- Possible downref: Normative reference to a draft: ref. 'I-D.bjorklund-netmod-rfc7223bis' -- Possible downref: Normative reference to a draft: ref. 'I-D.bjorklund-netmod-rfc7277bis' == Outdated reference: A later version (-06) exists of draft-acee-netmod-rfc8022bis-02 == Outdated reference: A later version (-17) exists of draft-ietf-bfd-yang-06 == Outdated reference: A later version (-42) exists of draft-ietf-isis-yang-isis-cfg-18 == Outdated reference: A later version (-29) exists of draft-ietf-ospf-yang-08 == Outdated reference: A later version (-10) exists of draft-ietf-netmod-revised-datastores-04 -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-25) exists of draft-ietf-netconf-yang-push-09 == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-14 Summary: 0 errors (**), 0 flaws (~~), 14 warnings (==), 4 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group X. Liu 3 Internet-Draft Jabil 4 Intended status: Standards Track P. Sarda 5 Expires: April 3, 2018 Ericsson 6 V. Choudhary 7 Individual 8 September 30, 2017 10 A YANG Data Model for Routing Information Protocol (RIP) 11 draft-ietf-rtgwg-yang-rip-05 13 Abstract 15 This document describes a data model for the Routing Information 16 Protocol (RIP). Both RIP version 2 and RIPng are covered. 18 Status of This Memo 20 This Internet-Draft is submitted in full conformance with the 21 provisions of BCP 78 and BCP 79. 23 Internet-Drafts are working documents of the Internet Engineering 24 Task Force (IETF). Note that other groups may also distribute 25 working documents as Internet-Drafts. The list of current Internet- 26 Drafts is at http://datatracker.ietf.org/drafts/current/. 28 Internet-Drafts are draft documents valid for a maximum of six months 29 and may be updated, replaced, or obsoleted by other documents at any 30 time. It is inappropriate to use Internet-Drafts as reference 31 material or to cite them other than as "work in progress." 33 This Internet-Draft will expire on April 3, 2018. 35 Copyright Notice 37 Copyright (c) 2017 IETF Trust and the persons identified as the 38 document authors. All rights reserved. 40 This document is subject to BCP 78 and the IETF Trust's Legal 41 Provisions Relating to IETF Documents 42 (http://trustee.ietf.org/license-info) in effect on the date of 43 publication of this document. Please review these documents 44 carefully, as they describe your rights and restrictions with respect 45 to this document. Code Components extracted from this document must 46 include Simplified BSD License text as described in Section 4.e of 47 the Trust Legal Provisions and are provided without warranty as 48 described in the Simplified BSD License. 50 Table of Contents 52 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 53 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 54 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 55 1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 56 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 4 57 2.1. Scope of the Model . . . . . . . . . . . . . . . . . . . 4 58 2.2. Relation with Core Routing Framework . . . . . . . . . . 4 59 2.3. Protocol Configuration . . . . . . . . . . . . . . . . . 5 60 2.4. Protocol States . . . . . . . . . . . . . . . . . . . . . 5 61 2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 7 62 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 7 63 2.7. Optional Features . . . . . . . . . . . . . . . . . . . . 7 64 3. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 7 65 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 11 66 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 67 6. Security Considerations . . . . . . . . . . . . . . . . . . . 35 68 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 36 69 7.1. Normative References . . . . . . . . . . . . . . . . . . 36 70 7.2. Informative References . . . . . . . . . . . . . . . . . 37 71 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 39 72 Appendix B. YANG Model for Non-NMDA Compliant Implementations . 43 73 B.1. Non-NMDA YANG Module . . . . . . . . . . . . . . . . . . 43 74 B.2. Non-NMDA Model Tree Structure . . . . . . . . . . . . . . 68 75 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73 77 1. Introduction 79 This document introduces a YANG [RFC7950] data model for the Routing 80 Information Protocol (RIP) [RFC2453][RFC2080]. RIP was designed to 81 work as an Interior Gateway Protocol (IGP) in moderate-size 82 Autonomous Systems (AS). 84 This YANG model supports both RIP version 2 and RIPng. RIP version 2 85 (defined in [RFC2453]) supports IPv4. RIPng (defined in [RFC2080]) 86 supports IPv6. 88 1.1. Terminology 90 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 91 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 92 document are to be interpreted as described in [RFC2119]. 94 The following terms are defined in [RFC7950] and are not redefined 95 here: 97 o augment 98 o data model 100 o data node 102 1.2. Tree Diagrams 104 A simplified graphical representation of the data model is used in 105 this document. The meaning of the symbols in these diagrams is as 106 follows: 108 o Brackets "[" and "]" enclose list keys. 110 o Curly braces "{" and "}" contain names of optional features that 111 make the corresponding node conditional. 113 o Abbreviations before data node names: "rw" means configuration 114 (read-write), and "ro" means state data (read-only). 116 o Symbols after data node names: "?" means an optional node, "!" 117 means a presence container, and "*" denotes a list and leaf-list. 119 o Parentheses enclose choice and case nodes, and case nodes are also 120 marked with a colon (":"). 122 o Ellipsis ("...") stands for contents of subtrees that are not 123 shown. 125 1.3. Prefixes in Data Node Names 127 In this document, names of data nodes, actions, and other data model 128 objects are often used without a prefix, as long as it is clear from 129 the context in which YANG module each name is defined. Otherwise, 130 names are prefixed using the standard prefix associated with the 131 corresponding YANG module, as shown in Table 1. 133 +-----------+-----------------+-----------------------------------+ 134 | Prefix | YANG module | Reference | 135 +-----------+-----------------+-----------------------------------+ 136 | yang | ietf-yang-types | [RFC6991] | 137 | inet | ietf-inet-types | [RFC6991] | 138 | if | ietf-interfaces | [I-D.bjorklund-netmod-rfc7223bis] | 139 | ip | ietf-ip | [I-D.bjorklund-netmod-rfc7277bis] | 140 | rt | ietf-routing-2 | [I-D.acee-netmod-rfc8022bis] | 141 | bfd | ietf-bfd | [I-D.ietf-bfd-yang] | 142 | isis | ietf-isis | [I-D.ietf-isis-yang-isis-cfg] | 143 | key-chain | ietf-key-chain | [RFC8177] | 144 | ospf | ietf-ospf | [I-D.ietf-ospf-yang] | 145 +-----------+-----------------+-----------------------------------+ 147 Table 1: Prefixes and Corresponding YANG Modules 149 2. Design of the Data Model 151 2.1. Scope of the Model 153 The model covers RIP version 2 [RFC2453] and RIPng [RFC2080] 154 protocols. The model is designed to be implemented on a device where 155 RIP version 2 or RIPng is implemented, and can be used to: 157 o Configure the RIP version 2 or RIPng protocol. 159 o Manage the protocol operational behaviors. 161 o Retrieve the protocol operational status. 163 The capabilities describe in [RFC1724] are covered. 165 2.2. Relation with Core Routing Framework 167 This model augments the core routing data model "ietf-routing-2" 168 specified in [I-D.acee-netmod-rfc8022bis]. 170 +--rw routing 171 +--rw router-id? 172 +--rw control-plane-protocols 173 | +--rw control-plane-protocol* [type name] 174 | +--rw type 175 | +--rw name 176 | +--rw rip <= Augmented by this Model 177 ... 179 The "rip" container instantiates a RIP protocol entity that supports 180 RIP version 2 or RIPng. Depending on the implementation of "ietf- 181 routing-2", a RIP instance MAY belong to a logical router or network 182 instance. 184 2.3. Protocol Configuration 186 The model structure for the protocol configuration is as shown below: 188 augment /rt:routing/rt:control-plane-protocols/ 189 rt:control-plane-protocol: 190 +--rw rip 191 +--rw 192 +--rw interface* [interface] 193 +--rw interface if:interface-ref 194 +--rw 195 +--rw neighbors {explicit-neighbors}? 196 | +--rw neighbor* [address] 197 | +--rw address inet:ip-address 198 | +--rw 200 The model allows to configure the following protocol entities: 202 o Protocol instance (RIP version 2 or RIPng) 204 o Interface 206 o Neighbor 208 2.4. Protocol States 210 The model structure for the protocol states is as shown below: 212 augment /rt:routing/rt:control-plane-protocols/ 213 rt:control-plane-protocol: 214 +--rw rip 215 +--ro 216 +--rw interface* [interface] 217 | +--rw interface if:interface-ref 218 | +--ro 219 | +--ro statistics {interface-statistics}? 220 | +--ro 221 +--ro ipv4 222 | +--ro neighbors 223 | | +--ro neighbor* [ipv4-address] 224 | | +--ro 225 | +--ro routes 226 | +--ro route* [ipv4-prefix] 227 | +--ro 228 +--ro ipv6 229 | +--ro neighbors 230 | | +--ro neighbor* [ipv6-address] 231 | | +--ro 232 | +--ro routes 233 | +--ro route* [ipv6-prefix] 234 | +--ro ipv6-prefix inet:ipv6-prefix 235 | +--ro 236 +--ro statistics {global-statistics}? 237 +--ro 239 This model conforms to the Network Management Datastore Architecture 240 (NMDA) [I-D.ietf-netmod-revised-datastores]. The operational state 241 data is combined with the associated configuration data in the same 242 hierarchy [I-D.ietf-netmod-rfc6087bis]. When protocol states are 243 retrieved from the NMDA operational state datastore, the returned 244 states cover all "config true" (rw) and "config false" (ro) nodes 245 defined in the schema. 247 The model allows to retrieve protocol states at the following levels: 249 o Protocol instance (RIP version 2 or RIPng) 251 o Interface 253 o Neighbor 255 o Route 257 2.5. RPC Operations 259 This model defines one RPC "clear-rip-route" that can be used to 260 clear RIP routes from the routing table. 262 2.6. Notifications 264 This model does not define RIP specific notifications. To enable 265 notifications, the mechanism defined in [I-D.ietf-netconf-yang-push] 266 and [I-D.ietf-netconf-rfc5277bis] can be used. This mechanism 267 currently allows the user to: 269 o Subscribe notifications on a per client basis. 271 o Specify subtree filters or xpath filters so that only interested 272 contents will be sent. 274 o Specify either periodic or on-demand notifications. 276 2.7. Optional Features 278 This model defines several features are beyond the basic RIP 279 configuration and it is the responsibility of each vendor to decide 280 whether to support a given feature on a device. 282 3. Tree Structure 284 This document defines the YANG module "ietf-rip", which has the 285 following tree structure: 287 module: ietf-rip 288 augment /rt:routing/rt:control-plane-protocols 289 /rt:control-plane-protocol: 290 +--rw rip 291 +--rw originate-default-route 292 | +--rw enabled? boolean 293 | +--rw route-policy? route-policy-ref 294 +--rw default-metric? uint8 295 +--rw distance? uint8 296 +--rw triggered-update-threshold? uint8 297 +--rw maximum-paths? uint8 298 +--rw output-delay? uint8 299 +--rw distribute-list* [prefix-set-name direction] 300 | +--rw prefix-set-name prefix-set-ref 301 | +--rw direction enumeration 302 | +--rw if-name? if:interface-ref 303 +--rw redistribute 304 | +--rw bgp* [asn] 305 | | +--rw asn inet:as-number 306 | | +--rw metric? uint8 307 | | +--rw route-policy? route-policy-ref 308 | +--rw cg-nat! 309 | | +--rw metric? uint8 310 | | +--rw route-policy? route-policy-ref 311 | +--rw connected! 312 | | +--rw metric? uint8 313 | | +--rw route-policy? route-policy-ref 314 | +--rw ipsec! 315 | | +--rw metric? uint8 316 | | +--rw route-policy? route-policy-ref 317 | +--rw isis* [instance] 318 | | +--rw instance -> ../../../../.. 319 /rt:control-plane-protocol/name 320 | | +--rw level? enumeration 321 | | +--rw metric? uint8 322 | | +--rw route-policy? route-policy-ref 323 | +--rw nat! 324 | | +--rw metric? uint8 325 | | +--rw route-policy? route-policy-ref 326 | +--rw ospfv2* [instance] 327 | | +--rw instance -> ../../../../.. 328 /rt:control-plane-protocol/name 329 | | +--rw route-type? ospf:route-type 330 | | +--rw metric? uint8 331 | | +--rw route-policy? route-policy-ref 332 | +--rw ospfv3* [instance] 333 | | +--rw instance -> ../../../../.. 334 /rt:control-plane-protocol/name 335 | | +--rw route-type? ospf:route-type 336 | | +--rw metric? uint8 337 | | +--rw route-policy? route-policy-ref 338 | +--rw ripv2* [instance] 339 | | +--rw instance -> ../../../../.. 340 /rt:control-plane-protocol/name 341 | | +--rw metric? uint8 342 | | +--rw route-policy? route-policy-ref 343 | +--rw ripng* [instance] 344 | | +--rw instance -> ../../../../.. 345 /rt:control-plane-protocol/name 346 | | +--rw metric? uint8 347 | | +--rw route-policy? route-policy-ref 348 | +--rw static! 349 | +--rw metric? uint8 350 | +--rw route-policy? route-policy-ref 351 +--rw timers 352 | +--rw update-interval? uint16 353 | +--rw invalid-interval? uint16 354 | +--rw holddown-interval? uint16 355 | +--rw flush-interval? uint16 356 +--rw interfaces 357 | +--rw interface* [interface] 358 | +--rw interface if:interface-ref 359 | +--rw authentication 360 | | +--rw (auth-type-selection)? 361 | | +--:(auth-key-chain) 362 | | | +--rw key-chain? 363 key-chain:key-chain-ref 364 | | +--:(auth-key) 365 | | +--rw key? string 366 | | +--rw crypto-algorithm? identityref 367 | +--rw bfd {bfd}? 368 | | +--rw enabled? boolean 369 | +--rw cost? uint8 370 | +--rw neighbors {explicit-neighbors}? 371 | | +--rw neighbor* [address] 372 | | +--rw address inet:ip-address 373 | +--rw no-listen? empty 374 | +--rw originate-default-route 375 | | +--rw enabled? boolean 376 | | +--rw route-policy? route-policy-ref 377 | +--rw passive? empty 378 | +--rw split-horizon? enumeration 379 | +--rw summary-address 380 | | +--rw address? inet:ip-prefix 381 | | +--rw metric? uint8 382 | +--rw timers 383 | | +--rw update-interval? uint16 384 | | +--rw invalid-interval? uint16 385 | | +--rw holddown-interval? uint16 386 | | +--rw flush-interval? uint16 387 | +--ro oper-status? enumeration 388 | +--ro next-full-update? uint32 389 | +--ro valid-address? boolean 390 | +--ro statistics {interface-statistics}? 391 | +--ro discontinuity-time? yang:date-and-time 392 | +--ro bad-packets-rcvd? yang:counter32 393 | +--ro bad-routes-rcvd? yang:counter32 394 | +--ro updates-sent? yang:counter32 395 +--ro next-triggered-update? uint32 396 +--ro num-of-routes? uint32 397 +--ro ipv4 398 | +--ro neighbors 399 | | +--ro neighbor* [ipv4-address] 400 | | +--ro ipv4-address inet:ipv4-address 401 | | +--ro last-update? yang:date-and-time 402 | | +--ro bad-packets-rcvd? yang:counter32 403 | | +--ro bad-routes-rcvd? yang:counter32 404 | +--ro routes 405 | +--ro route* [ipv4-prefix] 406 | +--ro ipv4-prefix 407 inet:ipv4-prefix 408 | +--ro next-hop? 409 inet:ipv4-address 410 | +--ro interface? 411 if:interface-ref 412 | +--ro redistributed? boolean 413 | +--ro route-type? enumeration 414 | +--ro metric? uint8 415 | +--ro expire-time? uint16 416 | +--ro deleted? boolean 417 | +--ro holddown? boolean 418 | +--ro need-triggered-update? boolean 419 | +--ro inactive? boolean 420 | +--ro flush-expire-before-holddown? boolean 421 +--ro ipv6 422 | +--ro neighbors 423 | | +--ro neighbor* [ipv6-address] 424 | | +--ro ipv6-address inet:ipv6-address 425 | | +--ro last-update? yang:date-and-time 426 | | +--ro bad-packets-rcvd? yang:counter32 427 | | +--ro bad-routes-rcvd? yang:counter32 428 | +--ro routes 429 | +--ro route* [ipv6-prefix] 430 | +--ro ipv6-prefix 431 inet:ipv6-prefix 432 | +--ro next-hop? 433 inet:ipv6-address 434 | +--ro interface? 435 if:interface-ref 436 | +--ro redistributed? boolean 437 | +--ro route-type? enumeration 438 | +--ro metric? uint8 439 | +--ro expire-time? uint16 440 | +--ro deleted? boolean 441 | +--ro holddown? boolean 442 | +--ro need-triggered-update? boolean 443 | +--ro inactive? boolean 444 | +--ro flush-expire-before-holddown? boolean 445 +--ro statistics {global-statistics}? 446 +--ro discontinuity-time? yang:date-and-time 447 +--ro requests-rcvd? yang:counter32 448 +--ro requests-sent? yang:counter32 449 +--ro responses-rcvd? yang:counter32 450 +--ro responses-sent? yang:counter32 452 rpcs: 453 +---x clear-rip-route 454 +---w input 455 +---w rip-instance? -> /rt:routing 456 /control-plane-protocols/control-plane-protocol/name 458 4. YANG Module 460 file "ietf-rip@2017-09-27.yang" 461 module ietf-rip { 462 yang-version 1.1; 463 namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; 465 prefix rip; 467 import ietf-inet-types { 468 prefix "inet"; 469 } 471 import ietf-yang-types { 472 prefix "yang"; 473 } 475 import ietf-interfaces { 476 prefix "if"; 477 } 479 import ietf-ip { 480 prefix "ip"; 481 } 483 import ietf-routing-2 { 484 prefix "rt"; 485 } 487 import ietf-key-chain { 488 prefix "key-chain"; 489 } 491 import ietf-ospf { 492 prefix "ospf"; 493 } 494 import ietf-isis { 495 prefix "isis"; 496 } 498 organization "IETF Routing Area Working Group (rtgwg)"; 500 contact 501 "WG Web: 502 WG List: 504 WG Chair: Jeff Tantsura 505 507 WG Chair: Chris Bowers 508 510 Editor: Xufeng Liu 511 513 Editor: Prateek Sarda 514 516 Editor: Vikram Choudhary 517 "; 519 description 520 "This YANG module defines a model for managing Routing 521 Information Protocol (RIP), including RIP version 2 and RIPng. 523 Copyright (c) 2016 IETF Trust and the persons identified as 524 authors of the code. All rights reserved. 526 Redistribution and use in source and binary forms, with or 527 without modification, is permitted pursuant to, and subject to 528 the license terms contained in, the Simplified BSD License set 529 forth in Section 4.c of the IETF Trust's Legal Provisions 530 Relating to IETF Documents 531 (http://trustee.ietf.org/license-info)."; 533 revision 2017-09-27 { 534 description 535 "Initial revision."; 536 reference 537 "RFC 2453: RIP Version 2. 538 RFC 2080: RIPng for IPv6. 539 RFC 1724: RIP Version 2 MIB Extension."; 540 } 541 /* 542 * Features 543 */ 544 feature bfd { 545 description 546 "This feature indicates that the RIP implementation on the 547 system supports BFD (Bidirectional Forwarding Detection)."; 548 } 550 feature bfd-protocol-parameters { 551 description 552 "BFD (Bidirectional Forwarding Detection) protocol specific 553 parameters support on a RIP interface."; 554 } 556 feature explicit-neighbors { 557 description 558 "This feature indicates that the system supports explicit 559 neighbor configuration on a RIP interface."; 560 } 562 feature global-statistics { 563 description 564 "This feature indicates that the system supports collecting 565 global statistic data related to RIP."; 566 } 568 feature interface-statistics { 569 description 570 "This feature indicates that the system supports collecting 571 per-interface statistic data related to RIP."; 572 } 574 /* 575 * Typedefs 576 */ 578 typedef prefix-set-ref { 579 type string; 580 description 581 "A type for a reference to a prefix set. 582 The string value is the name identifier for uniquely 583 identifying the referenced prefix set, which contains a list 584 of prefixes that a routing policy can applied. The definition 585 of such a prefix set is outside the scope of this document."; 586 } 588 typedef route-policy-ref { 589 type string; 590 description 591 "A type for a reference to a route policy. 592 The string value is the name identifier for uniquely 593 identifying the referenced routing policy, which contains one 594 or more policy rules that can be used for a routing decision. 595 The definition of such a routing policy is outside the scope 596 of this document."; 597 } 599 /* 600 * Identities 601 */ 603 identity rip { 604 base rt:routing-protocol; 605 description "Identity for the RIP routing protocol."; 606 } 608 identity ripv2 { 609 base rip:rip; 610 description "Identity for RIPv2 (RIP version 2)."; 611 } 613 identity ripng { 614 base rip:rip; 615 description "Identity for RIPng."; 616 } 618 /* 619 * Groupings 620 */ 622 grouping originate-default-route-container { 623 description 624 "Containing settings whether to originate the default route 625 in RIP routing instance."; 626 container originate-default-route { 627 description 628 "Injects the default route into the RIP (RIPv2 or RIPng) 629 routing instance."; 630 leaf enabled { 631 type boolean; 632 default false; 633 description 634 "'true' if originating default route is enabled."; 635 } 636 leaf route-policy { 637 type route-policy-ref; 638 description 639 "The conditions of the route policy are applied to the 640 default route."; 641 } 642 } 643 } 645 grouping redistribute-container { 646 description 647 "Container of redistribute attributes."; 649 container redistribute { 650 description 651 "Redistributes routes learned from other routing protocols 652 into the RIP routing instance."; 653 list bgp { 654 key "asn"; 655 description 656 "Redistributes routes from the specified BGP (Border 657 Gateway Protocol) autonomous system (AS) into the RIP 658 routing instance."; 659 leaf asn { 660 type inet:as-number; 661 description 662 "BGP autonomous system (AS) number."; 663 } 664 uses redistribute-route-policy-attributes; 665 } 666 container cg-nat { 667 presence 668 "Present if Carrier Grade Network Address Translation 669 (CGNAT) routes are redistributed."; 670 description 671 "Carrier Grade Network Address Translation (CGNAT) 672 routes."; 673 uses redistribute-route-policy-attributes; 674 } 675 container connected { 676 presence 677 "Present if directly attached network routes are 678 redistributed."; 679 description 680 "Redistributes directly attached networks into the RIP 681 routing instance."; 682 uses redistribute-route-policy-attributes; 683 } 684 container ipsec { 685 presence 686 "Present if IP security routing instance routes 687 are redistributed."; 688 description 689 "Redistributes routes from the IP security routing 690 instance into the RIP routing instance."; 691 uses redistribute-route-policy-attributes; 692 } 693 list isis { 694 key "instance"; 695 description 696 "Redistributes IS-IS routes."; 697 leaf instance { 698 type leafref { 699 path "../../../../../rt:control-plane-protocol/rt:name"; 700 } 701 must "derived-from-or-self(" 702 + "../../../../../rt:control-plane-protocol" 703 + "[rt:name = current()]/rt:type, 'isis:isis')" { 704 description 705 "The type of the routing protocol must be 'isis'"; 706 } 707 description 708 "Redistributes routes from the specified IS-IS routing 709 instance into the RIP routing instance."; 710 } 711 leaf level { 712 type enumeration { 713 enum 1 { 714 description "IS-IS level 1 routes."; 715 } 716 enum 2 { 717 description "IS-IS level 1 routes."; 718 } 719 enum 1-2 { 720 description "IS-IS level 1-2 routes."; 721 } 722 } 723 description 724 "IS-IS level."; 725 } 726 uses redistribute-route-policy-attributes; 727 } 728 container nat { 729 presence 730 "Present if Network Address Translation (NAT) routes 731 are redistributed."; 732 description 733 "Redistributes Network Address Translation (NAT) 734 routes into the RIP routing instance."; 735 uses redistribute-route-policy-attributes; 736 } 737 list ospfv2 { 738 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 739 description 740 "Applicable to RIPv2."; 741 } 742 key "instance"; 743 description 744 "Redistributes routes from the specified OSPFv2 routing 745 instance into the RIPv2 routing instance."; 746 leaf instance { 747 type leafref { 748 path "../../../../../rt:control-plane-protocol/rt:name"; 749 } 750 must "derived-from-or-self(" 751 + "../../../../../rt:control-plane-protocol" 752 + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" { 753 description 754 "The type of the routing protocol must be 'ospfv2'"; 755 } 756 description 757 "OSPFv2 instance ID. Redistributes routes from the 758 specified OSPFv2 routing instance into the RIPv2 routing 759 instance. "; 760 } 761 leaf route-type { 762 type ospf:route-type; 763 description 764 "Redistributes only those OSPFv2 routes matching the 765 specified route type into the RIPv2 routing instance."; 766 } 767 uses redistribute-route-policy-attributes; 768 } 769 list ospfv3 { 770 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 771 description 772 "Applicable to RIPng."; 773 } 774 key "instance"; 775 description 776 "Redistributes routes from the specified OSPFv3 routing 777 instance into the RIPng routing instance."; 778 leaf instance { 779 type leafref { 780 path "../../../../../rt:control-plane-protocol/rt:name"; 782 } 783 must "derived-from-or-self(" 784 + "../../../../../rt:control-plane-protocol" 785 + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" { 786 description 787 "The type of the routing protocol must be 'ospfv3'"; 788 } 789 description 790 "OSPFv3 instance ID. Redistributes routes from the 791 specified OSPFv3 routing instance into the RIPng routing 792 instance. "; 793 } 794 leaf route-type { 795 type ospf:route-type; 796 description 797 "Redistributes only those OSPFv3 routes matching the 798 specified route type into the RIPng routing instance."; 799 } 800 uses redistribute-route-policy-attributes; 801 } 802 list ripv2 { 803 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 804 description 805 "Applicable to RIPv2."; 806 } 807 key "instance"; 808 description 809 "Redistributes routes from another RIPv2 routing instance 810 into the current RIPv2 routing instance."; 811 leaf instance { 812 type leafref { 813 path "../../../../../rt:control-plane-protocol/rt:name"; 814 } 815 must "derived-from-or-self(" 816 + "../../../../../rt:control-plane-protocol" 817 + "[rt:name = current()]/rt:type, 'rip:ripv2')" { 818 description 819 "The type of the routing protocol must be 'ripv2'"; 820 } 821 description 822 "Redistributes routes from the specified RIPv2 routing 823 instance into the RIPv2 routing instance."; 824 } 825 uses redistribute-route-policy-attributes; 826 } 827 list ripng { 828 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 829 description 830 "Applicable to RIPng."; 831 } 832 key "instance"; 833 description 834 "Redistributes routes from another RIPng routing instance 835 into the current RIPng routing instance."; 836 leaf instance { 837 type leafref { 838 path "../../../../../rt:control-plane-protocol/rt:name"; 839 } 840 must "derived-from-or-self(" 841 + "../../../../../rt:control-plane-protocol" 842 + "[rt:name = current()]/rt:type, 'rip:ripng')" { 843 description 844 "The type of the routing protocol must be 'ripng'"; 845 } 846 description 847 "Redistributes routes from the specified RIPng routing 848 instance into the RIPng routing instance."; 849 } 850 uses redistribute-route-policy-attributes; 851 } 852 container static { 853 presence "Present if redistributing static routes."; 854 description 855 "Redistributes static routes into the RIP routing 856 instance."; 857 uses redistribute-route-policy-attributes; 858 } 859 } // redistribute 860 } // redistribute-container 862 grouping redistribute-route-policy-attributes { 863 description 864 "Attributes for redistributing a route policy."; 865 leaf metric { 866 type uint8 { 867 range 0..16; 868 } 869 description 870 "Metric used for the redistributed route. If a metric is 871 not specified, the metric configured with the 872 default-metric attribute in RIP router configuration is 873 used. If the default-metric attribute has not been 874 configured, the default metric for redistributed routes 875 is 0."; 876 } 877 leaf route-policy { 878 type route-policy-ref; 879 description 880 "Applies the conditions of the specified route policy to 881 routes that are redistributed into the RIP routing 882 instance."; 883 } 884 } // redistribute-route-policy-attributes 886 grouping timers-container { 887 description 888 "Container for settings of basic timers"; 889 container timers { 890 must "invalid-interval >= (update-interval * 3)" { 891 description 892 "invalid-interval must be at least three times the value 893 for the update-interval argument."; 894 } 895 must "flush-interval > invalid-interval" { 896 description 897 "flush-interval must be larger than the value for the 898 invalid-interval argument"; 899 } 900 description 901 "Timers for the specified RIPv2 or RIPng instance or 902 interface."; 903 leaf update-interval { 904 type uint16 { 905 range 1..32767; 906 } 907 units seconds; 908 default 30; 909 description 910 "Interval at which RIPv2 or RIPng updates are sent."; 911 } 912 leaf invalid-interval { 913 type uint16 { 914 range 1..32767; 915 } 916 units seconds; 917 default 180; 918 description 919 "Interval before a route is declared invalid after no 920 updates are received. This value is at least three times 921 the value for the update-interval argument."; 922 } 923 leaf holddown-interval { 924 type uint16 { 925 range 1..32767; 927 } 928 units seconds; 929 default 180; 930 description 931 "Interval before better routes are released."; 932 } 933 leaf flush-interval { 934 type uint16 { 935 range 1..32767; 936 } 937 units seconds; 938 default 240; 939 description 940 "Interval before a route is flushed from the routing 941 table. This value must be larger than the value for the 942 invalid-interval argument."; 943 } 944 } // timers 945 } 947 grouping global-attributes { 948 description 949 "Global configuration and state attributes."; 950 uses originate-default-route-container; 952 leaf default-metric { 953 type uint8 { 954 range 0..16; 955 } 956 default 0; 957 description 958 "Set the default metric."; 959 } 961 leaf distance { 962 type uint8 { 963 range 1..255; 964 } 965 default 120; 966 description 967 "The administrative distance of the RIPv2 or RIPng for the 968 current RIPv2 or RIPng instance."; 969 } 971 leaf triggered-update-threshold { 972 type uint8 { 973 range 1..30; 974 } 975 units seconds; 976 default 5; 977 description 978 "This attribute is used to suppress triggered updates. 979 When the arrival of a regularly scheduled update matches the 980 number of seconds or is less than the number seconds 981 configured with this attribute, the triggered update is 982 suppressed."; 983 } 985 leaf maximum-paths { 986 type uint8 { 987 range 1..16; 988 } 989 default 8; 990 description 991 "The number of multiple equal-cost RIPv2 or RIPng routes 992 that can be used as the best paths for balancing the load 993 of outgoing traffic packets."; 994 } 996 leaf output-delay { 997 type uint8 { 998 range 1..50; 999 } 1000 units milliseconds; 1001 description 1002 "A delay time between packets sent in multipacket 1003 RIPv2 or RIPng updates."; 1004 } 1005 } // global-attributes 1007 grouping distribute-lists { 1008 description 1009 "Grouping for distribute lists."; 1010 list distribute-list { 1011 key "prefix-set-name direction"; 1012 description 1013 "List of distribute-lists, which are used to filter in-coming 1014 or out-going routing updates."; 1016 leaf prefix-set-name { 1017 type prefix-set-ref; 1018 description 1019 "Reference to a prefix list to be applied to RIPv2 or 1020 RIPng packets."; 1021 } 1022 leaf direction { 1023 type enumeration { 1024 enum "in" { 1025 description 1026 "Apply the distribute-list to in-coming routes."; 1027 } 1028 enum "out" { 1029 description 1030 "Apply the distribute-list to out-going routes."; 1031 } 1032 } 1033 description 1034 "Direction of the routing updates."; 1035 } 1037 leaf if-name { 1038 type if:interface-ref; 1039 description 1040 "Reference to an interface to which the prefix list is 1041 applied."; 1042 } 1043 } 1044 } // distribute-lists 1046 grouping route-attributes { 1047 description 1048 "Grouping for route attributes."; 1049 leaf redistributed { 1050 type boolean; 1051 description 1052 "Redistributed routes"; 1053 } 1055 leaf route-type { 1056 type enumeration { 1057 enum connected { 1058 description "Connected route."; 1059 } 1060 enum external { 1061 description "External route."; 1062 } 1063 enum external-backup { 1064 description "External backup route."; 1065 } 1066 enum rip { 1067 description "RIP route."; 1068 } 1069 } 1070 description 1071 "Route type."; 1072 } 1073 leaf metric { 1074 type uint8 { 1075 range 0..16; 1076 } 1077 description "Route metric."; 1078 } 1079 leaf expire-time { 1080 type uint16; 1081 description "Expiration time."; 1082 } 1083 leaf deleted { 1084 type boolean; 1085 description "Deleted route."; 1086 } 1087 leaf holddown { 1088 type boolean; 1089 description "Holddown route."; 1090 } 1091 leaf need-triggered-update { 1092 type boolean; 1093 description "The route needs triggered update."; 1094 } 1095 leaf inactive { 1096 type boolean; 1097 description "The route is inactive."; 1098 } 1099 leaf flush-expire-before-holddown { 1100 type boolean; 1101 description 1102 "The flush timer expired before holddown time."; 1103 } 1104 } // route-attribute 1106 /* 1107 * Configuration data and operational state data nodes 1108 */ 1110 augment "/rt:routing/rt:control-plane-protocols/" 1111 + "rt:control-plane-protocol" { 1112 when "derived-from(rt:type, 'rip:rip')" { 1113 description 1114 "This augment is only valid for a routing protocol instance 1115 of RIP (type 'ripv2' or 'ripng')."; 1116 } 1117 description "RIP augmentation."; 1118 container rip { 1119 description 1120 "RIP data."; 1122 uses global-attributes; 1123 uses distribute-lists; 1124 uses redistribute-container; 1125 uses timers-container; 1127 container interfaces { 1128 description 1129 "Containing a list of RIP interfaces."; 1130 list interface { 1131 key "interface"; 1132 description 1133 "List of RIP interfaces."; 1134 leaf interface { 1135 type if:interface-ref; 1136 must "(derived-from-or-self(" 1137 + "../../../../rt:type, 'rip:ripv2') and " 1138 + "/if:interfaces/if:interface[if:name=current()]/" 1139 + "ip:ipv4) or " 1140 + "(derived-from-or-self(" 1141 + "../../../../rt:type, 'rip:ripng') and " 1142 + "/if:interfaces/if:interface[if:name=current()]/" 1143 + "ip:ipv6)" { 1144 error-message "Invalid interface type."; 1145 description 1146 "RIPv2 can be enabled on IPv4 interfae, and 1147 RIPng can be enabled on IPv6 interface."; 1148 } 1149 description 1150 "Enable RIP on this interface."; 1151 } 1153 container authentication { 1154 when "derived-from-or-self(" 1155 + "../../../../rt:type, 'rip:ripv2')" { 1156 description "Only applicable to RIPv2."; 1157 } 1158 description 1159 "Enables authentication and specifies the 1160 authentication scheme for the RIP interface"; 1161 choice auth-type-selection { 1162 description 1163 "Specify the authentication scheme."; 1164 reference 1165 "RFC8177: YANG Data Model for Key Chains."; 1167 case auth-key-chain { 1168 leaf key-chain { 1169 type key-chain:key-chain-ref; 1170 description 1171 "key-chain name."; 1172 } 1173 } 1174 case auth-key { 1175 leaf key { 1176 type string; 1177 description 1178 "Key string in ASCII format."; 1179 } 1180 leaf crypto-algorithm { 1181 type identityref { 1182 base key-chain:crypto-algorithm; 1183 } 1184 description 1185 "Cryptographic algorithm associated with key."; 1186 } 1187 } 1188 } 1189 } 1191 container bfd { 1192 if-feature bfd; 1193 description "BFD configuration."; 1194 leaf enabled { 1195 type boolean; 1196 default false; 1197 description 1198 "'true' if BFD is enabled for the interface."; 1199 } 1200 } 1202 leaf cost { 1203 type uint8 { 1204 range 1..16; 1205 } 1206 default 1; 1207 description 1208 "Interface cost."; 1209 } 1211 container neighbors { 1212 if-feature explicit-neighbors; 1213 description 1214 "Specifies the RIP neighbors. Useful for a 1215 non-broadcast multiple access (NBMA) network."; 1216 list neighbor { 1217 key "address"; 1218 description 1219 "Specify a RIP neighbor on a non-broadcast network."; 1220 leaf address { 1221 type inet:ip-address; 1222 description "Neighbor IP address."; 1223 } 1224 } 1225 } 1227 leaf no-listen { 1228 type empty; 1229 description 1230 "Disables listening to and processing of RIPv2 or RIPng 1231 packets on the specified interface."; 1232 } 1234 uses originate-default-route-container; 1236 leaf passive { 1237 type empty; 1238 description 1239 "Disables sending of RIPv2 or RIPng packets on the 1240 specified interface."; 1241 } 1243 leaf split-horizon { 1244 type enumeration { 1245 enum disabled { 1246 description 1247 "Disables split-horizon processing."; 1248 } 1249 enum simple { 1250 description 1251 "Enables simple split-horizon processing."; 1252 } 1253 enum poison-reverse { 1254 description 1255 "Enables split-horizon processing with poison 1256 reverse."; 1257 } 1258 } 1259 default simple; 1260 description 1261 "Controls RIPv2 or RIPng split-horizon processing on 1262 the specified interface."; 1264 } 1266 container summary-address { 1267 description 1268 "Summarizes information about RIPv2 or RIPng routes 1269 sent over the specified interface in RIPv2 or RIPng 1270 update packets."; 1271 leaf address { 1272 type inet:ip-prefix; 1273 description 1274 "IPv4 address, in the form A.B.C.D, and the prefix 1275 length, separated by the slash (/) character; 1276 or IPv6 address, in the form A:B:C:D:E:F:G:H, and 1277 the prefix length, separated by the slash (/) 1278 character."; 1279 } 1280 leaf metric { 1281 type uint8 { 1282 range 0..16; 1283 } 1284 description 1285 "Metric used for the route. If this attribute is not 1286 used, the value set through the default-metric 1287 attribute in RIPv2 or RIPng router configuration is 1288 used for the route. "; 1289 } 1290 } 1292 uses timers-container; 1294 /* Operational state */ 1295 leaf oper-status { 1296 type enumeration { 1297 enum up { 1298 description 1299 "RIPv2 or RIPng is operational on this interface."; 1300 } 1301 enum down { 1302 description 1303 "RIPv2 or RIPng is not operational on this 1304 interface."; 1305 } 1306 } 1307 config false; 1308 description 1309 "Operational state."; 1310 } 1311 leaf next-full-update { 1312 type uint32; 1313 config false; 1314 description 1315 "Next full update time."; 1316 } 1317 leaf valid-address { 1318 type boolean; 1319 config false; 1320 description 1321 "The interface has a valid address."; 1322 } 1324 container statistics { 1325 if-feature interface-statistics; 1326 config false; 1327 description 1328 "Interface statistic counters."; 1329 leaf discontinuity-time { 1330 type yang:date-and-time; 1331 description 1332 "The time on the most recent occasion at which any 1333 one or more of the statistic counters suffered a 1334 discontinuity. If no such discontinuities have 1335 occurred since the last re-initialization of the 1336 local management subsystem, then this node contains 1337 the time the local management subsystem 1338 re-initialized itself."; 1339 } 1340 leaf bad-packets-rcvd { 1341 type yang:counter32; 1342 description 1343 "The number of RIP invalid packets received by 1344 the RIP process which were subsequently discarded 1345 for any reason (e.g. a version 0 packet, or an 1346 unknown command type)."; 1347 } 1348 leaf bad-routes-rcvd { 1349 type yang:counter32; 1350 description 1351 "The number of routes, in valid RIP packets, 1352 which were ignored for any reason (e.g. unknown 1353 address family, or invalid metric)."; 1354 } 1355 leaf updates-sent { 1356 type yang:counter32; 1357 description 1358 "The number of triggered RIP updates actually 1359 sent on this interface. This explicitly does 1360 NOT include full updates sent containing new 1361 information."; 1362 } 1363 } 1364 } // interface 1365 } // interfaces 1367 /* Operational state */ 1368 leaf next-triggered-update { 1369 type uint32; 1370 config false; 1371 description 1372 "Next triggered update."; 1373 } 1374 leaf num-of-routes { 1375 type uint32; 1376 config false; 1377 description 1378 "The number of routes."; 1379 } 1381 container ipv4 { 1382 when "derived-from-or-self(../../rt:type, 'rip:ripv2')" { 1383 description 1384 "IPv4 address family is supported by RIPv2."; 1385 } 1386 config false; 1387 description 1388 "IPv4 address family information."; 1389 container neighbors { 1390 description 1391 "IPv4 neighbor information."; 1392 list neighbor { 1393 key "ipv4-address"; 1394 description 1395 "A RIPv2 neighbor."; 1397 leaf ipv4-address { 1398 type inet:ipv4-address; 1399 description 1400 "IP address that a RIP neighbor is using as its 1401 source address."; 1402 } 1403 leaf last-update { 1404 type yang:date-and-time; 1405 description 1406 "The time when the most recent RIP update was 1407 received from this neighbor."; 1409 } 1410 leaf bad-packets-rcvd { 1411 type yang:counter32; 1412 description 1413 "The number of RIP invalid packets received from 1414 this neighbor which were subsequently discarded 1415 for any reason (e.g. a version 0 packet, or an 1416 unknown command type)."; 1417 } 1418 leaf bad-routes-rcvd { 1419 type yang:counter32; 1420 description 1421 "The number of routes received from this neighbor, 1422 in valid RIP packets, which were ignored for any 1423 reason (e.g. unknown address family, or invalid 1424 metric)."; 1425 } 1426 } // neighbor 1427 } // neighbors 1428 container routes { 1429 description 1430 "IPv4 route information."; 1431 list route { 1432 key "ipv4-prefix"; 1433 description 1434 "A RIPv2 IPv4 route."; 1436 leaf ipv4-prefix { 1437 type inet:ipv4-prefix; 1438 description 1439 "IP address (in the form A.B.C.D) and prefix length, 1440 separated by the slash (/) character. The range of 1441 values for the prefix-length is 0 to 32."; 1442 } 1443 leaf next-hop { 1444 type inet:ipv4-address; 1445 description 1446 "Next hop IPv4 address."; 1447 } 1448 leaf interface { 1449 type if:interface-ref; 1450 description 1451 "The interface that the route uses."; 1452 } 1453 uses route-attributes; 1454 } // route 1455 } // routes 1456 } // ipv4 1457 container ipv6 { 1458 when "derived-from-or-self(../../rt:type, 'rip:ripng')" { 1459 description 1460 "IPv6 address family is supported by RIPng."; 1461 } 1462 config false; 1463 description 1464 "IPv6 address family information."; 1465 container neighbors { 1466 description 1467 "IPv6 neighbor information."; 1468 list neighbor { 1469 key "ipv6-address"; 1470 description 1471 "A RIPng neighbor."; 1473 leaf ipv6-address { 1474 type inet:ipv6-address; 1475 description 1476 "IP address that a RIP neighbor is using as its 1477 source address."; 1478 } 1479 leaf last-update { 1480 type yang:date-and-time; 1481 description 1482 "The time when the most recent RIP update was 1483 received from this neighbor."; 1484 } 1485 leaf bad-packets-rcvd { 1486 type yang:counter32; 1487 description 1488 "The number of RIP invalid packets received from 1489 this neighbor which were subsequently discarded 1490 for any reason (e.g. a version 0 packet, or an 1491 unknown command type)."; 1492 } 1493 leaf bad-routes-rcvd { 1494 type yang:counter32; 1495 description 1496 "The number of routes received from this neighbor, 1497 in valid RIP packets, which were ignored for any 1498 reason (e.g. unknown address family, or invalid 1499 metric)."; 1500 } 1501 } // neighbor 1502 } // neighbors 1503 container routes { 1504 description 1505 "IPv6 route information."; 1506 list route { 1507 key "ipv6-prefix"; 1508 description 1509 "A RIPng IPv6 route."; 1511 leaf ipv6-prefix { 1512 type inet:ipv6-prefix; 1513 description 1514 "IP address (in the canonical format defined in 1515 RFC5952) and prefix length, separated by the slash 1516 (/) character. The range of values for the 1517 prefix-length is 0 to 128."; 1518 } 1519 leaf next-hop { 1520 type inet:ipv6-address; 1521 description 1522 "Next hop IPv6 address."; 1523 } 1524 leaf interface { 1525 type if:interface-ref; 1526 description 1527 "The interface that the route uses."; 1528 } 1529 uses route-attributes; 1530 } // route 1531 } // routes 1532 } // ipv6 1534 container statistics { 1535 if-feature global-statistics; 1536 config false; 1537 description 1538 "Global statistic counters."; 1539 leaf discontinuity-time { 1540 type yang:date-and-time; 1541 description 1542 "The time on the most recent occasion at which any one 1543 or more of the statistic counters suffered a 1544 discontinuity. If no such discontinuities have occurred 1545 since the last re-initialization of the local 1546 management subsystem, then this node contains the time 1547 the local management subsystem re-initialized itself."; 1548 } 1549 leaf requests-rcvd { 1550 type yang:counter32; 1551 description 1552 "The number of requests received by RIP."; 1554 } 1555 leaf requests-sent { 1556 type yang:counter32; 1557 description 1558 "The number of requests sent by RIP."; 1559 } 1560 leaf responses-rcvd { 1561 type yang:counter32; 1562 description 1563 "The number of responses received by RIP."; 1564 } 1565 leaf responses-sent { 1566 type yang:counter32; 1567 description 1568 "The number of responses sent by RIP."; 1569 } 1570 } // statistics 1571 } // container rip 1572 } 1574 /* 1575 * RPCs 1576 */ 1578 rpc clear-rip-route { 1579 description 1580 "Clears RIP routes from the IP routing table and routes 1581 redistributed into the RIP protocol for the specified RIP 1582 instance or for all RIP instances in the current context."; 1584 input { 1585 leaf rip-instance { 1586 type leafref { 1587 path "/rt:routing/rt:control-plane-protocols/" 1588 + "rt:control-plane-protocol/rt:name"; 1589 } 1590 description 1591 "Instance name identifying a specific RIP instance. 1592 This leaf is optional for the rpc. 1593 If it is specified, the rpc will clear all routes in the 1594 specified RIP instance; 1595 if it is not specified, the rpc will clear all routes in 1596 all RIP instances."; 1597 } 1598 } 1599 } // rcp clear-rip-route 1600 } 1601 1603 5. IANA Considerations 1605 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1606 actual RFC number (and remove this note). 1608 This document registers the following namespace URIs in the IETF XML 1609 registry [RFC3688]: 1611 -------------------------------------------------------------------- 1612 URI: urn:ietf:params:xml:ns:yang:ietf-rip 1613 Registrant Contact: The IESG. 1614 XML: N/A, the requested URI is an XML namespace. 1615 -------------------------------------------------------------------- 1617 This document registers the following YANG modules in the YANG Module 1618 Names registry [RFC7950]: 1620 -------------------------------------------------------------------- 1621 name: ietf-rip 1622 namespace: urn:ietf:params:xml:ns:yang:ietf-rip 1623 prefix: rip 1624 reference: RFC XXXX 1625 -------------------------------------------------------------------- 1627 6. Security Considerations 1629 The configuration, state, and action data defined in this document 1630 are designed to be accessed via a management protocol with a secure 1631 transport layer, such as NETCONF [RFC6241]. The NETCONF access 1632 control model [RFC6536] provides the means to restrict access for 1633 particular NETCONF users to a preconfigured subset of all available 1634 NETCONF protocol operations and contents. 1636 A number of configuration data nodes defined in this document are 1637 writable/creatable/deletable (i.e., "config true" in YANG terms, 1638 which is the default). These data nodes may be considered sensitive 1639 or vulnerable in some network environments. Write operations to 1640 these data nodes, such as "edit-config" in NETCONF, can have negative 1641 effects on the network if the protocol operations are not properly 1642 protected. The vulnerable "config true" parameters and subtrees are 1643 the following: 1645 /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ 1646 rip:rip 1648 Unauthorized access to any node of these can adversely affect the 1649 routing subsystem of both the local device and the network. This may 1650 lead to network malfunctions, delivery of packets to inappropriate 1651 destinations, and other problems. 1653 This data model also defines a RPC "clear-rip-route", which may 1654 affect the routing subsystem in the same way as described above. 1656 7. References 1658 7.1. Normative References 1660 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1661 Requirement Levels", BCP 14, RFC 2119, 1662 DOI 10.17487/RFC2119, March 1997, . 1665 [RFC2453] Malkin, G., "RIP Version 2", STD 56, RFC 2453, 1666 DOI 10.17487/RFC2453, November 1998, . 1669 [RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080, 1670 DOI 10.17487/RFC2080, January 1997, . 1673 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1674 DOI 10.17487/RFC3688, January 2004, . 1677 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1678 and A. Bierman, Ed., "Network Configuration Protocol 1679 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1680 . 1682 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1683 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1684 . 1686 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1687 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1688 . 1690 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1691 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1692 DOI 10.17487/RFC8177, June 2017, . 1695 [I-D.bjorklund-netmod-rfc7223bis] 1696 Bjorklund, M., "A YANG Data Model for Interface 1697 Management", draft-bjorklund-netmod-rfc7223bis-00 (work in 1698 progress), August 2017. 1700 [I-D.bjorklund-netmod-rfc7277bis] 1701 Bjorklund, M., "A YANG Data Model for IP Management", 1702 draft-bjorklund-netmod-rfc7277bis-00 (work in progress), 1703 August 2017. 1705 [I-D.acee-netmod-rfc8022bis] 1706 Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1707 Routing Management (NDMA Version)", draft-acee-netmod- 1708 rfc8022bis-02 (work in progress), September 2017. 1710 [I-D.ietf-bfd-yang] 1711 Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and 1712 G. Mirsky, "YANG Data Model for Bidirectional Forwarding 1713 Detection (BFD)", draft-ietf-bfd-yang-06 (work in 1714 progress), June 2017. 1716 [I-D.ietf-isis-yang-isis-cfg] 1717 Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L. 1718 Lhotka, "YANG Data Model for IS-IS protocol", draft-ietf- 1719 isis-yang-isis-cfg-18 (work in progress), July 2017. 1721 [I-D.ietf-ospf-yang] 1722 Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, 1723 "Yang Data Model for OSPF Protocol", draft-ietf-ospf- 1724 yang-08 (work in progress), July 2017. 1726 [I-D.ietf-netmod-revised-datastores] 1727 Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1728 and R. Wilton, "Network Management Datastore 1729 Architecture", draft-ietf-netmod-revised-datastores-04 1730 (work in progress), August 2017. 1732 7.2. Informative References 1734 [RFC1724] Malkin, G. and F. Baker, "RIP Version 2 MIB Extension", 1735 RFC 1724, DOI 10.17487/RFC1724, November 1994, 1736 . 1738 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1739 Protocol (NETCONF) Access Control Model", RFC 6536, 1740 DOI 10.17487/RFC6536, March 2012, . 1743 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 1744 RFC 7951, DOI 10.17487/RFC7951, August 2016, 1745 . 1747 [I-D.ietf-netconf-rfc5277bis] 1748 Clemm, A., Prieto, A., Voit, E., Nilsen-Nygaard, E., 1749 Tripathy, A., Chisholm, S., and H. Trevino, "Subscribing 1750 to Event Notifications", draft-ietf-netconf-rfc5277bis-01 1751 (work in progress), October 2016. 1753 [I-D.ietf-netconf-yang-push] 1754 Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- 1755 Nygaard, E., Bierman, A., and B. Lengyel, "Subscribing to 1756 YANG datastore push updates", draft-ietf-netconf-yang- 1757 push-09 (work in progress), September 2017. 1759 [I-D.ietf-netmod-rfc6087bis] 1760 Bierman, A., "Guidelines for Authors and Reviewers of YANG 1761 Data Model Documents", draft-ietf-netmod-rfc6087bis-14 1762 (work in progress), September 2017. 1764 Appendix A. Data Tree Example 1766 This section contains an example of an instance data tree in the JSON 1767 encoding [RFC7951], containing both configuration and state data. 1769 +---------------------+ 1770 | | 1771 | Router 203.0.113.1 | 1772 | | 1773 +----------+----------+ 1774 |eth0 1775 |192.0.2.1 1776 | 1777 | 1778 |192.0.2.2 1779 +----------+----------+ 1780 | | 1781 | Another Router | 1782 | | 1783 +---------------------+ 1785 The configuration instance data tree for Router 203.0.113.1 in the 1786 above figure could be as follows: 1788 { 1789 "ietf-interfaces:interfaces": { 1790 "interface": [ 1791 { 1792 "name": "eth1", 1793 "description": "An interface with RIPv2 enabled.", 1794 "type": "iana-if-type:ethernetCsmacd", 1795 "ietf-ip:ipv4": { 1796 "address": [ 1797 { 1798 "ip": "192.0.2.1", 1799 "prefix-length": 24 1800 } 1801 ], 1802 "forwarding": true 1803 } 1804 } 1805 ] 1806 }, 1807 "ietf-routing-2:routing": { 1808 "router-id": "203.0.113.1", 1809 "control-plane-protocols": { 1810 "control-plane-protocol": [ 1811 { 1812 "type": "ietf-rip:ripv2", 1813 "name": "ripv2-1", 1814 "description": "RIPv2 instance ripv2-1.", 1815 "ietf-rip:rip": { 1816 "redistribute": { 1817 "connected": { 1818 } 1819 } 1820 "interfaces": { 1821 "interface": [ 1822 { 1823 "interface": "eth1", 1824 "split-horizon": "poison-reverse" 1825 } 1826 ] 1827 } 1828 } 1829 } 1830 ] 1831 } 1832 } 1833 } 1834 The cooresponding operational state data for Router 203.0.113.1 could 1835 be as follows: 1837 { 1838 "ietf-interfaces:interfaces": { 1839 "interface": [ 1840 { 1841 "name": "eth1", 1842 "description": "An interface with RIPv2 enabled.", 1843 "type": "iana-if-type:ethernetCsmacd", 1844 "phys-address": "00:0C:42:E5:B1:E9", 1845 "oper-status": "up", 1846 "statistics": { 1847 "discontinuity-time": "2016-10-24T17:11:27+02:00" 1848 }, 1849 "ietf-ip:ipv4": { 1850 "forwarding": true, 1851 "mtu": 1500, 1852 "address": [ 1853 { 1854 "ip": "192.0.2.1", 1855 "prefix-length": 24 1856 } 1857 ] 1858 } 1859 } 1860 ] 1861 }, 1862 "ietf-routing-2:routing": { 1863 "router-id": "203.0.113.1", 1864 "interfaces": { 1865 "interface": [ 1866 "eth1" 1867 ] 1868 }, 1869 "control-plane-protocols": { 1870 "control-plane-protocol": [ 1871 { 1872 "type": "ietf-rip:rip", 1873 "name": "ripv2-1" 1874 "ietf-rip:rip": { 1875 "default-metric": 1, 1876 "next-triggered-update": 5 1877 "interfaces": { 1878 "interface": [ 1879 { 1880 "interface": "eth1", 1881 "oper-status": "up", 1882 "cost": 1, 1883 "split-horizon": "poison-reverse", 1884 "valid-address": true 1885 } 1886 ] 1887 }, 1888 "ipv4" { 1889 "neighbors": { 1890 "neighbor": [ 1891 { 1892 "address": "192.0.2.2" 1893 } 1894 ] 1895 } 1896 "routes": { 1897 "route": [ 1898 { 1899 "ipv4-prefix": "192.0.2.1/24", 1900 "interface": "eth1", 1901 "redistributed": true, 1902 "route-type": "connected", 1903 "metric": 0, 1904 "expire-time": 22 1905 }, 1906 { 1907 "ipv4-prefix": "198.51.100.0/24", 1908 "next-hop": "192.0.2.2", 1909 "interface": "eth1", 1910 "redistributed": false, 1911 "route-type": "rip", 1912 "metric": 2, 1913 "expire-time": 82 1914 } 1915 ] 1916 } 1917 }, 1918 "statistics": { 1919 "discontinuity-time": "2016-10-24T17:11:27+02:00", 1920 "requests-rcvd": 523, 1921 "requests-sent": 262, 1922 "responses-rcvd": 261, 1923 "responses-sent": 523 1924 } 1925 } 1926 } 1927 ] 1928 } 1929 } 1931 } 1933 Appendix B. YANG Model for Non-NMDA Compliant Implementations 1935 The YANG data model defined so far in this document is designed to be 1936 used in conjunction with implementations that support the Network 1937 Management Datastore Architecture (NMDA) defined in 1938 [I-D.ietf-netmod-revised-datastores]. However, currently there are 1939 existing implementations that are not NMDA compliant. In order for 1940 such implementations to be used temporarily until NMDA 1941 implementations are available, this section describes the following 1942 non-NMDA version of the equivalent model. 1944 B.1. Non-NMDA YANG Module 1946 file "ietf-rip@2017-09-25.yang" 1947 module ietf-rip { 1948 yang-version 1.1; 1949 namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; 1951 prefix rip; 1953 import ietf-inet-types { 1954 prefix "inet"; 1955 } 1957 import ietf-yang-types { 1958 prefix "yang"; 1959 } 1961 import ietf-interfaces { 1962 prefix "if"; 1963 } 1965 import ietf-ip { 1966 prefix "ip"; 1967 } 1969 import ietf-routing { 1970 prefix "rt"; 1971 } 1973 import ietf-key-chain { 1974 prefix "key-chain"; 1975 } 1976 import ietf-ospf { 1977 prefix "ospf"; 1978 } 1980 import ietf-isis { 1981 prefix "isis"; 1982 } 1984 organization "IETF Routing Area Working Group (rtgwg)"; 1986 contact 1987 "WG Web: 1988 WG List: 1990 WG Chair: Jeff Tantsura 1991 1993 WG Chair: Chris Bowers 1994 1996 Editor: Xufeng Liu 1997 1999 Editor: Prateek Sarda 2000 2002 Editor: Vikram Choudhary 2003 "; 2005 description 2006 "This YANG module defines a model for managing Routing 2007 Information Protocol (RIP), including RIP version 2 and RIPng. 2009 Copyright (c) 2016 IETF Trust and the persons identified as 2010 authors of the code. All rights reserved. 2012 Redistribution and use in source and binary forms, with or 2013 without modification, is permitted pursuant to, and subject to 2014 the license terms contained in, the Simplified BSD License set 2015 forth in Section 4.c of the IETF Trust's Legal Provisions 2016 Relating to IETF Documents 2017 (http://trustee.ietf.org/license-info)."; 2019 revision 2017-09-25 { 2020 description 2021 "Initial revision."; 2022 reference 2023 "RFC 2453: RIP Version 2. 2025 RFC 2080: RIPng for IPv6. 2026 RFC 1724: RIP Version 2 MIB Extension."; 2027 } 2029 /* 2030 * Features 2031 */ 2032 feature bfd { 2033 description 2034 "This feature indicates that the RIP implementation on the 2035 system supports BFD (Bidirectional Forwarding Detection)."; 2036 } 2038 feature bfd-protocol-parameters { 2039 description 2040 "BFD (Bidirectional Forwarding Detection) protocol specific 2041 parameters support on a RIP interface."; 2042 } 2044 feature explicit-neighbors { 2045 description 2046 "This feature indicates that the system supports explicit 2047 neighbor configuration on a RIP interface."; 2048 } 2050 feature global-statistics { 2051 description 2052 "This feature indicates that the system supports collecting 2053 global statistic data related to RIP."; 2054 } 2056 feature interface-statistics { 2057 description 2058 "This feature indicates that the system supports collecting 2059 per-interface statistic data related to RIP."; 2060 } 2062 /* 2063 * Typedefs 2064 */ 2066 typedef prefix-set-ref { 2067 type string; 2068 description 2069 "A type for a reference to a prefix set. 2070 The string value is the name identifier for uniquely 2071 identifying the referenced prefix set, which contains a list 2072 of prefixes that a routing policy can applied. The definition 2073 of such a prefix set is outside the scope of this document."; 2074 } 2076 typedef route-policy-ref { 2077 type string; 2078 description 2079 "A type for a reference to a route policy. 2080 The string value is the name identifier for uniquely 2081 identifying the referenced routing policy, which contains one 2082 or more policy rules that can be used for a routing decision. 2083 The definition of such a routing policy is outside the scope 2084 of this document."; 2085 } 2087 /* 2088 * Identities 2089 */ 2091 identity rip { 2092 base rt:routing-protocol; 2093 description "Identity for the RIP routing protocol."; 2094 } 2096 identity ripv2 { 2097 base rip:rip; 2098 description "Identity for RIPv2 (RIP version 2)."; 2099 } 2101 identity ripng { 2102 base rip:rip; 2103 description "Identity for RIPng."; 2104 } 2106 /* 2107 * Groupings 2108 */ 2110 grouping originate-default-route-container { 2111 description 2112 "Containing settings whether to originate the default route 2113 in RIP routing instance."; 2114 container originate-default-route { 2115 description 2116 "Injects the default route into the RIP (RIPv2 or RIPng) 2117 routing instance."; 2118 leaf enabled { 2119 type boolean; 2120 default false; 2121 description 2122 "'true' if originating default route is enabled."; 2123 } 2124 leaf route-policy { 2125 type route-policy-ref; 2126 description 2127 "The conditions of the route policy are applied to the 2128 default route."; 2129 } 2130 } 2131 } 2133 grouping redistribute-container { 2134 description 2135 "Container of redistribute attributes."; 2137 container redistribute { 2138 description 2139 "Redistributes routes learned from other routing protocols 2140 into the RIP routing instance."; 2141 list bgp { 2142 key "asn"; 2143 description 2144 "Redistributes routes from the specified BGP (Border 2145 Gateway Protocol) autonomous system (AS) into the RIP 2146 routing instance."; 2147 leaf asn { 2148 type inet:as-number; 2149 description 2150 "BGP autonomous system (AS) number."; 2151 } 2152 uses redistribute-route-policy-attributes; 2153 } 2154 container cg-nat { 2155 presence 2156 "Present if Carrier Grade Network Address Translation 2157 (CGNAT) routes are redistributed."; 2158 description 2159 "Carrier Grade Network Address Translation (CGNAT) 2160 routes."; 2161 uses redistribute-route-policy-attributes; 2162 } 2163 container connected { 2164 presence 2165 "Present if directly attached network routes are 2166 redistributed."; 2167 description 2168 "Redistributes directly attached networks into the RIP 2169 routing instance."; 2170 uses redistribute-route-policy-attributes; 2171 } 2172 container ipsec { 2173 presence 2174 "Present if IP security routing instance routes 2175 are redistributed."; 2176 description 2177 "Redistributes routes from the IP security routing 2178 instance into the RIP routing instance."; 2179 uses redistribute-route-policy-attributes; 2180 } 2181 list isis { 2182 key "instance"; 2183 description 2184 "Redistributes IS-IS routes."; 2185 leaf instance { 2186 type leafref { 2187 path "../../../../../rt:control-plane-protocol/rt:name"; 2188 } 2189 must "derived-from-or-self(" 2190 + "../../../../../rt:control-plane-protocol" 2191 + "[rt:name = current()]/rt:type, 'isis:isis')" { 2192 description 2193 "The type of the routing protocol must be 'isis'"; 2194 } 2195 description 2196 "Redistributes routes from the specified IS-IS routing 2197 instance into the RIP routing instance."; 2198 } 2199 leaf level { 2200 type enumeration { 2201 enum 1 { 2202 description "IS-IS level 1 routes."; 2203 } 2204 enum 2 { 2205 description "IS-IS level 1 routes."; 2206 } 2207 enum 1-2 { 2208 description "IS-IS level 1-2 routes."; 2209 } 2210 } 2211 description 2212 "IS-IS level."; 2213 } 2214 uses redistribute-route-policy-attributes; 2215 } 2216 container nat { 2217 presence 2218 "Present if Network Address Translation (NAT) routes 2219 are redistributed."; 2220 description 2221 "Redistributes Network Address Translation (NAT) 2222 routes into the RIP routing instance."; 2223 uses redistribute-route-policy-attributes; 2224 } 2225 list ospfv2 { 2226 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 2227 description 2228 "Applicable to RIPv2."; 2229 } 2230 key "instance"; 2231 description 2232 "Redistributes routes from the specified OSPFv2 routing 2233 instance into the RIPv2 routing instance."; 2234 leaf instance { 2235 type leafref { 2236 path "../../../../../rt:control-plane-protocol/rt:name"; 2237 } 2238 must "derived-from-or-self(" 2239 + "../../../../../rt:control-plane-protocol" 2240 + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" { 2241 description 2242 "The type of the routing protocol must be 'ospfv2'"; 2243 } 2244 description 2245 "OSPFv2 instance ID. Redistributes routes from the 2246 specified OSPFv2 routing instance into the RIPv2 routing 2247 instance. "; 2248 } 2249 leaf route-type { 2250 type ospf:route-type; 2251 description 2252 "Redistributes only those OSPFv2 routes matching the 2253 specified route type into the RIPv2 routing instance."; 2254 } 2255 uses redistribute-route-policy-attributes; 2256 } 2257 list ospfv3 { 2258 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 2259 description 2260 "Applicable to RIPng."; 2261 } 2262 key "instance"; 2263 description 2264 "Redistributes routes from the specified OSPFv3 routing 2265 instance into the RIPng routing instance."; 2266 leaf instance { 2267 type leafref { 2268 path "../../../../../rt:control-plane-protocol/rt:name"; 2269 } 2270 must "derived-from-or-self(" 2271 + "../../../../../rt:control-plane-protocol" 2272 + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" { 2273 description 2274 "The type of the routing protocol must be 'ospfv3'"; 2275 } 2276 description 2277 "OSPFv3 instance ID. Redistributes routes from the 2278 specified OSPFv3 routing instance into the RIPng routing 2279 instance. "; 2280 } 2281 leaf route-type { 2282 type ospf:route-type; 2283 description 2284 "Redistributes only those OSPFv3 routes matching the 2285 specified route type into the RIPng routing instance."; 2286 } 2287 uses redistribute-route-policy-attributes; 2288 } 2289 list ripv2 { 2290 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 2291 description 2292 "Applicable to RIPv2."; 2293 } 2294 key "instance"; 2295 description 2296 "Redistributes routes from another RIPv2 routing instance 2297 into the current RIPv2 routing instance."; 2298 leaf instance { 2299 type leafref { 2300 path "../../../../../rt:control-plane-protocol/rt:name"; 2301 } 2302 must "derived-from-or-self(" 2303 + "../../../../../rt:control-plane-protocol" 2304 + "[rt:name = current()]/rt:type, 'rip:ripv2')" { 2305 description 2306 "The type of the routing protocol must be 'ripv2'"; 2307 } 2308 description 2309 "Redistributes routes from the specified RIPv2 routing 2310 instance into the RIPv2 routing instance."; 2311 } 2312 uses redistribute-route-policy-attributes; 2314 } 2315 list ripng { 2316 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 2317 description 2318 "Applicable to RIPng."; 2319 } 2320 key "instance"; 2321 description 2322 "Redistributes routes from another RIPng routing instance 2323 into the current RIPng routing instance."; 2324 leaf instance { 2325 type leafref { 2326 path "../../../../../rt:control-plane-protocol/rt:name"; 2327 } 2328 must "derived-from-or-self(" 2329 + "../../../../../rt:control-plane-protocol" 2330 + "[rt:name = current()]/rt:type, 'rip:ripng')" { 2331 description 2332 "The type of the routing protocol must be 'ripng'"; 2333 } 2334 description 2335 "Redistributes routes from the specified RIPng routing 2336 instance into the RIPng routing instance."; 2337 } 2338 uses redistribute-route-policy-attributes; 2339 } 2340 container static { 2341 presence "Present if redistributing static routes."; 2342 description 2343 "Redistributes static routes into the RIP routing 2344 instance."; 2345 uses redistribute-route-policy-attributes; 2346 } 2347 } // redistribute 2348 } // redistribute-container 2350 grouping redistribute-route-policy-attributes { 2351 description 2352 "Attributes for redistributing a route policy."; 2353 leaf metric { 2354 type uint8 { 2355 range 0..16; 2356 } 2357 description 2358 "Metric used for the redistributed route. If a metric is 2359 not specified, the metric configured with the 2360 default-metric attribute in RIP router configuration is 2361 used. If the default-metric attribute has not been 2362 configured, the default metric for redistributed routes 2363 is 0."; 2364 } 2365 leaf route-policy { 2366 type route-policy-ref; 2367 description 2368 "Applies the conditions of the specified route policy to 2369 routes that are redistributed into the RIP routing 2370 instance."; 2371 } 2372 } // redistribute-route-policy-attributes 2374 grouping timers-container { 2375 description 2376 "Container for settings of basic timers"; 2377 container timers { 2378 must "invalid-interval >= (update-interval * 3)" { 2379 description 2380 "invalid-interval must be at least three times the value 2381 for the update-interval argument."; 2382 } 2383 must "flush-interval > invalid-interval" { 2384 description 2385 "flush-interval must be larger than the value for the 2386 invalid-interval argument"; 2387 } 2388 description 2389 "Timers for the specified RIPv2 or RIPng instance or 2390 interface."; 2391 leaf update-interval { 2392 type uint16 { 2393 range 1..32767; 2394 } 2395 units seconds; 2396 default 30; 2397 description 2398 "Interval at which RIPv2 or RIPng updates are sent."; 2399 } 2400 leaf invalid-interval { 2401 type uint16 { 2402 range 1..32767; 2403 } 2404 units seconds; 2405 default 180; 2406 description 2407 "Interval before a route is declared invalid after no 2408 updates are received. This value is at least three times 2409 the value for the update-interval argument."; 2411 } 2412 leaf holddown-interval { 2413 type uint16 { 2414 range 1..32767; 2415 } 2416 units seconds; 2417 default 180; 2418 description 2419 "Interval before better routes are released."; 2420 } 2421 leaf flush-interval { 2422 type uint16 { 2423 range 1..32767; 2424 } 2425 units seconds; 2426 default 240; 2427 description 2428 "Interval before a route is flushed from the routing 2429 table. This value must be larger than the value for the 2430 invalid-interval argument."; 2431 } 2432 } // timers 2433 } 2435 grouping global-attributes { 2436 description 2437 "Global configuration and state attributes."; 2438 uses originate-default-route-container; 2440 leaf default-metric { 2441 type uint8 { 2442 range 0..16; 2443 } 2444 default 0; 2445 description 2446 "Set the default metric."; 2447 } 2449 leaf distance { 2450 type uint8 { 2451 range 1..255; 2452 } 2453 default 120; 2454 description 2455 "The administrative distance of the RIPv2 or RIPng for the 2456 current RIPv2 or RIPng instance."; 2457 } 2458 leaf triggered-update-threshold { 2459 type uint8 { 2460 range 1..30; 2461 } 2462 units seconds; 2463 default 5; 2464 description 2465 "This attribute is used to suppress triggered updates. 2466 When the arrival of a regularly scheduled update matches the 2467 number of seconds or is less than the number seconds 2468 configured with this attribute, the triggered update is 2469 suppressed."; 2470 } 2472 leaf maximum-paths { 2473 type uint8 { 2474 range 1..16; 2475 } 2476 default 8; 2477 description 2478 "The number of multiple equal-cost RIPv2 or RIPng routes 2479 that can be used as the best paths for balancing the load 2480 of outgoing traffic packets."; 2481 } 2483 leaf output-delay { 2484 type uint8 { 2485 range 1..50; 2486 } 2487 units milliseconds; 2488 description 2489 "A delay time between packets sent in multipacket 2490 RIPv2 or RIPng updates."; 2491 } 2492 } // global-attributes 2494 grouping distribute-lists { 2495 description 2496 "Grouping for distribute lists."; 2497 list distribute-list { 2498 key "prefix-set-name direction"; 2499 description 2500 "List of distribute-lists, which are used to filter in-coming 2501 or out-going routing updates."; 2503 leaf prefix-set-name { 2504 type prefix-set-ref; 2505 description 2506 "Reference to a prefix list to be applied to RIPv2 or 2507 RIPng packets."; 2508 } 2510 leaf direction { 2511 type enumeration { 2512 enum "in" { 2513 description 2514 "Apply the distribute-list to in-coming routes."; 2515 } 2516 enum "out" { 2517 description 2518 "Apply the distribute-list to out-going routes."; 2519 } 2520 } 2521 description 2522 "Direction of the routing updates."; 2523 } 2525 leaf if-name { 2526 type if:interface-ref; 2527 description 2528 "Reference to an interface to which the prefix list is 2529 applied."; 2530 } 2531 } 2532 } // distribute-lists 2534 grouping route-attributes { 2535 description 2536 "Grouping for route attributes."; 2537 leaf redistributed { 2538 type boolean; 2539 description 2540 "Redistributed routes"; 2541 } 2543 leaf route-type { 2544 type enumeration { 2545 enum connected { 2546 description "Connected route."; 2547 } 2548 enum external { 2549 description "External route."; 2550 } 2551 enum external-backup { 2552 description "External backup route."; 2553 } 2554 enum rip { 2555 description "RIP route."; 2556 } 2557 } 2558 description 2559 "Route type."; 2560 } 2561 leaf metric { 2562 type uint8 { 2563 range 0..16; 2564 } 2565 description "Route metric."; 2566 } 2567 leaf expire-time { 2568 type uint16; 2569 description "Expiration time."; 2570 } 2571 leaf deleted { 2572 type boolean; 2573 description "Deleted route."; 2574 } 2575 leaf holddown { 2576 type boolean; 2577 description "Holddown route."; 2578 } 2579 leaf need-triggered-update { 2580 type boolean; 2581 description "The route needs triggered update."; 2582 } 2583 leaf inactive { 2584 type boolean; 2585 description "The route is inactive."; 2586 } 2587 leaf flush-expire-before-holddown { 2588 type boolean; 2589 description 2590 "The flush timer expired before holddown time."; 2591 } 2592 } // route-attribute 2594 /* 2595 * Configuration data nodes 2596 */ 2598 augment "/rt:routing/rt:control-plane-protocols/" 2599 + "rt:control-plane-protocol" { 2600 when "derived-from(rt:type, 'rip:rip')" { 2601 description 2602 "This augment is only valid for a routing protocol instance 2603 of RIP (type 'ripv2' or 'ripng')."; 2604 } 2605 description "RIP augmentation."; 2607 container rip { 2608 description 2609 "RIP configuration data."; 2611 uses global-attributes; 2612 uses distribute-lists; 2613 uses redistribute-container; 2614 uses timers-container; 2616 container interfaces { 2617 description 2618 "Containing a list of RIP interfaces."; 2619 list interface { 2620 key "interface"; 2621 description 2622 "List of RIP interfaces."; 2623 leaf interface { 2624 type if:interface-ref; 2625 must "(derived-from-or-self(" 2626 + "../../../../rt:type, 'rip:ripv2') and " 2627 + "/if:interfaces/if:interface[if:name=current()]/" 2628 + "ip:ipv4) or " 2629 + "(derived-from-or-self(" 2630 + "../../../../rt:type, 'rip:ripng') and " 2631 + "/if:interfaces/if:interface[if:name=current()]/" 2632 + "ip:ipv6)" { 2633 error-message "Invalid interface type."; 2634 description 2635 "RIPv2 can be enabled on IPv4 interfae, and 2636 RIPng can be enabled on IPv6 interface."; 2637 } 2638 description 2639 "Enable RIP on this interface."; 2640 } 2642 container authentication { 2643 when "derived-from-or-self(" 2644 + "../../../../rt:type, 'rip:ripv2')" { 2645 description "Only applicable to RIPv2."; 2646 } 2647 description 2648 "Enables authentication and specifies the 2649 authentication scheme for the RIP interface"; 2651 choice auth-type-selection { 2652 description 2653 "Specify the authentication scheme."; 2654 reference 2655 "RFC8177: YANG Data Model for Key Chains."; 2656 case auth-key-chain { 2657 leaf key-chain { 2658 type key-chain:key-chain-ref; 2659 description 2660 "key-chain name."; 2661 } 2662 } 2663 case auth-key { 2664 leaf key { 2665 type string; 2666 description 2667 "Key string in ASCII format."; 2668 } 2669 leaf crypto-algorithm { 2670 type identityref { 2671 base key-chain:crypto-algorithm; 2672 } 2673 description 2674 "Cryptographic algorithm associated with key."; 2675 } 2676 } 2677 } 2678 } 2680 container bfd { 2681 if-feature bfd; 2682 description "BFD configuration."; 2683 leaf enabled { 2684 type boolean; 2685 default false; 2686 description 2687 "'true' if BFD is enabled for the interface."; 2688 } 2689 } 2691 leaf cost { 2692 type uint8 { 2693 range 1..16; 2694 } 2695 default 1; 2696 description 2697 "Interface cost."; 2698 } 2699 container neighbors { 2700 if-feature explicit-neighbors; 2701 description 2702 "Specifies the RIP neighbors. Useful for a 2703 non-broadcast multiple access (NBMA) network."; 2704 list neighbor { 2705 key "address"; 2706 description 2707 "Specify a RIP neighbor on a non-broadcast network."; 2708 leaf address { 2709 type inet:ip-address; 2710 description "Neighbor IP address."; 2711 } 2712 } 2713 } 2715 leaf no-listen { 2716 type empty; 2717 description 2718 "Disables listening to and processing of RIPv2 or RIPng 2719 packets on the specified interface."; 2720 } 2722 uses originate-default-route-container; 2724 leaf passive { 2725 type empty; 2726 description 2727 "Disables sending of RIPv2 or RIPng packets on the 2728 specified interface."; 2729 } 2731 leaf split-horizon { 2732 type enumeration { 2733 enum disabled { 2734 description 2735 "Disables split-horizon processing."; 2736 } 2737 enum simple { 2738 description 2739 "Enables simple split-horizon processing."; 2740 } 2741 enum poison-reverse { 2742 description 2743 "Enables split-horizon processing with poison 2744 reverse."; 2745 } 2746 } 2747 default simple; 2748 description 2749 "Controls RIPv2 or RIPng split-horizon processing on 2750 the specified interface."; 2751 } 2753 container summary-address { 2754 description 2755 "Summarizes information about RIPv2 or RIPng routes 2756 sent over the specified interface in RIPv2 or RIPng 2757 update packets."; 2758 leaf address { 2759 type inet:ip-prefix; 2760 description 2761 "IPv4 address, in the form A.B.C.D, and the prefix 2762 length, separated by the slash (/) character; 2763 or IPv6 address, in the form A:B:C:D:E:F:G:H, and 2764 the prefix length, separated by the slash (/) 2765 character."; 2766 } 2767 leaf metric { 2768 type uint8 { 2769 range 0..16; 2770 } 2771 description 2772 "Metric used for the route. If this attribute is not 2773 used, the value set through the default-metric 2774 attribute in RIPv2 or RIPng router configuration is 2775 used for the route. "; 2776 } 2777 } 2779 uses timers-container; 2780 } // interface 2781 } // interfaces 2782 } // container rip 2783 } 2785 /* 2786 * Operational state data nodes 2787 */ 2789 augment "/rt:routing-state/rt:control-plane-protocols/" 2790 + "rt:control-plane-protocol" { 2791 when "derived-from(rt:type, 'rip:rip')" { 2792 description 2793 "This augment is only valid for a routing protocol instance 2794 of type 'ripv2' or 'ripng'."; 2796 } 2797 description "RIP augmentation."; 2799 container rip { 2800 description "RIP operational state."; 2802 uses global-attributes; 2803 uses distribute-lists; 2805 leaf next-triggered-update { 2806 type uint32; 2807 description 2808 "Next triggered update."; 2809 } 2810 leaf num-of-routes { 2811 type uint32; 2812 description 2813 "The number of routes."; 2814 } 2816 uses timers-container; 2818 container interfaces { 2819 description 2820 "Containing a list of RIP interfaces."; 2821 list interface { 2822 key "interface"; 2823 description 2824 "List of RIP interfaces."; 2825 leaf interface { 2826 type if:interface-ref; 2827 description 2828 "Enable RIP on this interface."; 2829 } 2830 leaf oper-status { 2831 type enumeration { 2832 enum up { 2833 description 2834 "RIPv2 or RIPng is operational on this interface."; 2835 } 2836 enum down { 2837 description 2838 "RIPv2 or RIPng is not operational on this 2839 interface."; 2840 } 2841 } 2842 description 2843 "Operational state."; 2845 } 2846 leaf cost { 2847 type uint8 { 2848 range 1..16; 2849 } 2850 default 1; 2851 description 2852 "Interface cost."; 2853 } 2854 leaf next-full-update { 2855 type uint32; 2856 description 2857 "Next full update time."; 2858 } 2859 leaf no-listen { 2860 type empty; 2861 description 2862 "Listening to and processing of RIPv2 or RIPng packets 2863 are disabled on the specified interface."; 2864 } 2866 uses originate-default-route-container; 2868 leaf passive { 2869 type empty; 2870 description 2871 "Sending of RIPv2 or RIPng packets is disabled on the 2872 specified interface."; 2873 } 2874 leaf split-horizon { 2875 type enumeration { 2876 enum disabled { 2877 description 2878 "Split-horizon processing is disabled."; 2879 } 2880 enum simple { 2881 description 2882 "Simple split-horizon processing is enabled."; 2883 } 2884 enum poison-reverse { 2885 description 2886 "Split-horizon processing with poison reverse is 2887 enabled."; 2888 } 2889 } 2890 description 2891 "State of RIPv2 or RIPng split-horizon processing on 2892 the specified interface."; 2894 } 2895 leaf valid-address { 2896 type boolean; 2897 description 2898 "The interface has a valid address."; 2899 } 2900 uses timers-container; 2902 container statistics { 2903 if-feature interface-statistics; 2904 description 2905 "Interface statistic counters."; 2906 leaf discontinuity-time { 2907 type yang:date-and-time; 2908 description 2909 "The time on the most recent occasion at which any 2910 one or more of the statistic counters suffered a 2911 discontinuity. If no such discontinuities have 2912 occurred since the last re-initialization of the 2913 local management subsystem, then this node contains 2914 the time the local management subsystem 2915 re-initialized itself."; 2916 } 2917 leaf bad-packets-rcvd { 2918 type yang:counter32; 2919 description 2920 "The number of RIP invalid packets received by 2921 the RIP process which were subsequently discarded 2922 for any reason (e.g. a version 0 packet, or an 2923 unknown command type)."; 2924 } 2925 leaf bad-routes-rcvd { 2926 type yang:counter32; 2927 description 2928 "The number of routes, in valid RIP packets, 2929 which were ignored for any reason (e.g. unknown 2930 address family, or invalid metric)."; 2931 } 2932 leaf updates-sent { 2933 type yang:counter32; 2934 description 2935 "The number of triggered RIP updates actually 2936 sent on this interface. This explicitly does 2937 NOT include full updates sent containing new 2938 information."; 2939 } 2940 } 2941 } // interface 2943 } // interfaces 2945 container ipv4 { 2946 when "derived-from-or-self(../../rt:type, 'rip:ripv2')" { 2947 description 2948 "IPv4 address family is supported by RIPv2."; 2949 } 2950 description 2951 "IPv4 address family information."; 2952 container neighbors { 2953 description 2954 "IPv4 neighbor information."; 2955 list neighbor { 2956 key "ipv4-address"; 2957 description 2958 "A RIPv2 neighbor."; 2960 leaf ipv4-address { 2961 type inet:ipv4-address; 2962 description 2963 "IP address that a RIP neighbor is using as its 2964 source address."; 2965 } 2966 leaf last-update { 2967 type yang:date-and-time; 2968 description 2969 "The time when the most recent RIP update was 2970 received from this neighbor."; 2971 } 2972 leaf bad-packets-rcvd { 2973 type yang:counter32; 2974 description 2975 "The number of RIP invalid packets received from 2976 this neighbor which were subsequently discarded 2977 for any reason (e.g. a version 0 packet, or an 2978 unknown command type)."; 2979 } 2980 leaf bad-routes-rcvd { 2981 type yang:counter32; 2982 description 2983 "The number of routes received from this neighbor, 2984 in valid RIP packets, which were ignored for any 2985 reason (e.g. unknown address family, or invalid 2986 metric)."; 2987 } 2988 } // neighbor 2989 } // neighbors 2990 container routes { 2991 description 2992 "IPv4 route information."; 2993 list route { 2994 key "ipv4-prefix"; 2995 description 2996 "A RIPv2 IPv4 route."; 2998 leaf ipv4-prefix { 2999 type inet:ipv4-prefix; 3000 description 3001 "IP address (in the form A.B.C.D) and prefix length, 3002 separated by the slash (/) character. The range of 3003 values for the prefix-length is 0 to 32."; 3004 } 3005 leaf next-hop { 3006 type inet:ipv4-address; 3007 description 3008 "Next hop IPv4 address."; 3009 } 3010 leaf interface { 3011 type if:interface-ref; 3012 description 3013 "The interface that the route uses."; 3014 } 3015 uses route-attributes; 3016 } // route 3017 } // routes 3018 } // ipv4 3019 container ipv6 { 3020 when "derived-from-or-self(../../rt:type, 'rip:ripng')" { 3021 description 3022 "IPv6 address family is supported by RIPng."; 3023 } 3024 description 3025 "IPv6 address family information."; 3026 container neighbors { 3027 description 3028 "IPv6 neighbor information."; 3029 list neighbor { 3030 key "ipv6-address"; 3031 description 3032 "A RIPng neighbor."; 3034 leaf ipv6-address { 3035 type inet:ipv6-address; 3036 description 3037 "IP address that a RIP neighbor is using as its 3038 source address."; 3040 } 3041 leaf last-update { 3042 type yang:date-and-time; 3043 description 3044 "The time when the most recent RIP update was 3045 received from this neighbor."; 3046 } 3047 leaf bad-packets-rcvd { 3048 type yang:counter32; 3049 description 3050 "The number of RIP invalid packets received from 3051 this neighbor which were subsequently discarded 3052 for any reason (e.g. a version 0 packet, or an 3053 unknown command type)."; 3054 } 3055 leaf bad-routes-rcvd { 3056 type yang:counter32; 3057 description 3058 "The number of routes received from this neighbor, 3059 in valid RIP packets, which were ignored for any 3060 reason (e.g. unknown address family, or invalid 3061 metric)."; 3062 } 3063 } // neighbor 3064 } // neighbors 3065 container routes { 3066 description 3067 "IPv6 route information."; 3068 list route { 3069 key "ipv6-prefix"; 3070 description 3071 "A RIPng IPv6 route."; 3073 leaf ipv6-prefix { 3074 type inet:ipv6-prefix; 3075 description 3076 "IP address (in the canonical format defined in 3077 RFC5952) and prefix length, separated by the slash 3078 (/) character. The range of values for the 3079 prefix-length is 0 to 128."; 3080 } 3081 leaf next-hop { 3082 type inet:ipv6-address; 3083 description 3084 "Next hop IPv6 address."; 3085 } 3086 leaf interface { 3087 type if:interface-ref; 3088 description 3089 "The interface that the route uses."; 3090 } 3091 uses route-attributes; 3092 } // route 3093 } // routes 3094 } // ipv6 3096 container statistics { 3097 if-feature global-statistics; 3098 description 3099 "Global statistic counters."; 3100 leaf discontinuity-time { 3101 type yang:date-and-time; 3102 description 3103 "The time on the most recent occasion at which any one 3104 or more of the statistic counters suffered a 3105 discontinuity. If no such discontinuities have occurred 3106 since the last re-initialization of the local 3107 management subsystem, then this node contains the time 3108 the local management subsystem re-initialized itself."; 3109 } 3110 leaf requests-rcvd { 3111 type yang:counter32; 3112 description 3113 "The number of requests received by RIP."; 3114 } 3115 leaf requests-sent { 3116 type yang:counter32; 3117 description 3118 "The number of requests sent by RIP."; 3119 } 3120 leaf responses-rcvd { 3121 type yang:counter32; 3122 description 3123 "The number of responses received by RIP."; 3124 } 3125 leaf responses-sent { 3126 type yang:counter32; 3127 description 3128 "The number of responses sent by RIP."; 3129 } 3130 } 3131 } // rip 3132 } // augment 3134 /* 3135 * RPCs 3136 */ 3138 rpc clear-rip-route { 3139 description 3140 "Clears RIP routes from the IP routing table and routes 3141 redistributed into the RIP protocol for the specified RIP 3142 instance or for all RIP instances in the current context."; 3144 input { 3145 leaf rip-instance { 3146 type leafref { 3147 path "/rt:routing/rt:control-plane-protocols/" 3148 + "rt:control-plane-protocol/rt:name"; 3149 } 3150 description 3151 "Instance name identifying a specific RIP instance. 3152 This leaf is optional for the rpc. 3153 If it is specified, the rpc will clear all routes in the 3154 specified RIP instance; 3155 if it is not specified, the rpc will clear all routes in 3156 all RIP instances."; 3157 } 3158 } 3159 } // rcp clear-rip-route 3160 } 3161 3163 B.2. Non-NMDA Model Tree Structure 3165 module: ietf-rip 3166 augment /rt:routing/rt:control-plane-protocols 3167 /rt:control-plane-protocol: 3168 +--rw rip 3169 +--rw originate-default-route 3170 | +--rw enabled? boolean 3171 | +--rw route-policy? route-policy-ref 3172 +--rw default-metric? uint8 3173 +--rw distance? uint8 3174 +--rw triggered-update-threshold? uint8 3175 +--rw maximum-paths? uint8 3176 +--rw output-delay? uint8 3177 +--rw distribute-list* [prefix-set-name direction] 3178 | +--rw prefix-set-name prefix-set-ref 3179 | +--rw direction enumeration 3180 | +--rw if-name? if:interface-ref 3181 +--rw redistribute 3182 | +--rw bgp* [asn] 3183 | | +--rw asn inet:as-number 3184 | | +--rw metric? uint8 3185 | | +--rw route-policy? route-policy-ref 3186 | +--rw cg-nat! 3187 | | +--rw metric? uint8 3188 | | +--rw route-policy? route-policy-ref 3189 | +--rw connected! 3190 | | +--rw metric? uint8 3191 | | +--rw route-policy? route-policy-ref 3192 | +--rw ipsec! 3193 | | +--rw metric? uint8 3194 | | +--rw route-policy? route-policy-ref 3195 | +--rw isis* [instance] 3196 | | +--rw instance -> ../../../../.. 3197 /rt:control-plane-protocol/name 3198 | | +--rw level? enumeration 3199 | | +--rw metric? uint8 3200 | | +--rw route-policy? route-policy-ref 3201 | +--rw nat! 3202 | | +--rw metric? uint8 3203 | | +--rw route-policy? route-policy-ref 3204 | +--rw ospfv2* [instance] 3205 | | +--rw instance -> ../../../../.. 3206 /rt:control-plane-protocol/name 3207 | | +--rw route-type? ospf:route-type 3208 | | +--rw metric? uint8 3209 | | +--rw route-policy? route-policy-ref 3210 | +--rw ospfv3* [instance] 3211 | | +--rw instance -> ../../../../.. 3212 /rt:control-plane-protocol/name 3213 | | +--rw route-type? ospf:route-type 3214 | | +--rw metric? uint8 3215 | | +--rw route-policy? route-policy-ref 3216 | +--rw ripv2* [instance] 3217 | | +--rw instance -> ../../../../.. 3218 /rt:control-plane-protocol/name 3219 | | +--rw metric? uint8 3220 | | +--rw route-policy? route-policy-ref 3221 | +--rw ripng* [instance] 3222 | | +--rw instance -> ../../../../.. 3223 /rt:control-plane-protocol/name 3224 | | +--rw metric? uint8 3225 | | +--rw route-policy? route-policy-ref 3226 | +--rw static! 3227 | +--rw metric? uint8 3228 | +--rw route-policy? route-policy-ref 3229 +--rw timers 3230 | +--rw update-interval? uint16 3231 | +--rw invalid-interval? uint16 3232 | +--rw holddown-interval? uint16 3233 | +--rw flush-interval? uint16 3234 +--rw interfaces 3235 +--rw interface* [interface] 3236 +--rw interface if:interface-ref 3237 +--rw authentication 3238 | +--rw (auth-type-selection)? 3239 | +--:(auth-key-chain) 3240 | | +--rw key-chain? 3241 key-chain:key-chain-ref 3242 | +--:(auth-key) 3243 | +--rw key? string 3244 | +--rw crypto-algorithm? identityref 3245 +--rw bfd {bfd}? 3246 | +--rw enabled? boolean 3247 +--rw cost? uint8 3248 +--rw neighbors {explicit-neighbors}? 3249 | +--rw neighbor* [address] 3250 | +--rw address inet:ip-address 3251 +--rw no-listen? empty 3252 +--rw originate-default-route 3253 | +--rw enabled? boolean 3254 | +--rw route-policy? route-policy-ref 3255 +--rw passive? empty 3256 +--rw split-horizon? enumeration 3257 +--rw summary-address 3258 | +--rw address? inet:ip-prefix 3259 | +--rw metric? uint8 3260 +--rw timers 3261 +--rw update-interval? uint16 3262 +--rw invalid-interval? uint16 3263 +--rw holddown-interval? uint16 3264 +--rw flush-interval? uint16 3265 augment /rt:routing-state/rt:control-plane-protocols 3266 /rt:control-plane-protocol: 3267 +--ro rip 3268 +--ro originate-default-route 3269 | +--ro enabled? boolean 3270 | +--ro route-policy? route-policy-ref 3271 +--ro default-metric? uint8 3272 +--ro distance? uint8 3273 +--ro triggered-update-threshold? uint8 3274 +--ro maximum-paths? uint8 3275 +--ro output-delay? uint8 3276 +--ro distribute-list* [prefix-set-name direction] 3277 | +--ro prefix-set-name prefix-set-ref 3278 | +--ro direction enumeration 3279 | +--ro if-name? if:interface-ref 3280 +--ro next-triggered-update? uint32 3281 +--ro num-of-routes? uint32 3282 +--ro timers 3283 | +--ro update-interval? uint16 3284 | +--ro invalid-interval? uint16 3285 | +--ro holddown-interval? uint16 3286 | +--ro flush-interval? uint16 3287 +--ro interfaces 3288 | +--ro interface* [interface] 3289 | +--ro interface if:interface-ref 3290 | +--ro oper-status? enumeration 3291 | +--ro cost? uint8 3292 | +--ro next-full-update? uint32 3293 | +--ro no-listen? empty 3294 | +--ro originate-default-route 3295 | | +--ro enabled? boolean 3296 | | +--ro route-policy? route-policy-ref 3297 | +--ro passive? empty 3298 | +--ro split-horizon? enumeration 3299 | +--ro valid-address? boolean 3300 | +--ro timers 3301 | | +--ro update-interval? uint16 3302 | | +--ro invalid-interval? uint16 3303 | | +--ro holddown-interval? uint16 3304 | | +--ro flush-interval? uint16 3305 | +--ro statistics {interface-statistics}? 3306 | +--ro discontinuity-time? yang:date-and-time 3307 | +--ro bad-packets-rcvd? yang:counter32 3308 | +--ro bad-routes-rcvd? yang:counter32 3309 | +--ro updates-sent? yang:counter32 3310 +--ro ipv4 3311 | +--ro neighbors 3312 | | +--ro neighbor* [ipv4-address] 3313 | | +--ro ipv4-address inet:ipv4-address 3314 | | +--ro last-update? yang:date-and-time 3315 | | +--ro bad-packets-rcvd? yang:counter32 3316 | | +--ro bad-routes-rcvd? yang:counter32 3317 | +--ro routes 3318 | +--ro route* [ipv4-prefix] 3319 | +--ro ipv4-prefix 3320 inet:ipv4-prefix 3321 | +--ro next-hop? 3322 inet:ipv4-address 3323 | +--ro interface? 3324 if:interface-ref 3325 | +--ro redistributed? boolean 3326 | +--ro route-type? enumeration 3327 | +--ro metric? uint8 3328 | +--ro expire-time? uint16 3329 | +--ro deleted? boolean 3330 | +--ro holddown? boolean 3331 | +--ro need-triggered-update? boolean 3332 | +--ro inactive? boolean 3333 | +--ro flush-expire-before-holddown? boolean 3334 +--ro ipv6 3335 | +--ro neighbors 3336 | | +--ro neighbor* [ipv6-address] 3337 | | +--ro ipv6-address inet:ipv6-address 3338 | | +--ro last-update? yang:date-and-time 3339 | | +--ro bad-packets-rcvd? yang:counter32 3340 | | +--ro bad-routes-rcvd? yang:counter32 3341 | +--ro routes 3342 | +--ro route* [ipv6-prefix] 3343 | +--ro ipv6-prefix 3344 inet:ipv6-prefix 3345 | +--ro next-hop? 3346 inet:ipv6-address 3347 | +--ro interface? 3348 if:interface-ref 3349 | +--ro redistributed? boolean 3350 | +--ro route-type? enumeration 3351 | +--ro metric? uint8 3352 | +--ro expire-time? uint16 3353 | +--ro deleted? boolean 3354 | +--ro holddown? boolean 3355 | +--ro need-triggered-update? boolean 3356 | +--ro inactive? boolean 3357 | +--ro flush-expire-before-holddown? boolean 3358 +--ro statistics {global-statistics}? 3359 +--ro discontinuity-time? yang:date-and-time 3360 +--ro requests-rcvd? yang:counter32 3361 +--ro requests-sent? yang:counter32 3362 +--ro responses-rcvd? yang:counter32 3363 +--ro responses-sent? yang:counter32 3365 rpcs: 3366 +---x clear-rip-route 3367 +---w input 3368 +---w rip-instance? -> /rt:routing 3369 /control-plane-protocols/control-plane-protocol/name 3371 Authors' Addresses 3373 Xufeng Liu 3374 Jabil 3375 8281 Greensboro Drive, Suite 200 3376 McLean VA 22102 3377 USA 3379 EMail: Xufeng_Liu@jabil.com 3381 Prateek Sarda 3382 Ericsson 3383 Fern Icon, Survey No 28 and 36/5, Doddanakundi Village 3384 Bangalore Karnataka 560037 3385 India 3387 EMail: prateek.sarda@ericsson.com 3389 Vikram Choudhary 3390 Individual 3391 Bangalore 560066 3392 India 3394 EMail: vikschw@gmail.com