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
Google Google
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
Google Google
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.