Description

Users may find that when link-protection is used with the no-cspf option and is triggered due to a link failure in the LSP path, control-plane signaling will not work via bypass. The label switched path (LSP) will consequently go down and will not be able to recover from this state.

This article recommends that you do not use link-protection when the no-cspf option is configured because the no-cspf LSP signaling does not carry an Explicit Route Object (ERO).

Symptoms

When link-protection is used with no-cspf and link protection is triggered due to a link failure in the LSP path, control-plane signaling will not work via bypass because the no-cspf LSP signaling does not carry an Explicit Route Object (ERO). The LSP will go down and will not be able to recover thereafter from its down state.

topo.drawio (16).png

CSPF and Link-Protection

  • The head-end router PE1 creates LSP-A(LSP-ID = X) with protection.

  • The link goes down and goes into repair (the control-plane and data-plane traffic will now go via bypass).

  • A path error is reported to PE1.

  • PE1 initiates a new LSP-A (LSP-ID = X+1).

  • Upon successfully signaling the LSP, PE1 switches traffic to the new LSP-A(LSP-ID = X+1).

  • After switching traffic to the new LSP-A (LSP-ID = X+1), PE1 tears down the LSP-A(LSP-id = X).                                                

No CSPF and Link-Protection

  • The head-end router PE1 creates the LSP-A(LSP-ID = X) with protection.

  • The link goes down. Repair does not happen and therefore, the data plane will use a bypass route till the link comes up. However, the control-plane does not work. [(Signaling for the original LSP-A(LSP-ID = X) via the bypass route will not work because it does not have an ERO (due to no-cspf)]. That is why LSP-A (LSP-ID = X) goes down after timeout.

  • A path error is reported to PE1 (point of local repair (PLR) will continue to report a path error message with the tunnel locally repaired indefinitely).

Solution

From the head-end router PE1's point of view and based on the interior gateway protocol (IGP) calculation, the next-hop is still the same and the new LSP-A (LSP-ID = X) is still using the old LSP-ID. So PLR will continue to report the path error for that LSP-ID = X (as link-protection is not supported for no-cspf LSP). That is why the new LSP-A (LSP-ID = X) does not get built and why it keeps the LSP down (in the no-cspf case, the LSP-ID will change only when there is a next-hop or an outgoing interface change).

  label-switched-path PE1_PE4 {
            to 192.168.0.4;
            bandwidth 0;
            priority 0 0;
            no-cspf;
            optimize-timer 28800;
            preference 8;
            least-fill;
            link-protection;
            adaptive;
        }

192.168.0.4

  From: 0.0.0.0, State: Dn, ActiveRoute: 0, LSPname: PE1_PE4, LSPid: 5
  ActivePath: (none)
  Link protection desired
  LSPtype: Static Configured, Penultimate hop popping
  LoadBalance: Least-fill
  Follow destination IGP metric
  Encoding type: Packet, Switching type: Packet, GPID: IPv4
  LSP Self-ping Status : Enabled
  Primary                    State: Dn, Preference: 8
    Priorities: 0 0
    OptimizeTimer: 28800
    SmartOptimizeTimer: 180
    Flap Count: 16
    MBB Count: 7
   348 Dec 30 11:31:00.329 10.1.1.6: Tunnel local repaired[7 times, first Dec 30 11:25:00.305]
   347 Dec 30 11:24:26.750 Deselected as active
   346 Dec 30 11:24:26.750 ResvTear received
   345 Dec 30 11:24:26.750 Link-protection Down
   344 Dec 30 11:24:26.749 10.1.1.1: Tunnel local repaired
   343 Dec 30 11:24:26.749 10.1.1.1: Down
   342 Dec 30 11:24:26.749 10.1.1.2: Tunnel local repaired
   341 Dec 30 11:23:30.304 10.1.1.6: Tunnel local repaired[4 times, first Dec 30 11:21:33.353]
   340 Dec 30 11:21:28.586 Link-protection Up
   339 Dec 30 11:21:28.576 Link-protection Down
   338 Dec 30 11:21:28.354 10.1.1.6: Tunnel local repaired
   337 Dec 30 11:20:10.588 Link-protection Up
   336 Dec 30 11:20:09.182 Selected as active path
   335 Dec 30 11:20:09.181 Self-ping ended successfully
334 Dec 30 11:20:08.759 Record Route:  192.168.0.2(flag=0x21) 10.1.1.2(flag=1 Label=57) 192.168.0.3(flag=0x21) 10.1.1.6(flag=1 Label=49) 192.168.0.4(flag=0x20) 10.1.1.10(Label=3)
   333 Dec 30 11:20:08.535 Record Route:  192.168.0.2(flag=0x21) 10.1.1.2(flag=1 Label=57) 192.168.0.3(flag=0x20) 10.1.1.6(Label=49) 192.168.0.4(flag=0x20) 10.1.1.10(Label=3)
   332 Dec 30 11:20:08.324 Up
   331 Dec 30 11:20:08.324 Self-ping started
   330 Dec 30 11:20:08.324 Self-ping enqueued
  329 Dec 30 11:20:08.324 Record Route:  192.168.0.2(flag=0x20) 10.1.1.2(Label=57) 192.168.0.3(flag=0x20) 10.1.1.6(Label=49) 192.168.0.4(flag=0x20) 10.1.1.10(Label=3)
   328 Dec 30 11:20:08.185 LSP-ID: 15 created
   327 Dec 30 11:20:08.185 Originate Call
   326 Dec 30 11:20:08.185 Clear Call

If you are using the knob no-cspf, then it is recommended that you do not use link-protection with it.

192.168.0.4

  From: 192.168.0.1, State: Up, ActiveRoute: 0, LSPname: PE1_PE4, LSPid: 5
  ActivePath:  (primary)
  LSPtype: Static Configured, Penultimate hop popping
  LoadBalance: Least-fill
  Follow destination IGP metric
  Encoding type: Packet, Switching type: Packet, GPID: IPv4
  LSP Self-ping Status : Enabled
*Primary                    State: Up, Preference: 8
    Priorities: 0 0
    OptimizeTimer: 28800
    SmartOptimizeTimer: 180
    Flap Count: 10
    MBB Count: 1
     Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID):
          10.1.1.2(Label=44) 10.1.1.6(Label=35) 10.1.1.10(Label=3)
   151 Dec 30 00:30:03.634 Selected as active path
   150 Dec 30 00:30:03.633 Self-ping ended successfully
   149 Dec 30 00:30:03.326 Up
   148 Dec 30 00:30:03.326 Self-ping started
   147 Dec 30 00:30:03.326 Self-ping enqueued
   146 Dec 30 00:30:03.326 Record Route:  10.1.1.2(Label=44) 10.1.1.6(Label=35) 10.1.1.10(Label=3)
   145 Dec 30 00:30:03.326 Stats related identifier changed
   144 Dec 30 00:30:03.299 Deselected as active
   143 Dec 30 00:30:03.298 ResvTear received
   142 Dec 30 00:30:03.298 10.1.1.1: Down
   141 Dec 30 00:29:00.522 Selected as active path
   140 Dec 30 00:29:00.521 Self-ping ended successfully
   139 Dec 30 00:28:59.801 Up
   138 Dec 30 00:28:59.801 Self-ping started
   137 Dec 30 00:28:59.801 Self-ping enqueued
   136 Dec 30 00:28:59.801 Record Route:  10.1.1.2(Label=43) 10.1.1.18(Label=31) 10.1.1.34(Label=40) 10.1.1.38(Label=28)  10.1.1.25(Label=3)
   135 Dec 30 00:28:59.800 Stats related identifier changed
   134 Dec 30 00:28:54.587 Deselected as active
   133 Dec 30 00:28:54.587 ResvTear received
   132 Dec 30 00:28:54.586 10.1.1.1: Down
   131 Dec 30 00:28:54.586 10.1.1.2: No Route toward dest
   130 Dec 30 00:28:29.489 Selected as active path
   129 Dec 30 00:28:29.488 Self-ping ended successfully
   128 Dec 30 00:28:29.259 Up
   127 Dec 30 00:28:29.259 Self-ping started
   126 Dec 30 00:28:29.259 Self-ping enqueued
   125 Dec 30 00:28:29.259 Record Route:  10.1.1.2(Label=42) 10.1.1.6(Label=34) 10.1.1.22(Label=39) 10.1.1.38(Label=28) 10.1.1.25(Label=3)
   124 Dec 30 00:28:29.259 Stats related identifier changed
   123 Dec 30 00:28:24.006 Deselected as active
   122 Dec 30 00:28:24.006 ResvTear received
   121 Dec 30 00:28:24.005 10.1.1.1: Down
   120 Dec 30 00:28:24.005 10.1.1.6: No Route toward dest
   119 Dec 29 23:53:30.505 Selected as active path
   118 Dec 29 23:53:30.504 Self-ping ended successfully
   117 Dec 29 23:53:30.103 Up
   116 Dec 29 23:53:30.103 Self-ping started
   115 Dec 29 23:53:30.103 Self-ping enqueued
   114 Dec 29 23:53:30.103 Record Route:  10.1.1.2(Label=41) 10.1.1.6(Label=33) 10.1.1.10(Label=3)
   113 Dec 29 23:53:30.103 Stats related identifier changed

Modification History

2022-12-19: Updated article to reflect RFC compliant IP addresses and information