RFC 7812

An Architecture for IP/LDP Fast Reroute Using Maximally Redundant Trees (MRT-FRR)

๐Ÿ“… published June 2016, from ietf

1. Introduction โœจ

Okay so, bestie, this is the document that defines the architecture for IP/LDP Fast Reroute using Maximally Redundant Trees (MRT-FRR) ๐Ÿฆ‹ It's giving "networks that heal themselves before anyone notices" and I am obsessed.

Let's get the title block sorted first, because it's the main character intro ๐Ÿ’…

Internet Engineering Task Force (IETF) is the org behind this one. The document is RFC 7812, titled An Architecture for IP/LDP Fast Reroute Using Maximally Redundant Trees (MRT-FRR). It's dated June 2016 and it's a Standards Track document ๐ŸŽ€ The authors are A. Atlas and C. Bowers from Juniper Networks, plus G. Enyedi from Ericsson ๐ŸŒธ ISSN is 2070-1721.

Nothing in the title block says it obsoletes or updates another RFC, so there's no drama there ๐Ÿ™ˆ

The Abstract is basically the TL;DR: MRT-FRR is a technology that gives link-protection and node-protection with 100% coverage in any network topology that is still connected after the failure. Iconic ๐Ÿ‘‘

Status of This Memo

This is an Internet Standards Track document โœจ It's a product of the IETF, it represents the consensus of the IETF community, it got public review, and the IESG approved it for publication. If you want more on Internet Standards, check Section 2 of RFC 7841 ๐Ÿซถ

For the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc7812 ๐Ÿ’œ

Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved ๐Ÿฆ‹

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as in effect on the date of publication. Please read these carefully, because they describe your rights and restrictions ๐Ÿ™ˆ Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in that license ๐Ÿ’€

Table of Contents

1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
  1.1.  Importance of 100% Coverage . . . . . . . . . . . . . . .   4
  1.2.  Partial Deployment and Backwards Compatibility  . . . . .   5
2.  Requirements Language . . . . . . . . . . . . . . . . . . . .   5
3.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   5
4.  Maximally Redundant Trees (MRT) . . . . . . . . . . . . . . .   7
5.  MRT and Fast Reroute  . . . . . . . . . . . . . . . . . . . .   9
6.  Unicast Forwarding with MRT Fast Reroute  . . . . . . . . . .   9
  6.1.  Introduction to MRT Forwarding Options  . . . . . . . . .  10
    6.1.1.  MRT LDP Labels  . . . . . . . . . . . . . . . . . . .  10
      6.1.1.1.  Topology-Scoped FEC Encoded Using a Single Label
                (Option 1A) . . . . . . . . . . . . . . . . . . .  10
      6.1.1.2.  Topology and FEC Encoded Using a Two-Label Stack
                (Option 1B) . . . . . . . . . . . . . . . . . . .  11
      6.1.1.3.  Compatibility of MRT LDP Label Options 1A and 1B   12
      6.1.1.4.  Required Support for MRT LDP Label Options  . . .  12
    6.1.2.  MRT IP Tunnels (Options 2A and 2B)  . . . . . . . . .  12
  6.2.  Forwarding LDP Unicast Traffic over MRT Paths . . . . . .  13
    6.2.1.  Forwarding LDP Traffic Using MRT LDP Label Option 1A   13
    6.2.2.  Forwarding LDP Traffic Using MRT LDP Label Option 1B   14
    6.2.3.  Other Considerations for Forwarding LDP Traffic Using
            MRT LDP Labels  . . . . . . . . . . . . . . . . . . .  14
    6.2.4.  Required Support for LDP Traffic  . . . . . . . . . .  14
  6.3.  Forwarding IP Unicast Traffic over MRT Paths  . . . . . .  14
    6.3.1.  Tunneling IP Traffic Using MRT LDP Labels . . . . . .  15
      6.3.1.1.  Tunneling IP Traffic Using MRT LDP Label Option
                1A  . . . . . . . . . . . . . . . . . . . . . . .  15
      6.3.1.2.  Tunneling IP Traffic Using MRT LDP Label Option
                1B  . . . . . . . . . . . . . . . . . . . . . . .  15
    6.3.2.  Tunneling IP Traffic Using MRT IP Tunnels . . . . . .  16
    6.3.3.  Required Support for IP Traffic . . . . . . . . . . .  16
7.  MRT Island Formation  . . . . . . . . . . . . . . . . . . . .  16
  7.1.  IGP Area or Level . . . . . . . . . . . . . . . . . . . .  17
  7.2.  Support for a Specific MRT Profile  . . . . . . . . . . .  17
  7.3.  Excluding Additional Routers and Interfaces from the MRT
        Island  . . . . . . . . . . . . . . . . . . . . . . . . .  18
    7.3.1.  Existing IGP Exclusion Mechanisms . . . . . . . . . .  18
    7.3.2.  MRT-Specific Exclusion Mechanism  . . . . . . . . . .  19
  7.4.  Connectivity  . . . . . . . . . . . . . . . . . . . . . .  19
  7.5.  Algorithm for MRT Island Identification . . . . . . . . .  19
8.  MRT Profile . . . . . . . . . . . . . . . . . . . . . . . . .  19
  8.1.  MRT Profile Options . . . . . . . . . . . . . . . . . . .  19
  8.2.  Router-Specific MRT Parameters  . . . . . . . . . . . . .  21
  8.3.  Default MRT Profile . . . . . . . . . . . . . . . . . . .  21
9.  LDP Signaling Extensions and Considerations . . . . . . . . .  22
10. Inter-area Forwarding Behavior  . . . . . . . . . . . . . . .  23
  10.1.  ABR Forwarding Behavior with MRT LDP Label Option 1A . .  23
    10.1.1.  Motivation for Creating the Rainbow-FEC  . . . . . .  24
  10.2.  ABR Forwarding Behavior with IP Tunneling (Option 2) . .  24
  10.3.  ABR Forwarding Behavior with MRT LDP Label Option 1B . .  25
11. Prefixes Multiply Attached to the MRT Island  . . . . . . . .  26
  11.1.  Protecting Multihomed Prefixes Using Tunnel Endpoint
         Selection  . . . . . . . . . . . . . . . . . . . . . . .  28
  11.2.  Protecting Multihomed Prefixes Using Named Proxy-Nodes .  29
  11.3.  MRT Alternates for Destinations outside the MRT Island .  31
12. Network Convergence and Preparing for the Next Failure  . . .  32
  12.1.  Micro-loop Prevention and MRTs . . . . . . . . . . . . .  32
  12.2.  MRT Recalculation for the Default MRT Profile  . . . . .  33
13. Operational Considerations  . . . . . . . . . . . . . . . . .  34
  13.1.  Verifying Forwarding on MRT Paths  . . . . . . . . . . .  34
  13.2.  Traffic Capacity on Backup Paths . . . . . . . . . . . .  34
  13.3.  MRT IP Tunnel Loopback Address Management  . . . . . . .  36
  13.4.  MRT-FRR in a Network with Degraded Connectivity  . . . .  36
  13.5.  Partial Deployment of MRT-FRR in a Network . . . . . . .  37
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  37
15. Security Considerations . . . . . . . . . . . . . . . . . . .  38
16. References  . . . . . . . . . . . . . . . . . . . . . . . . .  38
  16.1.  Normative References . . . . . . . . . . . . . . . . . .  38
  16.2.  Informative References . . . . . . . . . . . . . . . . .  39
Appendix A.  Inter-level Forwarding Behavior for IS-IS  . . . . .  41
Appendix B.  General Issues with Area Abstraction . . . . . . . .  42
Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  43
Contributors  . . . . . . . . . . . . . . . . . . . . . . . . . .  43
Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  44

1. Introduction ๐ŸŒˆ

This document describes a solution for IP/LDP fast reroute [RFC5714]. MRT-FRR creates two alternate forwarding trees that are distinct from the primary next-hop forwarding used during stable operation ๐Ÿฆ‹ These two trees are maximally diverse from each other, which gives link and node protection for 100% of paths and failures, as long as the failure doesn't cut the network into multiple pieces. This document defines the architecture for IP/LDP fast reroute with MRT ๐Ÿ’…

[RFC7811] describes how to compute maximally redundant trees using a specific algorithm: the MRT Lowpoint algorithm ๐Ÿงš The MRT Lowpoint algorithm is used by a router that supports the Default MRT Profile, as specified in this document.

Quick bestie check: the two trees are the whole trick. A primary next hop should be on only one of the diverse forwarding topologies, so the other one can be the alternate ๐Ÿซถ

IP/LDP Fast Reroute using Maximally Redundant Trees (MRT-FRR) uses two maximally diverse forwarding topologies to provide alternates. A primary next hop should be on only one of the diverse forwarding topologies; thus, the other can be used to provide an alternate. Once traffic has been moved to one of the MRTs by one Point of Local Repair (PLR), that traffic is not subject to further repair actions by another PLR, even in the event of multiple simultaneous failures. Therefore, traffic repaired by MRT-FRR will not loop between different PLRs responding to different simultaneous failures ๐Ÿ”ฅ

Okay, the caveats are real though, so listen up ๐Ÿ™ˆ While MRT provides 100% protection for a single link or node failure, it may not protect traffic in the event of multiple simultaneous failures, and it doesn't take Shared Risk Link Groups (SRLGs) into account. Also, while the MRT Lowpoint algorithm is computationally efficient, it's also new. For MRT-FRR to function properly, all of the other nodes in the network that support MRT must correctly compute next hops based on the same algorithm and install the corresponding forwarding state ๐Ÿ’€ This is different from other FRR methods, where calculating backup paths generally involves repeated use of the simpler and widely deployed Shortest Path First (SPF) algorithm, and the backup paths reuse the forwarding state used for shortest path forwarding of normal traffic. Section 13 gives operational guidance on verifying MRT forwarding paths ๐ŸŒธ

In addition to supporting IP and LDP unicast fast reroute, the diverse forwarding topologies and the guarantee of 100% coverage let fast-reroute technology be applied to multicast traffic, as described in [MRT-ARCH]. However, this document doesn't cover the multicast applications of MRTs โœจ

1.1. Importance of 100% Coverage ๐Ÿ‘‘

Fast reroute is based on the single failure assumption: the time between single failures is long enough for a network to reconverge and start forwarding on the new shortest paths. That does not imply the network will only ever experience one failure or change ๐Ÿฆ‹

It's straightforward to analyze a particular network topology for coverage. But a real network doesn't always keep the same topology ๐Ÿ™ˆ For instance, maintenance events take links or nodes out of use, and simply costing out a link can have a big effect on which Loop-Free Alternates (LFAs) are available. Similarly, after a single failure has happened, the topology has changed and its coverage has changed too. Finally, lots of networks add and remove routers or links, and each of those changes can affect coverage for topology-sensitive methods such as LFA and Remote LFA. So if fast reroute matters for the services the network provides, a method that guarantees 100% coverage is important to handle natural topology changes ๐Ÿ’–

When a network needs to use Ordered FIB [RFC6976] or Nearside Tunneling [RFC5715] as a micro-loop prevention mechanism [RFC5715], then the whole IGP area needs alternates available ๐Ÿซถ This lets the micro-loop prevention mechanism, which needs slower network convergence, take the time it needs without hurting traffic. Without complete coverage, traffic to unprotected destinations will be dropped for significantly longer than with current convergence, where routers individually converge as fast as possible ๐Ÿ’€ See Section 12.1 for more discussion of micro-loop prevention and MRTs ๐ŸŽ€

Part 1 of 10 done, bestie. Part 2 is coming with Section 1.2 and onwards ๐Ÿงš๐Ÿ’œ

1.2. Partial Deployment and Backwards Compatibility

okay so MRT-FRR is totally fine with partial deployment ๐Ÿซถ you don't need every router to be on board at once. routers just advertise that they can do MRT, and the MRT-capable group that's connected together is called an MRT Island ๐Ÿ๏ธ. the MRTs get computed inside that island. for destinations outside the island, the alternates depend on having a loop-free neighbor of the island for that destination. the whole island thing is explained in detail in Section 7, and partial deployment gets more love in Section 13.5 โœจ

2. 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]. ๐Ÿ“š the capital letters are doing serious work here, so read them carefully bestie ๐Ÿ’…

3. Terminology

okay this section is the vocab list, and we're gonna need it all ๐ŸŽ€

network graph: a graph that shows the network topology, where every link connects exactly two nodes and broadcast links have been turned into the standard pseudonode representation ๐ŸŒธ

cut-link: a link whose removal splits the network into pieces. a cut-link has to be connected between two cut-vertices, by definition ๐Ÿฆ‹ if there are parallel links, they count as cut-links in this document when removing the whole set of parallel links would partition the network graph.

cut-vertex: a vertex whose removal partitions the network graph ๐Ÿ’€

2-connected: a graph with no cut-vertices. you'd have to remove two nodes before the network falls apart ๐Ÿซถ

2-connected cluster: a maximal set of nodes that are 2-connected โœจ

block: either a 2-connected cluster, a cut-edge, or a cut-vertex ๐Ÿงฉ

Redundant Trees (RT): a pair of trees where the path from any node X to the root R along the first tree is node-disjoint with the path from that same node X to the root along the second tree. redundant trees can always be computed in 2-connected graphs ๐Ÿ‘‘

Maximally Redundant Trees (MRT): a pair of trees where the path from any node X to the root R along the first tree and the path from that same node X to the root along the second tree share the minimum number of nodes and the minimum number of links. each shared node is a cut-vertex, and any shared links are cut-links ๐Ÿ”ฅ in graphs that are not 2-connected, RTs can't be computed, but MRTs can! they're as redundant as possible given the constraints of the network graph. the MRT glow-up is real ๐ŸŒˆ

Directed Acyclic Graph (DAG): a graph where all links are directed and there are no cycles in it ๐Ÿ“

Almost Directed Acyclic Graph (ADAG): a graph with one node designated as the root. the graph has the property that if you removed all links incoming to the root, the result would be a DAG ๐Ÿงš

Generalized ADAG (GADAG): a graph that combines the ADAGs of all blocks ๐Ÿ’œ

MRT-Red: this describes one of the two MRTs. it's used to describe the associated forwarding topology and MPLS Multi-Topology IDentifier (MT-ID). specifically, MRT-Red is the decreasing MRT, where links in the GADAG are taken in the direction from a higher topologically ordered node to a lower one โค๏ธ

MRT-Blue: this describes the other MRT. it's used to describe the associated forwarding topology and MPLS MT-ID. specifically, MRT-Blue is the increasing MRT, where links in the GADAG are taken in the direction from a lower topologically ordered node to a higher one ๐Ÿ’™

Rainbow MRT: it's useful to have an MPLS MT-ID that refers to the multiple MRT forwarding topologies and the default forwarding topology. this is the Rainbow MRT MPLS MT-ID ๐ŸŒˆ LDP uses it to reduce signaling and to keep the same label always advertised to all peers for the same (MT-ID, Prefix) ๐Ÿซถ

MRT Island: the set of routers that support a particular MRT profile, plus the links connecting them that support MRT ๐Ÿ๏ธ

Island Border Router (IBR): a router in the MRT Island that's connected to a router that is not in the MRT Island, with both of them in a common area or level ๐Ÿšง

Island Neighbor (IN): a router that is not in the MRT Island but is adjacent to an IBR and in the same area/level as that IBR ๐Ÿ‘€

named proxy-node: a proxy-node can represent a destination prefix that can be attached to the MRT Island via at least two routers. it's named if there's a way that traffic can be encapsulated to reach that specific proxy node. this could be because there's an LDP FEC (Forwarding Equivalence Class) for the associated prefix, or because MRT-Red and MRT-Blue IP addresses are advertised in an undefined fashion for that proxy-node ๐ŸŽ€

4. Maximally Redundant Trees (MRT)

okay the big idea ๐Ÿง  a pair of Maximally Redundant Trees is a pair of directed spanning trees that gives you maximally disjoint paths toward their common root. only the links or nodes whose failure would partition the network (cut-links and cut-vertices) are shared between the two trees, which is honestly so iconic โœจ the MRT Lowpoint algorithm is given in [RFC7811]. it can be computed in O(e + n log n), and it's less than three SPFs ๐Ÿ”ฅ this document covers how MRTs get used, not how to compute them.

MRT provides destination-based trees for each destination. every router stores its normal primary next hop(s), plus its MRT-Blue next hop(s) and MRT-Red next hop(s) toward each destination ๐Ÿฆ‹ the alternate gets selected between MRT-Blue and MRT-Red.

the most important thing to understand about MRTs is this: for each pair of destination-routed MRTs, there's a path from every node X to the destination D on the Blue MRT that is as disjoint as possible from the path on the Red MRT. main character energy ๐Ÿ‘‘

here's an example. Figure 1 shows a network graph that's 2-connected in (a), with its associated MRTs in (b) and (c). take the paths from B to R. on the Blue MRT, the paths are B->F->D->E->R or B->C->D->E->R. on the Red MRT, the path is B->A->R. these are clearly link and node-disjoint, which is why these MRTs count as redundant trees ๐ŸŒธ

   [E]---[D]---|           [E]<--[D]<--|                [E]-->[D]---|
    |     |    |            |     ^    |                       |    |
    |     |    |            V     |    |                       V    V
   [R]   [F]  [C]          [R]   [F]  [C]               [R]   [F]  [C]
    |     |    |                  ^    ^                 ^     |    |
    |     |    |                  |    |                 |     V    |
   [A]---[B]---|           [A]-->[B]---|                [A]<--[B]<--|

         (a)                     (b)                         (c)
   a 2-connected graph     Blue MRT towards R          Red MRT towards R

                      Figure 1: A 2-Connected Network

now the plot twist ๐Ÿ˜ณ in Figure 2, the network in (a) is not 2-connected. if C, G, or the link C<->G failed, the network would get partitioned. it's clearly impossible to have two link-disjoint or node-disjoint paths from G, J, or H to R. the MRTs in (b) and (c) still offer paths that are as disjoint as possible. for instance, the paths from B to R are the same as in Figure 1, and the path from G to R is G->C->D->E->R on the Blue MRT and G->C->B->A->R on the Red MRT ๐Ÿฅน

                        [E]---[D]---|     |---[J]
                         |     |    |     |    |
                         |     |    |     |    |
                        [R]   [F]  [C]---[G]   |
                         |     |    |     |    |
                         |     |    |     |    |
                        [A]---[B]---|     |---[H]

                       (a) a graph that is not 2-connected

         [E]<--[D]<--|         [J]        [E]-->[D]---|     |---[J]
          |     ^    |          |                |    |     |    ^
          V     |    |          |                V    V     V    |
         [R]   [F]  [C]<--[G]   |         [R]   [F]  [C]<--[G]   |
                ^    ^     ^    |          ^     |    |          |
                |    |     |    V          |     V    |          |
         [A]-->[B]---|     |---[H]        [A]<--[B]<--|         [H]

          (b) Blue MRT towards R          (c) Red MRT towards R

                Figure 2: A Network That Is Not 2-Connected

5. MRT and Fast Reroute

quick recap of normal IGP routing: each router has its Shortest Path Tree (SPT) to all destinations ๐ŸŒณ from the perspective of one particular destination, D, that looks like a reverse SPT (rSPT). to use MRT, each destination D also gets two MRTs associated with it. by convention, these are called the MRT-Blue and MRT-Red ๐Ÿ’™โค๏ธ MRT-FRR is realized by using multi-topology forwarding, so there's an MRT-Blue forwarding topology and an MRT-Red forwarding topology ๐ŸŽ€

any IP/LDP fast-reroute technique that goes beyond LFA needs an extra dataplane procedure, like an additional forwarding mechanism. the well-known options are multi-topology forwarding (used by MRT-FRR), tunneling (e.g., [RFC6981] or [RFC7490]), and per-interface forwarding (e.g., Loop-Free Failure Insensitive Routing in [EnyediThesis]) ๐Ÿงš

when there's a link or node failure that affects the network but doesn't partition it, each node still has at least one path via one of the MRTs to reach destination D โœจ for example, in Figure 2, B would normally forward traffic to R across B->A->R. if the B<->A link fails, B could use the MRT-Blue path B->F->D->E->R ๐Ÿฆ‹

as always with fast-reroute tech, forwarding doesn't change until a local failure is detected ๐Ÿšจ packets go along the shortest path, and the appropriate alternate to use is pre-computed. [RFC7811] describes exactly how to decide whether the MRT-Blue next hops or the MRT-Red next hops should be the MRT alternate next hops for a particular primary next hop to a particular destination ๐Ÿ’…

MRT alternates are always available to use ๐Ÿ™Œ whether you use an MRT alternate, an LFA, or some other type of alternate is a local decision.

okay here's the part that makes me emotional ๐Ÿฅบ as described in [RFC5286], when a worse failure than anticipated happens, using LFAs that aren't downstream neighbors can cause looping among alternates. Section 1.1 of [RFC5286] gives an example of link-protecting alternates causing a loop on node failure. but even if a worse failure than anticipated happens, using MRT alternates won't cause looping ๐Ÿ˜ญ๐Ÿซถ

6. Unicast Forwarding with MRT Fast Reroute

there are three possible types of routers involved in forwarding a packet along an MRT path ๐Ÿงšโ€โ™€๏ธ at the MRT ingress router, the packet leaves the shortest path to the destination and follows an MRT path to the destination. in an FRR application, the MRT ingress router is the PLR. an MRT transit router takes a packet that already arrives associated with a particular MRT, and forwards it on that same MRT ๐ŸŒˆ in some situations (we'll get to those later), the packet will need to leave the MRT path and return to the shortest path. that happens at the MRT egress router ๐Ÿ‘‘ the MRT ingress and egress functionality may depend on the underlying type of packet being forwarded (LDP or IP), but the MRT transit functionality is independent of the packet type. we'll look at several MRT transit forwarding mechanisms first, and then at how those mechanisms can be applied to carrying LDP and IP traffic ๐Ÿ’–

6.1. Introduction to MRT Forwarding Options ๐Ÿฆ‹

okay so there are a few different ways MRT forwarding can actually work, and we're going to look at all of them ๐Ÿ’…

  1. MRT LDP Labels
    • A. Topology-scoped FEC encoded using a single label
    • B. Topology and FEC encoded using a two-label stack
  2. MRT IP Tunnels
    • A. MRT IPv4 Tunnels
    • B. MRT IPv6 Tunnels

6.1.1. MRT LDP Labels ๐Ÿท๏ธ

we're looking at two options for MRT forwarding using MRT LDP labels, and they're both giving main character energy ๐ŸŒธ

6.1.1.1. Topology-Scoped FEC Encoded Using a Single Label (Option 1A)

bestie, [RFC7307] is the mechanism that lets you distribute FEC-label bindings scoped to a particular MPLS topology (the one identified by an MPLS MT-ID) ๐Ÿงš. so to use multi-topology LDP to build MRT forwarding topologies, we link two MPLS MT-IDs to the MRT-Red and MRT-Blue forwarding topologies, on top of the default shortest path topology, which uses MT-ID=0. ๐Ÿ’–

with this option, you get one label per topology-scoped FEC. say a FEC in the default topology is default-FEC-A. then we make two more topology-scoped FECs for the Red and Blue MRT topologies, called red-FEC-A and blue-FEC-A. a router doing MRT transit forwarding this way advertises a different FEC-label binding for each of those three topology-scoped FECs โœจ. so when a packet shows up with the red-FEC-A label, the MRT transit router figures out the next hop for the MRT-Red topology for that FEC, swaps the incoming label for the outgoing label it learned for red-FEC-A from the MRT-Red next-hop router, and forwards the packet ๐Ÿš€

the cute part is that the FEC stays attached to the packet through its labels at every hop along the MRT. we're gonna use this when we explain how to carry LDP traffic on MRT paths with multi-topology LDP labels ๐Ÿซถ

this is super simple for hardware to support ๐Ÿ’…. the downside is that it eats up more of the label space, needs more memory to store the labels, and makes LDP do more work to distribute FEC-label bindings ๐Ÿ˜ญ. it also generally takes longer to install the FRR entries in the Forwarding Information Base (FIB), which means it takes longer before the next failure can be protected ๐Ÿ’€

this forwarding option uses the LDP signaling extensions from [RFC7307]. the MRT-specific LDP extensions needed for this option will be described somewhere else ๐Ÿ“š

6.1.1.2. Topology and FEC Encoded Using a Two-Label Stack (Option 1B)

this option uses a two-label stack to encode both the topology and the FEC of the packet ๐ŸŽ€. the top label (the topology-id label) tells you which MRT forwarding topology you're on, and the second label (the FEC label) tells you which FEC it is. the top label is a new FEC type with two values, one for MRT Red and one for MRT Blue ๐ŸŒˆ

when an MRT transit router gets a packet with a topology-id label, it pops the top label and uses that to guide the next-hop selection together with the next label in the stack (the FEC label) ๐Ÿ“. then it swaps the FEC label, using the FEC-label bindings it learned through normal LDP mechanisms. after that, it pushes the topology-id label for the next hop ๐Ÿฆ‹

just like Option 1A, the FEC stays with the packet in its labels at each hop along the MRT โœจ

this one is light on extra labels, memory, and LDP communication, which is a huge plus ๐Ÿ’–. the trade-off is that packets get bigger and the label operations and lookups get more complicated ๐Ÿ™ˆ

this forwarding option is consistent with context-specific label spaces, as described in [RFC5331]. however, the exact LDP behavior needed to support this option for MRT hasn't been specified yet ๐Ÿ‘€

6.1.1.3. Compatibility of MRT LDP Label Options 1A and 1B

MRT transit forwarding based on MRT LDP Label options 1A and 1B can coexist in the same network ๐Ÿค. a packet can be forwarded along a single MRT path, using the single label of Option 1A for some hops and the two-label stack of Option 1B for others. however, to keep MRT Island formation simple, we require that all routers in the MRT Island support at least one common forwarding mechanism ๐Ÿ’…. for example, the Default MRT Profile requires support for the MRT LDP Label Option 1A forwarding mechanism. that way, routers in an MRT Island that support the Default MRT Profile can always set up MRT forwarding paths based on Option 1A ๐Ÿซถ

a router that supports Option 1A may also support Option 1B. if the scaling or performance characteristics of the two options differ in that implementation, it may be desirable for a pair of adjacent routers to use Option 1B labels instead of Option 1A labels ๐ŸŒธ. if those two routers successfully negotiate Option 1B labels, they're free to use them, and none of the other routers in the MRT Island need to know about it โœจ

note that this document only defines the Default MRT Profile, which requires support for the MRT LDP Label Option 1A forwarding mechanism ๐Ÿ“š

6.1.1.4. Required Support for MRT LDP Label Options

if a router supports a profile that includes the MRT LDP Label Option 1A for the MRT transit forwarding mechanism, then it MUST support Option 1A, which encodes topology-scoped FECs using a single label. the router MAY also support Option 1B ๐Ÿ’–

if a router supports a profile that includes the MRT LDP Label Option 1B for the MRT transit forwarding mechanism, then it MUST support Option 1B, which encodes the topology and FEC using a two-label stack. the router MAY also support Option 1A ๐Ÿ‘‘

6.1.2. MRT IP Tunnels (Options 2A and 2B) ๐ŸŒŠ

IP tunneling can also be used as an MRT transit forwarding mechanism ๐Ÿฆ‹. each router that supports this mechanism announces two extra loopback addresses, each with its associated MRT color. those addresses are used as destination addresses for MRT-blue and MRT-red IP tunnels, respectively ๐Ÿ’œ. the special loopback addresses let transit nodes tell that traffic is being forwarded along either the MRT-blue or the MRT-red topology to reach the tunnel destination โœจ

for example, an MRT ingress router can send a packet down the MRT-red path to router X by encapsulating it with the MRT-red loopback address that router X advertised. when router X receives the packet, it removes the encapsulation header and forwards the packet based on the original destination address ๐ŸŽ€

you can use either IPv4 (Option 2A) or IPv6 (Option 2B) as the tunneling mechanism ๐ŸŒˆ

the two LDP label options don't need extra loopbacks per router the way the IP tunneling mechanism does ๐Ÿ™Œ. that's because LDP labels are used hop by hop to identify the MRT-blue and MRT-red forwarding topologies ๐Ÿงš

6.2. Forwarding LDP Unicast Traffic over MRT Paths ๐Ÿšฆ

in the last section, we looked at a few options for MRT transit forwarding, which doesn't depend on the type of traffic being carried ๐Ÿ’…. now we look at MRT ingress functionality, which does depend on the traffic type (IP or LDP). we'll start with LDP traffic ๐Ÿซถ

we're also keeping things simple at first by assuming the network is a single IGP area and that every router in the network participates in MRT ๐ŸŒธ. other deployment scenarios that need MRT egress functionality get covered later in this document ๐Ÿ“š

in principle, you can carry LDP traffic in MRT IP tunnels ๐Ÿค”. but for LDP traffic, it's really desirable to avoid tunneling ๐Ÿ™…โ€โ™€๏ธ. tunneling LDP traffic to a remote node means you need to know the remote FEC-label bindings so the LDP traffic keeps being forwarded properly when it comes out of the tunnel. that calls for targeted LDP sessions, which can make management more complicated ๐Ÿ˜ญ. as described below, the two MRT forwarding mechanisms that use LDP labels don't need targeted LDP sessions โœจ

6.2.1. Forwarding LDP Traffic Using MRT LDP Label Option 1A

the MRT LDP Label Option 1A forwarding mechanism uses topology-scoped FECs encoded with a single label, as described in Section 6.1.1.1 ๐Ÿ’–. when a PLR gets an LDP packet that needs to go on the MRT-Red (for example), it does a label swap, replacing the usual LDP label for the FEC with the MRT-Red label for that FEC. that MRT-Red label was learned from the next-hop router on the MRT-Red, as computed by the PLR ๐Ÿ“. when the next-hop router on the MRT-Red gets the packet with the MRT-Red label for the FEC, MRT transit forwarding carries on as described in Section 6.1.1.1. this way, the original FEC stays attached to the packet at every hop along the MRT ๐Ÿฆ‹

6.2.2. Forwarding LDP Traffic Using MRT LDP Label Option 1B

the MRT LDP Label Option 1B forwarding mechanism encodes the topology and the FEC with a two-label stack, as described in Section 6.1.1.2 ๐ŸŽ€. when a PLR gets an LDP packet that needs to go on the MRT-Red, it first does a normal LDP label swap. it replaces the incoming normal LDP label for a given FEC with the outgoing normal LDP label for that FEC, which it learned from the next hop on the MRT-Red ๐ŸŒธ. on top of that, the PLR pushes the topology-id label associated with the MRT-Red, then forwards the packet to the right next hop on the MRT-Red ๐Ÿš€. when the next-hop router on the MRT-Red gets the packet with the MRT-Red label for the FEC, MRT transit forwarding carries on as described in Section 6.1.1.2. just like with Option 1A, the original FEC stays attached to the packet at every hop along the MRT โœจ

6.2.3. Other Considerations for Forwarding LDP Traffic Using MRT LDP Labels

okay this one's a little extra ๐Ÿค“. forwarding LDP traffic with MRT LDP Labels can be done without targeted LDP sessions when you use an MRT path to the destination FEC. the alternates selected in [RFC7811] use the MRT path to the destination FEC, so targeted LDP sessions aren't needed ๐Ÿ™Œ. but if you wanted the PLR to use an MRT to reach the primary next-next-hop for the FEC, and then keep forwarding the LDP packet along the shortest path from that primary next-next-hop, you'd need tunneling to that primary next-next-hop ๐Ÿ˜ฌ. you'd also need a targeted LDP session so the PLR can learn the FEC-label binding for the primary next-next-hop and forward the packet correctly ๐Ÿ’€

6.2.4. Required Support for LDP Traffic

for the best hardware compatibility, routers implementing MRT fast reroute of LDP traffic MUST support Option 1A of encoding the MT-ID in the labels (See Section 9) ๐Ÿ†

6.3. Forwarding IP Unicast Traffic over MRT Paths โœจ

okay so for IPv4 traffic there's literally no practical option right now except tunneling ๐Ÿ’… bc you need extra bits to say "hey, use MRT-Blue or MRT-Red" and IPv4 just doesn't have room. for IPv6 you could, in theory, define bits in the IPv6 options header for that. BUT this doc said nope, we're not making a solution that only works for IPv6 and leaves IPv4 out ๐Ÿซถ

the tunnel egress is super flexible, bestie. any router that's closer to the destination than the next hop works ๐Ÿฆ‹ the architecture assumes you pick the original destination in the area (check Section 11 for how multihomed prefixes get handled ๐Ÿ‘€). the other option is the next-next-hop toward the destination. like we talked about earlier, for LDP traffic, using the MRT to the original destination makes MRT-FRR way simpler bc you don't need targeted LDP sessions to the next-next-hop. for IP that whole thing doesn't even apply ๐Ÿ™ƒ

some situations need you to tunnel IP along an MRT to a tunnel endpoint that is NOT the actual destination. we'll get into those later, but quick heads up: an IP packet headed somewhere in a different IGP area/level from the PLR should get tunneled on the MRT to the Area Border Router (ABR) or Level Border Router (LBR) on the shortest path to the destination. and if the destination is outside the PLR's MRT Island, the packet should get tunneled on the MRT to a non-proxy-node right before the named proxy-node on that particular color MRT ๐ŸŒˆ

6.3.1. Tunneling IP Traffic Using MRT LDP Labels

an IP packet can be tunneled along an MRT path by pushing the right MRT LDP label(s) ๐Ÿงš tunneling with LDP labels instead of IP headers is lowkey amazing bc more of the installed routers can do line-rate encapsulation and decapsulation with LDP than with IP. and no extra IP addresses have to be allocated or signaled. zero extra paperwork, iconic ๐Ÿ’–

6.3.1.1. Tunneling IP Traffic Using MRT LDP Label Option 1A

the MRT LDP Label Option 1A forwarding mechanism uses topology-scoped FECs encoded with a single label, as described in Section 6.1.1.1 ๐ŸŽ€ when a PLR gets an IP packet that needs to go over the MRT-Red to a particular tunnel endpoint, it does a label push operation. the label it pushes is the MRT-Red label for a FEC that the tunnel endpoint originated, learned from the next hop on the MRT-Red. simple, clean, no drama โœจ

6.3.1.2. Tunneling IP Traffic Using MRT LDP Label Option 1B

the MRT LDP Label Option 1B forwarding mechanism encodes the topology AND the FEC with a two-label stack, as described in Section 6.1.1.2 ๐Ÿ“ when a PLR gets an IP packet that needs the MRT-Red to a particular tunnel endpoint, the PLR pushes two labels onto the IP packet. the first (inner) label is the normal LDP label learned from the next hop on the MRT-Red, tied to a FEC the tunnel endpoint originated. the second (outer) label is the topology-id label for the MRT-Red ๐Ÿ‘‘

for completeness (bc I'm thorough like that ๐Ÿ™ˆ), there's a possible variation that uses a single label instead of two. to tunnel an IP packet over an MRT to the actual destination of the packet (not some random tunnel endpoint), you could just push a topology-id label straight onto the packet. then an MRT transit router would pop the topology-id label, do an IP route lookup in the context of that topology-id label, and push the topology-id label back on ๐Ÿ’œ

6.3.2. Tunneling IP Traffic Using MRT IP Tunnels

to tunnel over the MRT to a particular tunnel endpoint, the PLR encapsulates the original IP packet with an additional IP header. that extra header uses the MRT-Blue or MRT-Red loopback address of the tunnel endpoint ๐Ÿฆ‹ very wrapped-up-in-a-gift-box energy ๐ŸŽ

6.3.3. Required Support for IP Traffic

okay this one's important, bestie ๐Ÿšจ for the greatest hardware compatibility, AND to make it easier to remove the MRT-topology marking at area/level boundaries, routers that support MPLS and implement IP MRT fast reroute MUST support tunneling of IP traffic using MRT LDP Label Option 1A (topology-scoped FEC encoded using a single label). no skipping this one, fr fr ๐Ÿ’…


7. MRT Island Formation ๐Ÿฆ‹

so the whole point of saying you support MRT is to indicate that the MRT-Blue and MRT-Red forwarding topologies get created for transit traffic ๐ŸŒธ MRT allows for different options, and some of them are potentially incompatible with each other ๐Ÿ˜ฌ to make consistent MRT forwarding topologies, all the routers in a particular MRT Island need to use the same set of options. those options get grouped into MRT profiles. also, all the routers in an MRT Island need to use the same set of nodes and links inside the Island when they compute the MRT forwarding topologies. this section explains how a router figures out which nodes and links to include in a particular MRT Island. some of that info already exists in the IGPs and can be used for Island formation, as long as you read it the way this doc defines โœจ

other info still needs to be shared between routers, and there aren't protocol extensions for it yet. this new info has to be shared among all the routers in an IGP area, so it makes sense to define extensions to the existing IGPs to carry it ๐Ÿงš those new protocol extensions will be defined somewhere else.

deployment scenarios using multi-topology OSPF or IS-IS, or running both IS-IS and OSPF on the same routers, are out of scope for this specification ๐Ÿ™…โ€โ™€๏ธ and just like with LFA, MRT-FRR does not support OSPF Virtual Links.

at a high level, an MRT Island is defined as the set of routers supporting the same MRT profile, in the same IGP area/level, with bidirectional links connecting those routers. we'll go through the more detailed versions of these criteria below ๐Ÿ’–

7.1. IGP Area or Level

all the links in an MRT Island are bidirectional and belong to the same IGP area or level ๐ŸŽ€ for IS-IS, a link that belongs to both Level-1 and Level-2 would qualify to be in multiple MRT Islands. a given ABR or LBR can belong to multiple MRT Islands, one for each area or level it participates in. inter-area forwarding behavior is covered in Section 10 ๐ŸŒˆ

7.2. Support for a Specific MRT Profile

all the routers in an MRT Island support the same MRT profile ๐Ÿ’… a router advertises support for a given MRT profile using an 8-bit MRT Profile ID value. the "MRT Profile Identifier Registry" is defined in this document. the protocol extensions for advertising the MRT Profile ID value will be defined in a future specification. a given router can support multiple MRT profiles and take part in multiple MRT Islands. the options that make up an MRT Profile, plus the Default MRT Profile, are defined in Section 8 โœจ

the MRT Island formation process runs independently for each MRT profile a given router advertises ๐Ÿง  for example, picture a network with 40 connected routers in the same area, all advertising support for MRT Profile A and MRT Profile B. two distinct MRT Islands get formed, one for Profile A and one for Profile B, and each island contains all 40 routers. a complete set of maximally redundant trees gets computed for each island, following the rules defined for each profile. now say we add a third MRT Profile to this example, Profile C, advertised by a connected subset of 30 routers. then there's a third MRT Island, made up of those 30 routers, and a third set of maximally redundant trees gets computed. so in this example, the 40 routers compute and install two sets of MRT transit forwarding entries (Profiles A and B), while the 30 routers compute and install three sets (Profiles A, B, and C) ๐Ÿ˜ญ it's giving multi-tasking

7.3. Excluding Additional Routers and Interfaces from the MRT Island

MRT takes existing IGP mechanisms for discouraging traffic from using particular links and routers into account, and it adds an MRT-specific exclusion mechanism for links ๐Ÿ”ฅ

7.3.1. Existing IGP Exclusion Mechanisms

mechanisms for discouraging traffic from using particular links already exist in IS-IS and OSPF ๐Ÿ™Œ in IS-IS, an interface configured with a metric of 2^24-2 (0xFFFFFE) will only be used as a last resort. (an interface configured with a metric of 2^24-1 (0xFFFFFF) will not be advertised into the topology.) in OSPF, an interface configured with a metric of 2^16-1 (0xFFFF) will only be used as a last resort. these metrics can be configured manually to enforce administrative policy, or they can be set automatically, like with LDP IGP synchronization [RFC5443] ๐ŸŒธ

mechanisms also already exist in IS-IS and OSPF to discourage or prevent transit traffic from using a particular router ๐Ÿ™ˆ in IS-IS, the overload bit prevents transit traffic from using a router.

for OSPFv2 and OSPFv3, [RFC6987] specifies setting all outgoing interface metrics to 0xFFFF to discourage transit traffic from using a router. ([RFC6987] defines the metric value 0xFFFF as MaxLinkMetric, a fixed architectural value for OSPF.) for OSPFv3, [RFC5340] specifies that a router be excluded from the intra-area SPT computation if the V6-bit or R-bit of the Link State Advertisement (LSA) options is not set in the Router LSA ๐Ÿงš

the following rules for MRT Island formation make sure that MRT FRR protection traffic does not use a link or router that existing IGP mechanisms discourage or prevent from carrying traffic ๐Ÿ›ก๏ธ

  1. A bidirectional link MUST be excluded from an MRT Island if either the forward or reverse cost on the link is 0xFFFFFE (for IS-IS) or 0xFFFF for OSPF.
  2. A router MUST be excluded from an MRT Island if it is advertised with the overload bit set (for IS-IS), or if it is advertised with metric values of 0xFFFF on all of its outgoing interfaces (for OSPFv2 and OSPFv3).
  3. A router MUST be excluded from an MRT Island if it is advertised with either the V6-bit or R-bit of the LSA options not set in the Router LSA.

7.3.2. MRT-Specific Exclusion Mechanism

this architecture also defines a way to exclude an otherwise usable link from MRT Islands ๐Ÿฆ‹ the protocol extensions for advertising that a link is MRT-Ineligible will be defined elsewhere. a link with either interface advertised as MRT-Ineligible MUST be excluded from an MRT Island. heads up: an interface advertised as MRT-Ineligible by a router is ineligible for ALL profiles that router advertises ๐Ÿ‘€

7.4. Connectivity

all of the routers in an MRT Island MUST be connected by bidirectional links to other routers in the MRT Island ๐Ÿ’– disconnected MRT Islands operate independently of one another ๐ŸŒˆ

7.5. Algorithm for MRT Island Identification

an algorithm that lets a computing router identify the routers and links in its local MRT Island, following all the rules above, is given in Section 5.2 of [RFC7811] ๐Ÿง โœจ


8. MRT Profile ๐Ÿ’…

an MRT Profile is a set of values and options related to MRT behavior ๐ŸŽ€ the complete set of options is designated by its corresponding 8-bit Profile ID value.

this document specifies the values and options that correspond to the Default MRT Profile (Profile ID = 0). future documents may define other MRT Profiles by specifying the MRT Profile Options below ๐ŸŒธ

8.1. MRT Profile Options โœจ

okay so an MRT Profile is basically a bundle of choices that tells your router how to build its maximally redundant trees ๐ŸŽ€ Let's go through the knobs one by one, bestie ๐Ÿ’…

MRT Algorithm: this is the exact algorithm your router uses to compute the maximally redundant trees for this profile ๐Ÿง 

MRT-Red MT-ID: this is the MPLS MT-ID tied to the MRT-Red forwarding topology ๐ŸŒธ It gets pulled from the MPLS Multi-Topology Identifiers Registry, so it's not just vibes, it's officially registered ๐Ÿ’œ

MRT-Blue MT-ID: same deal but for the MRT-Blue forwarding topology ๐Ÿฆ‹ Also allocated from the MPLS Multi-Topology Identifiers Registry โœจ

GADAG Root Selection Policy: okay this one is so important ๐Ÿ‘‘ It decides how the GADAG root gets picked. Every router in the MRT Island has to end up using the same GADAG root when it does its math, or the trees won't line up, and that would be a whole mess ๐Ÿ˜ญ So a valid policy MUST let every router independently land on the same GADAG root using only info that every router in the island has. GADAG Root Selection Priority values (the router-specific ones) MAY be part of the policy too ๐Ÿซถ

MRT Forwarding Mechanism: this is how a router actually carries transit traffic along the MRT paths ๐Ÿš€ A router that supports a given mechanism MUST program the right next hops into its forwarding plane. The current options are MRT LDP Label Option 1A, MRT LDP Label Option 1B, IPv4 Tunneling, IPv6 Tunneling, and None ๐ŸŒˆ If IPv4 is supported, the MRT-Red and MRT-Blue IPv4 loopback addresses SHOULD be specified ๐Ÿ’– Same energy for IPv6: if it's supported, both MRT-Red and MRT-Blue IPv6 loopback addresses SHOULD be specified โœจ

Recalculation: this is the process and timing for computing fresh MRTs once the topology changes ๐Ÿ”„

Area/Level Border Behavior: this spells out how traffic on MRT-Blue or MRT-Red should be handled when it crosses into another area ๐Ÿฆ‹

Other Profile-Specific Behavior: depending on the use case, a profile can have extra behavior of its own ๐Ÿ“

When a brand new MRT Profile gets defined, it should get new, unique values allocated from the "MPLS Multi-Topology Identifiers Registry", matching the MRT-Red and MRT-Blue MT-ID values for that profile ๐Ÿงš

If a router advertises support for multiple MRT profiles, it MUST create the transit forwarding topologies for each one of them, unless the profile picks the None option for the MRT Forwarding Mechanism ๐Ÿ‘‘ That's a must, no exceptions!

Here's the iconic part ๐Ÿ˜ญ MRT-FRR can keep transit forwarding entries for multiple profiles at once, which makes switching from an existing profile to a new one super smooth ๐Ÿซถ The new profile gets activated in parallel, its transit forwarding entries get installed without messing with the old profile's entries, and once the new state checks out, the router can be told to use the new profile's alternates when something fails ๐ŸŽ€ Literally seamless.

8.2. Router-Specific MRT Parameters โœจ

okay so some profiles need extra router-specific MRT parameters advertised ๐ŸŒธ Here's the tea: the set of options named by the MRT Profile ID MUST be identical for every router in an MRT Island, but these router-specific parameters are allowed to differ from router to router in the same island ๐Ÿ’… Here are a few of them:

GADAG Root Selection Priority: a GADAG Root Selection Policy MAY lean on the GADAG Root Selection Priority values each router advertises ๐Ÿ‘‘ It lets operators make sure the GADAG root comes from a particular group of routers ๐Ÿงš There's an example of this in the Default MRT Profile below ๐Ÿฆ‹

MRT-Red Loopback Address: this is the router's loopback address for reaching it over the MRT-Red forwarding topology ๐ŸŒˆ It can be IPv4 or IPv6 ๐Ÿ’– Heads up, this one isn't needed for the Default MRT Profile ๐Ÿ™ˆ

MRT-Blue Loopback Address: this is the router's loopback address for reaching it over the MRT-Blue forwarding topology ๐Ÿฆ‹ It can be specified for either IPv4 and IPv6 โœจ Also not needed for the Default MRT Profile ๐Ÿซถ

Protocol extensions for advertising a router's GADAG Root Selection Priority value will be defined in other documents ๐Ÿ“š And protocol extensions for advertising MRT-Red and MRT-Blue loopback addresses will be defined elsewhere too ๐Ÿงš

8.3. Default MRT Profile โœจ

The Default MRT Profile is the one indicated by MRT Profile ID value 0 ๐Ÿ“ Here's how it's set up:

MRT Algorithm: the MRT Lowpoint algorithm defined in [RFC7811] ๐ŸŽ€

MRT-Red MPLS MT-ID: this is a temporary registration allocated from the "MPLS Multi-Topology Identifiers" registry ๐ŸŒธ The registration request is in [LDP-MRT] ๐Ÿ’œ

MRT-Blue MPLS MT-ID: also a temporary registration from the "MPLS Multi-Topology Identifiers" registry ๐Ÿฆ‹ The registration request is in [LDP-MRT] โœจ

GADAG Root Selection Policy: among the routers in the MRT Island with the lowest numerical GADAG Root Selection Priority value, an implementation MUST pick the router with the highest Router ID to be the GADAG root ๐Ÿ‘‘ Quick reminder: a lower number means a higher preference for selection ๐Ÿซถ

Forwarding Mechanisms: MRT LDP Label Option 1A ๐Ÿš€

Recalculation: MRT recalculation SHOULD happen as described in Section 12.2 ๐Ÿ”„ This lets the MRT forwarding topologies support IP/LDP fast-reroute traffic โšก

Area/Level Border Behavior: as described in Section 10, ABRs/LBRs SHOULD make sure traffic leaving the area also exits the MRT-Red or MRT-Blue forwarding topology ๐ŸŒˆ

9. LDP Signaling Extensions and Considerations โœจ

The protocol extensions for LDP will be defined in another document ๐Ÿ“š A router MUST indicate that it can support MRT ๐ŸŽ€ Having that explicit signal lets the network do MRT-specific processing, like special handling of FECs sent with the Rainbow MRT MT-ID ๐ŸŒˆ

A FEC sent with the Rainbow MRT MT-ID means that FEC applies to all the MRT-Blue and MRT-Red MT-IDs in supported MRT profiles ๐Ÿฆ‹ The FEC-label bindings for the default shortest-path-based MT-ID 0 MUST still be sent ๐Ÿ’… (Even though you could infer them from the Rainbow FEC-label bindings ๐Ÿ™ˆ) This keeps normal LDP forwarding running smoothly โœจ The Rainbow MRT MT-ID is there to give ABRs or LBRs an easy way to handle the special signaling they need ๐Ÿงš It also avoids the mess of sending different MPLS labels to different LDP neighbors for the same FEC ๐Ÿ’– And since only ABRs/LBRs or an LDP egress router use the Rainbow MRT MT-ID, it isn't tied to any particular MRT profile ๐Ÿ‘‘

The value of the Rainbow MRT MPLS MT-ID has been temporarily allocated from the "MPLS Multi-Topology Identifiers" registry ๐ŸŒธ The registration request is in [LDP-MRT] ๐Ÿ’œ

10. Inter-area Forwarding Behavior ๐Ÿฆ‹

okay this is where things get spicy ๐ŸŒถ๏ธ An ABR/LBR has two forwarding roles: it forwards traffic within areas, and it forwards traffic from one area into another ๐ŸŽ€ These same two roles apply to MRT transit traffic too ๐Ÿ’… Traffic on MRT-Red or MRT-Blue that's headed somewhere inside the area needs to stay on MRT-Red or MRT-Blue in that area ๐ŸŒˆ But traffic leaving the area should also exit MRT-Red or MRT-Blue and go back to shortest path forwarding โœจ

For unicast MRT-FRR, the need to stay on an MRT forwarding topology ends at the ABR/LBR whose best route is via a different area/level ๐Ÿซถ It's highly desirable to return to the default forwarding topology when leaving an area/level, and there are three basic reasons why ๐Ÿงš First, the default topology uses shortest paths, so the packet takes the shortest possible route to its destination ๐Ÿš€ Second, a single router failure that shows up in multiple areas (like an ABR/LBR failure) can be identified and repaired around separately ๐Ÿ”ฅ Third, the packet can be fast-rerouted again if needed, because of a second distinct failure in a different area ๐Ÿ’ช

In OSPF, an ABR that receives a packet on MRT-Red or MRT-Blue destined for Z SHOULD keep forwarding it along MRT-Red or MRT-Blue only if the best route to Z is in the same OSPF area as the interface the packet came in on ๐Ÿ’œ Otherwise, the packet SHOULD be removed from MRT-Red or MRT-Blue and forwarded on the shortest-path default forwarding topology ๐Ÿฆ‹

The above applies to OSPF, and the same essential behavior applies to IS-IS if you swap in IS-IS level for OSPF area ๐ŸŒธ But the analogy isn't exact ๐Ÿ™ˆ An interface in OSPF can only be in one area, whereas an interface in IS-IS can be in both Level-1 and Level-2 ๐ŸŽ€ So to avoid confusion, the IS-IS behavior is described explicitly in Appendix A ๐Ÿ“š The following sections only use OSPF terminology ๐Ÿ’…

10.1. ABR Forwarding Behavior with MRT LDP Label Option 1A ๐ŸŒˆ

For LDP forwarding where a single label specifies a (MT-ID, FEC) pair, the ABR is responsible for advertising the proper label to each neighbor ๐Ÿงš Say an ABR has allocated three labels for a particular destination: L_primary, L_blue, and L_red ๐Ÿฆ‹ To routers in the same area as the best route to the destination, the ABR advertises L_primary for the default topology, L_blue for the MRT-Blue MT-ID, and L_red for the MRT-Red MT-ID, as expected โœจ But to routers in other areas, it advertises L_primary for the default topology and L_primary for the Rainbow MRT MT-ID ๐Ÿซถ Associating L_primary with the Rainbow MRT MT-ID makes the receiving routers use L_primary for both the MRT-Blue MT-ID and the MRT-Red MT-ID ๐Ÿ’–

The ABR installs all next hops for the best area: primary next hops for L_primary, MRT-Blue next hops for L_blue, and MRT-Red next hops for L_red ๐Ÿš€ Because the ABR advertised (Rainbow MRT MT-ID, FEC) with L_primary to neighbors outside the best area, packets from those neighbors arrive at the ABR with label L_primary and get forwarded into the best area along the default topology ๐Ÿ‘‘ So by controlling which labels get advertised, the ABR can enforce that packets exiting the area do so on the shortest-path default topology ๐Ÿ’…๐ŸŽ€

10.1.1. Motivation for Creating the Rainbow-FEC โœจ

okay so the desired forwarding behavior could totally be achieved in the example above WITHOUT the Rainbow-FEC ๐Ÿ™ˆ the ABR would advertise these FEC-label bindings to neighbors that aren't in the best area: L1_primary for the default topology, L1_primary for the MRT-Blue MT-ID, and L1_primary for the MRT-Red MT-ID. but ngl, doing that would need machinery to spoof the labels used in FEC-label binding advertisements on a per-neighbor basis. that label-spoofing machinery doesn't exist in most LDP implementations right now, and it doesn't have other obvious uses ๐Ÿ’€

BUT here's the lowkey genius part ๐Ÿ’… lots of existing LDP implementations can filter FEC-label binding advertisements on a per-neighbor basis! ๐Ÿฆ‹ the Rainbow-FEC lets us reuse that existing per-neighbor FEC filtering machinery to get the result we want. so by introducing the Rainbow FEC, we can use per-neighbor FEC-filtering to advertise the FEC-label binding for the Rainbow-FEC (and filter out the ones for MRT-Blue and MRT-Red) to non-best-area neighbors of the ABR. iconic, no notes ๐Ÿ‘‘

An ABR may choose to either distribute the Rainbow-FEC or distribute separate MRT-Blue and MRT-Red advertisements. this is a local choice, so it's totally up to the ABR ๐Ÿซถ and a router that supports the MRT LDP Label Option 1A forwarding mechanism MUST be able to receive and correctly interpret the Rainbow-FEC. that's the non-negotiable part, bestie ๐Ÿ˜ญ


10.2. ABR Forwarding Behavior with IP Tunneling (Option 2) ๐ŸŽ€

okay so if IP tunneling is being used, the ABR's behavior depends on the outermost IP address ๐Ÿงš if the outermost IP address is an MRT loopback address of the ABR, then the packet gets decapsulated and forwarded based on the inner IP address, which should go on the default SPT topology. if the outermost IP address is not an MRT loopback address of the ABR, then the packet is simply forwarded along the associated forwarding topology. and a PLR sending traffic to a destination outside its local area/level will pick the MRT and use the associated MRT loopback address of the selected ABR that's advertising the lowest cost to the external destination. the way that routing decision is made is literally giving main character energy ๐Ÿ’–

Thus, for these two MRT forwarding mechanisms (MRT LDP Label Option 1A and IP tunneling Option 2), there is no need for additional computation or per-area forwarding state. no extra work, no extra state, just vibes โœจ๐ŸŒธ


10.3. ABR Forwarding Behavior with MRT LDP Label Option 1B ๐ŸŒˆ

the other MRT forwarding mechanism, the one described in Section 6, uses two labels: a topology-id label and a FEC-label. with this one, any router whose MRT-Red or MRT-Blue next hop is an ABR would need to figure out whether that ABR is going to forward the packet out of the area/level. if it is, then that router should pop off the topology-id label before forwarding the packet to the ABR ๐Ÿ“

For example, in Figure 3, if node H fails, node E has to put traffic towards prefix p onto MRT-Red. but since node D knows that ABR1 will use a best route from another area, it's safe for D to pop the topology-id label and just forward the packet to ABR1 along the MRT-Red next hop. ABR1 will use the shortest path in Area 10 ๐Ÿฆ‹

In all cases for IS-IS and most cases for OSPF, the penultimate router can determine what decision the adjacent ABR will make. the one case where it can't be determined is when two ASBRs are in different non-backbone areas attached to the same ABR. then the ASBR's Area ID may be needed for tie-breaking (prefer the route with the largest OSPF area ID), and the Area ID isn't announced as part of the ASBR LSA. in this one case, suboptimal forwarding along the MRT in the other area would happen. if that becomes a realistic deployment scenario, protocol extensions could be developed to address this issue. so that's the one lil edge case ๐Ÿ™ˆ

    +----[C]----     --[D]--[E]                --[D]--[E]
    |           \   /         \               /         \
p--[A] Area 10 [ABR1]  Area 0 [H]--p   +-[ABR1]  Area 0 [H]-+
    |           /   \         /        |      \         /   |
    +----[B]----     --[F]--[G]        |       --[F]--[G]   |
                                       |                    |
                                       | other              |
                                       +----------[p]-------+
                                         area

      (a) Example topology        (b) Proxy node view in Area 0 nodes


                +----[C]<---       [D]->[E]
                V           \             \
             +-[A] Area 10 [ABR1]  Area 0 [H]-+
             |  ^           /             /   |
             |  +----[B]<---       [F]->[G]   V
             |                                |
             +------------->[p]<--------------+

              (c) rSPT towards destination p



          ->[D]->[E]                         -<[D]<-[E]
         /          \                       /         \
    [ABR1]  Area 0 [H]-+             +-[ABR1]         [H]
                   /   |             |      \
            [F]->[G]   V             V       -<[F]<-[G]
                       |             |
                       |             |
             [p]<------+             +--------->[p]

  (d) MRT-Blue in Area 0           (e) MRT-Red in Area 0

             Figure 3: ABR Forwarding Behavior and MRTs

11. Prefixes Multiply Attached to the MRT Island ๐Ÿ’œ

how a computing router S works out its local MRT Island for each supported MRT profile has already been covered in Section 7, so we're good there ๐Ÿ’…

okay so there are two types of prefixes or FECs that can be multiply attached to an MRT Island ๐Ÿ‘‘ the first type is multihomed prefixes that usually connect at a domain or protocol boundary. the second type represents routers that don't support the profile for the MRT Island.

The key difference is whether the traffic, once it's out of the MRT Island, might re-enter the MRT Island if a loop-free exit point isn't selected. that's the whole drama ๐Ÿ˜ญ

FRR using LFA has the useful property that it's able to protect multihomed prefixes against ABR failure. for instance, if a prefix from the backbone is available via both ABR A and ABR B, and A fails, then the traffic should be redirected to B. this can be accomplished with MRT FRR as well ๐ŸŒธ

If ASBR protection is desired, this gets more complicated if the ASBRs are in different areas. similarly, protecting labeled BGP traffic in the event of an ASBR failure has additional complexities due to the per-ASBR label spaces involved ๐Ÿ™ˆ

As discussed in [RFC5286], a multihomed prefix could be:

  • An out-of-area prefix announced by more than one ABR,
  • An AS-External route announced by two or more ASBRs,
  • A prefix with iBGP multipath to different ASBRs,
  • etc.

See Appendix B for a discussion of a general issue with multihomed prefixes connected in two different areas. ๐Ÿงš

There are also two different approaches to protection ๐Ÿฆ‹ The first is tunnel endpoint selection, where the PLR picks a router to tunnel to where that router is loop-free with respect to the failure-point. conceptually, the set of candidate routers to provide LFAs expands to all routers that can be reached via an MRT alternate and are attached to the prefix. big brain stuff โœจ

The second is to use a proxy-node, which can be named via MPLS label or IP address. the PLR picks the appropriate label or IP address to reach it on either MRT-Blue or MRT-Red as appropriate, to avoid the failure point. a proxy-node can represent a destination prefix that can be attached to the MRT Island via at least two routers. it's termed a named proxy-node if there's a way that traffic can be encapsulated to reach specifically that proxy-node. this could be because there is an LDP FEC for the associated prefix, or because MRT-Red and MRT-Blue IP addresses are advertised (in an as-yet undefined fashion) for that proxy-node. traffic to a named proxy-node may take a different path than traffic to the attaching router, and traffic is also explicitly forwarded from the attaching router along a predetermined interface towards the relevant prefixes ๐Ÿ’–

For IP traffic, multihomed prefixes can use tunnel endpoint selection. for IP traffic destined to a router outside the MRT Island, if that router is the egress for a FEC advertised into the MRT Island, then the named proxy-node approach can be used ๐Ÿซถ

For LDP traffic, there is always a FEC advertised into the MRT Island. the named proxy-node approach should be used, unless the computing router S knows the label for the FEC at the selected tunnel endpoint. ๐Ÿ“

If a FEC is advertised from outside the MRT Island into the MRT Island, and the forwarding mechanism specified in the profile includes LDP Label Option 1A, then the routers learning that FEC MUST also advertise labels for (MRT-Red, FEC) and (MRT-Blue, FEC) to neighbors inside the MRT Island. any router receiving a FEC corresponding to a router outside the MRT Island or to a multihomed prefix MUST compute and install the transit MRT-Blue and MRT-Red next hops for that FEC. and the FEC-label bindings for the topology-scoped FECs ((MT-ID 0, FEC), (MRT-Red, FEC), and (MRT-Blue, FEC)) MUST also be provided via LDP to neighbors inside the MRT Island. this part is a MUST-do, no cap ๐Ÿ”ฅ

11.1. Protecting Multihomed Prefixes Using Tunnel Endpoint Selection โœจ

okay so tunnel endpoint selection is a totally local decision for a router in the MRT Island ๐Ÿ’… it's all about picking and using an alternate, and it doesn't touch the transit MRT-Red and MRT-Blue forwarding topologies at all ๐Ÿฆ‹

let the computing router be S, and let the next hop F be the node whose failure we want to avoid ๐Ÿซถ the destination is prefix p, and A is the router that p is attached to for S's shortest path to p ๐ŸŒธ

the candidates for tunnel endpoint selection are the routers where the destination prefix is attached in the area/level ๐Ÿ’– for a candidate B, we need to figure out if B is loop-free to reach p with respect to S and F (for node-protection), or at least with respect to S and the link (S, F) (for link-protection) ๐Ÿ˜ญ if B will always prefer sending traffic to p via a different area/level, then that's just definitional ๐Ÿ’€ otherwise we need distance-based computations, and an SPF from B's perspective may be necessary ๐Ÿ”ฅ the rationale is similar to [RFC5286], and in the inequalities below, D_opt(X,Y) means the shortest distance from node X to node Y, while D_opt(X,p) means the shortest distance from node X to prefix p ๐Ÿงš

Loop-Free for S: D_opt(B, p) < D_opt(B, S) + D_opt(S, p)

Loop-Free for F: D_opt(B, p) < D_opt(B, F) + D_opt(F, p)

the latter is equivalent to the following, which avoids the need to compute the shortest path from F to p ๐Ÿ™ˆ

Loop-Free for F: D_opt(B, p) < D_opt(B, F) + D_opt(S, p) - D_opt(S, F)

finally, here are the rules for endpoint selection ๐Ÿ‘‘ the basic idea is to repair toward the prefix-advertising router picked for the shortest path, and to only select and tunnel to a different endpoint if it's actually necessary (e.g., A=F, or F is a cut-vertex, or the link (S,F) is a cut-link) ๐ŸŽ€

  1. does S have a node-protecting alternate to A? if so, select that ๐Ÿ’… tunnel the packet to A along that alternate. for example, if LDP is the forwarding mechanism, push the label (MRT-Red, A) or (MRT-Blue, A) onto the packet โœจ
  2. if not, is there a router B that is loop-free to reach p while avoiding both F and S? if so, select B as the endpoint ๐Ÿ’– then determine the MRT alternate to reach B while avoiding F, and tunnel the packet to B along that alternate. for example, with LDP, push the label (MRT-Red, B) or (MRT-Blue, B) onto the packet ๐ŸŒˆ
  3. if not, does S have a link-protecting alternate to A? if so, select that ๐Ÿฆ‹
  4. if not, is there a router B that is loop-free to reach p while avoiding S and the link from S to F? if so, select B as the endpoint, plus the MRT alternate for reaching B from S that avoids the link (S,F) ๐Ÿ”ฅ

the tunnel endpoint selected will receive a packet destined to itself, and since it's the egress, it will pop that MPLS label (or have signaled Implicit Null) and forward based on whatever is underneath ๐Ÿงšโ€โ™€๏ธ this is enough for IP traffic, because the tunnel endpoint can use the IP header of the original packet to keep forwarding it ๐Ÿซถ however, tunneling of LDP traffic requires targeted LDP sessions so the tunnel endpoint can learn the FEC-label binding ๐Ÿ˜ญ


11.2. Protecting Multihomed Prefixes Using Named Proxy-Nodes ๐ŸŒธ

instead, the named proxy-node method works with LDP traffic without needing targeted LDP sessions ๐ŸŽ€ it also has a clear advantage over tunnel endpoint selection, because it's possible to explicitly forward from the MRT Island along an interface to a loop-free island neighbor, even when that interface may not be a primary next hop ๐Ÿ’…

a named proxy-node represents one or more destinations, and for LDP forwarding it has a FEC associated with it that gets signaled into the MRT Island โœจ so it's possible to explicitly label packets to go to (MRT-Red, FEC) or (MRT-Blue, FEC), and at the border of the MRT Island, the label will swap to mean (MT-ID 0, FEC) ๐Ÿฆ‹ it would also be possible to have named proxy-nodes for IP forwarding, but that would need extensions to signal two IP addresses to be associated with MRT-Red and MRT-Blue for the proxy-node ๐Ÿ™ˆ a named proxy-node can be uniquely represented by the two routers in the MRT Island that it's connected to ๐Ÿ’– the extensions to signal those IP addresses will be defined elsewhere, and the details of which label-bindings must be originated will be described in another document ๐Ÿงš

computing the MRT next hops to a named proxy-node, and the MRT alternate for the computing router S to avoid a particular failure node F, is straightforward ๐Ÿ’… the details of the simple constant-time functions, Select_Proxy_Node_NHs() and Select_Alternates_Proxy_Node(), are given in [RFC7811] ๐Ÿ”ฅ a key point is that these MRT next hops and alternates can be computed as new named proxy-nodes are added or removed, without needing a new MRT computation or impacting other existing MRT paths ๐Ÿ‘‘ this maps super well to how OSPFv2 (see [RFC2328], Section 16.5) does incremental updates for new summary-LSAs ๐Ÿซถ

the remaining question is how to attach the named proxy-node to the MRT Island, and all the routers in the MRT Island MUST do this consistently ๐Ÿ˜ญ no more than two routers in the MRT Island can be selected, and one should only be selected if there are no others that meet the necessary criteria ๐ŸŒˆ the named proxy-node is logically part of the area/level ๐ŸŽ€

there are two sources for candidate routers in the MRT Island to connect to the named proxy-node ๐Ÿ’– the first set is made up of the routers in the MRT Island that are advertising the prefix, and the named-proxy-cost assigned to each prefix-advertising router is the announced cost to the prefix ๐Ÿฆ‹ the second set is made up of the routers in the MRT Island that are connected to routers outside the MRT Island but in the same area/level, and those routers get defined as Island Border Routers (IBRs) ๐Ÿ™ˆ the routers connected to the IBRs that are not in the MRT Island but are in the same area/level as the MRT Island are Island Neighbors (INs) โœจ

since packets sent to the named proxy-node along MRT-Red or MRT-Blue may come from any router inside the MRT Island, whatever router an IBR forwards the packet to has to be loop-free with respect to the whole MRT Island for the destination ๐Ÿ’… so an IBR is a candidate router only if it has at least one IN whose shortest path to the prefix does not enter the MRT Island ๐Ÿ”ฅ a method for identifying Loop-Free Island Neighbors (LFINs) is given in [RFC7811] ๐Ÿ‘‘ the named-proxy-cost assigned to each (IBR, IN) pair is cost(IBR, IN) + D_opt(IN, prefix) ๐Ÿงš

from the set of prefix-advertising routers and the set of IBRs with at least one LFIN, the two routers with the lowest named-proxy-cost are selected ๐Ÿ’– ties are broken based on the lowest Router ID ๐ŸŒธ for ease of discussion, the two selected routers will be referred to as proxy-node attachment routers โœจ

a proxy-node attachment router has a special forwarding role ๐Ÿซถ when a packet is received destined to (MRT-Red, prefix) or (MRT-Blue, prefix), and the proxy-node attachment router is an IBR, it MUST swap to the shortest path forwarding topology (e.g., swap to the label for (MT-ID 0, prefix) or remove the outer IP encapsulation) and forward the packet to the IN whose cost was used in the selection ๐Ÿ˜ญ if the proxy-node attachment router is not an IBR, then the packet MUST be removed from the MRT forwarding topology and sent along the interface(s) that caused the router to advertise the prefix, and this interface might be out of the area/level/AS ๐ŸŒˆ


11.3. MRT Alternates for Destinations outside the MRT Island ๐ŸŽ€

a natural concern with new functionality is how it can be useful when it isn't deployed across an entire IGP area ๐Ÿ’… in the case of MRT FRR, where it provides alternates when appropriate LFAs aren't available, there are also deployment scenarios where it may make sense to only enable some routers in an area with MRT FRR โœจ a simple example would be a ring of six or more routers that's connected via two routers to the rest of the area ๐Ÿฆ‹

destinations inside the local island can obviously use MRT alternates ๐Ÿ’– destinations outside the local island can be treated like a multihomed prefix, so either endpoint selection or Named Proxy-Nodes can be used ๐Ÿงš named proxy-nodes MUST be supported when LDP forwarding is supported and a label-binding for the destination is sent to an IBR ๐Ÿ˜ญ

naturally, there are more complicated options to improve coverage, such as connecting multiple MRT Islands across tunnels, but the need for that extra complexity has not been justified ๐Ÿ™ˆ


12. Network Convergence and Preparing for the Next Failure ๐Ÿ”ฅ

after a failure, MRT detours make sure packets reach their intended destination while the IGP has not reconverged onto the new topology ๐Ÿ‘‘ as link-state updates reach the routers, the IGP process calculates the new shortest paths ๐Ÿซถ two things need attention here: micro-loop prevention and MRT recalculation ๐Ÿ’€

12.1. Micro-loop Prevention and MRTs โœจ

okay so a micro-loop is a transient packet-forwarding loop between two or more routers that can pop up while IGP forwarding state is converging ๐ŸŒ€ [RFC5715] goes through several techniques for preventing micro-loops, and this section is about how MRT-FRR vibes with two of them from that doc: Nearside and Farside Tunneling ๐Ÿ’–

Nearside Tunneling goes like this: a router (PLR) right next to a failure does the local repair and tells the remote routers about the failure ๐Ÿ“ฃ The remote routers start by tunneling affected traffic to the nearest PLR, using tunnels that the failure didn't touch. Once normal shortest path forwarding has converged, the remote routers send the traffic back to shortest path forwarding. So why is MRT-FRR relevant here? ๐Ÿ‘€ Well, tunneling traffic to the PLRs and then waiting long enough for IGP convergence means traffic will usually stick with the local repair at the PLR for longer than it would without Nearside Tunneling. MRT-FRR gives 100% coverage for single link and node failures, so it's giving "perfect backup option" when Nearside Tunneling is in play ๐Ÿซถ

MRT-FRR is also relevant to the Farside Tunneling micro-loop prevention technique ๐Ÿฆ‹ With Farside Tunneling, remote routers tunnel traffic affected by a failure to a node that's downstream of the failure with respect to the traffic's destination. That node is on the farside of the failure from the point of view of the node that started the tunnel. Quick note: the Farside Tunneling discussion in [RFC5715] focuses on the case where the farside node is immediately adjacent to a failed link or node. But the farside node can be any node downstream of the failure with respect to the destination, including the destination itself ๐Ÿคฏ The tunneling mechanism used to reach the farside node must be unaffected by the failure.

The alternate forwarding paths created by MRT-FRR can be used to forward traffic from the remote routers upstream of the failure all the way to the destination ๐Ÿ›ฃ๏ธ When a failure happens, either the MRT-Red or the MRT-Blue path from the remote upstream router to the destination is guaranteed to avoid a link failure or inferred node failure. The MRT forwarding paths are also guaranteed not to be subject to micro-loops, because they're locked to the topology from before the failure ๐Ÿ”’ no cap, that's a whole main character move ๐Ÿ‘‘

We note that the computations in [RFC7811] cover the case of a PLR adjacent to a failure working out which choice, MRT-Red or MRT-Blue, will avoid the failed link or node ๐Ÿ’… For an arbitrary remote upstream router to decide whether to choose MRT-Red or MRT-Blue for a given destination and failure, more computation may be required ๐Ÿง 


12.2. MRT Recalculation for the Default MRT Profile ๐Ÿ”„

This section describes how the MRT recalculation SHOULD be performed for the Default MRT Profile ๐Ÿ’œ It's meant to support FRR applications. Other approaches are possible, but they aren't specified in this document, so don't go looking for them here ๐Ÿ™ˆ

When a failure event happens, the PLRs put traffic onto the MRT topologies ๐Ÿšฆ After that, each router recomputes its SPT and moves traffic over to it. Only after all the PLRs have switched to their SPTs and the traffic has drained from the MRT topologies should each router install the recomputed MRTs into the FIBs ๐ŸŒŠ Patience is a whole vibe here, bestie.

So at each router, the sequence goes like this:

  1. Receive failure notification
  2. Recompute SPT.
  3. Install the new SPT in the FIB.
  4. If the network was stable before the failure occurred, wait a configured (or advertised) period for all routers to be using their SPTs and traffic to drain from the MRTs.
  5. Recompute MRTs.
  6. Install new MRTs in the FIB.

While the recomputed MRTs aren't installed in the FIB yet, protection coverage is lowered ๐Ÿ“‰ So it's important to recalculate the MRTs and install them quickly โšก

New protocol extensions for advertising the time needed to recompute shortest path routes and install them in the FIB will be defined elsewhere ๐Ÿงš


13. Operational Considerations ๐Ÿ› ๏ธ

Here are some aspects of MRT-FRR that are useful to think about when you're deploying the tech in different operational environments and network topologies ๐ŸŒธ

13.1. Verifying Forwarding on MRT Paths ๐Ÿ”

The forwarding paths created by MRT-FRR aren't used by normal (non-FRR) traffic ๐Ÿ™…โ€โ™€๏ธ They only carry FRR traffic for a short period after a failure has been detected. It is RECOMMENDED that an operator proactively monitor the MRT forwarding paths so they can be certain the paths will be able to carry FRR traffic when it's needed ๐Ÿซก That's why an implementation SHOULD give an operator the ability to test MRT paths with Operations, Administration, and Maintenance (OAM) traffic ๐Ÿงช For example, when MRT paths are realized using LDP labels distributed for topology-scoped FECs, an implementation can use the MPLS ping and traceroute defined in [RFC4379] and extended in [RFC7307] for topology-scoped FECs โœ…

13.2. Traffic Capacity on Backup Paths ๐Ÿš—๐Ÿ’จ

During a fast-reroute event started by a PLR in response to a network failure, the flow of traffic won't generally look the same as it will after the IGP forwarding state has converged with the failure taken into account ๐Ÿ˜ฌ So even if a network has been engineered with enough capacity on the right links to carry all traffic after the IGP converges, it may still not have enough capacity on those links to carry the traffic during a fast-reroute event. That can mean more traffic loss during the fast-reroute event than you'd otherwise expect ๐Ÿ’€

There are two somewhat distinct aspects to this. The first is that the path from the PLR to the destination during the fast-reroute event may be different from the path after the IGP converges. In that case, any traffic for the destination that reaches the PLR during the fast-reroute event will follow a different path from the PLR to the destination than it will after IGP convergence ๐Ÿ—บ๏ธ

The second aspect is that the amount of traffic arriving at the PLR for affected destinations during the fast-reroute event may be bigger than the amount arriving at the PLR for those destinations after IGP convergence ๐Ÿ“ˆ Right after a failure, any non-PLR routers that were sending traffic to the PLR before the failure keep sending traffic to the PLR, and that traffic gets carried over the backup paths from the PLR to the destinations. After IGP convergence, though, upstream non-PLR routers may direct some traffic away from the PLR ๐Ÿ”€

To reduce or eliminate the potential for transient traffic loss due to inadequate capacity during fast-reroute events, an operator can model how much traffic takes different paths during a fast-reroute event ๐Ÿ“Š If it turns out there isn't enough capacity to support a given fast-reroute event, the operator can fix it either by adding capacity on certain links or by modifying the backup paths themselves ๐Ÿ”ง

The MRT Lowpoint algorithm produces a pair of diverse paths to each destination ๐Ÿ’ž These paths are generated by following the directed links on a common GADAG. The decision process for constructing the GADAG in the MRT Lowpoint algorithm takes individual IGP link metrics into account. At any given node, links are explored in order from lowest IGP metric to highest IGP metric. The process for constructing the MRT-Red and Blue trees also uses SPF traversals of the GADAG. So the IGP link metric values do affect the computed backup paths ๐Ÿ‘€ However, adjusting IGP link metrics is not a generally applicable tool for modifying the MRT backup paths. Getting a desired set of MRT backup paths by adjusting IGP metrics, while also keeping the desired flow of traffic along the shortest paths, is not possible in general ๐Ÿ™ƒ

MRT-FRR lets an operator exclude a link from the MRT Island, and thus from the GADAG, by advertising it as MRT-Ineligible ๐Ÿšซ Such a link won't be used on the MRT forwarding path for any destination. Advertising links as MRT-Ineligible is the main tool MRT-FRR gives you for keeping backup traffic off lower bandwidth links during fast-reroute events ๐Ÿข

Note that all of the backup paths produced by the MRT Lowpoint algorithm are closely tied to the common GADAG computed as part of that algorithm. So it's generally not possible to modify a subset of paths without affecting other paths. This rules out more fine-grained modification of individual backup paths when only paths computed by the MRT Lowpoint algorithm are used ๐Ÿงต

However, it may be desirable to let an operator use MRT-FRR alternates together with alternates provided by other FRR technologies ๐Ÿค A policy-based alternate selection process can let an operator pick the best alternate from those provided by MRT and other FRR technologies. As a concrete example, it may be desirable to have a policy where a downstream LFA (if one exists for a given failure mode and destination) is preferred over a given MRT alternate. This combo gives the operator the ability to affect where traffic flows during a fast-reroute event, while still producing backup paths that use no additional labels for LDP traffic and won't loop under multiple failures ๐ŸŽ€ This and other choices of alternate selection policy can be evaluated in terms of their effect on fast-reroute traffic flow and available capacity, plus other deployment considerations ๐Ÿ“‹

Note that future documents may define MRT profiles in addition to the default profile defined here ๐Ÿ”ฎ Different MRT profiles will generally produce alternate paths with different properties. An implementation may let an operator use different MRT profiles instead of, or in addition to, the default profile ๐ŸŒˆ

13.3. MRT IP Tunnel Loopback Address Management ๐Ÿ“

As described in Section 6.1.2, if an implementation uses IP tunneling as the mechanism to realize MRT forwarding paths, each node must advertise an MRT-Red and an MRT-Blue loopback address ๐Ÿชž These IP addresses must be unique within the routing domain, to the extent that they don't overlap with each other or with any other routing table entries. It's expected that operators will use their existing tools and processes for managing infrastructure IP addresses to manage these extra MRT-related loopback addresses ๐Ÿซถ

13.4. MRT-FRR in a Network with Degraded Connectivity ๐Ÿ’–

Okay bestie, ideally your routers running MRT-FRR start out in a 2-connected topology โœจ so MRT-FRR can find completely diverse paths to every destination. But real networks drift away from that ideal all the time, for lots of reasons like network failures and planned maintenance ๐Ÿ› ๏ธ

MRT-FRR is built to keep working even when connectivity is degraded ๐Ÿ’… When a network has cut-vertices or cut-links that split it into different 2-connected blocks, MRT-FRR still gives completely diverse paths for destinations in the same block as the PLR. For a destination in a different block from the PLR, the redundant paths MRT-FRR makes are link and node diverse within each block, and the paths only share links and nodes that are cut-links or cut-vertices in the topology. It's giving "the best you can get" energy ๐Ÿ™Œ

If a network gets partitioned so one set of routers has no connectivity to another set, MRT-FRR just runs independently in each set of connected routers, giving redundant paths to destinations in the same set as a given PLR. Independent little islands, no drama ๐Ÿ๏ธ


13.5. Partial Deployment of MRT-FRR in a Network ๐Ÿงš

Operators can choose to deploy MRT-FRR on only a subset of routers in an IGP area, and MRT-FRR is literally designed for that. Only routers that advertise support for a given MRT profile get included in a given MRT Island. For a PLR inside the MRT Island, MRT-FRR creates redundant forwarding paths to all destinations within the MRT Island, using maximally redundant trees all the way to those destinations.

For destinations outside the MRT Island, MRT-FRR creates paths that use the forwarding state MRT-FRR made inside the MRT Island, plus shortest path forwarding state outside it. The paths MRT-FRR creates to non-Island destinations are guaranteed to be diverse within the MRT Island (if topologically possible). However, the part of those paths outside the MRT Island may not be diverse ๐Ÿ‘€


14. IANA Considerations ๐Ÿ“‹

IANA has created the "MRT Profile Identifier Registry" ๐ŸŽ€ The range is 0 to 255. The Default MRT Profile defined in this document has value 0. Values 1-200 are allocated by Standards Action. Values 201-220 are for Experimental Use. Values 221-254 are for Private Use. Value 255 is reserved for future registry extension. (The allocation and use policies are described in [RFC5226].)

The initial registry looks like this:

   Value    Description                               Reference
   -------  ----------------------------------------  ------------
   0        Default MRT Profile                       RFC 7812
   1-200    Unassigned
   201-220  Experimental Use
   221-254  Private Use
   255      Reserved (for future registry extension)

The "MRT Profile Identifier Registry" is a new registry in the IANA Matrix ๐Ÿฆ‹ Following existing conventions, http://www.iana.org/protocols displays a new header: "Maximally Redundant Tree (MRT) Parameters". Under that header there's an entry for "MRT Profile Identifier Registry", which links to the registry itself at http://www.iana.org/assignments/mrt-parameters ๐Ÿ”—


15. Security Considerations ๐Ÿ”๐Ÿ’€

Okay, this part is serious, so pay attention ๐Ÿ™ˆ In general, MRT forwarding paths do not follow shortest paths. The transit forwarding state for the MRT paths is created during normal operations, before a failure ever happens. That means a malicious packet with an appropriate header, injected into the network from a compromised location, would be forwarded to a destination along a non-shortest path. When this technology is deployed, a network security design should not rely on assumptions that potentially malicious traffic only follows shortest paths. Not a vibe to build on ๐Ÿšซ

It should be noted that creating non-shortest forwarding paths is not unique to MRT, so this isn't a MRT-only problem ๐Ÿคทโ€โ™€๏ธ

MRT-FRR requires that routers advertise information used to form MRT backup paths. This document doesn't specify the protocol extensions used to advertise that information, but we still need to talk about the security considerations around the information itself. Injecting false MRT-related information could be used to direct some MRT backup paths over compromised transmission links. Combine that with the ability to generate network failures, and an attacker could send traffic over compromised transmission links during a fast-reroute event ๐Ÿ˜ญ To prevent this potential exploit, a receiving router needs to be able to authenticate MRT-related information that claims to have been advertised by another router. Authentication is non-negotiable, periodt ๐Ÿ”ฅ


16. References ๐Ÿ“š

16.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <http://www.rfc-editor.org/info/rfc2119>.

[RFC5226]  Narten, T. and H. Alvestrand, "Guidelines for Writing an
           IANA Considerations Section in RFCs", BCP 26, RFC 5226,
           DOI 10.17487/RFC5226, May 2008,
           <http://www.rfc-editor.org/info/rfc5226>.

[RFC7307]  Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D.
           King, "LDP Extensions for Multi-Topology", RFC 7307,
           DOI 10.17487/RFC7307, July 2014,
           <http://www.rfc-editor.org/info/rfc7307>.

[RFC7811]  Enyedi, G., Ed., Csaszar, A., Atlas, A., Ed., Bowers, C.,
           and A. Gopalan, "An Algorithm for Computing IP/LDP Fast
           Reroute Using Maximally Redundant Trees (MRT-FRR)",
           RFC 7811, DOI 10.17487/RFC7811, June 2016,
           <http://www.rfc-editor.org/info/rfc7811>.

16.2. Informative References

[EnyediThesis]
           Enyedi, G., "Novel Algorithms for IP Fast Reroute",
           Department of Telecommunications and Media Informatics,
           Budapest University of Technology and Economics Ph.D.
           Thesis, February 2011,
           <https://repozitorium.omikk.bme.hu/bitstream/
           handle/10890/1040/ertekezes.pdf>.

[LDP-MRT]  Atlas, A., Tiruveedhula, K., Bowers, C., Tantsura, J., and
           IJ. Wijnands, "LDP Extensions to Support Maximally
           Redundant Trees", Work in Progress, draft-ietf-mpls-ldp-
           mrt-03, May 2016.

[MRT-ARCH]
           Atlas, A., Kebler, R., Wijnands, IJ., Csaszar, A., and G.
           Enyedi, "An Architecture for Multicast Protection Using
           Maximally Redundant Trees", Work in Progress, draft-atlas-
           rtgwg-mrt-mc-arch-02, July 2013.

[RFC2328]  Moy, J., "OSPF Version 2", STD 54, RFC 2328,
           DOI 10.17487/RFC2328, April 1998,
           <http://www.rfc-editor.org/info/rfc2328>.

[RFC4379]  Kompella, K. and G. Swallow, "Detecting Multi-Protocol
           Label Switched (MPLS) Data Plane Failures", RFC 4379,
           DOI 10.17487/RFC4379, February 2006,
           <http://www.rfc-editor.org/info/rfc4379>.

[RFC5286]  Atlas, A., Ed. and A. Zinin, Ed., "Basic Specification for
           IP Fast Reroute: Loop-Free Alternates", RFC 5286,
           DOI 10.17487/RFC5286, September 2008,
           <http://www.rfc-editor.org/info/rfc5286>.

[RFC5331]  Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream
           Label Assignment and Context-Specific Label Space",
           RFC 5331, DOI 10.17487/RFC5331, August 2008,
           <http://www.rfc-editor.org/info/rfc5331>.

[RFC5340]  Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF
           for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008,
           <http://www.rfc-editor.org/info/rfc5340>.

[RFC5443]  Jork, M., Atlas, A., and L. Fang, "LDP IGP
           Synchronization", RFC 5443, DOI 10.17487/RFC5443, March
           2009, <http://www.rfc-editor.org/info/rfc5443>.

[RFC5714]  Shand, M. and S. Bryant, "IP Fast Reroute Framework",
           RFC 5714, DOI 10.17487/RFC5714, January 2010,
           <http://www.rfc-editor.org/info/rfc5714>.

[RFC5715]  Shand, M. and S. Bryant, "A Framework for Loop-Free
           Convergence", RFC 5715, DOI 10.17487/RFC5715, January
           2010, <http://www.rfc-editor.org/info/rfc5715>.

[RFC6976]  Shand, M., Bryant, S., Previdi, S., Filsfils, C.,
           Francois, P., and O. Bonaventure, "Framework for Loop-Free
           Convergence Using the Ordered Forwarding Information Base
           (oFIB) Approach", RFC 6976, DOI 10.17487/RFC6976, July
           2013, <http://www.rfc-editor.org/info/rfc6976>.

[RFC6981]  Bryant, S., Previdi, S., and M. Shand, "A Framework for IP
           and MPLS Fast Reroute Using Not-Via Addresses", RFC 6981,
           DOI 10.17487/RFC6981, August 2013,
           <http://www.rfc-editor.org/info/rfc6981>.

[RFC6987]  Retana, A., Nguyen, L., Zinin, A., White, R., and D.
           McPherson, "OSPF Stub Router Advertisement", RFC 6987,
           DOI 10.17487/RFC6987, September 2013,
           <http://www.rfc-editor.org/info/rfc6987>.

[RFC7490]  Bryant, S., Filsfils, C., Previdi, S., Shand, M., and N.
           So, "Remote Loop-Free Alternate (LFA) Fast Reroute (FRR)",
           RFC 7490, DOI 10.17487/RFC7490, April 2015,
           <http://www.rfc-editor.org/info/rfc7490>.

Appendix A. Inter-level Forwarding Behavior for IS-IS โœจ

okay so bestie, this appendix is about IS-IS, which has this extra layer of "levels" on top of areas ๐ŸŒธ Here we're naming three kinds of interface: a Level-1-only interface (it's only formed a Level-1 adjacency), a Level-2-only interface (only a Level-2 adjacency), and a Level-1-and-Level-2 interface (both ๐Ÿ’…). Quick side note, IS-IS also has areas, and every router gets one or more area identifiers. For a Level-1 adjacency to form between two routers, at least one area identifier has to match. Level-2 adjacencies don't need any area identifiers to match ๐Ÿงš The behaviour below never mentions area identifiers directly, but they still affect it indirectly, because they decide whether Level-1 adjacencies form at all ๐Ÿฆ‹

So here's the main idea. Say a packet is headed for Z and it's riding MRT-Red or MRT-Blue ๐ŸŽ€ Where it should go next depends on which interface it came in on and where the best route to Z was learned from.

First up, a packet for Z on MRT-Red or MRT-Blue that arrives on a Level-1-only interface. If the best shortest path route to Z came from a Level-1 advertisement, the packet should keep going on MRT-Red or MRT-Blue. But if the best route came from a Level-2 advertisement, the packet should get pulled off MRT-Red or MRT-Blue and sent on the shortest-path default forwarding topology ๐Ÿ’–

Next, a packet for Z on MRT-Red or MRT-Blue arriving on a Level-2-only interface. If the best route to Z came from a Level-2 advertisement, it stays on MRT-Red or MRT-Blue โœจ If the best route came from a Level-1 advertisement, it gets removed from MRT-Red or MRT-Blue and forwarded on the shortest-path default forwarding topology ๐ŸŒˆ

Last one, a packet for Z on MRT-Red or MRT-Blue arriving on a Level-1-and-Level-2 interface. This packet should keep going on MRT-Red or MRT-Blue, no matter which level the route was learned from ๐Ÿ‘‘

Now, an implementation is allowed to make this easier. Instead of working out where the route was learned from, it can look at the interface of the next hop for the route to Z. If that next hop points out a Level-1-only interface, the route came from a Level-1 advertisement. If it points out a Level-2-only interface, it came from a Level-2 advertisement. But a next hop pointing out a Level-1-and-Level-2 interface doesn't tell you enough to figure out the source ๐Ÿ™ˆ So with this shortcut, the implementation has to keep forwarding on MRT-Red or MRT-Blue whenever the next hop is on a Level-1-and-Level-2 interface. That means a packet going from Level-1 to Level-2 (or the other way round) that crosses a Level-1-and-Level-2 interface along the way will just stay on MRT-Red or MRT-Blue ๐Ÿฆ‹

Is this always the most optimal thing? Nope, not always ๐Ÿ’€ But it doesn't cause interoperability problems either. The only cost is that the packet stays on an MRT backup path longer than it needs to, and it still gets where it's going ๐Ÿซถ


Appendix B. General Issues with Area Abstraction ๐ŸŒธ

okay so this appendix is about a problem that shows up when a prefix is multihomed across two different areas ๐Ÿ˜ญ Here's the thing: protecting it can get really impractical unless you add the extra complexity of explicit tunneling. And honestly, LFA and Remote-LFA run into this same problem too ๐Ÿ’…

Look at Figure 4 below, it's giving a whole vibe ๐Ÿงš

          50
        |----[ASBR Y]---[B]---[ABR 2]---[C]      Backbone Area 0:
        |                                |           ABR 1, ABR 2, C, D
        |                                |
        |                                |       Area 20:  A, ASBR X
        |                                |
        p ---[ASBR X]---[A]---[ABR 1]---[D]      Area 10: B, ASBR Y
           5                                  p is a Type 1 AS-external

Figure 4: AS External Prefixes in Different Areas โœจ

Now picture a richer topology that isn't drawn here ๐ŸŽ€ The same prefix gets announced by ASBR X and ASBR Y, and those two live in different non-backbone areas. Say the link from A to ASBR X fails. An MRT alternate could send the packet to ABR 1, and ABR 1 could send it on to D. The catch is that D would then see its shortest route going right back through ABR 1 into Area 20 ๐Ÿ˜ฌ That happens because the routers in one area, ABR included, don't know yet about a failure in a different area ๐Ÿ’œ

So the only real way to get the packet from A to ASBR Y is to explicitly tunnel it there ๐Ÿฆ‹ If the traffic is unlabeled, or the right MPLS labels are known, then explicit tunneling MAY be used, as long as the shortest path of the tunnel avoids the failure point ๐ŸŒˆ In that case, A has to work out that it should use an explicit tunnel instead of an MRT alternate ๐Ÿ’–


Acknowledgements ๐Ÿซถ

The authors would like to thank Mike Shand for his valuable review and contributions ๐Ÿ’œ

The authors would also like to thank Joel Halpern, Hannes Gredler, Ted Qian, Kishore Tiruveedhula, Shraddha Hegde, Santosh Esale, Nitin Bahadur, Harish Sitaraman, Raveendra Torvi, Anil Kumar SN, Bruno Decraene, Eric Wu, Janos Farkas, Rob Shakir, Stewart Bryant, and Alvaro Retana for their suggestions and review ๐ŸŒธ


Contributors ๐Ÿ‘‘

Robert Kebler
Juniper Networks
10 Technology Park Drive
Westford, MA  01886
United States
Email: rkebler@juniper.net
Andras Csaszar
Ericsson
Konyves Kalman krt 11
Budapest  1097
Hungary
Email: Andras.Csaszar@ericsson.com
Jeff Tantsura
Ericsson
300 Holger Way
San Jose, CA  95134
United States
Email: jeff.tantsura@ericsson.com
Russ White
VCE
Email: russw@riw.us

Authors' Addresses ๐Ÿงš

Alia Atlas
Juniper Networks
10 Technology Park Drive
Westford, MA  01886
United States

Email: akatlas@juniper.net
Chris Bowers
Juniper Networks
1194 N. Mathilda Ave.
Sunnyvale, CA  94089
United States

Email: cbowers@juniper.net
Gabor Sandor Enyedi
Ericsson
Konyves Kalman krt 11.
Budapest  1097
Hungary

Email: Gabor.Sandor.Enyedi@ericsson.com
๐Ÿ“ฆ where this page comes from