idnits 2.17.1 draft-ietf-rift-yang-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 : ---------------------------------------------------------------------------- ** There are 49 instances of too long lines in the document, the longest one being 26 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 405: '...overload bit set SHOULD NOT advertise ...' RFC 2119 keyword, line 406: '...ally hosted ones. The leaf node SHOULD...' RFC 2119 keyword, line 522: '...LIEs. In case of LIE packet this MUST...' RFC 2119 keyword, line 524: '...erwise the packet MUST be discarded.";...' RFC 2119 keyword, line 657: '... LIE packet this MUST correspond to th...' (1 more instance...) Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 219 has weird spacing: '...s-index uin...' -- The document date (May 21, 2019) is 1802 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-rtgwg-policy-model' is defined on line 943, but no explicit reference was found in the text == Unused Reference: 'RFC6087' is defined on line 962, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 980, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 984, but no explicit reference was found in the text == Unused Reference: 'RFC7277' is defined on line 988, but no explicit reference was found in the text == Unused Reference: 'RFC8177' is defined on line 1000, but no explicit reference was found in the text == Unused Reference: 'RFC8407' is defined on line 1015, but no explicit reference was found in the text == Outdated reference: A later version (-21) exists of draft-ietf-rift-rift-05 == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-06 ** 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 (~~), 11 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: November 22, 2019 Shaowen. Ma 6 Mellanox 7 Xufeng. Liu 8 Volta Networks 9 May 21, 2019 11 RIFT YANG Model 12 draft-ietf-rift-yang-00 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 November 22, 2019. 36 Copyright Notice 38 Copyright (c) 2019 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 . . . . . . . . . . . . . . . . . . . . . 7 56 4. RIFT State . . . . . . . . . . . . . . . . . . . . . . . . . 7 57 5. RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 58 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 7 59 7. RIFT YANG model . . . . . . . . . . . . . . . . . . . . . . . 7 60 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 61 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 62 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 20 63 11. Normative References . . . . . . . . . . . . . . . . . . . . 20 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 level? level 89 | +--rw systemid systemid 90 | +--rw name? string 91 | +--rw pod? uint32 92 | +--rw overload? boolean 93 | +--rw flood-reducing? boolean {flood-reducing}? 94 | +--rw hierarchy-indications? enumeration 95 | +--rw interfaces* [local-id] 96 | | +--rw local-id linkidtype 97 | | +--rw name? if:interface-ref 98 | | +--rw if-index? if:interface-ref 99 | | +--rw bfd? boolean {bfd}? 100 | | +--rw direction-type? enumeration 101 | | +--rw you_are_flood_repeater? boolean 102 | | +--rw not_a_ztp_offer? boolean 103 | | +--rw flood-port? inet:port-number 104 | | +--rw lie-rx-port? inet:port-number 105 | | +--rw holdtime? rt-types:timer-value-seconds16 106 | | +--rw local-nonce? uint16 107 | +--rw (algorighm-type)? 108 | | +--:(spf) 109 | | +--:(all-path) 110 | +--ro hal? level 111 | +--ro vol-list 112 | | +--ro vol* [systemid] 113 | | +--ro offered-level? level 114 | | +--ro level? level 115 | | +--ro systemid systemid 116 | | +--ro name? string 117 | | +--ro pod? uint32 118 | | +--ro overload? boolean 119 | | +--ro flood-reducing? boolean {flood-reducing}? 120 | | +--ro hierarchy-indications? enumeration 121 | | +--ro interfaces* [local-id] 122 | | +--ro local-id linkidtype 123 | | +--ro name? if:interface-ref 124 | | +--ro if-index? if:interface-ref 125 | | +--ro bfd? boolean {bfd}? 126 | | +--ro direction-type? enumeration 127 | | +--ro you_are_flood_repeater? boolean 128 | | +--ro not_a_ztp_offer? boolean 129 | | +--ro flood-port? inet:port-number 130 | | +--ro lie-rx-port? inet:port-number 131 | | +--ro holdtime? rt-types:timer-value-seconds16 132 | | +--ro local-nonce? uint16 133 | +--ro miscabled-links* linkidtype 134 +--ro neighbor 135 | +--ro nbrs* [systemid remote-id] 136 | +--ro level? level 137 | +--ro systemid systemid 138 | +--ro name? string 139 | +--ro pod? uint32 140 | +--ro overload? boolean 141 | +--ro flood-reducing? boolean {flood-reducing}? 142 | +--ro hierarchy-indications? enumeration 143 | +--ro interfaces* [local-id] 144 | | +--ro local-id linkidtype 145 | | +--ro name? if:interface-ref 146 | | +--ro if-index? if:interface-ref 147 | | +--ro bfd? boolean {bfd}? 148 | | +--ro direction-type? enumeration 149 | | +--ro you_are_flood_repeater? boolean 150 | | +--ro not_a_ztp_offer? boolean 151 | | +--ro flood-port? inet:port-number 152 | | +--ro lie-rx-port? inet:port-number 153 | | +--ro holdtime? rt-types:timer-value-seconds16 154 | | +--ro local-nonce? uint16 155 | +--ro remote-id uint32 156 | +--ro local-id? uint32 157 | +--ro distance? uint32 158 | +--ro remote-nonce? uint16 159 | +--ro miscabled-links* linkidtype 160 +--ro database 161 | +--ro ties* [tie-index] 162 | +--ro tie-index uint32 163 | +--ro database-tie 164 | +--ro originator? systemid 165 | +--ro direction-type? enumeration 166 | +--ro tie-number? uint32 167 | +--ro seq? uint32 168 | +--ro lifetime? uint16 169 | +--ro tie-node 170 | | +--ro level? level 171 | | +--ro systemid systemid 172 | | +--ro name? string 173 | | +--ro pod? uint32 174 | | +--ro overload? boolean 175 | | +--ro flood-reducing? boolean {flood-reducing}? 176 | | +--ro hierarchy-indications? enumeration 177 | | +--ro interfaces* [local-id] 178 | | +--ro local-id linkidtype 179 | | +--ro name? if:interface-ref 180 | | +--ro if-index? if:interface-ref 181 | | +--ro bfd? boolean {bfd}? 182 | | +--ro direction-type? enumeration 183 | | +--ro you_are_flood_repeater? boolean 184 | | +--ro not_a_ztp_offer? boolean 185 | | +--ro flood-port? inet:port-number 186 | | +--ro lie-rx-port? inet:port-number 187 | | +--ro holdtime? rt-types:timer-value-seconds16 188 | | +--ro local-nonce? uint16 189 | +--ro tie-prefix 190 | | +--ro prefixes 191 | | | +--ro prefix? inet:ip-prefix 192 | | | +--ro metric? uint32 193 | | | +--ro tag? uint64 194 | | | +--ro monotonic_clock? PrefixSequenceType 195 | | | +--ro from-link? linkidtype 196 | | +--ro positive_disaggregation_prefixes 197 | | | +--ro prefix? inet:ip-prefix 198 | | | +--ro metric? uint32 199 | | | +--ro tag? uint64 200 | | | +--ro monotonic_clock? PrefixSequenceType 201 | | | +--ro from-link? linkidtype 202 | | +--ro negative_disaggregation_prefixes 203 | | | +--ro prefix? inet:ip-prefix 204 | | | +--ro metric? uint32 205 | | | +--ro tag? uint64 206 | | | +--ro monotonic_clock? PrefixSequenceType 207 | | | +--ro from-link? linkidtype 208 | | +--ro external_prefixes 209 | | +--ro prefix? inet:ip-prefix 210 | | +--ro metric? uint32 211 | | +--ro tag? uint64 212 | | +--ro monotonic_clock? PrefixSequenceType 213 | | +--ro from-link? linkidtype 214 | +--ro kvs 215 | +--ro key? uint16 216 | +--ro value? uint32 217 +--rw kv-store 218 +--rw kvs* [kvs-index] 219 +--rw kvs-index uint32 220 +--rw kvs-tie 221 +--rw originator? systemid 222 +--rw direction-type? enumeration 223 +--rw tie-number? uint32 224 +--rw key? uint16 225 +--rw value? uint32 227 notifications: 228 +---n error-set 229 +--ro tie-level-error 230 | +--ro originator? systemid 231 | +--ro direction-type? enumeration 232 | +--ro tie-number? uint32 233 | +--ro seq? uint32 234 | +--ro lifetime? uint16 235 | +--ro tie-node 236 | | +--ro level? level 237 | | +--ro systemid systemid 238 | | +--ro name? string 239 | | +--ro pod? uint32 240 | | +--ro overload? boolean 241 | | +--ro flood-reducing? boolean {flood-reducing}? 242 | | +--ro hierarchy-indications? enumeration 243 | | +--ro interfaces* [local-id] 244 | | +--ro local-id linkidtype 245 | | +--ro name? if:interface-ref 246 | | +--ro if-index? if:interface-ref 247 | | +--ro bfd? boolean {bfd}? 248 | | +--ro direction-type? enumeration 249 | | +--ro you_are_flood_repeater? boolean 250 | | +--ro not_a_ztp_offer? boolean 251 | | +--ro flood-port? inet:port-number 252 | | +--ro lie-rx-port? inet:port-number 253 | | +--ro holdtime? rt-types:timer-value-seconds16 254 | | +--ro local-nonce? uint16 255 | +--ro tie-prefix 256 | | +--ro prefixes 257 | | | +--ro prefix? inet:ip-prefix 258 | | | +--ro metric? uint32 259 | | | +--ro tag? uint64 260 | | | +--ro monotonic_clock? PrefixSequenceType 261 | | | +--ro from-link? linkidtype 262 | | +--ro positive_disaggregation_prefixes 263 | | | +--ro prefix? inet:ip-prefix 264 | | | +--ro metric? uint32 265 | | | +--ro tag? uint64 266 | | | +--ro monotonic_clock? PrefixSequenceType 267 | | | +--ro from-link? linkidtype 268 | | +--ro negative_disaggregation_prefixes 269 | | | +--ro prefix? inet:ip-prefix 270 | | | +--ro metric? uint32 271 | | | +--ro tag? uint64 272 | | | +--ro monotonic_clock? PrefixSequenceType 273 | | | +--ro from-link? linkidtype 274 | | +--ro external_prefixes 275 | | +--ro prefix? inet:ip-prefix 276 | | +--ro metric? uint32 277 | | +--ro tag? uint64 278 | | +--ro monotonic_clock? PrefixSequenceType 279 | | +--ro from-link? linkidtype 280 | +--ro kvs 281 | +--ro key? uint16 282 | +--ro value? uint32 283 +--ro nbr-error 284 +--ro nbrs* [systemid remote-id] 285 +--ro level? level 286 +--ro systemid systemid 287 +--ro name? string 288 +--ro pod? uint32 289 +--ro overload? boolean 290 +--ro flood-reducing? boolean {flood-reducing}? 291 +--ro hierarchy-indications? enumeration 292 +--ro interfaces* [local-id] 293 | +--ro local-id linkidtype 294 | +--ro name? if:interface-ref 295 | +--ro if-index? if:interface-ref 296 | +--ro bfd? boolean {bfd}? 297 | +--ro direction-type? enumeration 298 | +--ro you_are_flood_repeater? boolean 299 | +--ro not_a_ztp_offer? boolean 300 | +--ro flood-port? inet:port-number 301 | +--ro lie-rx-port? inet:port-number 302 | +--ro holdtime? rt-types:timer-value-seconds16 303 | +--ro local-nonce? uint16 304 +--ro remote-id uint32 305 +--ro local-id? uint32 306 +--ro distance? uint32 307 +--ro remote-nonce? uint16 308 +--ro miscabled-links* linkidtype 310 3. RIFT configuration 312 RIFT configurations require node base information configurations. 313 Some features can be used to enhance protocol, such as BFD, flooding- 314 reducing, community attribute. 316 4. RIFT State 318 RIFT states are composed of RIFT node state, neighbor state, 319 database. 321 5. RPC 323 TBD. 325 6. Notifications 327 Unexpected TIE and neighbor's layer error should be notified. 329 7. RIFT YANG model 331 file "ietf-rift.yang" 332 module ietf-rift { 334 yang-version 1.1; 335 namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; 336 prefix rift; 338 import ietf-inet-types { 339 prefix "inet"; 340 reference "RFC6991"; 341 } 343 import ietf-routing { 344 prefix "rt"; 345 reference "RFC8349"; 346 } 348 import ietf-interfaces { 349 prefix "if"; 350 reference "RFC7223"; 351 } 353 import ietf-routing-types { 354 prefix "rt-types"; 355 reference "RFC8294"; 356 } 358 organization 359 "IETF RIFT(Routing In Fat Trees) Working Group"; 361 contact 362 "WG Web: 363 WG List: 365 Editor: Zheng Zhang 366 368 Editor: Yuehua Wei 369 371 Editor: Shaowen Ma 372 374 Editor: Xufeng Liu 375 "; 377 description 378 "The module defines the YANG definitions for RIFT. 380 Copyright (c) 2018 IETF Trust and the persons 381 identified as authors of the code. All rights reserved. 383 Redistribution and use in source and binary forms, with or 384 without modification, is permitted pursuant to, and subject 385 to the license terms contained in, the Simplified BSD License 386 set forth in Section 4.c of the IETF Trust's Legal Provisions 387 Relating to IETF Documents 388 (http://trustee.ietf.org/license-info). 389 This version of this YANG module is part of 390 draft-ietf-rift-rift; see the draft itself for full legal 391 notices."; 393 revision 2019-05-05 { 394 description "Initial revision."; 395 reference 396 "RFC XXXX: A YANG Data Model for RIFT. 397 draft-ietf-rift-rift: RIFT: Routing in Fat Trees."; 398 } 400 /* 401 * Features 402 */ 404 /*feature overload { 405 description "A node with overload bit set SHOULD NOT advertise any reachability 406 prefixes southbound except locally hosted ones. The leaf node SHOULD 407 set the 'overload' bit on its node TIEs."; 408 }*/ 410 feature bfd { 411 description "Support BFD (RFC5881) function to react quickly to link failures."; 412 } 414 feature flood-reducing { 415 description "Support flood reducing function defined in section 4.2.3.8."; 416 } 418 feature policy { 419 description "Support policy guide information."; 420 } 422 typedef systemid { 423 type string { 424 pattern 425 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 426 } 427 description 428 "This type defines RIFT system id using pattern, 429 system id looks like : 0143.0438.0100.AeF0"; 430 } 431 typedef level { 432 type uint8 { 433 range "0 .. 24"; 434 } 435 default "0"; 436 description "The value of node level. The max value is 24."; 437 } 439 typedef linkidtype { 440 type uint32; 441 description 442 "This type defines the link id of an interface."; 443 } 445 typedef PrefixSequenceType { 446 type uint64; 447 description 448 "This type defines the link id of an interface."; 449 } 451 /* 452 * Identity 453 */ 454 identity rift { 455 base rt:routing-protocol; 456 description "Identity for the RIFT routing protocol."; 457 } 459 /* 460 * Groupings 461 */ 462 grouping node-key { 463 leaf systemid { 464 type systemid; 465 mandatory true; 466 description "Each node is identified via a SystemID which is 64 bits wide."; 467 } 468 description "The key information used to distinguish a node."; 469 } 471 grouping base-node-info { 472 leaf level { 473 type level; 474 description "The level of this node."; 475 } 476 uses node-key; 478 leaf name { 479 type string; 480 description "The name of this node. It won't be used as the key of node, 481 just used for description."; 482 } 483 leaf pod { 484 type uint32; 485 description "Point of Delivery. The self-contained vertical slice of 486 a Clos or Fat Tree network containing normally only 487 level 0 and level 1 nodes. It communicates with nodes 488 in other PoDs via the spine. We number PoDs to distinguish 489 them and use PoD #0 to denote 'undefined' PoD."; 490 } 491 leaf overload { 492 type boolean; 493 description "If the overload bit in TIEs should be set."; 494 } 495 leaf flood-reducing { 496 if-feature flood-reducing; 497 type boolean; 498 description "If the node support flood reducing function defined in section 4.2.3.8."; 499 } 500 uses hierarchy-indications; 501 uses interface; 503 description "The base information of a node."; 504 } 506 grouping neighbor { 507 leaf remote-id { 508 type uint32; 509 description "The remote-id to reach this neighbor."; 510 } 511 leaf local-id { 512 type uint32; 513 description "The local-id of link connect to this neighbor."; 514 } 515 leaf distance { 516 type uint32; 517 description "The cost value to arrive this neighbor."; 518 } 519 leaf remote-nonce { 520 type uint16; 521 description "Remote Nonce of the adjacency as received 522 in LIEs. In case of LIE packet this MUST 523 correspond to the value in the serialized 524 object otherwise the packet MUST be discarded."; 525 } 526 leaf-list miscabled-links { 527 type linkidtype; 528 description "List of miscabled links."; 529 } 530 description "The neighbor information."; 531 } 533 grouping hierarchy-indications { 534 leaf hierarchy-indications { 535 type enumeration { 536 enum "leaf-only" { 537 description "The node will never leave the 'bottom of the 538 hierarchy'."; 539 } 540 enum "leaf_only_and_leaf_2_leaf_procedures" { 541 description "This means leaf to leaf."; 542 } 543 enum "top_of_fabric" { 544 description "The node is 'top of fabric'."; 545 } 546 } 547 description "The hierarchy indications of this node."; 548 } 549 description "The hierarchy indications of this node."; 550 } 552 grouping node { 553 uses base-node-info; 554 uses algorithm; 556 leaf hal { 557 type level; 558 config false; 559 description "The highest defined level value seen from all 560 valid level offers received."; 561 } 562 container vol-list { 563 config false; 564 list vol { 565 key "systemid"; 566 leaf offered-level { 567 type level; 568 description "The level type value offered by this neighbor."; 569 } 570 uses base-node-info; 571 description "The valid offered level information."; 572 } 573 description "The valid offered level information."; 574 } 575 leaf-list miscabled-links { 576 type linkidtype; 577 config false; 578 description 579 "List of miscabled links."; 580 } 581 description "The information of local node. Includes base information, 582 configurable parameters and features."; 583 } 585 grouping direction-type { 586 leaf direction-type { 587 type enumeration { 588 enum illegal { 589 description "Illegal direction."; 590 } 591 enum south { 592 description "A link to a node one level down."; 593 } 594 enum north { 595 description "A link to a node one level up."; 596 } 597 enum east-west { 598 description "A link to a node in the same level."; 599 } 600 enum max { 601 description "The max value of direction."; 602 } 603 } 604 description "The type of a link."; 605 } 606 description "The type of a link."; 607 } 609 grouping interface { 610 list interfaces { 611 key "local-id"; 612 leaf local-id { 613 type linkidtype; 614 mandatory true; 615 description "The local id of this interface."; 616 } 617 leaf name { 618 type if:interface-ref; 619 description "The interface's name."; 620 } 621 leaf if-index { 622 type if:interface-ref; 623 description "The index of this interface."; 624 } 625 leaf bfd { 626 if-feature bfd; 627 type boolean; 628 description "If BFD function is enabled to react link failures 629 after neighbor's detection."; 630 } 631 uses direction-type; 633 leaf you_are_flood_repeater { 634 type boolean; 635 description "If the neighbor on this link is flooding repeater."; 636 } 637 leaf not_a_ztp_offer { 638 type boolean; 639 description "If the neighbor on this link offers ZTP."; 640 } 641 leaf flood-port { 642 type inet:port-number; 643 description "The flooding port."; 644 } 645 leaf lie-rx-port { 646 type inet:port-number; 647 description "The port of LIE packet receiving."; 648 } 649 leaf holdtime { 650 type rt-types:timer-value-seconds16; 651 units seconds; 652 description "The holding time of this adjacency."; 653 } 654 leaf local-nonce { 655 type uint16; 656 description "Local Nonce of the adjacency as advertised in LIEs. 657 In case of LIE packet this MUST correspond to the 658 value in the serialized object otherwise the packet 659 MUST be discarded."; 660 } 662 description "The interface information on this node."; 663 } 664 description "The interface information."; 665 } 667 grouping prefix-info { 668 leaf prefix { 669 type inet:ip-prefix; 670 description "The prefix information."; 672 } 673 leaf metric { 674 type uint32; 675 description "The metric of this prefix."; 676 } 677 leaf tag { 678 type uint64; 679 description "The tag of this prefix."; 680 } 681 leaf monotonic_clock { 682 type PrefixSequenceType; 683 description "The monotonic clock for mobile addresses."; 684 } 685 leaf from-link { 686 type linkidtype; 687 description "In case of locally originated prefixes, i.e. 688 interface addresses this can describe which 689 link the address belongs to."; 690 } 692 description "The detail information of prefix."; 693 } 695 grouping tie-id { 696 leaf originator { 697 type systemid; 698 description "The originator's systemid of this TIE."; 699 } 700 uses direction-type; 701 leaf tie-number { 702 type uint32; 703 description "The number of this TIE"; 704 } 705 description "TIE is the acronym for 'Topology Information Element'. 706 TIEs are exchanged between RIFT nodes to describe parts 707 of a network such as links and address prefixes. This is 708 the TIE identification information."; 709 } 711 grouping key-value { 712 leaf key { 713 type uint16; 714 description "The type of key value combination."; 715 } 716 leaf value { 717 type uint32; 718 description "The value of key value combination."; 719 } 720 description "The key-value store information."; 721 } 723 grouping tie-info { 724 leaf seq { 725 type uint32; 726 description "The sequence number of a TIE."; 727 } 728 leaf lifetime { 729 type uint16 { 730 range "1 .. 65535"; 731 } 732 description "The lifetime of a TIE."; 733 } 735 container tie-node { 736 uses base-node-info; 737 description "The node element information in this TIE."; 738 } 739 container tie-prefix { 740 container prefixes { 741 uses prefix-info; 742 description "It is the prefixes TIE element."; 743 } 744 container positive_disaggregation_prefixes { 745 uses prefix-info; 746 description "It is the positive disaggregation prefixes TIE element."; 747 } 748 container negative_disaggregation_prefixes { 749 uses prefix-info; 750 description "It is the negative disaggregation prefixes element."; 751 } 752 container external_prefixes { 753 uses prefix-info; 754 description "It is the external prefixes element."; 755 } 756 description "The prefix information in this TIE."; 757 } 758 container kvs { 759 uses key-value; 760 description "The key/values in the database."; 761 } 763 description "TIE is the acronym for 'Topology Information Element'. 764 TIEs are exchanged between RIFT nodes to describe parts 765 of a network such as links and address prefixes. This TIE 766 info is used to indicate the state of this TIE. When the 767 type of this TIE is set to 'node', the node-element is 768 making sense. When the type of this TIE is set to other 769 types except for 'node', the prefix-info is making sense."; 770 } 772 grouping algorithm { 773 choice algorighm-type { 774 case spf { 775 description "The algorithm is SPF."; 776 } 777 case all-path { 778 description "The algorithm is all-path."; 779 } 780 description "The possible algorithm types."; 781 } 782 description "The computation algorithm types."; 783 } 785 /* 786 * Data nodes 787 */ 788 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" { 789 when "derived-from-or-self(rt:type, 'rift:rift')" { 790 description "This augment is only valid for a routing protocol instance of RIFT."; 791 } 792 description "RIFT ( Routing in Fat Trees ) YANG model."; 793 container rift { 794 presence "Container for RIFT protocol."; 795 description "RIFT configuration data."; 797 container node-info { 798 description "The node information about RIFT."; 799 uses node; 800 } 801 container neighbor { 802 config false; 803 list nbrs { 804 key "systemid remote-id"; 805 uses base-node-info; 806 uses neighbor; 807 description "The information of a neighbor."; 808 } 809 description "The neighbor's information."; 810 }//neighbor 812 container database { 813 config false; 814 list ties { 815 key "tie-index"; 816 leaf tie-index { 817 type uint32; 818 description "The index of a TIE."; 819 } 820 container database-tie { 821 uses tie-id; 822 uses tie-info; 824 description "The TIEs in the database."; 825 } 826 description "The detail information of a TIE."; 827 } 828 description "The TIEs information in database."; 829 }//database 831 container kv-store { 832 list kvs { 833 key "kvs-index"; 834 leaf kvs-index { 835 type uint32; 836 description "The index of a kv pair."; 837 } 839 container kvs-tie { 840 uses tie-id; 841 uses key-value; 842 description "The TIEs in the kv-store."; 843 } 844 description "The information used to distinguish a Key/Value pair. 845 When the type of kv is set to 'node', node-element is 846 making sense. When the type of kv is set to other values 847 except 'node', prefix-info is making sense."; 848 } 849 description "The Key/Value store information."; 850 }//kv-store 852 }//rift 853 }//augment 855 /* 856 * RPCs 857 */ 859 /* 860 * Notifications 861 */ 863 notification error-set { 864 description "The errors notification of RIFT."; 865 container tie-level-error { 866 uses tie-id; 867 uses tie-info; 868 description "The level is undefined in the LIEs."; 869 } 870 container nbr-error { 871 list nbrs { 872 key "systemid remote-id"; 873 uses base-node-info; 874 uses neighbor; 875 description "The information of a neighbor."; 876 } 877 description "The neighbor errors set."; 878 } 879 } 880 } 881 883 8. Security Considerations 885 The YANG module specified in this document defines a schema for data 886 that is designed to be accessed via network management protocols such 887 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 888 is the secure transport layer, and the mandatory-to-implement secure 889 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 890 is HTTPS, and the mandatory-to-implement secure transport is TLS 891 [RFC5246]. 893 The NETCONF access control model [RFC6536] provides the means to 894 restrict access for particular NETCONF or RESTCONF users to a 895 preconfigured subset of all available NETCONF or RESTCONF protocol 896 operations and content. 898 There are a number of data nodes defined in this YANG module that are 899 writable/creatable/deletable (i.e., config true, which is the 900 default). These data nodes may be considered sensitive or vulnerable 901 in some network environments. Write operations (e.g., edit-config) 902 to these data nodes without proper protection can have a negative 903 effect on network operations. 905 The RPC operations in this YANG module may be considered sensitive or 906 vulnerable in some network environments. It is thus important to 907 control access to these operations. 909 9. IANA Considerations 911 The IANA is requested to assign two new URIs from the IETF XML 912 registry ([RFC3688]). Authors are suggesting the following URI: 914 URI: urn:ietf:params:xml:ns:yang:ietf-rift 916 Registrant Contact: RIFT WG 918 XML: N/A, the requested URI is an XML namespace 920 This document also requests one new YANG module name in the YANG 921 Module Names registry ([RFC6020]) with the following suggestion: 923 name: ietf-rift 925 namespace: urn:ietf:params:xml:ns:yang:ietf-rift 927 prefix: rift 929 reference: RFC XXXX 931 10. Contributors 933 The authors would like to thank Tony Przygienda, Benchong Xu 934 (xu.benchong@zte.com.cn), for their review and valuable 935 contributions. 937 11. Normative References 939 [I-D.ietf-rift-rift] 940 Team, T., "RIFT: Routing in Fat Trees", draft-ietf-rift- 941 rift-05 (work in progress), April 2019. 943 [I-D.ietf-rtgwg-policy-model] 944 Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data 945 Model for Routing Policy Management", draft-ietf-rtgwg- 946 policy-model-06 (work in progress), March 2019. 948 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 949 DOI 10.17487/RFC3688, January 2004, 950 . 952 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 953 (TLS) Protocol Version 1.2", RFC 5246, 954 DOI 10.17487/RFC5246, August 2008, 955 . 957 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 958 the Network Configuration Protocol (NETCONF)", RFC 6020, 959 DOI 10.17487/RFC6020, October 2010, 960 . 962 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 963 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 964 January 2011, . 966 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 967 and A. Bierman, Ed., "Network Configuration Protocol 968 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 969 . 971 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 972 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 973 . 975 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 976 Protocol (NETCONF) Access Control Model", RFC 6536, 977 DOI 10.17487/RFC6536, March 2012, 978 . 980 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 981 RFC 6991, DOI 10.17487/RFC6991, July 2013, 982 . 984 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 985 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 986 . 988 [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", 989 RFC 7277, DOI 10.17487/RFC7277, June 2014, 990 . 992 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 993 RFC 7950, DOI 10.17487/RFC7950, August 2016, 994 . 996 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 997 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 998 . 1000 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1001 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1002 DOI 10.17487/RFC8177, June 2017, 1003 . 1005 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1006 and R. Wilton, "Network Management Datastore Architecture 1007 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1008 . 1010 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1011 Routing Management (NMDA Version)", RFC 8349, 1012 DOI 10.17487/RFC8349, March 2018, 1013 . 1015 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 1016 Documents Containing YANG Data Models", BCP 216, RFC 8407, 1017 DOI 10.17487/RFC8407, October 2018, 1018 . 1020 Authors' Addresses 1022 Zheng Zhang 1023 ZTE Corporation 1025 Email: zzhang_ietf@hotmail.com 1027 Yuehua Wei 1028 ZTE Corporation 1030 Email: wei.yuehua@zte.com.cn 1032 Shaowen Ma 1033 Mellanox 1035 Email: mashaowen@gmail.com 1037 Xufeng Liu 1038 Volta Networks 1040 Email: xufeng.liu.ietf@gmail.com