<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wh-rtgwg-adaptive-routing-arn-05" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="ARN">Adaptive Routing Notification</title>
    <seriesInfo name="Internet-Draft" value="draft-wh-rtgwg-adaptive-routing-arn-05"/>
    <author initials="H." surname="Wang" fullname="Haibo Wang">
      <organization>Huawei</organization>
      <address>
        <email>rainsword.wang@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Geng" fullname="Xuesong Geng">
      <organization>Huawei</organization>
      <address>
        <email>gengxuesong@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Xu" fullname="Xiaohu Xu">
      <organization>China Mobile</organization>
      <address>
        <email>xuxiaohu_ietf@hotmail.com</email>
      </address>
    </author>
    <author initials="Y." surname="Xia" fullname="Yinben Xia">
      <organization>Tencent</organization>
      <address>
        <email>forestxia@tencent.com</email>
      </address>
    </author>
    <author initials="J." surname="Dong" fullname="Jie Dong">
      <organization>Huawei</organization>
      <address>
        <email>jie.dong@huawei.com</email>
      </address>
    </author>
    <author initials="H." surname="Huang" fullname="Hongyi Huang">
      <organization>Huawei</organization>
      <address>
        <email>hongyi.huang@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="December" day="09"/>
    <area>General</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>keyword1</keyword>
    <keyword>keyword2</keyword>
    <keyword>keyword3</keyword>
    <abstract>
      <?line 61?>

<t>Large-scale supercomputing and AI data centers utilize multipath to implement load balancing and/or improve transport reliability. Adaptive routing (AR), widely used in direct topologies such as dragonfly, is growing popular in commodity data centers to dynamically adjust routing policies based on path congestion and failures.
When congestion or failure occurs, the sensing node can not only apply AR locally but also send the congestion/failure information to other nodes in a timely and accurate manner to enforce AR on other nodes, thus avoiding exacerbating congestion on the reported path.
This document specifies Adaptive Routing Notification (ARN), a general mechanism to proactively disseminate congestion detection and congestion elimination information for remote nodes to perform re-routing policies. 
Particularly for AI workloads like DeepSeek's MoE models that exhibit dynamic all-to-all communication patterns with bursty traffic characteristics, such mechanisms become crucial to enable immediate network response to transient congestion conflicts.</t>
    </abstract>
  </front>
  <middle>
    <?line 70?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Adaptive routing (AR) is widely used in high-performance computing (HPC) environments with directly connected topologies like Dragonfly<xref target="I-D.draft-agt-rtgwg-dragonfly-routing"/>. These topologies offer advantages such as scalability with small network diameters, making them widely adopted in HPC and supercomputing systems.</t>
      <t>In networks with directly connected topologies, multiple non-equivalent paths exist to reach the destination node. Typically, the shortest path is preferred for forwarding traffic. However, traffic congestion can occur on these shortest paths. AR addresses this by enabling nodes to make dynamic routing decisions based on network traffic variations, such as link congestion.</t>
      <t>AR is also applicable to symmetrical topologies, which are the most prevalent in current AI data centers, like the Clos topology. In symmetrical topologies, multiple equivalent paths are available. When congestion occurs on one path, AR can adjust traffic flows to avoid the congested path, thus ensuring balanced traffic distribution and optimal path usage.</t>
      <t>For example, by proactively detecting link congestion status or receiving remote congestion notifications, network nodes can forward packets along shorter, non-congested paths, improving overall throughput and resilience while reducing latency. When the link is non-congested, packets are forwarded over the shortest paths. When congestion occurs on any shortest path, the local node that detects it applies adaptive routing immediately and advertises congestion signals to other remote nodes. This allows the network to select another non-congested but non-shortest path temporarily until a congestion elimination signal is received. Adaptive routing helps mitigate traffic collisions and utilize idle links, enhancing bandwidth utilization.</t>
      <t>When data centers using symmetrical topologies employ Equal-Cost Multi-Path routing (ECMP), AR can correct the membership of ECMP groups by providing timely congestion updates. This ensures traffic is balanced across optimal paths and prevents overload on specific links.</t>
      <t>AR mechanisms are also effective in handling path failure scenarios, as path failures can be considered severe congestion cases. The re-routing strategy differs in these cases: when a link failure occurs, no traffic can pass through the failed link, necessitating a complete re-route of all affected traffic. In contrast, when congestion occurs, some traffic can still flow through the link, so AR ensures that only the excess or partial traffic is re-routed, maintaining some level of flow through the congested link.</t>
      <t>To standardize the process of disseminating information for triggering re-routing, including but not limited to congestion and failures, the concept of Adaptive Routing Notification (ARN) is introduced. ARN allows for a unified approach to adaptive routing across different network environments, ensuring consistent and efficient handling of network changes and improving overall network performance and reliability. Additionally, standardizing ARN reduces the need for multiple implementations by switch vendors, simplifying network management and deployment.</t>
      <t>This document proposes a proactive notification mechanism for adaptive routing and describes the conditions for triggering dissemination and the information carried in ARN to notify remote nodes for re-routing. ARN can be used for congestion notifications, link failure notifications, and even to convey other relevant network events for re-routing. ARN is applicable to both directly connected topologies and indirectly connected topologies. The detailed mechanisms for detecting congestion or failures are beyond the scope of this document.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>AR: Adaptive Routing</t>
        <t>ARN: Adaptive Routing Notification</t>
        <t>BPT: Best Path Table</t>
        <t>ECMP: Equal-Cost Multi-Path routing</t>
        <t>HPC: High-Performance Computing</t>
        <t>VXLAN: Virtual eXtensible Local Area Network</t>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="arn-mechanism">
      <name>ARN Mechanism</name>
      <t>The ARN mechanism primarily consists of three steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>Detect changes in the status of network links/nodes (such as link congestion, link signal interruption, etc.).</t>
        </li>
        <li>
          <t>Assess the impact range of the status change and, if local measures cannot completely mitigate the impact, send an ARN message to specified remote nodes.</t>
        </li>
        <li>
          <t>When remote nodes receive the ARN message, they make rerouting decisions based on the specific information carried by the ARN, thus minimizing the impact on subsequent traffic (e.g., selecting a new path for subsequent traffic).</t>
        </li>
      </ol>
      <t>Here, link congestion is taken as an example to show how ARN works. ARN can be triggered whenever link congestion (e.g., by analyzing the queue length of the output port) is detected to appear or disappear. A congestion signal carried through ARN is sent by the detected node to other nodes of interest (usually the upstream nodes).</t>
      <t><xref target="topology"/> depicts a simplified dragonfly topology (only relevant links are drawn). The nodes in each Group are directly connected to each other. The groups are all connected with direct links. As shown in <xref target="topology"/>, Node1 has a direct link connecting Group1 and Group2. When the direct link (Node1 &lt;-&gt; Group2) is congested, all nodes of Group1 should be notified and immediately update the path selection policy. For example, partial or all flows originating from Group1 to Group2 may choose Group3 as a transmission path instead of using the direct link (Node1 &lt;-&gt; Group2) until congestion elimination.</t>
      <figure anchor="topology">
        <name>ARN Example in Dragonfly</name>
        <artwork><![CDATA[
            +----------------+            +----------------+
            |                |            |                |
            |     Group 2    | -----------|     Group 3    |
            |                |            |                |
            +----------------+            +----------------+
                     |                             |
                     |                             |
                     |                             |
  +------------------|-------------------+         |
  |                  *                   |         |
  |      @@     +----*---+     @@        |         |
  |     +-------+  Node1 +--------+      |         |
  |     |       +----+---+        |      |         |
  |     |            |            |      |         |
  | +---v----+       |       +----v---+  |         |
  | | Node2  |       |@      |  Node4 +------------+
  | +--------+       |@      +--------+  |
  |                  |                   |
  |             +----v---+               |
  |             |  Node3 |               |
  |             +--------+               |   **: congestion
  |  Group 1                             |   @@: ARN
  +--------------------------------------+
]]></artwork>
      </figure>
      <t><xref target="example2"/></t>
      <figure anchor="example2">
        <name>ARN Example in Spine-Leaf</name>
        <artwork><![CDATA[
    +---------+       +---------+               
    |  spine1 |       |  spine2 |               
    +--+---+--+       +-+----+--+               
       |   |**          |    |                  
       |   +------------+-+  |                  
     @@|                | |  |                  
       |   +------------+ |  |                  
       |   |              |  |       **: failure
    +--+---+--+       +---+--+--+    @@: ARN    
    |  leaf1  |       |  leaf2  |               
    +---------+       +---------+               
]]></artwork>
      </figure>
      <t><xref target="example2"/> depicts a reduced Spine-Leaf topology with an example of how ARN is triggered in case of a failure. Specifically, when Spine1 detects a failure on the link to Leaf2, and finds no local backup path, Spine1 sends an ARN message to Leaf1, instructing it to reroute subsequent traffic destined for Leaf2 through Spine2.</t>
      <section anchor="triggering-arn">
        <name>Triggering ARN</name>
        <t>The local node can sense the change of network states by monitoring interface status, such as bandwidth utilization and queue depth of the interface. The sensing method is out of scope in this document.</t>
        <t>When the monitored value exceeds the preset threshold, the state is determined to be congested and a congestion notification is triggered.
When the monitored value falls back below the preset threshold, the state is determined to be non-congested and a notification of congestion elimination is triggered.</t>
        <t>When the local node detects any change in congestion status, it can send the corresponding ARN continuously to other network nodes in the same group.
The notifications can be sent to multiple nodes using multicast technology provided by the network.
ARN packets <bcp14>SHOULD</bcp14> be set as high priority to ensure timely processing.
The congestion level is <bcp14>RECOMMENDED</bcp14> to be included in ARN for fine-grained control of adaptive routing.</t>
        <t>The local node can sense the change of network states by monitoring interface status, such as bandwidth utilization and queue depth of the interface. The methods for detection and sensing can vary widely, including techniques such as active probing, passive monitoring, and others. However, the specific methods are out of scope in this document.</t>
        <t>However, the detection of a state change does not necessarily trigger the ARN mechanism. Nodes can decide whether to trigger remote notifications based on predefined rules. For instance, local measures might be sufficient to handle the issue. If a link failure occurs but the local node has multiple backup links available, the local rerouting might suffice to resolve the problem without needing to trigger an ARN.</t>
        <t>When the local node decides to trigger ARN based on the change in specific network status, it can send the corresponding ARN continuously to other network nodes. The ARNs could be sent by unicast or multicast. ARN packets <bcp14>SHOULD</bcp14> be set as high priority to ensure timely processing.</t>
      </section>
      <section anchor="receiving-arn">
        <name>Receiving ARN</name>
        <t>After receiving an ARN, the node generally performs re-route operations, which include but not limited to:</t>
        <ul spacing="normal">
          <li>
            <t>Selecting a new optimal path for the traffic that avoids the congested or failed link.</t>
          </li>
          <li>
            <t>Adjusting the sending rate of traffic to prevent overload and reduce congestion.</t>
          </li>
        </ul>
        <t>If the node determines that it cannot effectively re-route the traffic based on the received ARN, it may propagate the ARN information to other nodes in the network, continuing the dissemination process to ensure network-wide adaptation and optimal traffic flow.</t>
      </section>
    </section>
    <section anchor="adaptive-routing-notification">
      <name>Adaptive Routing Notification</name>
      <section anchor="basic-concept">
        <name>Basic Concept</name>
        <t>An ARN packet should include two kinds of information:</t>
        <ul spacing="normal">
          <li>
            <t>Information reflecting the type of notification and quantifiable metrics (e.g., congestion level). The Metric value helps in quantifying the severity of the congestion or failure, enabling fine-grained control of adaptive routing.</t>
          </li>
          <li>
            <t>Information carrying details about the affected object (e.g., affected traffic, affected paths), for example, router identifier connected by the compromised link or identifiers of flows that are impacted by the congestion or failure.</t>
          </li>
        </ul>
        <t>These details are essential to assist remote nodes in making informed rerouting decisions, ensuring minimal disruption and optimal network performance despite the presence of congestion or failures.</t>
        <t>Whenever a network node receives an ARN packet indicating congestion detection, for example, it would evaluate the optimal forwarding path in its local best path table (BPT). If the optimal path passes through the affected interface, the network node deletes this path from the BPT and selects other sub-optimal paths. How to respond to ARN packets is typically related to the specific device's rerouting implementation mechanism for AR.</t>
        <t>ARN can also be used to notify the elimination of specific network conditions (e.g., congestion recovery). When such an ARN message is received, the previously made rerouting decisions can be revoked. In this case, each ARN message should be configured with an identifier (carried through parameters) to ensure the correspondence between the state notification and the state revocation notification. If ARN is not used for elimination, mechanisms such as timeouts can be employed to revoke rerouting decisions.</t>
        <t>Simple and direct ARN messages may cause routing oscillation issues and packet reordering problems within the same flow. These issues can be better addressed in future enhancements. Additionally, ARN is primarily a rapid rerouting mechanism and is typically used in conjunction with robust BGP mechanisms. Once BGP routes converge, they will replace the rerouting strategies triggered by ARN, ensuring routing correctness, loop-freeness, and reducing the side effects caused by the simplistic ARN mechanism.</t>
      </section>
      <section anchor="packet-format">
        <name>Packet Format</name>
        <figure anchor="ref-to-fig">
          <name>ARN Format</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Type     |Version|  Rvsd |     Metric    |    Para-Type  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
+                      Parameters(Optional)                     +
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>where:</t>
        <dl>
          <dt>Type:</dt>
          <dd>
            <t>This field indicates the purposes of ARN. 
Type 1 indicates this notification is for notifying congestion detection remotely to trigger adaptive routing.
Type 2 indicates this notification is for notifying congestion elimination remotely to revoke adaptive routing.
Type 3 indicates this notification is for notifying failure detection remotely to trigger adaptive routing.
Type 4 indicates this notification is for notifying failure elimination remotely to revoke adaptive routing.</t>
          </dd>
          <dt>Version:</dt>
          <dd>
            <t>This field indicates the version number. The default value is 0.</t>
          </dd>
          <dt>Rvsd:</dt>
          <dd>
            <t>Reserved.</t>
          </dd>
          <dt>Metric:</dt>
          <dd>
            <t>Quantified value. For example, it can be used to notify the degree of congestion or indicate the variation in available bandwidth.</t>
          </dd>
          <dt>Para-Type:</dt>
          <dd>
            <t>The Para-Type field is an 8-bit bitmap that specifies which parameters are included in the Parameters field of the ARN packet. Each bit in this field corresponds to a specific parameter. When a bit is set to 1, it indicates the presence of the corresponding parameter. The following subsections detail the explanation of each bit in the Para-Type field.</t>
          </dd>
          <dt>Parameters:</dt>
          <dd>
            <t>The parameters field can carry the information of affected object to help other devices determine the target of adaptive routing. The presence of parameters is indicated by the Para-Type bitmap. The packing order of the parameters follows the bit order specified in the Para-Type bitmap field.</t>
          </dd>
        </dl>
        <section anchor="illustration-of-para-type-and-corresponding-parameter">
          <name>Illustration of Para-Type and Corresponding Parameter</name>
          <section anchor="para-type-bit-0">
            <name>Para-Type Bit 0</name>
            <t>When bit0 of Para-Type is 1, the following parameter is concluded in Parameters to indicate the identifier of affected flow (five-tuple from packet header):</t>
            <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opcode |   Mask  |             Rsvd            |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         Source IPv4/v6                        ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                      Destination IPv4/v6                      ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Source Port         |        Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
            <t>where:</t>
            <dl>
              <dt>Opcode:</dt>
              <dd>
                <t>This field indicates either IPv4 address or IPv6 address is used in the parameter.</t>
              </dd>
              <dt>Rsvd:</dt>
              <dd>
                <t>Reserved for future use.</t>
              </dd>
              <dt>Mask:</dt>
              <dd>
                <t>A bitmap used to indicate the presence of the subsequent 5 fields, excluding the reserved field. Each bit in this field corresponds to a specific domain, with a value of 1 indicating the presence of the domain and 0 indicating its absence.</t>
              </dd>
            </dl>
            <t>Here's the breakdown of each bit in the Mask field:</t>
            <ul spacing="normal">
              <li>
                <t>Bit 0 (Protocol): Indicates whether the Protocol field is present.</t>
              </li>
              <li>
                <t>Bit 1 (Source IPv4/v6): Indicates whether the Source IP address field is present.</t>
              </li>
              <li>
                <t>Bit 2 (Destination IPv4/v6): Indicates whether the Destination IP address field is present.</t>
              </li>
              <li>
                <t>Bit 3 (Source Port): Indicates whether the Source Port field is present.</t>
              </li>
              <li>
                <t>Bit 4 (Destination Port): Indicates whether the Destination Port field is present.</t>
              </li>
            </ul>
            <dl>
              <dt>Protocol:</dt>
              <dd>
                <t>Indicates the specific protocol type used by the packet, such as TCP or UDP.</t>
              </dd>
            </dl>
            <t>Source IPv4/v6: 
：  The IP address of the sender, which can be in IPv4 or IPv6 format determined by Opcode.</t>
            <t>Destination IPv4/v6: 
：  The IP address of the receiver, which can be in IPv4 or IPv6 format determined by Opcode.</t>
            <t>Source Port: 
：  The port number used by the sender.</t>
            <t>Destination Port: 
：The port number used by the receiver.</t>
          </section>
          <section anchor="para-type-bit-1">
            <name>Para-Type Bit 1</name>
            <t>When bit1 of Para-Type is 1, the following parameter is concluded in Parameters to indicate the identifier of affected path:</t>
            <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Path ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
            <dl>
              <dt>Path ID:</dt>
              <dd>
                <t>The 32-bit field is used to uniquely identify the affected path in the network.</t>
              </dd>
            </dl>
          </section>
          <section anchor="para-type-bit-2-to-bit-7">
            <name>Para-Type Bit 2 to Bit 7</name>
            <t>Bits 2-7: Reserved for future use or other parameter types.</t>
            <t>In scenarios such as VXLAN tunnels, there may be both inner and outer five-tuple flow identifiers. Different parameters can be used to distinguish between these two types of identifiers, allowing for more granular routing control. Specifically:</t>
            <ul spacing="normal">
              <li>
                <t>Bit 0 is used for the outer five-tuple identifier (related to the VXLAN tunnel).</t>
              </li>
              <li>
                <t>Additional bits (e.g., Bit 2) can be used for the inner five-tuple identifier (related to the actual payload traffic within the tunnel).</t>
              </li>
            </ul>
            <t>By using different bits in the Para-Type field, the ARN mechanism can indicate the presence of these different parameters, enabling precise and fine-grained adaptive routing decisions.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="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>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="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>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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-agt-rtgwg-dragonfly-routing">
          <front>
            <title>Routing in Dragonfly+ Topologies</title>
            <author fullname="Dmitry Afanasiev" initials="D." surname="Afanasiev">
         </author>
            <author fullname="Roman Glebov" initials="R." surname="Glebov">
              <organization>Yandex</organization>
            </author>
            <author fullname="Jeff Tantsura" initials="J." surname="Tantsura">
              <organization>Nvidia</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document provides an overview of Dragonfly+ network topology and
   describes routing implementation for IP networks with Dragonfly+
   topology with support for non-minimal routing.t

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-agt-rtgwg-dragonfly-routing-01"/>
        </reference>
      </references>
    </references>
    <?line 380?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91c63LbRpb+j6fotX9EiknGkp0bayZjWXZiTfmikZVMUltb
U02iSSICAQ4aoMzYzoPsr32Q/bUvtK+w3zmnu9EASdlOPFtT4xk7ItiX06fP
5TsXaDgcJrbWRfo3nZeFGau6akwy1bWZl9VmrGydJraZLDNrs7K43Kww5Ozx
5bdJtqp4sK2P7979+u5xkutiPlamSJI6q3MMO0n1qs7WRl2UTZ0Vc/W8rLNZ
hrWxUqInk8qsMerieZKW00IvMSWt9KweXi+GVT2/ng+1W2FYyQpDXRXDu58n
5cSWuamNHSfNKtX8w21FP4zV8d3j4+Fd+r8aDvmZyqyaZXluUpUVSjd1uQQJ
U53nGzXZqFfL/LiaTVU2U0VZqzn2wxl0ZfRYfWcKU+k8uS6rqzmIWI3Vc1PT
J/VX/EOH+o4eJ8nV9ThRaqiuzAZfp0fxh+P4wz2s3dSLssL4Ib7ICjtWT0bq
r2AfPgofnuhsUvpHZTXXRfYLsw1fNfraZHhsljrLx6rSWIEWHl1j+IMFfz2a
lsto+R9HdJJ2+R8bY0ui3bzHBnMMeiUT9q7+Y9Ounely0ciT7sKni6zQ6lk5
yXLTLv+qecUz/paZevZgUdb0uLfDTyNaNmzxU1ZMTOEedfe4NMXUFHW7/Kys
jK2xxYNavuot/eeRelRGrPlzZvyDm9nyc2ZG6V6e4EIxIb5RDN1k4eHNay94
8GjR9G40KcqKZHdtxkmSFbPoU5IMIe56YutKT2t8fKqruRlaiLlRtlmZCgus
RA+h7erkjHRDK2KJqazCN3n2i1HLJq+zla4Xqi5VtlzlZokRKi91qiYaOj51
K3xWVvR9VULBsWdhV2VVq8rkmcYFZ/Vm1BoAp77q4OTicKCus9RA9RorCplm
lZnW2G5V5uU8MxbkThdKW7IG87KY5ZsBqTD075oWWZWrJtcVTcWRlmWKvbpn
AeXpBmx3Oq7Tn2GlAhHYJpvSNhNNFJSF4uNOwXNICu6D+TPDRTQQnVHy14Up
4m9xbvelKqfTprIDVS/AY1NYWr4oU6OmumBjUha0/2qFf08uwERndJpa6dyW
NCflye3yn/m1w/ViSxyoxLCKF7dsxVSdLYmLRKsmMsjQLXUBe0XDDc2eGtqV
SG4nE7GNVXpdZimRa17pqakmmlkTn7JgwipD1wo2EY9GyeUCFwFr3bBQ2JWZ
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
tTBltXdUkvwfv8ml72tSAAA=

-->

</rfc>
