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