<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5384 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5286.xml">
<!ENTITY RFC5714 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5714.xml">
<!ENTITY RFC5715 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5715.xml">
<!ENTITY RFC6571 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6571.xml">
<!ENTITY RFC6976 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6976.xml">
<!ENTITY RFC7490 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7490.xml">
<!ENTITY RFC7916 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7916.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8333 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8333.xml">
<!ENTITY RFC8402 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC8660 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8660.xml">
<!ENTITY RFC8665 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8665.xml">
<!ENTITY RFC8667 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8667.xml">
<!ENTITY RFC8754 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8986 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml">
<!ENTITY RFC9256 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9256.xml">
<!ENTITY I-D.bashandy-rtgwg-segment-routing-uloop SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.bashandy-rtgwg-segment-routing-uloop.xml">
<!ENTITY FLEXALGO SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9350.xml">
]>
<rfc category="std" consensus="true"
     docName="draft-ietf-rtgwg-segment-routing-ti-lfa-16" ipr="trust200902"
     submissionType="IETF">
  <!-- Generated by id2xml 1.4.4 on 2018-12-03T18:16:52Z -->

  <?rfc compact="yes"?>

  <?rfc text-list-symbols="o*+-"?>

  <?rfc subcompact="no"?>

  <?rfc sortrefs="yes"?>

  <?rfc symrefs="yes"?>

  <?rfc strict="yes"?>

  <?rfc toc="yes"?>

  <front>
    <title abbrev="SR TI-LFA">Topology Independent Fast Reroute using Segment
    Routing</title>

    <author fullname="Ahmed Bashandy" initials="A." surname="Bashandy">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <country/>
        </postal>

        <email>abashandy.ietf@gmail.com</email>
      </address>
    </author>

    <author fullname="Stephane Litkowski" initials="S." surname="Litkowski">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <country>France</country>
        </postal>

        <email>slitkows@cisco.com</email>
      </address>
    </author>

    <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <city>Brussels</city>

          <country>Belgium</country>
        </postal>

        <email>cfilsfil@cisco.com</email>
      </address>
    </author>

    <author fullname="Pierre Francois" initials="P." surname="Francois">
      <organization>INSA Lyon</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <country/>
        </postal>

        <email>pierre.francois@insa-lyon.fr</email>
      </address>
    </author>

    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization>Orange</organization>

      <address>
        <postal>
          <street/>

          <city>Issy-les-Moulineaux</city>

          <country>France</country>
        </postal>

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

    <author fullname="Daniel Voyer" initials="D." surname="Voyer">
      <organization>Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <country>Canada</country>
        </postal>

        <email>daniel.voyer@bell.ca</email>
      </address>
    </author>

    <date year="2024"/>

    <abstract>
      <t>This document presents Topology Independent Loop-free Alternate Fast
      Reroute (TI-LFA), aimed at providing protection of node and adjacency
      segments within the Segment Routing (SR) framework. This Fast Reroute
      (FRR) behavior builds on proven IP-FRR concepts being LFAs, remote LFAs
      (RLFA), and remote LFAs with directed forwarding (DLFA). It extends
      these concepts to provide guaranteed coverage in any two-connected
      networks using a link-state IGP. A key aspect of TI-LFA is the FRR path
      selection approach establishing protection over the expected
      post-convergence paths from the point of local repair, reducing the
      operational need to control the tie-breaks among various FRR
      options.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="acronyms" title="Acronyms">
      <t><list style="symbols">
          <t>DLFA: Remote LFA with Directed forwarding.</t>

          <t>FRR: Fast Re-route.</t>

          <t>IGP: Interior Gateway Protocol.</t>

          <t>LFA: Loop-Free Alternate.</t>

          <t>LSDB: Link State DataBase.</t>

          <t>PLR: Point of Local Repair.</t>

          <t>RL: Repair list.</t>

          <t>RLFA: Remote LFA.</t>

          <t>SID: Segment Identifier.</t>

          <t>SPF: Shortest Path First.</t>

          <t>SR: Segment Routing.</t>

          <t>SRLG: Shared Risk Link Group.</t>

          <t>TI-LFA: Topology Independent LFA.</t>

        </list></t>
    </section>

    <section anchor="introduction" title="Introduction">
      <t>This document outlines a local repair mechanism that leverages Segment
      Routing (SR) to restore end-to-end connectivity in the event of a failure
      involving a directly connected network component.  This mechanism is
      designed for standard link-state Interior Gateway Protocol (IGP) shortest
      path scenarios. Non-SR mechanisms for local repair are beyond the scope
      of this document. Non-local failures are addressed in a separate document
      <xref target="I-D.bashandy-rtgwg-segment-routing-uloop"/>.</t>

      <t>The term topology independent (TI) describes the capability providing
      a loop free backup path that is effective accross all network
      topologies. This provides a major improvement compared to LFA <xref
      target="RFC5286"/> and remote LFA <xref target="RFC7490"/> which cannot
      provide a complete protection coverage in some topologies as described in
      <xref target="RFC6571"/>.</t>

      <t>When the network reconverges after failure, micro-loops <xref
      target="RFC5715"/> can form due to transient inconsistencies in
      the forwarding tables of different routers.  If it is determined
      that micro-loops are a significant issue in the deployment, then
      a suitable loop-free convergence method, such as one of those
      described in <xref target="RFC5715"/>, <xref target="RFC6976"/>,
      <xref target="RFC8333"/>, or <xref
      target="I-D.bashandy-rtgwg-segment-routing-uloop"/> should be
      implemented.</t>
      
      <t>TI-LFA operates locally at the Point of Local Repair (PLR) upon
      detecting a failure in one of its direct links. Consequently, this local
      operation does not influence:
      <list style="symbols">
          <t>Micro-loops that may or may not form during the distributed
          Interior Gateway Protocol (IGP) convergence as delineated in <xref
          target="RFC5715"/>:
          <list style="symbols">
	  <t>These micro-loops occur on routes directred towards the
          destination that do not traverse TI-LFA-configured paths. According
          to <xref target="RFC5714"/>, the formation of such micro-loops can
          prevent traffic from reaching the PLR, thereby bypassing the TI-LFA
          paths establised for rerouting.</t>
	  </list></t>
          <t>Micro-loops that may or may not develop when the previously failed
          link is restored to functionality.</t>
        </list></t>

      <t>TI-LFA paths are activated from the instant the PLR detects a failure
      in a local link and remain in effect until the Interior Gateway Protocol
      (IGP) convergence at the PLR is fully achieved. Consequently, they are
      not susceptible to micro-loops that may arise due to variations in the
      IGP convergence times across different nodes through which these paths
      traverse. This ensures a stable and predictable routing environment,
      minimizing disruptions typically associated with asynchronous network
      behavior.</t>

      <t>TI-LFA paths are applied from the moment the PLR detects failure of a
      local link and until IGP convergence at the PLR is completed. Therefore,
      early (relative to the other nodes) IGP convergence at the PLR and the
      consecutive ”early” release of TI-LFA paths may cause micro-loops,
      especially if these paths have been computed using the methods described
      in Section <xref target="pq_backup"/>, <xref target="adj_pq_backup"/>,
      or <xref target="remote_pq_backup"/> of the document. One of the possible
      ways to prevent such micro-loops is local convergence delay (<xref
      target="RFC8333"/>).</t>
      <t>TI-LFA procedures are complementary to application of any micro-loop
      avoidance procedures in the case of link or node failure: <list
          style="symbols">
          <t>Link or node failure requires some urgent action to restore the
          traffic that passed thru the failed resource. TI-LFA paths are
          pre-computed and pre-installed and therefore suitable for urgent
          recovery</t>
          <t>The paths used in the micro-loop avoidance procedures typically
          cannot be pre-computed.</t>
        </list></t>

      <t>For each destination (as specified by the IGP) in the network, TI-LFA
      pre-installs a backup forwarding entry for each protected destination
      ready to be activated upon detection of the failure of a link used to
      reach the destination.  TI-LFA provides protection in the event of any
      one of the following: single link failure, single node failure, or single
      SRLG failure. In link failure mode, the destination is protected assuming
      the failure of the link. In node protection mode, the destination is
      protected assuming that the neighbor connected to the primary link <xref target="terminology"/> has
      failed.  In SRLG protecting mode, the destination is protected assuming
      that a configured set of links sharing fate with the primary link has
      failed (e.g. a linecard or a set of links sharing a common transmission
      pipe).</t>

      <t>Protection techniques outlined in this document are limited to
      protecting links, nodes, and SRLGs that are within a link-state IGP
      area. Protecting domain exit routers and/or links attached to another
      routing domains are beyond the scope of this document</t>

      <t>By utilizing Segment Routing (SR), T-LFA eliminates the need to
      establish Targeted Label Distribution Protocol sessions with
      remote nodes for leveraging the benefits of Remote Loop-Free Alternates
      (RLFA) <xref target="RFC7490"/><xref target="RFC7916"/> or Directed
      Loop-Free Alternates (DLFA) <xref target="RFC5714"/>. All the Segment
      Identifiers (SIDs) required are present within the Link State Database
      (LSDB) of the Interior Gateway Protocol (IGP). Consequently, there is no
      longer a necessity to prefer LFAs over RLFAs or DLFAs, nor is there a
      need to minimize the number of RLFA or DLFA repair nodes.</t>

      <t>Utilizing SR makes the requirement unnecessary to establish additional
      state within the network for enforcing explicit Fast Reroute (FRR) paths.
      This spares the nodes from maintaining supplementary state and frees the
      operator from the necessity to implement additional protocols or protocol
      sessions solely to augment protection coverage.</t>

      <t>Although not a TI-LFA requirement or constraint, TI-LFA also brings
      the benefit of the ability to provide a backup path that follows the
      expected post-convergence path considering a particular failure which
      reduces the need of locally configured policies that influence the backup
      path selection (<xref target="RFC7916"/>). The easiest way to express the
      expected post-convergence path in a loop-free manner is to encode it as a
      list of adjacency segments. However, this may create a long segment list
      that some hardware may not be able to program. One of the challenges of
      TI-LFA is to encode the expected post-convergence path by combining
      adjacency segments and node segments. Each implementation may
      independently develop its own algorithm for optimizing the ordered
      segment list. This document provides an outline of the fundamental
      concepts applicable to constructing the SR backup path, along with the
      related dataplane procedures.</t>

      <t><xref target="terminology"/> defines the main notations used in the
      document. They are in line with <xref target="RFC5714"/>.</t>

      <t><xref target="base"/> defines the main principles of TI-LFA backup
      path computation.</t>

      <t><xref target="pq_space_intersect"/> suggests to compute the P-Space
      and Q-Space properties defined in <xref target="terminology"/>, for the
      specific case of nodes lying over the post-convergence paths towards the
      protected destinations.</t>

      <t>Using the properties defined in <xref target="pq_space_intersect"/>,
      <xref target="tilfa_repair_path"/> describes how to compute protection
      lists that encode a loop-free post-convergence path towards the
      destination.</t>

      <t><xref target="repairlist"/> defines the segment operations to be
      applied by the PLR to ensure consistency with the forwarding state of
      the repair node.</t>

      <t><xref target="dataplane"/> discusses aspects that are specific to the
      dataplane.</t>

      <t><xref target="tilfa-sr-algo"/> discusses relationship between TI-LFA
      and the SR-algorithm.</t>

      <t>Certain considerations are needed when adjacency segments are used in a
      repare list. <xref target="adj-sid-repair-list"/> provides an overview
      of these considerations.</t>

      <t><xref target="security"/> discusses security considerations.</t>
      
      <t><xref target="advantages-post-conv-path"/> highlights advantages of
      using the expected post-convergence path during FRR.</t>

      <t>By implementing the algorithms detailed in this document within actual
      service provider and large enterprise network environments, real-life
      measurements are presented regarding the number of SIDs utilized by
      repair paths. These measurements are summarized in <xref target="analysis"/>.</t>

      <section anchor="conventions" title="Conventions used in this document">
        <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>

    <section anchor="terminology" title="Terminology">
      <t>The main notations used in this document are defined as follows.</t>

      <t>The terms "old" and "new" topologies refer to the Link State Database
      (LSDB) state before and after the considered failure, respectively.</t>

      <t>SPT_old(R) is the Shortest Path Tree rooted at node R in the initial
      state of the network.</t>

      <t>SPT_new(R, X) is the Shortest Path Tree rooted at node R in the state
      of the network after the resource X has failed.</t>

      <t>PLR stands for "Point of Local Repair". It is the router that applies
      fast traffic restoration after detecting failure in a directly attached
      link, set of links, and/or node.</t>

      <t>Similar to <xref target="RFC7490"/>, the concept of P-Space and
      Q-Space is used for TI-LFA.</t>

      <t>The P-space P(R,X) of a router R with regard to a resource X (e.g. a
      link S-F, a node F, or a SRLG) is the set of routers reachable from R
      using the pre-convergence shortest paths without any of those paths
      (including equal-cost path splits) transiting through X. A P node is a
      node that belongs to the P-space.</t>

      <t>Consider the set of neighbors of a router R and a resource X. Exclude
      from that set, the neighbors that are reachable from R using X. The
      Extended P-Space P'(R,X) of a node R with regard to a resource X is the
      union of the P-spaces of the neighbors in that reduced set of neighbors
      with regard to the resource X.</t>

      <t>The Q-space Q(R,X) of a router R with regard to a resource X is the
      set of routers from which R can be reached without any path (including
      equal-cost path splits) transiting through X. A Q node is a node that
      belongs to the Q-space </t>

      <t>EP(P, Q) is an explicit SR path from a node P to a node Q.</t>

      <t>Primary Interface: Primary Outgoing Interface: One of the outgoing
      interfaces towards a destination according to the IGP link-state
      protocol</t>

      <t>Primary Link: A link connected to the primary interface</t>

      <t>adj-sid(S-F): Adjacency Segment from node S to node F</t>

    </section>

    <section anchor="base" title="Base principle">
      <t>The basic algorithm to compute the repair path is to pre-compute
      SPT_new(R,X) and for each destination, encode the repair path as a
      loop-free segment list. One way to provide a loop-free segment list is to
      use adjacency SIDs only. However, this approach may create very long SID
      lists that hardware may not be able to handle due to MSD (Maximum SID
      Depth) limitations.</t>

      <t>An implementation is free to use any local optimization to provide
      smaller segment lists by combining Node SIDs and Adjacency SIDs. In
      addition, the usage of Node-SIDs allow to maximize ECMPs over the backup
      path. These optimizations are out of scope of this document, however the
      subsequent sections provide some guidance on how to leverage P-Spaces and
      Q-Spaces to optimize the size of the segment list.</t>
    </section>

    <section anchor="pq_space_intersect"
             title="Intersecting P-Space and Q-Space with post-convergence paths">
      <t>One of the challenges of defining an SR path following the expected
      post-convergence path is to reduce the size of the segment list. In
      order to reduce this segment list, an implementation MAY determine the
      P-Space/Extended P-Space and Q-Space properties (defined in <xref
      target="RFC7490"/>) of the nodes along the expected post-convergence
      path from the PLR to the protected destination and compute an SR
      explicit path from P to Q when they are not adjacent. Such properties
      will be used in <xref target="tilfa_repair_path"/> to compute the TI-LFA
      repair list.</t>

      <section anchor="extp_space"
               title="Extended P-Space property computation for a resource X, over post-convergence paths">
        <t>The objective is to determine which nodes on the post-convergence
        path from the PLR R to the destination D are in the extended P-space of
        R with regard to resource X (where X can be a link or a set of links
        adjacent to the PLR, or a neighbor node of the PLR).</t>

        <t>This can be found by: <list style="symbols">
            <t>Excluding neighbors which are not on the post-convergence path
            when computing P'(R,X)</t>

            <t>Then, intersecting the set of nodes belonging to the
            post-convergence path from R to D, assuming the failure of X, with
            P'(R, X).</t>
          </list></t>
      </section>

      <section anchor="q_space"
               title="Q-Space property computation for a resource X,   over post-convergence paths">
        <t>The goal is to determine which nodes on the post-convergence path
        from the Point of Local Repair (PLR) R to the destination D are in the
        Q-Space of destination D with regard to resource X (where X can be a
        link or a set of links adjacent to the PLR, or a neighbor node of the
        PLR).</t>

        <t>This can be found by intersecting the set of nodes belonging to the
        post-convergence path from R to D, assuming the failure of X, with
        Q(D, X).</t>
      </section>

      <section anchor="q_space_scaling"
               title="Scaling considerations when computing Q-Space">
        <t><xref target="RFC7490"/> raises scaling concerns about computing a
        Q-Space per destination. Similar concerns may affect TI-LFA
        computation if an implementation tries to compute a reverse Shortest
        Path Tree (<xref target="RFC7490"/>) for every destination in the
        network to determine the Q-Space. It will be up to each implementation
        to determine the good tradeoff between scaling and accuracy of the
        optimization.</t>
      </section>
    </section>

    <section anchor="tilfa_repair_path" title="TI-LFA Repair path">
      <t>The TI-LFA repair path (RP) consists of an outgoing interface and a
      list of segments (repair list (RL)) to insert on the SR header in
      accordance with the dataplane used. The repair list encodes the explicit,
      and possibly post-convergence, path to the destination, which avoids the
      protected resource X and, at the same time, is guaranteed to be loop-free
      irrespective of the state of FIBs along the nodes belonging to the
      explicit path as long as the states of the FIBs are programmed according
      to a link-state IGP. Thus, there is no need for any co-ordination or
      message exchange between the PLR and any other router in the network.</t>

      <t>The TI-LFA repair path is found by intersecting P(S,X) and Q(D,X) with
      the post-convergence path to D and computing the explicit SR- based path
      EP(P, Q) from a node P in P(S,X) to a node Q in Q(D,X) when these nodes
      are not adjacent along the post convergence path. The TI-LFA repair list
      is expressed generally as (Node-SID(P), EP(P, Q)).</t>

      <figure anchor="sample-topo1" title="Sample topology with TI-LFA">
        <artwork>
    
  S ------- N1 ----------- D    
  *\         |  \          |           
  * \        |   \         |
  *  \       |    \        |
  *   N2-----R1****R2 *** R3
  *          *
  N3 *********
      

    ***** : link with high metric (1k)
    ----- : link with metric 1

   	</artwork>
      </figure>

      <t>As an example, in <xref target="sample-topo1"/>, the focus is on the
      TI-LFA backup from S to D, considering the failure of node N1.</t>

      <t><list style="symbols">
          <t>First, P(S, N1) is computed and results in [N3, N2, R1].</t>

          <t>Then, Q(D, N1) is computed and results in [R3].</t>

          <t>The expected post-convergence path from S to D considering the
          failure of N1 is &lt;N2 -&gt; R1 -&gt; R2 -&gt; R3 -&gt; D&gt; (we
          are naming it PCPath in this example).</t>

          <t>P(S, N1) intersection with PCPath is [N2, R1], R1 being the
          deeper downstream node in PCP, it can be assumed to be used as P
          node (this is an example and an implementation could use a different
          strategy to choose the P node).</t>

          <t>Q(D, N1) intersection with PCPath is [R3], so R3 is picked as Q
          node. An SR explicit path is then computed from R1 (P node) to R3 (Q
          node) following PCPath (R1 -&gt; R2 -&gt; R3): &lt;Adj-Sid(R1-R2),
          Adj-Sid(R2-R3)&gt;.</t>
        </list> As a result, the TI-LFA repair list of S for destination D
      considering the failure of node N1 is: &lt;Node-SID(R1), Adj-Sid(R1-R2),
      Adj-Sid(R20R3)&gt;.</t>

      <t>Most often, the TI-LFA repair list has a simpler form, as described
      in the following sections. <xref target="analysis"/> provides statistics
      for the number of SIDs in the explicit path to protect against various
      failures.</t>

      <section anchor="direct_backup" title="FRR path using a direct neighbor">
        <t>When a direct neighbor is in P(S,X) and Q(D,x) and the link to that
        direct neighbor is on the post-convergence path, the outgoing
        interface is set to that neighbor and the repair segment list SHOULD
        be empty.</t>

        <t>This is comparable to a post-convergence LFA FRR repair.</t>
      </section>

      <section anchor="pq_backup" title="FRR path using a PQ node">
        <t>When a remote node R is in P(S,X) and Q(D,x) and on the
        post-convergence path, the repair list SHOULD be made of a single node
        segment to R and the outgoing interface SHOULD be set to the outgoing
        interface used to reach R.</t>

        <t>This is comparable to a post-convergence RLFA repair tunnel.</t>
      </section>

      <section anchor="adj_pq_backup"
               title="FRR path using a P node and Q node that are adjacent">
        <t>When a node P is in P(S,X) and a node Q is in Q(D,x) and both are
        on the post-convergence path and both are adjacent to each other, the
        repair list SHOULD be made of two segments: A node segment to P (to be
        processed first), followed by an adjacency segment from P to Q.</t>

        <t>This is comparable to a post-convergence DLFA (LFA with directed
        forwarding) repair tunnel.</t>
      </section>

      <section anchor="remote_pq_backup"
               title="Connecting distant P and Q nodes along post-convergence paths">
        <t>In some cases, there is no adjacent P and Q node along the post-
        convergence path. As mentioned in <xref target="base"/>, a list of
        adjacency SIDs can be used to encode the path between P and Q.
        However, the PLR can perform additional computations to compute a list
        of segments that represent a loop-free path from P to Q. How these
        computations are done is out of scope of this document and is left to
        implementation.</t>
      </section>
    </section>

    <section anchor="repairlist" title="Building TI-LFA repair lists">
      <t>The following sections describe how to build the repair lists using
      the terminology defined in <xref target="RFC8402"/>. The procedures
      described in this section are equally applicable to both SR-MPLS and
      SRv6 dataplane, while the dataplane-specific considerations are
      described in <xref target="dataplane"/>.</t>

      <t>In this section, the process by which a protecting router S handles
      the active segment of a packet upon the failure of its primary outgoing
      interface for the packet, S-F, is explained. The failure of the primary
      outgoing interface may occur due to various triggers, such as link
      failure, neighbor node failure, and others.</t>

      <section anchor="link-protect-node-sid"
               title="The active segment is a node segment">
        <t>The active segment MUST be kept on the SR header unchanged and the
        repair list MUST be added. The active segment becomes the first
        segment after the repair list. The way the repair list is added depends
        on the dataplane used (see <xref target="dataplane"/>).</t>
      </section>

      <section anchor="link-protect-adj-sid"
               title="The active segment is an adjacency segment">
        <t>The FRR behavior applied by S for any packet received with an
        active adjacency segment S-F, for which protection was enabled, is
        defined here. Since protection has been enabled for the segment S-F and
        signaled in the IGP (for instance, using protocol extensions from <xref
        target="RFC8667"/> and <xref target="RFC8665"/>), a calculator of any
        SR policy utilizing this segment is aware that it may be transiently
        rerouted out of S-F in the event of an S-F failure.</t>

        <t>The simplest approach for link protection of an adjacency segment
        S-F is to create a repair list that will carry the traffic to F. To do
        so, one or more “PUSH” operations are performed. If the repair list,
        while avoiding S-F, terminates on F, S only pushes segments of the
        repair list. Otherwise, S pushes a node segment of F, followed by the
        segments of the repair list. For details on the "NEXT" and "PUSH"
        operations, refer to <xref target="RFC8402"/>.</t>

        <t>This method which merges back the traffic at the remote end of the
        adjacency segment has the advantage of keeping as much as possible the
        traffic on the pre-failure path. When SR policies are involved and a
        strict compliance of the policy is required, an end-to-end protection
        should be preferred over a local repair mechanism. However, this method
        may not provide the expected post-convergence path to the final
        destination as the expected post-convergence path may not go through
        F. Another method requires to look to the next segment in the segment
        list.</t>

        <t>The case where this active segment is followed by another adjacency
        segment is distinguished from the case where it is followed by a node
        segment.</t>
        
        <section anchor="link-protect-adj-sid-adj-sid"
                 title="Protecting [Adjacency, Adjacency] segment lists">
          <t>If the next segment in the list is an Adjacency segment, then the
          packet has to be conveyed to F.</t>

          <t>To do so, S MUST apply a "NEXT" operation on Adj-Sid(S-F) and then
          one or more “PUSH” operations. If the repair list, while avoiding
          S-F, terminates on F, S only pushes the segments of the repair list.
          Otherwise, S pushes a node segment of F, followed by the segments of
          the repair list. For details on the "NEXT" and "PUSH" operations,
          refer to <xref target="RFC8402"/>.</t>

          <t>Upon failure of S-F, a packet reaching S with a segment list
          matching [adj-sid(S-F),adj-sid(F-M),...] will thus leave S with a segment
          list matching [RL(F),node(F),adj-sid(F-M),...], where RL(F) is the
          repair path for destination F.</t>
        </section>

        <section anchor="link-protect-adj-sid-node-sid"
                 title="Protecting [Adjacency, Node] segment lists">
          <t>If the next segment in the stack is a node segment, say for node
          T, the segment list on the packet matches
          [adj-sid(S-F),node(T),...].</t>

          <t>In this case, S MUST apply a "NEXT" operation on the Adjacency
          segment related to S-F, followed by a "PUSH" of a repair list
          redirecting the traffic to a node Q, whose path to node segment T is
          not affected by the failure.</t>

          <t>Upon failure of S-F, packets reaching S with a segment list
          matching [adj-sid(S-F), node(T), ...], would leave S with a segment list
          matching [RL(Q),node(T), ...].</t>
        </section>
      </section>
    </section>

    <section anchor="dataplane" title="Dataplane specific considerations">
      <section anchor="mpls-dataplane" title="MPLS dataplane considerations">
        <t>MPLS dataplane for Segment Routing is described in <xref
        target="RFC8660"/>.</t>

        <t>The following dataplane behaviors apply when creating a repair list
        using an MPLS dataplane: <list style="numbers">
            <t>If the active segment is a node segment that has been signaled
            with penultimate hop popping and the repair list ends with an
            adjacency segment terminating on a node that advertised NEXT
            operation <xref target="RFC8402"/> of the active segment, then the
            active segment MUST be popped before pushing the repair list.</t>

            <t>If the active segment is a node segment but the other conditions
            in 1. are not met, the active segment MUST be popped then pushed
            again with a label value computed according to the Segment Routing
            Global Block of Q, where Q is the endpoint of the repair
            list. Finally, the repair list MUST be pushed.</t>
          </list></t>
      </section>

      <section anchor="srv6-dataplane" title="SRv6 dataplane considerations">
        <t>SRv6 dataplane and programming instructions are described
        respectively in <xref target="RFC8754"/> and <xref
        target="RFC8986"/>.</t>

        <t>The TI-LFA path computation algorithm is the same as in the SR-MPLS
        dataplane. Note however that the Adjacency SIDs are typically globally
        routed. In such case, there is no need for preceding an adjacency SID
        with a Prefix-SID <xref target="RFC8402"/> and the resulting repair
        list is likely shorter.</t>

        <t>If the traffic is protected at a Transit Node, then an SRv6 SID
        list is added on the packet to apply the repair list. The addition of
        the repair list follows the headend behaviors as specified in section
        5 of <xref target="RFC8986"/>.</t>

        <t>If the traffic is protected at an SR Segment Endpoint Node, first
        the Segment Endpoint packet processing is executed. Then the packet is
        protected as if its were a transit packet.</t>
      </section>
    </section>

    <section anchor="tilfa-sr-algo" title="TI-LFA and SR algorithms">
      <t>SR allows an operator to bind an algorithm to a prefix-SID (as
      defined in <xref target="RFC8402"/>. The algorithm value dictates how
      the path to the prefix is computed. The SR default algorithm is known
      has the "Shortest Path" algorithm. The SR default algorithm allows an
      operator to override the IGP shortest path by using local policies. When
      TI-LFA uses Node-SIDs associated with the default algorithm, there is no
      guarantee that the path will be loop-free as a local policy may have
      overriden the expected IGP path. As the local policies are defined by
      the operator, it becomes the responsibility of this operator to ensure
      that the deployed policies do not affect the TI-LFA deployment. It
      should be noted that such situation can already happen today with
      existing mechanisms as remote LFA.</t>

      <t><xref target="RFC9350"/> defines a flexible algorithm (FlexAlgo)
      framework to be associated with Prefix-SIDs. FlexAlgo allows a user to
      associate a constrained path to a Prefix-SID rather than using the
      regular IGP shortest path. An implementation MAY support TI-LFA to
      protect Node-SIDs associated to a FlexAlgo. In such a case, rather than
      computing the expected post-convergence path based on the regular SPF,
      an implementation SHOULD use the constrained SPF algorithm bound to the
      FlexAlgo (using the Flex Algo Definition) instead of the regular
      Dijkstra in all the SPF/rSPF computations that are occurring during the
      TI-LFA computation. This includes the computation of the P-Space and
      Q-Space as well as the post-convergence path.  An implementation MUST
      only use Node-SIDs bound to the FlexAlgo and/or Adj-SIDs that are
      unprotected or, in case of SRv6, adj-SIDs that are bound to the FlexAlgo
      to build the repair list.</t>
    </section>

    <section anchor="adj-sid-repair-list"
             title="Usage of Adjacency segments in the repair list">
      <t>The repair list of segments computed by TI-LFA may contain one or
      more adjacency segments. An adjacency segment may be protected or not
      protected.</t>

      <figure anchor="cascaded-frr">
        <artwork>

	S --- R2 --- R3 ---- R4 --- R5 --- D
	         *   |  \   *
                   * |   \ *
	            R7 ** R8
	             *    |
                     *    |
	            R9 -- R10
	
	</artwork>
      </figure>

      <t>In <xref target="cascaded-frr"/>, all the metrics are equal to 1
      except R2-R7,R7-R8,R8-R4,R7-R9 which have a metric of 1000. Considering
      R2 as a PLR to protect against the failure of node R3 for the traffic
      S-&gt;D, the repair list computed by R2 will be
      [adj-sid(R7-R8),adj-sid(R8-R4)] and the outgoing interface will be to
      R7. If R3 fails, R2 pushes the repair list onto the incoming packet to
      D. During the FRR, if R7-R8 fails and if TI-LFA has picked a protected
      adjacency segment for adj-sid(R7-R8), R7 will push an additional repair
      list onto the packet following the procedures defined in <xref
      target="repairlist"/>.</t>

      <t>To avoid the possibility of this double FRR activation, an
      implementation of TI-LFA MAY pick only non protected adjacency segments
      when building the repair list. However, this is important to note that
      FRR in general is intended to protect for a single pre-planned failure.
      If the failure that happens is worse than expected or multiple failures
      happen, FRR is not guaranteed to work. In such a case, fast IGP
      convergence remains important to restore traffic as quickly as
      possible.</t>
      
    </section>

    <section anchor="security" title="Security Considerations">
      <t>The techniques described in this document are internal functionalities
      to a router that can guarantee an upper bound on the time taken to
      restore traffic flow upon the failure of a directly connected link or
      node. As these techniques steer traffic to the post-convergence path as
      quickly as possible, this serves to minimize the disruption associated
      with a local failure which can be seen as a modest security
      enhancement. The protection mechanisms does not protect external
      destinations, but rather provides quick restoration for destination that
      are internal to a routing domain.</t>

      <t>Security considerations described in <xref target="RFC5286"/> and
      <xref target="RFC7490"/> apply to this document. Similarly, as the
      solution described in the document is based on Segment Routing
      technology, reader should be aware of the security considerations
      related to this technology (<xref target="RFC8402"/>) and its dataplane
      instantiations (<xref target="RFC8660"/>, <xref target="RFC8754"/> and
      <xref target="RFC8986"/>). However, this document does not introduce
      additional security concern.</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>No requirements for IANA</t>
    </section>

    <section anchor="contributors" title="Contributors">
      <t>In addition to the authors listed on the front page, the following
      co-authors have also contributed to this document: <list style="symbol">
          <t>Francois Clad, Cisco Systems</t>

          <t>Pablo Camarillo, Cisco Systems</t>
        </list></t>
    </section>

    <section anchor="ack" title="Acknowledgments">
      <t>The authors would like to thank Les Ginsberg, Stewart Bryant, Alexander
      Vainsthein, Chris Bowers, Shraddha Hedge, Wes Hardaker, Gunter Van de
      Velde and John Scudder for their valuable comments.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;

      &RFC7916;

      &RFC8174;

      &RFC8402;

      &RFC8660;

      &RFC8754;

      &RFC8986;
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.5714" ?>

      <?rfc include="reference.RFC.5715" ?>

      <?rfc include="reference.RFC.5286" ?>
      
      <?rfc include="reference.RFC.6976" ?>
      
      <?rfc include="reference.RFC.7490" ?>

      <?rfc include="reference.RFC.8333" ?>
      
      <?rfc include="reference.I-D.bashandy-rtgwg-segment-routing-uloop"?>

      &FLEXALGO;

      &RFC9256;

      &RFC6571;

      &RFC8665;

      &RFC8667;
    </references>
      <section anchor="advantages-post-conv-path"
             title="Advantages of using the expected post-convergence path during FRR">
      <t><xref target="RFC7916"/> raised several operational considerations
      when using LFA or remote LFA. <xref target="RFC7916"/> Section 3
      presents a case where a high bandwidth link between two core routers is
      protected through a PE router connected with low bandwidth links. In
      such a case, congestion may happen when the FRR backup path is
      activated. <xref target="RFC7916"/> introduces a local policy framework
      to let the operator tuning manually the best alternate election based on
      its own requirements.</t>

      <t>From a network capacity planning point of view, it is often assumed
      for simplicity that if a link L fails on a particular node X, the
      bandwidth consumed on L will be spread over some of the remaining links
      of X. The remaining links to be used are determined by the IGP routing
      considering that the link L has failed (we assume that the traffic uses
      the post-convergence path starting from the node X). In <xref
      target="figure1"/>, we consider a network with all metrics equal to 1
      except the metrics on links used by PE1, PE2 and PE3 which are 1000. An
      easy network capacity planning method is to consider that if the link L
      (X-B) fails, the traffic actually flowing through L will be spread over
      the remaining links of X (X-H, X-D, X-A). Considering the IGP metrics,
      only X-H and X-D can be used in reality to carry the traffic flowing
      through the link L. As a consequence, the bandwidth of links X-H and X-D
      is sized according to this rule. We should observe that this capacity
      planning policy works, however it is not fully accurate.</t>

      <t>In <xref target="figure1"/>, considering that the source of traffic
      is only from PE1 and PE4, when the link L fails, depending on the
      convergence speed of the nodes, X may reroute its forwarding entries to
      the remote PEs onto X-H or X-D; however in a similar timeframe, PE1 will
      also reroute a subset of its traffic (the subset destined to PE2) out of
      its nominal path reducing the quantity of traffic received by X. The
      capacity planning rule presented previously has the drawback of
      oversizing the network, however it allows to prevent any transient
      congestion (when for example X reroutes traffic before PE1 does).</t>

      <figure anchor="figure1">
        <artwork>

           H --- I --- J 
           |           | \
PE4        |           |  PE3
   \       | (L)       | /
     A --- X --- B --- G
    /      |           | \
 PE1       |           |  PE2
    \      |           | /
     C --- D --- E --- F
	
	</artwork>
      </figure>

      <t>Based on this assumption, in order to facilitate the operation of
      FRR, and limit the implementation of local FRR policies, traffic can be
      steered by the PLR onto its expected post-convergence path during the
      FRR phase. In our example, when link L fails, X switches the traffic
      destined to PE3 and PE2 on the post-convergence paths. This is perfectly
      inline with the capacity planning rule that was presented before and
      also inline with the fact X may converge before PE1 (or any other
      upstream router) and may spread the X-B traffic onto the
      post-convergence paths rooted at X.</t>

      <t>It should be noted, that some networks may have a different capacity
      planning rule, leading to an allocation of less bandwidth on X-H and X-D
      links. In such a case, using the post-convergence paths rooted at X
      during FRR may introduce some congestion on X-H and X-D links. However
      it is important to note, that a transient congestion may possibly
      happen, even without FRR activated, for instance when X converges before
      the upstream routers. Operators are still free to use the policy
      framework defined in <xref target="RFC7916"/> if the usage of the
      post-convergence paths rooted at the PLR is not suitable.</t>

      <t>Readers should be aware that FRR protection is pre-computing a backup
      path to protect against a particular type of failure (link, node, SRLG).
      When using the post-convergence path as FRR backup path, the computed
      post-convergence path is the one considering the failure we are
      protecting against. This means that FRR is using an expected
      post-convergence path, and this expected post-convergence path may be
      actually different from the post-convergence path used if the failure
      that happened is different from the failure FRR was protecting against.
      As an example, if the operator has implemented a protection against a
      node failure, the expected post-convergence path used during FRR will be
      the one considering that the node has failed. However, even if a single
      link is failing or a set of links is failing (instead of the full node),
      the node-protecting post-convergence path will be used. The consequence
      is that the path used during FRR is not optimal with respect to the
      failure that has actually occurred.</t>

      <t>Another consideration to take into account is: while using the
      expected post-convergence path for SR traffic using node segments only
      (for instance, PE to PE traffic using shortest path) has some
      advantages, these advantages reduce when SR policies (<xref
      target="RFC9256"/>) are involved. A segment-list used in an SR policy is
      computed to obey a set of path constraints defined locally at the
      head-end or centrally in a controller. TI-LFA cannot be aware of such
      path constraints and there is no reason to expect the TI-LFA backup path
      protecting one segments in that segment list to obey those constraints.
      When SR policies are used and the operator wants to have a backup path
      which still follows the policy requirements, this backup path should be
      computed as part of the SR policy in the ingress node (or central
      controller) and the SR policy should not rely on local protection.
      Another option could be to use FlexAlgo (<xref target="RFC9350"/>) to
      express the set of constraints and use a single node segment associated
      with a FlexAlgo to reach the destination. When using a node segment
      associated with a FlexAlgo, TI-LFA keeps providing an optimal backup by
      applying the appropriate set of constraints. The relationship between
      TI-LFA and the SR-algorithm is detailed in <xref
      target="tilfa-sr-algo"/>.</t>
    </section>


    <section anchor="analysis"
             title="Analysis based on real network topologies">
      <t>This section presents analysis performed on real service provider and
      large enterprise network topologies. The objective of the analysis is to
      assess the number of SIDs required in an explicit path when the
      mechanisms described in this document are used to protect against the
      failure scenarios within the scope of this document. The number of
      segments described in this section are applicable to instantiating
      segment routing over the MPLS forwarding plane.</t>

      <t>The measurement below indicate that for link and local SRLG
      protection, a 1 SID repair path delivers more than 99% coverage. For
      node protection a 2 SIDs repair path yields 99% coverage.</t>

      <t>Table 1 below lists the characteristics of the networks used in our
      measurements. The number of links refers to the number of
      "bidirectional" links (not directed edges of the graph). The
      measurements are carried out as follows:</t>

      <t><list style="symbols">
          <t>For each network, the algorithms described in this document are
          applied to protect all prefixes against link, node, and local SRLG
          failure</t>

          <t>For each prefix, the number of SIDs used by the repair path is
          recorded</t>

          <t>The percentage of number of SIDs are listed in Tables 2A/B, 3A/B,
          and 4A/B</t>
        </list></t>

      <t>The measurements listed in the tables indicate that for link and
      local SRLG protection, 1 SID repair path is sufficient to protect more
      than 99% of the prefix in almost all cases. For node protection 2 SIDs
      repair paths yield 99% coverage.</t>

      <figure>
        <artwork>
+-------------+------------+------------+------------+------------+
|   Network   |    Nodes   |  Links     |Node-to-Link| SRLG info? |
|             |            |            |    Ratio   |            |
+-------------+------------+------------+------------+------------+
|    T1       |    408     |      665   |    1.63    |    Yes     |
+-------------+------------+------------+------------+------------+
|    T2       |    587     |     1083   |    1.84    |     No     |
+-------------+------------+------------+------------+------------+
|    T3       |    93      |      401   |    4.31    |    Yes     |
+-------------+------------+------------+------------+------------+
|    T4       |    247     |      393   |    1.59    |    Yes     |
+-------------+------------+------------+------------+------------+
|    T5       |    34      |      96    |    2.82    |    Yes     |
+-------------+------------+------------+------------+------------+
|    T6       |    50      |      78    |    1.56    |     No     |
+-------------+------------+------------+------------+------------+
|    T7       |    82      |      293   |    3.57    |     No     |
+-------------+------------+------------+------------+------------+
|    T8       |    35      |      41    |    1.17    |    Yes     |
+-------------+------------+------------+------------+------------+
|    T9       |    177     |     1371   |    7.74    |    Yes     |
+-------------+------------+------------+------------+------------+
                    Table 1: Data Set Definition
</artwork>
      </figure>

      <t>The rest of this section presents the measurements done on the actual
      topologies. The convention that we use is as follows</t>

      <t><list style="symbols">
          <t>0 SIDs: the calculated repair path starts with a directly
          connected neighbor that is also a loop free alternate, in which case
          there is no need to explicitly route the traffic using additional
          SIDs. This scenario is described in <xref
          target="direct_backup"/>.</t>

          <t>1 SIDs: the repair node is a PQ node, in which case only 1 SID is
          needed to guarantee a loop-free path. This scenario is covered in
          <xref target="pq_backup"/>.</t>

          <t>2 or more SIDs: The repair path consists of 2 or more SIDs as
          described in <xref target="adj_pq_backup"/> and <xref
          target="remote_pq_backup"/>. We do not cover the case for 2 SIDs
          (<xref target="adj_pq_backup"/>) separately because there was no
          granularity in the result. Also we treat the node-SID+adj-SID and
          node-SID + node-SID the same because they do not differ from the
          data plane point of view.</t>
        </list></t>

      <t>Table 2A and 2B below summarize the measurements on the number of
      SIDs needed for link protection</t>

      <figure>
        <artwork>
+-------------+------------+------------+------------+------------+
|   Network   |    0 SIDs  |    1 SID   |   2 SIDs   |   3 SIDs   |
+-------------+------------+------------+------------+------------+
|    T1       |  74.3%     |   25.3%    |   0.5%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T2       |  81.1%     |   18.7%    |   0.2%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T3       |  95.9%     |    4.1%    |   0.1%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T4       |  62.5%     |   35.7%    |   1.8%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T5       |  85.7%     |   14.3%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T6       |  81.2%     |   18.7%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T7       |  98.9%     |   1.1%     |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T8       |  94.1%     |   5.9%     |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T9       |  98.9%     |   1.0%     |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
        Table 2A: Link protection (repair size distribution)

+-------------+------------+------------+------------+------------+
|   Network   |    0 SIDs  |    1 SID   |   2 SIDs   |   3 SIDs   |
+-------------+------------+------------+------------+------------+
|    T1       |  74.2%     |   99.5%    |    99.9%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T2       |  81.1%     |   99.8%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T3       |  95.9%     |   99.9%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T4       |  62.5%     |   98.2%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T5       |  85.7%     |  100.0%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T6       |  81.2%     |   99.9%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T7       |  98,8%     |  100.0%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T8       |  94,1%     |  100.0%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
|    T9       |  98,9%     |  100.0%    |   100.0%   |   100.0%   |
+-------------+------------+------------+------------+------------+
    Table 2B: Link protection repair size cumulative distribution
Table 3A and 3B summarize the measurements on the number of SIDs
needed for local SRLG protection.

+-------------+------------+------------+------------+------------+
|   Network   |    0 SIDs  |    1 SID   |   2 SIDs   |   3 SIDs   |
+-------------+------------+------------+------------+------------+
|    T1       |  74.2%     |   25.3%    |   0.5%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T2       |                No SRLG Information                |
+-------------+------------+------------+------------+------------+
|    T3       |  93.6%     |    6.3%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T4       |  62.5%     |   35.6%    |   1.8%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T5       |  83.1%     |   16.8%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T6       |                No SRLG Information                |
+-------------+---------------------------------------------------+
|    T7       |                No SRLG Information                |
+-------------+------------+------------+------------+------------+
|    T8       |  85.2%     |   14.8%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T9       |  98,9%     |    1.1%    |   0.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
      Table 3A: Local SRLG protection repair size distribution

+-------------+------------+------------+------------+------------+
|   Network   |    0 SIDs  |    1 SID   |   2 SIDs   |   3 SIDs   |
+-------------+------------+------------+------------+------------+
|    T1       |  74.2%     |   99.5%    |  99.9%     | 100.0%     |
+-------------+------------+------------+------------+------------+
|    T2       |                No SRLG Information                |
+-------------+------------+------------+------------+------------+
|    T3       |  93.6%     |   99.9%    | 100.0%     |   0.0%     |
+-------------+------------+------------+------------+------------+
|    T4       |  62.5%     |   98.2%    | 100.0%     | 100.0%     |
+-------------+------------+------------+------------+------------+
|    T5       |  83.1%     |  100.0%    | 100.0%     | 100.0%     |
+-------------+------------+------------+------------+------------+
|    T6       |                No SRLG Information                |
+-------------+---------------------------------------------------+
|    T7       |                No SRLG Information                |
+-------------+------------+------------+------------+------------+
|    T8       |  85.2%     |   100.0%   | 100.0%     | 100.0%     |
+-------------+------------+------------+------------+------------+
|    T9       |  98.9%     |   100.0%   | 100.0%     | 100.0%     |
+-------------+------------+------------+------------+------------+
 Table 3B: Local SRLG protection repair size Cumulative distribution
The remaining two tables summarize the measurements on the number of
SIDs needed for node protection.

+---------+----------+----------+----------+----------+----------+
| Network |  0 SIDs  |   1 SID  | 2 SIDs   |  3 SIDs  |  4 SIDs  |
+---------+----------+----------+----------+----------+----------+
|    T1   |  49.8%   | 47.9%    | 2.1%     |  0.1%    |  0.0%    |
+---------+----------+----------+----------+----------+----------+
|    T2   |  36,5%   | 59.6%    | 3.6%     |  0.2%    |  0.0%    |
+---------+----------+----------+----------+----------+----------+
|    T3   |  73.3%   | 25.6%    | 1.1%     |  0.0%    |  0.0%    |
+---------+----------+----------+----------+----------+----------+
|    T4   |  36.1%   | 57.3%    | 6.3%     |  0.2%    |  0.0%    |
+---------+----------+----------+----------+----------+----------+
|    T5   |  73.2%   | 26.8%    | 0%       |  0%      |  0%      |
+---------+----------+----------+----------+----------+----------+
|    T6   |  78.3%   | 21.3%    | 0.3%     |  0%      |  0%      |
+---------+----------+----------+----------+----------+----------+
|    T7   |  66.1%   | 32.8%    | 1.1%     |  0%      |  0%      |
+---------+----------+----------+----------+----------+----------+
|    T8   |  59.7%   | 40.2%    | 0%       |  0%      |  0%      |
+---------+----------+----------+----------+----------+----------+
|    T9   |  98.9%   | 1.0%     | 0%       |  0%      |  0%      |
+---------+----------+----------+----------+----------+----------+
        Table 4A: Node protection (repair size distribution)

+---------+----------+----------+----------+----------+----------+
| Network |  0 SIDs  |   1 SID  | 2 SIDs   |  3 SIDs  |  4 SIDs  |
+---------+----------+----------+----------+----------+----------+
|    T1   |  49.7%   |  97.6%   |  99.8%   | 99.9%    |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T2   |  36.5%   |  96.1%   |  99.7%   | 99.9%    |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T3   |  73.3%   |  98.9%   |  99.9%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T4   |  36.1%   |  93.4%   |  99.8%   | 99.9%    |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T5   |  73.2%   | 100.0%   | 100.0%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T6   |  78.4%   | 99.7%    | 100.0%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T7   |  66.1%   | 98.9%    | 100.0%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T8   |  59.7%   | 100.0%   | 100.0%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
|    T9   |  98.9%   | 100.0%   | 100.0%   | 100.0%   |  100%    |
+---------+----------+----------+----------+----------+----------+
   Table 4B: Node protection (repair size cumulative distribution)
</artwork>
      </figure>
    </section>
    
  </back>

</rfc>

