idnits 2.17.1 draft-ietf-rtgwg-yang-rip-04.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 203 has weird spacing: '...address ine...' == Line 297 has weird spacing: '...et-name pre...' == Line 365 has weird spacing: '...nterval uin...' == Line 371 has weird spacing: '...address ine...' == Line 396 has weird spacing: '...et-name pre...' -- The document date (June 6, 2017) is 2516 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) ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) ** Obsolete normative reference: RFC 7277 (Obsoleted by RFC 8344) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) == Outdated reference: A later version (-42) exists of draft-ietf-isis-yang-isis-cfg-17 == Outdated reference: A later version (-17) exists of draft-ietf-bfd-yang-05 == Outdated reference: A later version (-25) exists of draft-ietf-netconf-yang-push-06 -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-29) exists of draft-ietf-ospf-yang-07 Summary: 3 errors (**), 0 flaws (~~), 10 warnings (==), 2 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: December 8, 2017 Ericsson 6 V. Choudhary 7 Huawei Technologies 8 June 6, 2017 10 A YANG Data Model for Routing Information Protocol (RIP) 11 draft-ietf-rtgwg-yang-rip-04 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 December 8, 2017. 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 . . . . . . . . . . . . . . . . . . . . . 6 62 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 6 63 2.7. Optional Features . . . . . . . . . . . . . . . . . . . . 7 64 3. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 7 65 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 11 66 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 67 6. Security Considerations . . . . . . . . . . . . . . . . . . . 37 68 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 69 7.1. Normative References . . . . . . . . . . . . . . . . . . 37 70 7.2. Informative References . . . . . . . . . . . . . . . . . 39 71 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 40 72 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 74 1. Introduction 76 This document introduces a YANG [RFC7950] data model for the Routing 77 Information Protocol (RIP) [RFC2453][RFC2080]. RIP was designed to 78 work as an Interior Gateway Protocol (IGP) in moderate-size 79 Autonomous Systems (AS). 81 This YANG model supports both RIP version 2 and RIPng. RIP version 2 82 (defined in [RFC2453]) supports IPv4. RIPng (defined in [RFC2080]) 83 supports IPv6. 85 1.1. Terminology 87 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 88 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 89 document are to be interpreted as described in [RFC2119]. 91 The following terms are defined in [RFC7950] and are not redefined 92 here: 94 o augment 96 o data model 97 o data node 99 1.2. Tree Diagrams 101 A simplified graphical representation of the data model is used in 102 this document. The meaning of the symbols in these diagrams is as 103 follows: 105 o Brackets "[" and "]" enclose list keys. 107 o Curly braces "{" and "}" contain names of optional features that 108 make the corresponding node conditional. 110 o Abbreviations before data node names: "rw" means configuration 111 (read-write), and "ro" means state data (read-only). 113 o Symbols after data node names: "?" means an optional node, "!" 114 means a presence container, and "*" denotes a list and leaf-list. 116 o Parentheses enclose choice and case nodes, and case nodes are also 117 marked with a colon (":"). 119 o Ellipsis ("...") stands for contents of subtrees that are not 120 shown. 122 1.3. Prefixes in Data Node Names 124 In this document, names of data nodes, actions, and other data model 125 objects are often used without a prefix, as long as it is clear from 126 the context in which YANG module each name is defined. Otherwise, 127 names are prefixed using the standard prefix associated with the 128 corresponding YANG module, as shown in Table 1. 130 +-----------+-----------------+---------------------------------+ 131 | Prefix | YANG module | Reference | 132 +-----------+-----------------+---------------------------------+ 133 | yang | ietf-yang-types | [RFC6991] | 134 | inet | ietf-inet-types | [RFC6991] | 135 | if | ietf-interfaces | [RFC7223] | 136 | ip | ietf-ip | [RFC7277] | 137 | rt | ietf-routing | [RFC8022] | 138 | bfd | ietf-bfd | [I-D.ietf-bfd-yang] | 139 | isis | ietf-isis | [I-D.ietf-isis-yang-isis-cfg] | 140 | key-chain | ietf-key-chain | [I-D.ietf-rtgwg-yang-key-chain] | 141 | ospf | ietf-ospf | [I-D.ietf-ospf-yang] | 142 +-----------+-----------------+---------------------------------+ 144 Table 1: Prefixes and Corresponding YANG Modules 146 2. Design of the Data Model 148 2.1. Scope of the Model 150 The model covers RIP version 2 [RFC2453] and RIPng [RFC2080] 151 protocols. The model is designed to be implemented on a device where 152 RIP version 2 or RIPng is implemented, and can be used to: 154 o Configure the RIP version 2 or RIPng protocol. 156 o Manage the protocol operational behaviors. 158 o Retrieve the protocol operational status. 160 The capabilities describe in [RFC1724] are covered. 162 2.2. Relation with Core Routing Framework 164 This model augments the core routing data model "ietf-routing" 165 specified in [RFC8022]. 167 +--rw routing 168 +--rw router-id? 169 +--rw control-plane-protocols 170 | +--rw control-plane-protocol* [type name] 171 | +--rw type 172 | +--rw name 173 | +--rw rip <= Augmented by this Model 174 ... 176 +--ro routing-state 177 +--ro router-id? 178 +--ro control-plane-protocols 179 | +--ro control-plane-protocol* [type name] 180 | +--ro type 181 | +--ro name 182 | +--ro rip <= Augmented by this Model 183 ... 185 The "rip" container instantiates a RIP protocol entity that supports 186 RIP version 2 or RIPng. Depending on the implementation of "ietf- 187 routing", a RIP instance MAY belong to a logical router or network 188 instance. 190 2.3. Protocol Configuration 192 The model structure for the protocol configuration is as shown below: 194 augment /rt:routing/rt:control-plane-protocols/ 195 rt:control-plane-protocol: 196 +--rw rip 197 +--rw 198 +--rw interface* [interface] 199 +--rw interface if:interface-ref 200 +--rw 201 +--rw neighbors {explicit-neighbors}? 202 | +--rw neighbor* [address] 203 | +--rw address inet:ip-address 204 | +--rw 206 The model allows to configure the following protocol entities: 208 o Protocol instance (RIP version 2 or RIPng) 210 o Interface 212 o Neighbor 214 2.4. Protocol States 216 The model structure for the protocol states is as shown below: 218 augment /rt:routing-state/rt:control-plane-protocols/ 219 rt:control-plane-protocol: 220 +--ro rip 221 +--ro 222 +--ro interface* [interface] 223 | +--ro interface if:interface-ref 224 | +--ro 225 | +--ro statistics {interface-statistics}? 226 | +--ro 227 +--ro ipv4 228 | +--ro neighbors 229 | | +--ro neighbor* [ipv4-address] 230 | | +--ro 231 | +--ro routes 232 | +--ro route* [ipv4-prefix] 233 | +--ro 234 +--ro ipv6 235 | +--ro neighbors 236 | | +--ro neighbor* [ipv6-address] 237 | | +--ro 238 | +--ro routes 239 | +--ro route* [ipv6-prefix] 240 | +--ro ipv6-prefix inet:ipv6-prefix 241 | +--ro 242 +--ro statistics {global-statistics}? 243 +--ro 245 The model allows to retrieve protocol states at the following levels: 247 o Protocol instance (RIP version 2 or RIPng) 249 o Interface 251 o Neighbor 253 o Route 255 2.5. RPC Operations 257 This model defines one RPC "clear-rip-route" that can be used to 258 clear RIP routes from the routing table. 260 2.6. Notifications 262 This model does not define RIP specific notifications. To enable 263 notifications, the mechanism defined in [I-D.ietf-netconf-yang-push] 264 and [I-D.ietf-netconf-rfc5277bis] can be used. This mechanism 265 currently allows the user to: 267 o Subscribe notifications on a per client basis. 269 o Specify subtree filters or xpath filters so that only interested 270 contents will be sent. 272 o Specify either periodic or on-demand notifications. 274 2.7. Optional Features 276 This model defines several features are beyond the basic RIP 277 configuration and it is the responsibility of each vendor to decide 278 whether to support a given feature on a device. 280 3. Tree Structure 282 This document defines the YANG module "ietf-rip", which has the 283 following tree structure: 285 module: ietf-rip 286 augment /rt:routing/rt:control-plane-protocols 287 /rt:control-plane-protocol: 288 +--rw rip 289 +--rw originate-default-route! 290 | +--rw route-policy? route-policy-ref 291 +--rw default-metric? uint8 292 +--rw distance? uint8 293 +--rw triggered-update-threshold? uint8 294 +--rw maximum-paths? uint8 295 +--rw output-delay? uint8 296 +--rw distribute-list* [prefix-set-name direction] 297 | +--rw prefix-set-name prefix-set-ref 298 | +--rw direction enumeration 299 | +--rw if-name? if:interface-ref 300 +--rw redistribute 301 | +--rw bgp* [asn] 302 | | +--rw asn inet:as-number 303 | | +--rw metric? uint8 304 | | +--rw route-policy? route-policy-ref 305 | +--rw cg-nat! 306 | | +--rw metric? uint8 307 | | +--rw route-policy? route-policy-ref 308 | +--rw connected! 309 | | +--rw metric? uint8 310 | | +--rw route-policy? route-policy-ref 311 | +--rw ipsec! 312 | | +--rw metric? uint8 313 | | +--rw route-policy? route-policy-ref 314 | +--rw isis* [instance] 315 | | +--rw instance leafref 316 | | +--rw level? enumeration 317 | | +--rw metric? uint8 318 | | +--rw route-policy? route-policy-ref 319 | +--rw nat! 320 | | +--rw metric? uint8 321 | | +--rw route-policy? route-policy-ref 322 | +--rw ospfv2* [instance] 323 | | +--rw instance leafref 324 | | +--rw route-type? ospf:route-type 325 | | +--rw metric? uint8 326 | | +--rw route-policy? route-policy-ref 327 | +--rw ospfv3* [instance] 328 | | +--rw instance leafref 329 | | +--rw route-type? ospf:route-type 330 | | +--rw metric? uint8 331 | | +--rw route-policy? route-policy-ref 332 | +--rw ripv2* [instance] 333 | | +--rw instance leafref 334 | | +--rw metric? uint8 335 | | +--rw route-policy? route-policy-ref 336 | +--rw ripng* [instance] 337 | | +--rw instance leafref 338 | | +--rw metric? uint8 339 | | +--rw route-policy? route-policy-ref 340 | +--rw static! 341 | +--rw metric? uint8 342 | +--rw route-policy? route-policy-ref 343 +--rw timers 344 | +--rw update-interval? uint16 345 | +--rw invalid-interval? uint16 346 | +--rw holddown-interval? uint16 347 | +--rw flush-interval? uint16 348 +--rw interfaces 349 +--rw interface* [interface] 350 +--rw interface if:interface-ref 351 +--rw authentication 352 | +--rw (auth-type-selection)? 353 | +--:(auth-key-chain) 354 | | +--rw key-chain? 355 key-chain:key-chain-ref 356 | +--:(auth-key) 357 | +--rw key? string 358 | +--rw crypto-algorithm? identityref 359 +--rw bfd {bfd}? 360 | +--rw enabled? boolean 361 | +--rw local-multiplier? bfd-multiplier 362 | +--rw (interval-config-type)? 363 | +--:(tx-rx-intervals) 364 | | +--rw desired-min-tx-interval uint32 365 | | +--rw required-min-rx-interval uint32 366 | +--:(single-interval) 367 | +--rw min-interval uint32 368 +--rw cost? uint8 369 +--rw neighbors {explicit-neighbors}? 370 | +--rw neighbor* [address] 371 | +--rw address inet:ip-address 372 +--rw no-listen? empty 373 +--rw originate-default-route! 374 | +--rw route-policy? route-policy-ref 375 +--rw passive? empty 376 +--rw split-horizon? enumeration 377 +--rw summary-address 378 | +--rw address? inet:ip-prefix 379 | +--rw metric? uint8 380 +--rw timers 381 +--rw update-interval? uint16 382 +--rw invalid-interval? uint16 383 +--rw holddown-interval? uint16 384 +--rw flush-interval? uint16 385 augment /rt:routing-state/rt:control-plane-protocols 386 /rt:control-plane-protocol: 387 +--ro rip 388 +--ro originate-default-route! 389 | +--ro route-policy? route-policy-ref 390 +--ro default-metric? uint8 391 +--ro distance? uint8 392 +--ro triggered-update-threshold? uint8 393 +--ro maximum-paths? uint8 394 +--ro output-delay? uint8 395 +--ro distribute-list* [prefix-set-name direction] 396 | +--ro prefix-set-name prefix-set-ref 397 | +--ro direction enumeration 398 | +--ro if-name? if:interface-ref 399 +--ro next-triggered-update? uint32 400 +--ro num-of-routes? uint32 401 +--ro timers 402 | +--ro update-interval? uint16 403 | +--ro invalid-interval? uint16 404 | +--ro holddown-interval? uint16 405 | +--ro flush-interval? uint16 406 +--ro interfaces 407 | +--ro interface* [interface] 408 | +--ro interface if:interface-ref 409 | +--ro oper-status? enumeration 410 | +--ro cost? uint8 411 | +--ro listen? boolean 412 | +--ro next-full-update? uint32 413 | +--ro originate-default-route? boolean 414 | +--ro passive? boolean 415 | +--ro poison-reverse? boolean 416 | +--ro split-horizon? boolean 417 | +--ro valid-address? boolean 418 | +--ro timers 419 | | +--ro update-interval? uint16 420 | | +--ro invalid-interval? uint16 421 | | +--ro holddown-interval? uint16 422 | | +--ro flush-interval? uint16 423 | +--ro statistics {interface-statistics}? 424 | +--ro discontinuity-time? yang:date-and-time 425 | +--ro bad-packets-rcvd? yang:counter32 426 | +--ro bad-routes-rcvd? yang:counter32 427 | +--ro updates-sent? yang:counter32 428 +--ro ipv4 429 | +--ro neighbors 430 | | +--ro neighbor* [ipv4-address] 431 | | +--ro ipv4-address inet:ipv4-address 432 | | +--ro last-update? yang:date-and-time 433 | | +--ro bad-packets-rcvd? yang:counter32 434 | | +--ro bad-routes-rcvd? yang:counter32 435 | +--ro routes 436 | +--ro route* [ipv4-prefix] 437 | +--ro ipv4-prefix inet:ipv4-prefix 438 | +--ro next-hop? 439 inet:ipv4-address 440 | +--ro interface? if:interface-ref 441 | +--ro redistributed? boolean 442 | +--ro route-type? enumeration 443 | +--ro metric? uint8 444 | +--ro expire-time? uint16 445 | +--ro deleted? boolean 446 | +--ro holddown? boolean 447 | +--ro need-triggered-update? boolean 448 | +--ro inactive? boolean 449 | +--ro flush-expire-before-holddown? boolean 450 +--ro ipv6 451 | +--ro neighbors 452 | | +--ro neighbor* [ipv6-address] 453 | | +--ro ipv6-address inet:ipv6-address 454 | | +--ro last-update? yang:date-and-time 455 | | +--ro bad-packets-rcvd? yang:counter32 456 | | +--ro bad-routes-rcvd? yang:counter32 457 | +--ro routes 458 | +--ro route* [ipv6-prefix] 459 | +--ro ipv6-prefix inet:ipv6-prefix 460 | +--ro next-hop? 461 inet:ipv6-address 462 | +--ro interface? if:interface-ref 463 | +--ro redistributed? boolean 464 | +--ro route-type? enumeration 465 | +--ro metric? uint8 466 | +--ro expire-time? uint16 467 | +--ro deleted? boolean 468 | +--ro holddown? boolean 469 | +--ro need-triggered-update? boolean 470 | +--ro inactive? boolean 471 | +--ro flush-expire-before-holddown? boolean 472 +--ro statistics {global-statistics}? 473 +--ro discontinuity-time? yang:date-and-time 474 +--ro requests-rcvd? yang:counter32 475 +--ro requests-sent? yang:counter32 476 +--ro responses-rcvd? yang:counter32 477 +--ro responses-sent? yang:counter32 478 rpcs: 479 +---x clear-rip-route 480 +---w input 481 +---w rip-instance? leafref 483 4. YANG Module 485 file "ietf-rip@2017-06-05.yang" 486 module ietf-rip { 487 yang-version 1.1; 488 namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; 490 prefix rip; 492 import ietf-inet-types { 493 prefix "inet"; 494 } 496 import ietf-yang-types { 497 prefix "yang"; 498 } 500 import ietf-interfaces { 501 prefix "if"; 503 } 505 import ietf-ip { 506 prefix "ip"; 507 } 509 import ietf-routing { 510 prefix "rt"; 511 } 513 import ietf-key-chain { 514 prefix "key-chain"; 515 } 517 import ietf-bfd { 518 prefix "bfd"; 519 } 521 import ietf-ospf { 522 prefix "ospf"; 523 } 525 import ietf-isis { 526 prefix "isis"; 527 } 529 organization "IETF Routing Area Working Group (rtgwg)"; 531 contact 532 "WG Web: 533 WG List: 535 WG Chair: Jeff Tantsura 536 538 WG Chair: Chris Bowers 539 541 Editor: Xufeng Liu 542 544 Editor: Prateek Sarda 545 547 Editor: Vikram Choudhary 548 "; 550 description 551 "This YANG module defines a model for managing Routing 552 Information Protocol (RIP), including RIP version 2 and RIPng. 554 Copyright (c) 2016 IETF Trust and the persons identified as 555 authors of the code. All rights reserved. 557 Redistribution and use in source and binary forms, with or 558 without modification, is permitted pursuant to, and subject to 559 the license terms contained in, the Simplified BSD License set 560 forth in Section 4.c of the IETF Trust's Legal Provisions 561 Relating to IETF Documents 562 (http://trustee.ietf.org/license-info)."; 564 revision 2017-06-05 { 565 description 566 "Initial revision."; 567 reference 568 "RFC 2453: RIP Version 2. 569 RFC 2080: RIPng for IPv6. 570 RFC 1724: RIP Version 2 MIB Extension."; 571 } 573 /* 574 * Features 575 */ 576 feature bfd { 577 description 578 "This feature indicates that the RIP implementation on the 579 system supports BFD (Bidirectional Forwarding Detection)."; 580 } 582 feature bfd-protocol-parameters { 583 description 584 "BFD (Bidirectional Forwarding Detection) protocol specific 585 parameters support on a RIP interface."; 586 } 588 feature explicit-neighbors { 589 description 590 "This feature indicates that the system supports explicit 591 neighbor configuration on a RIP interface."; 592 } 594 feature global-statistics { 595 description 596 "This feature indicates that the system supports collecting 597 global statistic data related to RIP."; 598 } 599 feature interface-statistics { 600 description 601 "This feature indicates that the system supports collecting 602 per-interface statistic data related to RIP."; 603 } 605 /* 606 * Typedefs 607 */ 609 typedef prefix-set-ref { 610 type string; 611 description 612 "A type for a reference to a prefix list."; 613 } 615 typedef route-policy-ref { 616 type string; 617 description 618 "A type for a reference to a route policy."; 619 } 621 /* 622 * Identities 623 */ 625 identity rip { 626 base "rt:routing-protocol"; 627 description "Identity for the RIP routing protocol."; 628 } 630 identity ripv2 { 631 base "rip:rip"; 632 description "Identity for RIPv2 (RIP version 2)."; 633 } 635 identity ripng { 636 base "rip:rip"; 637 description "Identity for RIPng."; 638 } 640 /* 641 * Groupings 642 */ 644 grouping originate-default-route-container { 645 description 646 "Containing settings whether to originate the default route 647 in RIP routing instance."; 648 container originate-default-route { 649 presence "Present if originating default route is enabled."; 650 description 651 "Injects the default route into the RIP (RIPv2 or RIPng) 652 routing instance."; 653 leaf route-policy { 654 type route-policy-ref; 655 description 656 "The conditions of the route policy are applied to the 657 default route."; 658 } 659 } 660 } 662 grouping redistribute-container { 663 description 664 "Container of redistribute attributes."; 666 container redistribute { 667 description 668 "Redistributes routes learned from other routing protocols 669 into the RIP routing instance."; 670 list bgp { 671 key "asn"; 672 description 673 "Redistributes routes from the specified BGP (Border 674 Gateway Protocol) autonomous system (AS) into the RIP 675 routing instance."; 676 leaf asn { 677 type inet:as-number; 678 description 679 "BGP autonomous system (AS) number."; 680 } 681 uses redistribute-route-policy-attributes; 682 } 683 container cg-nat { 684 presence 685 "Present if Carrier Grade Network Address Translation 686 (CGNAT) routes are redistributed."; 687 description 688 "Carrier Grade Network Address Translation (CGNAT) 689 routes."; 690 uses redistribute-route-policy-attributes; 691 } 692 container connected { 693 presence 694 "Present if directly attached network routes are 695 redistributed."; 696 description 697 "Redistributes directly attached networks into the RIP 698 routing instance."; 699 uses redistribute-route-policy-attributes; 700 } 701 container ipsec { 702 presence 703 "Present if IP security routing instance routes 704 are redistributed."; 705 description 706 "Redistributes routes from the IP security routing 707 instance into the RIP routing instance."; 708 uses redistribute-route-policy-attributes; 709 } 710 list isis { 711 key "instance"; 712 description 713 "Redistributes IS-IS routes."; 714 leaf instance { 715 type leafref { 716 path "../../../../../rt:control-plane-protocol/rt:name"; 717 } 718 must "derived-from-or-self(" 719 + "../../../../../rt:control-plane-protocol" 720 + "[rt:name = current()]/rt:type, 'isis:isis')" { 721 description 722 "The type of the routing protocol must be 'isis'"; 723 } 724 description 725 "Redistributes routes from the specified IS-IS routing 726 instance into the RIP routing instance."; 727 } 728 leaf level { 729 type enumeration { 730 enum 1 { 731 description "IS-IS level 1 routes."; 732 } 733 enum 2 { 734 description "IS-IS level 1 routes."; 735 } 736 enum 1-2 { 737 description "IS-IS level 1-2 routes."; 738 } 739 } 740 description 741 "IS-IS level."; 742 } 743 uses redistribute-route-policy-attributes; 744 } 745 container nat { 746 presence 747 "Present if Network Address Translation (NAT) routes 748 are redistributed."; 749 description 750 "Redistributes Network Address Translation (NAT) 751 routes into the RIP routing instance."; 752 uses redistribute-route-policy-attributes; 753 } 754 list ospfv2 { 755 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 756 description 757 "Applicable to RIPv2."; 758 } 759 key "instance"; 760 description 761 "Redistributes routes from the specified OSPFv2 routing 762 instance into the RIPv2 routing instance."; 763 leaf instance { 764 type leafref { 765 path "../../../../../rt:control-plane-protocol/rt:name"; 766 } 767 must "derived-from-or-self(" 768 + "../../../../../rt:control-plane-protocol" 769 + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" { 770 description 771 "The type of the routing protocol must be 'ospfv2'"; 772 } 773 description 774 "OSPFv2 instance ID. Redistributes routes from the 775 specified OSPFv2 routing instance into the RIPv2 routing 776 instance. "; 777 } 778 leaf route-type { 779 type ospf:route-type; 780 description 781 "Redistributes only those OSPFv2 routes matching the 782 specified route type into the RIPv2 routing instance."; 783 } 784 uses redistribute-route-policy-attributes; 785 } 786 list ospfv3 { 787 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 788 description 789 "Applicable to RIPng."; 790 } 791 key "instance"; 792 description 793 "Redistributes routes from the specified OSPFv3 routing 794 instance into the RIPng routing instance."; 795 leaf instance { 796 type leafref { 797 path "../../../../../rt:control-plane-protocol/rt:name"; 798 } 799 must "derived-from-or-self(" 800 + "../../../../../rt:control-plane-protocol" 801 + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" { 802 description 803 "The type of the routing protocol must be 'ospfv3'"; 804 } 805 description 806 "OSPFv3 instance ID. Redistributes routes from the 807 specified OSPFv3 routing instance into the RIPng routing 808 instance. "; 809 } 810 leaf route-type { 811 type ospf:route-type; 812 description 813 "Redistributes only those OSPFv3 routes matching the 814 specified route type into the RIPng routing instance."; 815 } 816 uses redistribute-route-policy-attributes; 817 } 818 list ripv2 { 819 when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { 820 description 821 "Applicable to RIPv2."; 822 } 823 key "instance"; 824 description 825 "Redistributes routes from another RIPv2 routing instance 826 into the current RIPv2 routing instance."; 827 leaf instance { 828 type leafref { 829 path "../../../../../rt:control-plane-protocol/rt:name"; 830 } 831 must "derived-from-or-self(" 832 + "../../../../../rt:control-plane-protocol" 833 + "[rt:name = current()]/rt:type, 'rip:ripv2')" { 834 description 835 "The type of the routing protocol must be 'ripv2'"; 836 } 837 description 838 "Redistributes routes from the specified RIPv2 routing 839 instance into the RIPv2 routing instance."; 840 } 841 uses redistribute-route-policy-attributes; 842 } 843 list ripng { 844 when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { 845 description 846 "Applicable to RIPng."; 847 } 848 key "instance"; 849 description 850 "Redistributes routes from another RIPng routing instance 851 into the current RIPng routing instance."; 852 leaf instance { 853 type leafref { 854 path "../../../../../rt:control-plane-protocol/rt:name"; 855 } 856 must "derived-from-or-self(" 857 + "../../../../../rt:control-plane-protocol" 858 + "[rt:name = current()]/rt:type, 'rip:ripng')" { 859 description 860 "The type of the routing protocol must be 'ripng'"; 861 } 862 description 863 "Redistributes routes from the specified RIPng routing 864 instance into the RIPng routing instance."; 865 } 866 uses redistribute-route-policy-attributes; 867 } 868 container static { 869 presence "Present if redistributing static routes."; 870 description 871 "Redistributes static routes into the RIP routing 872 instance."; 873 uses redistribute-route-policy-attributes; 874 } 875 } // redistribute 876 } // redistribute-container 878 grouping redistribute-route-policy-attributes { 879 description 880 "Attributes for redistributing a route policy."; 881 leaf metric { 882 type uint8 { 883 range 0..16; 884 } 885 description 886 "Metric used for the redistributed route. If a metric is 887 not specified, the metric configured with the 888 default-metric attribute in RIP router configuration is 889 used. If the default-metric attribute has not been 890 configured, the default metric for redistributed routes 891 is 0."; 892 } 893 leaf route-policy { 894 type route-policy-ref; 895 description 896 "Applies the conditions of the specified route policy to 897 routes that are redistributed into the RIP routing 898 instance."; 899 } 900 } // redistribute-route-policy-attributes 902 grouping timers-container { 903 description 904 "Container for settings of basic timers"; 905 container timers { 906 must "invalid-interval >= (update-interval * 3)" { 907 description 908 "invalid-interval must be at least three times the value 909 for the update-interval argument."; 910 } 911 must "flush-interval > invalid-interval" { 912 description 913 "flush-interval must be larger than the value for the 914 invalid-interval argument"; 915 } 916 description 917 "Timers for the specified RIPv2 or RIPng instance or 918 interface."; 919 leaf update-interval { 920 type uint16 { 921 range 1..32767; 922 } 923 units seconds; 924 default 30; 925 description 926 "Interval at which RIPv2 or RIPng updates are sent."; 927 } 928 leaf invalid-interval { 929 type uint16 { 930 range 1..32767; 931 } 932 units seconds; 933 default 180; 934 description 935 "Interval before a route is declared invalid after no 936 updates are received. This value is at least three times 937 the value for the update-interval argument."; 938 } 939 leaf holddown-interval { 940 type uint16 { 941 range 1..32767; 942 } 943 units seconds; 944 default 180; 945 description 946 "Interval before better routes are released."; 947 } 948 leaf flush-interval { 949 type uint16 { 950 range 1..32767; 951 } 952 units seconds; 953 default 240; 954 description 955 "Interval before a route is flushed from the routing 956 table. This value must be larger than the value for the 957 invalid-interval argument."; 958 } 959 } // timers 960 } 962 grouping global-attributes { 963 description 964 "Global configuration and state attributes."; 965 uses originate-default-route-container; 967 leaf default-metric { 968 type uint8 { 969 range 0..16; 970 } 971 default 0; 972 description 973 "Set the default metric."; 974 } 976 leaf distance { 977 type uint8 { 978 range 1..255; 979 } 980 default 120; 981 description 982 "The administrative distance of the RIPv2 or RIPng for the 983 current RIPv2 or RIPng instance."; 984 } 986 leaf triggered-update-threshold { 987 type uint8 { 988 range 1..30; 989 } 990 units seconds; 991 default 5; 992 description 993 "This attribute is used to suppress triggered updates. 994 When the arrival of a regularly scheduled update matches the 995 number of seconds or is less than the number seconds 996 configured with this attribute, the triggered update is 997 suppressed."; 998 } 1000 leaf maximum-paths { 1001 type uint8 { 1002 range 1..16; 1003 } 1004 default 8; 1005 description 1006 "The number of multiple equal-cost RIPv2 or RIPng routes 1007 that can be used as the best paths for balancing the load 1008 of outgoing traffic packets."; 1009 } 1011 leaf output-delay { 1012 type uint8 { 1013 range 1..50; 1014 } 1015 units milliseconds; 1016 description 1017 "A delay time between packets sent in multipacket 1018 RIPv2 or RIPng updates."; 1019 } 1020 } // global-attributes 1022 grouping distribute-lists { 1023 description 1024 "Grouping for distribute lists."; 1025 list distribute-list { 1026 key "prefix-set-name direction"; 1027 description 1028 "List of distribute-lists, which are used to filter in-coming 1029 or out-going routing updates."; 1031 leaf prefix-set-name { 1032 type prefix-set-ref; 1033 description 1034 "Reference to a prefix list to be applied to RIPv2 or 1035 RIPng packets."; 1036 } 1038 leaf direction { 1039 type enumeration { 1040 enum "in" { 1041 description 1042 "Apply the distribute-list to in-coming routes."; 1043 } 1044 enum "out" { 1045 description 1046 "Apply the distribute-list to out-going routes."; 1047 } 1048 } 1049 description 1050 "Direction of the routing updates."; 1051 } 1053 leaf if-name { 1054 type if:interface-ref; 1055 description 1056 "Reference to an interface to which the prefix list is 1057 applied."; 1058 } 1059 } 1060 } // distribute-lists 1062 grouping route-attributes { 1063 description 1064 "Grouping for route attributes."; 1065 leaf redistributed { 1066 type boolean; 1067 description 1068 "Redistributed routes"; 1069 } 1071 leaf route-type { 1072 type enumeration { 1073 enum connected { 1074 description "Connected route."; 1075 } 1076 enum external { 1077 description "External route."; 1078 } 1079 enum external-backup { 1080 description "External backup route."; 1081 } 1082 enum rip { 1083 description "RIP route."; 1084 } 1085 } 1086 description 1087 "Route type."; 1088 } 1089 leaf metric { 1090 type uint8 { 1091 range 0..16; 1092 } 1093 description "Route metric."; 1094 } 1095 leaf expire-time { 1096 type uint16; 1097 description "Expiration time."; 1098 } 1099 leaf deleted { 1100 type boolean; 1101 description "Deleted route."; 1102 } 1103 leaf holddown { 1104 type boolean; 1105 description "Holddown route."; 1106 } 1107 leaf need-triggered-update { 1108 type boolean; 1109 description "The route needs triggered update."; 1110 } 1111 leaf inactive { 1112 type boolean; 1113 description "The route is inactive."; 1114 } 1115 leaf flush-expire-before-holddown { 1116 type boolean; 1117 description 1118 "The flush timer expired before holddown time."; 1119 } 1120 } // route-attribute 1122 /* 1123 * Configuration data nodes 1124 */ 1126 augment "/rt:routing/rt:control-plane-protocols/" 1127 + "rt:control-plane-protocol" { 1128 when "derived-from(rt:type, 'rip:rip')" { 1129 description 1130 "This augment is only valid for a routing protocol instance 1131 of RIP (type 'ripv2' or 'ripng')."; 1132 } 1133 description "RIP augmentation."; 1135 container rip { 1136 description 1137 "RIP configuration data."; 1139 uses global-attributes; 1140 uses distribute-lists; 1141 uses redistribute-container; 1142 uses timers-container; 1144 container interfaces { 1145 description 1146 "Containing a list of RIP interfaces."; 1147 list interface { 1148 key "interface"; 1149 description 1150 "List of RIP interfaces."; 1151 leaf interface { 1152 type if:interface-ref; 1153 must "(derived-from-or-self(" 1154 + "../../../../rt:type, 'rip:ripv2') and " 1155 + "/if:interfaces/if:interface[if:name=current()]/" 1156 + "ip:ipv4) or " 1157 + "(derived-from-or-self(" 1158 + "../../../../rt:type, 'rip:ripng') and " 1159 + "/if:interfaces/if:interface[if:name=current()]/" 1160 + "ip:ipv6)" { 1161 error-message "Invalid interface type."; 1162 description 1163 "RIPv2 can be enabled on IPv4 interfae, and 1164 RIPng can be enabled on IPv6 interface."; 1165 } 1166 description 1167 "Enable RIP on this interface."; 1168 } 1170 container authentication { 1171 when "derived-from-or-self(" 1172 + "../../../../rt:type, 'rip:ripv2')" { 1173 description "Only applicable to RIPv2."; 1174 } 1175 description 1176 "Enables authentication and specifies the 1177 authentication scheme for the RIP interface"; 1178 choice auth-type-selection { 1179 description 1180 "Specify the authentication scheme. 1181 The use of the key-chain reference here is 1182 designed to align with other proposed protocol 1183 models."; 1184 case auth-key-chain { 1185 leaf key-chain { 1186 type key-chain:key-chain-ref; 1187 description 1188 "key-chain name"; 1189 } 1190 } 1191 case auth-key { 1192 leaf key { 1193 type string; 1194 description 1195 "Key string in ASCII format."; 1196 } 1197 leaf crypto-algorithm { 1198 type identityref { 1199 base key-chain:crypto-algorithm; 1200 } 1201 description 1202 "Cryptographic algorithm associated with key."; 1203 } 1204 } 1205 } 1206 } 1208 container bfd { 1209 if-feature bfd; 1210 description "BFD operation."; 1211 leaf enabled { 1212 type boolean; 1213 description 1214 "True if BFD is enabled for the interface."; 1215 } 1216 uses bfd:bfd-grouping-base-cfg-parms { 1217 if-feature bfd-protocol-parameters; 1218 } 1219 } 1221 leaf cost { 1222 type uint8 { 1223 range 1..16; 1224 } 1225 default 1; 1226 description 1227 "Interface cost."; 1228 } 1230 container neighbors { 1231 if-feature explicit-neighbors; 1232 description 1233 "Specifies the RIP neighbors. Useful for a 1234 non-broadcast multiple access (NBMA) network."; 1235 list neighbor { 1236 key "address"; 1237 description 1238 "Specify a RIP neighbor on a non-broadcast network."; 1239 leaf address { 1240 type inet:ip-address; 1241 description "Neighbor IP address."; 1242 } 1243 } 1244 } 1246 leaf no-listen { 1247 type empty; 1248 description 1249 "Disable the specified interface to receive (listen to) 1250 and process RIPv2 or RIPng packets."; 1251 } 1253 uses originate-default-route-container; 1255 leaf passive { 1256 type empty; 1257 description 1258 "Disables sending of RIPv2 or RIPng packets on the 1259 specified interface."; 1260 } 1262 leaf split-horizon { 1263 type enumeration { 1264 enum simple { 1265 description 1266 "Enables simple split-horizon processing."; 1267 } 1268 enum poison-reverse { 1269 description 1270 "Enables split-horizon processing with poison 1271 reverse."; 1272 } 1273 } 1274 default simple; 1275 description 1276 "Enables RIPv2 or RIPng split-horizon processing on the 1277 specified interface."; 1278 } 1280 container summary-address { 1281 description 1282 "Summarizes information about RIPv2 or RIPng routes 1283 sent over the specified interface in RIPv2 or RIPng 1284 update packets."; 1285 leaf address { 1286 type inet:ip-prefix; 1287 description 1288 "IPv4 address, in the form A.B.C.D, and the prefix 1289 length, separated by the slash (/) character; 1290 or IPv6 address, in the form A:B:C:D:E:F:G:H, and 1291 the prefix length, separated by the slash (/) 1292 character."; 1293 } 1294 leaf metric { 1295 type uint8 { 1296 range 0..16; 1297 } 1298 description 1299 "Metric used for the route. If this attribute is not 1300 used, the value set through the default-metric 1301 attribute in RIPv2 or RIPng router configuration is 1302 used for the route. "; 1303 } 1304 } 1306 uses timers-container; 1307 } // interface 1308 } // interfaces 1309 } // container rip 1310 } 1312 /* 1313 * Operational state data nodes 1314 */ 1316 augment "/rt:routing-state/rt:control-plane-protocols/" 1317 + "rt:control-plane-protocol" { 1318 when "derived-from(rt:type, 'rip:rip')" { 1319 description 1320 "This augment is only valid for a routing protocol instance 1321 of type 'ripv2' or 'ripng'."; 1322 } 1323 description 1324 "RIP state."; 1325 container rip { 1326 description "RIP operational state."; 1328 uses global-attributes; 1329 uses distribute-lists; 1331 leaf next-triggered-update { 1332 type uint32; 1333 description 1334 "Next triggered update."; 1335 } 1336 leaf num-of-routes { 1337 type uint32; 1338 description 1339 "The number of routes."; 1340 } 1342 uses timers-container; 1344 container interfaces { 1345 description 1346 "Containing a list of RIP interfaces."; 1347 list interface { 1348 key "interface"; 1349 description 1350 "List of RIP interfaces."; 1351 leaf interface { 1352 type if:interface-ref; 1353 description 1354 "Enable RIP on this interface."; 1355 } 1356 leaf oper-status { 1357 type enumeration { 1358 enum up { 1359 description 1360 "RIPv2 or RIPng is operational on this interface."; 1361 } 1362 enum down { 1363 description 1364 "RIPv2 or RIPng is not operational on this 1365 interface."; 1366 } 1368 } 1369 description 1370 "Operational state."; 1371 } 1372 leaf cost { 1373 type uint8 { 1374 range 1..16; 1375 } 1376 default 1; 1377 description 1378 "Interface cost."; 1379 } 1380 leaf listen { 1381 type boolean; 1382 description 1383 "The interface is enabled to receive (listen to) 1384 and process RIPv2 or RIPng packets."; 1385 } 1386 leaf next-full-update { 1387 type uint32; 1388 description 1389 "Next full update time."; 1390 } 1391 leaf originate-default-route { 1392 type boolean; 1393 description 1394 "'true' if originating default route is enabled."; 1395 } 1396 leaf passive { 1397 type boolean; 1398 description 1399 "Sending RIP packets is disabled on the interface."; 1400 } 1401 leaf poison-reverse { 1402 type boolean; 1403 description 1404 "'true' if Split Horizon with Poisoned Reverse is 1405 enabled."; 1406 } 1407 leaf split-horizon { 1408 type boolean; 1409 description 1410 "'true' if Split Horizon processing is enabled."; 1411 } 1412 leaf valid-address { 1413 type boolean; 1414 description 1415 "The interface has a valid address."; 1417 } 1418 uses timers-container; 1420 container statistics { 1421 if-feature interface-statistics; 1422 description 1423 "Interface statistic counters."; 1424 leaf discontinuity-time { 1425 type yang:date-and-time; 1426 description 1427 "The time on the most recent occasion at which any 1428 one or more of the statistic counters suffered a 1429 discontinuity. If no such discontinuities have 1430 occurred since the last re-initialization of the 1431 local management subsystem, then this node contains 1432 the time the local management subsystem 1433 re-initialized itself."; 1434 } 1435 leaf bad-packets-rcvd { 1436 type yang:counter32; 1437 description 1438 "The number of RIP invalid packets received by 1439 the RIP process which were subsequently discarded 1440 for any reason (e.g. a version 0 packet, or an 1441 unknown command type)."; 1442 } 1443 leaf bad-routes-rcvd { 1444 type yang:counter32; 1445 description 1446 "The number of routes, in valid RIP packets, 1447 which were ignored for any reason (e.g. unknown 1448 address family, or invalid metric)."; 1449 } 1450 leaf updates-sent { 1451 type yang:counter32; 1452 description 1453 "The number of triggered RIP updates actually 1454 sent on this interface. This explicitly does 1455 NOT include full updates sent containing new 1456 information."; 1457 } 1458 } 1459 } // interface 1460 } // interfaces 1462 container ipv4 { 1463 when "derived-from-or-self(../../rt:type, 'rip:ripv2')" { 1464 description 1465 "IPv4 address family is supported by RIPv2."; 1466 } 1467 description 1468 "IPv4 address family information."; 1469 container neighbors { 1470 description 1471 "IPv4 neighbor information."; 1472 list neighbor { 1473 key "ipv4-address"; 1474 description 1475 "A RIPv2 neighbor."; 1477 leaf ipv4-address { 1478 type inet:ipv4-address; 1479 description 1480 "IP address that a RIP neighbor is using as its 1481 source address."; 1482 } 1483 leaf last-update { 1484 type yang:date-and-time; 1485 description 1486 "The time when the most recent RIP update was 1487 received from this neighbor."; 1488 } 1489 leaf bad-packets-rcvd { 1490 type yang:counter32; 1491 description 1492 "The number of RIP invalid packets received from 1493 this neighbor which were subsequently discarded 1494 for any reason (e.g. a version 0 packet, or an 1495 unknown command type)."; 1496 } 1497 leaf bad-routes-rcvd { 1498 type yang:counter32; 1499 description 1500 "The number of routes received from this neighbor, 1501 in valid RIP packets, which were ignored for any 1502 reason (e.g. unknown address family, or invalid 1503 metric)."; 1504 } 1505 } // neighbor 1506 } // neighbors 1507 container routes { 1508 description 1509 "IPv4 route information."; 1510 list route { 1511 key "ipv4-prefix"; 1512 description 1513 "A RIPv2 IPv4 route."; 1515 leaf ipv4-prefix { 1516 type inet:ipv4-prefix; 1517 description 1518 "IP address (in the form A.B.C.D) and prefix length, 1519 separated by the slash (/) character. The range of 1520 values for the prefix-length is 0 to 32."; 1521 } 1522 leaf next-hop { 1523 type inet:ipv4-address; 1524 description 1525 "Next hop IPv4 address."; 1526 } 1527 leaf interface { 1528 type if:interface-ref; 1529 description 1530 "The interface that the route uses."; 1531 } 1532 uses route-attributes; 1533 } // route 1534 } // routes 1535 } // ipv4 1536 container ipv6 { 1537 when "derived-from-or-self(../../rt:type, 'rip:ripng')" { 1538 description 1539 "IPv6 address family is supported by RIPng."; 1540 } 1541 description 1542 "IPv6 address family information."; 1543 container neighbors { 1544 description 1545 "IPv6 neighbor information."; 1546 list neighbor { 1547 key "ipv6-address"; 1548 description 1549 "A RIPng neighbor."; 1551 leaf ipv6-address { 1552 type inet:ipv6-address; 1553 description 1554 "IP address that a RIP neighbor is using as its 1555 source address."; 1556 } 1557 leaf last-update { 1558 type yang:date-and-time; 1559 description 1560 "The time when the most recent RIP update was 1561 received from this neighbor."; 1562 } 1563 leaf bad-packets-rcvd { 1564 type yang:counter32; 1565 description 1566 "The number of RIP invalid packets received from 1567 this neighbor which were subsequently discarded 1568 for any reason (e.g. a version 0 packet, or an 1569 unknown command type)."; 1570 } 1571 leaf bad-routes-rcvd { 1572 type yang:counter32; 1573 description 1574 "The number of routes received from this neighbor, 1575 in valid RIP packets, which were ignored for any 1576 reason (e.g. unknown address family, or invalid 1577 metric)."; 1578 } 1579 } // neighbor 1580 } // neighbors 1581 container routes { 1582 description 1583 "IPv6 route information."; 1584 list route { 1585 key "ipv6-prefix"; 1586 description 1587 "A RIPng IPv6 route."; 1589 leaf ipv6-prefix { 1590 type inet:ipv6-prefix; 1591 description 1592 "IP address (in the canonical format defined in 1593 RFC5952) and prefix length, separated by the slash 1594 (/) character. The range of values for the 1595 prefix-length is 0 to 128."; 1596 } 1597 leaf next-hop { 1598 type inet:ipv6-address; 1599 description 1600 "Next hop IPv6 address."; 1601 } 1602 leaf interface { 1603 type if:interface-ref; 1604 description 1605 "The interface that the route uses."; 1606 } 1607 uses route-attributes; 1608 } // route 1610 } // routes 1611 } // ipv6 1613 container statistics { 1614 if-feature global-statistics; 1615 description 1616 "Global statistic counters."; 1617 leaf discontinuity-time { 1618 type yang:date-and-time; 1619 description 1620 "The time on the most recent occasion at which any one 1621 or more of the statistic counters suffered a 1622 discontinuity. If no such discontinuities have occurred 1623 since the last re-initialization of the local 1624 management subsystem, then this node contains the time 1625 the local management subsystem re-initialized itself."; 1626 } 1627 leaf requests-rcvd { 1628 type yang:counter32; 1629 description 1630 "The number of requests received by RIP."; 1631 } 1632 leaf requests-sent { 1633 type yang:counter32; 1634 description 1635 "The number of requests sent by RIP."; 1636 } 1637 leaf responses-rcvd { 1638 type yang:counter32; 1639 description 1640 "The number of responses received by RIP."; 1641 } 1642 leaf responses-sent { 1643 type yang:counter32; 1644 description 1645 "The number of responses sent by RIP."; 1646 } 1647 } 1648 } // rip 1649 } // augment 1651 /* 1652 * RPCs 1653 */ 1655 rpc clear-rip-route { 1656 description 1657 "Clears RIP routes from the IP routing table and routes 1658 redistributed into the RIP protocol for the specified RIP 1659 instance or for all RIP instances in the current context."; 1661 input { 1662 leaf rip-instance { 1663 type leafref { 1664 path "/rt:routing/rt:control-plane-protocols/" 1665 + "rt:control-plane-protocol/rt:name"; 1666 } 1667 description 1668 "Instance name identifying a specific RIP instance. 1669 This leaf is optional for the rpc. 1670 If it is specified, the rpc will clear all routes in the 1671 specified RIP instance; 1672 if it is not specified, the rpc will clear all routes in 1673 all RIP instances."; 1674 } 1675 } 1676 } // rcp clear-rip-route 1677 } 1678 1680 5. IANA Considerations 1682 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1683 actual RFC number (and remove this note). 1685 This document registers the following namespace URIs in the IETF XML 1686 registry [RFC3688]: 1688 -------------------------------------------------------------------- 1689 URI: urn:ietf:params:xml:ns:yang:ietf-rip 1690 Registrant Contact: The IESG. 1691 XML: N/A, the requested URI is an XML namespace. 1692 -------------------------------------------------------------------- 1694 This document registers the following YANG modules in the YANG Module 1695 Names registry [RFC7950]: 1697 -------------------------------------------------------------------- 1698 name: ietf-rip 1699 namespace: urn:ietf:params:xml:ns:yang:ietf-rip 1700 prefix: rip 1701 reference: RFC XXXX 1702 -------------------------------------------------------------------- 1704 6. Security Considerations 1706 The configuration, state, and action data defined in this document 1707 are designed to be accessed via a management protocol with a secure 1708 transport layer, such as NETCONF [RFC6241]. The NETCONF access 1709 control model [RFC6536] provides the means to restrict access for 1710 particular NETCONF users to a preconfigured subset of all available 1711 NETCONF protocol operations and content. 1713 A number of configuration data nodes defined in this document are 1714 writable/creatable/deletable (i.e., "config true" in YANG terms, 1715 which is the default). These data nodes may be considered sensitive 1716 or vulnerable in some network environments. Write operations to 1717 these data nodes, such as "edit-config" in NETCONF, can have negative 1718 effects on the network if the protocol operations are not properly 1719 protected. The vulnerable "config true" parameters and subtrees are 1720 the following: 1722 /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ 1723 rip:rip 1725 Unauthorized access to any node of these can adversely affect the 1726 routing subsystem of both the local device and the network. This may 1727 lead to network malfunctions, delivery of packets to inappropriate 1728 destinations, and other problems. 1730 This data model also defines a RPC "clear-rip-route", which may 1731 affect the routing subsystem in the same way as described above. 1733 7. References 1735 7.1. Normative References 1737 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1738 Requirement Levels", BCP 14, RFC 2119, 1739 DOI 10.17487/RFC2119, March 1997, 1740 . 1742 [RFC2453] Malkin, G., "RIP Version 2", STD 56, RFC 2453, 1743 DOI 10.17487/RFC2453, November 1998, 1744 . 1746 [RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080, 1747 DOI 10.17487/RFC2080, January 1997, 1748 . 1750 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1751 DOI 10.17487/RFC3688, January 2004, 1752 . 1754 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1755 and A. Bierman, Ed., "Network Configuration Protocol 1756 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1757 . 1759 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1760 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1761 . 1763 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1764 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1765 . 1767 [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", 1768 RFC 7277, DOI 10.17487/RFC7277, June 2014, 1769 . 1771 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1772 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1773 . 1775 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1776 Management", RFC 8022, DOI 10.17487/RFC8022, November 1777 2016, . 1779 [I-D.ietf-rtgwg-yang-key-chain] 1780 Lindem, A., Qu, Y., Yeung, D., Chen, I., and Z. Zhang, 1781 "Routing Key Chain YANG Data Model", draft-ietf-rtgwg- 1782 yang-key-chain-24 (work in progress), April 2017. 1784 [I-D.ietf-isis-yang-isis-cfg] 1785 Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L. 1786 Lhotka, "YANG Data Model for IS-IS protocol", draft-ietf- 1787 isis-yang-isis-cfg-17 (work in progress), March 2017. 1789 [I-D.ietf-bfd-yang] 1790 Rahman, R., Zheng, L., Networks, J., Jethanandani, M., and 1791 G. Mirsky, "Yang Data Model for Bidirectional Forwarding 1792 Detection (BFD)", draft-ietf-bfd-yang-05 (work in 1793 progress), March 2017. 1795 [I-D.ietf-netconf-rfc5277bis] 1796 Clemm, A., Prieto, A., Voit, E., Nilsen-Nygaard, E., 1797 Tripathy, A., Chisholm, S., and H. Trevino, "Subscribing 1798 to Event Notifications", draft-ietf-netconf-rfc5277bis-01 1799 (work in progress), October 2016. 1801 [I-D.ietf-netconf-yang-push] 1802 Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- 1803 Nygaard, E., Bierman, A., and B. Lengyel, "Subscribing to 1804 YANG datastore push updates", draft-ietf-netconf-yang- 1805 push-06 (work in progress), April 2017. 1807 7.2. Informative References 1809 [RFC1724] Malkin, G. and F. Baker, "RIP Version 2 MIB Extension", 1810 RFC 1724, DOI 10.17487/RFC1724, November 1994, 1811 . 1813 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1814 Protocol (NETCONF) Access Control Model", RFC 6536, 1815 DOI 10.17487/RFC6536, March 2012, 1816 . 1818 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 1819 RFC 7951, DOI 10.17487/RFC7951, August 2016, 1820 . 1822 [I-D.ietf-ospf-yang] 1823 Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, 1824 "Yang Data Model for OSPF Protocol", draft-ietf-ospf- 1825 yang-07 (work in progress), March 2017. 1827 Appendix A. Data Tree Example 1829 This section contains an example of an instance data tree in the JSON 1830 encoding [RFC7951], containing both configuration and state data. 1832 +---------------------+ 1833 | | 1834 | Router 203.0.113.1 | 1835 | | 1836 +----------+----------+ 1837 |eth0 1838 |192.0.2.1 1839 | 1840 | 1841 |192.0.2.2 1842 +----------+----------+ 1843 | | 1844 | Another Router | 1845 | | 1846 +---------------------+ 1848 The instance data tree for Router 203.0.113.1 in the above figure 1849 could be as follows: 1851 { 1852 "ietf-interfaces:interfaces": { 1853 "interface": [ 1854 { 1855 "name": "eth1", 1856 "type": "iana-if-type:ethernetCsmacd", 1857 "description": "An interface with RIPv2 enabled.", 1858 "ietf-ip:ipv4": { 1859 "address": [ 1860 { 1861 "ip": "192.0.2.1", 1862 "prefix-length": 24 1863 } 1864 ], 1865 "forwarding": true 1866 } 1867 } 1868 ] 1869 }, 1870 "ietf-interfaces:interfaces-state": { 1871 "interface": [ 1872 { 1873 "name": "eth1", 1874 "type": "iana-if-type:ethernetCsmacd", 1875 "phys-address": "00:0C:42:E5:B1:E9", 1876 "oper-status": "up", 1877 "statistics": { 1878 "discontinuity-time": "2016-10-24T17:11:27+02:00" 1879 }, 1880 "ietf-ip:ipv4": { 1881 "forwarding": true, 1882 "mtu": 1500, 1883 "address": [ 1884 { 1885 "ip": "192.0.2.1", 1886 "prefix-length": 24 1887 } 1888 ] 1889 } 1890 } 1891 ] 1892 }, 1893 "ietf-routing:routing": { 1894 "router-id": "203.0.113.1", 1895 "control-plane-protocols": { 1896 "control-plane-protocol": [ 1897 { 1898 "type": "ietf-rip:ripv2", 1899 "name": "ripv2-1", 1900 "description": "RIPv2 instance ripv2-1.", 1901 "ietf-rip:rip": { 1902 "redistribute": { 1903 "connected": { 1904 } 1905 } 1906 "interfaces": { 1907 "interface": [ 1908 { 1909 "interface": "eth1", 1910 "split-horizon": "poison-reverse" 1911 } 1912 ] 1913 } 1914 } 1915 } 1916 ] 1917 } 1918 }, 1919 "ietf-routing:routing-state": { 1920 "interfaces": { 1921 "interface": [ 1922 "eth1" 1924 ] 1925 }, 1926 "control-plane-protocols": { 1927 "control-plane-protocol": [ 1928 { 1929 "type": "ietf-rip:rip", 1930 "name": "ripv2-1" 1931 "ietf-rip:rip": { 1932 "default-metric": 1, 1933 "next-triggered-update": 5 1934 "interfaces": { 1935 "interface": [ 1936 { 1937 "interface": "eth1", 1938 "oper-status": "up", 1939 "cost": 1, 1940 "listen": true, 1941 "passive": false, 1942 "poison-reverse": true, 1943 "split-horizon": true, 1944 "valid-address": true 1945 } 1946 ] 1947 }, 1948 "ipv4" { 1949 "neighbors": { 1950 "neighbor": [ 1951 { 1952 "address": "192.0.2.2" 1953 } 1954 ] 1955 } 1956 "routes": { 1957 "route": [ 1958 { 1959 "ipv4-prefix": "192.0.2.1/24", 1960 "interface": "eth1", 1961 "redistributed": true, 1962 "route-type": "connected", 1963 "metric": 0, 1964 "expire-time": 22 1965 }, 1966 { 1967 "ipv4-prefix": "198.51.100.0/24", 1968 "next-hop": "192.0.2.2", 1969 "interface": "eth1", 1970 "redistributed": false, 1971 "route-type": "rip", 1972 "metric": 2, 1973 "expire-time": 82 1974 } 1975 ] 1976 } 1977 }, 1978 "statistics": { 1979 "discontinuity-time": "2016-10-24T17:11:27+02:00", 1980 "requests-rcvd": 523, 1981 "requests-sent": 262, 1982 "responses-rcvd": 261, 1983 "responses-sent": 523 1984 } 1985 } 1986 } 1987 ] 1988 } 1989 } 1990 } 1992 Authors' Addresses 1994 Xufeng Liu 1995 Jabil 1996 8281 Greensboro Drive, Suite 200 1997 McLean VA 22102 1998 USA 2000 EMail: Xufeng_Liu@jabil.com 2002 Prateek Sarda 2003 Ericsson 2004 Fern Icon, Survey No 28 and 36/5, Doddanakundi Village 2005 Bangalore Karnataka 560037 2006 India 2008 EMail: prateek.sarda@ericsson.com 2010 Vikram Choudhary 2011 Huawei Technologies 2012 Divyashree Techno Park, Whitefield 2013 Bangalore Karnataka 560037 2014 India 2016 EMail: vikram.choudhary@huawei.com