<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="std"
      docName="draft-liu-rtgwg-wan-flowctrl-detect-00"
      ipr="trust200902"
      obsoletes=""
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">

 <!-- ***** FRONT MATTER ***** -->

 <front>
   <title abbrev="Flow Control Detection">Proactive Flow Control Point Detection in WAN</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-rtgwg-wan-flowctrl-detect-00"/>
   <author fullname="Yao Liu" surname="Liu">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city></city>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>liu.yao71@zte.com.cn</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
	
    <date year="2025"/>

   <!-- Meta-data Declarations -->

   <area></area>
    <workgroup>RTGWG</workgroup>
    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>Flow Control</keyword>
   <keyword>WAN</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
      <t>This document proposes a proactive detection mechanism for flow control in WAN, letting the congested node to know precisely which upstream point should the flow control message be sent to.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>  

<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 over wide-area networks (WANs). To achieve lossless data transmission over WAN, there're quite a few recent works aiming to deploy flow control mechanisms in WAN to avoid packet loss in case of congestion, e.g, <xref target="I-D.ruan-spring-priority-flow-control-sid"></xref> discusses how to deploy PFC(Priority-based Flow Control, <xref target="IEEE802.1Qbb" format="default" sectionFormat="of" derivedContent="IEEE802.1Qbb"/>) in WAN based on SRv6 data plane, and <xref target="I-D.liu-rtgwg-srv6-cc"></xref> proposes the method of precise/fine-grained flow control to achieve flow control at the network slice <xref target="RFC9543" format="default"></xref> level.</t>

<t>To conclude, to deploy flow control mechanism in WAN, the node facing congestion needs to generate a flow control message and sends it to the upstream point which is able to perform the flow control action (e.g, stop sending the corresponding traffic or reducing the sending rate). </t>
<t>The flow control message sending mechanism may include one of the follows:</t>

		<ul spacing="normal">
		<li>Multicast. Although standard PFC propagates congestion information via Ethernet multicast frames, multicast-based mechanism is not preferred in WAN since it cannot accurately reach upstream nodes, potentially leading to incorrect flow suppression and impacting unrelated services.</li>
		<li>Centralized configuration. The controller, with the awareness of all the node and the path information in the network, can configure the information of the upstream flow control point on each node that may generate the flow control  message. But this methods will bring extra burden for the controller in large scale networks.</li>
		<li>Distributed decision. The congested node decides the upstream node itself. The difficulty is that the congested node needs to be aware of the necessary information to make the proper decision. </li>
		</ul>
	<t>Based on the above considerations, this document proposes a proactive detection mechanism for flow control in WAN, letting the congested node to know precisely which upstream point should the flow control message be sent to.</t>
<t>The detailed flow control mechanism itself is out of the scope of this document. </t>
	  </section>

<section numbered="true" toc="default">
        <name>Terminology</name>
		<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"></xref> <xref target="RFC8174" format="default"></xref> when, and only when, they appear in all capitals, as shown here.</t>
      </section>


	<section numbered="true" toc="default">
	<name>Flow Control in WAN</name>
	

<figure>
		  <artwork align="center" name="" ><![CDATA[
+----------+                                        +----------+
|   Data   |                                        |   Data   |
| center A |                                        | center B |
+----------+                                        +----------+
     |                                Congestion         ^
     |                                      |            |
     v                                      v            |
   +----+  -->  +----+  -->  +----+  -->  +----+  -->  +----+
   | R1 |       | R2 |       | R3 |       | R4 |       | R5 |
   +----+       +----+       +----+       +----+       +----+
           ]]></artwork>
</figure>		
	
<t>As shown in Figure 1, data center A and data center B are connected via a path(R1-R2-R3-R4-R5) in WAN.</t>
<t>R1,R2,R4 and R5 are able to perform the function of flow control, and R3 is a legacy device which doesn't support any flow control technology.</t>
<t>When congestion occurs at R4, R4 generates a flow control message (e.g, the PFC pause frame defined in <xref target="IEEE802.1Qbb" format="default" sectionFormat="of" derivedContent="IEEE802.1Qbb"/>, the congestion notification message defined in <xref target="I-D.liu-rtgwg-srv6-cc"></xref>) to the nearest upstream stream node that is able to perform flow control, i.e, node R2.</t>

<t>R2 receives the notification and performs the flow control based on the content of the notification message and local capacity. If R2 cannot handle the congestion, a flow control message is forwarded further upstream to R1.</t> 

</section>



	
	
<section numbered="true" toc="default">
	<name>Proactive Flow Control Point Detection Method</name>
	
<t>The basic concept of the proactive flow control point detection method in this document is to send a flow control detection packet along the packet forwarding path.</t>

<t>When receiving the flow control detection packet, the node that is capable of flow control updates the packet with its own information(e.g, the interface address or the corresponding SRv6 ajacency SID of the interface), so the detection packet will always carry the information of the nearest upstream node that's capable of flow control and the node receiving the detection packet would store this information and use it as the destination of the flow control message when congestion occurs.</t>

<section numbered="true" toc="default">
	<name>Packet Format</name>
 <t>The following information is required in the flow control detection packet: </t>
		<ul spacing="normal">
		<li>Upstream flow control point identifier: indicate the nearest upstream point(interface of the node) that is able to perform flow control for the corresponding traffic flow  </li>
		<li>Flow control object identifier: used in the scenario of precise flow control to provide the extra information of flow control object, e.g, if the flow control is at the network slice level, the network slice ID is the flow control object identifier</li>
		<li>Path identifier: used to identify the path of the traffic flow when necessary.</li>
		</ul>

<t>A new Hop-by-Hop option (Section 4.3 of <xref target="RFC8200" format="default"></xref>) type is defined in this document to carry the fields above for flow control point detection. Its format is shown in Figure 2.</t>
<figure>
		  <artwork align="center" name=""><![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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  |  Opt Data Len |		  
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Flags     | Upstream Type | Context Type  |  Unassigned   |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ~            Upstream Point Info (128 bits)                     ~
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+	 
     ~                        Context                                ~
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
</figure>
<t>Option Type: 8-bit identifier of the type of option. The type of Flow Control Detection option is TBA.</t>
<t>Opt Data Len: 8-bit unsigned integer indicates the length of the option Data field of this option, in octets.</t>
<t>Flags: 8-bit flags field. The most significant bit is defined in this document.</t>


		  <artwork align="center" name=""><![CDATA[
             0 1 2 3 4 5 6 7
            +-+-+-+-+-+-+-+-+
            |P|U U U U U U U|
            +-+-+-+-+-+-+-+-+
           ]]></artwork>

		<ul spacing="normal">
		<li>P (PFC): The P flag is used to indicate whether this flow control detection packet is used for PFC.	</li>
		</ul>		   
		   
<t>Upstream Type: indicates the type of the upstream point that is able perform flow control for the traffic. When set to 1, the upstream Point Info carries a 128-bit IPv6 interface address, when set to 2, the upstream Point Info carries a 128-bit SRv6 adj-SID.</t>	   
<t>Upstream Point Info: 128-bit field carrying the corresponding upstream point information based on the value of the Upstream Type. </t>		   
<t>Context Type: The Context Type field is an 8-bit bitmap that specifies which contexts are included in the Context field of the packet. Each bit in this field corresponds to a specific context. When a bit is set to 1, it indicates the presence of the corresponding parameter, where,</t>		   

		<ul spacing="normal">
		<li>bit 0: indicates the presence of the path identifier field when set, the format of the path identifier field is shown as in section 4.1.1</li>
		<li>bit 1: indicates the presence of the flow control object identifier when set,the format of the flow control object is shown as in section 4.1.2.</li>
		</ul>
<t>The packet fields defined above can be carried in-band or out-band as long as the packet is forwarded along the same path of the normal traffic flow</t>	

<section numbered="true" toc="default">
	<name>bit 0 Context</name>
<t>When bit0 of Context Type is 1, the following context is included to indicate the identifier of the path:</t>
		  <artwork align="center" name=""><![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>

<t>Path ID: used to identify a path in the network. The scope of the Path ID is implementation specific.</t>

	</section>

<section numbered="true" toc="default">
	<name>bit 1 Context</name>
<t>When bit1 of Context Type is 1, the following context is included to carry the identifier of the flow control object when precise flow control mechanism is used:</t>
		  <artwork align="center" name=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   O-Type      |         Reserved                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~              Flow Control Object ID                           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>

<t>O-Type: 8-bit field, indicates the type of Flow Control Object ID. When the value of the O-Type is 1, it indicates that Flow Control Object ID carries a 32-bit network slice ID.</t>
	</section> 	

			   
		   	</section> 
	
<section numbered="true" toc="default">
	<name>Processing Procedures</name>	
<t>As in Figure 1, the traffic of network slice 1 is forwarded along an SRv6 path, the corresponding SID list is &lt;SID-R12,SID-R23,SID-R45&gt;, whereas SID-R12 is the adjacency SID of R1 for the adjacency between R1 and R2, SID-R23 and SID-R45 are also the corresponding adj-SID on R2 and R4.</t>
<t>And precise flow control is enabled in the network to control the congestion at the network slice level. </t>
<t>R1,R2,R4 and R5 are able to perform flow control at the network slice level, and R3 is a legacy device which doesn't support any flow control technology.</t>
<t>To detect the flow control point along the path of slice 1, R1 sends a flow control detection packet in band with the traffic of slice 1, since R1 is capable of flow control, R1 puts SID-R12 into the Upstream Point Info and the Flow Control Object ID field is set to slice-ID 1.</t>
<t>When R2 receives the packet, it stores the mapping between slice 1 and SID-R12, and updates the Flow Control Object ID with its own information, i.e, SID-R23.</t>
<t>Since R3 doesn't recognize the flow control detection packet, it just forwards the packet based on the SID-list and slice-ID of the packet.</t>
<t>When R4 receives the packet, it stores the mapping between slice 1 and SID-R23, and updates the Flow Control Object ID with its own information, i.e, SID-R45.</t>
<t>When R5 receives the packet, it stores the mapping between slice 1 and SID-R45, and since R5 is the endpoint, it stops processing the packet further.</t>
<t>When congestion occurs at R4 in slice 1, R4 would generate a flow control message for slice 1, and based on the local information, R4 finds the information of  upstream flow control point, i.e, SID-R23, and uses it as the destination of the flow control message.</t>	
<t>When R2 receives the flow control message with DA set as local adj-SID SID-R23, R2 perform the flow control for slice 1 on the port related with SID-R23 based on the context of the flow control message.</t>
<t>If R2 is not able to control the congestion and generates a flow control message further, R2 would send the message with DA set to SID-R12 based on the local information.</t>
	</section> 
</section>
	


<section numbered="true" toc="default">
	<name>Security Considerations</name>
		
		<t>The security considerations with IPv6 Hop-by-Hop Options header are described in <xref target="RFC8200" format="default"></xref>,<xref target="RFC7045" format="default">, </xref><xref target="RFC9098" format="default"></xref>, <xref target="RFC9099" format="default"></xref>, <xref target="RFC9673" format="default"></xref>. This document introduces a new IPv6 Hop-by-Hop option which is either processed in the fast path or ignored by network nodes, thus it does not introduce additional security issues.</t>
		
		
</section>	

<section numbered="true" toc="default">
	<name>IANA Considerations</name>
		<t>This document requests IANA to assign a new option type from "Destination Options and Hop-by-Hop Options" registry <xref target="IANA-HBH" format="default" sectionFormat="of" derivedContent="IANA-HBH"/>.</t>
		
		  <artwork align="center" name=""><![CDATA[
  Hex Value   Binary Value   Description      Reference
              act chg rest
  --------------------------------------------------------
  TBA         00   0  tba   Flow Control     [this document]
                            Detection Option      

           ]]></artwork>		
	
	

	</section>



	
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>

   <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

		<?rfc include="reference.RFC.2119.xml"?>
		<?rfc include="reference.RFC.8174.xml"?>		
		<?rfc include="reference.RFC.8200.xml"?>
		<?rfc include="reference.RFC.7045.xml"?>
		<?rfc include="reference.RFC.9098.xml"?>		
 		<?rfc include="reference.RFC.9099.xml"?>
		<?rfc include="reference.RFC.9673.xml"?> 
		<reference anchor="IANA-HBH" target="https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml" quoteTitle="true" derivedAnchor="IANA-HBH">
          <front>
            <title>Internet Protocol Version 6 (IPv6) Parameters</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
	  
      </references>
      <references>
        <name>Informative References</name>
	<?rfc include="reference.I-D.ruan-spring-priority-flow-control-sid.xml"?>
	<?rfc include="reference.I-D.liu-rtgwg-srv6-cc.xml"?>
	<?rfc include="reference.RFC.9543.xml"?>
      <reference anchor="IEEE802.1Qbb" target="https://standards.ieee.org/ieee/802.1Qbb/4361.html" quoteTitle="true" derivedAnchor="IEEE802.1Qbb">
        <front>
          <title>IEEE Standard for Local and metropolitan area networks--Media Access Control (MAC) Bridges and Virtual Bridged Local Area Networks--Amendment 17: Priority-based Flow Control</title>
          <author>
            <organization showOnFrontPage="true">IEEE</organization>
          </author>
          <date month="September" year="2011"/>
        </front>
        <seriesInfo name="DOI" value="10.1109/IEEESTD.2011.6032693"/>
        <seriesInfo name="IEEE Std" value="802.1Qbb-2011"/>
      </reference> 	
      </references>
    </references>


 </back>
</rfc>
