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