rfc9719xml2.original.xml   rfc9719.xml 
<?xml version="1.0" encoding="iso-8859-1" ?> <?xml version='1.0' encoding='UTF-8'?>
<!--<!DOCTYPE rfc SYSTEM "rfc4748.dtd"> -->
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [
<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bi
bxml/reference.RFC.2119.xml'>
<!ENTITY rfc2629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.2629.xml'>
<!ENTITY rfc3688 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.3688.xml'>
<!ENTITY rfc5881 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.5881.xml'>
<!ENTITY rfc6020 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.6020.xml'>
<!ENTITY rfc6241 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.6241.xml'>
<!ENTITY rfc6242 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.6242.xml'>
<!ENTITY rfc6991 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/ref
erence.RFC.6991.xml'>
<!ENTITY rfc7950 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/ref
erence.RFC.7950.xml'>
<!ENTITY rfc8040 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8040.xml'>
<!ENTITY rfc8174 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8174.xml'>
<!ENTITY rfc8177 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8177.xml'>
<!ENTITY rfc8294 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8294.xml'>
<!ENTITY rfc8340 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8340.xml'>
<!ENTITY rfc8341 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8341.xml'>
<!ENTITY rfc8342 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8342.xml'>
<!ENTITY rfc8343 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8343.xml'>
<!ENTITY rfc8349 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8349.xml'>
<!ENTITY rfc8407 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8407.xml'>
<!ENTITY rfc8446 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8446.xml'>
<!ENTITY rfc8505 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8505.xml'>
<!ENTITY rfc8639 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8639.xml'>
<!ENTITY rfc8641 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/refere
nce.RFC.8641.xml'>
<!ENTITY I-D.ietf-rift-rift PUBLIC '' 'http://xml.resource.org/public/rfc/bi
bxml3/reference.I-D.ietf-rift-rift.xml'>
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> <!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<?rfc toc="yes"?> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ie
<?rfc symrefs="yes"?> tf-rift-yang-17" number="9719" consensus="true" ipr="trust200902" obsoletes="" u
<?rfc sortrefs="yes"?> pdates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" s
<?rfc disable-output-escaping="yes"?> ortRefs="true" version="3">
<rfc category="std" docName="draft-ietf-rift-yang-17"
ipr="trust200902">
<!-- ***** FRONT MATTER ***** -->
<front> <front>
<title abbrev="RIFT YANG Model">YANG Data Model for Routing in Fat Trees (RI <!-- [rfced] We have updated the abbreviated title (which appears in the running
FT)</title> header of the PDF) as follows. Please let us know if you prefer otherwise.
<author fullname="Zheng Zhang" initials="Z" surname="Zhang"> Original:
RIFT YANG Model
Current:
RIFT YANG Data Model
-->
<title abbrev="RIFT YANG Data Model">YANG Data Model for Routing in Fat Tree
s (RIFT)</title>
<seriesInfo name="RFC" value="9719"/>
<author fullname="Zheng (Sandy) Zhang" initials="Z" surname="Zhang">
<organization>ZTE Corporation</organization> <organization>ZTE Corporation</organization>
<address> <address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>zhang.zheng@zte.com.cn</email> <email>zhang.zheng@zte.com.cn</email>
</address> </address>
</author> </author>
<author fullname="Yuehua Wei" initials="Y" surname="Wei">
<author fullname="Yuehua Wei" initials="Y" surname="Wei">
<organization>ZTE Corporation</organization> <organization>ZTE Corporation</organization>
<address> <address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>wei.yuehua@zte.com.cn</email> <email>wei.yuehua@zte.com.cn</email>
</address> </address>
</author> </author>
<author fullname="Shaowen Ma" initials="S" surname="Ma">
<author fullname="Shaowen Ma" initials="S" surname="Ma">
<organization>Google</organization> <organization>Google</organization>
<address> <address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>mashaowen@gmail.com</email> <email>mashaowen@gmail.com</email>
</address> </address>
</author> </author>
<author fullname="Xufeng Liu" initials="X" surname="Liu">
<author fullname="Xufeng Liu" initials="X" surname="Liu">
<organization>Alef Edge</organization> <organization>Alef Edge</organization>
<address> <address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>xufeng.liu.ietf@gmail.com</email> <email>xufeng.liu.ietf@gmail.com</email>
</address> </address>
</author> </author>
<author fullname="Bruno Rijsman" initials="B" surname="Rijsman">
<author fullname="Bruno Rijsman" initials="B" surname="Rijsman">
<organization>Individual</organization> <organization>Individual</organization>
<address> <address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>brunorijsman@gmail.com</email> <email>brunorijsman@gmail.com</email>
</address> </address>
</author> </author>
<date year="2025" month="January"/>
<date year="2024"/> <area>RTG</area>
<area>Routing</area> <workgroup>rift</workgroup>
<workgroup>RIFT WG</workgroup> <keyword>RIFT</keyword>
<keyword>RIFT, YANG</keyword> <keyword>YANG</keyword>
<abstract> <abstract>
<t> <t>
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 based on management of the Routing in Fat Trees (RIFT) Protocol. The model is base
YANG 1.1 as defined in d on YANG 1.1, which is defined in
RFC7950 and conforms to the Network Management Datastore Architecture RFC 7950 and conforms to the Network Management Datastore Architecture
(NMDA) as described in RFC8342. (NMDA) as described in RFC 8342.
</t> </t>
</abstract> </abstract>
</front> </front>
<!-- ***** MIDDLE MATTER ***** -->
<middle> <middle>
<section title="Introduction"> <section numbered="true" toc="default">
<t>RFC Ed.: Please replace all occurrences of 'I-D.ietf-rift-rift' with th <name>Introduction</name>
e <t><xref target="RFC9692" format="default"/> introduces the protocol defin
actual RFC number of draft-ietf-rift-rift (and remove this note).</t> ition of RIFT.
This document defines one NMDA-compatible <xref target="RFC8342" format
<t><xref target="I-D.ietf-rift-rift"/> introduces the protocol definiti ="default"/> YANG 1.1
on of RIFT. <xref target="RFC7950" format="default"/> data model for the management of
This document defines one NMDA compatible <xref target="RFC8342"/> YANG the RIFT protocol.
1.1 This model imports and augments the ietf-routing YANG data model
<xref target="RFC7950"/> model for the management of RIFT protocol. defined in <xref target="RFC8349" format="default"/>.</t>
This model imports and augments ietf-routing YANG model <section numbered="true" toc="default">
defined in <xref target="RFC8349"/>.</t> <name>Terminology</name>
<t>The following terminology and abbreviations are used in this document
and the defined model.</t>
<t>The content is copied from <xref target="RFC9692" format="default"/>
for reading convenience.</t>
<!-- [rfced] The Terminology section (Section 3.1) states that terms and their
definitions are copied from RFC 9692. However, we note that definitions
in this section contain a mix of sentences directly from RFC 9692,
paraphrased sentences from RFC 9692, as well as mirrored definitions
missing words throughout. If there are no objections, we will revise the
Terminology section in this document to accurately reflect the
definitions that appear in RFC 9692. Please let us know any concerns.
<section title="Terminology"> For example:
<t>The following terminologies and abbreviations are used in this document
and the defined model:</t>
<t>The content is copied from <xref target="I-D.ietf-rift-rift"/> for r
eading convenience.</t>
<t>Clos/Fat Tree: It refers to a folded spine-and-leaf topology with "TIE" in RFC 9692 (Original):
possibly multiple Points of Delivery (PoDs) and one or multiple This is an acronym for a "Topology Information Element". TIEs are exchanged
Top of Fabric (ToF) planes. </t> between RIFT nodes to describe parts of a network such as links and address
prefixes. A TIE has always a direction and a type. North TIEs (sometimes
abbreviated as N-TIEs) are used when dealing with TIEs in the northbound
representation and South-TIEs (sometimes abbreviated as S-TIEs) for the
southbound equivalent. TIEs have different types such as node and prefix TIEs.
<t>RIFT: Routing in Fat Trees <xref target="I-D.ietf-rift-rift"/>.</t> "TIE" in this document (Original):
"Topology Information Element" are exchanged between RIFT nodes to describe
parts of a network such as links and address prefixes. A TIE has always a
direction and a type. North TIEs (sometimes abbreviated as N-TIEs) are used
when dealing with TIEs in the northbound representation and South-TIEs
(sometimes abbreviated as S-TIEs) for the southbound equivalent. TIEs have
different types such as node and prefix TIEs.
-->
<t>LIE: "Link Information Element" are exchanged on <dl newline="true">
<dt>Clos / Fat Tree:</dt><dd>It refers to a folded spine-and-leaf topolo
gy with
possibly multiple Points of Delivery (PoDs) and one or multiple
Top of Fabric (ToF) planes.</dd>
<dt>RIFT:</dt><dd>Routing in Fat Trees <xref target="RFC9692" format="de
fault"/>.</dd>
<dt>LIEs:</dt><dd>"Link Information Elements" are exchanged on
all the system's links running RIFT to form ThreeWay adjacencies all the system's links running RIFT to form ThreeWay adjacencies
and carry information used to perform Zero Touch Provisioning and carry information used to perform Zero Touch Provisioning
(ZTP) of levels.</t> (ZTP) of levels.</dd>
<dt>PoD:</dt><dd>"Point of Delivery" means a self-contained vertical sli
<t>PoD: "Point of Delivery" means a self-contained vertical slice or sub ce or subset of a Clos or Fat Tree
set of a Clos or Fat Tree network normally containing only level 0 and level 1 nodes. A
network containing normally only level 0 and level 1 nodes. A
node in a PoD communicates with nodes in other PoDs via the ToF node in a PoD communicates with nodes in other PoDs via the ToF
nodes. PoDs are numbered to distinguish them and PoD value 0 is nodes. PoDs are numbered to distinguish them, and PoD value 0 is
used to denote "undefined" or "any" PoD.</t> used to denote "undefined" or "any" PoD.</dd>
<dt>ThreeWay Adjacency:</dt><dd>A unique adjacency between two nodes ove
<t>ThreeWay Adjacency: A unique adjacency between two nodes over a r a
point-to-point interface and exchange local configuration and point-to-point interface and exchange local configuration and
necessary RIFT ZTP information. An adjacency is only advertised necessary RIFT ZTP information. An adjacency is only advertised
in Node TIEs and used for computations after it achieved in Node TIEs and used for computations after it achieved
ThreeWay state, i.e. both routers reflected each other in LIEs ThreeWay state, i.e., both routers reflected each other in LIEs,
including relevant security information. Nevertheless, LIEs including relevant security information. Nevertheless, LIEs
before ThreeWay state is reached may carry RIFT ZTP related before ThreeWay state is reached may carry RIFT ZTP related
information already.</t> information already.</dd>
<dt>TIEs:</dt><dd>"Topology Information Elements" are exchanged
<t>TIE: "Topology Information Element" are between RIFT nodes to describe parts of a network such as links and
exchanged between RIFT nodes to describe parts of a network such address prefixes. A TIE has always a direction and a type. North TIEs
as links and address prefixes. A TIE has always a direction and a (sometimes abbreviated as N-TIEs) are used when dealing with TIEs in
type. North TIEs (sometimes abbreviated as N-TIEs) are used when the northbound representation, and South TIEs (sometimes abbreviated
dealing with TIEs in the northbound representation and South-TIEs as S-TIEs) for the southbound equivalent. TIEs have different types,
(sometimes abbreviated as S-TIEs) for the southbound equivalent. such as node and prefix TIEs.</dd>
TIEs have different types such as node and prefix TIEs.</t> <dt>ToF:</dt><dd>"Top of Fabric" is
<t>ToF: "Top of Fabric" is
the set of nodes that provide inter-PoD communication and have no the set of nodes that provide inter-PoD communication and have no
northbound adjacencies, i.e. are at the "very top" of the fabric. northbound adjacencies, i.e., are at the "very top" of the fabric.
ToF nodes do not belong to any PoD and are assigned ToF nodes do not belong to any PoD and are assigned the
default PoD value to indicate the equivalent of "any" PoD.</t> default PoD value to indicate the equivalent of "any" PoD.</dd>
</dl>
</section> </section>
<section numbered="true" toc="default">
<section title="Conventions Used in This Document"> <name>Conventions Used in This Document</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", <t>
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU
"OPTIONAL" in this document are to be interpreted as described in IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>
when, and only when, they appear in all capitals, as shown here.</t> RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
</section> "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to
be interpreted as
<section title="Tree Diagrams"> described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/>
<t>Tree diagrams used in this document follow the notation defined in <xre when, and only when, they appear in all capitals, as shown here.
f target="RFC8340"/>.</t> </t>
</section> </section>
<section numbered="true" toc="default">
<section title="Prefixes in Data Node Names"> <name>Tree Diagrams</name>
<t>In this document, names of data nodes, actions, and other data mod <t>Tree diagrams used in this document follow the notation defined in <x
el ref target="RFC8340" format="default"/>.</t>
</section>
<section numbered="true" toc="default">
<name>Prefixes in Data Node Names</name>
<t>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.</t> corresponding YANG module as shown in <xref target="TABLE_1"/>.</t>
<table anchor="TABLE_1" align="center">
<texttable anchor="TABLE_1" title=""> <thead>
<tr>
<ttcol align="left">Prefix</ttcol> <th align="left">Prefix</th>
<ttcol align="left">YANG module</ttcol> <th align="left">YANG Module</th>
<ttcol align="left">Reference</ttcol> <th align="left">Reference</th>
</tr>
<c>yang</c> </thead>
<c>ietf-yang-types</c> <tbody>
<c><xref target="RFC6991"/></c> <tr>
<td align="left">yang</td>
<c>inet</c> <td align="left">ietf-yang-types</td>
<c>ietf-inet-types</c> <td align="left">
<c><xref target="RFC6991"/></c> <xref target="RFC6991" format="default"/></td>
</tr>
<c>rt</c> <tr>
<c>ietf-routing</c> <td align="left">inet</td>
<c><xref target="RFC8349"/></c> <td align="left">ietf-inet-types</td>
<td align="left">
<c>if</c> <xref target="RFC6991" format="default"/></td>
<c>ietf-interfaces</c> </tr>
<c><xref target="RFC8343"/></c> <tr>
<td align="left">rt</td>
<c>rt-types</c> <td align="left">ietf-routing</td>
<c>ietf-routing-types</c> <td align="left">
<c><xref target="RFC8294"/></c> <xref target="RFC8349" format="default"/></td>
</tr>
<c>iana-rt-types</c> <tr>
<c>iana-routing-types</c> <td align="left">if</td>
<c><xref target="RFC8294"/></c> <td align="left">ietf-interfaces</td>
<td align="left">
<c>key-chain</c> <xref target="RFC8343" format="default"/></td>
<c>ietf-key-chain</c> </tr>
<c><xref target="RFC8177"/></c> <tr>
</texttable> <td align="left">rt-types</td>
<td align="left">ietf-routing-types</td>
<td align="left">
<xref target="RFC8294" format="default"/></td>
</tr>
<tr>
<td align="left">iana-rt-types</td>
<td align="left">iana-routing-types</td>
<td align="left">
<xref target="RFC8294" format="default"/></td>
</tr>
<tr>
<td align="left">key-chain</td>
<td align="left">ietf-key-chain</td>
<td align="left">
<xref target="RFC8177" format="default"/></td>
</tr>
</tbody>
</table>
</section>
</section> </section>
<section numbered="true" toc="default">
</section> <name>Design of the Data Model</name>
<section numbered="true" toc="default">
<section title="Design of the Data Model"> <name>Scope of Model</name>
<section title="Scope of Model"> <t>This model can be used to configure and manage the
<t>This model can be used to configure and manage the
RIFT protocol. The operational state data and statistics RIFT protocol. The operational state data and statistics
can be retrieved by this model. The subscription and push can be retrieved by this model. The subscription and push
mechanism defined in <xref target="RFC8639"/> mechanism defined in <xref target="RFC8639" format="default"/>
and <xref target="RFC8641"/> can be implemented by and <xref target="RFC8641" format="default"/> can be implemented by
the user to subscribe to notifications on the data nodes in this the user to subscribe to notifications on the data nodes in this
model.</t> model.</t>
<t>The model contains all the basic configuration parameters to
operate the protocol. Depending on the implementation choices, some
systems may not allow some of the advanced parameters to be
configurable. The occasionally implemented parameters are modeled as
optional features in this model. This model can be extended, and it
has been structured in a way that such extensions can be conveniently
made.</t>
<!--[rfced] We note that the following paragraph appears in Sections 2.1 and
2.3. To avoid repetition, may we remove the duplicate text from one
section or the other?
<t>The model contains all the basic configuration parameters to operate Original (Sections 2.1 and 2.3):
the protocol. Depending on the implementation choices, The RIFT YANG module augments the /routing/control-plane-protocols/
some systems may not allow some of the advanced parameters to be control-plane-protocol path defined in the ietf-routing module. This
configurable. The occasionally implemented parameters are modeled as model augments the routing module to add RIFT as a control plane
optional features in this model. protocol. It then offers the ability to create a list of instances,
This model can be extended, and it has been structured in a way that which it does by declaring 'list rift'. Multiple instances of the
such extensions can be conveniently made.</t> protocol are supported by the module by giving each instance a unique
name.
<t>The RIFT YANG module augments the /routing/control-plane-protocols/ -->
control-plane-protocol path defined in the ietf-routing module. <t>The RIFT YANG module augments the /routing/control-plane-protocols/
This model augments the routing module to add RIFT as a control plane protoco control-plane-protocol path defined in the ietf-routing module. This
l. model augments the routing module to add RIFT as a control-plane
It then offers the ability to create a list of instances, which it does by de protocol. It then offers the ability to create a list of instances,
claring 'list rift'. which it does by declaring 'list rift'. Multiple instances of the
Multiple instances of the protocol are supported by the module by giving each protocol are supported by the module by giving each instance a unique
instance a unique name.</t> name.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Specification"> <name>Specification</name>
<t> <t>
This model imports and augments ietf-routing YANG model This model imports and augments ietf-routing YANG model
defined in <xref target="RFC8349"/>. defined in <xref target="RFC8349" format="default"/>.
The container "rift" is the top level container in this data model. The container "rift" is the top-level container in this data model.
The container is expected to enable RIFT protocol functionality. The container is expected to enable RIFT protocol functionality.
</t> </t>
<t>The YANG data model defined in this document conforms to the Network
<t>The YANG data model defined in this document conforms to the Network Management Datastore Architecture (NMDA) <xref target="RFC8342" format="defau
Management Datastore Architecture (NMDA) <xref target="RFC8342"/>. lt"/>.
The operational state data is combined with the associated configuration The operational state data is combined with the associated configuration
data in the same hierarchy <xref target="RFC8407"/>.</t> data in the same hierarchy <xref target="RFC8407" format="default"/>.</t>
</section>
</section> <section numbered="true" toc="default">
<name>Overview</name>
<section title="Overview"> <t>The RIFT YANG module defined in this document has all the common
<t>The RIFT YANG module defined in this document has all the common
building blocks for the RIFT protocol.</t> building blocks for the RIFT protocol.</t>
<t>The RIFT YANG module augments the /routing/control-plane-protocols/
control-plane-protocol path defined in the ietf-routing module. This
model augments the routing module to add RIFT as a control-plane
protocol. It then offers the ability to create a list of instances,
which it does by declaring 'list rift'. Multiple instances of the
protocol are supported by the module by giving each instance a unique
name.</t>
<t>At a high level, the RIFT YANG model is organized into five elements:
</t>
<dl spacing="normal" newline="false">
<dt>base protocol configuration --</dt> <dd>Configuration
affecting RIFT protocol-related operations.</dd>
<dt>interface configuration --</dt> <dd>Configuration affecting
the interface operations.</dd>
<dt>neighbor status --</dt> <dd>Information of neighbors.</dd>
<dt>database --</dt> <dd>Information of TIEs.</dd>
<dt>statistics --</dt> <dd>Statistics of SPF, interface, and neighbo
r.</dd>
</dl>
<!--[rfced] FYI, we corrected 'sourth' to 'south' (3 instances).
<t>The RIFT YANG module augments the /routing/control-plane-protocols/ From the original:
control-plane-protocol path defined in the ietf-routing module. 465: | | +-ro total-num-routes-sourth?
This model augments the routing module to add RIFT as a control plane protoco 2418: leaf total-num-routes-sourth {
l. 2422: "The total number of sourth routes.";
It then offers the ability to create a list of instances, which it does by de -->
claring 'list rift'. <sourcecode type="yangtree">
Multiple instances of the protocol are supported by the module by giving each
instance a unique name.</t>
<t>At a high level, RIFT YANG model is organized into five elements:</t>
<t>
<list style="symbols">
<t>base protocol configuration -- configuration affecting RIFT
protocol-related operations.</t>
<t>interface configuration -- configuration affecting the interface oper
ations.</t>
<t>neigbor status -- information of neighbors.</t>
<t>database -- information of TIEs.</t>
<t>statistics-- statistics of SPF, interface and neighbor.</t>
</list>
</t>
<figure align="center">
<artwork align="center"><![CDATA[
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
| +--rw pod? uint32 | +--rw pod? uint32
skipping to change at line 482 skipping to change at line 451
| | +--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 line 729 skipping to change at line 698
| +--ro remaining-lifetime? uint32 | +--ro remaining-lifetime? uint32
+--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
]]></artwork> </sourcecode>
<postamble></postamble> <t keepWithPrevious="true"/>
</figure> </section>
</section> <section numbered="true" toc="default">
<name>RIFT Configuration</name>
<!-- [rfced] We note that Section 6.3.9 of RFC 9692 is titled "Northbound
TIE Flooding Reduction". May we rephrase as follows?
<section title="RIFT configuration"> Original:
<t> Some features can be used to enhance protocol, such as BFD
The RIFT configuration includes node global configuration and interface c [RFC5881], flooding-reducing section 6.3.9 [I-D.ietf-rift-rift].
onfiguration.
Some features can be used to enhance protocol, such as BFD <xref target="R
FC5881"/>,
flooding-reducing section 6.3.9 <xref target="I-D.ietf-rift-rift"/>.</t
>
</section>
<section title="RIFT States"> Perhaps:
<t>The state data nodes include node, interface, neighbor and database infor Some features can be used to enhance protocols, such as BFD [RFC5881],
mation.</t> with flooding reduction (Section 6.3.9 of [RFC9692]).
<t>YANG actions are defined to clear the connection of one specific neigh -->
bor on an interface, <t>
The RIFT configuration includes node global configuration and interface c
onfiguration.
Some features can be used to enhance protocol, such as BFD <xref target="R
FC5881" format="default"/>,
flooding-reducing (<xref target="RFC9692" sectionFormat="of" section="6
.3.9"/>).</t>
</section>
<section numbered="true" toc="default">
<name>RIFT States</name>
<t>The state data nodes include node, interface, neighbor, and database
information.</t>
<t>YANG actions are defined to clear the connection of one specific neig
hbor on an interface,
clear the connections of all neighbors on an interface, or clear some or all statistics.</t> clear the connections of all neighbors on an interface, or clear some or all statistics.</t>
</section> </section>
<section numbered="true" toc="default">
<name>Notifications</name>
<!--[rfced] May we rephrase this sentence as follows for clarity?
<section title="Notifications"> Original:
<t>Unexpected TIE and neighbor's layer error should be notified.</t> Unexpected TIE and neighbor's layer error should be notified.
Perhaps:
Unexpected TIE and neighbor layer errors should be notified.
-->
<t>Unexpected TIE and neighbor's layer error should be notified.</t>
</section>
</section> </section>
<section numbered="true" toc="default">
<name>RIFT YANG Module</name>
<!--[rfced] We have received guidance from Benoit Claise and the YANG
Doctors that "YANG module" and "YANG data model" are preferred.
We have updated the title of Section 3 accordingly. Please review
usage of "YANG model" within this document.
-->
<t>This module references <xref target="RFC9692" format="default"/>,
<xref target="RFC5881" format="default"/>, <xref target="RFC6991" format="de
fault"/>,
<xref target="RFC8177" format="default"/>, <xref target="RFC8294" forma
t="default"/>, <xref target="RFC8343" format="default"/>,
<xref target="RFC8349" format="default"/>, <xref target="RFC8505" format="de
fault"/>, and
<xref target="IEEE8021AS" format="default"/>.</t>
</section> <!--[rfced] In the YANG module, please clarify "system id using pattern"
in the description of system-id. (In text as "System ID" to match
RFC-to-be 9692.)
<section title="RIFT YANG model"> Original:
<t>This module references <xref target="I-D.ietf-rift-rift"/>, description
<xref target="RFC5881"/>, <xref target="RFC6991"/>, "This type defines RIFT system id using pattern,
<xref target="RFC8177"/>, <xref target="RFC8294"/>, <xref target="RFC83 the system id looks like: 0021.2FFF.FEB5.6E10";
43"/>,
<xref target="RFC8349"/>, <xref target="RFC8505"/>,
<xref target="IEEE8021AS"/>.</t>
<figure align="center"> Perhaps:
<artwork align="center"><![CDATA[ description
<CODE BEGINS> file "ietf-rift@2024-08-16.yang" "This type defines the pattern for RIFT System IDs.
module ietf-rift { An example of a System ID is 0021.2FFF.FEB5.6E10.";
-->
<!--[rfced] Please note that the YANG module has been updated per
the formatting option of pyang. Please let us know any concerns.
-->
<sourcecode name="ietf-rift@2025-01-15.yang" type="yang" markers="true"><!
[CDATA[
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 line 1037 skipping to change at line 1032
"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 line 1122 skipping to change at line 1116
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 line 1244 skipping to change at line 1237
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 line 1314 skipping to change at line 1307
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 line 1391 skipping to change at line 1384
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 line 1473 skipping to change at line 1466
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 {
skipping to change at line 1530 skipping to change at line 1523
} }
} }
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 line 1603 skipping to change at line 1596
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 line 1629 skipping to change at line 1622
"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 line 1769 skipping to change at line 1756
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 line 1872 skipping to change at line 1856
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 line 1930 skipping to change at line 1910
"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 line 1996 skipping to change at line 1972
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;
config false; config false;
description description
"If the value is set to 'true', it means that "If the value is set to 'true', it means that
the most recently received LIE was accepted. the most recently received LIE was accepted.
If the LIE was rejected, the neighbor error If the LIE was rejected, the neighbor error
notifications should be used to find the reason."; notifications should be used to find the reason.";
} }
leaf last-lie-reject-reason { leaf last-lie-reject-reason {
skipping to change at line 2090 skipping to change at line 2059
"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 line 2132 skipping to change at line 2099
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 line 2191 skipping to change at line 2150
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 line 2272 skipping to change at line 2228
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 line 2584 skipping to change at line 2528
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 {
type inet:ip-prefix; type inet:ip-prefix;
description description
"The prefix information."; "The prefix information.";
} }
skipping to change at line 2629 skipping to change at line 2571
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 line 2709 skipping to change at line 2651
} }
description description
"The interfaces with wrong level neighbor."; "The interfaces with wrong level neighbor.";
} }
description description
"The RIFT instance."; "The RIFT instance.";
} }
} }
} }
} }
<CODE ENDS> ]]></sourcecode>
]]></artwork> <t keepWithPrevious="true"/>
<postamble></postamble>
</figure>
</section> </section>
<section numbered="true" toc="default">
<name>Security Considerations</name>
<!-- DNE begins -->
<t>The YANG module specified in this document defines a schema for data
that is designed to be accessed via network management protocols such as
NETCONF <xref target="RFC6241" format="default"/> or RESTCONF <xref
target="RFC8040" format="default"/>. The lowest NETCONF layer is the
secure transport layer, and the mandatory-to-implement secure transport
is Secure Shell (SSH) <xref target="RFC6242" format="default"/>. The
lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure
transport is TLS <xref target="RFC8446" format="default"/>.</t>
<section title="Security Considerations"> <t>The Network Configuration Access Control Model <xref target="RFC8341"
<t>The YANG module specified in this document defines a schema for data format="default"/> provides the means to restrict access for particular
that is designed to be accessed via network management protocols such NETCONF or RESTCONF users to a preconfigured subset of all available
as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. NETCONF or RESTCONF protocol operations and content.</t>
The lowest NETCONF layer is the secure transport layer, and the
mandatory-to-implement secure transport is Secure Shell (SSH) <xref target="R
FC6242"/>.
The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure
transport is TLS <xref target="RFC8446"/>.</t>
<t>The Network Configuration Access Control Model <xref target="RFC8341"/> pr <t>There are a number of data nodes defined in this YANG module that are
ovides the means to writable/creatable/deletable (i.e., config true, which is the default). These
restrict access for particular NETCONF or RESTCONF users to a data nodes may be considered sensitive or vulnerable in some network
preconfigured subset of all available NETCONF or RESTCONF protocol environments. Write operations (e.g., edit-config) to these data nodes
operations and content.</t> without proper protection can have a negative effect on network operations.
These are the subtrees and data nodes and their sensitivity/vulnerability:</t
>
<!-- DNE ends -->
<t>There are a number of data nodes defined in this YANG module that are <!--[rfced] Section 4. The text has been updated to exactly
writable/creatable/deletable (i.e., config true, which is the match the template for YANG module security considerations
default). These data nodes may be considered sensitive or vulnerable (https://wiki.ietf.org/group/ops/yang-security-guidelines). Please review.
in some network environments. Write operations (e.g., edit-config) If additional changes are needed, please let us know. Specifically,
to these data nodes without proper protection can have a negative the following text was updated.
effect on network operations. Writable data node represent
configuration of each instance, node, interface, etc.
These correspond to the following schema node:</t>
<t> Original (paragraph 3):
<list style="symbols"> Writable data node represent configuration of each instance, node,
<t>/rift</t> interface, etc. These correspond to the following schema node:
</list>
</t>
<t>Modifying the configuration may cause all the RIFT neighborship to be reb Current:
uilt. These are the subtrees and data nodes and their sensitivity/
For example, the configuration changing of configured-level or system-id w vulnerability:
ill lead to all the neighbor connections of this node rebuilt.
The incorrect modification of authentication, except for the neighbor conn
ection broken, will
lead to the permanent connection broken. The modification of interface wil
l lead to the neighbor state changing.
In general, unauthorized modification of most RIFT configurations will pos
e their own
set of security risks and the "Security Considerations" in the
respective reference RFCs should be consulted.</t>
<t>Some of the readable data nodes in this YANG module may be considered However, should it be updated to singular because one item is listed?
Perhaps:
This is the schema node and its sensitivity/vulnerability:
Original (paragraph 11):
Specifically, the
following operations have particular sensitivities/ vulnerabilities:
Current:
These are the subtrees and data nodes and their sensitivity/
vulnerability:
-->
<ul spacing="normal">
<li>
<t>/rift</t>
</li>
</ul>
<!--[rfced] Please clarify this sentence; the original does not parse.
Original:
The incorrect modification of authentication, except for
the neighbor connection broken, will lead to the permanent connection
broken.
Perhaps:
The incorrect modification of authentication, except for
the broken neighbor connection, will break the connection
permanently.
-->
<t>Modifying the configuration may cause all the RIFT neighborships to be
rebuilt. For example, changing the configuration of configured-level or
system-id will lead to all the neighbor connections of this node being
rebuilt.
The incorrect modification of authentication, except for
the neighbor connection broken, will lead to the permanent connection
broken.
The
modification of interface will cause the neighbor state to change. In
general, unauthorized modification of most RIFT configurations will pose
their own set of security risks and the "Security Considerations" in the
respective RFCs referenced should be consulted.</t>
<t>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:</t> nodes and their sensitivity/vulnerability:</t>
<ul spacing="normal">
<t> <li>
<list style="symbols"> <t>/rift</t>
<t>/rift</t> </li>
<t>/rift/global/tie-security</t> <li>
<t>/rift/interface</t> <t>/rift/global/tie-security</t>
<t>/rift/interface/neighbor</t> </li>
<t>/rift/database</t> <li>
</list> <t>/rift/interface</t>
</t> </li>
<li>
<t>The exposure of the database will expose the detailed topology <t>/rift/interface/neighbor</t>
</li>
<li>
<t>/rift/database</t>
</li>
</ul>
<t>The exposure of the database will expose the detailed topology
of the network. Network operators may consider their topologies of the network. Network operators may consider their topologies
to be sensitive confidential data.</t> to be sensitive confidential data.</t>
<t>For RIFT authentication, configuration is supported via the
<t>For RIFT authentication, configuration is supported via the specification of key chains <xref target="RFC8177" format="default"/> or the
specification of key-chains <xref target="RFC8177"/> or the direct direct
specification of key and authentication algorithm. specification of key and authentication algorithm.
Hence, authentication configuration inherits the security Hence, authentication configuration inherits the security
considerations of <xref target="RFC8177"/>. This includes the considerations of <xref target="RFC8177" format="default"/>. This includes t he
considerations with respect to the considerations with respect to the
local storage and handling of authentication keys.</t> local storage and handling of authentication keys.</t>
<t>The actual authentication key data (whether locally specified
<t>The actual authentication key data (whether locally specified
or part of a key chain) is sensitive and needs to be kept secret or part of a key chain) is sensitive and needs to be kept secret
from unauthorized parties; compromise of the key data would allow from unauthorized parties. Compromise of the key data would allow
an attacker to forge RIFT packet that would be accepted as an attacker to forge RIFT packets that would be accepted as
authentic, potentially compromising the entire domain.</t> authentic, potentially compromising the entire domain.</t>
<t>Some of the RPC operations in this YANG module may be considered
<t>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, important to control access to these operations.
the following operations have particular sensitivities/ These are the operations and their sensitivity/vulnerability:</t>
vulnerabilities:</t> <ul spacing="normal">
<li>
<t> <t>/rift/interface/clear-all-neighbors</t>
<list style="symbols"> </li>
<t>/rift/interface/clear-all-neighbors</t> <li>
<t>/rift/interface/neighbor/clear-neighbor</t> <t>/rift/interface/neighbor/clear-neighbor</t>
<t>/rift/statistics/spf-statistics/clear-spf-statistics</t> </li>
<t>/rift/statistics/interface/clear-intf-statistics</t> <li>
<t>/rift/statistics/interface/neighbors/clear-nbr-statistics</t> <t>/rift/statistics/spf-statistics/clear-spf-statistics</t>
</list> </li>
</t> <li>
<t>/rift/statistics/interface/clear-intf-statistics</t>
<t>Unauthorized access to either of the above action operations can </li>
<li>
<t>/rift/statistics/interface/neighbors/clear-nbr-statistics</t>
</li>
</ul>
<t>Unauthorized access to either of the above action operations can
lead to the neighbor connection rebuilding or clearing of lead to the neighbor connection rebuilding or clearing of
statistics on this device.</t> statistics on this device.</t>
</section>
</section> <section numbered="true" toc="default">
<name>IANA Considerations</name>
<section title="IANA Considerations"> <t>Per this document, IANA has registered a URI in the IETF XML registry
<t>RFC Ed.: Please replace all occurrences of 'XXXX' with the <xref target="RFC3688" format="default"/>.
actual RFC number (and remove this note).</t> Following the format in <xref target="RFC3688" format="default"/>, the follow
ing
<t>This document registers a URI in the IETF XML registry registration has been made:</t>
<xref target="RFC3688"/>. <dl newline="false" spacing="compact">
Following the format in <xref target="RFC3688"/>, the following <dt>URI:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-rift</dd>
registration is requested to be made:</t> <dt>Registrant Contact:</dt> <dd>The IESG</dd>
<dt>XML:</dt> <dd>N/A; the requested URI is an XML namespace.</dd>
<t>URI: urn:ietf:params:xml:ns:yang:ietf-rift</t> </dl>
<t>Registrant Contact: The IESG</t> <t>One new YANG module name has been registered in the YANG
<t>XML: N/A, the requested URI is an XML namespace.</t> Module Names registry <xref target="RFC6020" format="default"/> as follows:</
t>
<t>This document also requests one new YANG module name in the YANG <dl newline="false" spacing="compact">
Module Names registry <xref target="RFC6020"/> with the following <dt>Name:</dt> <dd>ietf-rift</dd>
suggestion:</t> <dt>Namespace:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-rift</dd>
<dt>Prefix:</dt> <dd>rift</dd>
<t>name: ietf-rift</t> <dt>Reference:</dt> <dd>RFC 9719</dd>
<t>namespace: urn:ietf:params:xml:ns:yang:ietf-rift</t> </dl>
<t>prefix: rift</t> </section>
<t>reference: RFC XXXX</t>
</section>
<section title="Acknowledgement">
<t>The authors would like to thank Tony Przygienda, Jordan Head,
Benchong Xu (xu.benchong@zte.com.cn), Tom Petch for their review,
valuable comments and suggestions.</t>
</section>
</middle> </middle>
<!-- *****BACK MATTER ***** -->
<back> <back>
<references>
<name>References</name>
<references>
<name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5
881.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
020.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
241.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
242.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
991.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
950.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
040.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
177.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
294.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
340.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
341.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
342.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
343.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
349.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
446.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
505.xml"/>
<references title='Normative References'> <!-- Note to RE: Companion document RFC 9692 in AUTH48 as of 12/09/24 - update t
&rfc2119; o use xi:include before publication -->
&rfc5881; <reference anchor="RFC9692" target="https://www.rfc-editor.org/info/rfc9692">
&rfc6020; <front>
&rfc6241; <title>RIFT: Routing in Fat Trees</title>
&rfc6242; <author fullname="Tony Przygienda" initials="T." surname="Przygienda" role="edit
&rfc6991; or">
&rfc7950; <organization>Juniper Networks</organization>
&rfc8040; </author>
&rfc8174; <author fullname="Jordan Head" initials="J." surname="Head" role="editor">
&rfc8177; <organization>Juniper Networks</organization>
&rfc8294; </author>
&rfc8340; <author fullname="Alankar Sharma" initials="A." surname="Sharma">
&rfc8341; <organization>Hudson River Trading</organization>
&rfc8342; </author>
&rfc8343; <author fullname="Pascal Thubert" initials="P." surname="Thubert">
&rfc8349; <organization>Individual</organization>
&rfc8446; </author>
&rfc8505; <author fullname="Bruno Rijsman" initials="B." surname="Rijsman">
&I-D.ietf-rift-rift; <organization>Individual</organization>
</references> </author>
<author fullname="Dmitry Afanasiev" initials="D." surname="Afanasiev">
<organization>Yandex</organization>
</author>
<date month="January" year="2025"/>
</front>
<seriesInfo name="RFC" value="9692"/>
<seriesInfo name="DOI" value="10.17487/RFC9692"/>
<references title='Informative References'> </reference>
&rfc3688; </references>
&rfc8407; <references>
&rfc8639; <name>Informative References</name>
&rfc8641; <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
<reference anchor="IEEE8021AS" target="https://ieeexplore.ieee.org/docu 688.xml"/>
ment/5741898/"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
<front> 407.xml"/>
<title>IEEE Standard for Local and Metropolitan Area <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
639.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
641.xml"/>
<reference anchor="IEEE8021AS" target="https://ieeexplore.ieee.org/docum
ent/5741898/">
<front>
<title>IEEE Standard for Local and Metropolitan Area
Networks - Timing and Synchronization for Time-Sensitive Networks - Timing and Synchronization for Time-Sensitive
Applications in Bridged Local Area Networks</title> Applications in Bridged Local Area Networks</title>
<author/> <author>
<date/> <organization>IEEE</organization>
</front> </author>
</reference> <date month="March" year="2011"/>
</front>
<seriesInfo name="IEEE Std" value="802.1AS-2011"/>
<seriesInfo name=" DOI" value="10.1109/IEEESTD.2011.5741898"/>
</reference>
</references>
</references> </references>
<!-- [rfced] Please review the "Inclusive Language" portion of the online
Style Guide
<https://www.rfc-editor.org/styleguide/part2/#inclusive_language> and let
us know if any changes are needed. Updates of this nature typically
result in more precise language, which is helpful for readers. Note that
our script did not flag any words in particular, but this should still be
reviewed as a best practice. -->
<section numbered="false" toc="default">
<name>Acknowledgments</name>
<t>The authors would like to thank <contact fullname="Tony
Przygienda"/>, <contact fullname="Jordan Head"/>, <contact
fullname="Benchong Xu"/> (<eref target="mailto:xu.benchong@zte.com.cn"/>),
and
<contact fullname="Tom Petch"/> for their review, valuable comments, and
suggestions.</t>
</section>
</back> </back>
</rfc> </rfc>
 End of changes. 230 change blocks. 
677 lines changed or deleted 728 lines changed or added

This html diff was produced by rfcdiff 1.48.