<?xml version="1.0" encoding="utf-8"?>
<rfc category="info" ipr="trust200902" docName="draft-psenak-igp-dcm-00" submissionType="IETF" version="3" xmlns:xi="http://www.w3.org/2001/XInclude">
  <front>
    <title abbrev="ISIS-DCM">Distributed Congestion Mitigation</title>
    <author fullname="Peter Psenak" initials="P." surname="Psenak">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>Apollo Business Center</street>
          <street>Mlynske nivy 43</street>
          <city>Bratislava</city>
          <code>82109</code>
          <country>Slovakia</country>
        </postal>
        <email>ppsenak@cisco.com</email>
      </address>
    </author>
    <author fullname="Jakub Horn" initials="J." surname="Horn">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <city>Milpitas</city>
          <code>95035</code>
          <region>CA</region>
          <country>USA</country>
        </postal>
        <email>jakuhorn@cisco.com</email>
      </address>
    </author>
    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization showOnFrontPage="true">Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author fullname="Guillaume Gryszata" initials="G." surname="Gryszata">
      <organization showOnFrontPage="true">Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>guillaume.gryszata@orange.com</email>
      </address>
    </author>
    <date year="2026"/>
    
    <abstract>
      <t>This document describes the Distributed Congestion Mitigation (DCM) mechanism 
      using the Interior Gateway Protocols (IGPs) such as IS-IS <xref target="RFC1195"/>, 
      OSPFv2 <xref target="RFC2328"/>, or OSPFv3 <xref target="RFC5340"/>. 
      DCM is a tactical, distributed mechanism, designed to mitigate network congestion 
      by offloading traffic to an alternate, congestion-free paths. DCM is fully integrated 
      in IGPs.</t>
    </abstract>
    
  </front>
  
  <middle>
  
    <section title="Introduction">
      <t>Network capacity planning is a proactive strategy to deal with the network 
      congestion. Even with the proper capacity planning, network congestion arises 
      from oversubscription, link or node failures, and from the shifting traffic patterns. 
      DCM provides a reactive, distributed mechanism to mitigate local congestion by 
      leveraging the interface utilization monitoring, IGP link administrative groups 
      <xref target="RFC8919"/>,  <xref target="RFC8920"/>, and Flex-Algo
      <xref target="RFC9350"/> path computation and forwarding.</t>
    </section>
    
    <section title="Requirements Language">
      <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"/> 
      <xref target="RFC8174"/> when, and only when, they appear in all capitals, as 
      shown here.</t>
    </section>
    
    <section title="Terminology">
      <dl>
        
        <dt>ABR:</dt><dd>Area Border Router.</dd>
        
        <dt>ASBR:</dt><dd>Autonomous System Border Router.</dd>
        
        <dt>DCM:</dt><dd>Distributed Congestion Mitigation.</dd>
        
        <dt>FAD:</dt><dd>Flex-algo Definition <xref target="RFC9350"/>.</dd>
        
        <dt>OFA:</dt><dd>Offloading Flex-Algo, used for traffic offloading.</dd>
        
        <dt>Congestion Affinity:</dt><dd>Administrative group used to exclude congested links 
        from the OFA topology.</dd>
        
        <dt>High Utilization Affinity:</dt><dd>Administrative group used to signal high utilization 
        and prevent additional offload traffic.</dd>
        
        <dt>Congestion Threshold:</dt><dd>The utilization level at which a link is marked
         with Congestion affinity. Traffic offloading is initiated for the local link.</dd>
         
        <dt>Non-Congestion Threshold:</dt><dd>The utilization level at which the additional
        offloading on the link stops. If no traffic is offloaded from the local link, the 
        Congestion affinity is removed.</dd>
        
        <dt>High Utilization Threshold:</dt><dd>The utilization level at which a link is
         marked with High Utilization affinity to stabilize the load.</dd>
         
        <dt>Restore Threshold:</dt><dd>The utilization level at which traffic restoration
         is initiated.</dd>
         
        <dt>Low Utilization Threshold:</dt><dd>The utilization level used to remove 
        High Utilization affinity.</dd>
        
        <dt>LSP:</dt><dd>Link State Packet.</dd>
        
        <dt>LSA:</dt><dd>Link State Advertisement.</dd>
      </dl>
      
    </section>
    <section title="DCM Requirements">
      <t>DCM aims to offload traffic from the locally congested links. Some of the 
      requirements of DCM are listed below:</t>
      <ul>
        <li>DCM offloaded traffic MUST avoid any congested link.</li>
        
        <li>DCM offloaded traffic MUST NOT create new congestion in the network.</li>
        
        <li>DCM MUST support multiple congested links in the network.</li>
        
        <li>Offloaded traffic MAY be protected via LFA <xref target="RFC5286"/> 
        or TI-LFA <xref target="RFC9855"/>. A microloop avoidance MAY be used
        for the offloaded traffic.</li>
      </ul>
    </section>
    
    <section title="Control Plane">
    
      <t>DCM provisions a dedicated OFA. OFA's FAD is set to exclude the Congestion 
      affinity. Any link declared congested MUST be excluded from the OFA topology by 
      setting the Congestion affinity. This allows the OFA to natively route traffic 
      around all congested links.</t>
      
      <t>OFA is only used to carry the offloaded traffic.</t>
      
      <t>DCM can be used to offload Algorithm 0 traffic or traffic of any Flex-Algo, 
      which is not used as OFA itself. If the DCM is used for Flex-algo traffic, the OFA, 
      on top of using the Congestion affinity exclude rule, SHOULD inherit the FAD 
      algorithm-type, constraints, and metric type from the original Flex-algo for 
      which the DCM is done.</t>
            
      <t>Multiple OFAs can coexist inside the IGP area.</t>
      
    </section>
    
    <section title="Local Congestion Monitoring and Detection">
    
      <t>DCM utilizes precise congestion monitoring and detection mechanisms for the local
      interfaces on the router. Some of the characteristics of such monitoring are:</t><ul>
        
        <li>Interface output rates are collected periodically and are statistically 
        adjusted to avoid oscillations and ensure stability. An Exponential Weighted 
        Moving Average (EWMA) is an example of such adjustments, used for smoothing 
        the output rate samples.</li>
             
        <li>Trend monitoring may optionally be employed to enhance detection performance. 
        When an upward trend is detected, a more aggressive weighting may be applied to 
        react faster to significant changes, thereby preventing or minimizing any traffic 
        drop. Stabilization windows and trend thresholds can be used to detect and confirm 
        sustained upward trends in the link utilization.</li>
        
        <li>Some noise filtering is required for short-duration utilization spikes.</li>
        
        <li>A more granular traffic rate data, like per destination prefix or per flow, 
        MAY be collected to find out the destinations that are significantly contributing 
        to the local congestion.</li>
         
      </ul>
    </section>
    
    <section title="Traffic Offloading and Restoring">
      <t>Traffic offloading is performed to divert the traffic onto the shortest path 
      that avoids any congested links. The offloading process adheres to the following 
      principles:</t>
      <ul>
      
        <li>Only traffic from locally congested interfaces are offloaded at each node.</li>
        
        <li>Offloading MUST NOT be done for Flex-algo that is used as OFA.</li>
        
        <li>Offloading MUST NOT be done if there is no valid path to the destination node
        in the OFA topology.</li>
        
        <li>Additional offloading MUST NOT be done, if the path to the destination node 
        in the OFA topology crosses any link that is advertised with the 
        High Utilization Affinity.</li>
        
        <li>The offload path is calculated for each prefix individually.</li>
        
        <li>Any destination with the primary path over the locally congested link is 
        eligible for offloading. Offloading may be subject to user-defined 
        filtering.</li>
        
        <li>A more granular traffic rate data, like per destination prefix or per flow, 
        MAY be used to decide which traffic is offloaded.</li>
        
        <li>Traffic is diverted using the Unequal Cost Multi-Path (UCMP) across the primary 
        path and the offload path.</li>
        
        <li>Offloading and restoring is executed progressively in periodic iterations, 
        utilizing a jittered delay between each step, to ensure network stability.</li>
         
        <li>At each iteration, a small increment of traffic (e.g., 5%) is offloaded or 
        restored.</li>
        
        <li>The specific amount of traffic to be offloaded is calculated based on the 
        lowest capacity link identified on the path from the offloading node to the 
        destination node inside the OFA.</li>
             
        <li>Offloading starts when the Congestion Threshold is exceeded on the local interface. 
        Additional offloading ceases when the utilization on the local interface drops below 
        Non-Congestion Threshold.</li>
        
        <li>If the calculated OFA path from the offloading node to the destination node 
        changes (i.e., any topological modification affecting the end-to-end path) while 
        traffic for a prefix destined to that node is being actively offloaded, 
        the offloading for that prefix MUST be terminated. The offloading process 
        for that prefix MUST then be re-initiated from the initial state, following 
        the standard iterative process.</li>
        
        <li>Restoration of the offloaded traffic to the primary path starts 
        when the utilization on the local interface drops below the Restore Threshold. 
        Restoration ceases when the utilization on the local interface exceeds the 
        Non-congestion threshold, or if all traffic is restored.</li>
        
      </ul>
    </section>
    
    <section title="Offloaded Traffic Forwarding">
      <t>Offloaded traffic is routed via OFA paths, requiring the switching of the 
      traffic's algorithm to the OFA. The forwarding behavior is defined as follows:</t>
      <ul>
        <li>In the MPLS network (intra-area): The top label is replaced by the OFA label 
        of the destination node.</li>
        
        <li>In the MPLS networks (inter-area/inter-domain): The OFA label of the 
        destination ABR/ASBR is pushed on top of the label stack.</li>
        
        <li>In the SRv6 networks: The mechanism requires the push of the OFA node SID 
        (e.g., uN, END) of the destination node. Alternatively, an adjacency SID 
        (e.g., uA, END-X) of the penultimate hop of the destination node towards 
        the destination node itself in the OFA topology may be used, to avoid the presence 
        of multiple local SIDs at the destination node.</li>
        
      </ul>
    </section>
    
    <section anchor="oscillation-avoidance" title="Oscillation Avoidance">
      
      <t>To limit the likelihood of oscillations, DCM uses two affinity-based signals 
      based on link utilization thresholds as illustrated below:</t>
      
      <artwork type="ascii-art" align="center">
<![CDATA[
Utilization (%)
  100 +-------+
      |       |
      |       |
   90 |-------| Congestion Threshold
      |       |     if (>=) Set Congestion Affinity,
      |       |             Start offloading
   80 |-------| Non-congestion threshold
      |       |     if (<=) Unset Congestion Affinity,
      |       |             Stop additional offloading
   70 |-------| High utilization threshold
      |       |     if (>=) Mark High Utilization
      |       |
   60 |-------| Restore Threshold
      |       |     if (<=) Start restoring traffic
      |       |
   50 |-------| Low utilization threshold
      |       |     if (<=) Unmark High Utilization
      |       |
      +-------+
]]>
      </artwork>
      
      <t>The logic of the two affinities is as follows:</t>
      <ul>
        <li>Congestion Affinity: Removes the link from the OFA topology. Any offloaded 
        traffic, local or remote, is removed from the link.</li>
        
        <li>High Utilization Affinity: Signals routers in the area to stop sending new offload 
        traffic to the link without impacting existing offloaded traffic. 
        Traffic that has already been offloaded over the link can stay there.</li>
        
      </ul>

    </section>
    
   <section anchor="oscillation-mitigation" title="Oscillation Mitigation">
  
    <t>While the affinity-based signaling described in <xref target="oscillation-avoidance"/> 
    effectively mitigates large-scale oscillations, localized instabilities may still 
    occur due to the following:</t>
    
  <ul spacing="normal">
    <li>Elephant Flows: If UCMP hashing results in a high-bandwidth flow being steered 
    onto an offload path, it may trigger secondary congestion on that path.</li>
    
    <li>Simultaneous Offloading: In a distributed environment, multiple routers may 
    simultaneously detect congestion and initiate offloading for their locally congested 
    links, leading to rapid, coordinated shifts in traffic patterns that exceed the network's 
    convergence stability.</li>
  </ul>
  
  <t>To address these scenarios, implementations MUST employ a damping mechanism 
  for prefix-specific offloading:</t>
  
  <ul spacing="normal">
    
    <li>Path Change Monitoring: Routers SHOULD monitor the frequency of OFA path changes 
    for each prefix. If the path changes more than N times within a defined interval T, 
    the router SHOULD suppress further offloading for that prefix.</li>
    
    <li>Exponential Backoff: To further enhance stability, an exponential backoff 
    mechanism MAY be applied, increasing the duration for which offloading is suppressed 
    each time the threshold is exceeded. This ensures that prefixes causing persistent 
    path churn are excluded from the DCM process until the network state stabilizes.</li>
    
  </ul>
</section>
    
    <section anchor="impl-scope" title="Implementation Scope and Discretion">
  
  <t>While this document defines the mandatory protocol behaviors required to ensure 
  interoperability and network stability, certain aspects of the DCM mechanism are 
  left to the implementation.</t>

  <section anchor="mandatory-reqs" title="Mandatory Requirements">
    <t>Implementations MUST adhere to the following rules to ensure the integrity of 
    the DCM mechanism:</t>
    <ul spacing="normal">
        
      <li>OFA Topology Exclusion: The OFA FAD MUST exclude Congestion Affinity.</li>
    
      <li>High Utilization Affinity Signaling: Routers MUST interpret the  High Utilization 
      Affinity as a signal to cease sending new offload traffic to the link, while allowing 
      existing offloaded traffic to persist to avoid unnecessary churning.</li>
      
      <li>Routers participating in the OFA MUST monitor the local links utilization and 
      advertise the Congestion Affinity when the Congestion Threshold is exceeded. 
      They MUST stop advertising the Congestion Affinity if the utilization drops below 
      the Non-Congestion Threshold and there is no traffic that is locally offloaded 
      from the link.</li>
    
      <li>Routers participating in the OFA MUST monitor the local links utilization and 
      advertise the High Utilization Affinity when the High Utilization Threshold is 
      exceeded. They MUST stop advertising the High Utilization Affinity if the utilization 
      drops below the Low Utilization Threshold.</li>
      
      <li>Advertising the Congestion and High Utilization Affinities is subject to the 
      standard throttling used by the implementation when generating the LSP, or LSA 
      update.</li>
      
      <li>The setting of the Congestion and High Utilization affinities SHOULD be performed 
      more aggressively than the unsetting. Setting of these affinities is a protective 
      measure against imminent performance degradation; therefore, it SHOULD be prioritized 
      to prevent congestion. Implementations MAY use immediate (un-smoothed) utilization 
      samples, or more aggressive statistical adjustments for setting these affinities. 
      Conversely, unsetting these affinity is a restoration measure to return to optimal 
      routing. A more cautious approach to unsetting is recommended to ensure the link 
      has stabilized and usage of the smoothed, statistically adjusted utilization value 
      is recommended.</li>
      
      <li>Algorithm Constraints: Offloading MUST NOT be performed for any Flex-Algo that is 
      currently designated as an OFA.</li>
      
    </ul>
  </section>

  <section anchor="impl-decisions" title="Implementation-Specific Decisions">
    <t>Implementations have the discretion to define the operational heuristics that 
    trigger the protocol mechanisms, including:</t>
    <ul spacing="normal">
      <li>Congestion Detection Logic: The specific statistical methods used for link 
      utilization adjustment (e.g., EWMA, trend analysis, or noise filtering) are 
      implementation-dependent.</li>
       
      <li>Threshold Tuning: The specific values for Congestion, Non-Congestion, 
      High Utilization, Restore, and Low Utilization thresholds are operational parameters 
      that should be tuned based on network-specific capacity, stability and performance 
      requirements.</li>
      
      <li>Offload Granularity: The iterative process, including the size of traffic 
      increments, is left to the implementer to optimize for network stability.</li>
      
      <li>Offload Interval: The offload interval SHOULD be set to a value larger than 
      the sum of the time required for the nodes in the network to detect high 
      utilization or congestion, the time required to advertise the link affinities 
      (including the LSP/LSA throttling), and the time required for those affinities 
      to propagate across the network, plus some additional time to ensure network 
      stability.</li>
      
      <li>Filtering Policies: While the protocol provides the mechanism for offloading, 
      the policy governing which prefixes or traffic classes are eligible for offloading 
      is a local configuration choice.</li>
      
    </ul>
  </section>
  
  <section anchor="depl-considerations" title="Deployment Considerations">
    
    <t>DCM can be deployed incrementally in the network. Legacy routers, that do not 
    support DCM, MUST not participate in the OFA.</t>
    
    <t>DCM does not need to be enabled on all routers in the network. However, it must be 
    enabled on all routers along the specific path towards the egress node, starting from 
    the point where DCM is being used. To successfully offload traffic, the offload path 
    must be contiguous. If any router along the path towards the egress node lacks DCM 
    enablement, the OFA path may not be available.</t>
    
  </section>
</section>
     
    <section title="IANA Considerations">
      <t>This document makes no requests of IANA.</t>
    </section>
    
    <section title="Security Considerations">
      <t>DCM relies on standard IS-IS, OSPF, and OSPFv3 flooding mechanisms. 
      Implementations MUST ensure that affinity configuration is consistent between 
      routers participating in the DCM inside the area and protected against unauthorized 
      modification, as malicious manipulation could lead to traffic drops or suboptimal 
      routing.</t>
    </section>
    
  </middle>
  <back>
    <references title="Normative References">
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
    </references>
    <references title="Informative References">
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1195.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2328.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5340.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5286.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9855.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8919.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8920.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9350.xml"/>
    </references>
    
    <section anchor="CONTR" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.a-1">The following people contributed to the content of this document and should be 
    considered coauthors:</t>
      <contact fullname="Francois Clad" initials="F." surname="Clad">
        <address>
          <email>fclad@cisco.com</email>
        </address>
      </contact>
    </section>  
  </back>
</rfc>