<?xml version='1.0' encoding='utf-8'?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->

<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="std"
      docName="draft-zdx-rift-addsblock-extensions-00"
      ipr="trust200902"
      obsoletes=""
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">
  <!-- xml2rfc v2v3 conversion 2.38.1 -->
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

   <title abbrev="Addsblock KV extensions">RIFT KV extensions for address block</title>
    <seriesInfo name="Internet-Draft" value="draft-zdx-rift-addsblock-extensions-00"/>
    <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Zheng Zhang" initials="Z" surname="Zhang">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city></city>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>zhang.zheng@zte.com.cn</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
	<author fullname="Wei Duan" initials="W" surname="Duan">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city></city>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>duan.wei1@zte.com.cn</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
	<author fullname="Benchong Xu" initials="B" surname="Xu">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city></city>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>xu.benchong@zte.com.cn</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>

    <date year="2026"/>
    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
     in the current day and month for you. If the year is not the current one, it is 
     necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
     purpose of calculating the expiry date).  With drafts it is normally sufficient to 
     specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>Routing</area>
    <workgroup>RIFT</workgroup>
    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
     If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>RIFT KV</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
      <t>This document describes a method for extending the address blocks carried within 
	  Key/Value extensions in data centers where RIFT (Routing in Fat Trees) is deployed.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>RIFT <xref target="RFC9692"/> is a new dynamic routing protocol designed for large-scale data centers. 
	  It is specifically tailored to the characteristics of Clos/Fat Tree topologies and simplifies deployment 
	  in large-scale data center environments by distinguishing between north-south protocol signaling 
	  and processing. 
	  Furthermore, its Zero Touch Provisioning (ZTP) capability enables the automated setup of a network 
	  with minimal human intervention.</t>
	  
	  <t>When server, such as those housing GPUs or CPUs, are connected to a Clos/Fat Tree topology, 
	  each unit requires an IP address. During the address allocation process, the Clos/Fat Tree topology 
	  should be taken into account to ensure that the IP addresses assigned to servers connected to 
	  the same leaf switch are, as much as possible, contiguous and aggregatable. 
	  This allows the leaf switch to advertise an aggregated route rather than individual, 
	  specific host routes. 
	  Furthermore, this approach helps prevent "black hole" routing issues, reduces the total number 
	  of routes within the network, and improves packet forwarding efficiency.</t>
	  
	  <t>This document describes a method for extending RIFT Key/Value <xref target="RFC9992"/>, 
	  in which Spine switches in a Clos/Fat Tree topology allocate contiguous network address blocks 
	  and distribute them to Leaf switches via a new Key/Value (KV) type; these network address blocks 
	  are then used to configure the servers connected to the Leaf switches.</t>

      <section numbered="true" toc="default">
        <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 target="RFC2119" format="default"/>.</t>
      </section>
    </section>
	
    <section numbered="true" toc="default">
      <name>Format</name>
	  <t>(The specific format for the KV extension is still under discussion; 
	  the following is merely a preliminary definition.)</t>
	  
	  <t>Using the "Experimental Key Type 2" defined in Section 2.2 of <xref target="RFC9992"/>, 
	  introduce new Key Sub-Types, Key Sub-Identifiers, and similar elements to represent 
	  the allocated address blocks.</t>
	  
      <figure anchor="Fig1">
        <artwork align="left" name="Figure 0" type="" alt=""><![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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |       1       |  Key Sub-Type |      Key Sub-Identifier       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Experimental Values                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
      </figure>
	  
	  <ul spacing="normal">
        <li>Key Sub-Type: TBD.</li>
        <li>Key Sub-Identifier: TBD.</li>
		<li>Experimental Values: IP address block information, including prefix and mask.</li>
      </ul>
    </section>
    
    <section anchor="steps" numbered="true" toc="default">
      <name>Specification</name>
	  
      <t>Since servers typically contain multiple GPUs or similar devices, they generally require 
	  multiple addresses.
	  The northbound Spine switches allocate address blocks to Leaf devices; the size of each block 
	  is determined by the number of addresses required by the servers connected to that Leaf.</t>

      <figure anchor="Fig2">
        <artwork align="left" name="Figure 0" type="" alt=""><![CDATA[
                     +--------+    +--------+
                     | Spine1 |    | Spine2 |
                     +--+--+--+    +-+---+--+
                        |  |         |   |
                        |  +---------|-+ |
                        |            | | |
                        |  +---------+ | |
                        |  |           | |
                     +--+--+--+    +---+-+--+
                     | Leaf1  |    | Leaf2  |
                     +--------+    +--------+
           ]]></artwork>
      </figure>
	  
	  <t>In a two-tier network, for example figure 2, address blocks can be allocated to Leaf switches by a Spine switch. 
	  One Spine switch, for instance, Spine1, can be designated as the address allocation device; 
	  once it determines the address blocks to be assigned to Leaf1 and Leaf2, 
	  it then advertises these blocks to the respective Leaf switches using the KV extension. 
	  The specific method by which a Spine switch determines these address blocks, 
	  whether through manual configuration or other means, is outside the scope of this document.</t>
	  
      <figure anchor="Fig3">
        <artwork align="left" name="Figure 0" type="" alt=""><![CDATA[
                     +--------+    +--------+
                     |  ToF1  |    |  ToF2  |
                     +--+--+--+    +-+---+--+
                        |  |         |   |
                        |  +---------|-+ |
                        |            | | |
                        |  +---------+ | |
                        |  |           | |
                     +--+--+--+    +---+-+--+
                     | Spine1 |    | Spine2 |
                     +--+--+--+    +-+---+--+
                        |  |         |   |
                        |  +---------|-+ |
                        |            | | |
                        |  +---------+ | |
                        |  |           | |
                     +--+--+--+    +---+-+--+
                     | Leaf1  |    | Leaf2  |
                     +--------+    +--------+
           ]]></artwork>
      </figure>	  
      
      <t>In networks with three or more layers, for example figure 3, the address blocks to be allocated to each Leaf switch 
	  can be determined by the northernmost Spine switch or the northernmost ToF (Top-of-Fabric) switch. 
	  For instance, once ToF1 determines the address blocks to be assigned to Leaf1 and Leaf2, 
	  this information can be propagated via the KV extension, passing through the Spine layer 
	  to reach Leaf1 and Leaf2, or, given that the ToF has visibility into the entire southward topology, 
	  ToF1 can send the address blocks directly to Leaf1 and Leaf2.</t>
      
      <t>When a Leaf switch receives an address request packet from a server, it can select an unassigned 
	  address from its address block and provide it to the server. 
	  The Leaf device may act as a DHCP server; the server only needs to send its address request 
	  to the connected Leaf, which can then respond to the request by assigning an address.</t>
      
      <t>Since the address block on each Leaf consists of a contiguous range of addresses, 
	  a Leaf can advertise an aggregated route rather than individual, 
	  specific server routes (provided that there is no route overlap with other Leafs). 
	  This approach reduces the total number of routes within the network; 
	  in large-scale data centers, it decreases the number of routes that forwarding devices must maintain, 
	  thereby improving forwarding efficiency.</t>
	  
	  <t>When the address block allocation policy within the network changes, requiring adjustments 
	  to the addresses of servers that have already been assigned addresses, the Spine or ToF switches 
	  generate new address blocks and transmit them to the Leaf switches. 
	  The Leaf switches then adjust the addresses assigned to the connected servers, 
	  thereby enabling automatic address updates.</t>

    </section>
	
    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a new code points from the "RIFT Experimental Key Sub-Types" registry.</t>
	    <table anchor="table_1" align="center">
          <name>TABLE_1	</name>
          <thead>
            <tr>
              <th align="center">Type</th>
              <th align="center">Description</th>
			  <th align="center">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">TBD</td>
              <td align="center">IP Address auto distribution</td>
			  <td align="center">This Document</td>
            </tr>
          </tbody>
        </table>
    </section>
	
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The security considerations in <xref target="RFC9692"/> and <xref target="RFC9992"/> also apply to this document.</t>
    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>

   <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <?rfc include="reference.RFC.2119.xml"?>    
        <?rfc include="reference.RFC.9692.xml"?>
        <?rfc include="reference.RFC.9992.xml"?>
      </references>
      <references title="Informative References">

    </references>
    </references>
 </back>
</rfc>
