<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     version="3"
     ipr="trust200902"
     submissionType="IETF"
     category="std"
     xml:lang="en"
     tocInclude="true"
     tocDepth="3"
     symRefs="true"
     sortRefs="true"
     docName="draft-lz-fann-bandwidth-notification-00">

  <front>
    <title abbrev="Link Bandwidth Notification">
      Fast Notification for Link Bandwidth
    </title>
    <seriesInfo name="Internet-Draft" value="draft-lz-fann-bandwidth-notification-00"/>
    <author fullname="Yao Liu" surname="Liu">
      <organization>ZTE Corporation</organization>
      <address>
        <email>liu.yao71@zte.com.cn</email>
      </address>
    </author>
    <author fullname="Xiangyang Zhu" surname="Zhu">
      <organization>ZTE Corporation</organization>
      <address>
        <email>zhu.xiangyang@zte.com.cn</email>
      </address>
    </author>

    <date year="2026"/>

    <area>Routing</area>
    <workgroup>fann</workgroup>

    <keyword>Load balancing</keyword>
    <keyword>Bandwidth notification</keyword>
    <keyword>Data plane</keyword>

    <abstract>
      <t>This document proposes a data-plane-based method for rapidly advertising end-to-end path bandwidth information using a bitmap encoding. The mechanism enables fast load-balancing adjustments in AI/ML data center fabrics.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>AI workloads are typically bandwidth-intensive and often generate multiple large data flows simultaneously. For optimized load balancing, it is necessary to obtain path capacity information across the network to dynamically distribute traffic across multiple equal-cost paths.</t>
      <t><xref target="I-D.xu-idr-fare"/> introduces a new BGP Path Bandwidth Extended Community to carry end-to-end path bandwidth information within the data center fabric, enabling adaptive routing in CLOS networks. This approach relies on the control plane to process routing updates, resulting in relatively slow notification.</t>
      <t><xref target="I-D.camarillo-rtgwg-lsn"/> defines a hardware-accelerated forwarding-plane notification protocol that propagates link reachability and congestion status across switches with sub-microsecond latency. This protocol currently does not carry any bandwidth information.</t>
      <t>Based on the bitmap concept introduced in <xref target="I-D.camarillo-rtgwg-lsn"/>, this document proposes a data-plane-based method for rapidly advertising end-to-end path bandwidth information, which can be used to improve the effectiveness of load balancing.</t>
    </section>
	
<section numbered="true" toc="default">
        <name>Terminology</name>
		<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"></xref> <xref target="RFC8174" format="default"></xref> when, and only when, they appear in all capitals, as shown here.</t>
</section>


    <section anchor="path-bandwidth-notification">
      <name>Link Bandwidth Notification Message</name>
      <t>The message format is defined as follows:</t>
      <figure anchor="msg-format">
        <name>Link Bandwidth Notification Message Format</name>
        <artwork type="ascii-art"><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        EtherType              |         OpCode                |
+-------------------------------+-------------------------------+
| Type  |R|Msg| Rsv | Dev-Range |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
|                   Bandwidth-Level-Bitmap                      |
|                          (768 bits)                           |
|                                                               |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
      </figure>
      <t>Field descriptions:</t>
      <dl spacing="normal">
        <dt>EtherType:</dt><dd>TBD1.</dd>
        <dt>OpCode:</dt><dd>TBD2.</dd>
		<dt>Type:</dt><dd>TBD3 - indicates that the message carries a Bandwidth-Level-Bitmap.</dd>
        <dt>R (1 bit):</dt><dd>Reserved. MUST be set to 0 on transmission and ignored on receipt.</dd>
        <dt>Msg (2 bits):</dt><dd>Message type (as defined in <xref target="I-D.camarillo-rtgwg-lsn"/>).</dd>
        <dt>Rsv (3 bits):</dt><dd>Reserved. MUST be set to 0 on transmission and ignored on receipt.</dd>
        <dt>Dev-Range (6 bits):</dt><dd>Determines the range of devices covered by the bitmap (same as in <xref target="I-D.camarillo-rtgwg-lsn"/>).</dd>
        <dt>Bandwidth-Level-Bitmap (768 bits):</dt>
        <dd>A bitmap of 768 bits, arranged contiguously in order of Leaf IDs. Each Leaf node is represented by a 3-bit bandwidth-level code. The encoding is defined as follows:</dd>
      </dl>
      <table anchor="bw-levels">
        <name>Bandwidth Level Encoding</name>
        <thead>
          <tr>
            <th>3-bit code</th>
            <th>Bandwidth Level</th>
            <th>Corresponding Link Bandwidth</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>000</td><td>Level 0</td><td>Unreachable / link failure</td></tr>
          <tr><td>001</td><td>Level 1</td><td>10 Gbps</td></tr>
          <tr><td>010</td><td>Level 2</td><td>25 Gbps</td></tr>
          <tr><td>011</td><td>Level 3</td><td>50 Gbps</td></tr>
          <tr><td>100</td><td>Level 4</td><td>100 Gbps</td></tr>
          <tr><td>101</td><td>Level 5</td><td>200 Gbps</td></tr>
          <tr><td>110</td><td>Level 6</td><td>400 Gbps</td></tr>
          <tr><td>111</td><td>Level 7</td><td>800 Gbps and above</td></tr>
        </tbody>
      </table>
    </section>

    <section anchor="processing-procedures">
      <name>Processing Procedures</name>
      <t>The sending, receiving, and processing procedures are as follows:</t>

      <t><strong>Pre-configuration and information acquisition</strong></t>
      <t>Every leaf node within the fabric is assigned a unique Global Node ID. Additionally, a mapping between reachable IP prefixes and the leaf nodes that advertise them is required on each leaf node. This information can be obtained via a centralized controller or other methods, the details are out of the scope of this document.</t>

      <t><strong>Leaf sends bandwidth notification message</strong></t>
      <t>Each leaf sends a bandwidth notification message with its own 3-bit code set to the maximum value (i.e., 111).</t>

      <t><strong>Spine receives and updates the bitmap</strong></t>
      <t>Upon receiving bandwidth-level bitmaps from each leaf, the spine takes the minimum value between the received bitmap and its local port rate, and uses this minimum to update the bitmap.</t>

      <t><strong>Spine aggregates bitmaps and forwards</strong></t>
      <t>Based on the updated bitmaps for each leaf, the spine aggregates the bitmaps for each leaf (e.g., if there are two links towards the same leaf, the aggregated bandwidth is the sum of the bandwidths of those two links). The aggregated bitmap carries bandwidth information from this spine to each leaf.</t>

      <t><strong>Processing in the presence of a superspine</strong></t>
      <t>If a superspine exists in the network, it performs similar processing as the spine after receiving a bandwidth notification. The superspine compares the bandwidth from the received message with the bandwidth of its local ports to the spine, takes the minimum value to update the bitmap, aggregates bitmaps received from different spines for the same leaf, and then carries the aggregated bitmap in the bandwidth notification message to forward to other nodes.</t>

      <t><strong>Leaf receives and applies bandwidth information</strong></t>
      <t>After receiving the bandwidth notification message from the spine, the leaf node takes the minimum bandwidth value (i.e., compares the received bandwidth with the local link bandwidth to the spine) and then obtains the bandwidth capacity of each path to the IP prefix based on the Leaf-ID-to-IP-prefix mapping.</t>
	  
	<t>The bandwidth notification messages are sent periodically at a configured interval. In addition, when a significant change occurs in the bandwidth or link state (e.g., link failure, link recovery, or bandwidth change), a notification message is triggered immediately. </t>
      <t>The resulting path bandwidth is used for optimized load balancing. For example, it can be used as a weight value when performing weighted ECMP load-balancing towards that prefix, or it can be combined with other link quality information (e.g., queue depth) to compute a link quality score, and the forwarding path is determined based on that score. Detailed load-balancing schemes are outside the scope of this document.</t>
    </section>

    <section anchor="illustration-example">
      <name>Illustration Example</name>
      <figure anchor="clos-topo">
        <name>Example CLOS topology</name>
        <artwork type="ascii-art"><![CDATA[
                 +---------+             +--------+
                 | Spine1  |             | Spine2 |
                 +-+-+-+-+-+             +-+-+-+-++
                   | | | |                 | | | |
                   | | | +-----------------|-|-|-|-+
                   | | +------------+      | | | | |
          +--------+ +-+            |      | | | | |
          |   +----------------------------+ | | | |
          |   |        |  +------------------+ | +----+
          |   |        |  |         |  +-------+   |  |
          |   |        |  |         |  |           |  |
        +-+---+-+   +--+--+-+     +-+--+--+     +--+--+-+
        | Leaf1 |   | Leaf2 |     | Leaf3 |     | Leaf4 |
        +-------+   +-------+     +-------+     +-------+
        ]]></artwork>
      </figure>
      <t>As shown in Figure 1, the CLOS topology contains two spine nodes (Spine1, Spine2) and four leaf nodes (Leaf1-Leaf4). Port 1, Port 2, Port 3, and Port 4 of Spine1 and Spine2 are connected to Leaf1, Leaf2, Leaf3, and Leaf4, respectively. All links are 100 Gbps, except that Spine1 connects to Leaf4 via a 2*50 Gbps LAG (logical total bandwidth 100 Gbps). The controller assigns a unique Leaf ID to each leaf and pre-installs the mapping between Leaf IDs and IP prefixes.</t>

      <t><strong>Step 1: Leaf sends initial bandwidth-level notification messages.</strong></t>
      <t>Leaf1-Leaf4 each send bandwidth-level notification messages to Spine1 and Spine2. For example, Leaf1 sends a bitmap where its own 3 bits are 111 (maximum), and the remaining bits for the other three leaves are 000 (unreachable initially). Thus Leaf1's bitmap is 111000000000.</t>

      <t><strong>Step 2: Spine receives and updates bitmaps</strong></t>
      <t>Spine1 and Spine2 receive notifications from all leaves. They take the minimum between the received bitmap and their local port bandwidth. For Spine1's ports 1-3 and all ports of Spine2, the available bandwidth is updated to 100 Gbps (code 100). For Spine1 port 3 (the LAG to Leaf4), the available bandwidth is updated to 50 Gbps (code 011). The updated bitmaps are stored locally. For example, Spine1 port 0 stores a bitmap 100000000000.</t>

      <t><strong>Step 3: Spine aggregates and sends bitmaps</strong></t>
      <t>Spine1 and Spine2 aggregate the locally maintained bitmaps for Leaf1 through Leaf4 based on routing reachability. Spine1 aggregates to 100100100011, meaning that from Spine1, the available bandwidth to Leaf1-Leaf3 is 100 Gbps (code 100), and to Leaf4 is 50 Gbps (code 011). Similarly, Spine2 aggregates to 100100100100, meaning that to all leaf nodes the available bandwidth is 100 Gbps (code 100).</t>

      <t><strong>Step 4: Leaf updates its port bitmaps</strong></t>
      <t>Leaf1 receives from Spine1 the bitmap 100100100011 and from Spine2 the bitmap 100100100100. It takes the minimum bandwidth value for each path (which remains unchanged in this case), and updates its local forwarding table accordingly. The resulting path bandwidth information is then used for weighted load balancing.</t>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The bandwidth notification mechanism defined in this document is intended solely for use within controlled, single-domain AI/ML data center fabrics. To mitigate potential spoofing and denial-of-service attacks, switches MUST implement strict port-level filtering. Bandwidth notification messages MUST be dropped unconditionally on any port facing a server, host, or external network. Processing of these messages MUST only be enabled on trusted, switch-to-switch infrastructure links.</t>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBA</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.camarillo-rtgwg-lsn.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.xu-idr-fare.xml"/>
      </references>
    </references>
  </back>
</rfc>