<?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.19 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wh-rtgwg-adaptive-routing-arn-03" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.0 -->
  <front>
    <title abbrev="ARN">Adaptive Routing Notification</title>
    <seriesInfo name="Internet-Draft" value="draft-wh-rtgwg-adaptive-routing-arn-03"/>
    <author initials="H." surname="Wang" fullname="Haibo Wang">
      <organization>Huawei</organization>
      <address>
        <email>rainsword.wang@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>
    <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>
    <date year="2024" month="September" day="14"/>
    <area>General</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>keyword1</keyword>
    <keyword>keyword2</keyword>
    <keyword>keyword3</keyword>
    <abstract>
      <?line 57?>

<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.</t>
    </abstract>
  </front>
  <middle>
    <?line 65?>

<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" initials="" surname="Roman">
              <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 375?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91c63LbRpb+j6fotX+MFJOMJXtyYWUSy7ITq8oXjazcamtr
qkk0SUQgwEEDlBnbeZD9tQ+yv/aF9hX2fOd0NxogKduJZ2tqNGNHBPty+vS5
fOcCD4fDxNa6SP+m87IwY1VXjUmmujbzstqMla3TxDaTZWZtVhaXmxUNOXt8
+W2SrSoebOvju3e/vHuc5LqYj5UpkqTO6pyGnaR6VWdroy7Kps6KuXpe1tks
o7VppURPJpVZ06iL50laTgu9pClppWf18HoxrOr59Xyo3QrDSlYY6qoY3r2X
lBNb5qY2dpw0q1TzL7cVfhmr47vHx8O7+L8aDvmZyqyaZXluUpUVSjd1uSQS
pjrPN2qyUa+W+XE1m6pspoqyVnPaj86gK6PH6jtTmErnyXVZXc2JiNVYPTc1
Pqkf6S8c6js8TpKr63Gi1FBdmQ19nR7FH47jD/do7aZelBWNH9IXWWHH6slI
/Ujso4/Chyc6m5T+UVnNdZH9ymyjrxp9bTJ6bJY6y8eq0rQCFh5d0/AHC/56
NC2X3eVpWrx+Wcw3WXh48w4LHjxaNHvX/2kETrXL/9QYW4I35j2Wn9OgVzJh
7+o/Ne3amS4XjTzpLny6yAqtnpWTLDft8q+aVzzjb5mpZw8WZY3HvR1+HmHZ
sMXPWTExhXvU3ePSFFNT1O3ys7IytqYtHtTyFS+dJEVZQcrWZpwkWTGLPiXJ
kARTT2xd6WlNH5/qam6GlgTSKNusTEUrrERjSC/VyRmkWCssbiqr6Js8+9Wo
ZZPX2UrXC1WXKluucrOkESovdaommrRx6lb4tKzwfVWSKtKehV2VVa0qk2ea
WJXVm1Grqk7R1MHJxeFAXWepISVprKhOmlVmWtN2qzIv55mxRO50obSF3s7L
YpZvBlA20pRrLLIqV02uK0ylIy3LlPbqnoUoTzfEdKeNOv2F7EkggrbJpthm
okFBWSg+7pQkhXhO98H8mdE9NHQJo+THhSnib+nc7ktVTqdNZQeqXhCPTWGx
fFGmRk11wWpfFth/taK/Ty6Iic48NLXSuS0xJ+XJ7fKf+rXD9dKWdKCShlW8
uGV7o+psCS6CVg0yYJKWuiDLguEGs6cGu4LkdjKIbazS6zJLQa55paemmmhm
TXzKggmrDK6V2AQejZLLBV0E2dWGhcKuzJRML1F0o1HGtT+ne9dQShg+tTTT
BYm/XYJUEiGSWJpMp0nJIZglKVwd80SlZJWn4WqiL0jaeDR+jxlGvxHpy5KW
EZZhH1NhAD0f9kVh5NRnmaUpaXlCZv+sqKsybWTX17czfHxL3+yUaYhnT6oX
2XwxdFuS0uA4Xv0OnpyfHtINrbOqLMBITCYJFEWgNeiABf1GC0VKkWdXRj3y
GvH69Tdnw0cj8Wx6XjvXFjTGH/Ht25G6XBhr4qXK2YzEQadrXdR6HikcrIXT
XiHJLklgVeGcU5qRIYOGDUjS2E2RiCz9yXVarmo5PB2Qb6pnd+zG1mYJbp8V
ftH3OfvAWaUct1kMzd+bbE1mjSQQUmlJhjMLA0JXq+kgkNsUAuIEAxJAXNis
xB44dV1Arq0sgftbVYa4UtHGEB76c60r1hAybjMSZXJ25bVZm2rgn8SCCIVn
a+AUx/Z2sCOook5TMikW8ghFIphgCj3JvdlgMSXOGm++gpClpGhASpHR8pfi
iVnrKuPzErv8fdLKVxGVxHgigjZm4wOzRByZ5JANupsl3W0FFnU4f73IsBYZ
JHBtWeI8hLCE/TDBDfGMfu35k4HIK+ac5qX1S5JToKvft1e45a0bxv56TZYR
5BKq6ZtktsNs6QrDUwZgNy7FGX/PpVleXjOb2QDGttfZOGcfyZg3FTgvPg/i
6FYgE0Wkkwn35oikPiM1EUFqLCkU8flbkiEyrfCfA9xzx8iJNaPFe/dDsFjX
tDkbr6nJ1hjjzFg0qohsK3HNC4JIEM7shJcoml6ZGtcN2CTySOILHeoemlYR
V44NyaFX0Pp6QdI3X6zgrOiYJLhkGIBGIBM5XAOZRz6FBkjZuGsBS/lcJGed
nQYtPXSbjkbI8houq6+S9qZb1sWmO1p0mv2rOOB6oWvHaPKXtQg7sUf3zXdG
okh2rQ6+NCVy6gw6Gl9MNi9IaVpHHDsXWFhWKpEtIiToJlx8DnSjC++DY94D
COBJ1xiRjSSnS+oMd1IQLiPPucfnCV1gtQiMSXegroXJV5Z8W53N4Vdb65Xn
zqjg4B4AZuQB+QJJKEyxcIBvQkPIzkPCeZx29oTvqAskrZj6XSpO8HaVlxv1
+O+NzoenMCbPoPPDc5w7eNTHp8/OD4MGT8tKACLsj1lOaJNFtiInpjBOcQBl
nY6tBdQ4bBQxzQV07qpYu2FuHStgi72e62lVWtvRamEQzB47awgs42FcgECg
qXBMDGxAN85uwdgacrms/4wNaDk2+nzdHvBZ4iBdekl8J9MdfyVaPWEjYMnZ
wklZuCLTdUFWDmhiiIN4gKJuQCt4fQaP4p94/JiU2QBOssr2cW1RttKigZOt
9WaBrwPjiRbMhR2akm/LaoGSmgEPwmlPjcGVwbBo5kVrUtkn0EHoo60HQtCW
2pNTK5emQw59TavBoneIEmqI53QV4aJhDhiMY4R5BUphZleadB0i2gqCpzYF
yCHYR3+Yj9g9J6bnOMbWpq1OY3uSg8tScQIEIOJXcYQkn7LvLMK5bIN6yJX0
Zj43lVh/f5Nkootp3rB8i92gqIwsgUClfeHLwFM3NasaO78HUgcXMgd/2aBc
PPfGDdRpMkpA/SmMKtwah4pbhtXpkYgdPLk3ijHwHbSOlmWbOFiIuzG4jwyf
grYQ9X4NKBiAK0Zuey4/Kobf4sI6wSkFjnRmgYTtXWEhnJjdm/H23MHCgFBC
ZCxeGObHEpAlXpCNSEuWV4zJZhtGd44iooXwwdIfMjUwh/gIienEVnSmVQkv
pFvs0PH8URDFt7LFf17fTgmruFMQh+XIti9lkTg6+cH4WCynuqoyAfdgDl04
07LpRlkSdnmJFclxpovjIny/H8h0TFDvOxaJtSmcqK/NJjhiUkodi5cY6V2k
wEl3QO+kfGfYxRJW3DhGbC6BDbGGkfkHES3a25lDEB8xMZvScd1OyxWbyjqW
B0Sot2+rS1PRNTGShqvZzobi6fN3JUmTh+eXY/UQgIMd7yX4kSRwp+ObfXOS
UGg3Vk8Q3J5H2nXqY7wk+eGnpydEwQ9ZVdNCyvxUIzEChj9leHZCQZpPd/KZ
LoD2KyOB8FPS64ZUBOpgkNxUSEJadevZ9y8vbw3kv+r5C/794vFfvz+7ePwI
v798cvL0afglcSNePnnx/dNH7W/tzNMXz549fv5IJtNT1XmU3Hp28vMtEbtb
L84vz148P3l6S3xnrKUcF5WQ7wzohyACREPbxGsea8zD0/P/+a+j++r163+7
+Pb0+Ojoy7dv3Ycvjj6/Tx/g82Q3dlLykaRhk5DAGkl2wbJN9YocbC4QgVDj
NYEJsq4kHZ/8OzjzH2P11WS6Orr/tXuAA3ceep51HjLPtp9sTRYm7ni0Y5vA
zc7zHqe79J783Pns+R49/OobMhJGDY+++OZr5DyT26zYz7zKidjgUWsdVxUB
OQbTzsVY0a7KkLLVZkUYKEmORuoRK2pwLYKTQkjW+h5Gep+KwTvYE2k7Y+bh
OWSjalbyjamno0O6sWMySsgFiHEmZ0FGXlXYXOgLewtFkI4BygkS5SyNth4a
Agp4tEXHbJF+WHcgqUZdON5YhKkcnrgUXtqNaJLknou/OvbdBRm8cLSQiKpk
LipzQ86CD+UR8y73Mtn4tV0cTtaOMM6vLtfkuQTg3UwsGQ4ooQdvB2Y0Hw1c
xCUYtDDXDkmTxd2egmtInpACDbZCcdLyms5T4HKJbS6WZ5aR2in8AQc4hdVx
dM6t0mGgxUDpW2s7QieIOHW+Cacj2hqAzGJOFDsZIGYiAkcWloGZuBPBfM42
wMlkVj4QKdtxa2CvR6zOGVqwwrE8rCvhczfhTLSwDMNjHDS24Sw2ZlHkVZM9
X8q4wxFpUvL6tU/2kGEjhJMhBNceDoGMkKUMaSF1wHYvOHPWMbauNPa6OBQX
G7LfnObjEpmM2eWdZRCfQma7QFFCsjwaGyUgXRhHiumsK20Wn2dAjjQ1R4RJ
caRojl8u1O6O2Jrzr8dRZiSeciBrfTX82o3jC47yJYxl/QW4VYmsJk8haIKQ
4G4YBLdpDIl1JeSA7DuFQKED+W7Cvp3slI+BACJdPIXYKJv78GRWlUu/PfFV
aCVtJ34vSsKo8uQea4qUglxd1+VWCzoNouWZyw28Bx8k7bE76UE6+9tvvyUq
+rkz7P3cufnbzuQ3qvfz5uZvd0wWUTyWB9FG8bf39k3+nTv/oTPv3+SGHf/R
k7ZoJgZuP4rOiUk7lv3kxt2jSQ8e8H9430/Cyu7pnkl3WipEbO/06No1yT/j
sXfiM7x596S9H/qTsPA65lBn27V80Z/0ho9x3H7x5kGYjG/ud6/lTtipcxd+
UvzFntvZJQfbQ2OS3zHUEXpva+U9q27piiPqk0/GkcWRuaK6RztI7s598EBa
TnYK8a6fO2zDXo/V7eACFTe4/OUWnPNjBzfI/YSS3y2UH8m7OsN9/PZtawjb
Xf3Jtp/4n8QRbVcEpY/ae3dPjrf46He4I8Lb7uDFeecOjjNvPonU8U34a/+E
rrh1RbY34cGDHRb0zQfu8B4Tel9HEyAzLpDfyyX56J44QQk70EK50bMjFd8D
nhxvU/XhN+1lzIvMPhl7iYsfPqVtIWSxiEUAThJiaTS4hW8MoSKYTL7eI2QA
6QCJM0lTcybYM25EK0pIIKk4zv++FOH0FRzdpqajChOBEZBxLJHzLCtSlJxc
gDTR0yvSXakOueUQBNkdURBWORowUqkaAXGZKyhL5npHtCEVZpfUYjICvObd
jn3Kpk2zwUJIhBpVqjiTbQorgM3FelG4iSDQcIJxWRZZXVaSMSY0PtNTHyO2
Jd+dhRrmj0QXdJ9tcBGWEYTsW1iWpl6UKW6ODo+xkpPqZz98+UcKw0wbsWOt
80ZS7Ca1Lu9trKk54ib0mqeDENwaH9EgqyWofRLn0rkgty9j2JGs0X5SZiRW
lsWBFpe8/YfT1K3bCV0dYohL+/pSOmS2dEYyEMS82HgJyDo1EH/LJJVOXnzt
uqIDrJDYdWlr1FGyoikby+GVD+M6NWKf2tBLFxWNEgmvopSrD2c5RkRbQtuB
gSUEyfNDUmgaYaYLyUu6MlwbzLu9R8hMhhKwSxvxBjXkFv0ySNWQfNcb6WBC
fsOX8lztBKlcpjXijRRliMtRXikk5VAxadPW3NkB6zVHf6NJpepUckmnn0CH
+v4T66roaCfF7OZ6LQaxa11tXH9OXD/i28pok7b1x1UYiM8TLjah1ocH7UFc
fhLyZONmmDin46lCkP0u29FZoT0CuwZRRMfgtDSWy11SYZRcnlOpKBXl8n0j
RoMiv0hBpehXMKwFdRmmhbRWLPJtQyCpqpmxhFRNjgw/Ima4B2S7B/0U3JJk
t2ZZbkLVivbiwpXLwlnb0MWdzXZXWrmg17MJSDEEpXPOzKVFfCNM3PXQ5t2E
GiHFiBOzZb4ONUiauGSHjQtCZYslomWNuMe9lgoctfF4cL+T4WstWJCLWEE+
mh0TRaDBSJq4pIhPaTWF2CVfs8MHSdN9BAukEle48D067NhPZrWJG3eEj3JH
zDvX/Yi1pHRio9I4PfK1Lmm5crZrR613nAAJDtXLXqKz04jEFb5FWzDnCjg3
PYVioHNmrhYVSte89gm3TflsDe6Jq9Faqvhh0dJ3RbRNEVJoBVTsdp6dzVpO
BPfqKvMiDjhl6JPgbKBjTnyOjqT5phdhNK2CpBQqpzrkvxmC3thKG/mogRe7
Nk0VF0Z9Ab+VDTdvCBMrHqS14f464tazkZQsbq7OkWg91JZmnErZnkSriETX
pwC9gBAF6oqxL6dpw1FJTIbqLDp6ZWZeYJijG6kzdmCMOB9d4BFXSaWLx/qc
dd/vuszsMx7lAJf0GxFn3UKbVoxISKBczqXtLIgO2p7I93fV3YMi3b2REgRq
smQxJ6UzsKH3pJz8ggSkO1a/JSV6wg1AhwNWqJAzZbkkj5Aa5pSponSygz0o
yFTlMrNOsXDEdrz1XSROA+AwpbgRr7CDPdwogPadcDaaiZ7SQhpZSgXHjXb3
uHBDl+E6dkVAuN6zVaiJujG47kLrkQK4wlVHpnd1WNA+q8znnQGv8bALi6Oy
t/MvXB/RHbvutToEak7sUYWfbvWpB+DQuyEyBtesJuhVbbw18PRH7b0uR00T
rI8c2048VoGDh+eXh+y84yV4AFCS6fZEBcEJgG3Q6Ql0BpBfNBJMJPYaSXaM
o80cjMs5JhBrRQHosNOSxgjMefcV9w6UHfeGqMN3PKOuol1VpAPXUrMmjPAn
GwlDt7Gl12RycgHf54td3NjmWzvajhDusIriH2DAPg6IWlG2DQvdP7zJ5tDV
TQSidoP2qONx4CVunQlaWOp0dx3ShTQ0srxCY9OZA6VISQykXhTv0ZZaiLhZ
Nm8qXyyidSLVP+iX11a6co3yhzGO6OAc1o4JscOYttBsto1x+xXInvqO9nYU
C6ZLtMCDhkab6A4GcVOKR/zANcSiwBbpzZSrFBbtYiI82EsWEukwkjpOxDYr
lSFNdIRepNJOszz34bBtXF+NU+zKlFUqGRIHT+WlgDhMZefp3mRwKziyiYc1
v80grfUc682aGhyX9lXpLOk3fDmOtc0BmtDNKovtYiv7XGGLFcq/5UGC8UtT
SODCkkH0o9384XfnEctH6gVuGw/ZcVhpYapC5fwajYyVWeWIEgXY9Po3MxOn
0SYbQTzBXPvRrleWgBX6qcpyNZxVJGD8MQCz4I4BWgRwWbmw4HqkWEvqOO0F
V4J8z+XivmWP67LQd7dzqDsT58c7nt3D9CP66p66r/6sPlOfqy/Ulx/yLEE2
+g/9L3HpVryMKonYH0iB6WLp+cXapi4d65COcunZc1L1oUx58/Fo+N0/bz7C
Cv0ssvs5D0bt4MVK9Ohw58B/klP84bvwyXOCzcO6HJID6KTPRfiRL79GCxah
bXmNORkraTIn35CnHrW4FsxVU0lXZ8k2m7wpy85RZ5gY8k6eE/Zc3Os++OPw
ngTLIZTfAsq83fHv3i726/GGzl/s2e/eh+3ncyO/62z3f99eH3ywxFmH8Y33
vZZBqmjw3oJvFJ3pJq9dsEQT7wJUwcTwWhfk4qo1p4rF1vDTv7qYzGe1ez0c
Lp+yG4ylZo5ety0o7kkVSv3rY9xq6DNMbYqSyAm2zp3ZRNbPHZ4x+xfDCdFD
f5Z6JdFN+6Ko5DZagCSBT5Smrd2y7mtZ18WLLb4dqcdAa9jHZxZlZAuw5C2v
FnqGPR2q1DLbcvqHhh4xF3vqGoUx22mqaEUwY1aiR559NqpFU4G3Eqa51w7I
wbeg2HROsMVMx3DhQ+D4qs8afkMG8e5WyzYC5V60i6QkBecuphD0HxU7JC2A
98brnWG2UBDxJKKG3xkQ3gUU0Z5IhMEtQDfIoBCgz3M2PlfZvkgF9si4tlFx
i11O0jzXCKDcVmd53jB0cpxoRwMGnXbuMbCZp96Oxj6k7e+6RCjtcre7Eh35
SIKP9urDOVwrVyvYkVDjzfpY96JYIr40fsnkYIZ/qaJuALg5RnSgeWEoyqkO
x/8y6OvFaorIGJ7/mbZX/fL3hV2nHQ+Pv86rsi6nZf6xPP5ePPGybPA2/dn5
+v6n68/2jfrtH0fDo+h95hup+Bg0xJx3Jz/HP+7Q4X2fqmjEx0JfAVmJbOx3
tSZjgwbG+EAQDo4+fxY+ZzZEbR2DQxYDstXxvVIolCCSJsEVk0jykBNvbryj
7Why32FEfQN/FqqRZHsV6nAc6vk92X59uGNLS7ynNnCZCQcraP+jOGO2iziZ
yAbxbjwWmTA94aEjaY/+k7PGldFXKdpid7gvVlqmlRPPbDrVgdfQw7E6C9cV
6nEw416FA4IQMuuRW+RIHXS1b+9SYVi4831rHquDHQq1d+Hu2Heufi9QDJ14
F7msN/uWut8l9Mb1tpRxe9HEc1vClLMO2GmRkr8SrhDEaQHxPW0B+/L0HHr2
/aNzWrt7S7TD//73fwpoiXjm9cIUKUq/AgcddM3kJoLmCpSJezGIDDEFtN2O
C7x5T5cv/GO7RpcW78b/9o2A/A7D5Jw9atvJN0315DpE04clRy0sOfr/hSVI
P//rwI7dXlR++M23s0c3Dflors7tFYD+vWOOooIOe3fTcN8GBafudjbdooOv
ZsSNN2q3BB1jOfzyeZI8hM0/Hn4+3ucCoR4SNbSiBPPg/jGX8O56MA38GqCq
m6IwubyFXBnODCNlWzKRBTcbpEpqaTHOBfCNamUj9Si8RRwFCr2IF/8wB8l6
k9lFnFi3UiFlYrlC2q47kNeaOQ+ARoGyQj+ULvifl2pTqlx37HYpRi7O340v
uG+dJq4U9AoxMZMOYfPbHDUUOxRH+LoOt16llYiveO/t9JRfyVzpDVfqfWE6
yrUHUpKHG9fj1b7AzRTtDlYH2304TO1N4Ag1zB3XGtV/acI0s8Z3d7a14K2X
ndvyhEKB/aWZNlxoPnX/YIK0ViTJ5cNHUoI/O3l+sufb4XDI/TZcqZ9eFeV1
blJ5adsmr8diqk36l1sznVsjXdm3sZb8szBltXdUkvwfrHTdCRhRAAA=

-->

</rfc>
