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