<?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-liu-spring-srv6-cc-01" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="SRv6 Path CC">Congestion Control Based on SRv6 Path</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-spring-srv6-cc-01"/>
    <author initials="Y." surname="Liu" fullname="Yisong Liu">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>
    <author initials="S." surname="Peng" fullname="Shuping Peng">
      <organization>Huawei</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>pengshuping@huawei.com</email>
      </address>
    </author>
    <author initials="C." surname="Lin" fullname="Changwang Lin">
      <organization>New H3C Technologies</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Routing</area>
    <workgroup>SPRING</workgroup>
    <keyword>Network Slice</keyword>
    <keyword>Congestion Control</keyword>
    <abstract>
      <?line 44?>

<t>This document describes a congestion control solution based on SRv6. It defines mechanisms for congestion notification and flow control within an SRv6-based network, optimizing congestion handling through hierarchical congestion control messages along SRv6 paths.</t>
    </abstract>
  </front>
  <middle>
    <?line 49?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The SRv6 network needs a reliable and efficient mechanism for handling congestion across different segments. Current congestion control techniques lack the ability to handle congestion in a fine-grained, per-path manner. This draft proposes a solution that uses SRv6 path segments and slicing to notify upstream nodes and take actions to reduce congestion. The key idea is to notify upstream nodes about congestion and enable flow control based on SRv6 segments (SID lists). This process is integrated with the SRv6 network's slicing capabilities to provide fine-grained control over network traffic, ensuring lossless transmission of data across SRv6 network.</t>
      <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="background-and-motivation">
      <name>Background and Motivation</name>
      <t>Priority Flow Control (PFC) provides hop-by-hop, priority-based traffic control. Compared to the traditional Ethernet Pause mechanism, PFC enables more precise flow management by creating multiple virtual channels on a link, each of which can be paused or resumed independently, ensuring that traffic of different priorities does not interfere with one another.</t>
      <t>With the growth of intelligent computing services, scenarios such as disaggregated computing and real-time inference require the lossless transmission of large volumes of bursty traffic. In interconnected wide-area networks (WANs), when network congestion occurs, the congestion status must be quickly propagated upstream to both head-end devices and edge devices, enabling hop-by-hop reduction of sending rates. These intelligent computing WANs typically use SRv6 Policies for transport. However, once traffic enters a policy, traditional PFC mechanisms face the following three major challenges:</t>
      <ol spacing="normal" type="1"><li>
          <t>Imprecise Congestion Notification: PFC propagates congestion information via Ethernet multicast frames. In WANs with complex topologies, multicast-based congestion signaling cannot accurately reach upstream SRv6 nodes, potentially leading to incorrect flow suppression and impacting unrelated services.</t>
        </li>
        <li>
          <t>Long Path Latency: WAN paths are long and have significant latency. If congestion signals must be sent all the way back to the data center or edge devices, it results in prolonged traffic degradation. Therefore, upstream control on the SRv6 path is needed to respond promptly.</t>
        </li>
        <li>
          <t>Control Overhead at the Head Node: A single head node in the WAN may manage numerous SRv6 paths. If all congestion messages are sent back to the head node, it could become a processing bottleneck. Performing distributed traffic control at intermediate nodes along the SRv6 path can alleviate the burden on the head node.</t>
        </li>
      </ol>
    </section>
    <section anchor="srv6-congestion-notification-mechanism">
      <name>SRv6 congestion notification Mechanism</name>
      <figure anchor="process">
        <name>Congestion Notification in SRv6 Network</name>
        <artwork><![CDATA[
+----------+                                        +----------+
|   Data   |                                        |   Data   |
| center A |                                        | center B |
+----------+                                        +----------+
     |                          Congestion Occurs        ^
     |                                      |            |
     v                                      v            |
   +----+  -->  +----+  -->  +----+  -->  +----+  -->  +----+ 
   | R1 |       | R2 |       | R3 |       | R4 |       | R5 |
   +----+       +----+       +----+       +----+       +----+       
                                            |   
      <-------------------------------------|   
              Congestion  Notification
]]></artwork>
      </figure>
      <t>Consider two data centers, A and B, connected via an SRv6 path defined as R1 -&gt; R2 -&gt; R3 -&gt; R4 -&gt; R5, as shown in <xref target="process"/>. The process follows these steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>The head node R1 encapsulates the SID list (SRv6 path) containing R2 -&gt; R3 -&gt; R4 -&gt; R5. It may optionally carry an SRv6 path segment (PSID) and starts forwarding the data. The source address is R1, and the destination address is the SID of R2.</t>
        </li>
        <li>
          <t>Intermediate nodes (R2, R3, R4) forward data according to the SID list, with each node checking its local SID table for forwarding and slice-related information.</t>
        </li>
        <li>
          <t>When a node, such as R4, faces congestion(such as queue overload), it sends a congestion notification message to the previous node in the SID list (R3), including congestion-related information such as SID list, PSID, and slice ID.</t>
        </li>
        <li>
          <t>R3 receives the notification and adjusts the forwarding rate based on local capacity. If R3 cannot handle the congestion, the notification is forwarded further upstream to R2 and so on.</t>
        </li>
        <li>
          <t>If no node can manage the congestion, the head node R1 adjusts the path load balancing or selects an alternate path to mitigate the congestion.</t>
        </li>
      </ol>
    </section>
    <section anchor="congestion-notification-message-format">
      <name>Congestion Notification Message Format</name>
      <t>The congestion notification message can be encapsulated in either ICMPv6 <xref target="RFC4443"/> or UDP <xref target="RFC768"/> messages. Regardless of the encapsulation format, they contains following fields:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Checksum</strong>: Used for error-checking the packet.</t>
        </li>
        <li>
          <t><strong>Flags</strong>: Contains special flags. The first bit is <tt>S</tt> bit, indicating the presence of a Slice ID. Other bit is not defined.</t>
        </li>
        <li>
          <t><strong>SRv6 Source Address</strong>: The source address of the SRv6 message.</t>
        </li>
        <li>
          <t><strong>Segment Routing Header (SRH)</strong>: This is the routing header for SRv6, which defines the path the packet should take. The specific details of SRv6 path segments are described in <xref target="RFC8754"/>.</t>
        </li>
        <li>
          <t><strong>Slice ID</strong>: The identifier for the slice experiencing congestion.</t>
        </li>
        <li>
          <t><strong>Flow Queue Size</strong>: The size of the congestion queue at the node.</t>
        </li>
        <li>
          <t><strong>Flow Utilized Ratio</strong>: The utilization ratio for the flow, showing how much of the available queue is being used.</t>
        </li>
        <li>
          <t><strong>Behavior TLV</strong>: Variable-length fields that define the actions of user queues to take in response to congestion, such as reducing or pausing traffic. See Section 4.3 for the specific format.</t>
        </li>
      </ol>
      <section anchor="icmpv6-message-format">
        <name>ICMPv6 message format</name>
        <figure anchor="ICMPv6">
          <name>Congestion Notification in ICMPv6</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      |      Code     |           Checksum            |
+---------------+---------------+-------------------------------+
|S|    Flags    |                   Reserved                    |
+-+-------------+-----------------------------------------------+
|          SRv6 Source Address (128 bits IPv6 address)          |
----------------------------------------------------------------+
|                                                               +
~                   Segment Routing Header ~                    ~
|                                                               |
+---------------------------------------------------------------+
|                            Slice ID                           |
+---------------------------------------------------------------+
|                        Flow Queue Size                        |
+---------------------------------------------------------------+
|                      Flow Utilized Ratio                      |
+---------------------------------------------------------------+
|                         Behavior TLVs                         |
~                                                               ~
+---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>Where:</t>
        <t><strong>Type</strong> and <strong>Code</strong>: These fields indicate the specific congestion notification type and its sub-type, providing details about the kind of congestion event being reported.</t>
      </section>
      <section anchor="udp-packet">
        <name>UDP packet</name>
        <figure anchor="UDP">
          <name>Congestion Notification in UDP</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 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        UDP source port        |      UDP destination port     |
+-------------------------------+-------------------------------+
|          UDP length           |           UDP checksum        |
+-------------------------------+-------------------------------+
|S|    Flags    |                   Reserved                    |
+-+-------------+-----------------------------------------------+
|          SRv6 Source Address (128 bits IPv6 address)          |
----------------------------------------------------------------+
|                                                               +
~                   Segment Routing Header ~                    ~
|                                                               |
+---------------------------------------------------------------+
|                            Slice ID                           |
+---------------------------------------------------------------+
|                        Flow Queue Size                        |
+---------------------------------------------------------------+
|                      Flow Utilized Ratio                      |
+---------------------------------------------------------------+
|                         Behavior TLVs                         |
~                                                               ~
+---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>Where:</t>
        <t><strong>UDP Destination port</strong>: A new port indicates the congestion notification packet.</t>
      </section>
      <section anchor="behavior">
        <name>Behavior TLV</name>
        <t>The format for the behavior TLV is defined as follows:</t>
        <figure anchor="behavior-tlv"><name>Behavior TLV</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            |              Length           |
+---------------------------------------------------------------+
|                      Behavior Value                           ~
+---------------------------------------------------------------+
]]></artwork></figure>
        <t>Where:</t>
        <t><strong>Type</strong>: 2 octet value that indicates the behavior type.</t>
        <t><strong>Length</strong>: 2 octet value that indicates the length of the following Behavior Value.</t>
        <t><strong>Behavior Value</strong>: Variable-length value that indicates the action of user queue to take in response to congestion.</t>
        <t>This document defines two behaviors, namely Type 1 and Type 2. The specific formats for type 1 and type 2 are as follows.</t>
        <t>The format for type 1 behavior TLV:</t>
        <figure anchor="type-1"><name>Type 1 Behavior TLV</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 = 1           |          Length = 4           |
+---------------------------------------------------------------+
|     Action    |          Pause-Time           |    Reserved   |
+---------------------------------------------------------------+
]]></artwork></figure>
        <t>Where:</t>
        <t><strong>Type = 1</strong>: indicates the action for all user queues.</t>
        <t><strong>Action</strong>: 1 octet value that indicates the action of one user queue to take in response to congestion. 
        The first two bits represent specific actions, 00 for no action, 01 for pausing traffic, and 10 for reducing traffic. 
        The last six bits represent the relative number for reducing traffic, and the reference value of the relative number is 
        defined by the user according to specific scenarios.</t>
        <t><strong>Pause-Time</strong>: 2 octet value that indicates the time for the corresponding action to be execute, in units of microseconds.
        When the action execution exceeds the Pause-Time, traffic MUST be immediately recovered.</t>
        <t><strong>Reserved</strong>: Reserved Field.</t>
        <t>The format for type 2 behavior TLV:</t>
        <figure anchor="type-2"><name>Type 2 Behavior TLV</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 = 2           |          Length = 32          |
+---------------------------------------------------------------+
|     Action[0] |          Pause-Time[0]        |  Reserved[0]  |
+---------------------------------------------------------------+
|     Action[1] |          Pause-Time[1]        |  Reserved[1]  |
+---------------------------------------------------------------+
|     Action[2] |          Pause-Time[2]        |  Reserved[2]  |
+---------------------------------------------------------------+
|     Action[3] |          Pause-Time[3]        |  Reserved[3]  |
+---------------------------------------------------------------+
|     Action[4] |          Pause-Time[4]        |  Reserved[4]  |
+---------------------------------------------------------------+
|     Action[5] |          Pause-Time[5]        |  Reserved[5]  |
+---------------------------------------------------------------+
|     Action[6] |          Pause-Time[6]        |  Reserved[6]  |
+---------------------------------------------------------------+
|     Action[7] |          Pause-Time[7]        |  Reserved[7]  |
+---------------------------------------------------------------+
]]></artwork></figure>
        <t>Where:</t>
        <t><strong>Type = 2</strong>: indicates the action for the 8 user queues.</t>
      </section>
    </section>
    <section anchor="srv6-congestion-notification-running-process">
      <name>SRv6 congestion notification running process</name>
      <t>The SID configuration of each node in the figure is as follows: End.X SIDs of nodes R1 to R5 are A::1:1,A::2:1,A::3:1,A::4:1,A::5:1, and the slice ID corresponding to each SID is 1. The VPN SID of the R5 node is A::5:F.</t>
      <t>The running process of each node is as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>The data packet sent by R1 is encapsulated with the SRv6 Policy. The SID list is {A::2:1, A::3:1, A::4:1, A::5:F}. The source address is A::1::, and the destination address is A::2:1.</t>
        </li>
        <li>
          <t>Packets are forwarded based on the SID list of SRv6 paths. The destination address of the packet forwarded by R4 is replaced with A::5:F. However, the queue of slice 1 on the outbound interface of R4 is congested. The queue size of slice 1 is 200 Mb. When the current usage exceeds the threshold(75%), the congestion message needs to be advertised to the previous hop of the SRv6 path.</t>
        </li>
        <li>
          <t>R4 encapsulates the ICMPv6 packet with the source address A::4:1 and the destination address A::3:1 into the ICMPv6 packet. The ICMPv6 packet carries the source address A::1:: of the original SRv6 packet and the entire SRH header, and encapsulates the congestion information into the ICMPv6 packet. The following information includes the slice ID of 1, the size of the congested queue is 200 Mb, the usage is 75%, and the recommended congestion control behavior, for example, the sending rate is reduced by 30%.</t>
        </li>
        <li>
          <t>R3 receives the congestion notification packet, checks that the destination address is local, and searches, according to the SID list in the SRH, for the forwarding queue or slice corresponding to the local SID, or for the forwarding queue or slice corresponding to the PSID. In this example, the information about the slice 1 already carried does not need to be searched again. Reduce the local sending rate based on the situation that the 200 Mb congestion queue is 75% occupied and the buffer capacity of the local queue. In this example, reduce the sending rate by 30%.</t>
        </li>
        <li>
          <t>If R3 cannot perform congestion control after receiving  the congestion notification packet, for example, the local queue buffer capacity is insufficient, R3 continues to send the congestion notification packet to the previous hop of the SRv6 path. The packet is encapsulated in an ICMPv6 packet and the source address remains to be R4' A::4:1. The destination address is changed to A::2:1. In addition, other information carried in the packet remains unchanged, but the congestion control action can be adjusted. As the path for the congestion notification becomes longer, the congestion may deteriorate. For example, the sending rate can be reduced by at least 50%.</t>
        </li>
      </ol>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document does not introduce any new security considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests IANA to allocate a new ICMP message type and UDP port.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8754">
        <front>
          <title>IPv6 Segment Routing Header (SRH)</title>
          <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
          <author fullname="D. Dukes" initials="D." role="editor" surname="Dukes"/>
          <author fullname="S. Previdi" initials="S." surname="Previdi"/>
          <author fullname="J. Leddy" initials="J." surname="Leddy"/>
          <author fullname="S. Matsushima" initials="S." surname="Matsushima"/>
          <author fullname="D. Voyer" initials="D." surname="Voyer"/>
          <date month="March" year="2020"/>
          <abstract>
            <t>Segment Routing can be applied to the IPv6 data plane using a new type of Routing Extension Header called the Segment Routing Header (SRH). This document describes the SRH and how it is used by nodes that are Segment Routing (SR) capable.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8754"/>
        <seriesInfo name="DOI" value="10.17487/RFC8754"/>
      </reference>
      <reference anchor="RFC4443">
        <front>
          <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
          <author fullname="A. Conta" initials="A." surname="Conta"/>
          <author fullname="S. Deering" initials="S." surname="Deering"/>
          <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
          <date month="March" year="2006"/>
          <abstract>
            <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="89"/>
        <seriesInfo name="RFC" value="4443"/>
        <seriesInfo name="DOI" value="10.17487/RFC4443"/>
      </reference>
      <reference anchor="RFC768">
        <front>
          <title>User Datagram Protocol</title>
          <author fullname="J. Postel" initials="J." surname="Postel"/>
          <date month="August" year="1980"/>
        </front>
        <seriesInfo name="STD" value="6"/>
        <seriesInfo name="RFC" value="768"/>
        <seriesInfo name="DOI" value="10.17487/RFC0768"/>
      </reference>
      <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>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
