idnits 2.17.1 draft-ietf-rift-yang-03.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 5 instances of too long lines in the document, the longest one being 4 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 270 has weird spacing: '...-family ian...' == Line 320 has weird spacing: '...-family ian...' -- The document date (May 11, 2021) is 1079 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: 'RFC7951' is defined on line 1808, but no explicit reference was found in the text == Outdated reference: A later version (-21) exists of draft-ietf-rift-rift-12 Summary: 1 error (**), 0 flaws (~~), 5 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 RIFT WG B. Rijsman 3 Internet-Draft Individual 4 Intended status: Standards Track Z. Zhang, Ed. 5 Expires: November 12, 2021 Y. Wei 6 ZTE Corporation 7 S. Ma 8 Google 9 X. Liu 10 Volta Networks 11 May 11, 2021 13 A YANG Data Model for Routing in Fat Trees (RIFT) 14 draft-ietf-rift-yang-03 16 Abstract 18 This document defines a YANG data model for the configuration and 19 management of Routing in Fat Trees (RIFT) Protocol. 21 Status of This Memo 23 This Internet-Draft is submitted in full conformance with the 24 provisions of BCP 78 and BCP 79. 26 Internet-Drafts are working documents of the Internet Engineering 27 Task Force (IETF). Note that other groups may also distribute 28 working documents as Internet-Drafts. The list of current Internet- 29 Drafts is at https://datatracker.ietf.org/drafts/current/. 31 Internet-Drafts are draft documents valid for a maximum of six months 32 and may be updated, replaced, or obsoleted by other documents at any 33 time. It is inappropriate to use Internet-Drafts as reference 34 material or to cite them other than as "work in progress." 36 This Internet-Draft will expire on November 12, 2021. 38 Copyright Notice 40 Copyright (c) 2021 IETF Trust and the persons identified as the 41 document authors. All rights reserved. 43 This document is subject to BCP 78 and the IETF Trust's Legal 44 Provisions Relating to IETF Documents 45 (https://trustee.ietf.org/license-info) in effect on the date of 46 publication of this document. Please review these documents 47 carefully, as they describe your rights and restrictions with respect 48 to this document. Code Components extracted from this document must 49 include Simplified BSD License text as described in Section 4.e of 50 the Trust Legal Provisions and are provided without warranty as 51 described in the Simplified BSD License. 53 Table of Contents 55 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 56 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 57 1.2. Conventions Used in This Document . . . . . . . . . . . . 3 58 1.3. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 59 1.4. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 60 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 4 61 2.1. Scope of Model . . . . . . . . . . . . . . . . . . . . . 4 62 2.2. Specification . . . . . . . . . . . . . . . . . . . . . . 5 63 2.3. Overview . . . . . . . . . . . . . . . . . . . . . . . . 5 64 2.4. RIFT configuration . . . . . . . . . . . . . . . . . . . 11 65 2.5. RIFT State . . . . . . . . . . . . . . . . . . . . . . . 12 66 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 12 67 3. RIFT YANG model . . . . . . . . . . . . . . . . . . . . . . . 12 68 4. Security Considerations . . . . . . . . . . . . . . . . . . . 36 69 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 70 6. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 37 71 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 72 7.1. Normative References . . . . . . . . . . . . . . . . . . 38 73 7.2. Informative References . . . . . . . . . . . . . . . . . 40 74 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40 76 1. Introduction 78 [I-D.ietf-rift-rift] introduces the protocol definition of RIFT. 79 This document defines a YANG data model that can be used to configure 80 and manage the RIFT protocol. The model is based on YANG 1.1 as 81 defined in [RFC7950] and conforms to the Network Management Datastore 82 Architecture (NDMA) as described in [RFC8342] 84 1.1. Terminology 86 The terminology for describing YANG data models is found in [RFC6020] 87 and [RFC7950], including: 89 o augment 91 o container 93 o choice 95 o data model 96 o data node 98 o grouping 100 o identity 102 o leaf 104 o leaf-list 106 o list 108 o module 110 o uses 112 The following abbreviations are used in this document and the defined 113 model: 115 RIFT: Routing in Fat Trees [I-D.ietf-rift-rift]. 117 1.2. Conventions Used in This Document 119 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 120 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 121 "OPTIONAL" in this document are to be interpreted as described in BCP 122 14 [RFC2119] [RFC8174] when, and only when, they appear in all 123 capitals, as shown here. 125 1.3. Tree Diagrams 127 Tree diagrams used in this document follow the notation defined in 128 [RFC8340]. 130 1.4. Prefixes in Data Node Names 132 In this document, names of data nodes, actions, and other data model 133 objects are often used without a prefix, as long as it is clear from 134 the context in which YANG module each name is defined. Otherwise, 135 names are prefixed using the standard prefix associated with the 136 corresponding YANG module, as shown in Table 1. 138 +---------------+--------------------+-----------+ 139 | Prefix | YANG module | Reference | 140 +---------------+--------------------+-----------+ 141 | yang | ietf-yang-types | [RFC6991] | 142 | | | | 143 | inet | ietf-inet-types | [RFC6991] | 144 | | | | 145 | rt | ietf-routing | [RFC8349] | 146 | | | | 147 | if | ietf-interfaces | [RFC8343] | 148 | | | | 149 | rt-types | ietf-routing-types | [RFC8294] | 150 | | | | 151 | iana-rt-types | iana-routing-types | [RFC8294] | 152 | | | | 153 | key-chain | ietf-key-chain | [RFC8177] | 154 +---------------+--------------------+-----------+ 156 Table 1 158 2. Design of the Data Model 160 2.1. Scope of Model 162 The model covers RIFT [I-D.ietf-rift-rift]. 164 This model can be used to configure and manage the RIFT protocol. 165 The operational state data and statistics can be retrieved by this 166 model. The subscription and push mechanism defined in [RFC8639] and 167 [RFC8641] can be implemented by the user to subscribe to 168 notifications on the data nodes in this model. 170 The model contains all the basic configuration parameters to operate 171 the protocol. Depending on the implementation choices, some systems 172 may not allow some of the advanced parameters to be configurable. 173 The occasionally implemented parameters are modeled as optional 174 features in this model. This model can be extended, and it has been 175 structured in a way that such extensions can be conveniently made. 177 The RIFT YANG module augments the /routing/control-plane-protocols/ 178 control-plane-protocol path defined in the ietf-routing module. The 179 ietf-rift model defines a single instance of RIFT. Multiple 180 instances are instantiated as multiple control-plane protocols 181 instances. 183 2.2. Specification 185 This model imports and augments ietf-routing YANG model defined in 186 [RFC8349]. Both configuration branch and state branch of [RFC8349] 187 are augmented. The configuration branch covers node base and policy 188 configuration. The container "rift" is the top level container in 189 this data model. The presence of this container is expected to 190 enable RIFT protocol functionality. 192 The YANG data model defined in this document conforms to the Network 193 Management Datastore Architecture (NMDA) [RFC8342]. The operational 194 state data is combined with the associated configuration data in the 195 same hierarchy [RFC8407]. 197 2.3. Overview 199 The RIFT YANG module defined in this document has all the common 200 building blocks for the RIFT protocol. 202 The RIFT YANG module augments the /routing/control-plane-protocols/ 203 control-plane-protocol path defined in the ietf-routing module. The 204 ietf-rift model defines a single instance of RIFT. Multiple 205 instances are instantiated as multiple control-plane protocols 206 instances. 208 module: ietf-rift 209 augment /rt:routing/rt:control-plane-protocols 210 /rt:control-plane-protocol: 211 +--rw rift 212 +--rw name? string 213 +--ro level? level 214 +--rw system-id system-id 215 +--rw pod? uint32 216 +--rw configured-level? level 217 +--rw overload 218 | +--rw overload? boolean 219 | +--rw (timeout-type)? 220 | +--:(on-startup) 221 | | +--rw on-startup-timeout? 222 | | rt-types:timer-value-seconds16 223 | +--:(immediate) 224 | +--rw immediate-timeout? 225 | rt-types:timer-value-seconds16 226 +--ro protocol-major-version uint8 227 +--ro protocol-minor-version uint16 228 +--rw hierarchy-indications? enumeration 229 +--rw flood-reduction? boolean 230 +--rw nonce-increasing-interval? uint16 231 +--rw maximum-nonce-delta? uint8 {nonce-delta-adjust}? 232 +--rw adjusted-lifetime? 233 | rt-types:timer-value-seconds16 234 +--rw rx-lie-multicast-address 235 | +--rw ipv4? inet:ipv4-address 236 | +--rw ipv6? inet:ipv6-address 237 +--rw tx-lie-multicast-address 238 | +--rw ipv4? inet:ipv4-address 239 | +--rw ipv6? inet:ipv6-address 240 +--rw lie-tx-port? inet:port-number 241 +--rw global-link-capabilities 242 | +--rw bfd? boolean 243 | +--rw v4-forwarding-capable? boolean 244 +--rw rx-flood-port? inet:port-number 245 +--rw global-holdtime? 246 | rt-types:timer-value-seconds16 247 +--rw tide-generation-interval? 248 | rt-types:timer-value-seconds16 249 +--rw tie-security {tie-security}? 250 | +--rw (auth-key-chain)? 251 | +--:(auth-key-chain) 252 | | +--rw key-chain? key-chain:key-chain-ref 253 | +--:(auth-key-explicit) 254 | +--rw key-id? uint32 255 | +--rw key? string 256 | +--rw crypto-algorithm? identityref 257 +--rw (algorithm-type)? 258 | +--:(spf) 259 | +--:(all-path) 260 +--rw instance-label? uint32 {label-switching}? 261 +--ro HAL 262 | +--ro hal-value? level 263 | +--ro system-id* system-id 264 +--ro miscabled-links* linkid-type 265 +--rw interface* [name] 266 | +--ro link-id? linkid-type 267 | +--rw name if:interface-ref 268 | +--rw cost? uint32 269 | +--rw address-families* [address-family] 270 | | +--rw address-family iana-rt-types:address-family 271 | +--rw advertised-source-addresses 272 | | +--rw ipv4? inet:ipv4-address 273 | | +--rw ipv6? inet:ipv6-address 274 | +--ro direction-type? enumeration 275 | +--rw security {tie-security}? 276 | | +--rw (auth-key-chain)? 277 | | +--:(auth-key-chain) 278 | | | +--rw key-chain? key-chain:key-chain-ref 279 | | +--:(auth-key-explicit) 280 | | +--rw key-id? uint32 281 | | +--rw key? string 282 | | +--rw crypto-algorithm? identityref 283 | +--rw security-checking? enumeration 284 | +--ro was-the-last-lie-accepted? boolean 285 | +--ro last-lie-reject-reason? string 286 | +--ro advertised-in-lies 287 | | +--ro you-are-flood-repeater? boolean 288 | | +--ro not-a-ztp-offer? boolean 289 | | +--ro you-are-sending-too-quickly? boolean 290 | +--rw link-capabilities 291 | | +--rw bfd? boolean 292 | | +--rw v4-forwarding-capable? boolean 293 | +--ro state enumeration 294 | +--ro number-of-flaps? uint32 295 | +--ro last-state-change? yang:date-and-time 296 +--ro neighbor* [system-id] 297 | +--ro name? string 298 | +--ro level? level 299 | +--ro system-id system-id 300 | +--ro pod? uint32 301 | +--ro protocol-version? uint16 302 | +--ro sent-offer 303 | | +--ro level? level 304 | | +--ro not-a-ztp-offer? boolean 305 | +--ro received-offer 306 | | +--ro level? level 307 | | +--ro not-a-ztp-offer? boolean 308 | | +--ro best? boolean 309 | | +--ro removed-from-consideration? boolean 310 | | +--ro removal-reason? string 311 | +--ro received-source-addresses 312 | | +--ro ipv4? inet:ipv4-address 313 | | +--ro ipv6? inet:ipv6-address 314 | +--ro link-id-pair* [remote-id] 315 | | +--ro local-id? uint32 316 | | +--ro remote-id uint32 317 | | +--ro if-index? uint32 318 | | +--ro if-name? if:interface-ref 319 | | +--ro address-families* [address-family] 320 | | +--ro address-family iana-rt-types:address-family 321 | +--ro cost? uint32 322 | +--ro bandwidth? uint32 323 | +--ro received-link-capabilities 324 | | +--ro bfd? boolean 325 | | +--ro v4-forwarding-capable? boolean 326 | +--ro received-in-lies 327 | | +--ro you-are-flood-repeater? boolean 328 | | +--ro not-a-ztp-offer? boolean 329 | | +--ro you-are-sending-too-quickly? boolean 330 | +--ro tx-flood-port? inet:port-number 331 | +--ro bfd-up? boolean 332 | +--ro outer-security-key-id? uint8 333 +--ro database 334 +--ro tie* [direction-type originator tie-type tie-number] 335 +--ro direction-type 336 | enumeration 337 +--ro originator 338 | system-id 339 +--ro tie-type 340 | enumeration 341 +--ro tie-number 342 | uint32 343 +--ro seq? 344 | uint64 345 +--ro origination-time? 346 | uint32 347 +--ro origination-lifetime? 348 | uint32 349 +--ro node 350 | +--ro level? level 351 | +--ro neighbor* [system-id] 352 | | +--ro name? string 353 | | +--ro level? level 354 | | +--ro system-id system-id 355 | | +--ro pod? uint32 356 | | +--ro link-id-pair* [remote-id] 357 | | | +--ro local-id? uint32 358 | | | +--ro remote-id uint32 359 | | | +--ro if-index? uint32 360 | | | +--ro if-name? if:interface-ref 361 | | | +--ro address-families* [address-family] 362 | | | +--ro address-family 363 | | | iana-rt-types:address-family 364 | | +--ro cost? uint32 365 | | +--ro bandwidth? uint32 366 | | +--ro received-link-capabilities 367 | | +--ro bfd? boolean 368 | | +--ro v4-forwarding-capable? boolean 369 | +--ro protocol-minor-version? uint16 370 | +--ro flood-reduction? boolean 371 | +--ro hierarchy-indications 372 | | +--ro hierarchy-indications? enumeration 373 | +--ro overload? boolean 374 | +--ro name? string 375 | +--ro pod? uint32 376 | +--ro startup-time? yang:date-and-time 377 | +--ro miscabled-links* linkid-type 378 +--ro prefixes 379 | +--ro prefix* [prefix] 380 | +--ro prefix inet:ip-prefix 381 | +--ro metric? uint32 382 | +--ro tags* uint64 383 | +--ro monotonic-clock 384 | | +--ro prefix-sequence-type 385 | | +--ro timestamp 386 | | | ieee802-1as-timestamp-type 387 | | +--ro transaction-id? uint8 388 | +--ro loopback? boolean 389 | +--ro directly-attached? boolean 390 | +--ro from-link? linkid-type 391 +--ro positive-disaggregation-prefixes 392 | +--ro positive-disaggregation-prefix* 393 | [positive-disaggregation-prefix] 394 | +--ro positive-disaggregation-prefix 395 | | inet:ip-prefix 396 | +--ro metric? uint32 397 | +--ro tags* uint64 398 | +--ro monotonic-clock 399 | | +--ro prefix-sequence-type 400 | | +--ro timestamp 401 | | | ieee802-1as-timestamp-type 402 | | +--ro transaction-id? uint8 403 | +--ro loopback? boolean 404 | +--ro directly-attached? boolean 405 | +--ro from-link? 406 | linkid-type 407 +--ro negative_disaggregation_prefixes 408 | +--ro negative_disaggregation_prefix* 409 | [negative_disaggregation_prefix] 410 | +--ro negative_disaggregation_prefix 411 | | inet:ip-prefix 412 | +--ro metric? uint32 413 | +--ro tags* uint64 414 | +--ro monotonic-clock 415 | | +--ro prefix-sequence-type 416 | | +--ro timestamp 417 | | | ieee802-1as-timestamp-type 418 | | +--ro transaction-id? uint8 419 | +--ro loopback? boolean 420 | +--ro directly-attached? boolean 421 | +--ro from-link? 422 | linkid-type 423 +--ro external_prefixes 424 | +--ro external_prefix* [external_prefix] 425 | +--ro external_prefix inet:ip-prefix 426 | +--ro metric? uint32 427 | +--ro tags* uint64 428 | +--ro monotonic-clock 429 | | +--ro prefix-sequence-type 430 | | +--ro timestamp 431 | | | ieee802-1as-timestamp-type 432 | | +--ro transaction-id? uint8 433 | +--ro loopback? boolean 434 | +--ro directly-attached? boolean 435 | +--ro from-link? linkid-type 436 +--ro positive_external_disaggregation_prefixes 437 | +--ro positive_external_disaggregation_prefix* 438 | [positive_external_disaggregation_prefix] 439 | +--ro positive_external_disaggregation_prefix 440 | | inet:ip-prefix 441 | +--ro metric? 442 | | uint32 443 | +--ro tags* 444 | | uint64 445 | +--ro monotonic-clock 446 | | +--ro prefix-sequence-type 447 | | +--ro timestamp 448 | | | ieee802-1as-timestamp-type 449 | | +--ro transaction-id? uint8 450 | +--ro loopback? 451 | | boolean 452 | +--ro directly-attached? 453 | | boolean 454 | +--ro from-link? 455 | linkid-type 456 +--ro key-value 457 +--ro key? binary 458 +--ro value? binary 460 notifications: 461 +---n error-set 462 +--ro tie-level-error 463 | +--ro tie* [originator] 464 | +--ro direction-type? enumeration 465 | +--ro originator system-id 466 | +--ro tie-type? enumeration 467 | +--ro tie-number? uint32 468 | +--ro seq? uint64 469 | +--ro origination-time? uint32 470 | +--ro origination-lifetime? uint32 471 +--ro neighbor-error 472 +--ro neighbor* [system-id] 473 +--ro name? string 474 +--ro level? level 475 +--ro system-id system-id 476 +--ro pod? uint32 477 +--ro protocol-version? uint16 478 +--ro sent-offer 479 | +--ro level? level 480 | +--ro not-a-ztp-offer? boolean 481 +--ro received-offer 482 | +--ro level? level 483 | +--ro not-a-ztp-offer? boolean 484 | +--ro best? boolean 485 | +--ro removed-from-consideration? boolean 486 | +--ro removal-reason? string 487 +--ro received-source-addresses 488 | +--ro ipv4? inet:ipv4-address 489 | +--ro ipv6? inet:ipv6-address 490 +--ro link-id-pair* [remote-id] 491 | +--ro local-id? uint32 492 | +--ro remote-id uint32 493 | +--ro if-index? uint32 494 | +--ro if-name? if:interface-ref 495 | +--ro address-families* [address-family] 496 | +--ro address-family 497 | iana-rt-types:address-family 498 +--ro cost? uint32 499 +--ro bandwidth? uint32 500 +--ro received-link-capabilities 501 | +--ro bfd? boolean 502 | +--ro v4-forwarding-capable? boolean 503 +--ro received-in-lies 504 | +--ro you-are-flood-repeater? boolean 505 | +--ro not-a-ztp-offer? boolean 506 | +--ro you-are-sending-too-quickly? boolean 507 +--ro tx-flood-port? inet:port-number 508 +--ro bfd-up? boolean 509 +--ro outer-security-key-id? uint8 511 2.4. RIFT configuration 513 The configuration data nodes cover node configuration attributes. 514 RIFT configurations require node base information configurations. 515 Some features can be used to enhance protocol, such as BFD, flooding- 516 reducing, community attribute. 518 2.5. RIFT State 520 The state data nodes include node, neighbor, database and kv-store 521 information. 523 2.6. Notifications 525 Unexpected TIE and neighbor's layer error should be notified. 527 3. RIFT YANG model 529 This module references [I-D.ietf-rift-rift], [RFC5881], [RFC6991], 530 [RFC8177], [RFC8294], [RFC8343], [RFC8349], [RFC8505]. 532 file "ietf-rift@2021-05-11.yang" 533 module ietf-rift { 535 yang-version 1.1; 537 namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; 538 prefix rift; 540 import ietf-inet-types { 541 prefix "inet"; 542 reference "RFC 6991: Common YANG Data Types"; 543 } 545 import ietf-yang-types { 546 prefix "yang"; 547 reference "RFC 6991: Common YANG Data Types"; 548 } 550 import ietf-routing { 551 prefix "rt"; 552 reference 553 "RFC 8349: A YANG Data Model for Routing Management 554 (NMDA Version)"; 555 } 557 import ietf-interfaces { 558 prefix "if"; 559 reference 560 "RFC 8343: A YANG Data Model for Interface Management"; 561 } 563 import ietf-routing-types { 564 prefix "rt-types"; 565 reference 566 "RFC 8294: Common YANG Data Types for the Routing Area"; 567 } 569 import iana-routing-types { 570 prefix "iana-rt-types"; 571 reference 572 "RFC 8294: Common YANG Data Types for the Routing Area"; 573 } 575 import ietf-key-chain { 576 prefix "key-chain"; 577 reference 578 "RFC 8177: YANG Data Model for Key Chains"; 579 } 581 organization 582 "IETF RIFT (Routing In Fat Trees) Working Group"; 584 contact 585 "WG Web: 586 WG List: 588 Editor: Bruno Rijsman 589 591 Editor: Zheng Zhang 592 594 Editor: Yuehua Wei 595 597 Editor: Shaowen Ma 598 600 Editor: Xufeng Liu 601 "; 603 // RFC Ed.: replace XXXX with actual RFC number and remove 604 // this note 606 description 607 "The module defines the YANG definitions for Routing in Fat 608 Trees (RIFT). 610 Copyright (c) 2020 IETF Trust and the persons identified as 611 authors of the code. All rights reserved. 613 Redistribution and use in source and binary forms, with or 614 without modification, is permitted pursuant to, and subject 615 to the license terms contained in, the Simplified BSD 616 License set forth in Section 4.c of the IETF Trust's Legal 617 Provisions Relating to IETF Documents 618 (https://trustee.ietf.org/license-info). 620 This version of this YANG module is part of RFC XXXX 621 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC 622 itself for full legal notices. 624 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 625 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 626 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 627 are to be interpreted as described in BCP 14 (RFC 2119) 628 (RFC 8174) when, and only when, they appear in all 629 capitals, as shown here."; 631 revision 2021-05-06 { 632 description "Initial revision."; 633 reference "RFC XXXX: A YANG Data Model for RIFT."; 634 } 636 /* 637 * Features 638 */ 640 feature nonce-delta-adjust { 641 description 642 "Support weak nonce delta adjusting which is used in security 643 in section 4.4."; 644 } 646 feature label-switching { 647 description 648 "Support label switching for instance distinguishing in 649 section 4.3.7."; 650 } 652 feature tie-security { 653 description 654 "Support security function described in section 4.4.3 for 655 the TIE exchange."; 656 } 658 typedef system-id { 659 type string { 660 pattern 661 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 663 } 664 description 665 "This type defines RIFT system id using pattern, 666 the system id looks like: 0143.0438.0100.AeF0"; 667 } 669 typedef level { 670 type uint8 { 671 range "0 .. 24"; 672 } 673 default "0"; 674 description "The value of node level. The max value is 24."; 675 } 677 typedef linkid-type { 678 type uint32; 679 description "This type defines the link id of an interface."; 680 } 682 typedef ieee802-1as-timestamp-type { 683 type uint64; 684 description 685 "Timestamp per 802.1AS. It is advertised with prefix to 686 achieve mobility as described in section 4.3.3."; 687 } 689 /* 690 * Identity 691 */ 692 identity rift { 693 base rt:routing-protocol; 694 description "Identity for the RIFT routing protocol."; 695 } 697 /* 698 * Groupings 699 */ 701 grouping address-families { 702 list address-families { 703 key address-family; 704 description 705 "A list of address families enabled on the 706 interface."; 707 leaf address-family { 708 type iana-rt-types:address-family; 709 description 710 "Indication which address families are up on the 711 interface."; 712 } 713 } 714 description 715 "Containing address families on the interface."; 716 } 718 grouping hierarchy-indications { 719 leaf hierarchy-indications { 720 type enumeration { 721 enum "leaf-only" { 722 description 723 "The node will never leave the 724 'bottom of the hierarchy'."; 725 } 726 enum "leaf-only-and-leaf-2-leaf-procedures" { 727 description "This means leaf to leaf."; 728 } 729 enum "top-of-fabric" { 730 description "The node is 'top of fabric'."; 731 } 732 } 733 description "The hierarchy indications of this node."; 734 } 735 description "Flags indicating node configuration in case of ZTP"; 736 } 738 grouping node-capability { 739 leaf protocol-minor-version { 740 type uint16; 741 description 742 "Represents the minor protocol encoding schema 743 version of this node."; 744 } 745 leaf flood-reduction { 746 type boolean; 747 description 748 "If this node enables the flood reduction function."; 749 } 750 container hierarchy-indications { 751 config false; 752 description "The hierarchy-indications of the node."; 753 uses hierarchy-indications; 754 } 755 description 756 "The supported capabilities of this node."; 757 } 758 grouping prefix-attribute { 759 leaf metric { 760 type uint32; 761 description "The metric of this prefix."; 762 } 763 leaf-list tags { 764 type uint64; 765 description "The tags of this prefix."; 766 } 767 container monotonic-clock { 768 container prefix-sequence-type { 769 leaf timestamp { 770 type ieee802-1as-timestamp-type; 771 mandatory true; 772 description 773 "The timestamp per 802.1AS can be advertised 774 with the desired prefix North TIEs."; 775 } 776 leaf transaction-id { 777 type uint8; 778 description 779 "As per RFC 8505, a sequence number called a 780 Transaction ID (TID) with a prefix can be 781 advertised."; 782 } 783 description 784 "As described in section 4.3.3, the prefix 785 sequence attribute which can be advertised 786 for mobility."; 787 } 788 description 789 "The monotonic clock for mobile addresses."; 790 } 791 leaf loopback { 792 type boolean; 793 description 794 "Indicates if the interface is a node loopback. 795 According to section 4.3.10, the node's loopback 796 address can be injected into North and South 797 Prefix TIEs for node reachability."; 798 } 799 leaf directly-attached { 800 type boolean; 801 description 802 "Indicates that the prefix is directly attached, 803 i.e. should be routed to even if the node is 804 in overload."; 805 } 806 leaf from-link { 807 type linkid-type; 808 description 809 "In case of locally originated prefixes, 810 i.e. interface addresses this can describe which 811 link the address belongs to."; 812 } 813 description 814 "The attributes of the prefix."; 815 } 817 grouping security { 818 choice auth-key-chain { 819 description 820 "Key chain or explicit key parameter specification"; 821 case auth-key-chain { 822 leaf key-chain { 823 type key-chain:key-chain-ref; 824 description 825 "key-chain name."; 826 } 827 } 828 case auth-key-explicit { 829 leaf key-id { 830 type uint32; 831 description "Key Identifier"; 832 } 833 leaf key { 834 type string; 835 description 836 "Authentication key. The length of the key may be 837 dependent on the cryptographic algorithm."; 838 } 839 leaf crypto-algorithm { 840 type identityref { 841 base key-chain:crypto-algorithm; 842 } 843 description 844 "Cryptographic algorithm associated with key."; 845 } 846 } 847 } 848 description "The security parameters."; 849 } 851 grouping base-node-info { 852 leaf name { 853 type string; 854 description 855 "The name of this node. It won't be used as the key of node, 856 just used for description."; 857 } 858 leaf level { 859 type level; 860 config false; 861 description "The level of this node."; 862 } 863 leaf system-id { 864 type system-id; 865 mandatory true; 866 description 867 "Each node is identified via a system-id which is 64 bits 868 wide."; 869 } 870 leaf pod { 871 type uint32; 872 description 873 "Point of Delivery. The self-contained vertical slice of a 874 Clos or Fat Tree network containing normally only level 0 875 and level 1 nodes. It communicates with nodes in other PoDs 876 via the spine. We number PoDs to distinguish them and use 877 PoD #0 to denote 'undefined' PoD."; 878 } 879 description "The base information of a node."; 880 } // base-node-info 882 grouping node-flag { 883 leaf overload { 884 type boolean; 885 description "If the overload bit in TIEs can be set."; 886 } 887 description "The node flag information."; 888 } 890 grouping link-capabilities { 891 leaf bfd { 892 type boolean; 893 description 894 "If this value is set to true, it means that 895 BFD [RFC5881] function is enabled on the neighbor."; 896 } 897 leaf v4-forwarding-capable { 898 type boolean; 899 description 900 "If this value is set to true, it means that 901 the neighbor supports v4 forwarding."; 903 } 904 description "The features of neighbor."; 905 } // link-capabilities 907 grouping addresses { 908 leaf ipv4 { 909 type inet:ipv4-address; 910 description "IPv4 address to be used."; 911 } 912 leaf ipv6 { 913 type inet:ipv6-address; 914 description "IPv6 address to be used."; 915 } 916 description "IPv4 or IPv6 address to be used."; 917 } 919 grouping lie-elements{ 920 leaf you-are-flood-repeater { 921 type boolean; 922 description 923 "If the neighbor on this link is flooding repeater 924 described in section 4.2.3.9. When this value is set 925 to true, the value can be carried in exchanged 926 packet."; 927 } 928 leaf not-a-ztp-offer { 929 type boolean; 930 description 931 "As described in section 4.2.7. When this value is 932 set to true, the flag can be carried in the LIE 933 packet. When the value received in the LIE from 934 neighbor, it indicates the level on the LIE MUST 935 NOT be used to derive a ZTP level by the receiving 936 node."; 937 } 938 leaf you-are-sending-too-quickly { 939 type boolean; 940 description 941 "Can be optionally set to indicate to neighbor that 942 packet losses are seen on reception based on packet 943 numbers or the rate is too high. The receiver SHOULD 944 temporarily slow down flooding rates. When this value 945 is set to true, the flag can be carried in packet."; 946 } 947 description "The elements set in the LIEs."; 948 } // lie-elements 950 grouping link-id-pair { 951 leaf local-id { 952 type uint32; 953 description "The local-id of link connect to this neighbor."; 954 } 955 leaf remote-id { 956 type uint32; 957 description "The remote-id to reach this neighbor."; 958 } 959 leaf if-index { 960 type uint32; 961 description "The local index of this interface."; 962 } 963 leaf if-name { 964 type if:interface-ref; 965 description "The name of this interface."; 966 } 967 uses address-families; 968 description 969 "A pair of local and remote link IDs to identify a link between 970 two nodes."; 971 } // link-id-pair 973 grouping neighbor-node { 974 list link-id-pair { 975 key "remote-id"; 976 uses link-id-pair; 977 description 978 "The Multiple parallel links to this neighbor."; 979 } 980 leaf cost { 981 type uint32; 982 description "The cost value advertised by the neighbor."; 983 } 984 leaf bandwidth { 985 type uint32; 986 description 987 "Total bits bandwith to neighbor, this will be 988 normally sum of the bandwidths of all the 989 parallel links."; 990 } 991 container received-link-capabilities { 992 uses link-capabilities; 993 description 994 "The link capabilities advertised by the neighbor."; 995 } 996 description "The neighbor information indicated in node TIE."; 997 } // neighbor-node 998 grouping neighbor { 999 leaf protocol-version { 1000 type uint16; 1001 description 1002 "Represents the protocol encoding schema version of 1003 this neighbor."; 1004 } 1005 container sent-offer { 1006 leaf level { 1007 type level; 1008 description "The level value."; 1009 } 1010 leaf not-a-ztp-offer { 1011 type boolean; 1012 description "If the neighbor needs to be offer a level."; 1013 } 1014 description 1015 "The level sent to the neighbor in case the neighbor 1016 needs to be offered."; 1017 } 1018 container received-offer { 1019 leaf level { 1020 type level; 1021 description "The level value."; 1022 } 1023 leaf not-a-ztp-offer { 1024 type boolean; 1025 description 1026 "If this interface needs to be offered a level."; 1027 } 1028 leaf best { 1029 type boolean; 1030 description 1031 "If level is the best level received from all 1032 the neighbors."; 1033 } 1034 leaf removed-from-consideration { 1035 type boolean; 1036 description 1037 "If the level value is considered to be used. 1038 If the value is not considered to be used, 1039 this value is set to 'TRUE'."; 1040 } 1041 leaf removal-reason { 1042 type string; 1043 description 1044 "The reason why this value is not considered to 1045 be used."; 1047 } 1048 description 1049 "The level offered to the interface from the neighbor. 1050 And if the level value is considered to be used."; 1051 } 1052 container received-source-addresses { 1053 uses addresses; 1054 description 1055 "The source address of LIE and TIE packets from 1056 the neighbor."; 1057 } // received-offer 1058 uses neighbor-node; 1059 container received-in-lies { 1060 uses lie-elements; 1061 description "The attributes received from this neighbor."; 1062 } 1063 leaf tx-flood-port { 1064 type inet:port-number; 1065 default "915"; 1066 description 1067 "The UDP port which is used by the neighbor to flood TIEs."; 1068 } 1069 leaf bfd-up { 1070 type boolean; 1071 description 1072 "Indication whether the link is protected by established 1073 BFD session."; 1074 } 1075 leaf outer-security-key-id { 1076 type uint8; 1077 description 1078 "As described in section 4.4.3, the received security 1079 key id from the neighbor."; 1080 } 1081 description "The neighbor information."; 1082 } // neighbor 1084 grouping direction-type { 1085 leaf direction-type { 1086 type enumeration { 1087 enum illegal { 1088 description "Illegal direction."; 1089 } 1090 enum south { 1091 description "A link to a node one level down."; 1092 } 1093 enum north { 1094 description "A link to a node one level up."; 1096 } 1097 enum east-west { 1098 description "A link to a node in the same level."; 1099 } 1100 enum max { 1101 description "The max value of direction."; 1102 } 1103 } 1104 config false; 1105 description "The type of a link."; 1106 } 1107 description "The type of a link."; 1108 } // direction-type 1110 grouping tie-header { 1111 uses direction-type; 1112 leaf originator { 1113 type system-id; 1114 description "The originator's system-id of this TIE."; 1115 } 1117 leaf tie-type { 1118 type enumeration { 1119 enum "node" { 1120 description "The node TIE."; 1121 } 1122 enum "prefix" { 1123 description "The prefix TIE."; 1124 } 1125 enum "positive-disaggregation-prefix" { 1126 description "The positive disaggregation prefix TIE."; 1127 } 1128 enum "negative-disaggregation-prefix" { 1129 description "The negative disaggregation prefix TIE."; 1130 } 1131 enum "pgp-prefix" { 1132 description "The policy guide prefix TIE."; 1133 } 1134 enum "key-value" { 1135 description "The key value TIE."; 1136 } 1137 enum "external-prefix" { 1138 description "The external prefix TIE."; 1139 } 1140 enum "positive-external-disaggregation-prefix" { 1141 description 1142 "The positive external disaggregation prefix TIE."; 1143 } 1145 } 1146 description "The types of TIE."; 1147 } 1149 leaf tie-number { 1150 type uint32; 1151 description "The number of this TIE"; 1152 } 1154 leaf seq { 1155 type uint64; 1156 description 1157 "As described in section 4.2.3.1, the sequence number 1158 of a TIE."; 1159 } 1160 leaf origination-time { 1161 type uint32; 1162 description 1163 "Absolute timestamp when the TIE was generated. This can 1164 be used on fabrics with synchronized clock to prevent 1165 lifetime modification attacks."; 1166 } 1167 leaf origination-lifetime { 1168 type uint32; 1169 description 1170 "Original lifetime when the TIE was generated. 1171 This can be used on fabrics with synchronized clock to 1172 prevent lifetime modification attacks."; 1173 } 1175 description 1176 "TIE is the acronym for 'Topology Information Element'. 1177 TIEs are exchanged between RIFT nodes to describe parts 1178 of a network such as links and address prefixes. 1179 This is the TIE header information."; 1180 } // tie-header 1182 /* 1183 * Data nodes 1184 */ 1185 augment "/rt:routing/rt:control-plane-protocols" 1186 + "/rt:control-plane-protocol" { 1187 when "derived-from-or-self(rt:type, 'rift:rift')" { 1188 description 1189 "This augment is only valid when routing protocol 1190 instance type is 'RIFT'."; 1191 } 1192 description "RIFT ( Routing in Fat Trees ) YANG model."; 1193 container rift { 1194 description "RIFT configuration and state data."; 1196 uses base-node-info; 1197 leaf configured-level { 1198 type level; 1199 description 1200 "The configured level value of this node. 1201 If the 'hierarchy-indications' is set to 'leaf-only' 1202 or 'leaf-only-and-leaf-2-leaf-procedures', this value 1203 means the leaf level. 1204 And the combination of this value and 1205 'hierarchy-indications' can also be used to indicate 1206 the maximum level value of 'top-of-fabric-level'."; 1207 } 1208 container overload { 1209 description 1210 "If the overload in TIEs can be set 1211 and the timeout value with according type."; 1212 leaf overload { 1213 type boolean; 1214 description "If the overload bit in TIEs can be set."; 1215 } 1216 choice timeout-type { 1217 description 1218 "The value of timeout timer for overloading. 1219 This makes sense when overload is set to 'TRUE'."; 1220 case on-startup { 1221 leaf on-startup-timeout { 1222 type rt-types:timer-value-seconds16; 1223 description 1224 "Node goes into overload until this timer expires 1225 when starting up."; 1226 } 1227 } 1228 case immediate { 1229 leaf immediate-timeout { 1230 type rt-types:timer-value-seconds16; 1231 description 1232 "Set overload and remove after the timeout expired."; 1233 } 1234 } 1235 } 1236 } 1238 leaf protocol-major-version { 1239 type uint8; 1240 config false; 1241 mandatory true; 1242 description 1243 "Represents protocol encoding schema major version."; 1244 } 1245 leaf protocol-minor-version { 1246 type uint16; 1247 config false; 1248 mandatory true; 1249 description 1250 "Represents protocol encoding schema minor version."; 1251 } 1252 uses hierarchy-indications; 1253 leaf flood-reduction { 1254 type boolean; 1255 description 1256 "If the node supports flood reduction function defined in 1257 section 4.2.3.8. If this value is set to 'FALSE', it 1258 means that the flood reduction function is disabled."; 1259 } 1260 leaf nonce-increasing-interval { 1261 type uint16; 1262 units seconds; 1263 description 1264 "The configurable nonce increasing interval."; 1265 } 1266 leaf maximum-nonce-delta { 1267 if-feature nonce-delta-adjust; 1268 type uint8 { 1269 range "1..5"; 1270 } 1271 description 1272 "The configurable valid nonce delta value used for 1273 security. It is used as vulnerability window defined 1274 in section 4.4.7. 1275 If the nonces in received packet exceeds the range 1276 indicated by this value, the packet MUST be discarded."; 1277 } 1278 leaf adjusted-lifetime { 1279 type rt-types:timer-value-seconds16; 1280 units seconds; 1281 description 1282 "The adjusted lifetime may affect the TIE stability. 1283 Be careful to change this parameter."; 1284 } 1285 container rx-lie-multicast-address { 1286 uses addresses; 1287 description 1288 "The configurable LIE receiving IPv4/IPv6 multicast 1289 address. '224.0.0.120' is default address value. 1290 Different multicast addresses can be used for receiving 1291 and sending."; 1292 } 1293 container tx-lie-multicast-address { 1294 uses addresses; 1295 description 1296 "The configurable LIE sending IPv4/IPv6 multicast 1297 address. 'FF02::A1F7' is default address value. 1298 Different multicast addresses can be used for receiving 1299 and sending."; 1300 } 1301 leaf lie-tx-port { 1302 type inet:port-number; 1303 description 1304 "The UDP port of LIE packet sending. The default port 1305 number is 914. The value can be set to other value 1306 associated with different RIFT instance."; 1307 } 1309 container global-link-capabilities { 1310 uses link-capabilities; 1311 description 1312 "The node default link capabilities. It can be overwrite 1313 by the configuration underneath interface and neighbor."; 1314 } 1316 leaf rx-flood-port { 1317 type inet:port-number; 1318 default "915"; 1319 description 1320 "The UDP port which can be used to receive flooded 1321 TIEs. The default port number is 915. The value can 1322 be set to other value associated with different 1323 RIFT instance."; 1324 } 1325 leaf global-holdtime { 1326 type rt-types:timer-value-seconds16; 1327 units seconds; 1328 default "3"; 1329 description "The holding time of LIE."; 1330 } 1331 leaf tide-generation-interval { 1332 type rt-types:timer-value-seconds16; 1333 units seconds; 1334 default "5"; 1335 description "The TIDE generation interval."; 1336 } 1337 container tie-security { 1338 if-feature tie-security; 1339 uses security; 1340 description 1341 "As described in section 4.4.3, the security function 1342 used for the TIE exchange."; 1343 } 1344 choice algorithm-type { 1345 case spf { 1346 description "The algorithm is SPF."; 1347 } 1348 case all-path { 1349 description "The algorithm is all-path."; 1350 } 1351 description "The possible algorithm types."; 1352 } 1353 leaf instance-label { 1354 if-feature label-switching; 1355 type uint32; 1356 description 1357 "As per section 4.3.7, a locally significant, downstream 1358 assigned, interface specific label may be advertised in 1359 its LIEs. This value can be used to distinguish among 1360 multiple RIFT instances."; 1361 } 1363 container HAL { 1364 config false; 1365 leaf hal-value { 1366 type level; 1367 description 1368 "The highest defined level value seen from all valid 1369 level offers received."; 1370 } 1371 leaf-list system-id{ 1372 type system-id; 1373 description 1374 "The node's system-id of the offered level comes from."; 1375 } 1376 description 1377 "The highest defined level and the offered nodes set."; 1378 } 1380 leaf-list miscabled-links { 1381 type linkid-type; 1382 config false; 1383 description "List of miscabled links."; 1384 } 1385 list interface { 1386 key "name"; 1387 leaf link-id { 1388 type linkid-type; 1389 config false; 1390 description "The local id of this interface."; 1391 } 1392 leaf name { 1393 type if:interface-ref; 1394 description "The interface's name."; 1395 } 1396 leaf cost { 1397 type uint32; 1398 description 1399 "The cost from this interface to the neighbor."; 1400 } 1401 uses address-families; 1402 container advertised-source-addresses { 1403 uses addresses; 1404 description 1405 "The address used in the advertised LIE and TIE 1406 packets."; 1407 } 1408 uses direction-type; 1410 container security { 1411 if-feature tie-security; 1412 uses security; 1413 description 1414 "As described in section 4.4.3, the security function 1415 used for this interface."; 1416 } 1418 leaf security-checking { 1419 type enumeration { 1420 enum "no-checking" { 1421 description 1422 "The security envelop does not be checked."; 1423 } 1424 enum "permissive" { 1425 description 1426 "The security envelop checking is permissive."; 1427 } 1428 enum "loose" { 1429 description 1430 "The security envelop checking is loose."; 1431 } 1432 enum "strict" { 1433 description 1434 "The security envelop checking is strict."; 1435 } 1436 } 1437 description 1438 "The possible security checking types. 1439 Only one type can be set at the same time."; 1440 } 1442 leaf was-the-last-lie-accepted { 1443 type boolean; 1444 config false; 1445 description 1446 "If the most recently received LIE was accepted or 1447 rejected. If the LIE was rejected, the neighbor error 1448 notifications should be used to find the reason."; 1449 } 1450 leaf last-lie-reject-reason { 1451 type string; 1452 config false; 1453 description 1454 "Description for the reject reason of the last LIE."; 1455 } 1456 container advertised-in-lies { 1457 config false; 1458 uses lie-elements; 1459 description 1460 "The attributes advertised in the LIEs from 1461 this interface."; 1462 } 1463 container link-capabilities { 1464 uses link-capabilities; 1465 description 1466 "The interface's link capabilities."; 1467 } 1468 leaf state { 1469 type enumeration { 1470 enum "OneWay" { 1471 description "The initial state of neighbor."; 1472 } 1473 enum "TwoWay" { 1474 description "This means leaf to leaf."; 1475 } 1476 enum "ThreeWay" { 1477 description "The node is 'top of fabric'."; 1478 } 1479 enum "Multiple-Neighbors-Wait" { 1480 description "The node is 'top of fabric'."; 1482 } 1483 } 1484 config false; 1485 mandatory true; 1486 description "The hierarchy indications of this node."; 1487 } 1488 leaf number-of-flaps { 1489 type uint32; 1490 config false; 1491 description 1492 "The number of interface state flaps."; 1493 } 1494 leaf last-state-change { 1495 type yang:date-and-time; 1496 config false; 1497 description "Time duration in the current state."; 1498 } 1500 description "The interface information on this node."; 1501 } // list interface 1503 list neighbor { 1504 key "system-id"; 1505 config false; 1506 uses base-node-info; 1507 uses neighbor; 1508 description "The neighbor's information."; 1509 } 1511 container database { 1512 config false; 1513 list tie { 1514 key "direction-type originator tie-type tie-number"; 1515 description 1516 "A list of TIEs (Topology Information Elements)."; 1517 uses tie-header; 1519 container node { 1520 leaf level { 1521 type level; 1522 config false; 1523 description "The level of this node."; 1524 } 1525 list neighbor { 1526 key "system-id"; 1527 uses base-node-info; 1528 uses neighbor-node; 1529 description "The node TIE information of a neighbor."; 1531 } 1532 uses node-capability; 1533 uses node-flag; 1534 leaf name { 1535 type string; 1536 description 1537 "The name of this node. It won't be used as the key of node, 1538 just used for description."; 1539 } 1540 leaf pod { 1541 type uint32; 1542 description 1543 "Point of Delivery. The self-contained vertical slice of a 1544 Clos or Fat Tree network containing normally only level 0 1545 and level 1 nodes. It communicates with nodes in other PoDs 1546 via the spine. We number PoDs to distinguish them and use 1547 PoD #0 to denote 'undefined' PoD."; 1548 } 1549 leaf startup-time { 1550 type yang:date-and-time; 1551 description "Startup time of the node."; 1552 } 1553 leaf-list miscabled-links { 1554 type linkid-type; 1555 config false; 1556 description "List of miscabled links."; 1557 } 1558 description "The node element information in this TIE."; 1559 } // node 1561 container prefixes { 1562 description 1563 "The prefix element information in this TIE."; 1564 list prefix { 1565 key "prefix"; 1566 leaf prefix { 1567 type inet:ip-prefix; 1568 description "The prefix information."; 1569 } 1570 uses prefix-attribute; 1571 description "The prefix set information."; 1572 } 1573 } 1574 container positive-disaggregation-prefixes { 1575 list positive-disaggregation-prefix { 1576 key "positive-disaggregation-prefix"; 1577 leaf positive-disaggregation-prefix { 1578 type inet:ip-prefix; 1579 description "The prefix information."; 1580 } 1581 uses prefix-attribute; 1582 description 1583 "The positive disaggregation prefix information."; 1584 } 1585 description "The positive disaggregation prefixes set."; 1586 } 1587 container negative_disaggregation_prefixes { 1588 list negative_disaggregation_prefix { 1589 key "negative_disaggregation_prefix"; 1590 leaf negative_disaggregation_prefix { 1591 type inet:ip-prefix; 1592 description "The prefix information."; 1593 } 1594 uses prefix-attribute; 1595 description 1596 "The negative disaggregation prefix information."; 1597 } 1598 description "The negative disaggregation prefixes set."; 1599 } 1600 container external_prefixes { 1601 list external_prefix { 1602 key "external_prefix"; 1603 leaf external_prefix { 1604 type inet:ip-prefix; 1605 description "The prefix information."; 1606 } 1607 uses prefix-attribute; 1608 description "The external prefix information."; 1609 } 1610 description "The external prefixes set."; 1611 } 1612 container positive_external_disaggregation_prefixes { 1613 list positive_external_disaggregation_prefix { 1614 key "positive_external_disaggregation_prefix"; 1615 leaf positive_external_disaggregation_prefix { 1616 type inet:ip-prefix; 1617 description "The prefix information."; 1618 } 1619 uses prefix-attribute; 1620 description 1621 "The positive external disaggregation prefix 1622 information."; 1623 } 1624 description 1625 "The positive external disaggregation prefixes set."; 1626 } 1627 container key-value { 1628 leaf key { 1629 type binary; 1630 description "The type of key value combination."; 1631 } 1632 leaf value { 1633 type binary; 1634 description "The value of key value combination."; 1635 } 1636 description 1637 "The information used to distinguish a Key/Value 1638 pair. When the type of kv is set to 'node', 1639 node-element is making sense. When the type of 1640 kv is set to other values except 'node', 1641 prefix-info is making sense."; 1642 } // kv-store 1643 } // ties 1644 description "The TIEs information in database."; 1645 }// container database 1646 }//rift 1647 }//augment 1649 /* 1650 * Notifications 1651 */ 1652 notification error-set { 1653 description "The errors notification of RIFT."; 1654 container tie-level-error { 1655 list tie { 1656 key "originator"; 1657 uses tie-header; 1658 description "The level is undefined in the LIEs."; 1659 } 1660 description "The TIE errors set."; 1661 } 1662 container neighbor-error { 1663 list neighbor { 1664 key "system-id"; 1665 uses base-node-info; 1666 uses neighbor; 1667 description "The information of a neighbor."; 1668 } 1669 description "The neighbor errors set."; 1670 } 1671 } 1672 } 1673 1674 4. Security Considerations 1676 The YANG module specified in this document defines a schema for data 1677 that is designed to be accessed via network management protocols such 1678 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1679 is the secure transport layer, and the mandatory-to-implement secure 1680 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1681 is HTTPS, and the mandatory-to-implement secure transport is TLS 1682 [RFC8446]. 1684 The NETCONF access control model [RFC8341] provides the means to 1685 restrict access for particular NETCONF or RESTCONF users to a 1686 preconfigured subset of all available NETCONF or RESTCONF protocol 1687 operations and content. 1689 There are a number of data nodes defined in this YANG module that are 1690 writable/creatable/deletable (i.e., config true, which is the 1691 default). These data nodes may be considered sensitive or vulnerable 1692 in some network environments. Write operations (e.g., edit-config) 1693 to these data nodes without proper protection can have a negative 1694 effect on network operations. Writable data node represent 1695 configuration of each instance, node, interface, etc. These 1696 correspond to the following schema node: 1698 o /rift 1700 Modifying the configuration may cause all the RIFT neighborship to be 1701 rebuilt. For example, the configuration changing of configured-level 1702 or system-id, will lead to all the neighbor connections of this node 1703 rebuilt. The incorrect modification of authentication, except for 1704 the neighbor connection broken, will lead to the permanent connection 1705 broken. The modification of interface, will lead to the neighbor 1706 state changing. In general, unauthorized modification of most RIFT 1707 configurations will pose there own set of security risks and the 1708 "Security Considerations" in the respective reference RFCs should be 1709 consulted. 1711 Some of the readable data nodes in this YANG module may be considered 1712 sensitive or vulnerable in some network environments. It is thus 1713 important to control read access (e.g., via get, get-config, or 1714 notification) to these data nodes. These are the subtrees and data 1715 nodes and their sensitivity/vulnerability: 1717 o /rift 1719 o /rift/interface 1721 o /rift/neighbor 1722 o /rift/database 1724 The exposure of the database will expose the detailed topology of the 1725 network. Network operators may consider their topologies to be 1726 sensitive confidential data. 1728 For RIFT authentication, configuration is supported via the 1729 specification of key-chains [RFC8177] or the direct specification of 1730 key and authentication algorithm. Hence, authentication 1731 configuration inherits the security considerations of [RFC8177]. 1732 This includes the considerations with respect to the local storage 1733 and handling of authentication keys. 1735 5. IANA Considerations 1737 RFC Ed.: Please replace all occurrences of 'XXXX' with the actual RFC 1738 number (and remove this note). 1740 This document registers a URI in the IETF XML registry [RFC3688]. 1741 Following the format in [RFC3688], the following registration is 1742 requested to be made: 1744 URI: urn:ietf:params:xml:ns:yang:ietf-rift 1746 Registrant Contact: The IESG 1748 XML: N/A, the requested URI is an XML namespace. 1750 This document also requests one new YANG module name in the YANG 1751 Module Names registry [RFC6020] with the following suggestion: 1753 name: ietf-rift 1755 namespace: urn:ietf:params:xml:ns:yang:ietf-rift 1757 prefix: rift 1759 reference: RFC XXXX 1761 6. Acknowledgement 1763 The authors would like to thank Tony Przygienda, Benchong Xu 1764 (xu.benchong@zte.com.cn), for their review, valuable comments and 1765 suggestions. 1767 7. References 1769 7.1. Normative References 1771 [I-D.ietf-rift-rift] 1772 Przygienda, T., Sharma, A., Thubert, P., Rijsman, B., and 1773 D. Afanasiev, "RIFT: Routing in Fat Trees", draft-ietf- 1774 rift-rift-12 (work in progress), May 2020. 1776 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1777 Requirement Levels", BCP 14, RFC 2119, 1778 DOI 10.17487/RFC2119, March 1997, 1779 . 1781 [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1782 (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, 1783 DOI 10.17487/RFC5881, June 2010, 1784 . 1786 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1787 the Network Configuration Protocol (NETCONF)", RFC 6020, 1788 DOI 10.17487/RFC6020, October 2010, 1789 . 1791 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1792 and A. Bierman, Ed., "Network Configuration Protocol 1793 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1794 . 1796 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1797 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1798 . 1800 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1801 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1802 . 1804 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1805 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1806 . 1808 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 1809 RFC 7951, DOI 10.17487/RFC7951, August 2016, 1810 . 1812 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1813 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1814 . 1816 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1817 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1818 May 2017, . 1820 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1821 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1822 DOI 10.17487/RFC8177, June 2017, 1823 . 1825 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 1826 "Common YANG Data Types for the Routing Area", RFC 8294, 1827 DOI 10.17487/RFC8294, December 2017, 1828 . 1830 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1831 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1832 . 1834 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 1835 Access Control Model", STD 91, RFC 8341, 1836 DOI 10.17487/RFC8341, March 2018, 1837 . 1839 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1840 and R. Wilton, "Network Management Datastore Architecture 1841 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1842 . 1844 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 1845 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 1846 . 1848 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1849 Routing Management (NMDA Version)", RFC 8349, 1850 DOI 10.17487/RFC8349, March 2018, 1851 . 1853 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1854 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 1855 . 1857 [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. 1858 Perkins, "Registration Extensions for IPv6 over Low-Power 1859 Wireless Personal Area Network (6LoWPAN) Neighbor 1860 Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, 1861 . 1863 7.2. Informative References 1865 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1866 DOI 10.17487/RFC3688, January 2004, 1867 . 1869 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 1870 Documents Containing YANG Data Models", BCP 216, RFC 8407, 1871 DOI 10.17487/RFC8407, October 2018, 1872 . 1874 [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, 1875 E., and A. Tripathy, "Subscription to YANG Notifications", 1876 RFC 8639, DOI 10.17487/RFC8639, September 2019, 1877 . 1879 [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications 1880 for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, 1881 September 2019, . 1883 Authors' Addresses 1885 Bruno Rijsman 1886 Individual 1888 Email: brunorijsman@gmail.com 1890 Zheng Zhang (editor) 1891 ZTE Corporation 1893 Email: zhang.zheng@zte.com.cn 1895 Yuehua Wei 1896 ZTE Corporation 1898 Email: wei.yuehua@zte.com.cn 1900 Shaowen Ma 1901 Google 1903 Email: mashaowen@gmail.com 1904 Xufeng Liu 1905 Volta Networks 1907 Email: xufeng.liu.ietf@gmail.com