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 | Alef Edge | |||
B. Rijsman | B. Rijsman | |||
Individual | Individual | |||
17 August 2024 | January 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 | It refers to a folded spine-and-leaf topology with possibly | |||
of Fabric (ToF) planes. | 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 | LIEs: | |||
links running RIFT to form ThreeWay adjacencies and carry information | "Link Information Elements" are exchanged on all the system's | |||
used to perform Zero Touch Provisioning (ZTP) of levels. | links running RIFT to form ThreeWay adjacencies and carry | |||
information used to perform Zero Touch Provisioning (ZTP) of | ||||
levels. | ||||
PoD: "Point of Delivery" means a self-contained vertical slice or | PoD: | |||
subset of a Clos or Fat Tree network containing normally only level 0 | "Point of Delivery" means a self-contained vertical slice or | |||
and level 1 nodes. A node in a PoD communicates with nodes in other | subset of a Clos or Fat Tree network normally containing only | |||
PoDs via the ToF nodes. PoDs are numbered to distinguish them and | level 0 and level 1 nodes. A node in a PoD communicates with | |||
PoD value 0 is used to denote "undefined" or "any" PoD. | nodes in other PoDs via the ToF 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 | A unique adjacency between two nodes over a point-to-point | |||
necessary RIFT ZTP information. An adjacency is only advertised in | interface and exchange local configuration and necessary RIFT ZTP | |||
Node TIEs and used for computations after it achieved ThreeWay state, | information. An adjacency is only advertised in Node TIEs and | |||
i.e. both routers reflected each other in LIEs including relevant | used for computations after it achieved ThreeWay state, i.e., both | |||
security information. Nevertheless, LIEs before ThreeWay state is | routers reflected each other in LIEs, including relevant security | |||
reached may carry RIFT ZTP related information already. | 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 | "Topology Information Elements" are exchanged between RIFT nodes | |||
TIE has always a direction and a type. North TIEs (sometimes | to describe parts of a network such as links and address prefixes. | |||
abbreviated as N-TIEs) are used when dealing with TIEs in the | A TIE has always a direction and a type. North TIEs (sometimes | |||
northbound representation and South-TIEs (sometimes abbreviated as | abbreviated as N-TIEs) are used when dealing with TIEs in the | |||
S-TIEs) for the southbound equivalent. TIEs have different types | northbound representation, and South TIEs (sometimes abbreviated | |||
such as node and prefix TIEs. | 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 | ToF: | |||
communication and have no northbound adjacencies, i.e. are at the | "Top of Fabric" is the set of nodes that provide inter-PoD | |||
"very top" of the fabric. ToF nodes do not belong to any PoD and are | communication and have no northbound adjacencies, i.e., are at the | |||
assigned default PoD value to indicate the equivalent of "any" PoD. | "very top" of the fabric. 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 196 ¶ | |||
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/ | 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. | |||
At a high level, RIFT YANG model is organized into five elements: | At a high level, the 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 391 ¶ | |||
| | +--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 639 ¶ | |||
+--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 | protocol, such as BFD [RFC5881], flooding-reducing (Section 6.3.9 of | |||
[I-D.ietf-rift-rift]. | [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's layer error 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 RIFT system id using pattern, | |||
the system id looks like: 0021.2FFF.FEB5.6E10"; | the system id looks like: 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 927 ¶ | |||
"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 1011 ¶ | |||
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 1132 ¶ | |||
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 1202 ¶ | |||
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 1279 ¶ | |||
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 1361 ¶ | |||
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 1418 ¶ | |||
} | } | |||
} | } | |||
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 1491 ¶ | |||
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 1517 ¶ | |||
"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 1651 ¶ | |||
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 1751 ¶ | |||
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 1805 ¶ | |||
"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 1867 ¶ | |||
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 1954 ¶ | |||
"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 1994 ¶ | |||
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 2045 ¶ | |||
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 2123 ¶ | |||
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 2423 ¶ | |||
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 2466 ¶ | |||
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 2568 ¶ | |||
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 neighbor connection broken, will lead to the permanent | |||
broken. The modification of interface will lead to the neighbor | connection broken. The modification of interface will cause the | |||
state changing. In general, unauthorized modification of most RIFT | neighbor state to change. In general, unauthorized modification of | |||
configurations will pose their own set of security risks and the | most RIFT configurations will pose their own set of security risks | |||
"Security Considerations" in the respective reference RFCs should be | and the "Security Considerations" in the respective RFCs referenced | |||
consulted. | should be 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 | |||
* /rift/global/tie-security | * /rift/global/tie-security | |||
skipping to change at page 56, line 39 ¶ | skipping to change at line 2605 ¶ | |||
* /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 2741 ¶ | |||
[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 | |||
End of changes. 212 change blocks. | ||||
360 lines changed or deleted | 302 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |