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 " "> | ||||
<!ENTITY zwsp "​"> | ||||
<!ENTITY nbhy "‑"> | ||||
<!ENTITY wj "⁠"> | ||||
]> | ||||
<?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 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. |