<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY LFA-APPLICABILITY SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6571.xml">
<!ENTITY RFC1195 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1195.xml">
<!ENTITY RFC2328 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2328.xml">
<!ENTITY RFC6976 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6976.xml">
<!ENTITY ULOOP SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-rtgwg-microloop-analysis.xml">
<!ENTITY ULOOP-DELAY SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-rtgwg-uloop-delay.xml">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- used by XSLT processors -->
<!-- OPTIONS, known as processing instructions (PIs) go here. -->
<!-- For a complete list and description of PIs,
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable PIs that most I-Ds might want to use. -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC): -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="3"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references: -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space: 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of popular PIs -->
<rfc category="info" docName="draft-ietf-rtgwg-spf-uloop-pb-statement-04"
     ipr="trust200902">
  <front>
    <title abbrev="spf-microloop">Link State protocols SPF trigger and delay algorithm impact on IGP micro-loops</title>

    <author fullname="Stephane Litkowski" initials="S" surname="Litkowski">
      <organization>Orange Business Service</organization>

      <address>
        <!-- postal><street/><city/><region/><code/><country/></postal -->

        <!-- <phone/> -->

        <!-- <facsimile/> -->

        <email>stephane.litkowski@orange.com</email>

        <!-- <uri/> -->
      </address>
    </author>
	    <author fullname="Bruno Decraene" initials="B" surname="Decraene">
      <organization>Orange</organization>

      <address>
        <!-- postal><street/><city/><region/><code/><country/></postal -->

        <!-- <phone/> -->

        <!-- <facsimile/> -->

        <email>bruno.decraene@orange.com</email>

        <!-- <uri/> -->
      </address>
    </author>
	<author fullname="Martin Horneffer" initials="M" surname="Horneffer">
      <organization>Deutsche Telekom</organization>

      <address>
        <!-- postal><street/><city/><region/><code/><country/></postal -->

        <!-- <phone/> -->

        <!-- <facsimile/> -->

        <email>martin.horneffer@telekom.de</email>

        <!-- <uri/> -->
      </address>
    </author>
   
    <date year="2017"/>

    <area/>

    <workgroup>Routing Area Working Group</workgroup>

    <!-- <keyword/> -->

    <!-- <keyword/> -->

    <!-- <keyword/> -->

    <!-- <keyword/> -->

    <abstract>
      <t>A micro-loop is a packet forwarding loop that may occur transiently
   among two or more routers in a hop-by-hop packet forwarding paradigm.
	</t>
	<t>In this document, we are trying to analyze the impact of using different Link State IGP implementations in a single network in regards of micro-loops. 
	The analysis is focused on the SPF triggers and SPF delay algorithm.</t>
    </abstract>
	
	<note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref target="RFC2119"/>.</t>
  </note>
  
  </front>

  <middle>
	<section anchor="introduction" title="Introduction">
	<t>
	Link State IGP protocols are based on a topology database on which an SPF (Shortest Path First) algorithm like Dijkstra is implemented to find the optimal routing paths.
	</t>
	<t>Specifications like IS-IS (<xref target="RFC1195"/>) propose some optimizations of the route computation (See Appendix C.1) but not all the implementations are following those not mandatory optimizations.</t>
	<t>We will call "SPF trigger", the events that would lead to a new SPF computation based on the topology.</t>
	
	<t>
	Link State IGP protocols, like OSPF (<xref target="RFC2328"/>) and IS-IS (<xref target="RFC1195"/>), are using multiple timers to control the router behavior in case of churn: SPF delay, PRC delay, LSP generation delay, LSP flooding delay, LSP retransmission interval...
	</t>
	<t>Some of those timers are standardized in protocol specification, some are not especially the SPF computation related timers.</t>
	<t>For non standardized timers, implementations are free to implement it in any way. 
	For some standardized timer, we can also see that rather than using static configurable values for such timer, implementations may offer dynamically adjusted timers to help controlling the churn.</t>
	<t>We will call "SPF delay", the timer that exists in most implementations that specifies the required delay before running SPF computation after a SPF trigger is received.</t>
	<t>
	A micro-loop is a packet forwarding loop that may occur transiently
   among two or more routers in a hop-by-hop packet forwarding paradigm. We can observe that these micro-loops are formed when two routers do not update their Forwarding Information Base (FIB) for a certain prefix at the same time.
	The micro-loop phenomenon is described in <xref target="I-D.ietf-rtgwg-microloop-analysis"/>.
	</t>
	<t>
	Some micro-loop mitigation techniques have been defined by IETF (e.g. <xref target="RFC6976"/>, <xref target="I-D.ietf-rtgwg-uloop-delay"/>) but are not implemented due to complexity or are not providing a complete mitigation.
	</t>
	<t>
	In multi-vendor networks, using different implementations of a link state protocol may favor micro-loops creation during the convergence process due to discrepancies of timers.
	Service Providers are already aware to use similar timers for all the network as a best practice, but sometimes it is not possible due to limitations of implementations.
	</t>
	<t>
	This document will present why it sounds important for service providers to have consistent implementations of Link State protocols across vendors. We are particularly analyzing the impact of using different Link State IGP implementations in a single network in regards of micro-loops. 
	The analysis is focused on the SPF triggers and the SPF delay algorithm.
	</t>
	<t>This document is only stating the problem, and defining some work items but its not intended to provide a solution.</t>
	</section>
    <section anchor="problem" title="Problem statement">
      <t>
	  <figure title="Figure 1 - Network topology suffering from micro-loops">
	  <artwork>
				   A ---- B
				   |      |
				10 |      | 10
				   |      |
				   C ---- D
				   |  2   |
				   Px     Px
					  
	  </artwork>
	  </figure>
	  In Figure 1,  A uses primarily the AC link to reach C. When the AC link fails, the IGP convergence occurs. If A converges before B, A will forward the traffic to C through B, but as B as not converged yet, B will loop back traffic to A, leading to a micro-loop.
	  </t>
	  <t>
	  The micro-loop appears due to the asynchronous convergence of nodes in a network when an event occurs.
	  </t>
	  <t>Multiple factors (and combination of these factors) may increase the probability for a micro-loop to appear: 
	  <list style="symbols">
	  <t>the delay of failure notification: the more B is advised of the failure later than A, the more a micro-loop may have a chance to appear.</t>
	  <t>the SPF delay: most of the implementations supports a delay for the SPF computation to try to catch as many events as possible. If A uses an SPF delay timer of x msec and B uses an SPF delay timer of y msec and x &lt; y, B would start converging after A leading to a potential micro-loop.</t>
	  <t>the SPF computation time: mostly a matter of CPU power and optimizations like incremental SPF. If A computes its SPF faster than B, there is a chance for a micro-loop to appear. CPUs are today faster enough to consider SPF computation time as negligeable (order of msec in a large network).</t>
	  <t>the RIB and FIB prefix insertion speed or ordering: highly implementation dependant.</t>
	  </list>
	  </t>
	  <t>
	  This document will focus on analysis SPF delay (and associated triggers).
	  </t>
    </section>
	<section anchor="spf-trigger" title="SPF trigger strategies">
	<t>
	Depending of the change advertised in LSP/LSA, the topology may be affected or not.
	An implementation may avoid running the SPF computation (and may only run IP reachability computation instead) if the advertised change is not affecting topology.
	</t>
	<t>
	Different strategies exists to trigger the SPF computation:
	<list style="numbers">
	<t>An implementation may always run a full SPF whatever the change to process.</t>
	<t>An implementation may run a full SPF only when required: e.g. if a link fails, a local node will run an SPF for its local LSP update. If the LSP from the neighbor (describing the same failure)
	is received after SPF has started, the local node can decide that a new full SPF is not required as the topology has not change.</t>
	<t>If the topology does not change, an implementation may only recompute the IP reachability.</t>
	</list>
	</t>
	<t>
	As pointed in <xref target="introduction"/>, SPF optimizations are not mandatory in specifications, leading to multiple strategies to be implemented.
	</t>
	</section>
	<section anchor="spf-delay" title="SPF delay strategies">
	<t>
	Implementations of link state routing protocols use different strategies to delay the SPF computation. We usually see the following:
	<list style="numbers">
	<t>Two steps delay.</t>
	<t>Exponential backoff delay.</t>
	</list>
	Those behavior will be explained in the next sections.
	</t>
		<section anchor="spf-delay-2step" title="Two steps SPF delay">
		<t>
		The SPF delay is managed by four parameters:
			<list style="symbols">
				<t>Rapid delay: amount of time to wait before running SPF.</t>
				<t>Rapid runs: amount of consecutive SPF runs that can use the rapid delay. When the amount is exceeded the delay moves to the slow delay value .</t>
				<t>Slow delay: amount of time to wait before running SPF.</t>
				<t>Wait time: amount of time to wait without events before going back to the rapid delay.</t>
			</list>
		</t>
		<t>
		Example: Rapid delay = 50msec, Rapid runs = 3, Slow delay = 1sec, Wait time = 2sec
		</t>
		<figure title="Figure 2 - Two steps delay algorithm">
		<artwork>

SPF delay time
    ^
    |
    |
SD- |             x xx x
    |
    |
    |
RD- |   x  x   x                    x
    |
    +---------------------------------> Events
        |  |   |  | || |            |
                        &lt; wait time &gt;
		</artwork>
		</figure>
		
		</section>
		<section anchor="spf-delay-exp" title="Exponential backoff">
		<t>
		The algorithm has two modes: the fast mode and the backoff mode. In the fast mode, the SPF delay is usually delayed by a very small amount of time (fast reaction). 
		When an SPF computation has run in the fast mode, the algorithm automatically moves to the backoff mode (a single SPF run is authorized in the fast mode).
		In the backoff mode, the SPF delay is increasing exponentially at each run.
		When the network becomes stable, the algorithm moves back to the fast mode.
		The SPF delay is managed by four parameters:
			<list style="symbols">
				<t>First delay: amount of time to wait before running SPF. This delay is used only when SPF is in fast mode.</t>
				<t>Incremental delay: amount of time to wait before running SPF. This delay is used only when SPF is in backoff mode and increments exponentially at each SPF run.</t>
				<t>Maximum delay: maximum amount of time to wait before running SPF.</t>
				<t>Wait time: amount of time to wait without events before going back to the fast mode.</t>
			</list>
		</t>
		<t>
		Example: First delay = 50msec, Incremental delay = 50msec, Maximum delay = 1sec, Wait time = 2sec
		</t>
		<figure title="Figure 3 - Exponential delay algorithm">
		<artwork>
SPF delay time
    ^
MD- |               xx x
    |
    |
    |
    |                
    |
    |             x
    |
    |               
    |
    |          x
    |
FD- |   x  x                        x
ID  |
    +---------------------------------> Events
        |  |   |  | || |            |
                        &lt; wait time &gt;
       FM-&gt;BM --------------------&gt;FM				
		</artwork>
		</figure>
		</section>
		
	</section>
	<section anchor="spf-mix" title="Mixing strategies">
	<figure title="Figure 4">
	<artwork>

			   S ---- E
			   |      |
			10 |      | 10
			   |      |
			   D ---- A
			   |  2
			   Px     
				  
	</artwork>
	</figure>
	<t>
	In Figure 4, we consider a flow of packet from S to D. We consider that S is using optimized SPF triggering (Full SPF is triggered only when necessary), and two steps SPF delay (rapid=150ms,rapid-runs=3, slow=1s). As implementation of S is optimized, Partial Reachability Computation (PRC) is available. 
	We consider the same timers as SPF for delaying PRC.
	We consider that E is using a SPF trigger strategy that always compute Full SPF and exponential backoff strategy for SPF delay (start=150ms, inc=150ms, max=1s)
	</t>
	<t>
	We also consider the following sequence of events (note : the time scale does not intend to represent a real router time scale where jitters are introduced to all timers) :
	<list style="symbols">
	<t>t0=0 ms: a prefix is declared down in the network. We consider this event to happen at time=0.</t>
	<t>200ms: the prefix is declared as up.</t>
	<t>400ms: a prefix is declared down in the network.</t>
	<t>1000ms: S-D link fails.</t>
	</list>
	</t>
	<texttable title="Route computation event time scale">
	<ttcol align="center">Time</ttcol>
	<ttcol align="center">Network Event</ttcol>
	<ttcol align="center">Router S events</ttcol>
	<ttcol align="center">Router E events</ttcol>
	<c>t0=0</c><c>Prefix DOWN</c><c></c><c></c>
	<c>10ms</c><c></c><c>Schedule PRC (in 150ms)</c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>160ms</c><c></c><c>PRC starts</c><c>SPF starts</c>
	<c>161ms</c><c></c><c>PRC ends</c><c></c>
	<c>162ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>163ms</c><c></c><c></c><c>SPF ends</c>
	<c>164ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>175ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>178ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>200ms</c><c>Prefix UP</c><c></c><c></c>
	<c>212ms</c><c></c><c>Schedule PRC (in 150ms)</c><c></c>
	<c>214ms</c><c></c><c></c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>370ms</c><c></c><c>PRC starts</c><c></c>
	<c>372ms</c><c></c><c>PRC ends</c><c></c>
	<c>373ms</c><c></c><c></c><c>SPF starts</c>
	<c>373ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>375ms</c><c></c><c></c><c>SPF ends</c>
	<c>376ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>383ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>385ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>400ms</c><c>Prefix DOWN</c><c></c><c></c>
	<c>410ms</c><c></c><c>Schedule PRC (in 300ms)</c><c>Schedule SPF (in 300ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>710ms</c><c></c><c>PRC starts</c><c>SPF starts</c>
	<c>711ms</c><c></c><c>PRC ends</c><c></c>
	<c>712ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>713ms</c><c></c><c></c><c>SPF ends</c>
	<c>714ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>716ms</c><c></c><c>RIB/FIB ends</c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>1000ms</c><c>S-D link DOWN</c><c></c><c></c>
	<c>1010ms</c><c></c><c>Schedule SPF (in 150ms)</c><c>Schedule SPF (in 600ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>1160ms</c><c></c><c>SPF starts</c><c></c>
	<c>1161ms</c><c></c><c>SPF ends</c><c></c>
	<c>1162ms</c><c>Micro-loop may start from here</c><c>RIB/FIB starts</c><c></c>
	<c>1175ms</c><c></c><c>RIB/FIB ends</c><c></c>
    <c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
    <c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>1612ms</c><c></c><c></c><c>SPF starts</c>
	<c>1615ms</c><c></c><c></c><c>SPF ends</c>
	<c>1616ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>1626ms</c><c>Micro-loop ends</c><c></c><c>RIB/FIB ends</c>

	</texttable>
	
	<t>
	In the table above, we can see that due to discrepancies in the SPF management, after multiple events (of a different type), the values of the SPF delay are completely misaligned between nodes leading to long micro-loops creation.
	</t>
	<t>
	The same issue can also appear with only single type of events as displayed below:</t>
	
	<texttable title="Route computation event time scale">
	<ttcol align="center">Time</ttcol>
	<ttcol align="center">Network Event</ttcol>
	<ttcol align="center">Router S events</ttcol>
	<ttcol align="center">Router E events</ttcol>
	<c>t0=0</c><c>Link DOWN</c><c></c><c></c>
	<c>10ms</c><c></c><c>Schedule SPF (in 150ms)</c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>160ms</c><c></c><c>SPF starts</c><c>SPF starts</c>
	<c>161ms</c><c></c><c>SPF ends</c><c></c>
	<c>162ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>163ms</c><c></c><c></c><c>SPF ends</c>
	<c>164ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>175ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>178ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>200ms</c><c>Link DOWN</c><c></c><c></c>
	<c>212ms</c><c></c><c>Schedule SPF (in 150ms)</c><c></c>
	<c>214ms</c><c></c><c></c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>370ms</c><c></c><c>SPF starts</c><c></c>
	<c>372ms</c><c></c><c>SPF ends</c><c></c>
	<c>373ms</c><c></c><c></c><c>SPF starts</c>
	<c>373ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>375ms</c><c></c><c></c><c>SPF ends</c>
	<c>376ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>383ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>385ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>400ms</c><c>Link DOWN</c><c></c><c></c>
	<c>410ms</c><c></c><c>Schedule SPF (in 150ms)</c><c>Schedule SPF (in 300ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>560ms</c><c></c><c>SPF starts</c><c></c>
	<c>561ms</c><c></c><c>SPF ends</c><c></c>
	<c>562ms</c><c>Micro-loop may start from here</c><c>RIB/FIB starts</c><c></c>
	<c>568ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>710ms</c><c></c><c></c><c>SPF starts</c>
	<c>713ms</c><c></c><c></c><c>SPF ends</c>
	<c>714ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>716ms</c><c>Micro-loop ends</c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>1000ms</c><c>Link DOWN</c><c></c><c></c>
	<c>1010ms</c><c></c><c>Schedule SPF (in 1s)</c><c>Schedule SPF (in 600ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
    <c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>1612ms</c><c></c><c></c><c>SPF starts</c>
	<c>1615ms</c><c></c><c></c><c>SPF ends</c>
	<c>1616ms</c><c>Micro-loop may start from here</c><c></c><c>RIB/FIB starts</c>
	<c>1626ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
    <c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>2012ms</c><c></c><c>SPF starts</c><c></c>
	<c>2014ms</c><c></c><c>SPF ends</c><c></c>
	<c>2015ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>2025ms</c><c>Micro-loop ends</c><c>RIB/FIB ends</c><c></c>
    <c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	</texttable>

	
	</section>
	
	<section anchor="workitems" title="Proposed work items">
	<t>
	In order to enhance the current Link State IGP behavior, authors would encourage working on
	standardization of some behaviours.
	</t>
	<t>Authors are proposing the following work items :
	<list style="symbols">
	<t>Standardize SPF trigger strategy.</t>
	<t>Standardize computation timer scope: single timer for all computation operations, separated timers ...</t>
	<t>Standardize "slowdown" timer algorithm including its association to a particular timer: authors of this document does not presume that the same algorithm
	must be used for all timers.</t>
	</list>
	</t>
	<t>Using the same event sequence as in figure 2, we may expect fewer and/or shorter micro-loops using standardized implementations.</t>
	
		<texttable title="Route computation event time scale">
	<ttcol align="center">Time</ttcol>
	<ttcol align="center">Network Event</ttcol>
	<ttcol align="center">Router S events</ttcol>
	<ttcol align="center">Router E events</ttcol>
	<c>t0=0</c><c>Prefix DOWN</c><c></c><c></c>
	<c>10ms</c><c></c><c>Schedule PRC (in 150ms)</c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>160ms</c><c></c><c>PRC starts</c><c>PRC starts</c>
	<c>161ms</c><c></c><c>PRC ends</c><c></c>
	<c>162ms</c><c></c><c>RIB/FIB starts</c><c>PRC ends</c>
	<c>163ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>175ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>176ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>200ms</c><c>Prefix UP</c><c></c><c></c>
	<c>212ms</c><c></c><c>Schedule PRC (in 150ms)</c><c></c>
	<c>213ms</c><c></c><c></c><c>Schedule PRC (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>370ms</c><c></c><c>PRC starts</c><c>PRC starts</c>
	<c>372ms</c><c></c><c>PRC ends</c><c></c>
	<c>373ms</c><c></c><c>RIB/FIB starts</c><c>PRC ends</c>
	<c>374ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>383ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>384ms</c><c></c><c></c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>400ms</c><c>Prefix DOWN</c><c></c><c></c>
	<c>410ms</c><c></c><c>Schedule PRC (in 300ms)</c><c>Schedule PRC (in 300ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>710ms</c><c></c><c>PRC starts</c><c>PRC starts</c>
	<c>711ms</c><c></c><c>PRC ends</c><c>PRC ends</c>
	<c>712ms</c><c></c><c>RIB/FIB starts</c><c></c>
	<c>713ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>716ms</c><c></c><c>RIB/FIB ends</c><c>RIB/FIB ends</c>
	<c></c><c></c><c></c><c></c>
	<c>1000ms</c><c>S-D link DOWN</c><c></c><c></c>
	<c>1010ms</c><c></c><c>Schedule SPF (in 150ms)</c><c>Schedule SPF (in 150ms)</c>
	<c></c><c></c><c></c><c></c>
	<c></c><c></c><c></c><c></c>
	<c>1160ms</c><c></c><c>SPF starts</c><c></c>
	<c>1161ms</c><c></c><c>SPF ends</c><c>SPF starts</c>
	<c>1162ms</c><c>Micro-loop may start from here</c><c>RIB/FIB starts</c><c>SPF ends</c>
	<c>1163ms</c><c></c><c></c><c>RIB/FIB starts</c>
	<c>1175ms</c><c></c><c>RIB/FIB ends</c><c></c>
	<c>1177ms</c><c>Micro-loop ends</c><c></c><c>RIB/FIB ends</c>
	</texttable>
	
	
	<t>
	As displayed above, there could be some other parameters like router computation power, flooding timers that may also influence micro-loops. 
	In Figure 4, we consider E to be a bit slower than S, leading to micro-loop creation. Despite of this, we expect that by aligning implementations
	at least on SPF trigger and SPF delay, service provider may reduce the number and the duration of micro-loops.
	</t>
	</section>

    <section anchor="Security" title="Security Considerations">
	<t>
	This document does not introduce any security consideration.
	</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
	<t>Authors would like to thank Mike Shand for his useful comments.</t>
	</section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document has no action for IANA.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;
	  &RFC2328;
	  &RFC1195;
    </references>
	    <references title="Informative References">
	  &RFC6976;
	  &ULOOP-DELAY;
	  &ULOOP;
    </references>

  </back>
</rfc>
