# TI-LFA Pt. 3 (Node and SRLG Protection)

By default, TI-LFA implements only link protection for the backup/repair path. The repair path is calculated by finding the best path with the protected link removed from the topology. However there are two other protection option you can use: node protection and SRLG protection.



Node protection means that the next-hop node is pruned from the topology when the backup path is calculated. SRLG protection means that all local links that are part of the same SRLG group as the primary link, are pruned from the topology when the backup path is calculated.



If you are not familiar with SRLG (Shared Risk Link Group), it is used to indicate that two or more links share the same fate. For example, two links may run inside the same conduit, so if a backhoe takes one link out, it is highly likely the other link is cut as well. When you use SRLG protection, you are telling the router that other links may very well be down when the primary link goes down, so use other links that are _not_ in the same SRLG as the primary link. Note that only locally configured interfaces are considered when TI-LFA finds SRLG-disjoint paths. The local node will not run CSPF with _other_ router’s links pruned which share the same SRLG.



Whether node, link, or SRLG protection is used, the link failure event is always what triggers the backup path. The router does not actually know whether the node on the other end went down or just the link went down, so when using node or SRLG protection you may get a backup path that differs from the post-convergence path. If the node does _not_ go down, but you are avoiding it in your backup path, you might re-converge on a different path compared to the backup path. This is usually not really an issue, it just means that the backup path did not take the most optimal path.



To configure TI-LFA for node or SRLG protection, you use tiebreakers. In regular LFA, tiebreakers are used to select a single LFA among multiple LFA candidates. However with TI-LFA, the tiebreaker is used to specify the protection mode (link, node or SRLG) and the order in which to prefer the protection modes. You can configure node or srlg protection modes. Both of these also must be link-protecting by definition, as you cannot find a node or srlg protecting path that does not also protect the link.



If you configure both node and SRLG protection, the router will attempt to find a backup path in the following order:

* A path that is both node and SRLG protecting
* A path that is only node or only SRLG protecting path (the mode with highest preference)
* A path that is only node or only SRLG protecting path (the mode with lowest preference)
* A path that is only link protecting



Here is an example in ISIS with both node protection and SRLG protection configured. Node protection is given priority. First the router will try to find a path that is node and SRLG protecting, then node protecting only, then SRLG protecting only, then fall back to link protecting.

```
router isis 1
 int gi0/0/0/0
  address-family ipv4 unicast
   fast-reroute per-prefix tiebreaker node-protecting index 20
   fast-reroute per-prefix tiebreaker srlg-disjoint index 10
```



The higher index number is more preferred. You can confirm the TI-LFA tie breakers using the following show command:

```
RP/0/0/CPU0:R1#show isis interface gi0/0/0/0 | begin FRR
Sun Aug 28 20:50:04.897 UTC
    FRR (L1/L2):            L1 Enabled         L2 Enabled     
      FRR Type:             per-prefix         per-prefix     
      Direct LFA:           Enabled            Enabled        
      Remoter LFA:          Not Enabled        Not Enabled    
       Tie Breaker          Default            Default        
       Line-card disjoint   30                 30             
       Lowest backup metric 20                 20             
       Node protecting      40                 40             
       Primary path         10                 10             
      TI LFA:               Enabled            Enabled        
       Tie Breaker          Default            Default        
       Link Protecting      Enabled            Enabled        
       Node protecting      20                 20             
       SRLG disjoint        10                 10
```



As a comparison, Gi0/0/0/1 has TI-LFA enabled but no tiebreakers are configured. The default link protecting mode is enabled, and node and SRLG modes have an index of 0.

```
RP/0/0/CPU0:R1#show isis interface gi0/0/0/1 | begin FRR
Sun Aug 28 20:50:36.475 UTC
    FRR (L1/L2):            L1 Enabled         L2 Enabled     
      FRR Type:             per-prefix         per-prefix     
      Direct LFA:           Enabled            Enabled        
      Remoter LFA:          Not Enabled        Not Enabled    
       Tie Breaker          Default            Default        
       Line-card disjoint   30                 30             
       Lowest backup metric 20                 20             
       Node protecting      40                 40             
       Primary path         10                 10             
      TI LFA:               Enabled            Enabled        
       Tie Breaker          Default            Default        
       Link Protecting      Enabled            Enabled        
       Node protecting      0                  0              
       SRLG disjoint        0                  0
```



The configuration for OSPF is similar but you can configure this at the instance level:

```
router ospf 1
 segment-routing mpls
 fast-reroute per-prefix
 fast-reroute per-prefix ti-lfa enable
 fast-reroute per-prefix tiebreaker node-protecting index 200
 fast-reroute per-prefix tiebreaker srlg-disjoint index 100
 area 0
  int Gi0/0/0/0
   network point-to-point
  int Gi0/0/0/1
   network point-to-point
  int Lo0
   prefix-sid index 1
```

* I use index values of 200 and 100 to differentiate from other tiebreakers which have indexes of 20 and 10 by default.

```
RP/0/0/CPU0:R1#show ospf int Gi0/0/0/0 | be tiebreaker
Sun Aug 28 20:54:41.698 UTC
   IPFRR per-prefix tiebreakers:
    Name                    Index
    No Tunnel (Implicit)    257
    Node Protection         200
    SRLG Disjoint           100
    Lowest Metric           20
    Primary Path            10
    Downstream              0
    Line-card Disjoint      0
    Secondary Path          0
    Post Convergence Path   256
    Topology Independent LFA enabled
```



### Lab <a href="#id-94e09989-c0ed-4317-8449-b977a9873c3d" id="id-94e09989-c0ed-4317-8449-b977a9873c3d"></a>

We’ll re-use our topology from the previous section, and add a link between R2-R3:

<figure><img src="https://1203572585-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAMH3CMtmYTBkob03NUj%2Fuploads%2Fpzh8mw2wgvCP5k8sGFjW%2FUntitled.png?alt=media&#x26;token=87dcf886-3d72-4bb5-a544-dd4da5078c52" alt=""><figcaption></figcaption></figure>

R1 still has the same IGP configuration, with the default TI-LFA link protection mode.

```
RP/0/0/CPU0:R1#show run router isis
Sun Aug 28 21:09:47.826 UTC
router isis 1
 is-type level-2-only
 net 49.0001.0000.0000.0001.00
 address-family ipv4 unicast
  metric-style wide
  segment-routing mpls
 !
 interface Loopback0
  address-family ipv4 unicast
   prefix-sid index 1
  !
 !
 interface GigabitEthernet0/0/0/0
  point-to-point
  address-family ipv4 unicast
   fast-reroute per-prefix
   fast-reroute per-prefix ti-lfa
  !
 !
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv4 unicast
  !
 !
!
```



Configure the new R2-R3 link:

```
#R2
int gi0/0/0/2
 ip address 10.2.3.2/24
 no shut
!
router isis 1
 int gi0/0/0/2
  point-to-point
  address-family ipv4 unicast

#R3
int gi0/0/0/2
 ip address 10.2.3.3/24
 no shut
!
router isis 1
 int gi0/0/0/2
  point-to-point
  address-family ipv4 unicast
  
```



Now R3’s shortest path to 6.6.6.6/32 is via R2:

```
RP/0/0/CPU0:R3#show route 6.6.6.6/32
Sun Aug 28 21:12:55.332 UTC

Routing entry for 6.6.6.6/32
  Known via "isis 1", distance 115, metric 40, labeled SR, type level-2
  Installed Aug 28 21:12:08.515 for 00:00:46
  Routing Descriptor Blocks
    10.2.3.2, from 6.6.6.6, via GigabitEthernet0/0/0/2
      Route metric is 40
  No advertising protos.
```



R1’s backup path for 6.6.6.6/32 is simply to send the traffic to R3:

```
RP/0/0/CPU0:R1#show isis fast-reroute 6.6.6.6/32
Sun Aug 28 21:12:22.665 UTC

L2 6.6.6.6/32 [40/115]
     via 10.1.2.2, GigabitEthernet0/0/0/0, R2, SRGB Base: 16000, Weight: 0
       FRR backup via 10.1.3.3, GigabitEthernet0/0/0/1, R3, SRGB Base: 16000, Weight: 0, Metric: 50


RP/0/0/CPU0:R1#show cef 6.6.6.6/32
Sun Aug 28 21:13:26.551 UTC
6.6.6.6/32, version 178, labeled SR, internal 0x1000001 0x81 (ptr 0xa12dbdbc) [1], 0x0 (0xa12c19bc), 0xa28 (0xa1742444)
 Updated Aug 28 21:12:07.437 
 local adjacency 10.1.2.2
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
 Extensions: context-label:16006
   via 10.1.2.2/32, GigabitEthernet0/0/0/0, 24 dependencies, weight 0, class 0, protected [flags 0x400]
    path-idx 0 bkup-idx 1 NHID 0x0 [0xa179f0e4 0x0]
    next hop 10.1.2.2/32
     local label 24012      labels imposed {24011}
   via 10.1.3.3/32, GigabitEthernet0/0/0/1, 24 dependencies, weight 0, class 0, backup (Local-LFA) [flags 0x300]
    path-idx 1 NHID 0x0 [0xa166e338 0x0]
    next hop 10.1.3.3/32
    local adjacency
     local label 24012      labels imposed {24011}
```

* Coincidentally, both R2 and R3 have allocated the same label, 24011, for 6.6.6.6/32



<figure><img src="https://1203572585-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAMH3CMtmYTBkob03NUj%2Fuploads%2FzgvmKHbyFFQXRqZhxEAM%2FUntitled%201.png?alt=media&#x26;token=657aee77-08d5-4462-906f-e9f8cf1cf5be" alt=""><figcaption></figcaption></figure>

* Current backup path



### Node Protection

Now let’s configure TI-LFA for node protection. This means that the IGP should remove node R2 completely from the topology when calculating the repair path in order to avoid it, as we are protecting traffic in the event that R2 crashes completely. In MPLS-TE we specified a TE tunnel with a strict path that would exclude 2.2.2.2. With TI-LFA we can simply turn on node protection.

```
#R1
router isis 1
 int gi0/0/0/0
  address-family ipv4 unicast
   fast-reroute per-prefix tiebreaker node-protecting index 100
```



The repair path is now back to what we saw before adding the R2-R3 link (R1-R3-R5-R6).

```
RP/0/0/CPU0:R1#show isis fast-reroute 6.6.6.6/32
Sun Aug 28 21:17:21.885 UTC

L2 6.6.6.6/32 [40/115]
     via 10.1.2.2, GigabitEthernet0/0/0/0, R2, SRGB Base: 16000, Weight: 0
         Backup path: TI-LFA (node), via 10.1.3.3, GigabitEthernet0/0/0/1 R3, SRGB Base: 16000, Weight: 0
           P node: R5.00 [5.5.5.5], Label: 16005
           Q node: R6.00 [6.6.6.6], Label: 24003
           Prefix label: ImpNull
           Backup-src: R6.00
```



### SRLG Protection

Let’s add a second link to R1-R2. Instead of configuring an LACP bundle, we will use this link as a backup interface with a metric of 15.

<figure><img src="https://1203572585-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAMH3CMtmYTBkob03NUj%2Fuploads%2FU9QMNvioiVzMTZq4VeyF%2FUntitled%202.png?alt=media&#x26;token=4b6e5b7f-dee1-464a-9df8-13fcb23b438c" alt=""><figcaption></figcaption></figure>

Let’s configure the interfaces and also remove node-protection for TI-LFA.

```
#R1
int gi0/0/0/2
 ip address 10.1.12.1/24
 no shut
!
router isis 1 
 int gi0/0/0/2
  point-to-point
  address-family ipv4 unicast
   metric 15
 !
 int Gi0/0/0/0
  address-family ipv4 unicast
   no fast-reroute per-prefix tiebreaker node-protecting

#R2
int gi0/0/0/3
 ip address 10.1.12.2/24
 no shut
!
router isis 1 
 int gi0/0/0/3
  point-to-point
  address-family ipv4 unicast
   metric 15
```



R1 will now select Gi0/0/0/2 as the backup path, as this is the post-convergence path if link Gi0/0/0/0 fails:

```
RP/0/0/CPU0:R1#show isis fast-reroute 6.6.6.6/32
Sun Aug 28 21:49:26.693 UTC

L2 6.6.6.6/32 [40/115]
     via 10.1.2.2, GigabitEthernet0/0/0/0, R2, SRGB Base: 16000, Weight: 0
       FRR backup via 10.1.12.2, GigabitEthernet0/0/0/2, R2, SRGB Base: 16000, Weight: 0, Metric: 45
```



Let’s imagine that the fiber for these two links shares the same conduit. We are concerned that if Gi0/0/0/0 goes down, Gi0/0/0/2 may also go down. We’ll configure both of these interfaces as part of the same SRLG and configure TI-LFA to select a SRLG-disjoint backup path if it is available. To do this, the IGP will remove all local links belonging to the same SRLG as Gi0/0/0/0 from the topology, and then run SPF to determine the backup path.

```
#R1
srlg
 group CONDUIT_A 1 value 1
 !
 int Gi0/0/0/0
  group 1 CONDUIT_A
 int Gi0/0/0/2
  group 1 CONDUIT_A
!
router isis 1
 int gi0/0/0/0
  address-family ipv4 unicast
   fast-reroute per-prefix tiebreaker srlg-disjoint index 200
```



Can you predict the backup path? Spend a few minutes thinking it through and then scroll down to check your answer.



The backup path is the following:

<figure><img src="https://1203572585-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAMH3CMtmYTBkob03NUj%2Fuploads%2FQ5UMrGgtMKBxp59mSjyx%2FUntitled%203.png?alt=media&#x26;token=8c6438a3-7139-4b23-b6d5-77f420650582" alt=""><figcaption></figcaption></figure>

This is because TI-LFA is only attempting to find an SRLG disjoint backup path, not an SRLG disjoint _plus_ node protecting path.

```
RP/0/0/CPU0:R1#show isis fast-reroute 6.6.6.6/32
Sun Aug 28 21:54:02.104 UTC

L2 6.6.6.6/32 [40/115]
     via 10.1.2.2, GigabitEthernet0/0/0/0, R2, SRGB Base: 16000, Weight: 0
         Backup path: TI-LFA (srlg), via 10.1.3.3, GigabitEthernet0/0/0/1 R3, SRGB Base: 16000, Weight: 0
           Prefix label: 16006, Strict-SPF label: None
           Backup-src: R6.00
```



### Node and SRLG Protection

If we want node protection as well as SRLG-disjoint, we can configure both and the router will first prefer a backup path that is both SRLG-disjoint and node protecting. Let’s set node protection as index 150.

```
#R1
router isis 1
 int Gi0/0/0/0
  address-family ipv4 unicast
   fast-reroute per-prefix tiebreaker node-protecting index 150
commit
end
!
RP/0/0/CPU0:R1#show run router isis 1 int gi0/0/0/0
Sun Aug 28 21:57:55.268 UTC
router isis 1
 interface GigabitEthernet0/0/0/0
  point-to-point
  address-family ipv4 unicast
   fast-reroute per-prefix
   fast-reroute per-prefix tiebreaker node-protecting index 150
   fast-reroute per-prefix tiebreaker srlg-disjoint index 200
   fast-reroute per-prefix ti-lfa
  !
 !
```



The backup path is now both SRLG disjoint and node protecting!

```
RP/0/0/CPU0:R1#show isis fast-reroute 6.6.6.6/32   
Sun Aug 28 21:58:06.487 UTC

L2 6.6.6.6/32 [40/115]
     via 10.1.2.2, GigabitEthernet0/0/0/0, R2, SRGB Base: 16000, Weight: 0
         Backup path: TI-LFA (node+srlg), via 10.1.3.3, GigabitEthernet0/0/0/1 R3, SRGB Base: 16000, Weight: 0
           P node: R5.00 [5.5.5.5], Label: 16005
           Q node: R6.00 [6.6.6.6], Label: 24003
           Prefix label: ImpNull
           Backup-src: R6.00
```



### Conclusion <a href="#id-7b81389a-556d-4a06-9926-7301e1c1994f" id="id-7b81389a-556d-4a06-9926-7301e1c1994f"></a>

In this series, we’ve explored the theory behind the IPFRR technologies - LFA, rLFA and TI-LFA. We’ve seen the benefits that TI-LFA and had some practice implementing all IP FRR flavors.

I hope this series has been helpful. I highly suggest working through Nick Russo’s blog posts if you haven’t already. You will likely gain even more insight from his reading and also some practice using IP FRR with OSPF.
