<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="no"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-head-rift-kv-registry-00" ipr="trust200902" obsoletes="" submissionType="IETF" updates="" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.45.3 -->
  <front>
    <title abbrev="draft-head-rift-kv-registry-00">
            RIFT Keys Structure and Well-Known Registry in Key Value TIE 
    </title>
    <seriesInfo name="Internet-Draft" value="draft-head-rift-kv-registry-00"/>
    <author fullname="Jordan Head" initials="J." surname="Head">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1137 Innovation Way
          </street>
          <city>Sunnyvale</city>
          <region>CA
          </region>
          <code/>
          <country>USA
          </country>
        </postal>
        <phone/>
        <email>jhead@juniper.net
        </email>
        <uri/>
      </address>
    </author>
    <author fullname="Tony Przygienda" initials="A." surname="Przygienda">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1137 Innovation Way
          </street>
          <city>Sunnyvale</city>
          <region>CA
          </region>
          <code/>
          <country>USA
          </country>
        </postal>
        <phone/>
        <email>prz@juniper.net
        </email>
        <uri/>
      </address>
    </author>
    
    <date year="2021"/>
    <abstract>
      <t>Routing in Fat-Trees <xref target="RIFT" format="default">RIFT</xref> 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.  This document defines the
            various Key Types (i.e. Well-Known, OUI, and Experimental) and a 
            method to structure corresponding values.
      </t>
    </abstract>
    <note>
      <name>Requirements Language</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
                "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
                document are to be interpreted as described in <xref format="default" target="RFC2119">RFC 2119</xref>.
      </t>
    </note>
  </front>
  <middle>
    <section toc="default" numbered="true">
      <name>Description</name>
      <t>Routing in Fat-Trees (<xref target="RIFT" format="default">RIFT</xref>) 
        allows for key/value pairs to be advertised within Key-Value Topology 
        Information Elements (KV TIEs).  There are no restrictions
        placed on the type of data that is contained in KV TIEs nor what the
        data is used for.  It could contain a simple string or even Thrift encoded 
        data. However, the KV elements SHOULD NOT be used to carry topology information
        used by RIFT itself to perform distributed computations.
      </t>
      <t>This document defines a Key Type Registry to maintain
        Well-Known and vendor specific Key Types in order to simplify 
        interoperability between implementations and eliminate the risk of 
        collision for future implementations.  An Experimental Key Type is additionally
        defined.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Key-Value Pair Structure</name>
      <t><xref target="f1" format="default"/> illustrates the generic Key-Value Pair structure.</t>
      <figure anchor="f1">
        <name>Generic Key-Value Structure</name>
        <artwork align="left" alt="" name="" type=""><![CDATA[

 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>
      <t>where:</t>
      <ul empty="true" spacing="normal">
        <li>
          <dl newline="true" spacing="normal">
            <dt>Key-Type:</dt>
            <dd>A 1-byte value that identifies the Key Type.  It MUST be a 
              reserved value from the Key Value Type Registry that is defined 
              later in this document.</dd>
            <dt>Key Identifier:</dt>
            <dd>A 3-byte value that identifies the specific Key and describes 
              the structure of the contained values.</dd>
            <dt>Values:</dt>
            <dd>A variable length value that contains data associated with the 
              Key.  It SHOULD contain 1 or more elements.  Whether the collection
              of elements allows duplicates and/or is ordered is governed by
              the particular key identifier. </dd>
          </dl>
        </li>
      </ul>

        <section numbered="true" toc="default">
        <name>Well-Known Key Type</name>
        <t>This section reserves a value in the Key Type Registry to indicate 
        Well-Known Key Types that all implementations SHOULD support.</t>
        <t>As shown in <xref target="f2" format="default"/>, the Key-Type will be used to 
        identify that the Key Type is Well-Known.  The Key Identifier will be 
        used to identify the specific Key and describe the structure of 
        the contained values.
        </t>
        <figure anchor="f2">
          <name>Well-Known Key Type</name>
          <artwork align="left" alt="" name="" type=""><![CDATA[

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      TBD2     |        Well-Known Key Identifier              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Well-Known Values (variable)                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    ]]></artwork>
        </figure>
      </section>
      <section numbered="true" toc="default">
        <name>OUI Key Type</name>
        <t>This section reserves a value in the Key Type Registry to indicate an
        OUI (vendor-specific) Key Type that any implementation MAY support.</t>
        <t>As shown in <xref target="f3" format="default"/>, the Key-Type will be used to 
        identify the Key Type as OUI.  The Key Identifier MUST use an
        organization's reserved OUI space to indicate the Key and value structure.
        </t>
        <figure anchor="f3">
          <name>OUI Key Type</name>
          <artwork align="left" alt="" name="" type=""><![CDATA[

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      TBD3     |       Organizationally Unique Identifier      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Vendor Specific Values (variable)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    ]]></artwork>
        </figure>
      </section>
      <section numbered="true" toc="default">
        <name>Experimental Key Type</name>
        <t>This section reserves a value in the Key Type Registry to indicate an
        Experimental Key Type.</t>
        <t>As shown in <xref target="f4" format="default"/>, the Key-Type will be used to 
        identify the Key Type as Experimental.  The Key Identifier will be
        used to identify the specific experimental Key and describe the 
        structure of the contained values.
        </t>
        <figure anchor="f4">
          <name>Experimental Key Type</name>
          <artwork align="left" alt="" name="" type=""><![CDATA[

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      TBD1     |          Experimental Key Identifier          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Experimental Values (variable)                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    ]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="IANA" toc="default" numbered="true">
      <name>IANA Considerations</name>
      <t>This section requests that IANA help govern Key Types via the usual 
        IANA registry procedures as per <xref target="RFC8126" format="default"/>.
      </t>
      <t>All values not suggested are available for assignment.  The 
        allocation of new values MUST be done via "Expert Review" procedures.
      </t>
      <section numbered="true" toc="default">
        <name>Key Type Registry</name>
        <t>This section defines the Key Type Registry that is used to identify 
            a specific Key Type.  It also suggests values for Experimental, Well-Known, 
            and OUI Key Types.
        </t>
        <t>The range of valid values is 1 - 255.</t>
        <t>0 is an illegal value and MUST NOT be allocated to or used by any 
            implementation. It MUST be ignored on reception.</t>
        <section numbered="true" toc="default">
          <name>Requested Entries</name>
          <table align="left">
            <thead>
              <tr>
                <th align="left">Key Type</th>
                <th align="right">Value</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Experimental</td>
                <td align="right">TBD1</td>
                <td align="left">Indicates that the Key is Experimental.</td>
              </tr>
              <tr>
                <td align="left">Well-Known</td>
                <td align="right">TBD2</td>
                <td align="left">Indicates that the Key is Well-Known.</td>
              </tr>
              <tr>
                <td align="left">OUI</td>
                <td align="right">TBD3</td>
                <td align="left">Indicates that the Key is OUI.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>Experimental Key Type</name>
        <t>This value indicates that a specific key is Experimental.</t>
        <t>The range of valid values is 1 - 16777215 (2^24-1).</t>
        <t>0 is an illegal value and MUST NOT be allocated to or used by any 
            implementation. It MUST be ignored on reception.</t>
        <section numbered="true" toc="default">
          <name>Requested Entries</name>
          <table align="left">
            <thead>
              <tr>
                <th align="left">Experimental Key</th>
                <th align="right">Identifier</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Illegal</td>
                <td align="right">0</td>
                <td align="left">Not allowed.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>Well-Known Key Type</name>
        <t>This value indicates that a specific key is Well-Known.</t>
        <t>The range of valid values is 1 - 16777215 (2^24-1).</t>
        <t>0 is an illegal value and MUST not be allocated to or used by any 
            implementation. It MUST be ignored on reception.</t>
        <section numbered="true" toc="default">
          <name>Requested Entries</name>
          <table align="left">
            <thead>
              <tr>
                <th align="left">Well-Known Key</th>
                <th align="right">Identifier</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Illegal</td>
                <td align="right">0</td>
                <td align="left">Not allowed.</td>
              </tr>
              <tr>
                <td align="left">MAC/IP Binding</td>
                <td align="right">TBD1</td>
                <td align="left">To be defined.</td>
              </tr>
              <tr>
                <td align="left">FAM Security Roll-Over Key</td>
                <td align="right">TBD2</td>
                <td align="left">To be defined.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>OUI Key Type</name>
        <t>This value indicates a specific OUI Key using an organization's 
            reserved OUI space.</t>
        <t>The range of valid values is 1 - 16777215 (2^24-1).</t>
        <t>0 is an illegal value and MUST NOT be allocated to or used by any 
            implementation. It MUST be ignored on reception.</t>
        <section numbered="true" toc="default">
          <name>Requested Entries</name>
          <table align="left">
            <thead>
              <tr>
                <th align="left">OUI Key</th>
                <th align="right">Identifier</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Illegal</td>
                <td align="right">0</td>
                <td align="left">Not allowed.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document introduces no new security concerns to RIFT or other
                specifications referenced in this document given that the TIEs 
                that carry KV pairs are already extensively secured by the
                <xref target="RIFT" format="default">RIFT</xref> specification itself. 
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>To be provided.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t>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>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author initials="M." surname="Cotton" fullname="M. Cotton">
            <organization/>
          </author>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization/>
          </author>
          <author initials="T." surname="Narten" fullname="T. Narten">
            <organization/>
          </author>
          <date year="2017" month="June"/>
        </front>
      </reference>
      <reference anchor="RIFT">
        <front>
          <title>RIFT: Routing in Fat Trees</title>
            <seriesInfo name="Work in Progress," value="draft-ietf-rift-rift-12"/>
          <author initials="T." surname="Przygienda" fullname="Tony Przygienda">
            <organization/>
          </author>
          <author initials="A." surname="Sharma" fullname="Alankar Sharma">
            <organization/>
          </author>
          <author initials="P." surname="Thubert" fullname="Pascal Thubert">
            <organization/>
          </author>
          <author initials="B." surname="Rijsman" fullname="Bruno Rijsman">
            <organization/>
          </author>
          <author initials="D." surname="Afanasiev" fullname="Dmitry Afanasiev">
            <organization/>
          </author>
          <date month="May" year="2020"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
