idnits 2.17.1 draft-ietf-rtgwg-yang-rip-00.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 110 has weird spacing: '...st-name str...' == Line 146 has weird spacing: '...address ine...' == Line 171 has weird spacing: '...st-name str...' -- The document date (August 3, 2015) is 3189 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) == Missing Reference: 'RFC2119' is mentioned on line 83, but not defined == Missing Reference: 'RFC3688' is mentioned on line 1145, but not defined == Unused Reference: 'RFC6991' is defined on line 1171, but no explicit reference was found in the text == Unused Reference: 'RFC1724' is defined on line 1183, but no explicit reference was found in the text == Unused Reference: 'RFC6087' is defined on line 1188, but no explicit reference was found in the text -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) Summary: 0 errors (**), 0 flaws (~~), 9 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 Network Working Group X. Liu 2 Internet-Draft P. Sarda 3 Intended status: Standards Track Ericsson 4 Expires: February 3, 2016 V. Choudhary 5 Huawei Technologies 6 August 3, 2015 8 A YANG Data Model for Routing Information Protocol (RIP) 9 draft-ietf-rtgwg-yang-rip-00.txt 11 Abstract 13 This document describes a data model for Routing Information Protocol 14 (RIP). Both RIP version 2 and RIPng are covered. 16 Status of this Memo 18 This Internet-Draft is submitted in full conformance with the 19 provisions of BCP 78 and BCP 79. 21 Internet-Drafts are working documents of the Internet Engineering 22 Task Force (IETF), its areas, and its working groups. Note that 23 other groups may also distribute working documents as Internet- 24 Drafts. 26 Internet-Drafts are draft documents valid for a maximum of six months 27 and may be updated, replaced, or obsoleted by other documents at any 28 time. It is inappropriate to use Internet-Drafts as reference 29 material or to cite them other than as "work in progress." 31 The list of current Internet-Drafts can be accessed at 32 http://www.ietf.org/ietf/1id-abstracts.txt 34 The list of Internet-Draft Shadow Directories can be accessed at 35 http://www.ietf.org/shadow.html 37 This Internet-Draft will expire on January 1, 2015. 39 Copyright Notice 41 Copyright (c) 2015 IETF Trust and the persons identified as the 42 document authors. All rights reserved. 44 This document is subject to BCP 78 and the IETF Trust's Legal 45 Provisions Relating to IETF Documents 46 (http://trustee.ietf.org/license-info) in effect on the date of 47 publication of this document. Please review these documents 48 carefully, as they describe your rights and restrictions with respect 49 to this document. Code Components extracted from this document must 50 include Simplified BSD License text as described in Section 4.e of 51 the Trust Legal Provisions and are provided without warranty as 52 described in the Simplified BSD License. 54 Table of Contents 56 1. Introduction...................................................2 57 1.1. Terminology...............................................2 58 2. RIP YANG model overview........................................3 59 3. RIP YANG module................................................7 60 4. IANA Considerations...........................................28 61 5. Security Considerations.......................................28 62 6. References....................................................29 63 6.1. Normative References.....................................29 64 6.2. Informative References...................................29 66 1. Introduction 68 This document introduces a YANG [RFC6020] data model for Routing 69 Information Protocol (RIP)[RFC2453][RFC2080]. RIP was designed to 70 work as an Interior Gateway Protocol (IGP) in moderate-size 71 Autonomous Systems (AS). 73 This YANG model supports both RIP version 2 and RIPng. RIP version 2 74 defined in [RFC2453] supports IPv4. RIPng defined in [RFC2080] 75 supports IPv6. 77 1.1. Terminology 79 The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 80 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 81 "OPTIONAL" in this document are to be interpreted as described in BCP 82 14, [RFC2119]. 84 The following terms are defined in [RFC6020] and are not redefined 85 here: 87 o augment 89 o data model 91 o data node 93 2. RIP YANG model overview 95 This document defines the YANG module "ietf-rip", which has the 96 following structure: 98 module: ietf-rip 99 augment /rt:routing/rt:routing-instance/rt:routing-protocols 100 /rt:routing-protocol: 101 +--rw rip 102 +--rw originate-default-route! 103 | +--rw route-map? string 104 +--rw default-metric? uint8 105 +--rw distance? uint8 106 +--rw flash-update-threshold? uint8 107 +--rw maximum-paths? uint8 108 +--rw output-delay? uint8 109 +--rw distribute-list* [prefix-list-name direction] 110 | +--rw prefix-list-name string 111 | +--rw direction enumeration 112 | +--rw if-name? if:interface-ref 113 +--rw timers 114 | +--rw update-interval? uint16 115 | +--rw invalid-interval? uint16 116 | +--rw holddown-interval? uint16 117 | +--rw flush-interval? uint16 118 +--rw interface* [interface] 119 +--rw interface if:interface-ref 120 +--rw authentication 121 | +--rw (auth-type-selection)? 122 | +--:(auth-key-chain) 123 | | +--rw key-chain? key-chain:key-chain-ref 124 | +--:(auth-key) 125 | +--rw key? string 126 | +--rw crypto-algorithm 127 | +--rw (algorithm)? 128 | +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}? 129 | | +--rw hmac-sha1-12? empty 130 | +--:(md5) 131 | | +--rw md5? empty 132 | +--:(sha-1) 133 | | +--rw sha-1? empty 134 | +--:(hmac-sha-1) 135 | | +--rw hmac-sha-1? empty 136 | +--:(hmac-sha-256) 137 | | +--rw hmac-sha-256? empty 138 | +--:(hmac-sha-384) 139 | | +--rw hmac-sha-384? empty 140 | +--:(hmac-sha-512) 141 | +--rw hmac-sha-512? empty 142 +--rw bfd? boolean {bfd}? 143 +--rw cost? uint8 144 +--rw neighbors {neighbor-configuration}? 145 | +--rw neighbor* [address] 146 | +--rw address inet:ip-address 147 +--rw no-listen? empty 148 +--rw no-supply? empty 149 +--rw originate-default-route! 150 | +--rw route-map? string 151 +--rw split-horizon? enumeration 152 +--rw summary-address 153 | +--rw address? inet:ip-prefix 154 | +--rw metric? uint8 155 +--rw timers 156 +--rw update-interval? uint16 157 +--rw invalid-interval? uint16 158 +--rw holddown-interval? uint16 159 +--rw flush-interval? uint16 160 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols 161 /rt:routing-protocol: 162 +--ro rip 163 +--ro originate-default-route! 164 | +--ro route-map? string 165 +--ro default-metric? uint8 166 +--ro distance? uint8 167 +--ro flash-update-threshold? uint8 168 +--ro maximum-paths? uint8 169 +--ro output-delay? uint8 170 +--ro distribute-list* [prefix-list-name direction] 171 | +--ro prefix-list-name string 172 | +--ro direction enumeration 173 | +--ro if-name? if:interface-ref 174 +--ro next-flash-update? uint32 175 +--ro num-of-routes? uint32 176 +--ro routing-table-version? uint32 177 +--ro timers 178 | +--ro update-interval? uint16 179 | +--ro invalid-interval? uint16 180 | +--ro holddown-interval? uint16 181 | +--ro flush-interval? uint16 182 +--ro interface* [interface] 183 | +--ro interface if:interface-ref 184 | +--ro oper-status? enumeration 185 | +--ro cost? uint8 186 | +--ro listen? boolean 187 | +--ro next-full-update? uint32 188 | +--ro originate-default-route? boolean 189 | +--ro poison-reverse? boolean 190 | +--ro split-horizon? boolean 191 | +--ro supply? boolean 192 | +--ro valid-address? boolean 193 | +--ro timers 194 | | +--ro update-interval? uint16 195 | | +--ro invalid-interval? uint16 196 | | +--ro holddown-interval? uint16 197 | | +--ro flush-interval? uint16 198 | +--ro statistics {interface-statistics}? 199 | +--ro discontinuity-time? yang:date-and-time 200 | +--ro bad-packets-rcvd? yang:counter32 201 | +--ro bad-routes-rcvd? yang:counter32 202 | +--ro updates-sent? yang:counter32 203 +--ro ipv4 204 | +--ro neighbors 205 | | +--ro neighbor* [ipv4-address] 206 | | +--ro ipv4-address inet:ipv4-address 207 | | +--ro last-update? yang:date-and-time 208 | | +--ro bad-packets-rcvd? yang:counter32 209 | | +--ro bad-routes-rcvd? yang:counter32 210 | +--ro routes 211 | +--ro route* [ipv4-prefix] 212 | +--ro ipv4-prefix inet:ipv4-prefix 213 | +--ro next-hop? inet:ipv4-address 214 | +--ro interface? if:interface-ref 215 | +--ro redistributed? boolean 216 | +--ro route-type? enumeration 217 | +--ro metric? uint8 218 | +--ro expire-time? uint16 219 | +--ro deleted? boolean 220 | +--ro holddown? boolean 221 | +--ro need-flash? boolean 222 | +--ro need-download-to-rib? boolean 223 | +--ro inactive? boolean 224 | +--ro next-hop-flags? bits 225 +--ro ipv6 226 | +--ro neighbors 227 | | +--ro neighbor* [ipv6-address] 228 | | +--ro ipv6-address inet:ipv6-address 229 | | +--ro last-update? yang:date-and-time 230 | | +--ro bad-packets-rcvd? yang:counter32 231 | | +--ro bad-routes-rcvd? yang:counter32 232 | +--ro routes 233 | +--ro route* [ipv6-prefix] 234 | +--ro ipv6-prefix inet:ipv6-prefix 235 | +--ro next-hop? inet:ipv6-address 236 | +--ro interface? if:interface-ref 237 | +--ro redistributed? boolean 238 | +--ro route-type? enumeration 239 | +--ro metric? uint8 240 | +--ro expire-time? uint16 241 | +--ro deleted? boolean 242 | +--ro holddown? boolean 243 | +--ro need-flash? boolean 244 | +--ro need-download-to-rib? boolean 245 | +--ro inactive? boolean 246 | +--ro next-hop-flags? bits 247 +--ro statistics {global-statistics}? 248 +--ro discontinuity-time? yang:date-and-time 249 +--ro requests-rcvd? yang:counter32 250 +--ro requests-sent? yang:counter32 251 +--ro responses-rcvd? yang:counter32 252 +--ro responses-sent? yang:counter32 253 rpcs: 254 +---x clear-rip-route 255 +--ro input 256 +--ro instance-name? leafref 258 3. RIP YANG module 260 file "ietf-rip@2015-06-22.yang" 261 module ietf-rip { 262 namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; 263 // replace with IANA namespace when assigned 264 prefix rip; 266 import ietf-inet-types { 267 prefix "inet"; 268 } 270 import ietf-yang-types { 271 prefix "yang"; 272 } 274 import ietf-interfaces { 275 prefix "if"; 276 } 278 import ietf-ip { 279 prefix "ip"; 280 } 282 import ietf-routing { 283 prefix "rt"; 284 } 286 import ietf-key-chain { 287 prefix "key-chain"; 288 } 290 organization "TBD"; 291 contact "TBD"; 292 description 293 "This YANG module defines a model for managing Routing 294 Information Protocol (RIP), including RIP version 2 and RIPng."; 296 revision 2015-06-22 { 297 description 298 "Initial revision."; 300 reference 301 "RFC 2453: RIP Version 2. 302 RFC 2080: RIPng for IPv6. 303 RFC 1724: RIP Version 2 MIB Extension."; 304 } 306 /* 307 * Features 308 */ 310 feature global-statistics { 311 description 312 "This feature indicates that the system supports collecting 313 global statistic data."; 314 } 316 feature interface-statistics { 317 description 318 "This feature indicates that the system supports collecting 319 per-interface statistic data."; 320 } 322 feature bfd { 323 description 324 "This feature indicates that the system supports BFD."; 325 } 327 feature neighbor-configuration { 328 description 329 "This feature indicates that the system supports 330 neighbor configuration."; 331 } 333 /* 334 * Identities 335 */ 337 identity rip { 338 base "rt:routing-protocol"; 339 description "Identity for the RIP routing protocol."; 340 } 341 identity ripv2 { 342 base "rip:rip"; 343 description "RIPv2"; 344 } 346 identity ripng { 347 base "rip:rip"; 348 description "RIPng"; 349 } 351 /* 352 * Groupings 353 */ 355 grouping originate-default-route-container { 356 description 357 "Container for setting of originating default route."; 358 container originate-default-route { 359 presence "Present if originating default route is enabled."; 360 description 361 "Injects the default route into the RIP or RIPng 362 instance."; 363 leaf route-map { 364 type string; 365 description 366 "The conditions of the route map are applied to the default 367 route."; 368 } 369 } 370 } 372 grouping timers-container { 373 description 374 "Container for settings of basic timers"; 375 container timers { 376 must "invalid-interval >= (update-interval * 3)" { 377 description 378 "invalid-interval must be at least three times the value 379 for the update-interval argument."; 380 } 381 must "flush-interval > invalid-interval" { 382 description 383 "flush-interval must be larger than the value for the 384 invalid-interval argument"; 385 } 386 description 387 "Timers for the specified RIP or RIPng instance or 388 interface."; 389 leaf update-interval { 390 type uint16 { 391 range 1..32767; 392 } 393 units seconds; 394 default 30; 395 description 396 "Interval at which RIP or RIPng updates are sent."; 397 } 398 leaf invalid-interval { 399 type uint16 { 400 range 1..32767; 401 } 402 units seconds; 403 default 180; 404 description 405 "Interval before a route is declared invalid after no 406 updates are received. This value is at least three times 407 the value for the update-interval argument."; 408 } 409 leaf holddown-interval { 410 type uint16 { 411 range 1..32767; 412 } 413 units seconds; 414 default 180; 415 description 416 "Interval before better routes are released."; 417 } 418 leaf flush-interval { 419 type uint16 { 420 range 1..32767; 421 } 422 units seconds; 423 default 240; 424 description 425 "Interval before a route is flushed from the routing 426 table. This value must be larger than the value for the 427 invalid-interval argument."; 428 } 429 } // timers 430 } 432 grouping global-attributes { 433 description 434 "Global configuration and state attributes."; 435 uses originate-default-route-container; 437 leaf default-metric { 438 type uint8 { 439 range 0..16; 440 } 441 default 0; 442 description 443 "Set the default metric."; 444 } 446 leaf distance { 447 type uint8 { 448 range 1..255; 449 } 450 default 120; 451 description 452 "The administrative distance of the RIP or RIPng for the 453 current RIP or RIPng instance."; 454 } 456 leaf flash-update-threshold { 457 type uint8 { 458 range 1..30; 459 } 460 units seconds; 461 default 5; 462 description 463 "The minimum interval between consecutive RIP or RIPng 464 flash updates."; 465 } 467 leaf maximum-paths { 468 type uint8 { 469 range 1..16; 470 } 471 default 8; 472 description 473 "The number of multiple equal-cost RIP or RIPng routes 474 that can be used as the best paths for balancing the load 475 of outgoing traffic packets."; 476 } 478 leaf output-delay { 479 type uint8 { 480 range 1..50; 481 } 482 units milliseconds; 483 description 484 "A delay time between packets sent in multipacket 485 RIP or RIPng updates."; 486 } 487 } // global-attributes 489 grouping distribute-lists { 490 description 491 "Grouping for distribute lists."; 492 list distribute-list { 493 key "prefix-list-name direction"; 494 description 495 "List of distribute-lists, which are used to filter in-coming 496 or out-going routing updates."; 498 leaf prefix-list-name { 499 type string; 500 description 501 "Reference to a prefix list to be applied to RIP or 502 RIPng packets."; 503 } 504 leaf direction { 505 type enumeration { 506 enum "in" { 507 description 508 "Apply the distribute-list to in-coming routes."; 509 } 510 enum "out" { 511 description 512 "Apply the distribute-list to out-going routes."; 513 } 514 } 515 description 516 "Direction of the routing updates."; 517 } 519 leaf if-name { 520 type if:interface-ref; 521 description 522 "Reference to an interface to which the prefix list is 523 applied."; 524 } 525 } 526 } // distribute-lists 528 grouping route-attributes { 529 description 530 "Grouping for route attributes."; 531 leaf redistributed { 532 type boolean; 533 description 534 "Redistributed routes"; 535 } 537 leaf route-type { 538 type enumeration { 539 enum connected { 540 description "Connected route."; 541 } 542 enum external { 543 description "External route."; 545 } 546 enum external-backup { 547 description "External backup route."; 548 } 549 enum rip { 550 description "RIP route."; 551 } 552 } 553 description 554 "Route type."; 555 } 556 leaf metric { 557 type uint8 { 558 range 0..16; 559 } 560 description "Route metric."; 561 } 562 leaf expire-time { 563 type uint16; 564 description "Expiration time."; 565 } 566 leaf deleted { 567 type boolean; 568 description "Deleted route."; 569 } 570 leaf holddown { 571 type boolean; 572 description "Holddown route."; 573 } 574 leaf need-flash { 575 type boolean; 576 description "The route needs flash."; 577 } 578 leaf need-download-to-rib { 579 type boolean; 580 description "The route needs to be downloaded to rib."; 581 } 582 leaf inactive { 583 type boolean; 584 description "The route is inactive."; 585 } 586 leaf next-hop-flags { 587 type bits { 588 bit withdrawn-from-rib { 589 description "The route is withdrawn from rib."; 590 } 591 bit holddown { 592 description "The route is holddown."; 593 } 594 bit flush-expire-before-holddown { 595 description 596 "The flush timer expired before holddown time."; 597 } 598 } 599 description "The next hop properties of the route."; 600 } 601 } // route-attribute 603 /* 604 * Configuration data nodes 605 */ 607 augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" 608 + "rt:routing-protocol" { 609 when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { 610 description 611 "This augment is only valid for a routing protocol instance 612 of RIP (type 'ripv2' or 'ripng')."; 613 } 614 description "RIP augmentation."; 616 container rip { 617 description 618 "RIP configuration data."; 620 uses global-attributes; 621 uses distribute-lists; 622 uses timers-container; 624 list interface { 625 key "interface"; 626 description 627 "List of RIP interfaces."; 628 leaf interface { 629 type if:interface-ref; 630 must "(../../../rt:type = 'rip:ripv2' and " 631 + "/if:interfaces/if:interface[name=current()]/" 632 + "ip:ipv4) or " 633 + "(../../../rt:type = 'rip:ripng' and " 634 + "/if:interfaces/if:interface[name=current()]/" 635 + "ip:ipv6)" { 636 error-message "Invalid interface type."; 637 description 638 "RIPv2 can be enabled on IPv4 interfae, and 639 RIPng can be enabled on IPv6 interface."; 640 } 641 description 642 "Enable RIP on this interface."; 643 } 645 container authentication { 646 when "../../../rt:type = 'rip:ripv2'" { 647 description "Only applicable to RIPv2."; 648 } 649 description 650 "Enables authentication and specifies the authentication 651 scheme for the RIP interface"; 652 choice auth-type-selection { 653 description 654 "Specify the authentication scheme. 655 The use of the key-chain reference here is: 656 1) Designed to align with other proposed protocol 657 models. 658 2) Not finalized, pending resolution of alignment with 659 the RFC published KeyTables information model."; 660 case auth-key-chain { 661 leaf key-chain { 662 type key-chain:key-chain-ref; 663 description 664 "key-chain name"; 665 } 666 } 667 case auth-key { 668 leaf key { 669 type string; 670 description 671 "Key string in ASCII format."; 672 } 673 container crypto-algorithm { 674 uses key-chain:crypto-algorithm-types; 675 description 676 "Cryptographic algorithm associated with key."; 678 } 679 } 680 } 681 } 683 leaf bfd { 684 if-feature bfd; 685 type boolean; 686 description 687 "Enable/disable bfd."; 688 } 690 leaf cost { 691 type uint8 { 692 range 1..16; 693 } 694 default 1; 695 description 696 "Interface cost."; 697 } 699 container neighbors { 700 if-feature neighbor-configuration; 701 description 702 "Specifies the RIP neighbors. Useful for a non-broadcast 703 multiple access (NBMA) network."; 704 list neighbor { 705 key "address"; 706 description 707 "Specify a RIP neighbor on a non-broadcast network."; 708 leaf address { 709 type inet:ip-address; 710 description "Neighbor IP address."; 711 } 712 } 713 } 715 leaf no-listen { 716 type empty; 717 description 718 "Disable the specified interface to receive (listen to) 719 and process RIP or RIPng packets."; 720 } 722 leaf no-supply { 723 type empty; 724 description 725 "Disables sending of RIP or RIPng packets on the 726 specified interface."; 727 } 729 uses originate-default-route-container; 731 leaf split-horizon { 732 type enumeration { 733 enum simple { 734 description 735 "Enables simple split-horizon processing."; 736 } 737 enum poison { 738 description 739 "Enables split-horizon processing with poison 740 reverse."; 741 } 742 } 743 default simple; 744 description 745 "Enables RIP or RIPng split-horizon processing on the 746 specified interface."; 747 } 749 container summary-address { 750 description 751 "Summarizes information about RIP or RIPng routes sent 752 over the specified interface in RIP or RIPng update 753 packets."; 754 leaf address { 755 type inet:ip-prefix; 756 description 757 "IPv4 address, in the form A.B.C.D, and the prefix 758 length, separated by the slash (/) character; 759 or IPv6 address, in the form A:B:C:D:E:F:G:H, and the 760 prefix length, separated by the slash (/) character."; 761 } 762 leaf metric { 763 type uint8 { 764 range 0..16; 765 } 766 description 767 "Metric used for the route. If this attribute is not 768 used, the value set through the default-metric 769 attribute in RIP or RIPng router configuration is 770 used for the route. "; 771 } 772 } 774 uses timers-container; 775 } // interface 776 } // container rip 777 } 779 /* 780 * Operational state data nodes 781 */ 783 augment "/rt:routing-state/rt:routing-instance/" 784 + "rt:routing-protocols/rt:routing-protocol" { 785 when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { 786 description 787 "This augment is only valid for a routing protocol instance 788 of type 'ripv2' or 'ripng'."; 789 } 790 description 791 "RIP state."; 792 container rip { 793 description "RIP operational state."; 795 uses global-attributes; 796 uses distribute-lists; 798 leaf next-flash-update { 799 type uint32; 800 description 801 "Next flash update."; 802 } 803 leaf num-of-routes { 804 type uint32; 805 description 806 "The number of routes."; 807 } 808 leaf routing-table-version { 809 type uint32; 810 description 811 "Routing table version."; 812 } 814 uses timers-container; 816 list interface { 817 key "interface"; 818 description 819 "List of RIP interfaces."; 820 leaf interface { 821 type if:interface-ref; 822 description 823 "Enable RIP on this interface."; 824 } 825 leaf oper-status { 826 type enumeration { 827 enum up { 828 description 829 "RIPv2 or RIPng is operational on this interface."; 830 } 831 enum down { 832 description 833 "RIPv2 or RIPng is not operational on this 834 interface."; 835 } 836 } 837 description 838 "Operational state."; 839 } 840 leaf cost { 841 type uint8 { 842 range 1..16; 843 } 844 default 1; 845 description 846 "Interface cost."; 847 } 848 leaf listen { 849 type boolean; 850 description 851 "The interface is enabled to receive (listen to) 852 and process RIP or RIPng packets."; 853 } 854 leaf next-full-update { 855 type uint32; 856 description 857 "Next full update time."; 858 } 859 leaf originate-default-route { 860 type boolean; 861 description 862 "'true' if originating default route is enabled."; 863 } 864 leaf poison-reverse { 865 type boolean; 866 description 867 "'true' if Split Horizon with Poisoned Reverse is 868 enabled."; 869 } 870 leaf split-horizon { 871 type boolean; 872 description 873 "'true' if Split Horizon processing is enabled."; 874 } 875 leaf supply { 876 type boolean; 877 description 878 "The interface is enabled to supply (send) RIP or RIPng 879 packets."; 880 } 881 leaf valid-address { 882 type boolean; 883 description 884 "The interface has a valid address."; 885 } 886 uses timers-container; 888 container statistics { 889 if-feature interface-statistics; 890 description 891 "Interface statistic counters."; 892 leaf discontinuity-time { 893 type yang:date-and-time; 894 description 895 "The time on the most recent occasion at which any one 896 or more of the statistic counters suffered a 897 discontinuity. If no such discontinuities have occurred 898 since the last re-initialization of the local 899 management subsystem, then this node contains the time 900 the local management subsystem re-initialized itself."; 901 } 902 leaf bad-packets-rcvd { 903 type yang:counter32; 904 description 905 "The number of RIP invalid packets received by 906 the RIP process which were subsequently discarded 907 for any reason (e.g. a version 0 packet, or an 908 unknown command type)."; 909 } 910 leaf bad-routes-rcvd { 911 type yang:counter32; 912 description 913 "The number of routes, in valid RIP packets, 914 which were ignored for any reason (e.g. unknown 915 address family, or invalid metric)."; 916 } 917 leaf updates-sent { 918 type yang:counter32; 919 description 920 "The number of triggered RIP updates actually 921 sent on this interface. This explicitly does 922 NOT include full updates sent containing new 923 information."; 924 } 925 } 926 } // interface 928 container ipv4 { 929 when "../../rt:type = 'rip:ripv2'" { 930 description 931 "IPv4 address family is supported by RIPv2."; 932 } 933 description 934 "IPv4 address family information."; 935 container neighbors { 936 description 937 "IPv4 neighbor information."; 938 list neighbor { 939 key "ipv4-address"; 940 description 941 "A RIPv2 RIP neighbor."; 943 leaf ipv4-address { 944 type inet:ipv4-address; 945 description 946 "IP address that a RIP neighbor is using as its 947 source address."; 948 } 949 leaf last-update { 950 type yang:date-and-time; 951 description 952 "The time when the most recent RIP update was 953 received from this neighbor."; 954 } 955 leaf bad-packets-rcvd { 956 type yang:counter32; 957 description 958 "The number of RIP invalid packets received from 959 this neighbor which were subsequently discarded 960 for any reason (e.g. a version 0 packet, or an 961 unknown command type)."; 962 } 963 leaf bad-routes-rcvd { 964 type yang:counter32; 965 description 966 "The number of routes received from this neighbor, 967 in valid RIP packets, which were ignored for any 968 reason (e.g. unknown address family, or invalid 969 metric)."; 970 } 971 } // neighbor 972 } // neighbors 973 container routes { 974 description 975 "IPv4 route information."; 976 list route { 977 key "ipv4-prefix"; 978 description 979 "A RIPv2 IPv4 route."; 981 leaf ipv4-prefix { 982 type inet:ipv4-prefix; 983 description 984 "IP address (in the form A.B.C.D) and prefix length, 985 separated by the slash (/) character. The range of 986 values for the prefix-length is 0 to 32."; 987 } 988 leaf next-hop { 989 type inet:ipv4-address; 990 description 991 "Next hop IPv4 address."; 992 } 993 leaf interface { 994 type if:interface-ref; 995 description 996 "The interface that the route uses."; 997 } 998 uses route-attributes; 999 } // route 1000 } // routes 1001 } // ipv4 1002 container ipv6 { 1003 when "../../rt:type = 'rip:ripng'" { 1004 description 1005 "IPv6 address family is supported by RIPng."; 1006 } 1007 description 1008 "IPv6 address family information."; 1009 container neighbors { 1010 description 1011 "IPv6 neighbor information."; 1012 list neighbor { 1013 key "ipv6-address"; 1014 description 1015 "A RIPv2 RIP neighbor."; 1017 leaf ipv6-address { 1018 type inet:ipv6-address; 1019 description 1020 "IP address that a RIP neighbor is using as its 1021 source address."; 1022 } 1023 leaf last-update { 1024 type yang:date-and-time; 1025 description 1026 "The time when the most recent RIP update was 1027 received from this neighbor."; 1028 } 1029 leaf bad-packets-rcvd { 1030 type yang:counter32; 1031 description 1032 "The number of RIP invalid packets received from 1033 this neighbor which were subsequently discarded 1034 for any reason (e.g. a version 0 packet, or an 1035 unknown command type)."; 1036 } 1037 leaf bad-routes-rcvd { 1038 type yang:counter32; 1039 description 1040 "The number of routes received from this neighbor, 1041 in valid RIP packets, which were ignored for any 1042 reason (e.g. unknown address family, or invalid 1043 metric)."; 1044 } 1045 } // neighbor 1046 } // neighbors 1047 container routes { 1048 description 1049 "IPv6 route information."; 1050 list route { 1051 key "ipv6-prefix"; 1052 description 1053 "A RIPng IPv6 route."; 1055 leaf ipv6-prefix { 1056 type inet:ipv6-prefix; 1057 description 1058 "IP address (in the canonical format defined in 1059 RFC5952)and prefix length, separated by the slash (/) 1060 character. The range of values for the prefix-length 1061 is 0 to 128."; 1062 } 1063 leaf next-hop { 1064 type inet:ipv6-address; 1065 description 1066 "Next hop IPv6 address."; 1067 } 1068 leaf interface { 1069 type if:interface-ref; 1070 description 1071 "The interface that the route uses."; 1072 } 1073 uses route-attributes; 1074 } // route 1075 } // routes 1076 } // ipv6 1077 container statistics { 1078 if-feature global-statistics; 1079 description 1080 "Global statistic counters."; 1081 leaf discontinuity-time { 1082 type yang:date-and-time; 1083 description 1084 "The time on the most recent occasion at which any one 1085 or more of the statistic counters suffered a 1086 discontinuity. If no such discontinuities have occurred 1087 since the last re-initialization of the local 1088 management subsystem, then this node contains the time 1089 the local management subsystem re-initialized itself."; 1090 } 1091 leaf requests-rcvd { 1092 type yang:counter32; 1093 description 1094 "The number of requests received by RIP."; 1095 } 1096 leaf requests-sent { 1097 type yang:counter32; 1098 description 1099 "The number of requests sent by RIP."; 1100 } 1101 leaf responses-rcvd { 1102 type yang:counter32; 1103 description 1104 "The number of responses received by RIP."; 1105 } 1106 leaf responses-sent { 1107 type yang:counter32; 1108 description 1109 "The number of responses sent by RIP."; 1110 } 1111 } 1112 } // rip 1113 } // augment 1115 /* 1116 * RPCs 1117 */ 1119 rpc clear-rip-route { 1120 description 1121 "Clears RIP routes from the IP routing table and routes 1122 redistributed into the RIP protocol for the specified RIP 1123 instance or for all RIP instances in the current context."; 1125 input { 1126 leaf instance-name { 1127 type leafref { 1128 path "/rt:routing/rt:routing-instance/" 1129 + "rt:routing-protocols/rt:routing-protocol/rt:name"; 1130 } 1131 description 1132 "Instance name identifying the specific RIP Instance."; 1133 } 1134 } 1135 } // rcp clear-rip-route 1136 } 1137 1139 4. IANA Considerations 1141 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1142 actual RFC number (and remove this note). 1144 This document registers the following namespace URIs in the IETF XML 1145 registry [RFC3688]: 1147 -------------------------------------------------------------------- 1148 name: ietf-rip 1149 namespace: urn:ietf:params:xml:ns:yang:ietf-rip 1150 prefix: rip 1151 reference: RFC XXXX 1152 -------------------------------------------------------------------- 1154 5. Security Considerations 1156 The configuration, state, and action data defined in this document 1157 are designed to be accessed via the NETCONF protocol [RFC6241]. The 1158 data-model by itself does not create any security implications. The 1159 security considerations for the NETCONF protocol are applicable. The 1160 NETCONF protocol used for sending the data supports authentication 1161 and encryption. 1163 6. References 1165 6.1. Normative References 1167 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1168 Network Configuration Protocol (NETCONF)", RFC 6020, 1169 October 2010. 1171 [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, 1172 July 2013. 1174 [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, 1175 "Network Configuration Protocol (NETCONF)", RFC 6241, June 1176 2011. 1178 [RFC2453] G. Malkin, "RIP Version 2", RFC2453, November 1998. 1180 [RFC2080] G. Malkin and R. Minnear, "RIPng for IPv6", RFC2080, 1181 January 1997. 1183 [RFC1724] G. Malkin and F. Baker, "RIP Version 2 MIB Extension", 1184 RFC1724, November 1994. 1186 6.2. Informative References 1188 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1189 Data Model Documents", RFC 6087, January 2011. 1191 Authors' Addresses 1193 Xufeng Liu 1194 Ericsson 1195 1595 Spring Hill Road, Suite 500 1196 Vienna, VA 22182 1197 USA 1199 Email: xufeng.liu@ericsson.com 1201 Prateek Sarda 1202 Ericsson India Global Services Pvt. Ltd. 1203 Fern Icon, Survey No 28 and 36/5, Doddanakundi Village 1204 Bangalore, Karnataka 560037 1205 India 1207 Email: prateek.sarda@ericsson.com 1209 Vikram Choudhary 1210 Huawei Technologies 1211 Divyashree Techno Park, Whitefield 1212 Bangalore, Karnataka 560037 1213 India 1215 Email: vikram.choudhary@huawei.com