idnits 2.17.1 draft-zhang-rift-yang-02.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 404: '...overload bit set SHOULD NOT advertise ...' RFC 2119 keyword, line 405: '...ally hosted ones. The leaf node SHOULD...' RFC 2119 keyword, line 521: '...LIEs. In case of LIE packet this MUST...' RFC 2119 keyword, line 523: '...erwise the packet MUST be discarded.";...' RFC 2119 keyword, line 656: '... 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 4, 2019) is 1812 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 942, but no explicit reference was found in the text == Unused Reference: 'RFC6087' is defined on line 961, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 979, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 983, but no explicit reference was found in the text == Unused Reference: 'RFC7277' is defined on line 987, but no explicit reference was found in the text == Unused Reference: 'RFC8177' is defined on line 999, but no explicit reference was found in the text == Unused Reference: 'RFC8407' is defined on line 1014, 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 5, 2019 Shaowen. Ma 6 Mellanox 7 Xufeng. Liu 8 Volta Networks 9 May 4, 2019 11 RIFT YANG Model 12 draft-zhang-rift-yang-02 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 5, 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 RFC 3618; see 390 the RFC itself for full legal notices."; 392 revision 2019-05-05 { 393 description "Initial revision."; 394 reference 395 "RFC XXXX: A YANG Data Model for RIFT. 396 draft-ietf-rift-rift: RIFT: Routing in Fat Trees."; 397 } 399 /* 400 * Features 401 */ 403 /*feature overload { 404 description "A node with overload bit set SHOULD NOT advertise any reachability 405 prefixes southbound except locally hosted ones. The leaf node SHOULD 406 set the 'overload' bit on its node TIEs."; 407 }*/ 409 feature bfd { 410 description "Support BFD (RFC5881) function to react quickly to link failures."; 411 } 413 feature flood-reducing { 414 description "Support flood reducing function defined in section 4.2.3.8."; 415 } 417 feature policy { 418 description "Support policy guide information."; 419 } 421 typedef systemid { 422 type string { 423 pattern 424 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 425 } 426 description 427 "This type defines RIFT system id using pattern, 428 system id looks like : 0143.0438.0100.AeF0"; 429 } 430 typedef level { 431 type uint8 { 432 range "0 .. 24"; 433 } 434 default "0"; 435 description "The value of node level. The max value is 24."; 436 } 438 typedef linkidtype { 439 type uint32; 440 description 441 "This type defines the link id of an interface."; 442 } 444 typedef PrefixSequenceType { 445 type uint64; 446 description 447 "This type defines the link id of an interface."; 448 } 450 /* 451 * Identity 452 */ 453 identity rift { 454 base rt:routing-protocol; 455 description "Identity for the RIFT routing protocol."; 456 } 458 /* 459 * Groupings 460 */ 461 grouping node-key { 462 leaf systemid { 463 type systemid; 464 mandatory true; 465 description "Each node is identified via a SystemID which is 64 bits wide."; 466 } 467 description "The key information used to distinguish a node."; 468 } 470 grouping base-node-info { 471 leaf level { 472 type level; 473 description "The level of this node."; 474 } 475 uses node-key; 477 leaf name { 478 type string; 479 description "The name of this node. It won't be used as the key of node, 480 just used for description."; 481 } 482 leaf pod { 483 type uint32; 484 description "Point of Delivery. The self-contained vertical slice of 485 a Clos or Fat Tree network containing normally only 486 level 0 and level 1 nodes. It communicates with nodes 487 in other PoDs via the spine. We number PoDs to distinguish 488 them and use PoD #0 to denote 'undefined' PoD."; 489 } 490 leaf overload { 491 type boolean; 492 description "If the overload bit in TIEs should be set."; 493 } 494 leaf flood-reducing { 495 if-feature flood-reducing; 496 type boolean; 497 description "If the node support flood reducing function defined in section 4.2.3.8."; 498 } 499 uses hierarchy-indications; 500 uses interface; 502 description "The base information of a node."; 503 } 505 grouping neighbor { 506 leaf remote-id { 507 type uint32; 508 description "The remote-id to reach this neighbor."; 509 } 510 leaf local-id { 511 type uint32; 512 description "The local-id of link connect to this neighbor."; 513 } 514 leaf distance { 515 type uint32; 516 description "The cost value to arrive this neighbor."; 517 } 518 leaf remote-nonce { 519 type uint16; 520 description "Remote Nonce of the adjacency as received 521 in LIEs. In case of LIE packet this MUST 522 correspond to the value in the serialized 523 object otherwise the packet MUST be discarded."; 524 } 525 leaf-list miscabled-links { 526 type linkidtype; 527 description "List of miscabled links."; 528 } 529 description "The neighbor information."; 530 } 532 grouping hierarchy-indications { 533 leaf hierarchy-indications { 534 type enumeration { 535 enum "leaf-only" { 536 description "The node will never leave the 'bottom of the 537 hierarchy'."; 538 } 539 enum "leaf_only_and_leaf_2_leaf_procedures" { 540 description "This means leaf to leaf."; 541 } 542 enum "top_of_fabric" { 543 description "The node is 'top of fabric'."; 544 } 545 } 546 description "The hierarchy indications of this node."; 547 } 548 description "The hierarchy indications of this node."; 549 } 551 grouping node { 552 uses base-node-info; 553 uses algorithm; 555 leaf hal { 556 type level; 557 config false; 558 description "The highest defined level value seen from all 559 valid level offers received."; 560 } 561 container vol-list { 562 config false; 563 list vol { 564 key "systemid"; 565 leaf offered-level { 566 type level; 567 description "The level type value offered by this neighbor."; 568 } 569 uses base-node-info; 570 description "The valid offered level information."; 571 } 572 description "The valid offered level information."; 573 } 574 leaf-list miscabled-links { 575 type linkidtype; 576 config false; 577 description 578 "List of miscabled links."; 579 } 580 description "The information of local node. Includes base information, 581 configurable parameters and features."; 582 } 584 grouping direction-type { 585 leaf direction-type { 586 type enumeration { 587 enum illegal { 588 description "Illegal direction."; 589 } 590 enum south { 591 description "A link to a node one level down."; 592 } 593 enum north { 594 description "A link to a node one level up."; 595 } 596 enum east-west { 597 description "A link to a node in the same level."; 598 } 599 enum max { 600 description "The max value of direction."; 601 } 602 } 603 description "The type of a link."; 604 } 605 description "The type of a link."; 606 } 608 grouping interface { 609 list interfaces { 610 key "local-id"; 611 leaf local-id { 612 type linkidtype; 613 mandatory true; 614 description "The local id of this interface."; 615 } 616 leaf name { 617 type if:interface-ref; 618 description "The interface's name."; 619 } 620 leaf if-index { 621 type if:interface-ref; 622 description "The index of this interface."; 623 } 624 leaf bfd { 625 if-feature bfd; 626 type boolean; 627 description "If BFD function is enabled to react link failures 628 after neighbor's detection."; 629 } 630 uses direction-type; 632 leaf you_are_flood_repeater { 633 type boolean; 634 description "If the neighbor on this link is flooding repeater."; 635 } 636 leaf not_a_ztp_offer { 637 type boolean; 638 description "If the neighbor on this link offers ZTP."; 639 } 640 leaf flood-port { 641 type inet:port-number; 642 description "The flooding port."; 643 } 644 leaf lie-rx-port { 645 type inet:port-number; 646 description "The port of LIE packet receiving."; 647 } 648 leaf holdtime { 649 type rt-types:timer-value-seconds16; 650 units seconds; 651 description "The holding time of this adjacency."; 652 } 653 leaf local-nonce { 654 type uint16; 655 description "Local Nonce of the adjacency as advertised in LIEs. 656 In case of LIE packet this MUST correspond to the 657 value in the serialized object otherwise the packet 658 MUST be discarded."; 659 } 661 description "The interface information on this node."; 662 } 663 description "The interface information."; 664 } 666 grouping prefix-info { 667 leaf prefix { 668 type inet:ip-prefix; 669 description "The prefix information."; 671 } 672 leaf metric { 673 type uint32; 674 description "The metric of this prefix."; 675 } 676 leaf tag { 677 type uint64; 678 description "The tag of this prefix."; 679 } 680 leaf monotonic_clock { 681 type PrefixSequenceType; 682 description "The monotonic clock for mobile addresses."; 683 } 684 leaf from-link { 685 type linkidtype; 686 description "In case of locally originated prefixes, i.e. 687 interface addresses this can describe which 688 link the address belongs to."; 689 } 691 description "The detail information of prefix."; 692 } 694 grouping tie-id { 695 leaf originator { 696 type systemid; 697 description "The originator's systemid of this TIE."; 698 } 699 uses direction-type; 700 leaf tie-number { 701 type uint32; 702 description "The number of this TIE"; 703 } 704 description "TIE is the acronym for 'Topology Information Element'. 705 TIEs are exchanged between RIFT nodes to describe parts 706 of a network such as links and address prefixes. This is 707 the TIE identification information."; 708 } 710 grouping key-value { 711 leaf key { 712 type uint16; 713 description "The type of key value combination."; 714 } 715 leaf value { 716 type uint32; 717 description "The value of key value combination."; 718 } 719 description "The key-value store information."; 720 } 722 grouping tie-info { 723 leaf seq { 724 type uint32; 725 description "The sequence number of a TIE."; 726 } 727 leaf lifetime { 728 type uint16 { 729 range "1 .. 65535"; 730 } 731 description "The lifetime of a TIE."; 732 } 734 container tie-node { 735 uses base-node-info; 736 description "The node element information in this TIE."; 737 } 738 container tie-prefix { 739 container prefixes { 740 uses prefix-info; 741 description "It is the prefixes TIE element."; 742 } 743 container positive_disaggregation_prefixes { 744 uses prefix-info; 745 description "It is the positive disaggregation prefixes TIE element."; 746 } 747 container negative_disaggregation_prefixes { 748 uses prefix-info; 749 description "It is the negative disaggregation prefixes element."; 750 } 751 container external_prefixes { 752 uses prefix-info; 753 description "It is the external prefixes element."; 754 } 755 description "The prefix information in this TIE."; 756 } 757 container kvs { 758 uses key-value; 759 description "The key/values in the database."; 760 } 762 description "TIE is the acronym for 'Topology Information Element'. 763 TIEs are exchanged between RIFT nodes to describe parts 764 of a network such as links and address prefixes. This TIE 765 info is used to indicate the state of this TIE. When the 766 type of this TIE is set to 'node', the node-element is 767 making sense. When the type of this TIE is set to other 768 types except for 'node', the prefix-info is making sense."; 769 } 771 grouping algorithm { 772 choice algorighm-type { 773 case spf { 774 description "The algorithm is SPF."; 775 } 776 case all-path { 777 description "The algorithm is all-path."; 778 } 779 description "The possible algorithm types."; 780 } 781 description "The computation algorithm types."; 782 } 784 /* 785 * Data nodes 786 */ 787 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" { 788 when "derived-from-or-self(rt:type, 'rift:rift')" { 789 description "This augment is only valid for a routing protocol instance of RIFT."; 790 } 791 description "RIFT ( Routing in Fat Trees ) YANG model."; 792 container rift { 793 presence "Container for RIFT protocol."; 794 description "RIFT configuration data."; 796 container node-info { 797 description "The node information about RIFT."; 798 uses node; 799 } 800 container neighbor { 801 config false; 802 list nbrs { 803 key "systemid remote-id"; 804 uses base-node-info; 805 uses neighbor; 806 description "The information of a neighbor."; 807 } 808 description "The neighbor's information."; 809 }//neighbor 811 container database { 812 config false; 813 list ties { 814 key "tie-index"; 815 leaf tie-index { 816 type uint32; 817 description "The index of a TIE."; 818 } 819 container database-tie { 820 uses tie-id; 821 uses tie-info; 823 description "The TIEs in the database."; 824 } 825 description "The detail information of a TIE."; 826 } 827 description "The TIEs information in database."; 828 }//database 830 container kv-store { 831 list kvs { 832 key "kvs-index"; 833 leaf kvs-index { 834 type uint32; 835 description "The index of a kv pair."; 836 } 838 container kvs-tie { 839 uses tie-id; 840 uses key-value; 841 description "The TIEs in the kv-store."; 842 } 843 description "The information used to distinguish a Key/Value pair. 844 When the type of kv is set to 'node', node-element is 845 making sense. When the type of kv is set to other values 846 except 'node', prefix-info is making sense."; 847 } 848 description "The Key/Value store information."; 849 }//kv-store 851 }//rift 852 }//augment 854 /* 855 * RPCs 856 */ 858 /* 859 * Notifications 860 */ 862 notification error-set { 863 description "The errors notification of RIFT."; 864 container tie-level-error { 865 uses tie-id; 866 uses tie-info; 867 description "The level is undefined in the LIEs."; 868 } 869 container nbr-error { 870 list nbrs { 871 key "systemid remote-id"; 872 uses base-node-info; 873 uses neighbor; 874 description "The information of a neighbor."; 875 } 876 description "The neighbor errors set."; 877 } 878 } 879 } 880 882 8. Security Considerations 884 The YANG module specified in this document defines a schema for data 885 that is designed to be accessed via network management protocols such 886 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 887 is the secure transport layer, and the mandatory-to-implement secure 888 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 889 is HTTPS, and the mandatory-to-implement secure transport is TLS 890 [RFC5246]. 892 The NETCONF access control model [RFC6536] provides the means to 893 restrict access for particular NETCONF or RESTCONF users to a 894 preconfigured subset of all available NETCONF or RESTCONF protocol 895 operations and content. 897 There are a number of data nodes defined in this YANG module that are 898 writable/creatable/deletable (i.e., config true, which is the 899 default). These data nodes may be considered sensitive or vulnerable 900 in some network environments. Write operations (e.g., edit-config) 901 to these data nodes without proper protection can have a negative 902 effect on network operations. 904 The RPC operations in this YANG module may be considered sensitive or 905 vulnerable in some network environments. It is thus important to 906 control access to these operations. 908 9. IANA Considerations 910 The IANA is requested to assign two new URIs from the IETF XML 911 registry ([RFC3688]). Authors are suggesting the following URI: 913 URI: urn:ietf:params:xml:ns:yang:ietf-rift 915 Registrant Contact: RIFT WG 917 XML: N/A, the requested URI is an XML namespace 919 This document also requests one new YANG module name in the YANG 920 Module Names registry ([RFC6020]) with the following suggestion: 922 name: ietf-rift 924 namespace: urn:ietf:params:xml:ns:yang:ietf-rift 926 prefix: rift 928 reference: RFC XXXX 930 10. Contributors 932 The authors would like to thank Tony Przygienda, Benchong Xu 933 (xu.benchong@zte.com.cn), for their review and valuable 934 contributions. 936 11. Normative References 938 [I-D.ietf-rift-rift] 939 Team, T., "RIFT: Routing in Fat Trees", draft-ietf-rift- 940 rift-05 (work in progress), April 2019. 942 [I-D.ietf-rtgwg-policy-model] 943 Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data 944 Model for Routing Policy Management", draft-ietf-rtgwg- 945 policy-model-06 (work in progress), March 2019. 947 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 948 DOI 10.17487/RFC3688, January 2004, 949 . 951 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 952 (TLS) Protocol Version 1.2", RFC 5246, 953 DOI 10.17487/RFC5246, August 2008, 954 . 956 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 957 the Network Configuration Protocol (NETCONF)", RFC 6020, 958 DOI 10.17487/RFC6020, October 2010, 959 . 961 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 962 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 963 January 2011, . 965 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 966 and A. Bierman, Ed., "Network Configuration Protocol 967 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 968 . 970 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 971 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 972 . 974 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 975 Protocol (NETCONF) Access Control Model", RFC 6536, 976 DOI 10.17487/RFC6536, March 2012, 977 . 979 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 980 RFC 6991, DOI 10.17487/RFC6991, July 2013, 981 . 983 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 984 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 985 . 987 [RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", 988 RFC 7277, DOI 10.17487/RFC7277, June 2014, 989 . 991 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 992 RFC 7950, DOI 10.17487/RFC7950, August 2016, 993 . 995 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 996 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 997 . 999 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1000 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1001 DOI 10.17487/RFC8177, June 2017, 1002 . 1004 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1005 and R. Wilton, "Network Management Datastore Architecture 1006 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1007 . 1009 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1010 Routing Management (NMDA Version)", RFC 8349, 1011 DOI 10.17487/RFC8349, March 2018, 1012 . 1014 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 1015 Documents Containing YANG Data Models", BCP 216, RFC 8407, 1016 DOI 10.17487/RFC8407, October 2018, 1017 . 1019 Authors' Addresses 1021 Zheng Zhang 1022 ZTE Corporation 1024 Email: zzhang_ietf@hotmail.com 1026 Yuehua Wei 1027 ZTE Corporation 1029 Email: wei.yuehua@zte.com.cn 1031 Shaowen Ma 1032 Mellanox 1034 Email: mashaowen@gmail.com 1036 Xufeng Liu 1037 Volta Networks 1039 Email: xufeng.liu.ietf@gmail.com