SR-MPLS FRR Extension
Huaimo Chen
Futurewei
Boston, MA
USA
hchen.ietf@gmail.com
Zhibo Hu
Huawei Technologies
Huawei Bld., No.156 Beiqing Rd.
Beijing
100095
China
huzhibo@huawei.com
Aijun Wang
China Telecom
Beiqijia Town, Changping District
Beijing
102209
China
wangaj3@chinatelecom.cn
Yisong
China Mobile
510000
China
liuyisong@chinamobile.com
Gyan S. Mishra
Verizon Inc.
13101 Columbia Pike
Silver Spring
MD 20904
USA
301 502-1347
gyan.s.mishra@verizon.com
2024
The current SR FRR such as TI-LFA provides fast re-route protection for the failure of a node on an SR-MPLS path by the neighbor upstream node as point of local repair (PLR) of the failed node.
However, once the IGP converges, the SR FRR is no longer sufficient to forward traffic of the path around the failure, since the non-neighbor upstream node of the failed node will no longer have a route to the failed node.
This document describes a simple mechanism to extend the fast re-route protection for the failure on an SR-MPLS path after the IGP converges.
The mechanism protects the node SID, adjacency SID and binding SID of the failed node on the path.

Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

Introduction
[I-D.ietf-rtgwg-segment-routing-ti-lfa] describes an SR FRR mechanism that provides fast re-route protection for the failure of a node on an SR-TE path by the neighbor upstream node as point of local repair (PLR) of the failed node.
However, once the IGP converges, the SR FRR is no longer sufficient to forward traffic of the path around the failure, since the non-neighbor upstream node of the failed node will no longer have a route to the failed node and drop the traffic.
[I-D.ietf-spring-segment-protection-sr-te-paths] proposes a solution in which a hold-down timer is configured on every node in a network. After the IGP converges on a node failure, when a node is going to delete the route to the failed node, instead of programming a route delete, it programs a tunnel/path to the node consisting of the Node SID of the nearside neighbor of the failed node followed by the original path in the packet. The modified path will be in force until the hold-down timer expires.
This document describes a simple mechanism to extend the fast re-route protection for the failure on an SR-MPLS path after the IGP converges. The mechanism protects the node SID, adjacency SID and binding SID of the failed node on the path.

Example SR-MPLS FRR Extension
This section illustrates the extension to SR-MPLS FRR for the failure on SR-MPLS paths after the IGP converges through examples.
It shows the procedure on every related node on each path without any failure, with a failure before and after the IGP converges on the failure.
Figure 1 shows an example topology with two SR-MPLS paths: Path 1 and Path 2 for explaining the extension. They go through the same nodes and links, but represented differently. The former does not have any binding SID (BSID). The latter has a BSID of node N (BSID-N).

Example Topology with SR-MPLS Paths

               [ P1 ]-----[ P3 ]-----[ N  ]-----[ Q1 ]
              /  |   \   /  |   \   /  |   \   /  |   \
             /   |    \ /   |    \ /   |    \ /   |    \
[CE1]------[A]   |     X    |     X    |     X    |    [C]-----[CE2]
             \   |    / \   |    / \   |    / \   |    /
              \  |   /   \  |   /   \  |   /   \  |   /
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]

Path 1:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,SID-Q1,SID-C}
Path 2:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,BSID-N} and
                       BSID-N associated with SID list {SID-Q1,SID-C}

SR-MPLS Path 1: A->P1->N->Q1->C is indicated at node A by node SID of P1 (SID-P1), node SID of N (SID-N), node SID of Q1 (SID-Q1) and node SID of C (SID-C). SR-MPLS Path 2 is indicated at node A by {SID-P1,SID-N,BSID-N}, where BSID-N (binding SID of N) is associated with SID list {SID-Q1,SID-C}.

SR-MPLS Path with no BSID

Without any Failure
Figure 2 shows the result of executing procedure on each related node of SR-MPLS path 1 without any failure.

No BSID Without any Failure

     1.{SID-P1,SID-N,SID-Q1,SID-C}Pkt
            |  2.{SID-N,SID-Q1,SID-C}Pkt
            |         |   3.{SID-N,SID-Q1,SID-C}Pkt
            |         |          |   4.{SID-Q1,SID-C}Pkt
            |         |          |          |
            |         v          v          v
            |  [ P1 ]-----[ P3 ]-----[ N  ]-----[ Q1 ]
            v /  |   \   /  |   \   /  |   \   /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \ /   |    \ /   |    \
[CE1]------[A]   |     X    |     X    |     X    |    [C]-----[CE2]
             \   |    / \   |    / \   |    / \   |    /   6.Pkt
              \  |   /   \  |   /   \  |   /   \  |   /
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]

Path 1:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,SID-Q1,SID-C}

The results from nodes A, P1, P3, N, Q1 and C are as follows.
1. Node A as the ingress of the path adds SID-P1, SID-N, SID-Q1, and SID-C into a packet (Pkt) received from CE1 and sends the packet with the SIDs to node P1. The packet sent to P1 is represented by "1.{SID-P1,SID-N,SID-Q1,SID-C}Pkt".
2. Node P1 pops its SID-P1 from the packet received, sends the packet with top SID (SID-N) to P3 along the IGP shortest path to N according to its FIB entry for SID-N. The packet sent to P3 is represented by "2.{SID-N,SID-Q1,SID-C}Pkt".
3. Node P3 sends the packet with top SID (SID-N) to N along the IGP shortest path to N. The packet sent to N is represented by "3.{SID-N,SID-Q1,SID-C}Pkt".
4. Node N pops its SID-N from the packet received, sends the packet with top SID (SID-Q1) to Q1 along the IGP shortest path to Q1 according to its FIB entry for SID-Q1. The packet sent to Q1 is represented by "4.{SID-Q1,SID-C}Pkt".
5. Node Q1 pops its SID-Q1 from the packet received, sends the packet with top SID (SID-C) to C along the IGP shortest path to C. The packet sent to C is represented by "5.{SID-C}Pkt".
6. Node C pops its SID-C and gets the packet without any SIDs, which is represented by "6.Pkt".

Before IGP Converges on Failure
Figure 3 shows the result of executing procedure on each related node of SR-MPLS path 1 with no BSID when node N failed and before the IGP converges on the failure.

Path with no BSID when N failed and before IGP converges

 1.{SID-P1,SID-N,SID-Q1,SID-C}Pkt
            |
            |     2.{SID-N,SID-Q1,SID-C}Pkt
            |         |
            |         v
            |  [ P1 ]-----[ P3 ]     [ N  ]     [ Q1 ]
            v /  |   \   /  |   \3.{SID-Q1,    /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \  SID-C}Pkt /   |    \
[CE1]------[A]   |     X    |     X    |     X    |    [C]-----[CE2]
             \   |    / \   |    / \   |    / \   |    /   6.Pkt
              \  |   /   \  |   /   \  |   /4.{SID-Q1,SID-C}Pkt
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]

Path 1:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,SID-Q1,SID-C}

The results from nodes A, P1, Q1 and C are the same as those described in Section 2.1.1.
The results from neighbor upstream node P3 of N and node N1 are as follows.
3. After detecting the failure of N, the neighbor upstream node P3 of N pops SID-N from the packet received, re-routes the packet to node Q1 via node N1 without going through failed N. The packet sent to N1 is represented by "3.{SID-Q1,SID-C}Pkt".
4. Node N1 sends the packet to Q1 according to the top SID (SID-Q1) in the packet. The packet sent to Q1 is represented by "4.{SID-Q1,SID-C}Pkt".

After IGP Converges on Failure
Figure 4 shows the result of executing procedure on each related node on SR-MPLS path 1 with no BSID when node N failed and after the IGP converges on the failure.

Path with no BSID when N failed and after IGP converges

            1.{SID-P1,SID-N,SID-Q1,SID-C}Pkt
            |
            |  [ P1 ]-----[ P3 ]     [ N  ]     [ Q1 ]
            v /  |   \2.{SID-Q1,SID-C}Pkt      /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \            /   |    \
[CE1]------[A]   |     X    |     \          /    |    [C]-----[CE2]
             \   |    / \   |      \        /     |    /   6.Pkt
              \  |   /   \  |       \      /4.{SID-Q1,SID-C}Pkt
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]
                                 ^
                                 |
                                 3.{SID-Q1,SID-C}Pkt

Path 1:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,SID-Q1,SID-C}

The results from nodes A, N1, Q1 and C are the same as those described above in Section 2.1.2.
The results from nodes P1 and P4 are as follows.
2. Since SID-N is a failed node SID, non-neighbor upstream node P1 pops SID-N from the packet, and sends the packet to P4 according to the top SID (SID-Q1) in the packet along the IGP shortest path to Q1. The packet sent to P4 is represented by "2.{SID-Q1,SID-C}Pkt".
3. Node P4 sends the packet to N1 according to the top SID (SID-Q1) in the packet received. The packet sent to N1 is represented by "3.{SID-Q1,SID-C}Pkt".
The non-neighbor upstream node P1 may determines whether a SID is a failed SID in the following way:

   IF there is a RIB/FIB entry for the SID (e.g., SID-N) and
      then the entry for the SID is to be removed after a SPF
   THEN the SID is a failed SID.

SR-MPLS Path with BSID

Without any Failure
Figure 5 shows the result of executing procedure on each related node of SR-MPLS path 2 with BSID-N without any failure.

Path with BSID Without any Failure

     1.{SID-P1,SID-N,BSID-N}Pkt
            |  2.{SID-N,BSID-N}Pkt
            |         |   3.{SID-N,BSID-N}Pkt
            |         |          |   4.{SID-Q1,SID-C}Pkt
            |         |          |          |
            |         v          v          v
            |  [ P1 ]-----[ P3 ]-----[ N  ]-----[ Q1 ]
            v /  |   \   /  |   \   /  |   \   /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \ /   |    \ /   |    \
[CE1]------[A]   |     X    |     X    |     X    |    [C]-----[CE2]
             \   |    / \   |    / \   |    / \   |    /   6.Pkt
              \  |   /   \  |   /   \  |   /   \  |   /
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]

Path 2:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,BSID-N} and
                       BSID-N associated with SID list {SID-Q1,SID-C}

The results from nodes A, P1, P3, and N are as follows.
1. Node A as the ingress of the path adds SID-P1, SID-N, and BSID-N into a packet (Pkt) received from CE1 and sends the packet with the SIDs to node P1. The packet sent to P1 is represented by "1.{SID-P1,SID-N,BSID-N}Pkt".
2. Node P1 pops its SID-P1 from the packet received, sends the packet with top SID (SID-N) to P3 along the IGP shortest path to N according to its FIB entry for SID-N. The packet sent to P3 is represented by "2.{SID-N,BSID-N}Pkt".
3. Node P3 sends the packet with top SID (SID-N) to N along the IGP shortest path to N. The packet sent to N is represented by "3.{SID-N,BSID-N}Pkt".
4. Node N pops its SID-N from the packet received, replaces its BSID-N with SID list {SID-Q1,SID-C}, and sends the packet with top SID (SID-Q1) to Q1 along the IGP shortest path to Q1 according to its FIB entry for SID-Q1. The packet sent to Q1 is represented by "4.{SID-Q1,SID-C}Pkt".
The results from nodes Q1 and C are the same as those described in Section 2.1.1.

Before IGP Converges on Failure
Figure 6 shows the result of executing procedure on each related node of SR-MPLS path 2 with BSID-N when node N failed and before the IGP converges on the failure.

Path with BSID-N when N failed and before IGP converges

 1.{SID-P1,SID-N,BSID-N}Pkt
            |
            |     2.{SID-N,BSID-N}Pkt
            |         |
            |         v
            |  [ P1 ]-----[ P3 ]     [ N  ]     [ Q1 ]
            v /  |   \   /  |   \3.{SID-Q1,    /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \  SID-C}Pkt /   |    \
[CE1]------[A]   |     X    |     X    |     X    |    [C]-----[CE2]
             \   |    / \   |    / \   |    / \   |    /   6.Pkt
              \  |   /   \  |   /   \  |   /4.{SID-Q1,SID-C}Pkt
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]

Path 2:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,BSID-N} and
                       BSID-N associated with SID list {SID-Q1,SID-C}

The results from nodes A, P1, Q1 and C are the same as those described in Section 2.2.1.
The results from neighbor upstream node P3 of N and node N1 are as follows.
3. After detecting the failure of N, the neighbor upstream node P3 of N pops SID-N from the packet received, replaces BSID-N in the packet with SID list {SID-Q1,SID-C}, and re-routes the packet to node Q1 via node N1 without going through failed N. The packet sent to N1 is represented by "3.{SID-Q1,SID-C}Pkt".
4. Node N1 sends the packet to Q1 according to the top SID (SID-Q1) in the packet. The packet sent to Q1 is represented by "4.{SID-Q1,SID-C}Pkt".

After IGP Converges on Failure
Figure 7 shows the result of executing procedure on each related node on SR-MPLS path 2 with BSID-N when node N failed and after the IGP converges on the failure.

Path with BSID-N when N failed and after IGP converges

            1.{SID-P1,SID-N,BSID-N}Pkt
            |
            |  [ P1 ]-----[ P3 ]     [ N  ]     [ Q1 ]
            v /  |   \2.{SID-Q1,SID-C}Pkt      /  |   \5.{SID-C}Pkt
     Pkt     /   |    \ /   |    \            /   |    \
[CE1]------[A]   |     X    |     \          /    |    [C]-----[CE2]
             \   |    / \   |      \        /     |    /   6.Pkt
              \  |   /   \  |       \      /4.{SID-Q1,SID-C}Pkt
               [ P2 ]-----[ P4 ]-----[ N1 ]-----[ Q2 ]
                                 ^
                                 |
                                 3.{SID-Q1,SID-C}Pkt

Path 2:A->P1->N->Q1->C, indicated at A by {SID-P1,SID-N,BSID-N} and
                       BSID-N associated with SID list {SID-Q1,SID-C}

The results from nodes A, Q1 and C are the same as those described above in Section 2.2.2. The results from nodes P4 and N1 are the same as those described above in Section 2.1.3.
The result from node P1 is as follows.
2. Since SID-N is a failed node SID, non-neighbor upstream node P1 pops SID-N from the packet, replaces BSID-N in the packet with SID list {SID-Q1,SID-C} and sends the packet to P4 according to the top SID (SID-Q1) in the packet along the IGP shortest path to Q1. The packet sent to P4 is represented by "2.{SID-Q1,SID-C}Pkt".

Procedures
This section presents the procedures on a neighbor upstream node and a non-neighbor upstream node of node N on an SR MPLS path.

Procedure on Non-neighbor Upstream Node
For an SR-MPLS path with the node SID of node N (SID-N), suppose that node X is an non-neighbor upstream node of node N along the path, wherein SID-N follows the node SID of node X (SID-X) or the adjacency SID to node X in the packet to be transported by the path.
For example, SR-MPLS Path 1 and Path 2 in Figure 1 are from A to P1 to N to Q1 to C. Node P1 is the non-neighbor upstream node of N.
At ingress node A of the path, node A adds the SIDs in the SID list into the packet to be transported by the path.
Without any failure or from the failure of node N to IGP convergence on the failure, the non-neighbor upstream node (such as P1) of node N pops its SID from the packet if any and sends the packet to the next hop node toward node N along the IGP shortest path to N.
After node N failed and from the IGP convergence on the failure to global reroute, the non-neighbor upstream node (such as P1) of node N pops its SID (such as SID-P1) from the packet if any, pops SID-N from the packet
and does one of the following:
a. If the current top SID in the packet is a node SID of a node named Nx, sends the packet toward Nx along the IGP shortest path to Nx.
b. If the current top SID in the packet is an adjacency SID of node N, obtains the remote node of the adjacency from the adjacency SID, replaces the adjacency SID with the node SID of the remote node, and sends the packet toward the remote node along the IGP shortest path to the remote node.
c. If the current top SID in the packet is a Binding SID (BSID) of node N, replaces the BSID in the packet with the SID list associated with the BSID, and does a. or b. according to the current top SID in the packet (i.e., does a. if it is a node SID; does b. if it is an adjacency SID of N). Note: Distributing the information about the BSID of N (including the BSID, the SID list, the ID of N) to upstream nodes of N is out of scope of this document, but described in [I-D.chen-pce-mbinding] and [I-D.chen-idr-mbinding].

Procedure on Neighbor Upstream Node
Suppose that node Y is the neighbor upstream node of node N on an SR-MPLS path. Without any failure, node Y sends the packet received from the path to node N according to the top SID in the packet.
For example, SR-MPLS Path 1 and Path 2 in Figure 1 are from A to P1 to N to Q1 to C. Node P3 is the neighbor upstream node of N suppose that the shortest path from P1 to N is from P1 to P3 to N.
When node Y detects the failure of node N, node Y pops SID-N from the packet if SID-N is the top SID of the packet, and does one of the following steps (where steps a and b are TI-LFA in [I-D.ietf-rtgwg-segment-routing-ti-lfa]):
a. If the current top SID in the packet is node SID of node Nx, sends the packet toward node Nx without going through failed N (i.e., {SID-Nx,...} in the packet would be {RL(Q),SID-Nx,...}, where RL(Q) is the repair list redirecting the packet to node Q, whose path to SID-Nx is not affected by the failure).
b. If the current top SID in the packet is an adjacency SID of N, gets remote node R of the adjacency from the adjacency SID, replaces the top SID in the packet with node SID of R, and sends the packet to node R according to the top SID in the packet without going through failed N (i.e., {adj(N-R),...} in the packet would be {RL(Q),SID-R,...}, where RL(Q) is the repair list redirecting the packet to node Q, whose path to SID-R is not affected by the failure).
c. If the current top SID in the packet is a BSID of N, replaces the BSID with the SID list associated with the BSID, and does a. or b. according to the current top SID in the packet (i.e., does a. if it is a node SID; does b. if it is an adjacency SID of N).

Security Considerations
TBD.

IANA Considerations
No requirements for IANA.

Normative References

Informative References
[RFC2119]
[RFC8174]
[I-D.ietf-rtgwg-segment-routing-ti-lfa]
[I-D.ietf-spring-segment-protection-sr-te-paths]
[I-D.chen-pce-mbinding]
[I-D.chen-idr-mbinding]
Acknowledgments
The authors would like to thank Joel Halpern, Andrew Stone, Yao Liu, and Jeff Tantsura
for their comments to this work.