| rfc9719.original | rfc9719.txt | |||
|---|---|---|---|---|
| RIFT WG Z. Zhang | Internet Engineering Task Force (IETF) Z. Zhang | |||
| Internet-Draft Y. Wei | Request for Comments: 9719 Y. Wei | |||
| Intended status: Standards Track ZTE Corporation | Category: Standards Track ZTE Corporation | |||
| Expires: 18 February 2025 S. Ma | ISSN: 2070-1721 S. Ma | |||
| X. Liu | X. Liu | |||
| Alef Edge | ||||
| B. Rijsman | B. Rijsman | |||
| Individual | Individual | |||
| 17 August 2024 | March 2025 | |||
| YANG Data Model for Routing in Fat Trees (RIFT) | YANG Data Model for Routing in Fat Trees (RIFT) | |||
| draft-ietf-rift-yang-17 | ||||
| Abstract | Abstract | |||
| This document defines a YANG data model for the configuration and | This document defines a YANG data model for the configuration and | |||
| management of Routing in Fat Trees (RIFT) Protocol. The model is | management of the Routing in Fat Trees (RIFT) Protocol. The model is | |||
| based on YANG 1.1 as defined in RFC7950 and conforms to the Network | based on YANG 1.1, which is defined in RFC 7950 and conforms to the | |||
| Management Datastore Architecture (NMDA) as described in RFC8342. | Network Management Datastore Architecture (NMDA) as described in RFC | |||
| 8342. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 18 February 2025. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9719. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 | 1.1. Terminology | |||
| 1.2. Conventions Used in This Document . . . . . . . . . . . . 3 | 1.2. Conventions Used in This Document | |||
| 1.3. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 | 1.3. Tree Diagrams | |||
| 1.4. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 | 1.4. Prefixes in Data Node Names | |||
| 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 4 | 2. Design of the Data Model | |||
| 2.1. Scope of Model . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Scope of Model | |||
| 2.2. Specification . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Specification | |||
| 2.3. Overview . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.3. Overview | |||
| 2.4. RIFT configuration . . . . . . . . . . . . . . . . . . . 14 | 2.4. RIFT Configuration | |||
| 2.5. RIFT States . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.5. RIFT States | |||
| 2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 14 | 2.6. Notifications | |||
| 3. RIFT YANG model . . . . . . . . . . . . . . . . . . . . . . . 14 | 3. RIFT YANG Module | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 55 | 4. Security Considerations | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 57 | 5. IANA Considerations | |||
| 6. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 58 | 6. References | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 58 | 6.1. Normative References | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 58 | 6.2. Informative References | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 60 | Acknowledgments | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| RFC Ed.: Please replace all occurrences of 'I-D.ietf-rift-rift' with | [RFC9692] introduces the protocol definition of RIFT. This document | |||
| the actual RFC number of draft-ietf-rift-rift (and remove this note). | defines one NMDA-compatible [RFC8342] YANG 1.1 [RFC7950] data model | |||
| for the management of the RIFT protocol. This model imports and | ||||
| [I-D.ietf-rift-rift] introduces the protocol definition of RIFT. | augments the ietf-routing YANG data model defined in [RFC8349]. | |||
| This document defines one NMDA compatible [RFC8342] YANG 1.1 | ||||
| [RFC7950] model for the management of RIFT protocol. This model | ||||
| imports and augments ietf-routing YANG model defined in [RFC8349]. | ||||
| 1.1. Terminology | 1.1. Terminology | |||
| The following terminologies and abbreviations are used in this | The following terminology and abbreviations are used in this document | |||
| document and the defined model: | and the defined model. | |||
| The content is copied from [I-D.ietf-rift-rift] for reading | The content is copied from [RFC9692] for reading convenience. | |||
| convenience. | ||||
| Clos/Fat Tree: It refers to a folded spine-and-leaf topology with | Clos / Fat Tree: | |||
| possibly multiple Points of Delivery (PoDs) and one or multiple Top | This document uses the terms "Clos" and "Fat Tree" interchangeably | |||
| of Fabric (ToF) planes. | where it always refers to a folded spine-and-leaf topology with | |||
| possibly multiple Points of Delivery (PoDs) and one or multiple | ||||
| Top of Fabric (ToF) planes. | ||||
| RIFT: Routing in Fat Trees [I-D.ietf-rift-rift]. | RIFT: | |||
| Routing in Fat Trees [RFC9692]. | ||||
| LIE: "Link Information Element" are exchanged on all the system's | LIE: | |||
| links running RIFT to form ThreeWay adjacencies and carry information | This is an acronym for a "Link Information Element" exchanged on | |||
| used to perform Zero Touch Provisioning (ZTP) of levels. | all the system's links running RIFT to form _ThreeWay_ adjacencies | |||
| and carry information used to perform RIFT Zero Touch Provisioning | ||||
| (ZTP) of levels. | ||||
| PoD: "Point of Delivery" means a self-contained vertical slice or | Point of Delivery (PoD): | |||
| subset of a Clos or Fat Tree network containing normally only level 0 | A self-contained vertical slice or subset of a Clos or Fat Tree | |||
| and level 1 nodes. A node in a PoD communicates with nodes in other | network normally containing only level 0 and level 1 nodes. A | |||
| PoDs via the ToF nodes. PoDs are numbered to distinguish them and | node in a PoD communicates with nodes in other PoDs via the ToF | |||
| PoD value 0 is used to denote "undefined" or "any" PoD. | nodes. PoDs are numbered to distinguish them, and PoD value 0 is | |||
| used to denote "undefined" or "any" PoD. | ||||
| ThreeWay Adjacency: A unique adjacency between two nodes over a | ThreeWay Adjacency: | |||
| point-to-point interface and exchange local configuration and | RIFT tries to form a unique adjacency between two nodes over a | |||
| necessary RIFT ZTP information. An adjacency is only advertised in | point-to-point interface and exchange local configuration and | |||
| Node TIEs and used for computations after it achieved ThreeWay state, | necessary RIFT ZTP information. An adjacency is only advertised | |||
| i.e. both routers reflected each other in LIEs including relevant | in Node TIEs and used for computations after it achieved | |||
| security information. Nevertheless, LIEs before ThreeWay state is | _ThreeWay_ state, i.e., both routers reflected each other in LIEs, | |||
| reached may carry RIFT ZTP related information already. | including relevant security information. Nevertheless, LIEs | |||
| before _ThreeWay_ state is reached may carry RIFT ZTP related | ||||
| information already. | ||||
| TIE: "Topology Information Element" are exchanged between RIFT nodes | TIEs: | |||
| to describe parts of a network such as links and address prefixes. A | This is an acronym for a "Topology Information Element". TIEs are | |||
| TIE has always a direction and a type. North TIEs (sometimes | exchanged between RIFT nodes to describe parts of a network such | |||
| abbreviated as N-TIEs) are used when dealing with TIEs in the | as links and address prefixes. A TIE has always a direction and a | |||
| northbound representation and South-TIEs (sometimes abbreviated as | type. North TIEs (sometimes abbreviated as N-TIEs) are used when | |||
| S-TIEs) for the southbound equivalent. TIEs have different types | dealing with TIEs in the northbound representation, and South TIEs | |||
| such as node and prefix TIEs. | (sometimes abbreviated as S-TIEs) for the southbound equivalent. | |||
| TIEs have different types, such as node and prefix TIEs. | ||||
| ToF: "Top of Fabric" is the set of nodes that provide inter-PoD | Top of Fabric (ToF): | |||
| communication and have no northbound adjacencies, i.e. are at the | The set of nodes that provide inter-PoD communication and have no | |||
| "very top" of the fabric. ToF nodes do not belong to any PoD and are | northbound adjacencies, i.e., are at the "very top" of the fabric. | |||
| assigned default PoD value to indicate the equivalent of "any" PoD. | ToF nodes do not belong to any PoD and are assigned the default | |||
| PoD value to indicate the equivalent of "any" PoD. | ||||
| 1.2. Conventions Used in This Document | 1.2. Conventions Used in This Document | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 1.3. Tree Diagrams | 1.3. Tree Diagrams | |||
| Tree diagrams used in this document follow the notation defined in | Tree diagrams used in this document follow the notation defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| 1.4. Prefixes in Data Node Names | 1.4. Prefixes in Data Node Names | |||
| In this document, names of data nodes, actions, and other data model | In this document, names of data nodes, actions, and other data model | |||
| objects are often used without a prefix, as long as it is clear from | objects are often used without a prefix, as long as it is clear from | |||
| the context in which YANG module each name is defined. Otherwise, | the context in which YANG module each name is defined. Otherwise, | |||
| names are prefixed using the standard prefix associated with the | names are prefixed using the standard prefix associated with the | |||
| corresponding YANG module, as shown in Table 1. | corresponding YANG module as shown in Table 1. | |||
| +===============+====================+===========+ | +===============+====================+===========+ | |||
| | Prefix | YANG module | Reference | | | Prefix | YANG Module | Reference | | |||
| +===============+====================+===========+ | +===============+====================+===========+ | |||
| | yang | ietf-yang-types | [RFC6991] | | | yang | ietf-yang-types | [RFC6991] | | |||
| +---------------+--------------------+-----------+ | +---------------+--------------------+-----------+ | |||
| | inet | ietf-inet-types | [RFC6991] | | | inet | ietf-inet-types | [RFC6991] | | |||
| +---------------+--------------------+-----------+ | +---------------+--------------------+-----------+ | |||
| | rt | ietf-routing | [RFC8349] | | | rt | ietf-routing | [RFC8349] | | |||
| +---------------+--------------------+-----------+ | +---------------+--------------------+-----------+ | |||
| | if | ietf-interfaces | [RFC8343] | | | if | ietf-interfaces | [RFC8343] | | |||
| +---------------+--------------------+-----------+ | +---------------+--------------------+-----------+ | |||
| | rt-types | ietf-routing-types | [RFC8294] | | | rt-types | ietf-routing-types | [RFC8294] | | |||
| skipping to change at page 5, line 14 ¶ | skipping to change at line 195 ¶ | |||
| The model contains all the basic configuration parameters to operate | The model contains all the basic configuration parameters to operate | |||
| the protocol. Depending on the implementation choices, some systems | the protocol. Depending on the implementation choices, some systems | |||
| may not allow some of the advanced parameters to be configurable. | may not allow some of the advanced parameters to be configurable. | |||
| The occasionally implemented parameters are modeled as optional | The occasionally implemented parameters are modeled as optional | |||
| features in this model. This model can be extended, and it has been | features in this model. This model can be extended, and it has been | |||
| structured in a way that such extensions can be conveniently made. | structured in a way that such extensions can be conveniently made. | |||
| The RIFT YANG module augments the /routing/control-plane-protocols/ | The RIFT YANG module augments the /routing/control-plane-protocols/ | |||
| control-plane-protocol path defined in the ietf-routing module. This | control-plane-protocol path defined in the ietf-routing module. This | |||
| model augments the routing module to add RIFT as a control plane | model augments the routing module to add RIFT as a control-plane | |||
| protocol. It then offers the ability to create a list of instances, | protocol. It then offers the ability to create a list of instances, | |||
| which it does by declaring 'list rift'. Multiple instances of the | which it does by declaring 'list rift'. Multiple instances of the | |||
| protocol are supported by the module by giving each instance a unique | protocol are supported by the module by giving each instance a unique | |||
| name. | name. | |||
| 2.2. Specification | 2.2. Specification | |||
| This model imports and augments ietf-routing YANG model defined in | This model imports and augments ietf-routing YANG model defined in | |||
| [RFC8349]. The container "rift" is the top level container in this | [RFC8349]. The container "rift" is the top-level container in this | |||
| data model. The container is expected to enable RIFT protocol | data model. The container is expected to enable RIFT protocol | |||
| functionality. | functionality. | |||
| The YANG data model defined in this document conforms to the Network | The YANG data model defined in this document conforms to the Network | |||
| Management Datastore Architecture (NMDA) [RFC8342]. The operational | Management Datastore Architecture (NMDA) [RFC8342]. The operational | |||
| state data is combined with the associated configuration data in the | state data is combined with the associated configuration data in the | |||
| same hierarchy [RFC8407]. | same hierarchy [RFC8407]. | |||
| 2.3. Overview | 2.3. Overview | |||
| The RIFT YANG module defined in this document has all the common | The RIFT YANG module defined in this document has all the common | |||
| building blocks for the RIFT protocol. | building blocks for the RIFT protocol. | |||
| The RIFT YANG module augments the /routing/control-plane-protocols/ | At a high level, the RIFT YANG model is organized into five elements: | |||
| control-plane-protocol path defined in the ietf-routing module. This | ||||
| model augments the routing module to add RIFT as a control plane | ||||
| protocol. It then offers the ability to create a list of instances, | ||||
| which it does by declaring 'list rift'. Multiple instances of the | ||||
| protocol are supported by the module by giving each instance a unique | ||||
| name. | ||||
| At a high level, RIFT YANG model is organized into five elements: | ||||
| * base protocol configuration -- configuration affecting RIFT | base protocol configuration -- Configuration affecting RIFT | |||
| protocol-related operations. | protocol-related operations. | |||
| * interface configuration -- configuration affecting the interface | interface configuration -- Configuration affecting the interface | |||
| operations. | operations. | |||
| * neigbor status -- information of neighbors. | neighbor status -- Information of neighbors. | |||
| * database -- information of TIEs. | database -- Information of TIEs. | |||
| * statistics-- statistics of SPF, interface and neighbor. | statistics -- Statistics of SPF, interface, and neighbor. | |||
| module: ietf-rift | module: ietf-rift | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
| +--rw rift* [name] | +--rw rift* [name] | |||
| +--rw name string | +--rw name string | |||
| +--rw global | +--rw global | |||
| | +--ro node-level? level | | +--ro node-level? level | |||
| | +--rw system-id system-id | | +--rw system-id system-id | |||
| | +--rw fabric-id? uint16 | | +--rw fabric-id? uint16 | |||
| skipping to change at page 9, line 16 ¶ | skipping to change at line 382 ¶ | |||
| | | +--ro bfd-state? enumeration | | | +--ro bfd-state? enumeration | |||
| | | +--ro outer-security-key-id? uint8 | | | +--ro outer-security-key-id? uint8 | |||
| | | +--ro local-nonce? uint16 | | | +--ro local-nonce? uint16 | |||
| | | +--ro remote-nonce? uint16 | | | +--ro remote-nonce? uint16 | |||
| | | +---x clear-neighbor | | | +---x clear-neighbor | |||
| | +---x clear-all-neighbors | | +---x clear-all-neighbors | |||
| +--ro statistics | +--ro statistics | |||
| | +--ro global | | +--ro global | |||
| | | +--ro total-num-routes-north? | | | +--ro total-num-routes-north? | |||
| | | | yang:zero-based-counter32 | | | | yang:zero-based-counter32 | |||
| | | +--ro total-num-routes-sourth? | | | +--ro total-num-routes-south? | |||
| | | yang:zero-based-counter32 | | | yang:zero-based-counter32 | |||
| | +--ro spf-statistics* [spf-direction-type] | | +--ro spf-statistics* [spf-direction-type] | |||
| | | +--ro spf-direction-type enumeration | | | +--ro spf-direction-type enumeration | |||
| | | +--ro start-time? yang:date-and-time | | | +--ro start-time? yang:date-and-time | |||
| | | +--ro end-time? yang:date-and-time | | | +--ro end-time? yang:date-and-time | |||
| | | +--ro triggering-tie | | | +--ro triggering-tie | |||
| | | | +--ro tie-direction-type? enumeration | | | | +--ro tie-direction-type? enumeration | |||
| | | | +--ro originator? system-id | | | | +--ro originator? system-id | |||
| | | | +--ro tie-type? enumeration | | | | +--ro tie-type? enumeration | |||
| | | | +--ro tie-number? uint32 | | | | +--ro tie-number? uint32 | |||
| skipping to change at page 14, line 24 ¶ | skipping to change at line 630 ¶ | |||
| +--ro neighbor-error | +--ro neighbor-error | |||
| +--ro rift* [name] | +--ro rift* [name] | |||
| +--ro name string | +--ro name string | |||
| +--ro interfaces* [name] | +--ro interfaces* [name] | |||
| +--ro link-id? uint32 | +--ro link-id? uint32 | |||
| +--ro name if:interface-ref | +--ro name if:interface-ref | |||
| +--ro neighbors* [system-id] | +--ro neighbors* [system-id] | |||
| +--ro system-id system-id | +--ro system-id system-id | |||
| +--ro node-level? level | +--ro node-level? level | |||
| 2.4. RIFT configuration | 2.4. RIFT Configuration | |||
| The RIFT configuration includes node global configuration and | The RIFT configuration includes node global configuration and | |||
| interface configuration. Some features can be used to enhance | interface configuration. Some features can be used to enhance | |||
| protocol, such as BFD [RFC5881], flooding-reducing section 6.3.9 | protocols, such as BFD [RFC5881] with flooding reduction | |||
| [I-D.ietf-rift-rift]. | (Section 6.3.9 of [RFC9692]). | |||
| 2.5. RIFT States | 2.5. RIFT States | |||
| The state data nodes include node, interface, neighbor and database | The state data nodes include node, interface, neighbor, and database | |||
| information. | information. | |||
| YANG actions are defined to clear the connection of one specific | YANG actions are defined to clear the connection of one specific | |||
| neighbor on an interface, clear the connections of all neighbors on | neighbor on an interface, clear the connections of all neighbors on | |||
| an interface, or clear some or all statistics. | an interface, or clear some or all statistics. | |||
| 2.6. Notifications | 2.6. Notifications | |||
| Unexpected TIE and neighbor's layer error should be notified. | Unexpected TIE and neighbor layer errors should be notified. | |||
| 3. RIFT YANG model | 3. RIFT YANG Module | |||
| This module references [I-D.ietf-rift-rift], [RFC5881], [RFC6991], | This module references [RFC9692], [RFC5881], [RFC6991], [RFC8177], | |||
| [RFC8177], [RFC8294], [RFC8343], [RFC8349], [RFC8505], [IEEE8021AS]. | [RFC8294], [RFC8343], [RFC8349], [RFC8505], and [IEEE8021AS]. | |||
| <CODE BEGINS> file "ietf-rift@2024-08-16.yang" | <CODE BEGINS> file "ietf-rift@2025-01-15.yang" | |||
| module ietf-rift { | module ietf-rift { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; | namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; | |||
| prefix rift; | prefix rift; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix inet; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix yang; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix rt; | |||
| reference | reference | |||
| "RFC 8349: A YANG Data Model for Routing Management | "RFC 8349: A YANG Data Model for Routing Management | |||
| (NMDA Version)"; | (NMDA Version)"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix if; | |||
| reference | reference | |||
| "RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix "rt-types"; | prefix rt-types; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import iana-routing-types { | import iana-routing-types { | |||
| prefix "iana-rt-types"; | prefix iana-rt-types; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import ietf-key-chain { | import ietf-key-chain { | |||
| prefix "key-chain"; | prefix key-chain; | |||
| reference | reference | |||
| "RFC 8177: YANG Data Model for Key Chains"; | "RFC 8177: YANG Data Model for Key Chains"; | |||
| } | } | |||
| organization | organization | |||
| "IETF RIFT (Routing In Fat Trees) Working Group"; | "IETF RIFT (Routing In Fat Trees) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/rift/> | "WG Web: <https://datatracker.ietf.org/wg/rift/> | |||
| WG List: <mailto:rift@ietf.org> | WG List: <mailto:rift@ietf.org> | |||
| Editor: Zheng Zhang | Author: Zheng (Sandy) Zhang | |||
| <mailto:zhang.zheng@zte.com.cn> | <mailto:zhang.zheng@zte.com.cn> | |||
| Editor: Yuehua Wei | Author: Yuehua Wei | |||
| <mailto:wei.yuehua@zte.com.cn> | <mailto:wei.yuehua@zte.com.cn> | |||
| Editor: Shaowen Ma | Author: Shaowen Ma | |||
| <mailto:mashaowen@gmail.com> | <mailto:mashaowen@gmail.com> | |||
| Editor: Xufeng Liu | Author: Xufeng Liu | |||
| <mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
| Editor: Bruno Rijsman | Author: Bruno Rijsman | |||
| <mailto:brunorijsman@gmail.com>"; | <mailto:brunorijsman@gmail.com>"; | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove | ||||
| // this note | ||||
| description | description | |||
| "This YANG module defines the generic configuration and | "This YANG module defines the generic configuration and | |||
| operational state for the RIFT protocol common to all | operational state for the RIFT protocol common to all | |||
| vendor implementations. It is intended that the module | vendor implementations. It is intended that the module | |||
| will be extended by vendors to define vendor-specific | will be extended by vendors to define vendor-specific | |||
| RIFT configuration parameters and policies -- | RIFT configuration parameters and policies -- | |||
| for example, route maps or route policies. | for example, route maps or route policies. | |||
| Copyright (c) 2024 IETF Trust and the persons identified as | Copyright (c) 2025 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9719 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9719); see the RFC itself | |||
| for full legal notices. | for full legal notices. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here."; | they appear in all capitals, as shown here."; | |||
| revision 2024-08-16 { | revision 2025-01-15 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFCXXXX: YANG Data Model for Routing in Fat Trees | "RFC 9719: YANG Data Model for Routing in Fat Trees | |||
| (RIFT)."; | (RIFT)."; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature nonce-delta-adjust { | feature nonce-delta-adjust { | |||
| description | description | |||
| "Support weak nonce delta adjusting which is used in | "Support weak nonce delta adjusting that is used in | |||
| security."; | security."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| feature label-switching { | feature label-switching { | |||
| description | description | |||
| "Support label switching for instance distinguishing."; | "Support label switching for instance distinguishing."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.8.8"; | Section 6.8.8"; | |||
| } | } | |||
| feature tie-security { | feature tie-security { | |||
| description | description | |||
| "Support security function for the TIE exchange."; | "Support security function for the TIE exchange."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| feature link-security { | feature link-security { | |||
| description | description | |||
| "Support security function of link."; | "Support security function of link."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| typedef system-id { | typedef system-id { | |||
| type string { | type string { | |||
| pattern | pattern | |||
| '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; | '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; | |||
| } | } | |||
| description | description | |||
| "This type defines RIFT system id using pattern, | "This type defines the pattern for RIFT System IDs. | |||
| the system id looks like: 0021.2FFF.FEB5.6E10"; | An example of a System ID is 0021.2FFF.FEB5.6E10."; | |||
| } | } | |||
| typedef level { | typedef level { | |||
| type uint8 { | type uint8 { | |||
| range "0 .. 24"; | range "0 .. 24"; | |||
| } | } | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "The value of node level. | "The value of node level. | |||
| Clos and Fat Tree networks are topologically partially | Clos and Fat Tree networks are topologically partially | |||
| ordered graphs and 'level' denotes the set of nodes at | ordered graphs and 'level' denotes the set of nodes at | |||
| the same height in such a network. | the same height in such a network. | |||
| Nodes at the top level (i.e., ToF) are at the level with | Nodes at the top level (i.e., ToF) are at the level with | |||
| the highest value and count down to the nodes | the highest value and count down to the nodes | |||
| at the bottom level (i.e., leaf) with the lowest value. | at the bottom level (i.e., leaf) with the lowest value. | |||
| In RIFT, Level 0 always indicates that a node is a leaf, | In RIFT, level 0 always indicates that a node is a leaf, | |||
| but does not have to be level 0. | but does not have to be level 0. | |||
| Level values can be configured manually or automatically | Level values can be configured manually or automatically | |||
| derived."; | derived."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.7."; | Section 6.7."; | |||
| } | } | |||
| typedef ieee802-1as-timestamp { | typedef ieee802-1as-timestamp { | |||
| type uint64; | type uint64; | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "Timestamp per IEEE802.1AS. It is advertised with prefix | "Timestamp per IEEE802.1AS. It is advertised with prefix | |||
| to achieve mobility."; | to achieve mobility."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. Section 6.8.4. | "RFC 9692: RIFT: Routing in Fat Trees. Section 6.8.4. | |||
| IEEE8021AS: Timing and Synchronization for Time-Sensitive | IEEE8021AS: Timing and Synchronization for Time-Sensitive | |||
| Applications in Bridged Local Area Networks"; | Applications in Bridged Local Area Networks"; | |||
| } | } | |||
| /* | /* | |||
| * Identity | * Identity | |||
| */ | */ | |||
| identity rift { | identity rift { | |||
| base rt:routing-protocol; | base rt:routing-protocol; | |||
| description | description | |||
| "Identity for the RIFT routing protocol."; | "Identity for the RIFT routing protocol."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees"; | "RFC 9692: RIFT: Routing in Fat Trees"; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping address-families { | grouping address-families { | |||
| leaf-list address-families { | leaf-list address-families { | |||
| type iana-rt-types:address-family; | type iana-rt-types:address-family; | |||
| description | description | |||
| "Indication which address families are up on the | "Indication which address families are up on the | |||
| interface."; | interface."; | |||
| } | } | |||
| description | description | |||
| "Containing address families on the interface."; | "Containing address families on the interface."; | |||
| } | } | |||
| grouping hierarchy-indications { | grouping hierarchy-indications { | |||
| leaf hierarchy-indications { | leaf hierarchy-indications { | |||
| type enumeration { | type enumeration { | |||
| enum "leaf-only" { | enum leaf-only { | |||
| description | description | |||
| "The node will never leave the | "The node will never leave the | |||
| 'bottom of the hierarchy'. | 'bottom of the hierarchy'. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the minimum level value."; | is the minimum level value."; | |||
| } | } | |||
| enum "leaf-only-and-leaf-2-leaf-procedures" { | enum leaf-only-and-leaf-2-leaf-procedures { | |||
| description | description | |||
| "This means leaf to leaf. | "This means leaf to leaf. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the minimum level value."; | is the minimum level value."; | |||
| } | } | |||
| enum "top-of-fabric" { | enum top-of-fabric { | |||
| description | description | |||
| "The node is 'top of fabric'. | "The node is 'top of fabric'. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the maximum level value."; | is the maximum level value."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The hierarchy indications of this node."; | "The hierarchy indications of this node."; | |||
| } | } | |||
| description | description | |||
| "Flags indicating node configuration in case of ZTP"; | "Flags indicating node configuration in case of ZTP."; | |||
| } | } | |||
| grouping node-capability { | grouping node-capability { | |||
| leaf proto-minor-ver { | leaf proto-minor-ver { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "Represents the minor protocol encoding schema | "Represents the minor protocol encoding schema | |||
| version of this node."; | version of this node."; | |||
| } | } | |||
| leaf flood-reduction { | leaf flood-reduction { | |||
| skipping to change at page 20, line 39 ¶ | skipping to change at line 918 ¶ | |||
| "The hierarchy-indications of the node."; | "The hierarchy-indications of the node."; | |||
| uses hierarchy-indications; | uses hierarchy-indications; | |||
| } | } | |||
| description | description | |||
| "The supported capabilities of this node."; | "The supported capabilities of this node."; | |||
| } | } | |||
| grouping tie-type { | grouping tie-type { | |||
| leaf tie-type { | leaf tie-type { | |||
| type enumeration { | type enumeration { | |||
| enum "illegal" { | enum illegal { | |||
| description | description | |||
| "The illegal TIE."; | "The illegal TIE."; | |||
| } | } | |||
| enum "min-tie-type" { | enum min-tie-type { | |||
| description | description | |||
| "The minimum TIE."; | "The minimum TIE."; | |||
| } | } | |||
| enum "node" { | enum node { | |||
| description | description | |||
| "The node TIE."; | "The node TIE."; | |||
| } | } | |||
| enum "prefix" { | enum prefix { | |||
| description | description | |||
| "The prefix TIE."; | "The prefix TIE."; | |||
| } | } | |||
| enum "positive-disaggregation-prefix" { | enum positive-disaggregation-prefix { | |||
| description | description | |||
| "The positive disaggregation prefix TIE."; | "The positive disaggregation prefix TIE."; | |||
| } | } | |||
| enum "negative-disaggregation-prefix" { | enum negative-disaggregation-prefix { | |||
| description | description | |||
| "The negative disaggregation prefix TIE."; | "The negative disaggregation prefix TIE."; | |||
| } | } | |||
| enum "pgp-prefix" { | enum pgp-prefix { | |||
| description | description | |||
| "The policy guide prefix TIE."; | "The policy guide prefix TIE."; | |||
| } | } | |||
| enum "key-value" { | enum key-value { | |||
| description | description | |||
| "The key value TIE."; | "The key value TIE."; | |||
| } | } | |||
| enum "external-prefix" { | enum external-prefix { | |||
| description | description | |||
| "The external prefix TIE."; | "The external prefix TIE."; | |||
| } | } | |||
| enum "positive-external-disaggregation-prefix" { | enum positive-external-disaggregation-prefix { | |||
| description | description | |||
| "The positive external disaggregation prefix TIE."; | "The positive external disaggregation prefix TIE."; | |||
| } | } | |||
| enum "max-tie-type" { | enum max-tie-type { | |||
| description | description | |||
| "The maximum TIE."; | "The maximum TIE."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The types of TIE."; | "The types of TIE."; | |||
| } | } | |||
| description | description | |||
| "The types of TIE"; | "The types of TIE."; | |||
| } | } | |||
| grouping prefix-attribute { | grouping prefix-attribute { | |||
| leaf metric { | leaf metric { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The metric of this prefix."; | "The metric of this prefix."; | |||
| } | } | |||
| leaf-list tags { | leaf-list tags { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The tags of this prefix."; | "The tags of this prefix."; | |||
| } | } | |||
| skipping to change at page 22, line 27 ¶ | skipping to change at line 1002 ¶ | |||
| description | description | |||
| "As per RFC 8505, a sequence number called a | "As per RFC 8505, a sequence number called a | |||
| Transaction ID (TID) with a prefix can be | Transaction ID (TID) with a prefix can be | |||
| advertised."; | advertised."; | |||
| reference | reference | |||
| "RFC 8505: Registration Extensions for IPv6 over | "RFC 8505: Registration Extensions for IPv6 over | |||
| Low-Power Wireless Personal Area Network (6LoWPAN) | Low-Power Wireless Personal Area Network (6LoWPAN) | |||
| Neighbor Discovery"; | Neighbor Discovery"; | |||
| } | } | |||
| description | description | |||
| "The prefix sequence attribute which can be advertised | "The prefix sequence attribute that can be advertised | |||
| for mobility."; | for mobility."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.8.4."; | Section 6.8.4."; | |||
| } | } | |||
| description | description | |||
| "The monotonic clock for mobile addresses."; | "The monotonic clock for mobile addresses."; | |||
| } | } | |||
| leaf loopback { | leaf loopback { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If the value is set to 'true', it | "If the value is set to 'true', it | |||
| indicates if the interface is a node loopback. | indicates if the interface is a node loopback. | |||
| The node's loopback address can be injected into | The node's loopback address can be injected into | |||
| North and South Prefix TIEs for node reachability."; | Prefix North and Prefix South TIEs for node reachability."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.4."; | Section 6.4."; | |||
| } | } | |||
| leaf directly-attached { | leaf directly-attached { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If the value is set to 'true', it indicates that the | "If the value is set to 'true', it indicates that the | |||
| prefix is directly attached, i.e. should be routed to | prefix is directly attached, i.e., should be routed to | |||
| even if the node is in overload."; | even if the node is in overload."; | |||
| } | } | |||
| leaf from-link { | leaf from-link { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "In case of locally originated prefixes, | "In case of locally originated prefixes, | |||
| i.e. interface addresses this can describe which | i.e., interface addresses this can describe which | |||
| link the address belongs to."; | link the address belongs to."; | |||
| } | } | |||
| leaf label { | leaf label { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Per prefix significant label."; | "Per prefix significant label."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees"; | "RFC 9692: RIFT: Routing in Fat Trees"; | |||
| } | } | |||
| description | description | |||
| "The attributes of the prefix."; | "The attributes of the prefix."; | |||
| } | } | |||
| grouping security { | grouping security { | |||
| leaf security-type { | leaf security-type { | |||
| type enumeration { | type enumeration { | |||
| enum public { | enum public { | |||
| description | description | |||
| "When using PKI (Public Key Infrastructure), | "When using Public Key Infrastructure (PKI), | |||
| the public and shared key can be used to verify | the public and shared key can be used to verify | |||
| the original packet exchanged with the neighbor."; | the original packet exchanged with the neighbor."; | |||
| } | } | |||
| enum private { | enum private { | |||
| description | description | |||
| "When using PKI (Public Key Infrastructure), | "When using Public Key Infrastructure (PKI), | |||
| the private key can be used by the Security | the private key can be used by the Security | |||
| fingerprint originating node to create the signature."; | fingerprint originating node to create the signature."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The security type."; | "The security type."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| leaf shared { | leaf shared { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "When using PKI (Public Key Infrastructure), | "When using Public Key Infrastructure (PKI), | |||
| if the key is shared."; | if the key is shared."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| choice auth-key-chain { | choice auth-key-chain { | |||
| description | description | |||
| "Key chain or explicit key parameter specification"; | "Key chain or explicit key parameter specification."; | |||
| case auth-key-chain { | case auth-key-chain { | |||
| leaf key-chain { | leaf key-chain { | |||
| type key-chain:key-chain-ref; | type key-chain:key-chain-ref; | |||
| description | description | |||
| "key-chain name."; | "key-chain name."; | |||
| reference | reference | |||
| "RFC 8177: YANG Data Model for Key Chains"; | "RFC 8177: YANG Data Model for Key Chains"; | |||
| } | } | |||
| } | } | |||
| case auth-key-explicit { | case auth-key-explicit { | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at line 1123 ¶ | |||
| leaf node-level { | leaf node-level { | |||
| type level; | type level; | |||
| config false; | config false; | |||
| description | description | |||
| "The level of this node."; | "The level of this node."; | |||
| } | } | |||
| leaf system-id { | leaf system-id { | |||
| type system-id; | type system-id; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Each node is identified via a system-id which is 64 | "Each node is identified via a system-id that is 64 | |||
| bits wide."; | bits wide."; | |||
| } | } | |||
| leaf fabric-id { | leaf fabric-id { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The optional id of the fabric."; | "The optional id of the fabric."; | |||
| } | } | |||
| leaf pod { | leaf pod { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| skipping to change at page 26, line 27 ¶ | skipping to change at line 1193 ¶ | |||
| type inet:ipv6-address-no-zone; | type inet:ipv6-address-no-zone; | |||
| description | description | |||
| "IPv6 address to be used."; | "IPv6 address to be used."; | |||
| } | } | |||
| description | description | |||
| "IPv4 and/or IPv6 address to be used."; | "IPv4 and/or IPv6 address to be used."; | |||
| } | } | |||
| grouping lie-elements { | grouping lie-elements { | |||
| leaf label { | leaf label { | |||
| if-feature label-switching; | if-feature "label-switching"; | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "A locally significant, downstream assigned by | "A locally significant, downstream assigned by | |||
| the neighbor, interface specific label which may | the neighbor, interface-specific label that may | |||
| be advertised in its LIEs."; | be advertised in its LIEs."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.8.8."; | Section 6.8.8."; | |||
| } | } | |||
| leaf you-are-flood-repeater { | leaf you-are-flood-repeater { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If the neighbor on this link is flooding repeater. | "If the neighbor on this link is flooding repeater. | |||
| When this value is set to 'true', the value can be | When this value is set to 'true', the value can be | |||
| carried in exchanged packet."; | carried in exchanged packet."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.3.9."; | Section 6.3.9."; | |||
| } | } | |||
| leaf not-a-ztp-offer { | leaf not-a-ztp-offer { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "When this value is set to 'true', the flag can be | "When this value is set to 'true', the flag can be | |||
| carried in the LIE packet. When the value received | carried in the LIE packet. When the value received | |||
| in the LIE from neighbor, it indicates the level on | in the LIE from neighbor, it indicates the level on | |||
| the LIE MUST NOT be used to derive a ZTP level by | the LIE MUST NOT be used to derive a ZTP level by | |||
| the receiving node."; | the receiving node."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.7."; | Section 6.7."; | |||
| } | } | |||
| leaf you-are-sending-too-quickly { | leaf you-are-sending-too-quickly { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Can be optionally set to indicate to neighbor that | "Can be optionally set to indicate to neighbor that | |||
| packet losses are seen on reception based on packet | packet losses are seen on reception based on packet | |||
| numbers or the rate is too high. The receiver SHOULD | numbers or the rate is too high. The receiver SHOULD | |||
| temporarily slow down flooding rates. When this value | temporarily slow down flooding rates. When this value | |||
| is set to 'true', the flag can be carried in packet."; | is set to 'true', the flag can be carried in packet."; | |||
| skipping to change at page 28, line 8 ¶ | skipping to change at line 1270 ¶ | |||
| description | description | |||
| "A pair of local and remote link-id to identify a link | "A pair of local and remote link-id to identify a link | |||
| between two nodes."; | between two nodes."; | |||
| } // link-id-pair | } // link-id-pair | |||
| grouping neighbor-node { | grouping neighbor-node { | |||
| list link-id-pair { | list link-id-pair { | |||
| key "remote-id"; | key "remote-id"; | |||
| uses link-id-pair; | uses link-id-pair; | |||
| description | description | |||
| "The Multiple parallel links to this neighbor."; | "The multiple parallel links to this neighbor."; | |||
| } | } | |||
| leaf cost { | leaf cost { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The cost value advertised by the neighbor."; | "The cost value advertised by the neighbor."; | |||
| } | } | |||
| leaf bandwidth { | leaf bandwidth { | |||
| type uint32; | type uint32; | |||
| units "bits"; | units "bits"; | |||
| description | description | |||
| "Total bandwith to the neighbor, this will be | "Total bandwidth to the neighbor, this will be | |||
| normally sum of the bandwidths of all the | normally sum of the bandwidths of all the | |||
| parallel links."; | parallel links."; | |||
| } | } | |||
| container received-link-capabilities { | container received-link-capabilities { | |||
| uses link-capabilities; | uses link-capabilities; | |||
| description | description | |||
| "The link capabilities advertised by the neighbor."; | "The link capabilities advertised by the neighbor."; | |||
| } | } | |||
| description | description | |||
| "The neighbor information indicated in node TIE."; | "The neighbor information indicated in node TIE."; | |||
| skipping to change at page 29, line 42 ¶ | skipping to change at line 1352 ¶ | |||
| the neighbors."; | the neighbors."; | |||
| } | } | |||
| leaf removed-from-consideration { | leaf removed-from-consideration { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If the value is set to 'true', it means that | "If the value is set to 'true', it means that | |||
| the level value is not considered to be used."; | the level value is not considered to be used."; | |||
| } | } | |||
| leaf removal-reason { | leaf removal-reason { | |||
| when "../removed-from-consideration='true'" { | when "../removed-from-consideration='true'" { | |||
| description | description | |||
| "The level value is not considered to be used."; | "The level value is not considered to be used."; | |||
| } | } | |||
| type string; | type string; | |||
| description | description | |||
| "The reason why this value is not considered to | "The reason why this value is not considered to | |||
| be used."; | be used."; | |||
| } | } | |||
| description | description | |||
| "The level offered to the interface from the neighbor. | "The level offered to the interface from the neighbor. | |||
| And if the level value is considered to be used."; | And if the level value is considered to be used."; | |||
| } | } | |||
| container received-source-addr { | container received-source-addr { | |||
| uses addresses; | uses addresses; | |||
| description | description | |||
| "The source address of LIE and TIE packets from | "The source address of LIE and TIE packets from | |||
| the neighbor."; | the neighbor."; | |||
| } // received-offer | } // received-offer | |||
| uses neighbor-node; | uses neighbor-node; | |||
| container received-in-lies { | container received-in-lies { | |||
| skipping to change at page 30, line 52 ¶ | skipping to change at line 1409 ¶ | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The link is protected by established BFD session or not."; | "The link is protected by established BFD session or not."; | |||
| } | } | |||
| leaf outer-security-key-id { | leaf outer-security-key-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The received security key id from the neighbor."; | "The received security key id from the neighbor."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| description | description | |||
| "The neighbor information."; | "The neighbor information."; | |||
| } // neighbor | } // neighbor | |||
| grouping link-direction-type { | grouping link-direction-type { | |||
| leaf link-direction-type { | leaf link-direction-type { | |||
| type enumeration { | type enumeration { | |||
| enum illegal { | enum illegal { | |||
| skipping to change at page 32, line 29 ¶ | skipping to change at line 1482 ¶ | |||
| description | description | |||
| "The direction type of TIE."; | "The direction type of TIE."; | |||
| } // tie-direction-type | } // tie-direction-type | |||
| grouping spf-direction-type { | grouping spf-direction-type { | |||
| leaf spf-direction-type { | leaf spf-direction-type { | |||
| type enumeration { | type enumeration { | |||
| enum n-spf { | enum n-spf { | |||
| description | description | |||
| "A reachability calculation that is progressing | "A reachability calculation that is progressing | |||
| northbound, as example SPF that is using South | northbound, as example SPF that is using South | |||
| Node TIEs only. Normally it progresses a single | Node TIEs only. Normally it progresses a single | |||
| hop only and installs default routes."; | hop only and installs default routes."; | |||
| } | } | |||
| enum s-spf { | enum s-spf { | |||
| description | description | |||
| "A reachability calculation that is progressing | "A reachability calculation that is progressing | |||
| southbound, as example SPF that is using North | southbound, as example SPF that is using North | |||
| Node TIEs only."; | Node TIEs only."; | |||
| } | } | |||
| } | } | |||
| config false; | config false; | |||
| description | description | |||
| skipping to change at page 33, line 6 ¶ | skipping to change at line 1508 ¶ | |||
| "The direction type of SPF calculation."; | "The direction type of SPF calculation."; | |||
| } // spf-direction-type | } // spf-direction-type | |||
| grouping tie-header { | grouping tie-header { | |||
| uses tie-direction-type; | uses tie-direction-type; | |||
| leaf originator { | leaf originator { | |||
| type system-id; | type system-id; | |||
| description | description | |||
| "The originator's system-id of this TIE."; | "The originator's system-id of this TIE."; | |||
| } | } | |||
| uses tie-type; | uses tie-type; | |||
| leaf tie-number { | leaf tie-number { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The number of this TIE"; | "The number of this TIE."; | |||
| } | } | |||
| leaf seq { | leaf seq { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The sequence number of a TIE."; | "The sequence number of a TIE."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.3.1."; | Section 6.3.1."; | |||
| } | } | |||
| leaf size { | leaf size { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The size of this TIE."; | "The size of this TIE."; | |||
| } | } | |||
| leaf origination-time { | leaf origination-time { | |||
| type ieee802-1as-timestamp; | type ieee802-1as-timestamp; | |||
| description | description | |||
| "Absolute timestamp when the TIE was generated. | "Absolute timestamp when the TIE was generated. | |||
| This can be used on fabrics with synchronized | This can be used on fabrics with synchronized | |||
| clock to prevent lifetime modification attacks."; | clock to prevent lifetime modification attacks."; | |||
| } | } | |||
| leaf origination-lifetime { | leaf origination-lifetime { | |||
| type uint32; | type uint32; | |||
| units seconds; | units "seconds"; | |||
| description | description | |||
| "Original lifetime when the TIE was generated. | "Original lifetime when the TIE was generated. | |||
| This can be used on fabrics with synchronized clock | This can be used on fabrics with synchronized clock | |||
| to prevent lifetime modification attacks."; | to prevent lifetime modification attacks."; | |||
| } | } | |||
| leaf remaining-lifetime { | leaf remaining-lifetime { | |||
| type uint32; | type uint32; | |||
| units seconds; | units "seconds"; | |||
| description | description | |||
| "The remaining lifetime of the TIE."; | "The remaining lifetime of the TIE."; | |||
| } | } | |||
| description | description | |||
| "TIEs are exchanged between RIFT nodes to describe parts | "TIEs are exchanged between RIFT nodes to describe parts | |||
| of a network such as links and address prefixes. | of a network such as links and address prefixes. | |||
| This is the TIE header information."; | This is the TIE header information."; | |||
| } // tie-header | } // tie-header | |||
| /* | /* | |||
| * Data nodes | * Data nodes | |||
| */ | */ | |||
| augment "/rt:routing/rt:control-plane-protocols" | augment "/rt:routing/rt:control-plane-protocols" | |||
| + "/rt:control-plane-protocol" { | + "/rt:control-plane-protocol" { | |||
| when "derived-from-or-self(rt:type, 'rift:rift')" { | when "derived-from-or-self(rt:type, 'rift:rift')" { | |||
| description | description | |||
| "This augment is only valid when routing protocol | "This augment is only valid when routing protocol | |||
| instance type is 'RIFT'."; | instance type is 'RIFT'."; | |||
| } | } | |||
| description | description | |||
| "RIFT ( Routing in Fat Trees ) YANG model."; | "RIFT ( Routing in Fat Trees ) YANG model."; | |||
| list rift { | list rift { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The RIFT instance's name."; | "The RIFT instance's name."; | |||
| } | } | |||
| container global { | container global { | |||
| description | description | |||
| "The global configuration and status of | "The global configuration and status of | |||
| this RIFT protocol instance."; | this RIFT protocol instance."; | |||
| uses base-node-info; | uses base-node-info; | |||
| leaf fabric-prefix { | leaf fabric-prefix { | |||
| type inet:ip-prefix; | type inet:ip-prefix; | |||
| description | description | |||
| "The configured fabric prefix."; | "The configured fabric prefix."; | |||
| } | } | |||
| skipping to change at page 35, line 50 ¶ | skipping to change at line 1642 ¶ | |||
| description | description | |||
| "Represents protocol encoding schema major version."; | "Represents protocol encoding schema major version."; | |||
| } | } | |||
| leaf proto-minor-ver { | leaf proto-minor-ver { | |||
| type uint16; | type uint16; | |||
| config false; | config false; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Represents protocol encoding schema minor version."; | "Represents protocol encoding schema minor version."; | |||
| } | } | |||
| container node-capabilities { | container node-capabilities { | |||
| uses hierarchy-indications; | uses hierarchy-indications; | |||
| leaf flood-reduction { | leaf flood-reduction { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If the node supports flood reduction function. | "If the node supports flood reduction function. | |||
| If this value is set to 'true', it means that | If this value is set to 'true', it means that | |||
| the flood reduction function is enabled."; | the flood reduction function is enabled."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.3.8."; | Section 6.3.8."; | |||
| } | } | |||
| description | description | |||
| "The node's capabilities."; | "The node's capabilities."; | |||
| } | } | |||
| leaf maximum-nonce-delta { | leaf maximum-nonce-delta { | |||
| if-feature nonce-delta-adjust; | if-feature "nonce-delta-adjust"; | |||
| type uint8 { | type uint8 { | |||
| range "1..5"; | range "1..5"; | |||
| } | } | |||
| description | description | |||
| "The configurable valid nonce delta value used for | "The configurable valid nonce delta value used for | |||
| security. It is used as vulnerability window. | security. It is used as vulnerability window. | |||
| If the nonces in received packet exceeds the range | If the nonces in received packet exceeds the range | |||
| indicated by this value, the packet MUST be | indicated by this value, the packet MUST be | |||
| discarded."; | discarded."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.4."; | Section 6.9.4."; | |||
| } | } | |||
| leaf nonce-increasing-interval { | leaf nonce-increasing-interval { | |||
| type uint16; | type uint16; | |||
| units seconds; | units "seconds"; | |||
| description | description | |||
| "The configurable nonce increasing interval."; | "The configurable nonce increasing interval."; | |||
| } | } | |||
| leaf adjusted-lifetime { | leaf adjusted-lifetime { | |||
| type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units "seconds"; | |||
| description | description | |||
| "The adjusted lifetime may affect the TIE stability. | "The adjusted lifetime may affect the TIE stability. | |||
| Be careful to change this parameter. | Be careful to change this parameter. | |||
| This SHOULD be prohibited less than 2*purge-lifetime."; | This SHOULD be prohibited less than 2*purge-lifetime."; | |||
| } | } | |||
| container rx-lie-multicast-addr { | container rx-lie-multicast-addr { | |||
| leaf ipv4 { | leaf ipv4 { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| default "224.0.0.121"; | default "224.0.0.121"; | |||
| description | description | |||
| skipping to change at page 38, line 9 ¶ | skipping to change at line 1742 ¶ | |||
| receiving and sending."; | receiving and sending."; | |||
| } | } | |||
| leaf lie-tx-port { | leaf lie-tx-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| default "914"; | default "914"; | |||
| description | description | |||
| "The UDP port of LIE packet sending. The default port | "The UDP port of LIE packet sending. The default port | |||
| number is 914. The value can be set to other value | number is 914. The value can be set to other value | |||
| associated with different RIFT instance."; | associated with different RIFT instance."; | |||
| } | } | |||
| container global-link-capabilities { | container global-link-capabilities { | |||
| uses link-capabilities; | uses link-capabilities; | |||
| description | description | |||
| "The node default link capabilities. It can be | "The node default link capabilities. It can be | |||
| overwritten by the configuration underneath interface | overwritten by the configuration underneath interface | |||
| and neighbor."; | and neighbor."; | |||
| } | } | |||
| leaf tide-generation-interval { | leaf tide-generation-interval { | |||
| type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units "seconds"; | |||
| description | description | |||
| "The TIDE generation interval."; | "The TIDE generation interval."; | |||
| } | } | |||
| list tie-security { | list tie-security { | |||
| if-feature tie-security; | if-feature "tie-security"; | |||
| key "security-type"; | key "security-type"; | |||
| uses security; | uses security; | |||
| description | description | |||
| "The security function used for the TIE exchange."; | "The security function used for the TIE exchange."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| leaf inner-security-key-id { | leaf inner-security-key-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The inner security key id for received packet | "The inner security key id for received packet | |||
| checking."; | checking."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| leaf algorithm-type { | leaf algorithm-type { | |||
| type enumeration { | type enumeration { | |||
| enum spf { | enum spf { | |||
| description | description | |||
| "The algorithm is SPF."; | "The algorithm is SPF."; | |||
| } | } | |||
| enum all-path { | enum all-path { | |||
| description | description | |||
| "The algorithm is all-path."; | "The algorithm is all-path."; | |||
| skipping to change at page 39, line 19 ¶ | skipping to change at line 1796 ¶ | |||
| "The possible algorithm types."; | "The possible algorithm types."; | |||
| } | } | |||
| container hal { | container hal { | |||
| config false; | config false; | |||
| leaf hal-value { | leaf hal-value { | |||
| type level; | type level; | |||
| description | description | |||
| "The highest defined level value seen from all | "The highest defined level value seen from all | |||
| valid level offers received."; | valid level offers received."; | |||
| } | } | |||
| leaf-list system-ids{ | leaf-list system-ids { | |||
| type system-id; | type system-id; | |||
| description | description | |||
| "The node's system-id of the offered level comes | "The node's system-id of the offered level comes | |||
| from."; | from."; | |||
| } | } | |||
| description | description | |||
| "The highest defined level and the offered nodes set."; | "The highest defined level and the offered nodes set."; | |||
| } | } | |||
| leaf-list miscabled-links { | leaf-list miscabled-links { | |||
| type uint32; | type uint32; | |||
| config false; | config false; | |||
| description | description | |||
| "List of miscabled links."; | "List of miscabled links."; | |||
| } | } | |||
| leaf hop-limit { | leaf hop-limit { | |||
| type uint8 { | type uint8 { | |||
| range "1 | 255"; | range "1 | 255"; | |||
| } | } | |||
| default "1"; | default "1"; | |||
| description | description | |||
| "The IPv4 TTL or IPv6 HL used for LIE and TIE | "The IPv4 TTL or IPv6 HL used for LIE and TIE | |||
| sending/receiving."; | sending/receiving."; | |||
| } | } | |||
| leaf maximum-clock-delta { | leaf maximum-clock-delta { | |||
| type ieee802-1as-timestamp; | type ieee802-1as-timestamp; | |||
| description | description | |||
| "The maximum drift for the timestamp comparing."; | "The maximum drift for the timestamp comparing."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.8.4."; | Section 6.8.4."; | |||
| } | } | |||
| } | } | |||
| list interfaces { | list interfaces { | |||
| key "name"; | key "name"; | |||
| leaf link-id { | leaf link-id { | |||
| type uint32; | type uint32; | |||
| config false; | config false; | |||
| description | description | |||
| "The local id of this interface."; | "The local id of this interface."; | |||
| } | } | |||
| leaf name { | leaf name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| skipping to change at page 40, line 38 ¶ | skipping to change at line 1858 ¶ | |||
| type inet:port-number; | type inet:port-number; | |||
| default "915"; | default "915"; | |||
| description | description | |||
| "The UDP port which is used to receive flooded | "The UDP port which is used to receive flooded | |||
| TIEs. The default port number is 915. The value | TIEs. The default port number is 915. The value | |||
| can be set to other value associated with different | can be set to other value associated with different | |||
| RIFT instance."; | RIFT instance."; | |||
| } | } | |||
| leaf holdtime { | leaf holdtime { | |||
| type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units "seconds"; | |||
| default "3"; | default "3"; | |||
| description | description | |||
| "The holding time of LIE."; | "The holding time of LIE."; | |||
| } | } | |||
| uses address-families; | uses address-families; | |||
| container advertised-source-addr { | container advertised-source-addr { | |||
| uses addresses; | uses addresses; | |||
| description | description | |||
| "The address used in the advertised LIE and TIE | "The address used in the advertised LIE and TIE | |||
| packets."; | packets."; | |||
| } | } | |||
| uses link-direction-type; | uses link-direction-type; | |||
| leaf broadcast-capable { | leaf broadcast-capable { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If LIE can be received by broadcast address."; | "If LIE can be received by broadcast address."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.2."; | Section 6.2."; | |||
| } | } | |||
| leaf allow-horizontal-link { | leaf allow-horizontal-link { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "If horizontal link adjacency is allowed."; | "If horizontal link adjacency is allowed."; | |||
| } | } | |||
| container security { | container security { | |||
| if-feature link-security; | if-feature "link-security"; | |||
| uses security; | uses security; | |||
| description | description | |||
| "The security function used for this interface."; | "The security function used for this interface."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| leaf security-checking { | leaf security-checking { | |||
| type enumeration { | type enumeration { | |||
| enum "no-checking" { | enum no-checking { | |||
| description | description | |||
| "The security envelope does not be checked."; | "The security envelope does not be checked."; | |||
| } | } | |||
| enum "permissive" { | enum permissive { | |||
| description | description | |||
| "The security envelope checking is permissive."; | "The security envelope checking is permissive."; | |||
| } | } | |||
| enum "loose" { | enum loose { | |||
| description | description | |||
| "The security envelope checking is loose."; | "The security envelope checking is loose."; | |||
| } | } | |||
| enum "strict" { | enum strict { | |||
| description | description | |||
| "The security envelope checking is strict."; | "The security envelope checking is strict."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The possible security checking types. | "The possible security checking types. | |||
| Only one type can be set at the same time."; | Only one type can be set at the same time."; | |||
| } | } | |||
| leaf was-the-last-lie-accepted { | leaf was-the-last-lie-accepted { | |||
| type boolean; | type boolean; | |||
| skipping to change at page 42, line 33 ¶ | skipping to change at line 1945 ¶ | |||
| "The attributes advertised in the LIEs from | "The attributes advertised in the LIEs from | |||
| this interface."; | this interface."; | |||
| } | } | |||
| container link-capabilities { | container link-capabilities { | |||
| uses link-capabilities; | uses link-capabilities; | |||
| description | description | |||
| "The interface's link capabilities."; | "The interface's link capabilities."; | |||
| } | } | |||
| leaf state { | leaf state { | |||
| type enumeration { | type enumeration { | |||
| enum "one-way" { | enum one-way { | |||
| description | description | |||
| "The initial state."; | "The initial state."; | |||
| } | } | |||
| enum "two-way" { | enum two-way { | |||
| description | description | |||
| "Valid LIE received but not a ThreeWay LIE."; | "Valid LIE received but not a ThreeWay LIE."; | |||
| } | } | |||
| enum "three-way" { | enum three-way { | |||
| description | description | |||
| "Valid ThreeWay LIE received."; | "Valid ThreeWay LIE received."; | |||
| } | } | |||
| enum "multiple-neighbors-wait" { | enum multiple-neighbors-wait { | |||
| description | description | |||
| "More than two neighbors found in the same link."; | "More than two neighbors found in the same link."; | |||
| } | } | |||
| } | } | |||
| config false; | config false; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The states of LIE finite state machine."; | "The states of LIE finite state machine."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.2.1."; | Section 6.2.1."; | |||
| } | } | |||
| list neighbors { | list neighbors { | |||
| key "system-id"; | key "system-id"; | |||
| config false; | config false; | |||
| uses base-node-info; | uses base-node-info; | |||
| uses neighbor; | uses neighbor; | |||
| leaf local-nonce { | leaf local-nonce { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The exchanged local nonce with this neighbor."; | "The exchanged local nonce with this neighbor."; | |||
| } | } | |||
| leaf remote-nonce { | leaf remote-nonce { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The exchanged remote nonce to this neighbor."; | "The exchanged remote nonce to this neighbor."; | |||
| } | } | |||
| skipping to change at page 43, line 27 ¶ | skipping to change at line 1985 ¶ | |||
| leaf local-nonce { | leaf local-nonce { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The exchanged local nonce with this neighbor."; | "The exchanged local nonce with this neighbor."; | |||
| } | } | |||
| leaf remote-nonce { | leaf remote-nonce { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The exchanged remote nonce to this neighbor."; | "The exchanged remote nonce to this neighbor."; | |||
| } | } | |||
| action clear-neighbor { | action clear-neighbor { | |||
| description | description | |||
| "Clears the connection to the neighbor."; | "Clears the connection to the neighbor."; | |||
| } | } | |||
| description | description | |||
| "The neighbor's information."; | "The neighbor's information."; | |||
| } | } | |||
| action clear-all-neighbors { | action clear-all-neighbors { | |||
| description | description | |||
| "Clears all the connections to the neighbors | "Clears all the connections to the neighbors | |||
| on this interface."; | on this interface."; | |||
| } | } | |||
| description | description | |||
| "The interface information on this node."; | "The interface information on this node."; | |||
| } // list interface | } // list interface | |||
| container statistics { | container statistics { | |||
| config false; | config false; | |||
| container global { | container global { | |||
| leaf total-num-routes-north { | leaf total-num-routes-north { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| config false; | config false; | |||
| description | description | |||
| "The total number of north routes."; | "The total number of north routes."; | |||
| } | } | |||
| leaf total-num-routes-sourth { | leaf total-num-routes-south { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| config false; | config false; | |||
| description | description | |||
| "The total number of sourth routes."; | "The total number of south routes."; | |||
| } | } | |||
| description | description | |||
| "The global routes number."; | "The global routes number."; | |||
| } | } | |||
| list spf-statistics { | list spf-statistics { | |||
| key "spf-direction-type"; | key "spf-direction-type"; | |||
| uses spf-direction-type; | uses spf-direction-type; | |||
| leaf start-time { | leaf start-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The last SPF calculation start time."; | "The last SPF calculation start time."; | |||
| } | } | |||
| leaf end-time { | leaf end-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The last SPF calculation end time."; | "The last SPF calculation end time."; | |||
| } | } | |||
| skipping to change at page 44, line 38 ¶ | skipping to change at line 2036 ¶ | |||
| leaf end-time { | leaf end-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The last SPF calculation end time."; | "The last SPF calculation end time."; | |||
| } | } | |||
| container triggering-tie { | container triggering-tie { | |||
| uses tie-header; | uses tie-header; | |||
| description | description | |||
| "The TIE that triggered the SPF."; | "The TIE that triggered the SPF."; | |||
| } | } | |||
| action clear-spf-statistics { | action clear-spf-statistics { | |||
| description | description | |||
| "Clears the statistics of this type of | "Clears the statistics of this type of | |||
| SPF calculation."; | SPF calculation."; | |||
| } | } | |||
| description | description | |||
| "The statistics of SPF calculation."; | "The statistics of SPF calculation."; | |||
| } | } | |||
| list interfaces { | list interfaces { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "The interface's name."; | "The interface's name."; | |||
| } | } | |||
| container intf-states-statistics { | container intf-states-statistics { | |||
| leaf intf-states-startup-time { | leaf intf-states-startup-time { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The states and statistics record startup time | "The states and statistics record startup time | |||
| of the interface."; | of the interface."; | |||
| } | } | |||
| leaf num-of-nbrs-3way { | leaf num-of-nbrs-3way { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| description | description | |||
| "The number of neighbors which state is in 3-way."; | "The number of neighbors which state is in | |||
| ThreeWay."; | ||||
| } | } | |||
| leaf num-of-nbrs-down { | leaf num-of-nbrs-down { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| description | description | |||
| "The number of neighbors which state | "The number of neighbors which state | |||
| changed to down."; | changed to down."; | |||
| } | } | |||
| list nbrs-down-reasons { | list nbrs-down-reasons { | |||
| key "system-id"; | key "system-id"; | |||
| leaf system-id { | leaf system-id { | |||
| type system-id; | type system-id; | |||
| description | description | |||
| "The system-id of neighbor."; | "The system-id of neighbor."; | |||
| } | } | |||
| leaf last-down-reason { | leaf last-down-reason { | |||
| type string; | type string; | |||
| skipping to change at page 46, line 24 ¶ | skipping to change at line 2114 ¶ | |||
| config false; | config false; | |||
| description | description | |||
| "The last time of up."; | "The last time of up."; | |||
| } | } | |||
| leaf last-down { | leaf last-down { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| config false; | config false; | |||
| description | description | |||
| "The last time of down."; | "The last time of down."; | |||
| } | } | |||
| container intf-lie-states { | container intf-lie-states { | |||
| leaf last-lie-sent-time { | leaf last-lie-sent-time { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The time of the last LIE sent."; | "The time of the last LIE sent."; | |||
| } | } | |||
| leaf last-lie-received-time { | leaf last-lie-received-time { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The time of the last LIE received."; | "The time of the last LIE received."; | |||
| } | } | |||
| leaf num-lie-received { | leaf num-lie-received { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| description | description | |||
| "The number of received LIEs."; | "The number of received LIEs."; | |||
| } | } | |||
| leaf num-lie-transmitted { | leaf num-lie-transmitted { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| description | description | |||
| "The number of transmitted LIEs."; | "The number of transmitted LIEs."; | |||
| } | } | |||
| leaf num-lie-drop-invalid-envelope { | leaf num-lie-drop-invalid-envelope { | |||
| type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
| description | description | |||
| "The number of dropped LIEs due to | "The number of dropped LIEs due to | |||
| skipping to change at page 52, line 46 ¶ | skipping to change at line 2414 ¶ | |||
| config false; | config false; | |||
| description | description | |||
| "ToFs in the same plane. Only carried by ToF. | "ToFs in the same plane. Only carried by ToF. | |||
| Multiple Node TIEs can carry disjoint sets of | Multiple Node TIEs can carry disjoint sets of | |||
| ToFs which MUST be joined to form a single | ToFs which MUST be joined to form a single | |||
| set."; | set."; | |||
| } | } | |||
| leaf fabric-id { | leaf fabric-id { | |||
| type uint32; | type uint32; | |||
| config false; | config false; | |||
| description | description | |||
| "The optional ID of the Fabric configured."; | "The optional ID of the Fabric configured."; | |||
| } | } | |||
| description | description | |||
| "The node element information in this TIE."; | "The node element information in this TIE."; | |||
| } // node | } // node | |||
| container prefixes { | container prefixes { | |||
| description | description | |||
| "The prefix element information in this TIE."; | "The prefix element information in this TIE."; | |||
| list prefixes { | list prefixes { | |||
| key "prefix"; | key "prefix"; | |||
| leaf prefix { | leaf prefix { | |||
| skipping to change at page 53, line 42 ¶ | skipping to change at line 2457 ¶ | |||
| description | description | |||
| "The information used to distinguish a Key/Value | "The information used to distinguish a Key/Value | |||
| pair. When the type of kv is set to 'node', | pair. When the type of kv is set to 'node', | |||
| node-element is making sense. When the type of | node-element is making sense. When the type of | |||
| kv is set to other values except 'node', | kv is set to other values except 'node', | |||
| prefix-info is making sense."; | prefix-info is making sense."; | |||
| } // kv-store | } // kv-store | |||
| } // ties | } // ties | |||
| description | description | |||
| "The TIEs information in database."; | "The TIEs information in database."; | |||
| }// container database | } // container database | |||
| description | description | |||
| "RIFT configuration and state data."; | "RIFT configuration and state data."; | |||
| }//rift | } //rift | |||
| }//augment | } //augment | |||
| /* | /* | |||
| * Notifications | * Notifications | |||
| */ | */ | |||
| notification error-set { | notification error-set { | |||
| description | description | |||
| "The errors notification of RIFT."; | "The errors notification of RIFT."; | |||
| container tie-level-error { | container tie-level-error { | |||
| description | description | |||
| "The TIE errors notification of RIFT."; | "The TIE errors notification of RIFT."; | |||
| list rift { | list rift { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The RIFT instance's name."; | "The RIFT instance's name."; | |||
| } | } | |||
| list ties { | list ties { | |||
| key "originator"; | key "originator"; | |||
| uses tie-header; | uses tie-header; | |||
| skipping to change at page 55, line 48 ¶ | skipping to change at line 2559 ¶ | |||
| The Network Configuration Access Control Model [RFC8341] provides the | The Network Configuration Access Control Model [RFC8341] provides the | |||
| means to restrict access for particular NETCONF or RESTCONF users to | means to restrict access for particular NETCONF or RESTCONF users to | |||
| a preconfigured subset of all available NETCONF or RESTCONF protocol | a preconfigured subset of all available NETCONF or RESTCONF protocol | |||
| operations and content. | operations and content. | |||
| There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in this YANG module that are | |||
| writable/creatable/deletable (i.e., config true, which is the | writable/creatable/deletable (i.e., config true, which is the | |||
| default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
| in some network environments. Write operations (e.g., edit-config) | in some network environments. Write operations (e.g., edit-config) | |||
| to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
| effect on network operations. Writable data node represent | effect on network operations. These are the subtrees and data nodes | |||
| configuration of each instance, node, interface, etc. These | and their sensitivity/vulnerability: | |||
| correspond to the following schema node: | ||||
| * /rift | * /rift | |||
| Modifying the configuration may cause all the RIFT neighborship to be | Modifying the configuration may cause all the RIFT neighborships to | |||
| rebuilt. For example, the configuration changing of configured-level | be rebuilt. For example, changing the configuration of configured- | |||
| or system-id will lead to all the neighbor connections of this node | level or system-id will lead to all the neighbor connections of this | |||
| rebuilt. The incorrect modification of authentication, except for | node being rebuilt. The incorrect modification of authentication, | |||
| the neighbor connection broken, will lead to the permanent connection | except for the broken neighbor connection, will break the connection | |||
| broken. The modification of interface will lead to the neighbor | permanently. The modification of interface will cause the neighbor | |||
| state changing. In general, unauthorized modification of most RIFT | state to change. In general, unauthorized modification of most RIFT | |||
| configurations will pose their own set of security risks and the | configurations will pose their own set of security risks and the | |||
| "Security Considerations" in the respective reference RFCs should be | "Security Considerations" in the respective RFCs referenced should be | |||
| consulted. | consulted. | |||
| Some of the readable data nodes in this YANG module may be considered | Some of the readable data nodes in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control read access (e.g., via get, get-config, or | important to control read access (e.g., via get, get-config, or | |||
| notification) to these data nodes. These are the subtrees and data | notification) to these data nodes. These are the subtrees and data | |||
| nodes and their sensitivity/vulnerability: | nodes and their sensitivity/vulnerability: | |||
| * /rift | * /rift | |||
| skipping to change at page 56, line 39 ¶ | skipping to change at line 2596 ¶ | |||
| * /rift/interface/neighbor | * /rift/interface/neighbor | |||
| * /rift/database | * /rift/database | |||
| The exposure of the database will expose the detailed topology of the | The exposure of the database will expose the detailed topology of the | |||
| network. Network operators may consider their topologies to be | network. Network operators may consider their topologies to be | |||
| sensitive confidential data. | sensitive confidential data. | |||
| For RIFT authentication, configuration is supported via the | For RIFT authentication, configuration is supported via the | |||
| specification of key-chains [RFC8177] or the direct specification of | specification of key chains [RFC8177] or the direct specification of | |||
| key and authentication algorithm. Hence, authentication | key and authentication algorithm. Hence, authentication | |||
| configuration inherits the security considerations of [RFC8177]. | configuration inherits the security considerations of [RFC8177]. | |||
| This includes the considerations with respect to the local storage | This includes the considerations with respect to the local storage | |||
| and handling of authentication keys. | and handling of authentication keys. | |||
| The actual authentication key data (whether locally specified or part | The actual authentication key data (whether locally specified or part | |||
| of a key chain) is sensitive and needs to be kept secret from | of a key chain) is sensitive and needs to be kept secret from | |||
| unauthorized parties; compromise of the key data would allow an | unauthorized parties. Compromise of the key data would allow an | |||
| attacker to forge RIFT packet that would be accepted as authentic, | attacker to forge RIFT packets that would be accepted as authentic, | |||
| potentially compromising the entire domain. | potentially compromising the entire domain. | |||
| Some of the RPC operations in this YANG module may be considered | Some of the RPC operations in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control access to these operations. Specifically, the | important to control access to these operations. These are the | |||
| following operations have particular sensitivities/ vulnerabilities: | operations and their sensitivity/vulnerability: | |||
| * /rift/interface/clear-all-neighbors | * /rift/interface/clear-all-neighbors | |||
| * /rift/interface/neighbor/clear-neighbor | * /rift/interface/neighbor/clear-neighbor | |||
| * /rift/statistics/spf-statistics/clear-spf-statistics | * /rift/statistics/spf-statistics/clear-spf-statistics | |||
| * /rift/statistics/interface/clear-intf-statistics | * /rift/statistics/interface/clear-intf-statistics | |||
| * /rift/statistics/interface/neighbors/clear-nbr-statistics | * /rift/statistics/interface/neighbors/clear-nbr-statistics | |||
| Unauthorized access to either of the above action operations can lead | Unauthorized access to either of the above action operations can lead | |||
| to the neighbor connection rebuilding or clearing of statistics on | to the neighbor connection rebuilding or clearing of statistics on | |||
| this device. | this device. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| RFC Ed.: Please replace all occurrences of 'XXXX' with the actual RFC | Per this document, IANA has registered a URI in the IETF XML registry | |||
| number (and remove this note). | [RFC3688]. Following the format in [RFC3688], the following | |||
| registration has been made: | ||||
| This document registers a URI in the IETF XML registry [RFC3688]. | ||||
| Following the format in [RFC3688], the following registration is | ||||
| requested to be made: | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-rift | ||||
| Registrant Contact: The IESG | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| This document also requests one new YANG module name in the YANG | ||||
| Module Names registry [RFC6020] with the following suggestion: | ||||
| name: ietf-rift | ||||
| namespace: urn:ietf:params:xml:ns:yang:ietf-rift | ||||
| prefix: rift | ||||
| reference: RFC XXXX | ||||
| 6. Acknowledgement | URI: urn:ietf:params:xml:ns:yang:ietf-rift | |||
| Registrant Contact: The IESG | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| The authors would like to thank Tony Przygienda, Jordan Head, | One new YANG module name has been registered in the YANG Module Names | |||
| Benchong Xu (xu.benchong@zte.com.cn), Tom Petch for their review, | registry [RFC6020] as follows: | |||
| valuable comments and suggestions. | ||||
| 7. References | Name: ietf-rift | |||
| Namespace: urn:ietf:params:xml:ns:yang:ietf-rift | ||||
| Prefix: rift | ||||
| Reference: RFC 9719 | ||||
| 7.1. Normative References | 6. References | |||
| [I-D.ietf-rift-rift] | 6.1. Normative References | |||
| Przygienda, T., Head, J., Sharma, A., Thubert, P., | ||||
| Rijsman, B., and D. Afanasiev, "RIFT: Routing in Fat | ||||
| Trees", Work in Progress, Internet-Draft, draft-ietf-rift- | ||||
| rift-24, 23 May 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-rift- | ||||
| rift-24>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | |||
| (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, | (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, | |||
| DOI 10.17487/RFC5881, June 2010, | DOI 10.17487/RFC5881, June 2010, | |||
| <https://www.rfc-editor.org/info/rfc5881>. | <https://www.rfc-editor.org/info/rfc5881>. | |||
| skipping to change at page 60, line 11 ¶ | skipping to change at line 2732 ¶ | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | |||
| Perkins, "Registration Extensions for IPv6 over Low-Power | Perkins, "Registration Extensions for IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Neighbor | Wireless Personal Area Network (6LoWPAN) Neighbor | |||
| Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | |||
| <https://www.rfc-editor.org/info/rfc8505>. | <https://www.rfc-editor.org/info/rfc8505>. | |||
| 7.2. Informative References | [RFC9692] Przygienda, T., Ed., Head, J., Ed., Sharma, A., Thubert, | |||
| P., Rijsman, B., and D. Afanasiev, "RIFT: Routing in Fat | ||||
| Trees", RFC 9692, DOI 10.17487/RFC9692, January 2025, | ||||
| <https://www.rfc-editor.org/info/rfc9692>. | ||||
| 6.2. Informative References | ||||
| [IEEE8021AS] | [IEEE8021AS] | |||
| "IEEE Standard for Local and Metropolitan Area Networks - | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
| Timing and Synchronization for Time-Sensitive Applications | Networks - Timing and Synchronization for Time-Sensitive | |||
| in Bridged Local Area Networks", | Applications in Bridged Local Area Networks", IEEE Std | |||
| <https://ieeexplore.ieee.org/document/5741898/>. | 802.1AS-2011, DOI 10.1109/IEEESTD.2011.5741898, March | |||
| 2011, <https://ieeexplore.ieee.org/document/5741898/>. | ||||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | |||
| Documents Containing YANG Data Models", BCP 216, RFC 8407, | Documents Containing YANG Data Models", BCP 216, RFC 8407, | |||
| DOI 10.17487/RFC8407, October 2018, | DOI 10.17487/RFC8407, October 2018, | |||
| <https://www.rfc-editor.org/info/rfc8407>. | <https://www.rfc-editor.org/info/rfc8407>. | |||
| [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | |||
| E., and A. Tripathy, "Subscription to YANG Notifications", | E., and A. Tripathy, "Subscription to YANG Notifications", | |||
| RFC 8639, DOI 10.17487/RFC8639, September 2019, | RFC 8639, DOI 10.17487/RFC8639, September 2019, | |||
| <https://www.rfc-editor.org/info/rfc8639>. | <https://www.rfc-editor.org/info/rfc8639>. | |||
| [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | |||
| for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | |||
| September 2019, <https://www.rfc-editor.org/info/rfc8641>. | September 2019, <https://www.rfc-editor.org/info/rfc8641>. | |||
| Acknowledgments | ||||
| The authors would like to thank Tony Przygienda, Jordan Head, | ||||
| Benchong Xu (mailto:xu.benchong@zte.com.cn), and Tom Petch for their | ||||
| review, valuable comments, and suggestions. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Zheng Zhang | Zheng (Sandy) Zhang | |||
| ZTE Corporation | ZTE Corporation | |||
| Email: zhang.zheng@zte.com.cn | Email: zhang.zheng@zte.com.cn | |||
| Yuehua Wei | Yuehua Wei | |||
| ZTE Corporation | ZTE Corporation | |||
| Email: wei.yuehua@zte.com.cn | Email: wei.yuehua@zte.com.cn | |||
| Shaowen Ma | Shaowen Ma | |||
| Email: mashaowen@gmail.com | Email: mashaowen@gmail.com | |||
| skipping to change at page 61, line 4 ¶ | skipping to change at line 2783 ¶ | |||
| ZTE Corporation | ZTE Corporation | |||
| Email: zhang.zheng@zte.com.cn | Email: zhang.zheng@zte.com.cn | |||
| Yuehua Wei | Yuehua Wei | |||
| ZTE Corporation | ZTE Corporation | |||
| Email: wei.yuehua@zte.com.cn | Email: wei.yuehua@zte.com.cn | |||
| Shaowen Ma | Shaowen Ma | |||
| Email: mashaowen@gmail.com | Email: mashaowen@gmail.com | |||
| Xufeng Liu | Xufeng Liu | |||
| Alef Edge | Individual | |||
| Email: xufeng.liu.ietf@gmail.com | Email: xufeng.liu.ietf@gmail.com | |||
| Bruno Rijsman | Bruno Rijsman | |||
| Individual | Individual | |||
| Email: brunorijsman@gmail.com | Email: brunorijsman@gmail.com | |||
| End of changes. 216 change blocks. | ||||
| 369 lines changed or deleted | 303 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||