<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" docName="draft-ietf-rift-kv-tie-structure-and-processing-09" number="9992" consensus="true" ipr="trust200902" obsoletes="" submissionType="IETF" updates="" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" prepTime="2026-06-11T00:16:17" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-rift-kv-tie-structure-and-processing-09" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9992" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="RIFT Structure and Processing">Routing in Fat Trees (RIFT) Key/Value Topology Information Elements Structure and Processing</title>
    <seriesInfo name="RFC" value="9992" stream="IETF"/>
    <author role="editor" fullname="Jordan Head" initials="J." surname="Head">
      <organization showOnFrontPage="true">HPE</organization>
      <address>
        <postal>
          <street>1701 East Mossy Oaks Road</street>
          <city>Spring</city>
          <region>TX</region>
          <code>77389</code>
          <country>United States of America</country>
        </postal>
        <email>jordan.head@hpe.com</email>
      </address>
    </author>
    <author fullname="Tony Przygienda" initials="T." surname="Przygienda">
      <organization showOnFrontPage="true">HPE</organization>
      <address>
        <postal>
          <street>1701 East Mossy Oaks Road</street>
          <city>Spring</city>
          <region>TX</region>
          <code>77389</code>
          <country>United States of America</country>
        </postal>
        <email>antoni.przygienda@hpe.com</email>
      </address>
    </author>
    <date month="06" year="2026"/>
    <area>RTG</area>
    <workgroup>rift</workgroup>
    <keyword>rift</keyword>
    <keyword>kv</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The Routing in Fat Trees (RIFT) protocol allows for key/value pairs
      to be advertised within Key-Value Topology Information Elements (KV
      TIEs). The data contained within these KV TIEs can be used for any
      imaginable purpose.
      </t>
      <t indent="0" pn="section-abstract-2">This document specifies behavior for the
            various Key Types (i.e., Well-Known, Organizationally Unique Identifier (OUI), and Experimental) and a
            method to structure corresponding values. It also defines a Well-Known
      Key Sub-Type used for testing tie-breaking behavior.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9992" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2026 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-value-structure">Key-Value Structure</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-sub-type">Key Sub-Type</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-experimental-key-type">Experimental Key Type</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-well-known-key-type">Well-Known Key Type</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.4">
                <t indent="0" pn="section-toc.1-1.2.2.4.1"><xref derivedContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-oui-key-type">OUI Key Type</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-design-considerations">Design Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tie-breaking-considerations">Tie-Breaking Considerations</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.1.2">
                  <li pn="section-toc.1-1.3.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.1.1"><xref derivedContent="3.1.1" format="counter" sectionFormat="of" target="section-3.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-southbound-kv-tie-tie-break">Southbound KV TIE Tie-Break Sub-Type</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-target">Key Target</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-target-processing">Key Target Processing</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rift-well-known-key-sub-typ">RIFT Well-Known Key Sub-Types</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.1.2">
                  <li pn="section-toc.1-1.4.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.1.2.1.1"><xref derivedContent="4.1.1" format="counter" sectionFormat="of" target="section-4.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rift-well-known-key-sub-type">RIFT Well-Known Key Sub-Types Entries</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-expert-review-guidance">Expert Review Guidance</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section toc="include" numbered="true" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The Routing in Fat Trees (RIFT) <xref target="RFC9692" format="default" sectionFormat="of" derivedContent="RFC9692"/> protocol
        allows for key/value pairs to be advertised within Key-Value Topology
        Information Elements (KV TIEs). There are no restrictions
        placed on the data that is contained in KV TIEs nor what the
        data is used for.
      </t>
      <t indent="0" pn="section-1-2">For example, it might be beneficial to advertise overlay protocol state
        from leaf nodes to the Top-of-Fabric (ToF) nodes. This would make it possible to view the critical
        state of a fabric-wide service from a single ToF node rather than
        retrieving and reconciling the same state from multiple leaf nodes.
      </t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are
    to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>
      </section>
    </section>
    <section anchor="generic_kv_structure" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-key-value-structure">Key-Value Structure</name>
      <t indent="0" pn="section-2-1">This section describes the generic key structure and semantics;
        <xref target="f1" format="default" sectionFormat="of" derivedContent="Figure 1"/> further illustrates these components.</t>
      <t indent="0" pn="section-2-2"><xref target="RFC9692" section="6.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9692#section-6.1" derivedContent="RFC9692"/> specifies the use of <xref target="THRIFT" format="default" sectionFormat="of" derivedContent="THRIFT">Thrift</xref> to define the protocol's packet structure.
          While no explicit restrictions are placed on Key-Value data or what it is used for, it
        is <bcp14>RECOMMENDED</bcp14> that a serialized Thrift model also be used to define a KV TIE structure for simpler interoperability. For example, <xref target="I-D.ietf-rift-auto-evpn" format="default" sectionFormat="of" derivedContent="RIFT-AUTO-EVPN"/> describes
        this type of implementation.</t>
      <figure anchor="f1" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-generic-key-value-structure">Generic Key-Value Structure</name>
        <artwork align="center" alt="" name="" type="" pn="section-2-3.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Key Type    |               Key Identifier                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Values (variable)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
      </figure>
      <dl newline="true" spacing="normal" indent="3" pn="section-2-4">
        <dt pn="section-2-4.1">where:</dt>
        <dd pn="section-2-4.2">
          <dl newline="true" spacing="normal" indent="3" pn="section-2-4.2.1">
            <dt pn="section-2-4.2.1.1"><strong>Key Type:</strong></dt>
            <dd pn="section-2-4.2.1.2">
              <t indent="0" pn="section-2-4.2.1.2.1">A 1-byte value that identifies the Key Type. Key Type values
              are taken from the "RIFTCommonKVTypes" registry defined in <xref target="RFC9692" format="default" sectionFormat="of" derivedContent="RFC9692"/>.</t>
              <t indent="0" pn="section-2-4.2.1.2.2">The range of valid values is 1 - 255 (2<sup>8</sup>-1).</t>
              <t indent="0" pn="section-2-4.2.1.2.3">0 is an illegal value and <bcp14>MUST NOT</bcp14> be
              allocated to or used by any implementation. KV TIEs received
              with this value <bcp14>MUST</bcp14> be discarded and logged at
              least once.</t>
            </dd>
            <dt pn="section-2-4.2.1.3"><strong>Key Identifier:</strong></dt>
            <dd pn="section-2-4.2.1.4">
              <t indent="0" pn="section-2-4.2.1.4.1">A 3-byte value that identifies the specific key and describes
              the semantics of any contained values.  It <bcp14>SHOULD</bcp14>
              be unique within the context of the given Key Type.</t>
              <t indent="0" pn="section-2-4.2.1.4.2">The range of valid values is 1 - 16777215 (2<sup>24</sup>-1).</t>
              <t indent="0" pn="section-2-4.2.1.4.3">0 is an illegal value and <bcp14>MUST NOT</bcp14> be
              allocated to or used by any implementation. KV TIEs received
              with this value <bcp14>MUST</bcp14> be discarded and logged at
              least once.</t>
            </dd>
            <dt pn="section-2-4.2.1.5"><strong>Values:</strong></dt>
            <dd pn="section-2-4.2.1.6">A variable length value that contains data associated with the
            Key Identifier. It <bcp14>SHOULD</bcp14> contain 1 or more
            elements. The semantics (i.e., existence, order, duplication,
            etc.) of any contained values is governed by the particular key's
            specification.</dd>
          </dl>
        </dd>
      </dl>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-2.1">
        <name slugifiedName="name-key-sub-type">Key Sub-Type</name>
        <t indent="0" pn="section-2.1-1">The Key Sub-Type is a mechanism to further describe
          the key's semantics. This is illustrated by <xref target="f5" format="default" sectionFormat="of" derivedContent="Figure 2"/>.
          The Key Sub-Type <bcp14>MUST</bcp14> be used when the Key Type is either Well-Known or Experimental
          in order to avoid interoperability issues but is <bcp14>OPTIONAL</bcp14> for other Key Types.</t>
        <figure anchor="f5" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-generic-key-value-structure-">Generic Key-Value Structure with Key Sub-Type</name>
          <artwork align="center" alt="" name="" type="" pn="section-2.1-2.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Key Type    |  Key Sub-Type |      Key Sub-Identifier       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Values (variable)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
        </figure>
        <dl newline="true" spacing="normal" indent="3" pn="section-2.1-3">
          <dt pn="section-2.1-3.1">where:</dt>
          <dd pn="section-2.1-3.2">
            <dl newline="true" spacing="normal" indent="3" pn="section-2.1-3.2.1">
              <dt pn="section-2.1-3.2.1.1"><strong>Key Sub-Type:</strong></dt>
              <dd pn="section-2.1-3.2.1.2">
                <t indent="0" pn="section-2.1-3.2.1.2.1">A 1-byte value that identifies the Key Sub-Type that
                describes the key and its semantics.</t>
                <t indent="0" pn="section-2.1-3.2.1.2.2">The range of valid values is 1 - 255 (2<sup>8</sup>-1).</t>
                <t indent="0" pn="section-2.1-3.2.1.2.3">0 is an illegal value and <bcp14>MUST NOT</bcp14> be
                allocated to or used by any implementation. KV TIEs received
                with this value <bcp14>MUST</bcp14> be discarded and logged at
                least once.</t>
              </dd>
              <dt pn="section-2.1-3.2.1.3"><strong>Key Sub-Identifier:</strong></dt>
              <dd pn="section-2.1-3.2.1.4">
                <t indent="0" pn="section-2.1-3.2.1.4.1">A 2-byte value that identifies the specific key and
                describes the semantics of any contained values.  It
                <bcp14>SHOULD</bcp14> be unique within the context of the
                given Key Sub-Type.</t>
                <t indent="0" pn="section-2.1-3.2.1.4.2">The range of valid values is 1 - 65535 (2<sup>16</sup>-1).</t>
                <t indent="0" pn="section-2.1-3.2.1.4.3">0 is an illegal value and <bcp14>MUST NOT</bcp14> be
                allocated to or used by any implementation. KV TIEs received
                with this value <bcp14>MUST</bcp14> be discarded and logged at
                least once.</t>
              </dd>
            </dl>
          </dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-experimental-key-type">Experimental Key Type</name>
        <t indent="0" pn="section-2.2-1">This section describes the Experimental Key Type.</t>
        <t indent="0" pn="section-2.2-2">As shown in <xref target="f2" format="default" sectionFormat="of" derivedContent="Figure 3"/>, the Key Type is set to 1, which identifies the Key Type as Experimental. The Experimental Key Type <bcp14>MUST</bcp14> support the use of a Key Sub-Type. The Key Sub-Identifier will be
        used to identify the specific key and the semantics of any contained values.
        </t>
        <figure anchor="f2" align="left" suppress-title="false" pn="figure-3">
          <name slugifiedName="name-experimental-key-type-2">Experimental Key Type</name>
          <artwork align="center" alt="" name="" type="" pn="section-2.2-3.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       1       |  Key Sub-Type |      Key Sub-Identifier       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Experimental Values                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
        </figure>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-well-known-key-type">Well-Known Key Type</name>
        <t indent="0" pn="section-2.3-1">This section describes the Well-Known Key Type.</t>
        <t indent="0" pn="section-2.3-2">As shown in <xref target="f3" format="default" sectionFormat="of" derivedContent="Figure 4"/>, the Key Type is set to 2, which identifies the Key Type as Well-Known.
          The Well-Known Key Type <bcp14>MUST</bcp14> support the use of a Key Sub-Type. The Key Sub-Identifier will be
        used to identify the specific key and the semantics of any contained values.
        </t>
        <figure anchor="f3" align="left" suppress-title="false" pn="figure-4">
          <name slugifiedName="name-well-known-key-type-2">Well-Known Key Type</name>
          <artwork align="center" alt="" name="" type="" pn="section-2.3-3.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       2       |  Key Sub-Type |      Key Sub-Identifier       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Well-Known Values                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
        </figure>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.4">
        <name slugifiedName="name-oui-key-type">OUI Key Type</name>
        <t indent="0" pn="section-2.4-1">This section describes the OUI (vendor-specific) Key Type that an implementation <bcp14>MAY</bcp14> support.</t>
        <t indent="0" pn="section-2.4-2">As shown in <xref target="f4" format="default" sectionFormat="of" derivedContent="Figure 5"/>, the Key Type is set to 3, which identifies the
          Key Type as OUI. The Key Identifier <bcp14>MUST</bcp14> use the implementing
        organization's reserved <xref target="OUI" format="default" sectionFormat="of" derivedContent="OUI">OUI</xref> space to indicate the key and the semantics of any contained values.
        </t>
        <figure anchor="f4" align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-oui-key-type-2">OUI Key Type</name>
          <artwork align="center" alt="" name="" type="" pn="section-2.4-3.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       3       |              OUI Key Identifier               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Vendor-Specific Values                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
        </figure>
      </section>
    </section>
    <section anchor="design" toc="include" numbered="true" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-design-considerations">Design Considerations</name>
      <aside pn="section-3-1">
        <t indent="0" pn="section-3-1.1"><strong>NOTE:</strong> Like <xref target="RFC9692" format="default" sectionFormat="of" derivedContent="RFC9692"/>, this section uses terms to denote directionality, specifically, "northbound" meaning "toward the top of the fabric"
        and "southbound" meaning "toward the bottom of the fabric".</t>
      </aside>
      <t indent="0" pn="section-3-2">While no explicit restrictions are placed on how Key-Value elements are used, it is of critical importance to consider these details.
        For example, they should not be used to carry topology information used by RIFT itself to perform distributed computations as it would likely lead to
        race conditions in convergence, oscillations, and/or other suboptimal behaviors.</t>
      <t indent="0" pn="section-3-3">It is possible that deployments may have nodes that support a given KV TIE and others that do not.
        In this scenario, nodes that receive KV TIEs that they don't recognize (e.g., an unknown Key Type) will
      flood them normally as specified in <xref target="RFC9692" section="6.3.4" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9692#section-6.3.4" derivedContent="RFC9692"/>.</t>
      <t indent="0" pn="section-3-4">New Key Types offer 3 bytes of key identification space, and new Well-Known Key Sub-Types offer 2 bytes.
        When defining how key identification space is used, it is important to consider how much space is actually necessary in order to help
        ensure efficient use of available registry values.</t>
      <section anchor="tie-breaking" toc="include" numbered="true" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-tie-breaking-considerations">Tie-Breaking Considerations</name>
        <t indent="0" pn="section-3.1-1">In cases where KV TIEs are flooded southbound, mechanisms <bcp14>SHOULD</bcp14> be implemented
        in order to avoid network-wide flooding where possible. Key Targets (defined in <xref target="key_target" format="default" sectionFormat="of" derivedContent="Section 3.2"/>) are one such mechanism.</t>
        <t indent="0" pn="section-3.1-2"><xref target="RFC9692" section="6.8.5.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9692#section-6.8.5.1" derivedContent="RFC9692"/> specifies
          that only one KV TIE is selected when identical keys are received from multiple northbound neighbors.
          Therefore, it is <bcp14>RECOMMENDED</bcp14> that implementations ensure that nodes determine Values within KV TIEs independently in a consistent fashion in order
          to prevent scenarios where multiple ToFs advertise KV TIEs with identical keys but differing Values. In such scenarios, node(s) will select
          the KV TIE with the highest System ID, which may lead to unintended effects. Even with a robust implementation, operators should also consider that this may still happen under
          failure conditions, for example, multiple ToFs becoming split-brained.
        </t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-3.1.1">
          <name slugifiedName="name-southbound-kv-tie-tie-break">Southbound KV TIE Tie-Break Sub-Type</name>
          <t indent="0" pn="section-3.1.1-1">This section reserves a Key Sub-Type from the "RIFT Well-Known Key Sub-Types" registry.</t>
          <t indent="0" pn="section-3.1.1-2">This Key-Value pair contains information that allows implementations to test and verify proper tie-breaking behavior for the Southbound
            Keystore. All implementations <bcp14>MUST</bcp14> support this Sub-Type.
          </t>
          <t indent="0" pn="section-3.1.1-3">All implementations <bcp14>SHOULD</bcp14> use the Thrift model defined in <xref target="rift-s-kv-tie-break-model" format="default" sectionFormat="of" derivedContent="Section 3.1.1.1"/>.</t>
          <figure align="left" suppress-title="false" pn="figure-6">
            <name slugifiedName="name-southbound-tie-break-sub-ty">Southbound Tie-Break Sub-Type</name>
            <artwork align="center" pn="section-3.1.1-4.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       2       |      127      |      Key Sub-Identifier       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     (System ID,                                               |
|      Level)                                                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
          </figure>
          <dl newline="true" spacing="normal" indent="3" pn="section-3.1.1-5">
            <dt pn="section-3.1.1-5.1">where:</dt>
            <dd pn="section-3.1.1-5.2">
              <dl newline="true" spacing="normal" indent="3" pn="section-3.1.1-5.2.1">
                <dt pn="section-3.1.1-5.2.1.1"><strong>System ID:</strong></dt>
                <dd pn="section-3.1.1-5.2.1.2">A <bcp14>REQUIRED</bcp14> value indicating the node's unique System ID.</dd>
                <dt pn="section-3.1.1-5.2.1.3"><strong>Level:</strong></dt>
                <dd pn="section-3.1.1-5.2.1.4">A <bcp14>RECOMMENDED</bcp14> value indicating the node's level.</dd>
              </dl>
            </dd>
          </dl>
          <section anchor="rift-s-kv-tie-break-model" numbered="true" toc="exclude" removeInRFC="false" pn="section-3.1.1.1">
            <name slugifiedName="name-thrift-models">Thrift Models</name>
            <t indent="0" pn="section-3.1.1.1-1">This section contains the normative Thrift model to support testing southbound Key-Value tie-breaking based on System ID.
              Per <xref target="RFC9692" section="7" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9692#section-7" derivedContent="RFC9692"/>, all signed values <bcp14>MUST</bcp14> be interpreted as unsigned values.</t>
            <figure align="left" suppress-title="false" pn="figure-7">
              <name slugifiedName="name-rift-common-schema-for-sout">RIFT Common Schema for Southbound Key-Value Tie-Break Key Sub-Type</name>
              <artwork align="left" pn="section-3.1.1.1-2.1">
include "common.thrift"

namespace py southbound_kv
namespace rs models

const i8            GlobalSystemIdentifierKV  = 127

/** simple type to test correct tie-breaking based on system ID */
struct SystemIdentifierKV {
    1:  required   common.SystemIDType         system_id,
    2:  optional   common.LevelType            level,
}</artwork>
            </figure>
          </section>
        </section>
      </section>
      <section anchor="key_target" numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-key-target">Key Target</name>
        <t indent="0" pn="section-3.2-1">The Key Target is an <bcp14>OPTIONAL</bcp14> 64-bit value that identifies group(s) of node(s) that
          are intended to receive a given KV TIE. Key Targets have a valid range of 0 - 18446744073709551615 (2<sup>64</sup>-1).
        </t>
        <t indent="0" pn="section-3.2-2">The Thrift model defined in <xref target="RFC9692" section="7.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9692#section-7.2" derivedContent="RFC9692"/> <bcp14>SHOULD</bcp14> be used for
        Key Target implementation.</t>
        <t indent="0" pn="section-3.2-3"><xref target="f6" format="default" sectionFormat="of" derivedContent="Figure 8"/> illustrates the format.</t>
        <figure anchor="f6" align="left" suppress-title="false" pn="figure-8">
          <name slugifiedName="name-key-target-format">Key Target Format</name>
          <artwork align="center" pn="section-3.2-4.1">
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Key Target                           |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Key Type    |               Key Identifier                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Values                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
        </figure>
        <t indent="0" pn="section-3.2-5">A value of all 0s indicates that every node is intended to receive
          this KV TIE and <bcp14>MUST NOT</bcp14> be used for any other reason.</t>
        <t indent="0" pn="section-3.2-6">A value of all 1s indicates that all leaf nodes are intended to receive
          this KV TIE and <bcp14>MUST NOT</bcp14> be used for any other reason.</t>
        <t indent="0" pn="section-3.2-7">Any other value <bcp14>MUST</bcp14> be derived from the following normative algorithm. Note that while the
           algorithm is shown using example code written in <xref target="Rust" format="default" sectionFormat="of" derivedContent="Rust"/>,
        this document does not mandate the use of any particular language for implementation.</t>
        <figure align="left" suppress-title="false" pn="figure-9">
          <name slugifiedName="name-key-target-standard-algorit">Key Target Standard Algorithm</name>
          <sourcecode markers="true" pn="section-3.2-8.1">
/// random seeds used in algorithms to increase entropy
pub const RANDOMSEEDS: [UnsignedSystemID; 3] = [
    67438371571u64,
    37087353685,
    88675895388,
];

/// given a system ID delivers the bits set by the according
/// Bloom Filter in the southbound key value target.
pub (crate) fn target2bits(target: UnsignedSystemID) -&gt;
KeyValueTargetType {
    (0 as usize .. 3)
        .map(|s| {
            let rot = (target ^ RANDOMSEEDS[s]).rotate_left(s as _);
            rot.to_ne_bytes().iter().fold(0,
                            |v: u8, nv| v.rotate_right(4) ^ *nv) % 64
        })
        .fold(0, |v, nv| v | (1 &lt;&lt; nv))
}
</sourcecode>
        </figure>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-3.2.1">
          <name slugifiedName="name-key-target-processing">Key Target Processing</name>
          <t indent="0" pn="section-3.2.1-1">Nodes that support the processing of Key Targets <bcp14>MUST</bcp14> only do so on
            KV TIEs in the southbound direction. Key Targets <bcp14>MUST NOT</bcp14> be present on KV TIEs
            in the northbound direction and are ignored and logged at least once.</t>
          <t indent="0" pn="section-3.2.1-2">
            Nodes that do not support the processing of Key Targets <bcp14>MUST</bcp14> continue to send KV TIEs
            to all nodes in the appropriate direction. Additionally, Key Targets <bcp14>MUST</bcp14> be preserved
            when KV TIEs are re-originated in the southbound direction.
          </t>
          <section numbered="true" removeInRFC="false" toc="exclude" pn="section-3.2.1.1">
            <name slugifiedName="name-purging-rollover">Purging/Rollover</name>
            <t indent="0" pn="section-3.2.1.1-1">There are several reasons a node may select a different KV TIE. For example, the KV TIE is
              considered newer due to the sequence number incrementing, a change in the original
              tie-breaking result between multiple KV TIEs, or a loss of northbound connectivity to the node
              that advertised the previously selected KV TIE.</t>
            <t indent="0" pn="section-3.2.1.1-2">Consider a case where Leaf-1, Leaf-2, and Leaf-3 are members of a group of nodes represented by
              Key Target KT1. If Leaf-2 is removed from that group and a newer instance of the KV TIE needs to be flooded,
              Leaf-2 will have to maintain the older KV TIE in the 	Link State Database (LSDB) until the lifetime expires. This could lead to
              suboptimal behavior in the fabric.
            </t>
            <t indent="0" pn="section-3.2.1.1-3">If the new KV TIE being flooded does not include the previous Key Target value, then implementations
              <bcp14>SHOULD</bcp14> flood the newer instance of the KV TIE with a very short lifetime to nodes that belonged to the previous Key
              Target but not the new Key Target.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="RIFT-KV-IANA" toc="include" numbered="true" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-4-1">Per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>, IANA has created the "RIFT Well-Known Key Sub-Types" registry in the "Routing in Fat Trees (RIFT)" registry group at <eref target="https://www.iana.org/assignments/rift" brackets="angle"/>.</t>
      <t indent="0" pn="section-4-2">IANA has updated the "RIFTCommonKVTypes" registry based on values defined in <xref target="generic_kv_structure" format="default" sectionFormat="of" derivedContent="Section 2"/> of this document, and this document has been added as a reference.</t>
      <t indent="0" pn="section-4-3">Experts reviewing requests for new values to either the "RIFTCommonKVTypes" registry or the "RIFT Well-Known Key Sub-Types" registry <bcp14>MUST</bcp14> consider the items in "Expert Review Guidance"
      <xref target="expert_review_guide" format="default" sectionFormat="of" derivedContent="Section 4.2"/>.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-rift-well-known-key-sub-typ">RIFT Well-Known Key Sub-Types</name>
        <t indent="0" pn="section-4.1-1">IANA has created the following registry:</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.1-2">
          <dt pn="section-4.1-2.1">Registry Name:</dt>
          <dd pn="section-4.1-2.2">RIFT Well-Known Key Sub-Types</dd>
          <dt pn="section-4.1-2.3">Registration Procedures:</dt>
          <dd pn="section-4.1-2.4">Expert Review</dd>
          <dt pn="section-4.1-2.5">Description:</dt>
          <dd pn="section-4.1-2.6">Well-Known Key Sub-Types registry for the RIFT protocol.</dd>
          <dt pn="section-4.1-2.7">Reference:</dt>
          <dd pn="section-4.1-2.8">RFC 9992</dd>
        </dl>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-4.1.1">
          <name slugifiedName="name-rift-well-known-key-sub-type">RIFT Well-Known Key Sub-Types Entries</name>
          <t indent="0" pn="section-4.1.1-1">IANA has registered the following values
              in the "RIFT Well-Known Key Sub-Types" registry.
          </t>
          <table align="left" pn="table-1">
            <name slugifiedName="name-rift-well-known-key-sub-types">RIFT Well-Known Key Sub-Types Entries</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Value</th>
                <th align="left" colspan="1" rowspan="1">Name</th>
                <th align="left" colspan="1" rowspan="1">Description</th>
                <th align="left" colspan="1" rowspan="1">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">0</td>
                <td align="left" colspan="1" rowspan="1">Illegal</td>
                <td align="left" colspan="1" rowspan="1">Not allowed.</td>
                <td align="left" colspan="1" rowspan="1">RFC 9992</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">1-126</td>
                <td colspan="3" align="left" rowspan="1">Unassigned</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">127</td>
                <td align="left" colspan="1" rowspan="1">Southbound Tie-Break Sub-Type</td>
                <td align="left" colspan="1" rowspan="1">Used for testing/verifying Southbound Keystore tie-breaking behavior.</td>
                <td align="left" colspan="1" rowspan="1">RFC 9992</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">128-255</td>
                <td colspan="3" align="left" rowspan="1">Unassigned</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="expert_review_guide" toc="include" numbered="true" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-expert-review-guidance">Expert Review Guidance</name>
        <t indent="0" pn="section-4.2-1">Experts reviewing requests for values from the "RIFTCommonKVTypes" registry or
          the "RIFT Well-Known Key Sub-Types" registry are responsible for the following:</t>
        <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-4.2-2">
          <li pn="section-4.2-2.1" derivedCounter="1.">
            <t indent="0" pn="section-4.2-2.1.1">Ensuring that the supporting documentation accompanying the request properly defines how
              Key Identifiers and/or Key Sub-Identifiers are used
              (e.g., as a boolean, an explicit value, an auto-derived value, etc.).</t>
          </li>
          <li pn="section-4.2-2.2" derivedCounter="2.">
            <t indent="0" pn="section-4.2-2.2.1">Ensuring that the supporting documentation provides normative Thrift model(s) (if applicable).</t>
          </li>
          <li pn="section-4.2-2.3" derivedCounter="3.">
            <t indent="0" pn="section-4.2-2.3.1">Ensuring that any work originating outside the IETF does not conflict
              with any work that is already published or in active pursuit of being
              published.</t>
          </li>
        </ol>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">This document introduces no new security concerns to RIFT or other
         specifications referenced in this document given that the KV TIEs
         are already extensively secured by the
         <xref target="RFC9692" format="default" sectionFormat="of" derivedContent="RFC9692">RIFT</xref> protocol specification itself.
      </t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-rift-auto-evpn" to="RIFT-AUTO-EVPN"/>
    <references pn="section-6">
      <name slugifiedName="name-references">References</name>
      <references pn="section-6.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="OUI" target="https://standards-support.ieee.org/hc/en-us/articles/4888705676564-Guidelines-for-Use-of-Extended-Unique-Identifier-EUI-Organizationally-Unique-Identifier-OUI-and-Company-ID-CID" quoteTitle="true" derivedAnchor="OUI">
          <front>
            <title>Guidelines for Use of Extended Unique Identifier (EUI), Organizationally Unique Identifier (OUI), and Company ID (CID)</title>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9692" target="https://www.rfc-editor.org/info/rfc9692" quoteTitle="true" derivedAnchor="RFC9692">
          <front>
            <title>RIFT: Routing in Fat Trees</title>
            <author fullname="T. Przygienda" initials="T." role="editor" surname="Przygienda"/>
            <author fullname="J. Head" initials="J." role="editor" surname="Head"/>
            <author fullname="A. Sharma" initials="A." surname="Sharma"/>
            <author fullname="P. Thubert" initials="P." surname="Thubert"/>
            <author fullname="B. Rijsman" initials="B." surname="Rijsman"/>
            <author fullname="D. Afanasiev" initials="D." surname="Afanasiev"/>
            <date month="April" year="2025"/>
            <abstract>
              <t indent="0">This document defines a specialized, dynamic routing protocol for Clos, fat tree, and variants thereof. These topologies were initially used within crossbar interconnects and consequently router and switch backplanes, but their characteristics make them ideal for constructing IP fabrics as well. The protocol specified by this document is optimized towards the minimization of control plane state to support very large substrates as well as the minimization of configuration and operational complexity to allow for a simplified deployment of said topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9692"/>
          <seriesInfo name="DOI" value="10.17487/RFC9692"/>
        </reference>
        <reference anchor="Rust" target="https://doc.rust-lang.org/reference/" quoteTitle="true" derivedAnchor="Rust">
          <front>
            <title>The Rust Reference</title>
            <author>
              <organization showOnFrontPage="true">Rust Foundation</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="THRIFT" target="https://github.com/apache/thrift/tree/0.15.0/doc" quoteTitle="true" derivedAnchor="THRIFT">
          <front>
            <title>Thrift Language Implementation and Documentation</title>
            <author>
              <organization showOnFrontPage="true">Apache Software Foundation</organization>
            </author>
            <date/>
          </front>
          <refcontent>commit 66d8976</refcontent>
        </reference>
      </references>
      <references pn="section-6.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-rift-auto-evpn" target="https://datatracker.ietf.org/doc/html/draft-ietf-rift-auto-evpn-06" quoteTitle="true" derivedAnchor="RIFT-AUTO-EVPN">
          <front>
            <title>RIFT Auto-EVPN</title>
            <author fullname="Jordan Head" initials="J." surname="Head">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <author fullname="Tony Przygienda" initials="T." surname="Przygienda">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <author fullname="Wen Lin" initials="W." surname="Lin">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t indent="0">This document specifies procedures that allow an EVPN overlay to be fully and automatically provisioned when using RIFT as underlay by leveraging RIFT's no-touch ZTP architecture.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rift-auto-evpn-06"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">Thanks to <contact fullname="Italo Busi"/> for his very thoughtful review that yielded an improved spec.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author role="editor" fullname="Jordan Head" initials="J." surname="Head">
        <organization showOnFrontPage="true">HPE</organization>
        <address>
          <postal>
            <street>1701 East Mossy Oaks Road</street>
            <city>Spring</city>
            <region>TX</region>
            <code>77389</code>
            <country>United States of America</country>
          </postal>
          <email>jordan.head@hpe.com</email>
        </address>
      </author>
      <author fullname="Tony Przygienda" initials="T." surname="Przygienda">
        <organization showOnFrontPage="true">HPE</organization>
        <address>
          <postal>
            <street>1701 East Mossy Oaks Road</street>
            <city>Spring</city>
            <region>TX</region>
            <code>77389</code>
            <country>United States of America</country>
          </postal>
          <email>antoni.przygienda@hpe.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
