| 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 | <title abbrev="RIFT YANG Data Model">YANG Data Model for Routing in Fat Tree | |||
| FT)</title> | s (RIFT)</title> | |||
| <seriesInfo name="RFC" value="9719"/> | ||||
| <author fullname="Zheng Zhang" initials="Z" surname="Zhang"> | <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>Individual</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="March"/> | ||||
| <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 | ||||
| <section title="Terminology"> | and the defined model.</t> | |||
| <t>The following terminologies and abbreviations are used in this document | <t>The content is copied from <xref target="RFC9692" format="default"/> | |||
| and the defined model:</t> | for reading convenience.</t> | |||
| <t>The content is copied from <xref target="I-D.ietf-rift-rift"/> for r | <dl newline="true"> | |||
| eading convenience.</t> | <dt>Clos / Fat Tree:</dt><dd> This document uses the terms "Clos" and | |||
| "Fat Tree" interchangeably where it always refers to a folded | ||||
| <t>Clos/Fat Tree: It refers to a folded spine-and-leaf topology with | spine-and-leaf topology with possibly multiple Points of Delivery | |||
| possibly multiple Points of Delivery (PoDs) and one or multiple | (PoDs) and one or multiple Top of Fabric (ToF) planes.</dd> | |||
| Top of Fabric (ToF) planes. </t> | <dt>RIFT:</dt><dd>Routing in Fat Trees <xref target="RFC9692" format="de | |||
| fault"/>.</dd> | ||||
| <t>RIFT: Routing in Fat Trees <xref target="I-D.ietf-rift-rift"/>.</t> | <dt>LIE:</dt><dd>This is an acronym for a "Link Information Element" | |||
| exchanged on all the system's links running RIFT to form <em>ThreeWay</e | ||||
| <t>LIE: "Link Information Element" are exchanged on | m> | |||
| all the system's links running RIFT to form ThreeWay adjacencies | adjacencies and carry information used to perform RIFT Zero Touch | |||
| and carry information used to perform Zero Touch Provisioning | Provisioning (ZTP) of levels.</dd> | |||
| (ZTP) of levels.</t> | <dt>Point of Delivery (PoD):</dt><dd>A self-contained vertical slice or | |||
| subset of a Clos or Fat Tree | ||||
| <t>PoD: "Point of Delivery" means a self-contained vertical slice or sub | network normally containing only level 0 and level 1 nodes. A | |||
| set of a Clos or Fat Tree | ||||
| 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> RIFT tries to form a unique | ||||
| <t>ThreeWay Adjacency: A unique adjacency between two nodes over a | adjacency between two nodes over a point-to-point interface and | |||
| point-to-point interface and exchange local configuration and | exchange local configuration and necessary RIFT ZTP information. An | |||
| necessary RIFT ZTP information. An adjacency is only advertised | adjacency is only advertised in Node TIEs and used for computations | |||
| in Node TIEs and used for computations after it achieved | after it achieved <em>ThreeWay</em> state, i.e., both routers | |||
| ThreeWay state, i.e. both routers reflected each other in LIEs | reflected each other in LIEs, including relevant security | |||
| including relevant security information. Nevertheless, LIEs | information. Nevertheless, LIEs before <em>ThreeWay</em> state is | |||
| before ThreeWay state is reached may carry RIFT ZTP related | reached may carry RIFT ZTP related information already.</dd> | |||
| information already.</t> | <dt>TIEs:</dt><dd>This is an acronym for a "Topology Information | |||
| Element". TIEs are exchanged between RIFT nodes to describe parts of | ||||
| <t>TIE: "Topology Information Element" are | a network such as links and address prefixes. A TIE has always a | |||
| exchanged between RIFT nodes to describe parts of a network such | direction and a type. North TIEs (sometimes abbreviated as N-TIEs) are | |||
| as links and address prefixes. A TIE has always a direction and a | used when dealing with TIEs in the northbound representation, and | |||
| type. North TIEs (sometimes abbreviated as N-TIEs) are used when | South TIEs (sometimes abbreviated as S-TIEs) for the southbound | |||
| dealing with TIEs in the northbound representation and South-TIEs | equivalent. TIEs have different types, such as node and prefix | |||
| (sometimes abbreviated as S-TIEs) for the southbound equivalent. | TIEs.</dd> | |||
| TIEs have different types such as node and prefix TIEs.</t> | <dt>Top of Fabric (ToF):</dt><dd>The set of nodes that provide | |||
| inter-PoD communication and have no northbound adjacencies, i.e., are | ||||
| <t>ToF: "Top of Fabric" is | at the "very top" of the fabric. ToF nodes do not belong to any PoD | |||
| the set of nodes that provide inter-PoD communication and have no | and are assigned the default PoD value to indicate the equivalent of | |||
| northbound adjacencies, i.e. are at the "very top" of the fabric. | "any" PoD.</dd> | |||
| ToF nodes do not belong to any PoD and are assigned | </dl> | |||
| default PoD value to indicate the equivalent of "any" PoD.</t> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| </section> | <name>Conventions Used in This Document</name> | |||
| <t> | ||||
| <section title="Conventions Used in This Document"> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| "OPTIONAL" in this document are to be interpreted as described in | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| when, and only when, they appear in all capitals, as shown here.</t> | be interpreted as | |||
| </section> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| when, and only when, they appear in all capitals, as shown here. | ||||
| <section title="Tree Diagrams"> | </t> | |||
| <t>Tree diagrams used in this document follow the notation defined in <xre | </section> | |||
| f target="RFC8340"/>.</t> | <section numbered="true" toc="default"> | |||
| </section> | <name>Tree Diagrams</name> | |||
| <t>Tree diagrams used in this document follow the notation defined in <x | ||||
| <section title="Prefixes in Data Node Names"> | ref target="RFC8340" format="default"/>.</t> | |||
| <t>In this document, names of data nodes, actions, and other data mod | </section> | |||
| el | <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 | ||||
| <t>The model contains all the basic configuration parameters to operate | operate the protocol. Depending on the implementation choices, some | |||
| the protocol. Depending on the implementation choices, | systems may not allow some of the advanced parameters to be | |||
| some systems may not allow some of the advanced parameters to be | configurable. The occasionally implemented parameters are modeled as | |||
| configurable. The occasionally implemented parameters are modeled as | optional features in this model. This model can be extended, and it | |||
| optional features in this model. | has been structured in a way that such extensions can be conveniently | |||
| This model can be extended, and it has been structured in a way that | made.</t> | |||
| such extensions can be conveniently made.</t> | <t>The RIFT YANG module augments the /routing/control-plane-protocols/ | |||
| control-plane-protocol path defined in the ietf-routing module. This | ||||
| <t>The RIFT YANG module augments the /routing/control-plane-protocols/ | model augments the routing module to add RIFT as a control-plane | |||
| control-plane-protocol path defined in the ietf-routing module. | protocol. It then offers the ability to create a list of instances, | |||
| This model augments the routing module to add RIFT as a control plane protoco | which it does by declaring 'list rift'. Multiple instances of the | |||
| l. | protocol are supported by the module by giving each instance a unique | |||
| It then offers the ability to create a list of instances, which it does by de | name.</t> | |||
| claring 'list rift'. | </section> | |||
| Multiple instances of the protocol are supported by the module by giving each | <section numbered="true" toc="default"> | |||
| instance a unique name.</t> | <name>Specification</name> | |||
| </section> | <t> | |||
| <section title="Specification"> | ||||
| <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>At a high level, the RIFT YANG model is organized into five elements: | ||||
| <t>The RIFT YANG module augments the /routing/control-plane-protocols/ | </t> | |||
| control-plane-protocol path defined in the ietf-routing module. | <dl spacing="normal" newline="false"> | |||
| This model augments the routing module to add RIFT as a control plane protoco | <dt>base protocol configuration --</dt> <dd>Configuration | |||
| l. | affecting RIFT protocol-related operations.</dd> | |||
| It then offers the ability to create a list of instances, which it does by de | <dt>interface configuration --</dt> <dd>Configuration affecting | |||
| claring 'list rift'. | the interface operations.</dd> | |||
| Multiple instances of the protocol are supported by the module by giving each | <dt>neighbor status --</dt> <dd>Information of neighbors.</dd> | |||
| instance a unique name.</t> | <dt>database --</dt> <dd>Information of TIEs.</dd> | |||
| <dt>statistics --</dt> <dd>Statistics of SPF, interface, and neighbo | ||||
| <t>At a high level, RIFT YANG model is organized into five elements:</t> | r.</dd> | |||
| <t> | </dl> | |||
| <list style="symbols"> | <sourcecode type="yangtree"> | |||
| <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 390 ¶ | |||
| | | +--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 637 ¶ | |||
| | +--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> | ||||
| <section title="RIFT configuration"> | <t> | |||
| <t> | ||||
| The RIFT configuration includes node global configuration and interface c onfiguration. | 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 | Some features can be used to enhance protocols, such as BFD <xref target=" | |||
| FC5881"/>, | RFC5881" format="default"/> with | |||
| flooding-reducing section 6.3.9 <xref target="I-D.ietf-rift-rift"/>.</t | flooding reduction (<xref target="RFC9692" sectionFormat="of" section=" | |||
| > | 6.3.9"/>).</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="RIFT States"> | <name>RIFT States</name> | |||
| <t>The state data nodes include node, interface, neighbor and database infor | <t>The state data nodes include node, interface, neighbor, and database | |||
| mation.</t> | information.</t> | |||
| <t>YANG actions are defined to clear the connection of one specific neigh | <t>YANG actions are defined to clear the connection of one specific neig | |||
| bor on an interface, | 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 numbered="true" toc="default"> | ||||
| <name>Notifications</name> | ||||
| <t>Unexpected TIE and neighbor layer errors should be notified.</t> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>RIFT YANG Module</name> | ||||
| <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 title="Notifications"> | <!--[rfced] In the YANG module, please clarify "system id using pattern" | |||
| <t>Unexpected TIE and neighbor's layer error should be notified.</t> | in the description of system-id. (In text as "System ID" to match | |||
| </section> | RFC-to-be 9692.) | |||
| </section> | Original: | |||
| description | ||||
| "This type defines RIFT system id using pattern, | ||||
| the system id looks like: 0021.2FFF.FEB5.6E10"; | ||||
| <section title="RIFT YANG model"> | Perhaps: | |||
| <t>This module references <xref target="I-D.ietf-rift-rift"/>, | description | |||
| <xref target="RFC5881"/>, <xref target="RFC6991"/>, | "This type defines the pattern for RIFT System IDs. | |||
| <xref target="RFC8177"/>, <xref target="RFC8294"/>, <xref target="RFC83 | An example of a System ID is 0021.2FFF.FEB5.6E10."; | |||
| 43"/>, | --> | |||
| <xref target="RFC8349"/>, <xref target="RFC8505"/>, | ||||
| <xref target="IEEE8021AS"/>.</t> | ||||
| <figure align="center"> | <!--[rfced] Please note that the YANG module has been updated per | |||
| <artwork align="center"><![CDATA[ | the formatting option of pyang. Please let us know any concerns. | |||
| <CODE BEGINS> file "ietf-rift@2024-08-16.yang" | --> | |||
| <sourcecode name="ietf-rift@2025-01-15.yang" type="yang" markers="true"><! | ||||
| [CDATA[ | ||||
| module ietf-rift { | module ietf-rift { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; | namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; | |||
| prefix rift; | prefix rift; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix inet; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix yang; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix rt; | |||
| reference | reference | |||
| "RFC 8349: A YANG Data Model for Routing Management | "RFC 8349: A YANG Data Model for Routing Management | |||
| (NMDA Version)"; | (NMDA Version)"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix if; | |||
| reference | reference | |||
| "RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix "rt-types"; | prefix rt-types; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import iana-routing-types { | import iana-routing-types { | |||
| prefix "iana-rt-types"; | prefix iana-rt-types; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import ietf-key-chain { | import ietf-key-chain { | |||
| prefix "key-chain"; | prefix key-chain; | |||
| reference | reference | |||
| "RFC 8177: YANG Data Model for Key Chains"; | "RFC 8177: YANG Data Model for Key Chains"; | |||
| } | } | |||
| organization | organization | |||
| "IETF RIFT (Routing In Fat Trees) Working Group"; | "IETF RIFT (Routing In Fat Trees) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/rift/> | "WG Web: <https://datatracker.ietf.org/wg/rift/> | |||
| WG List: <mailto:rift@ietf.org> | WG List: <mailto:rift@ietf.org> | |||
| Editor: Zheng Zhang | Author: Zheng (Sandy) Zhang | |||
| <mailto:zhang.zheng@zte.com.cn> | <mailto:zhang.zheng@zte.com.cn> | |||
| Editor: Yuehua Wei | Author: Yuehua Wei | |||
| <mailto:wei.yuehua@zte.com.cn> | <mailto:wei.yuehua@zte.com.cn> | |||
| Editor: Shaowen Ma | Author: Shaowen Ma | |||
| <mailto:mashaowen@gmail.com> | <mailto:mashaowen@gmail.com> | |||
| Editor: Xufeng Liu | Author: Xufeng Liu | |||
| <mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
| Editor: Bruno Rijsman | Author: Bruno Rijsman | |||
| <mailto:brunorijsman@gmail.com>"; | <mailto:brunorijsman@gmail.com>"; | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove | ||||
| // this note | ||||
| description | description | |||
| "This YANG module defines the generic configuration and | "This YANG module defines the generic configuration and | |||
| operational state for the RIFT protocol common to all | operational state for the RIFT protocol common to all | |||
| vendor implementations. It is intended that the module | vendor implementations. It is intended that the module | |||
| will be extended by vendors to define vendor-specific | will be extended by vendors to define vendor-specific | |||
| RIFT configuration parameters and policies -- | RIFT configuration parameters and policies -- | |||
| for example, route maps or route policies. | for example, route maps or route policies. | |||
| Copyright (c) 2024 IETF Trust and the persons identified as | Copyright (c) 2025 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9719 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9719); see the RFC itself | |||
| for full legal notices. | for full legal notices. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here."; | they appear in all capitals, as shown here."; | |||
| revision 2024-08-16 { | revision 2025-01-15 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFCXXXX: YANG Data Model for Routing in Fat Trees | "RFC 9719: YANG Data Model for Routing in Fat Trees | |||
| (RIFT)."; | (RIFT)."; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature nonce-delta-adjust { | feature nonce-delta-adjust { | |||
| description | description | |||
| "Support weak nonce delta adjusting which is used in | "Support weak nonce delta adjusting that is used in | |||
| security."; | security."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| feature label-switching { | feature label-switching { | |||
| description | description | |||
| "Support label switching for instance distinguishing."; | "Support label switching for instance distinguishing."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.8.8"; | Section 6.8.8"; | |||
| } | } | |||
| feature tie-security { | feature tie-security { | |||
| description | description | |||
| "Support security function for the TIE exchange."; | "Support security function for the TIE exchange."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9.3."; | Section 6.9.3."; | |||
| } | } | |||
| feature link-security { | feature link-security { | |||
| description | description | |||
| "Support security function of link."; | "Support security function of link."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.9."; | Section 6.9."; | |||
| } | } | |||
| typedef system-id { | typedef system-id { | |||
| type string { | type string { | |||
| pattern | pattern | |||
| '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; | '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; | |||
| } | } | |||
| description | description | |||
| "This type defines RIFT system id using pattern, | "This type defines the pattern for RIFT System IDs. | |||
| the system id looks like: 0021.2FFF.FEB5.6E10"; | An example of a System ID is 0021.2FFF.FEB5.6E10."; | |||
| } | } | |||
| typedef level { | typedef level { | |||
| type uint8 { | type uint8 { | |||
| range "0 .. 24"; | range "0 .. 24"; | |||
| } | } | |||
| default "0"; | default "0"; | |||
| description | description | |||
| "The value of node level. | "The value of node level. | |||
| Clos and Fat Tree networks are topologically partially | Clos and Fat Tree networks are topologically partially | |||
| ordered graphs and 'level' denotes the set of nodes at | ordered graphs and 'level' denotes the set of nodes at | |||
| the same height in such a network. | the same height in such a network. | |||
| Nodes at the top level (i.e., ToF) are at the level with | Nodes at the top level (i.e., ToF) are at the level with | |||
| the highest value and count down to the nodes | the highest value and count down to the nodes | |||
| at the bottom level (i.e., leaf) with the lowest value. | at the bottom level (i.e., leaf) with the lowest value. | |||
| In RIFT, Level 0 always indicates that a node is a leaf, | In RIFT, level 0 always indicates that a node is a leaf, | |||
| but does not have to be level 0. | but does not have to be level 0. | |||
| Level values can be configured manually or automatically | Level values can be configured manually or automatically | |||
| derived."; | derived."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. | "RFC 9692: RIFT: Routing in Fat Trees. | |||
| Section 6.7."; | Section 6.7."; | |||
| } | } | |||
| typedef ieee802-1as-timestamp { | typedef ieee802-1as-timestamp { | |||
| type uint64; | type uint64; | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "Timestamp per IEEE802.1AS. It is advertised with prefix | "Timestamp per IEEE802.1AS. It is advertised with prefix | |||
| to achieve mobility."; | to achieve mobility."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees. Section 6.8.4. | "RFC 9692: RIFT: Routing in Fat Trees. Section 6.8.4. | |||
| IEEE8021AS: Timing and Synchronization for Time-Sensitive | IEEE8021AS: Timing and Synchronization for Time-Sensitive | |||
| Applications in Bridged Local Area Networks"; | Applications in Bridged Local Area Networks"; | |||
| } | } | |||
| /* | /* | |||
| * Identity | * Identity | |||
| */ | */ | |||
| identity rift { | identity rift { | |||
| base rt:routing-protocol; | base rt:routing-protocol; | |||
| description | description | |||
| "Identity for the RIFT routing protocol."; | "Identity for the RIFT routing protocol."; | |||
| reference | reference | |||
| "I-D.ietf-rift-rift: RIFT: Routing in Fat Trees"; | "RFC 9692: RIFT: Routing in Fat Trees"; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping address-families { | grouping address-families { | |||
| leaf-list address-families { | leaf-list address-families { | |||
| type iana-rt-types:address-family; | type iana-rt-types:address-family; | |||
| description | description | |||
| "Indication which address families are up on the | "Indication which address families are up on the | |||
| interface."; | interface."; | |||
| } | } | |||
| description | description | |||
| "Containing address families on the interface."; | "Containing address families on the interface."; | |||
| } | } | |||
| grouping hierarchy-indications { | grouping hierarchy-indications { | |||
| leaf hierarchy-indications { | leaf hierarchy-indications { | |||
| type enumeration { | type enumeration { | |||
| enum "leaf-only" { | enum leaf-only { | |||
| description | description | |||
| "The node will never leave the | "The node will never leave the | |||
| 'bottom of the hierarchy'. | 'bottom of the hierarchy'. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the minimum level value."; | is the minimum level value."; | |||
| } | } | |||
| enum "leaf-only-and-leaf-2-leaf-procedures" { | enum leaf-only-and-leaf-2-leaf-procedures { | |||
| description | description | |||
| "This means leaf to leaf. | "This means leaf to leaf. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the minimum level value."; | is the minimum level value."; | |||
| } | } | |||
| enum "top-of-fabric" { | enum top-of-fabric { | |||
| description | description | |||
| "The node is 'top of fabric'. | "The node is 'top of fabric'. | |||
| When this value is set, the 'configured-level' | When this value is set, the 'configured-level' | |||
| is the maximum level value."; | is the maximum level value."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The hierarchy indications of this node."; | "The hierarchy indications of this node."; | |||
| } | } | |||
| description | description | |||
| "Flags indicating node configuration in case of ZTP"; | "Flags indicating node configuration in case of ZTP."; | |||
| } | } | |||
| grouping node-capability { | grouping node-capability { | |||
| leaf proto-minor-ver { | leaf proto-minor-ver { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "Represents the minor protocol encoding schema | "Represents the minor protocol encoding schema | |||
| version of this node."; | version of this node."; | |||
| } | } | |||
| leaf flood-reduction { | leaf flood-reduction { | |||
| skipping to change at line 1037 ¶ | skipping to change at line 947 ¶ | |||
| "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 1031 ¶ | |||
| 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 1152 ¶ | |||
| 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 1222 ¶ | |||
| 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 1299 ¶ | |||
| 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 1381 ¶ | |||
| 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 1438 ¶ | |||
| } | } | |||
| } | } | |||
| 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 1511 ¶ | |||
| 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 1537 ¶ | |||
| "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 1671 ¶ | |||
| 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 1771 ¶ | |||
| 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 1825 ¶ | |||
| "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 1887 ¶ | |||
| 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 1974 ¶ | |||
| "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 2014 ¶ | |||
| 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 2065 ¶ | |||
| 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 2143 ¶ | |||
| 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 2443 ¶ | |||
| 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 2486 ¶ | |||
| 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 2566 ¶ | |||
| } | } | |||
| 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 | ||||
| ovides the means to | ||||
| restrict access for particular NETCONF or RESTCONF users to a | ||||
| preconfigured subset of all available NETCONF or RESTCONF protocol | ||||
| operations and content.</t> | ||||
| <t>There are a number of data nodes defined in this YANG module that are | ||||
| writable/creatable/deletable (i.e., config true, which is the | ||||
| default). These data nodes may be considered sensitive or vulnerable | ||||
| in some network environments. Write operations (e.g., edit-config) | ||||
| to these data nodes without proper protection can have a negative | ||||
| effect on network operations. Writable data node represent | ||||
| configuration of each instance, node, interface, etc. | ||||
| These correspond to the following schema node:</t> | ||||
| <t> | ||||
| <list style="symbols"> | ||||
| <t>/rift</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>Modifying the configuration may cause all the RIFT neighborship to be reb | <t>There are a number of data nodes defined in this YANG module that are | |||
| uilt. | writable/creatable/deletable (i.e., config true, which is the default). These | |||
| For example, the configuration changing of configured-level or system-id w | data nodes may be considered sensitive or vulnerable in some network | |||
| ill lead to all the neighbor connections of this node rebuilt. | environments. Write operations (e.g., edit-config) to these data nodes | |||
| The incorrect modification of authentication, except for the neighbor conn | without proper protection can have a negative effect on network operations. | |||
| ection broken, will | These are the subtrees and data nodes and their sensitivity/vulnerability:</t | |||
| lead to the permanent connection broken. The modification of interface wil | > | |||
| l lead to the neighbor state changing. | <!-- DNE ends --> | |||
| 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 | <ul spacing="normal"> | |||
| <li> | ||||
| <t>/rift</t> | ||||
| </li> | ||||
| </ul> | ||||
| <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 broken neighbor connection, will break the connection permanently. | ||||
| 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. 215 change blocks. | ||||
| 697 lines changed or deleted | 620 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||