idnits 2.17.1 draft-zhang-rift-yang-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 : ---------------------------------------------------------------------------- ** There are 88 instances of too long lines in the document, the longest one being 43 characters in excess of 72. ** The document seems to lack a both a reference to RFC 2119 and the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. RFC 2119 keyword, line 311: '...overload bit set SHOULD NOT advertise ...' RFC 2119 keyword, line 312: '...ally hosted ones. The leaf node SHOULD...' Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 112 has weird spacing: '...rw name str...' == Line 145 has weird spacing: '...ocal-id uin...' == Line 153 has weird spacing: '...s-index uin...' == Line 172 has weird spacing: '...ocal-id uin...' == Line 197 has weird spacing: '...ocal-id uin...' -- The document date (September 20, 2018) is 2038 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) == Unused Reference: 'I-D.ietf-netmod-rfc6087bis' is defined on line 957, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-rtgwg-policy-model' is defined on line 967, but no explicit reference was found in the text == Unused Reference: 'RFC6087' is defined on line 986, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 1004, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 1008, but no explicit reference was found in the text == Unused Reference: 'RFC7277' is defined on line 1012, but no explicit reference was found in the text == Unused Reference: 'RFC8177' is defined on line 1024, but no explicit reference was found in the text == Outdated reference: A later version (-21) exists of draft-ietf-rift-rift-02 == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-03 ** Obsolete normative reference: RFC 5246 (Obsoleted by RFC 8446) ** Obsolete normative reference: RFC 6087 (Obsoleted by RFC 8407) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) ** Obsolete normative reference: RFC 7277 (Obsoleted by RFC 8344) Summary: 7 errors (**), 0 flaws (~~), 15 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 RIFT WG Zheng. Zhang 3 Internet-Draft Yuehua. Wei 4 Intended status: Standards Track ZTE Corporation 5 Expires: March 24, 2019 Shaowen. Ma 6 Juniper 7 Xufeng. Liu 8 Volta Networks 9 September 20, 2018 11 RIFT YANG Model 12 draft-zhang-rift-yang-01 14 Abstract 16 This document defines a YANG data model for the configuration and 17 management of RIFT Protocol. 19 Status of This Memo 21 This Internet-Draft is submitted in full conformance with the 22 provisions of BCP 78 and BCP 79. 24 Internet-Drafts are working documents of the Internet Engineering 25 Task Force (IETF). Note that other groups may also distribute 26 working documents as Internet-Drafts. The list of current Internet- 27 Drafts is at https://datatracker.ietf.org/drafts/current/. 29 Internet-Drafts are draft documents valid for a maximum of six months 30 and may be updated, replaced, or obsoleted by other documents at any 31 time. It is inappropriate to use Internet-Drafts as reference 32 material or to cite them other than as "work in progress." 34 This Internet-Draft will expire on March 24, 2019. 36 Copyright Notice 38 Copyright (c) 2018 IETF Trust and the persons identified as the 39 document authors. All rights reserved. 41 This document is subject to BCP 78 and the IETF Trust's Legal 42 Provisions Relating to IETF Documents 43 (https://trustee.ietf.org/license-info) in effect on the date of 44 publication of this document. Please review these documents 45 carefully, as they describe your rights and restrictions with respect 46 to this document. Code Components extracted from this document must 47 include Simplified BSD License text as described in Section 4.e of 48 the Trust Legal Provisions and are provided without warranty as 49 described in the Simplified BSD License. 51 Table of Contents 53 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 54 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 2 55 3. RIFT configuration . . . . . . . . . . . . . . . . . . . . . 5 56 4. RIFT State . . . . . . . . . . . . . . . . . . . . . . . . . 5 57 5. RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 58 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 5 59 7. RIFT YANG model . . . . . . . . . . . . . . . . . . . . . . . 5 60 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 61 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 62 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 20 63 11. Normative References . . . . . . . . . . . . . . . . . . . . 21 64 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 66 1. Introduction 68 [I-D.ietf-rift-rift] introduces the protocol definition of RIFT. 69 This document defines a YANG data model that can be used to configure 70 and manage the RIFT protocol. The model is based on YANG 1.1 as 71 defined in [RFC7950] and conforms to the Network Management Datastore 72 Architecture (NDMA) as described in [RFC8342] 74 2. Design of the Data Model 76 This model imports and augments ietf-routing YANG model defined in 77 [RFC8349]. Both configuration branch and state branch of [RFC8349] 78 are augmented. The configuration branch covers node base and policy 79 configuration. The neighbor state will be added in later version. 80 The container "rift" is the top level container in this data model. 81 The presence of this container is expected to enable RIFT protocol 82 functionality. 84 module: ietf-rift 85 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 86 +--rw rift! 87 +--rw node-info 88 | +--rw systemid systemid 89 | +--rw address? inet:ip-address 90 | +--rw level-flag? enumeration 91 | +--rw level-value? level-value 92 | +--rw name? string 93 | +--rw pod? uint16 94 | +--rw hal? level-value 95 | +--rw ol? boolean {overload}? 96 | +--rw ztp? boolean {ztp-mode}? 97 | +--rw bfd? boolean {bfd}? 98 | +--rw default-originate? boolean {default-route-originate}? 99 | +--rw flood-reducing? boolean {flood-reducing}? 100 | +--rw interfaces* [local-id] 101 | | +--rw local-id uint32 102 | | +--rw name? if:interface-ref 103 | | +--rw intf-type 104 | | +--rw link-type? enumeration 105 | +--rw community 106 | | +--rw community* [type value] 107 | | +--rw type enumeration 108 | | +--rw value uint64 109 | | +--rw action? enumeration 110 | +--rw policy-info {policy}? 111 | +--rw policy* [name] 112 | +--rw name string 113 +--ro neighbor 114 | +--ro nbrs* [systemid remote-id] 115 | +--ro systemid systemid 116 | +--ro address? inet:ip-address 117 | +--ro level-flag? enumeration 118 | +--ro level-value? level-value 119 | +--ro name? string 120 | +--ro pod? uint16 121 | +--ro remote-id uint32 122 | +--ro distance? uint32 123 | +--ro local-id? uint32 124 +--ro database 125 | +--ro ties* [tie-index] 126 | | +--ro tie-index uint32 127 | | +--ro database-tie 128 | | +--ro originator? systemid 129 | | +--ro direction 130 | | | +--ro direction-type? enumeration 131 | | +--ro type 132 | | | +--ro tie-type? enumeration 133 | | +--ro link-type 134 | | | +--ro link-type? enumeration 135 | | +--ro seq? uint32 136 | | +--ro lifetime? uint16 137 | | +--ro tie-node 138 | | | +--ro layer? level-value 139 | | | +--ro nbr-info 140 | | | | +--ro nbr-addr? inet:ip-address 141 | | | | +--ro distance? uint32 142 | | | | +--ro nbr-layer? level-value 143 | | | | +--ro cost? uint32 144 | | | +--ro link-set* [local-id] 145 | | | +--ro local-id uint32 146 | | +--ro tie-prefix 147 | | +--ro prefix? inet:ip-prefix 148 | | +--ro cost? uint32 149 | +--ro (algorighm-type)? 150 | +--:(spf) 151 +--ro kv-store 152 +--ro kvs* [kvs-index] 153 +--ro kvs-index uint32 154 +--ro kvs-tie 155 +--ro originator? systemid 156 +--ro direction 157 | +--ro direction-type? enumeration 158 +--ro type 159 | +--ro tie-type? enumeration 160 +--ro link-type 161 | +--ro link-type? enumeration 162 +--ro seq? uint32 163 +--ro lifetime? uint16 164 +--ro tie-node 165 | +--ro layer? level-value 166 | +--ro nbr-info 167 | | +--ro nbr-addr? inet:ip-address 168 | | +--ro distance? uint32 169 | | +--ro nbr-layer? level-value 170 | | +--ro cost? uint32 171 | +--ro link-set* [local-id] 172 | +--ro local-id uint32 173 +--ro tie-prefix 174 +--ro prefix? inet:ip-prefix 175 +--ro cost? uint32 177 notifications: 178 +---n error-set 179 +--ro tie-level-error 180 | +--ro originator? systemid 181 | +--ro direction 182 | | +--ro direction-type? enumeration 183 | +--ro type 184 | | +--ro tie-type? enumeration 185 | +--ro link-type 186 | | +--ro link-type? enumeration 187 | +--ro seq? uint32 188 | +--ro lifetime? uint16 189 | +--ro tie-node 190 | | +--ro layer? level-value 191 | | +--ro nbr-info 192 | | | +--ro nbr-addr? inet:ip-address 193 | | | +--ro distance? uint32 194 | | | +--ro nbr-layer? level-value 195 | | | +--ro cost? uint32 196 | | +--ro link-set* [local-id] 197 | | +--ro local-id uint32 198 | +--ro tie-prefix 199 | +--ro prefix? inet:ip-prefix 200 | +--ro cost? uint32 201 +--ro nbr-error 202 +--ro nbrs* [systemid remote-id] 203 +--ro systemid systemid 204 +--ro address? inet:ip-address 205 +--ro level-flag? enumeration 206 +--ro level-value? level-value 207 +--ro name? string 208 +--ro pod? uint16 209 +--ro remote-id uint32 210 +--ro distance? uint32 211 +--ro local-id? uint32 213 3. RIFT configuration 215 RIFT configurations require node base information configurations. 216 Some features can be used to enhance protocol, such as BFD, flooding- 217 reducing, policy guide information and community attribute. 219 4. RIFT State 221 RIFT states are composed of RIFT node state, neighbor state, database 222 and kv-store. Neighbor's state will be added in later version. 223 Statistics information may be added in later version. 225 5. RPC 227 TBD. 229 6. Notifications 231 Unexpected TIE and neighbor's layer error should be notified. 233 7. RIFT YANG model 235 file "ietf-rift@2018-09-20.yang" 236 module ietf-rift { 238 yang-version 1.1; 239 namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; 240 prefix rift; 242 import ietf-inet-types { 243 prefix "inet"; 244 reference "RFC6991"; 245 } 247 import ietf-routing { 248 prefix "rt"; 249 reference "RFC8349"; 250 } 252 import ietf-interfaces { 253 prefix "if"; 254 reference "RFC7223"; 255 } 257 organization 258 "IETF RIFT(Routing In Fat Trees) Working Group"; 260 contact 261 "WG Web: 262 WG List: 264 Editor: Zheng Zhang 265 267 Editor: Yuehua Wei 268 270 Editor: Shaowen Ma 271 273 Editor: Xufeng Liu 274 "; 276 description 277 "The module defines the YANG definitions for RIFT. 279 Copyright (c) 2018 IETF Trust and the persons 280 identified as authors of the code. All rights reserved. 282 Redistribution and use in source and binary forms, with or 283 without modification, is permitted pursuant to, and subject 284 to the license terms contained in, the Simplified BSD License 285 set forth in Section 4.c of the IETF Trust's Legal Provisions 286 Relating to IETF Documents 287 (http://trustee.ietf.org/license-info). 288 This version of this YANG module is part of RFC 3618; see 289 the RFC itself for full legal notices."; 291 revision 2018-09-20 { 292 description "Initial revision."; 293 reference 294 "RFC XXXX: A YANG Data Model for RIFT. 295 draft-ietf-rift-rift-02: RIFT: Routing in Fat Trees."; 296 } 298 /* 299 * Features 300 */ 301 feature ztp-mode { 302 description "Support Zero Touch Provisioning (ZTP) mode."; 303 } 305 feature default-route-originate { 306 description "Support the orgination of default route. The default route 307 generation must be careful to avoid balck-holing."; 308 } 310 feature overload { 311 description "A node with overload bit set SHOULD NOT advertise any reachability 312 prefixes southbound except locally hosted ones. The leaf node SHOULD 313 set the 'overload' bit on its node TIEs."; 314 } 316 feature bfd { 317 description "Support BFD (RFC5881) function to react quickly to link failures."; 318 } 320 feature flood-reducing { 321 description "Support flood reducing function defined in section 4.2.3.8."; 322 } 324 feature policy { 325 description "Support policy guide information."; 326 } 328 typedef systemid { 329 type string { 330 pattern 331 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 332 } 333 description 334 "This type defines RIFT system id using pattern, 335 system id looks like : 0143.0438.0100.AeF0"; 336 } 338 typedef level-value { 339 type uint8 { 340 range "0 .. 64"; 341 } 342 description "The value of node level. The max value is 64."; 343 } 345 /* 346 * Identity 347 */ 348 identity rift { 349 base rt:routing-protocol; 350 description "Identity for the RIFT routing protocol."; 351 } 353 /* 354 * Groupings 355 */ 356 grouping level-flag { 357 leaf level-flag { 358 type enumeration { 359 enum "auto" { 360 description "Node derive level automatically. Only applied 361 if 'configured' is undefined."; 362 } 363 enum "undefined" { 364 description "The level has not been determined and has not 365 been configured."; 366 } 367 enum "leaf-only" { 368 description "The node will never leave the 'bottom of the 369 hierarchy'. 'Superspine' and 'configured' value 370 cannot be defined at the same time as this flag. 371 It implies configured value of 0."; 372 } 373 enum "configured" { 374 description "This means a level value provided manually. When 375 this is defined a node is not participating in ZTP. 376 'superspine' 'must' not be set when this value is 377 defined; 'leaf-only' can be set only if this value 378 is undefined or set to 0."; 379 } 380 enum "drived" { 381 description "This means the level value computed via automatic 382 level derivation when 'configured' has not been set 383 to something else than 'undefined'."; 384 } 385 enum "l2l" { 386 description "This means leaf to leaf. 'superspine' cannot be 387 defined at the same time as this. It implies 388 'leaf-only' and the according restrictions."; 389 } 390 enum "superspine" { 391 description "'leaf-only' and 'configured' cannot be defined at 392 the same time as this. It implies 'configured' 393 value of 64."; 394 } 395 } 396 description "This node level information."; 397 } 398 description "This node level information."; 399 } 401 grouping level-info { 402 uses level-flag; 404 leaf level-value { 405 type level-value; 406 description "The node's level value."; 407 } 408 description "The 'level' of node. It indicates the position of node in the 409 Clos and Fat Tree network."; 410 } 412 grouping node-key { 413 leaf systemid { 414 type systemid; 415 mandatory true; 416 description "Each node is identified via a SystemID which is 64 bits wide."; 417 } 418 leaf address { 419 type inet:ip-address; 420 description "The loopback address of node. It can be used to indicate 421 the node with system-id."; 422 } 423 description "The key information used to distinguish a node."; 424 } 426 grouping base-node-info { 427 uses node-key; 428 uses level-info; 430 leaf name { 431 type string; 432 description "The name of this node. It won't be used as the key of node, 433 just used for description."; 434 } 435 leaf pod { 436 type uint16; 437 description "Point of Delivery. The self-contained vertical slice of 438 a Clos or Fat Tree network containing normally only 439 level 0 and level 1 nodes. It communicates with nodes 440 in other PoDs via the spine. We number PoDs to distinguish 441 them and use PoD #0 to denote 'undefined' PoD."; 442 } 443 description "The base information of a node."; 444 } 446 grouping neighbor { 447 leaf remote-id { 448 type uint32; 449 description "The remote-id to reach this neighbor."; 450 } 451 leaf distance { 452 type uint32; 453 description "The cost value to arrive this neighbor."; 454 } 455 leaf local-id { 456 type uint32; 457 description "The local-id of link connect to this neighbor."; 458 } 459 description "The neighbor information except for systemid."; 460 } 462 grouping node { 463 uses base-node-info; 465 leaf hal { 466 type level-value; 467 description "The highest defined level value seen from all 468 valid level offers received."; 469 } 470 leaf ol { 471 if-feature overload; 472 type boolean; 473 description "If the overload bit in TIEs should be set."; 474 } 475 leaf ztp { 476 if-feature ztp-mode; 477 type boolean; 478 description "If the node is in ztp mode. If this value is 479 set node should work in ztp mode."; 480 } 481 leaf bfd { 482 if-feature bfd; 483 type boolean; 484 description "If BFD function is enabled to react link failures 485 after neighbor's detection."; 486 } 487 leaf default-originate { 488 if-feature default-route-originate; 489 type boolean; 490 description "If the node can originate southbound default route. 491 This function should be used carefully to avoid black-holing."; 492 } 493 leaf flood-reducing { 494 if-feature flood-reducing; 495 type boolean; 496 description "If the node support flood reducing function defined in section 4.2.3.8."; 497 } 499 description "The information of local node. Includes base information, 500 configurable parameters and features."; 501 } 503 grouping link-type { 504 leaf link-type { 505 type enumeration { 506 enum northbound { 507 description "A link to a node one level up."; 508 } 509 enum southbound { 510 description "A link to a node one level down."; 511 } 512 enum east-west { 513 description "A link between two nodes in the same level."; 514 } 515 enum l2l { 516 description "Leaf to leaf. East-west links at leaf level. 517 It is different from East-west links at other levels."; 518 } 519 } 520 description "The type of a link."; 521 } 522 description "The type of a link."; 523 } 525 grouping interface { 526 list interfaces { 527 key "local-id"; 528 leaf local-id { 529 type uint32; 530 mandatory true; 531 description "The local id of this interface."; 532 } 533 leaf name { 534 type if:interface-ref; 535 description "The interface's name."; 536 } 537 container intf-type { 538 uses link-type; 539 description "The link type of local interface."; 540 } 541 description "The interface information on this node."; 542 } 543 description "The interface information."; 544 } 546 grouping community-action { 547 description "The actions apply on a matching of community."; 548 leaf action { 549 type enumeration { 550 enum prune-nh-required { 551 description "For each next-hop in P.next_hop_set, if 552 the next-hop does not have the community, 553 prune that next-hop from P.next_hop_set."; 554 } 555 enum prune-nh-avoid { 556 description "For each next-hop in P.next_hop_set, if 557 the next-hop has the community, prune that 558 next-hop from P.next_hop_set."; 559 } 560 enum drop-if { 561 description "If node X has community M, discard P."; 562 } 563 enum drop-if-not { 564 description "If node X does not have the community M, discard P."; 565 } 566 enum add-if-node-match { 567 description "If the node X has community S, then add community T to P.community_list."; 568 } 569 } 570 description "The actions apply on a matching of community."; 571 } 572 } 574 grouping community { 575 leaf type { 576 type enumeration { 577 enum top { 578 description "The direction type of community is toward to top."; 579 } 580 enum bottom { 581 description "The direction type of community is toward to bottom."; 582 } 583 } 584 description "community direction type."; 585 } 586 leaf value { 587 type uint64; 588 description "community value."; 589 } 590 uses community-action; 591 description "Community Attribute."; 592 } 594 grouping direction-type { 595 leaf direction-type { 596 type enumeration { 597 enum northbound { 598 description "It means moving towards the top of the Clos or Fat Tree network."; 599 } 600 enum southbound { 601 description "It means moving towards the bottom of the Clos or Fat Tree network."; 602 } 603 } 604 description "The direction type."; 605 } 606 description "The direction type."; 607 } 609 grouping node-element { 610 leaf layer { 611 type level-value; 612 description "The layer of this element."; 613 } 614 container nbr-info { 615 leaf nbr-addr { 616 type inet:ip-address; 617 description "The information used to distinguish a neighbor."; 618 } 619 leaf distance { 620 type uint32; 621 description "The cost value to arrive this neighbor."; 622 } 623 leaf nbr-layer { 624 type level-value; 625 description "The layer of this neighbor."; 626 } 627 leaf cost { 628 type uint32; 629 description "The cost of this neighbor."; 630 } 631 description "The information of this neighbor."; 632 } 634 list link-set { 635 key "local-id"; 636 leaf local-id { 637 type uint32; 638 description "The local id of link."; 639 } 640 description "The link-set information of this TIE."; 641 } 642 description "The detail information in NodeElement of a TIE."; 643 } 645 grouping prefix-info { 646 leaf prefix { 647 type inet:ip-prefix; 648 description "The prefix information."; 649 } 650 leaf cost { 651 type uint32; 652 description "The cost of this prefix."; 653 } 654 description "The detail information of prefix."; 655 } 657 grouping tie-type { 658 leaf tie-type { 659 type enumeration { 660 enum node { 661 description "The node topology information elements."; 662 } 663 enum prefix { 664 description "The prefix topology information elements."; 665 } 666 enum pgp-prefix { 667 description "The PGP prefix information elements."; 668 } 669 enum kv { 670 description "The Key Value information elements."; 672 } 673 } 674 description "The possible TIE's types."; 675 } 676 description "The possible TIE's types."; 677 } 679 grouping tie-id { 680 leaf originator { 681 type systemid; 682 description "The originator's systemid of this TIE."; 683 } 684 container direction { 685 uses direction-type; 686 description "The direction type of this TIE."; 687 } 688 container type { 689 uses tie-type; 690 description "The type of this TIE."; 691 } 692 container link-type { 693 uses link-type; 694 description "The type of link in this TIE."; 695 } 696 description "TIE is the acronym for 'Topology Information Element'. 697 TIEs are exchanged between RIFT nodes to describe parts 698 of a network such as links and address prefixes. This is 699 the TIE identification information."; 700 } 702 grouping tie-info { 703 leaf seq { 704 type uint32; 705 description "The sequence number of a TIE."; 706 } 707 leaf lifetime { 708 type uint16 { 709 range "1 .. 65535"; 710 } 711 description "The lifetime of a TIE."; 712 } 713 container tie-node { 714 uses node-element; 715 description "The node element information in this TIE."; 716 } 717 container tie-prefix { 718 uses prefix-info; 719 description "The prefix information in this TIE."; 721 } 722 description "TIE is the acronym for 'Topology Information Element'. 723 TIEs are exchanged between RIFT nodes to describe parts 724 of a network such as links and address prefixes. This TIE 725 info is used to indicate the state of this TIE. When the 726 type of this TIE is set to 'node', the node-element is 727 making sense. When the type of this TIE is set to other 728 types except for 'node', the prefix-info is making sense."; 729 } 731 grouping pg-info { 732 description "Information that is passed in either southbound direction 733 or north-bound direction by the means of diffusion and can 734 be filtered via policies. Policy-Guidedn Prefixes and KV 735 Ties are examples of Policy-Guided Information."; 736 leaf pg-type { 737 type enumeration { 738 enum pgp { 739 description "Policy-Guided Prefixes allow to support traffic 740 engineering that cannot be achieved by the means 741 of SPF computation or normal node and prefix S-TIE 742 origination. S-PGPs are propagated in south direction 743 only and N-PGPs follow northern direction strictly."; 744 } 745 enum kv-tie { 746 description "A S-TIE that is carrying a set of key value pairs. 747 It can be used to distribute information in the 748 southbound direction within the protocol."; 749 } 750 } 751 description "The types of Policy-Guiden Information."; 752 } 753 container pg-common { 754 uses tie-id; 755 description "The brief key information of this policy. It applies to node-element and prefix as well."; 756 } 757 } 759 grouping algorithm { 760 choice algorighm-type { 761 case spf { 762 description "The algorithm is SPF."; 763 } 764 description "The possible algorithm types."; 765 } 766 description "The computation algorithm types."; 767 } 768 grouping nh-set { 769 list next-hop-set { 770 key "local-id"; 771 leaf local-id { 772 type uint32; 773 description "The local id of interface."; 774 } 775 description "The next-hop set."; 776 } 777 description "The next-hop set."; 778 } 780 /* 781 * Data nodes 782 */ 783 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" { 784 when "derived-from-or-self(rt:type, 'rift:rift')" { 785 description "This augment is only valid for a routing protocol instance of RIFT."; 786 } 787 description "RIFT ( Routing in Fat Trees ) YANG model."; 788 container rift { 789 presence "Container for RIFT protocol."; 790 description "RIFT configuration data."; 792 container node-info { 793 description "The node information about RIFT."; 794 uses node; 795 uses interface; 796 container community { 797 list community { 798 key "type value"; 799 uses community; 800 description "The community attribute and information."; 801 } 802 description "The community attribute and information set."; 803 } 804 container policy-info { 805 if-feature policy; 806 list policy { 807 key "name"; 808 leaf name { 809 type string; 810 description "The according policy is used as policy-guide information."; 811 } 812 description "The policy information. When the tie-type of pgp/kv is set 813 to 'node', node-element is making sense. When the tie-type 814 of pgp/kv is set to other values except 'node', prefix-info 815 is making sense."; 816 } 817 description "The policy information set."; 818 } 819 } 820 container neighbor { 821 config false; 822 list nbrs { 823 key "systemid remote-id"; 824 uses base-node-info; 825 uses neighbor; 826 /*uses nbr-status;*/ /*The status will be added in later version.*/ 827 description "The information of a neighbor."; 828 } 829 description "The neighbor's information."; 830 }//neighbor 832 container database { 833 config false; 834 list ties { 835 key "tie-index"; 836 leaf tie-index { 837 type uint32; 838 description "The index of a TIE."; 839 } 840 container database-tie { 841 uses tie-id; 842 uses tie-info; 843 description "The TIEs in the database."; 844 } 845 description "The detail information of a TIE."; 846 } 847 uses algorithm; 848 description "The TIEs information in database."; 849 }//database 851 container kv-store { 852 config false; 853 list kvs { 854 key "kvs-index"; 855 leaf kvs-index { 856 type uint32; 857 description "The index of a kv pair."; 858 } 860 container kvs-tie { 861 uses tie-id; 862 uses tie-info; 863 description "The TIEs in the kv-store."; 864 } 865 description "The information used to distinguish a Key/Value pair. 866 When the type of kv is set to 'node', node-element is 867 making sense. When the type of kv is set to other values 868 except 'node', prefix-info is making sense."; 869 } 870 description "The Key/Value store information."; 871 }//kv-store 872 }//rift 873 }//augment 875 /* 876 * RPCs 877 */ 879 /* 880 * Notifications 881 */ 882 notification error-set { 883 description "The errors notification of RIFT."; 884 container tie-level-error { 885 uses tie-id; 886 uses tie-info; 887 description "The level is undefined in the LIEs."; 888 } 889 container nbr-error { 890 list nbrs { 891 key "systemid remote-id"; 892 uses base-node-info; 893 uses neighbor; 894 description "The information of a neighbor."; 895 } 896 description "The neighbor errors set."; 897 } 898 } 899 } 900 902 8. Security Considerations 904 The YANG module specified in this document defines a schema for data 905 that is designed to be accessed via network management protocols such 906 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 907 is the secure transport layer, and the mandatory-to-implement secure 908 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 909 is HTTPS, and the mandatory-to-implement secure transport is TLS 910 [RFC5246]. 912 The NETCONF access control model [RFC6536] provides the means to 913 restrict access for particular NETCONF or RESTCONF users to a 914 preconfigured subset of all available NETCONF or RESTCONF protocol 915 operations and content. 917 There are a number of data nodes defined in this YANG module that are 918 writable/creatable/deletable (i.e., config true, which is the 919 default). These data nodes may be considered sensitive or vulnerable 920 in some network environments. Write operations (e.g., edit-config) 921 to these data nodes without proper protection can have a negative 922 effect on network operations. 924 The RPC operations in this YANG module may be considered sensitive or 925 vulnerable in some network environments. It is thus important to 926 control access to these operations. 928 9. IANA Considerations 930 The IANA is requested to assign two new URIs from the IETF XML 931 registry ([RFC3688]). Authors are suggesting the following URI: 933 URI: urn:ietf:params:xml:ns:yang:ietf-rift 935 Registrant Contact: RIFT WG 937 XML: N/A, the requested URI is an XML namespace 939 This document also requests one new YANG module name in the YANG 940 Module Names registry ([RFC6020]) with the following suggestion: 942 name: ietf-rift 944 namespace: urn:ietf:params:xml:ns:yang:ietf-rift 946 prefix: rift 948 reference: RFC XXXX 950 10. Contributors 952 The authors would like to thank Benchong Xu (xu.benchong@zte.com.cn), 953 for his valuable contributions. 955 11. Normative References 957 [I-D.ietf-netmod-rfc6087bis] 958 Bierman, A., "Guidelines for Authors and Reviewers of YANG 959 Data Model Documents", draft-ietf-netmod-rfc6087bis-20 960 (work in progress), March 2018. 962 [I-D.ietf-rift-rift] 963 Przygienda, T., Sharma, A., Thubert, P., Atlas, A., and J. 964 Drake, "RIFT: Routing in Fat Trees", draft-ietf-rift- 965 rift-02 (work in progress), June 2018. 967 [I-D.ietf-rtgwg-policy-model] 968 Qu, Y., Tantsura, J., Lindem, A., Liu, X., and A. Shaikh, 969 "A YANG Data Model for Routing Policy Management", draft- 970 ietf-rtgwg-policy-model-03 (work in progress), June 2018. 972 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 973 DOI 10.17487/RFC3688, January 2004, 974 . 976 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 977 (TLS) Protocol Version 1.2", RFC 5246, 978 DOI 10.17487/RFC5246, August 2008, 979 . 981 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 982 the Network Configuration Protocol (NETCONF)", RFC 6020, 983 DOI 10.17487/RFC6020, October 2010, 984 . 986 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 987 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 988 January 2011, . 990 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 991 and A. Bierman, Ed., "Network Configuration Protocol 992 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 993 . 995 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 996 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 997 . 999 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1000 Protocol (NETCONF) Access Control Model", RFC 6536, 1001 DOI 10.17487/RFC6536, March 2012, 1002 . 1004 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1005 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1006 . 1008 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1009 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1010 . 1012 [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", 1013 RFC 7277, DOI 10.17487/RFC7277, June 2014, 1014 . 1016 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1017 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1018 . 1020 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1021 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1022 . 1024 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1025 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1026 DOI 10.17487/RFC8177, June 2017, 1027 . 1029 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1030 and R. Wilton, "Network Management Datastore Architecture 1031 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1032 . 1034 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1035 Routing Management (NMDA Version)", RFC 8349, 1036 DOI 10.17487/RFC8349, March 2018, 1037 . 1039 Authors' Addresses 1041 Zheng Zhang 1042 ZTE Corporation 1044 Email: zzhang_ietf@hotmail.com 1046 Yuehua Wei 1047 ZTE Corporation 1049 Email: wei.yuehua@zte.com.cn 1050 Shaowen Ma 1051 Juniper 1053 Email: mashao@juniper.net 1055 Xufeng Liu 1056 Volta Networks 1058 Email: xufeng.liu.ietf@gmail.com