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