Description

This document explains the LFA (Loop-Free Alternate) backup interface selection logic on the DUT (Device Under Test) when multiple loop-free interfaces are available toward the same neighbor.

 

The command output below lists the interfaces on the DUT that connect to a directly connected remote peer. In our topology, AE21 is configured as the primary path. When AE21 goes down, the DUT identifies five eligible backup interfaces: AE1.20, AE2.20, AE3.20, AE10, and AE11.

Our investigation focused on understanding the criteria used by the DUT to select one of these backup interfaces over the others during Loop-Free Alternate (LFA) path selection.

 

labroot@labrouter> show isis interface  

IS-IS interface database:

Interface       L CirID Level 1 DR    Level 2 DR    L1/L2 Metric

ae21.0        1  0x1 Point to Point  Disabled        50/10  <Primary 

 

ae10.0        1  0x1 Point to Point  Disabled        90/10  <2nd Best routes  

ae11.0        1  0x1 Point to Point  Disabled        90/10  

 

ae1.20        1  0x1 Down       Disabled            200/10  <3rd Bests routes

ae2.20        1  0x1 Point to Point  Disabled       200/10

ae3.20        1  0x1 Point to Point  Disabled       200/10

 

 

 

We observed that the DUT consistently selects AE1.20 as the backup interface toward the next-hop, even though AE1.20 holds the third-best route, while AE10 and AE11 have higher priority as per routing metrics. This raises the question:

Why does the DUT prefer AE1.20 over AE10 and AE11 during LFA selection, despite the latter having better route priority?

 

labroot@labrouter> show isis interface ae21.0 detail    

IS-IS interface database:

ae21.0

 Index: 75, State: 0x6, Circuit id: 0x1, Circuit type: 1

 LSP interval: 100 ms, CSNP interval: 30 s

 Adjacency advertisement: Advertise, Layer2-map: Disabled

 Protection Type: Link  <<<

 ...

 

labroot@labrouter> show route 150.181.X.XX/32             

 

inet.0: 1004950 destinations, 2516692 routes (1004799 active, 1 holddown, 152 hidden)

@ = Routing Use Only, # = Forwarding Use Only

+ = Active Route, - = Last Active, * = Both

 

150.181.X.XX/32  @[IS-IS/18] 00:04:45, metric 65050

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae1.20  

          [BGP/170] 01:06:28, MED 65000, localpref 100, from 96.34.XXX.X

           AS path: I, validation-state: unverified

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae1.20, Push 687842

          #[LDP/9] 00:04:45, metric 65050

          > to 96.34.XX.XXX via ae21.0, Push 604523

            to 96.34.XX.XXX via ae1.20, Push 760517

  

labroot@labrouter> show route forwarding-table destination 150.181.X.XX/32 extensive

Routing table: default.inet [Index 0]

Internet:

  

Destination: 150.181.X.XX/32

 Route type: user         

 Route reference: 0          Route interface-index: 0  

 Multicast RPF nh index: 0       

 P2mpidx: 0       

 Flags: sent to PFE, rt nh decoupled 

 Next-hop type: unilist        Index: 2097180 Reference: 2  

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 604523      Index: 435827  Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae21.0    Weight: 0x1 

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 760517      Index: 427874  Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae1.20    Weight: 0xf000 <<<

 

Symptoms

LFA selected interface ae10.0 as backup when ae1.20 was disabled.

labroot@labrouter> show isis adjacency                         

Interface     System    L State    Hold (secs) SNPA
ae21.0        h20-28    1 Up          2

ae10.0        h20-29     1 Up          2
ae11.0        h20-29     1 Up          2

ae2.20        h20-29     1 Up          2
ae3.20        h20-29     1 Up          2
                             

labroot@labrouter> show route 150.181.X.XX/32                      

inet.0: 1004948 destinations, 2516690 routes (1004797 active, 1 holddown, 152 hidden)

@ = Routing Use Only, # = Forwarding Use Only

+ = Active Route, - = Last Active, * = Both

 

150.181.X.XX/32  @[IS-IS/18] 00:00:15, metric 65050

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae10.0  

          [BGP/170] 01:12:19, MED 65000, localpref 100, from 96.34.XXX.X

           AS path: I, validation-state: unverified

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae10.0, Push 687842

          #[LDP/9] 00:00:15, metric 65050

          > to 96.34.XX.XXX via ae21.0, Push 604523

            to 96.34.XX.XXX via ae10.0, Push 760517  

            

labroot@labrouter> show route forwarding-table destination 150.181.X.XX/32 extensive  

Routing table: default.inet [Index 0]

Internet:

  

Destination: 150.181.X.XX/32

 Route type: user         

 Route reference: 0          Route interface-index: 0  

 Multicast RPF nh index: 0       

 P2mpidx: 0       

 Flags: sent to PFE, rt nh decoupled 

 Next-hop type: unilist        Index: 2101658 Reference: 2  

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 604523      Index: 435827  Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae21.0    Weight: 0x1 

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 760517      Index: 8316   Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae10.0    Weight: 0xf000

 

 

 

LFA selected interface ae11.0 as backup when ae1.20 and ae10.0 was disabled.         

 

labroot@labrouter> show isis adjacency

Interface     System    L State    Hold (secs) SNPA

ae21.0        h20-28    1 Up          2

ae11.0        h20-29     1 Up          2

ae2.20        h20-29     1 Up          2
ae3.20        h20-29     1 Up          2

 

 

labroot@labrouter> show route 150.181.X.XX/32                      

 

inet.0: 1004948 destinations, 2516690 routes (1004796 active, 2 holddown, 152 hidden)

@ = Routing Use Only, # = Forwarding Use Only

+ = Active Route, - = Last Active, * = Both

 

150.181.X.XX/32  @[IS-IS/18] 00:00:06, metric 65050

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae11.0 

          [BGP/170] 01:23:42, MED 65000, localpref 100, from 96.34.XXX.X

           AS path: I, validation-state: unverified

          > to 96.34.XX.XXX via ae21.0

            to 96.34.XX.XXX via ae11.0, Push 687842

          #[LDP/9] 00:00:06, metric 65050

          > to 96.34.XX.XXX via ae21.0, Push 604523

            to 96.34.XX.XXX via ae11.0, Push 760517

 

{master}

labroot@labrouter> show route forwarding-table destination 150.181.X.XX/32 extensive  

Routing table: default.inet [Index 0]

Internet:

  

Destination: 150.181.X.XX/32

 Route type: user         

 Route reference: 0          Route interface-index: 0  

 Multicast RPF nh index: 0       

 P2mpidx: 0       

 Flags: sent to PFE, rt nh decoupled 

 Next-hop type: unilist        Index: 2100120 Reference: 2  

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 604523      Index: 435827  Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae21.0    Weight: 0x1 

 Nexthop: 96.34.XX.XXX

 Next-hop type: Push 760517      Index: 940   Reference: 2  

 Load Balance Label: None       

 Next-hop interface: ae11.0    Weight: 0xf000 

 

 

 

Solution

The IFL index plays a role in determining the backup interface preference. 

 

Here are the interface details and their observed preferences:

 

ae1.20

 Index: 68, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 << 1st preference

 

ae10.0

 Index: 70, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 << 2nd preference

 

ae11.0

 Index: 71, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 << 3rd preference

 

ae2.20

 Index: 73, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 << 4th preference

 

ae3.20

 Index: 77, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 << 5th preference

 

 

<After recreating interface AE1 >

ae1.20

 Index: 111, State: 0x6, Circuit ID: 0x1, Circuit Type: 1 

  

Modification History

2025-10-28 : Article Created