<?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-zhang-idr-portid-ec-03" 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="Abbreviated Title">BGP PORT EC for AIDC</title>
    <seriesInfo name="Internet-Draft" value="draft-zhang-idr-portid-ec-03"/>
    <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Junye Zhang" initials="J" surname="Zhang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>zhangjunye@chinamobile.com</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
	<author fullname="Rui Zhuang" initials="R" surname="Zhuang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>zhuangruiyjy@chinamobile.com</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
   
   <author fullname="Zheng Zhang" initials="Z" role="editor" surname="Zhang">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>zhang.zheng@zte.com.cn</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
	<author fullname="Dongyu Yuan" initials="D" surname="Yuan">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>yuan.dongyu@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>IDR</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>BGP PORT AIDC</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 introduces a new BGP Route Port ID Extended Community (PORT EC) for advertising the association between destination routes, 
        switch addresses, and port identifiers. It describes the advertisement of Aggregated PORT EC. 
        It also illustrate the PORT EC advertisement procedures in AI data center networks.</t>
      <!-- <t>This document introduces new BGP extended community (EC) to carry port IDs when advertising routes on switches. </t> -->
   <!-- preparing for negotiation before sending large-scale traffic.  
        
        
        
        information
        It also describes the advertisement of server-facing Leaf ports within a Point of Delivery (PoD) 
        and the aggregation of Core-facing port information for inter-PoD routes. Single-PoD and multi-PoD deployment examples illustrate 
        how this information can be distributed in AI data center networks.</t> -->
      </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>With the rapid development of Artificial Intelligence (AI) and Machine Learning (ML), AI workloads often generate large amounts of traffic in data center networks. If the available link bandwidth is insufficient, congestion may lead to packet loss or excessive latency, significantly affecting the completion time and computational efficiency of AI tasks.</t>
      <t>Within a Point of Delivery (PoD), Leaf switches connect to NICs/GPUs, while Spine switches provide connectivity between Leaf switches. Although multiple equal-cost paths may be available within the network, traffic from multiple sources can converge on the same server-facing port of a destination Leaf switch, causing last-hop congestion. Identifying this potential congestion point requires the address of the destination Leaf switch and the corresponding server-facing port ID.</t>
      <t>In multi-PoD deployments, Super-Spine (SSpine) switches connect a PoD to Core switches, which provide connectivity to other PoDs. Traffic destined for another PoD may traverse different SSpine switches and their Core-facing ports. Therefore, a Leaf switch may need to learn the addresses of the relevant SSpine switches and their associated port IDs. In deployments without an SSpine layer, the Spine switches directly connected to the Core serve the same purpose. A destination route may be associated with multiple ports on the same switch or with ports on different switches.</t>
      <t>The switch addresses and port IDs can be used to identify the corresponding server-facing or Core-facing links for bandwidth negotiation before sending large amounts of traffic. For example, a sender or its connected Leaf can use this information to identify the target switch and the port for a bandwidth request. Such negotiation can help coordinate traffic transmission according to available bandwidth, thereby reducing the risk of congestion, packet loss, and excessive latency.</t>
      <t>BGP is commonly used to distribute destination reachability information in data centers supporting AI and machine learning workloads <xref target="RFC7938"/>. However, a destination route does not by itself identify the server-facing port on the destination Leaf or the relevant Core-facing ports on SSpine switches. Advertising switch addresses and port IDs along with destination routes allows receiving devices to learn the association between them.</t>
      <t>This document introduces the BGP Route Port ID Extended Community (PORT EC) and Aggregated PORT EC for advertising the association between destination routes, switch addresses and port IDs. It describes the advertisement of server-facing Leaf ports within a Point of Delivery (PoD) and the aggregation of Core-facing port information for inter-PoD routes. </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 Route Port ID Extended Community is abbreviated as PORT EC. The Aggregated Route Port ID Extended Community is abbreviated as Aggregated PORT EC (AGG PORT EC).</t>
	
	<section anchor="portec_format" numbered="true" toc="default">
      <name>PORT EC format</name>

      <section anchor="v4_portec_format" numbered="true" toc="default">
      <name>IPv4 PORT EC format</name>
	  
	<t>Transitive IPv4-Address-Specific Extended Community defined in <xref target="RFC7153"/> 
	and <xref target="I-D.ietf-idr-rfc4360-bis"/> 
	with new sub-type "Route Port ID" is used for carry the IPv4 address of a switch 
	and the related port ID to the destination. </t>
	
	
	  <figure anchor="Fig1">
        <name>IPv4 Route Port ID Extended Community Format</name>
        <artwork align="left" name="Figure 1" 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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      0x01     |   Sub-Type    |    Global Administrator       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Global Administrator (cont.)  |    Local Administrator        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
      </figure>
	  
	  <t>Figure 1 shows the format of IPv4-Address-Specific Extended Community, where:</t>
	  <ul spacing="normal">
        <li>Sub-Type: TBD. This indicates that this is the Route Port ID extended community;</li>
        <li>Global Administrator: 4 octets, set to the IPv4 address of the switch that advertises the route. 
		This address can be the loopback address for establishing the BGP connection;</li>
		<li>Local Administrator: 2 octets, set as the port ID of the switch leading to this route, 
		with a value range of 1 to 65535.</li>
      </ul>
	  
		  </section>

    <section anchor="v6_portec_format" numbered="true" toc="default">
      <name>IPv6 PORT EC format</name>

      <t>Transitive IPv6-Address-Specific Extended Community defined in <xref target="RFC5701"/> 
	with new sub-type "Route Port ID" is used for carry the IPv6 address of the switch 
	and the related port ID to the destination.</t>
  
      <figure anchor="Fig2">
        <name>IPv6 Route Port ID Extended Community Format</name>
        <artwork align="left" name="Figure 2" 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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     0x00      |    Sub-Type   |    Global Administrator       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Global Administrator (cont.)                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Global Administrator (cont.)                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Global Administrator (cont.)                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Global Administrator (cont.)  |    Local Administrator        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
      </figure>
	  
	  <t>Figure 2 shows the format of IPv6-Address-Specific Extended Community, where:</t>
	  <ul spacing="normal">
        <li>Sub-Type: TBD. This indicates that this is the Route Port ID extended community;</li>
        <li>Global Administrator: 16 octets, set to the IPv6 address of the switch that advertises the route. 
		This address can be the loopback address for establishing the BGP connection;</li>
		<li>Local Administrator: 2 octets, set as the port ID of the switch leading to this route, 
		with a value range of 1 to 65535.</li>
      </ul>
	  
	  </section>
    </section>
	  
	  <section numbered="true" toc="default">
      <name>AGG PORT EC format</name>
	  <t>
      <!-- Aggregated PORT EC information is represented by multiple instances of the PORT EC defined above, attached to the same advertised route. -->
      The advertisement of Aggregated PORT EC attributes primarily encompasses advertisement of different ports on the same switch as well as advertisement of different ports across different switches.
       The aggregation procedure and scenario are described in <xref target="sec_agg_adv"/>.</t>
      <t>For multiple ports on the same switch, the Global Administrator values are identical and the Local Administrator values identify different ports. 
        For ports on different switches, each PORT EC carries the corresponding switch address and the port ID. </t>
      </section>
	  

    </section>
    <section numbered="true" toc="default">
      <name>Specification</name>
      <t>The following single-PoD and multi-PoD examples explain the PORT EC advertisement procedures in data center networks.</t>
      <section numbered="true" toc="default" anchor="sec_within_pod">
      <name>PORT EC advertisement</name>
	  
	  <t><xref target="fig_intra_pod"/> shows an example single-PoD topology. Leaf switches connect to NICs and distribute destination routes through Spine switches. Labels N1, N2, and so on denote NICs and only a subset is shown.</t>
      <figure anchor="fig_intra_pod">
            <name>Single-PoD deployment topology</name><artwork align="left" type="ascii-art" alt=""><![CDATA[
           +----------+                        +----------+
           |  Spine1  |                        |  Spine2  |
           +--+-+-+-+-+                        +--+-+-+-+-+
              | | | |                             | | | |
            +-------------------------------------+ | | |
            | | | | |    +--------------------------+ | |
            | | | | |    |                   +--------+ |
            | | | | |    |                   |          |
            | | | | +--------------------------------------+
            | | | +-----------------------+  |          |  |
          +---+ +------+ |                |  |          |  |
          | |          | |                |  |          |  |
     +----+-+--+    +--+-+----+        +--+--+---+    +-+--+----+
     |  Leaf1  |    |  Leaf2  |        |  Leaf3  |    |  Leaf4  |
     +-+-----+-+    +-+-----+-+        +-+-----+-+    +-+-----+-+
       |     |        |     |            |     |        |     |     
       | ..  |        | ... |            | ... |        | ... |
       |     |        |     |            |     |        |     |
     +-+-----+-+    +-+-----+-+        +-+-----+-+    +-+-----+-+
     |N1|N2|...|    |N9|N10|..|        |N17|N18|.|    |N25|N26|.|
     +---------+    +---------+        +---------+    +---------+
       Server1        Server2            Server3        Server4
           ]]></artwork>
          </figure>
	  
        <t>Before sending traffic, each Leaf switch, in addition to announcing its own loopback route, 
          also announces routes to connected GPUs/NICs,
   carrying the extended community attributes defined in this document.
   The Global Administrator in the PORT EC is set to the 
   loopback address of the Leaf switch, and the Local Administrator in the PORT EC is set
   to the port ID connected to the GPU/NIC.  Routes are forwarded
   through Spine switches, allowing each Leaf to learn routes to other
   GPUs within its PoD, including connected Leaf switches and their
   ports.</t>

   <t>Upon receiving the route carrying the PORT EC, the leaf switch checks
   if the address carried in the PORT EC is reachable.  If unreachable,
   the extended community is ignored.  If reachable, the address and
   port information are stored locally or sent to the server.  This
   storing or sending process is outside the scope of this draft.</t>
        
      <t>For example, when GPU1 wants to send traffic to GPU20, it needs to ensure that the
   port between Leaf3 and NIC20 has sufficient bandwidth to receive the traffic.
   Leaf3 advertises the route to GPU20/NIC20 with a PORT EC containing the address of Leaf3 and the ID of its NIC20-facing port. After propagation through a Spine, Leaf1 learns this association for the destination route. </t>
      </section>
	  
	  
	  <section anchor="sec_agg_adv" numbered="true" toc="default">
      <name>AGG PORT EC advertisement</name>

      <t><xref target="fig_inter_pod"/> shows an example multi-PoD topology. 
        Core switches are used to interconnect SSpine switches of different PoDs.
        SSpine switches connect a PoD to Core switches, which provide connectivity to other PoDs. Only some links are shown in the diagram. In some deployment scenarios, the SSpine layer device may be omitted, and Spine switches directly interconnect with Core switches.
 </t>
      <figure anchor="fig_inter_pod">
            <name>Multi-PoD deployment topology</name><artwork align="left" type="ascii-art" alt=""><![CDATA[
   +--------------------------------------------------------+
   |                                            ...  PodM   |
   |                                                        |
   |   +----------+  +----------+         +----------+      |
   |   |  Core1   |  |  Core2   |  ...    |  CoreZ   |      |
   |   +--+-------+  ++---------+         +----------+      |
   |      |           |       ......                        |
   |      |      +----+                                     |
   |      |      |                                          |
   |   +--+------++  +----------+         +----------+      |
   +-- |  SSpine1 |  |  SSpine2 |   ...   | SSpineN  | -----+
       +----------+  +----------+         +----------+

           +----------+                     +----------+
           |  Spine1  |                     |  Spine2  |
           +----------+                     +----------+

     +----+-+--+    +--+-+----+        +--+--+---+    +-+--+----+
     |  Leaf1  |    |  Leaf2  |        |  Leaf3  |    |  Leaf4  |
     +-+-----+-+    +-+-----+-+        +-+-----+-+    +-+-----+-+
       |
     +-+-----+-+    +-+-----+-+        +-+-----+-+    +-+-----+-+
     |N1|N2|...|    |N9|N10|..|        |N17|N18|.|    |N25|N26|.|
     +---------+    +---------+        +---------+    +---------+
	   Server1        Server2            Server3        Server4
           ]]></artwork>
          </figure>

      
      <t>There may be multiple ECMP paths from Spine switches to SSpine switches. 
	  When the same advertised route may have multiple different PORT EC attributes,
      only one route will be selected as the optimal route according to the EBGP forwarding rules within the data center,
      and then forwarded to other nodes.
      This does not make good use of resources. 
	  For example, Spine1 selects the optimal route received from SSpine switches to other PoDs. 
	  Not only SSpine1 can be used as the next hop, but other SSpine switch can also be used as ECMP next hops. 
	  However, after Spine switch select the best route with the same prefix, 
	  they may only advertise one corresponding PORT EC attribute to Leaf swtiches. 
	  In this case, Leaf swithes can only negotiate with the link between Spine1 and SSpine1, 
	  and cannot use the ECMP link between Spine1 and other SSpine switches, which will result in a waste of resources.</t>
	  
	  <t>To avoid attribute loss after BGP route selection, 
	  one approach is to enable the ADD-PATH function defined in <xref target= "RFC7911"/> in the PoD. 
	  However, this function may cause a route advertisement storm, 
	  severely impacting the efficiency of route advertisement and affecting normal forwarding traffic. 
	  Another approach is to use the AGG PORT EC attributes defined in this document. 
	  This helps establish more comprehensive ECMP entries.</t>
      

<!-- 
    <t>According to BGP route advertisements, routes from other PoDs, will be advertised to 
	  the SSpine device through multiple Core devices. 
	  The SSpine device will then advertise these routes to the Spine device, which in turn advertises 
	  them to the Leaf device. 
	  During this advertisement process, the SSpine device, acting as the interface between its PoD 
	  and the Core layer devices, will include its own address and ports when advertising routes 
	  obtained from other PoDs.</t>
	  
	  <t>When Spine advertises routes received from SSpine to Leaf devices, it needs to further aggregate 
	  different AGG PORT ECs for the same route. 
	  To avoid incasting between the SSpine device and the Core device,  
	  before Leaf1 forwards traffic, it negotiates authorization with the SSpine device. 
	  Leaf1 has multiple selectable SSpine devices, each with multiple ports connected to the Core. 
	  Leaf1 can send authorization requests based on the received SSpine device and port information.</t>

	 <t>For example,
	  Spine1 might receive routes from SSpine1 to SSpine8 advertising GPU5000. 
	  Spine1 will then use AGG PORT ECs to further aggregate these advertising switches and ports 
	  before advertising them to Leaf switches. 
	  In this way, the GPU5000 routes learned by Leaf switches will include multiple switches from 
	  SSpine to SSpine8, and each SSpine will also have a set of ports.</t>
       -->
      
      
          <t>When a Leaf switch sends traffic to another PoD, traffic from multiple local sources may converge on the Core-facing ports of the SSpine switches. 
            A PoD may have multiple SSpine switches, each connected to multiple Core switches. 
            To identify these potential congestion points for bandwidth negotiation before traffic transmission, the Leaf needs to learn the relevant SSpine addresses and their Core-facing port IDs. 
            AGG PORT EC provides the aggregated switch and port information associated with the destination route.</t>
      <t>An SSpine can learn the same destination route from other PoDs through multiple Core-facing ports. 
        When advertising that route toward the local Spine layer, the SSpine uses AGG PORT EC to advertise its address and the corresponding Core-facing port information. 
        This allows the receiving Spine to learn the ports on that SSpine associated with the destination route.</t>
      <t>When a Spine advertises the destination route to local Leaf switches, 
        it further aggregates the AGG PORT EC information associated with eligible paths to that destination through the SSpine layer. 
        The resulting AGG PORT EC retains the relevant SSpine addresses and their associated Core-facing port information.</t>
      <t>For example, SSpine1 learns the route to GPU5000 through Core1 and Core2. 
        When advertising the route to Spine1, SSpine1 uses AGG PORT EC to carry its address and the port information for its links to Core1 and Core2. 
        If Spine1 also learns eligible paths through SSpine2 to SSpine8, it further aggregates the AGG PORT EC information received from these SSpines before advertising the route to Leaf1. 
        Leaf1 can then learn the relevant SSpine switches and their Core-facing ports associated with the GPU5000 route.</t>
     
    </section>
	  
    </section>
    
    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate two new code points from 
	  the "Transitive IPv4-Address-Specific Extended Community Sub-Types" 
	  and the "Transitive IPv6-Address-Specific Extended Community 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">Route Port ID</td>
			  <td align="center">This Document</td>
            </tr>
          </tbody>
        </table>

    </section>
	
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This extension to BGP has similar security implications as BGP Extended Communities <xref target="RFC7153"/>,
	  <xref target="RFC5701"/> and <xref target="I-D.ietf-idr-rfc4360-bis"/>.</t>
    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>

   <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
		<xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
		<xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5701.xml"/>
		<xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7153.xml"/>
		<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-idr-rfc4360-bis.xml"/>
      </references>
      <references title="Informative References">
		<xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7911.xml"/>
		<xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7938.xml"/>
    </references>
    </references>
 </back>
</rfc>