One document matched: draft-kompella-mpls-rmr-01.xml
<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-kompella-mpls-rmr-01" ipr="trust200902">
<front>
<title>Resilient MPLS Rings</title>
<author initials="K." surname="Kompella" fullname="Kireeti Kompella">
<organization>Juniper Networks, Inc.</organization>
<address>
<postal>
<street>1194 N. Mathilda Avenue</street>
<city>Sunnyvale</city>
<region>CA</region>
<code>94089</code>
<country>USA</country>
</postal>
<email>kireeti.kompella@gmail.com</email>
</address>
</author>
<author fullname="Luis M. Contreras" initials="L.M." surname="Contreras">
<organization>Telefonica I+D</organization>
<address>
<postal>
<street>Ronda de la Comunicacion</street>
<street>Sur-3 building, 3rd floor</street>
<city>Madrid</city>
<code>28050</code>
<country>Spain</country>
</postal>
<email>luismiguel.contrerasmurillo@telefonica.com</email>
<uri>http://people.tid.es/LuisM.Contreras/</uri>
</address>
</author>
<date year="2015"/>
<area>Routing</area>
<workgroup>MPLS WG</workgroup>
<keyword>MPLS</keyword>
<keyword>ring</keyword>
<keyword>transport</keyword>
<abstract>
<t>
This document describes the use of the MPLS control and data
planes on ring topologies. It describes the special nature of
rings, and proceeds to show how MPLS can be effectively used in
such topologies. It describes how MPLS rings are configured,
auto-discovered and signaled, as well as how the data plane
works. Companion documents describe the details of discovery
and signaling for specific protocols.
</t>
</abstract>
<note title="Requirements Language">
<t>
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 <xref target="RFC2119"/>.
</t>
</note>
</front>
<middle>
<section title="Introduction" anchor='intro'>
<t>
Rings are a very common topology in transport networks. A ring
is the simplest topology offering link and node resilience.
Rings are nearly ubiquitous in access and aggregation networks.
As MPLS increases its presence in such networks, and takes on a
greater role in transport, it is imperative that MPLS handles
rings well; this is not the case today.
</t>
<t>
This document describes the special nature of rings, and the
special needs of MPLS on rings. It then shows how these needs
can be met in several ways, some of which involve extensions to
protocols such as IS-IS <xref target="RFC5305"/>, OSPF<xref
target="RFC3630"/>, RSVP-TE <xref target="RFC3209"/> and LDP
<xref target="RFC5036"/>.
</t>
<section title='Definitions'>
<t>
A (directed) graph G = (V, E) consists of a set of vertices
(or nodes) V and a set of edges (or links) E. An edge is an
ordered pair of nodes (a, b), where a and b are in V. (In
this document, the terms node and link will be used instead of
vertex and edge.)
</t>
<t>
A ring is a subgraph of G. A ring consists of a subset of n
nodes {R_i, 0 ≤ i < n} of V. The directed edges {(R_i,
R_i+1) and (R_i+1, R_i), 0 ≤ i < n-1} must be a subset
of E (note that index arithmetic is done modulo n). We define
the direction from node R_i to R_i+1 as "clockwise" (CW) and
the reverse direction as "anticlockwise" (AC). As there may
be several rings in a graph, we number each ring with a
distinct ring ID RID.
<figure anchor='Fig1' title="Ring with 8 nodes">
<artwork align='center'>
R0 . . . R1
. .
R7 R2
Anti- | . Ring . |
Clockwise | . . | Clockwise
v . RID = 17 . v
R6 R3
. .
R5 . . . R4
</artwork>
</figure>
</t>
<t>
The following terminology is used for ring LSPs:
<list style="hanging">
<t hangText="Ring ID (RID):">
A non-zero number that identifies a ring; this is unique
in some scope of a Service Provider's network. An RID of
0 means the node is a "promiscuous" node.
</t>
<t hangText="Node index:">
A logical numbering of nodes in a ring, from zero upto one
less than the ring size. Used purely for exposition in
this document.
</t>
<t hangText="Ring master:">
The ring master initiates the ring identification process.
Mastership is indicated in the IGP by a two-bit field.
</t>
<t hangText='Ring neighbors:'>
Nodes whose indices differ by one (modulo ring size).
</t>
<t hangText='Ring links:'>
Links that connnect ring neighbors.
</t>
<t hangText='Bypass links:'>
Links that connnect non-neighboring ring nodes.
</t>
<t hangText='Ring direction:'>
A two-bit field in the IGP indicating the direction of a
link. The choices are:
<list style='hanging'>
<t hangText='UN: 00'> undefined link </t>
<t hangText='CW: 01'> clockwise ring link </t>
<t hangText='AC: 10'> anticlockwise ring link </t>
<t hangText='BY: 11'> bypass link </t>
</list>
</t>
<t hangText='Ring Identification:'>
The process of discovering ring nodes, ring links, link
directions, and bypass links.
</t>
</list>
</t>
<t>
The following notation is used for ring LSPs:
<list style="hanging">
<t hangText="R_k:">
A ring node with index k. R_k has AC neighbor R_(k-1) and
CW neighbor R_(k+1).
</t>
<t hangText="RL_k:">
A (unicast) Ring LSP anchored on node R_k.
</t>
<t hangText="CL_jk (AL_jk):">
A label allocated by R_j for RL_k in the CW (AC) direction.
</t>
<t hangText="P_jk (Q_jk):">
A Path (Resv) message sent by R_j for RL_k.
</t>
</list>
</t>
</section>
</section>
<section title="Motivation">
<t>
A ring is the simplest topology that offers resilience. This is
perhaps the main reason to lay out fiber in a ring. Thus,
effective mechanisms for fast failover on rings are needed.
Furthermore, there are large numbers of rings. Thus,
configuration of rings needs to be as simple as possible.
Finally, bandwidth management on access rings is very important,
as bandwidth is generally quite constrained here.
</t>
<t>
The goals of this document are to present mechanisms for
improved MPLS-based resilience in ring networks (using ideas
that are reminiscent of Bidirectional Line Switched Rings), for
automatic bring-up of LSPs, better bandwidth management and for
auto-hierarchy. These goals can be achieved using extensions to
existing IGP and MPLS signaling protocols, using central
provisioning, or in other ways.
</t>
</section>
<section title="Theory of Operation">
<t>
Say a ring has ring ID RID. The ring is provisioned by choosing
one or more ring masters for the ring and assigning them the
RID. Other nodes in the ring may also be assigned this RID, or
may be configured as "promiscuous". Ring discovery then kicks
in. When each ring node knows its CW and AC ring neighbors and
its ring links, and all bypass links have been identified, ring
identification is complete.
</t>
<t>
Once ring identification is complete, each node signals one or
more ring LSPs RL_i. RL_i, anchored on node R_i, consists of
two counter-rotating unicast LSPs that start and end at R_i. A
ring LSP is "multipoint": any node R_j can use RL_i to send
traffic to R_i; this can be in either the CW or AC directions,
or both (i.e., load balanced). Both of these counter-rotating
LSPs are "active"; the choice of direction to send traffic to
R_i is determined by policy at the node where traffic is
injected into the ring. The default is to send traffic along
the shortest path. Bidirectional connectivity between nodes R_i
and R_j is achieved by using two different ring LSPs: R_i uses
RL_j to reach R_j, and R_j uses RL_i to reach R_i.
</t>
<!--
<t>
R_i also signals a multicast ring LSP ML_i. ML_i has ingress
R_i and consists of counter-rotating multicast LSPs that use the
"drop-and-continue" paradigm. Each node R_k "drops" the traffic
to its associated non-ring nodes that are interested in the
multicast traffic from R_i, and also "continues" the traffic to
the next node in the ring (R_(i+1) in the CW direction).
</t>
-->
<section title="Provisioning">
<t>
The goal here is to provision rings with the absolute minimum
configuration. The exposition below aims to achieve that
using auto-discovery via a link-state IGP (see <xref
target='autodisc'/>). Of course, auto-discovery can be
overriden by configuration. For example, a link that would
otherwise be classified by auto-discovery as a ring link might
be configured not to be used for ring LSPs.
</t>
</section>
<section title='Ring Nodes'>
<t>
Ring nodes have a loopback address, and run a link-state IGP
and an MPLS signaling protocol. To provision a node as a ring
node for ring RID, the node is simply assigned that RID. A
node may be part of several rings, and thus may be assigned
several ring IDs.
</t>
<t>
To simplify ring provisioning even further, a node N may be
made "promiscuous" by being assigned an RID of 0. A
promiscuous node listens to RIDs in its IGP neighbors'
link-state updates. If N hears a non-zero RID from a
neighbor, it joins that ring by taking on that RID. However,
if N hears more than one non-zero RID from its neighbors, N
remains in promiscuous mode. In many situations, the use of
promiscuous mode means that only one or two nodes in the ring
needs to be provisioned; everything else is auto-discovered.
</t>
<t>
A ring node indicates in its IGP updates the ring LSP
signaling protocols it supports. This can be LDP and/or
RSVP-TE. Ideally, each node should support both.
</t>
</section>
<section title='Ring Links and Directions'>
<t>
Ring links must be MPLS-capable. They are by default
unnumbered, point-to-point (from the IGP point of view) and
"auto-bundled". The last attribute means that parallel links
between ring neighbors are considered as a single link,
without the need for explicit configuration for bundling (such
as a Link Aggregation Group). Note that each component may be
advertised separately in the IGP; however, signaling messages
and labels across one component link apply to all components.
Parallel links between a pair of ring nodes is often the
result of having multiple lambdas or fibers between those
nodes.
</t>
<t>
A ring link is not provisioned as belonging to the ring; it is
discovered to belong to ring RID if both its adjacent nodes
belong to RID. A ring link's direction (CW or AC) is also
discovered; this process is initiated by the ring's ring
master. Note that the above two attributes can be overridden
by provisioning if needed; it is then up to the provisioning
system to maintain consistency across the ring.
</t>
<section title='Bypass Links'>
<t>
Bypass links are discovered once ring nodes, ring links and
directions have been established. As defined earlier,
bypass links are links joining non-neighboring ring nodes;
often, this may be the result of optically bypassing ring
nodes. The use of bypass links will be described in a
future version of this document.
</t>
<!--
<t>
Bypass links are both clockwise and anticlockwise. Thus,
in <xref target='Fig2'/>, R_7 can reach R_3 in the CW direction
via R_0 and R_2, treating (R_0, R_2) as CW.
</t>
-->
</section>
</section>
<section title='Ring LSPs'>
<t>
Ring LSPs are not provisioned. Once a ring node R_i knows its
RID, its ring links and directions, it kicks off ring LSP
signaling automatically. R_i allocates CW and AC labels for
each ring LSP RL_k. R_i also initiates the creation of RL_i.
As the signaling propagates around the ring, CW and AC labels
are exchanged. When R_i receives CW and AC labels for RL_k
from its ring neighbors, primary and fast reroute (FRR) paths
for RL_k are installed at R_i. More details are given in
<xref target='sig'/>.
</t>
<t>
For RSVP-TE LSPs, bandwidths may be signaled in both
directions. However, these are not provisioned either;
rather, one does "reverse call admission control". When a
service needs to use an LSP, the ring node where the traffic
enters the ring attempts to increase the bandwidth on the LSP
to the egress. If successful, the service is admitted to the
ring.
</t>
</section>
<section title="Installing Primary LFIB Entries">
<t>
In setting up RL_k, a node R_j sends out two labels: CL_jk to
R_j-1 and AL_jk to R_j+1. R_j also receives two labels:
CL_j+1,k from R_j+1, and AL_j-1,k from R_j-1. R_j can now set
up the forwarding entries for RL_k. In the CW direction, R_j
swaps incoming label CL_jk with CL_j+1,k with next hop R_j+1;
these allow R_j to act as LSR for RL_k. R_j also installs an
LFIB entry to push CL_j+1,k with next hop R_j+1 to act as
ingress for RL_k. Similarly, in the AC direction, R_j swaps
incoming label AL_jk with AL_j-1,k with next hop R_j-1 (as
LSR), and an entry to push AL_j-1,k with next hop R_j-1 (as
ingress).
</t>
<t>
Clearly, R_k does not act as ingress for its own LSPs.
However, if these LSPs use UHP, then R_k installs LFIB entries
to pop CL_k,k for packets received from R_k-1 and to pop
AL_k,k for packets received from R_k+1.
</t>
</section>
<section title="Installing FRR LFIB Entries">
<t>
At the same time that R_j sets up its primary CW and AC LFIB
entries, it can also set up the protection forwarding entries
for RL_k. In the CW direction, R_j sets up an FRR LFIB entry
to swap incoming label CL_jk with AL_j-1,k with next hop
R_j-1. In the AC direction, R_j sets up an FRR LFIB entry to
swap incoming label AL_jk with CL_j+1,k with next hop R_j+1.
Again, R_k does not install FRR LFIB entries in this manner.
</t>
</section>
<section title="Protection">
<t>
In this scheme, there are no protection LSPs as such -- no
node or link bypasses, no standby LSPs, no detours, and no
LFA-type protection. Protection is via the "other" direction
around the ring, which is why ring LSPs are in
counter-rotating pairs. Protection works in the same way for
link, node and ring LSP failures.
</t>
<t>
If a node R_j detects a failure from R_j+1 -- either all links
to R_j+1 fail, or R_j+1 itself fails, R_j switches traffic on
all CW ring LSPs to the AC direction using the FRR LFIB
entries. If the failure is specific to a single ring LSP, R_j
switches traffic just for that LSP. In either case, this
switchover can be very fast, as the FRR LFIB entries can be
preprogrammed. Fast detection and fast switchover lead to
minimal traffic loss.
</t>
<t>
R_j then sends an indication to R_j-1 that the CW direction is
not working, so that R_j-1 can similarly switch traffic to the
AC direction. These indications propagate AC until each
traffic source on the ring AC of the failure uses the AC
direction. Thus, within a short period, traffic will be
flowing in the optimal path, given that there is a failure on
the ring. This contrasts with (say) bypass protection, where
until the ingress recomputes a new path, traffic will be
suboptimal.
</t>
<t>
One point to note is that when a ring node, say R_j, fails,
RL_j is clearly unusable. However, the above protection
scheme will cause a traffic loop: R_j-1 detects a failure CW,
and protects by sending CW traffic on RL_j back all the way to
R_j+1, which in turn sends traffic to R_j-1, etc. There are
three proposals to avoid this:
<list style='numbers'>
<t>
Each ring node acting as ingress sends traffic with a TTL
of at most 2*n, where n is the number of nodes in the ring.
</t>
<t>
A ring node sends protected traffic (i.e., traffic
switched from CW to AC or vice versa) with TTL just
large enough to reach the egress.
</t>
<t>
A ring node sends protected traffic with a special purpose
label below the ring LSP label. A protecting node first
checks for the presence of this label; if present, it
means that the traffic is looping and MUST be dropped.
</t>
</list>
It is recommended that (2) be implemented. The other methods
are optional.
</t>
</section>
</section>
<section title='Autodiscovery' anchor='autodisc'>
<section title='Overview'>
<t>
Auto-discovery proceeds in three phases. The first phase is
the announcement phase. The second phase is the mastership
phase. The third phase is the ring identification phase.
<figure anchor='Fig2' title="Ring with non-ring nodes and links">
<artwork align='center'>
S1
/ \
| R0 . . . R1 R0 has MV = 11
| . \ . R1 has MV = 10
R7 \________ R2 All other nodes have MV = 00
Anti- | . . |
clockwise | . Ring . | Clockwise
v . RID = 17 . v
R6 R3
. .
R5 . . . R4
\ /
\ /
An
</artwork>
</figure>
</t>
<t>
In what follows, we refer to a ring Type-Length-Value (TLV).
This is a new TLV that contains an RID and associated flags.
A ring link TLV is a ring TLV that appears as a sub-TLV of a
traffic engineering TLV (TE TLV) of each link that is
identified as a ring link or a bypass link. For IS-IS, the TE
TLV is the extended reachability TLV; for OSPF, it is the Link
TLV in the opaque TE LSA. A ring node TLV is a ring TLV that
appears as a sub-TLV of a "node TLV" once for each ring this
node is participating in. In IS-IS, the node TLV is the
Router ID TLV; in OSPF, it is a new top-level TLV of the TE
LSA. The ring direction field is ignored in ring node TLVs.
<figure title='IS-IS Ring TLV Format'>
<artwork align='center'>
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (TBD) | Length = 8 | Ring ID (4 octets) ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... (RID continued) | Ring Flags (2 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>
<figure title='OSPF Ring TLV Format'>
<artwork align='center'>
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (TBD) | Length = 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ring ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ring Flags (2 octets) | Pad (2 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Pad is set to zero when sending and ignored on receipt.
</artwork>
</figure>
<figure title='Ring Flags Format'>
<artwork align='center'>
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|MV |RD |SP |OP |M| MBZ |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
MV: Mastership Value
RD: Ring Direction
SP: Signaling Protocols (10 = RSVP-TE; 01 = LDP)
OP: OAM Protocols (10 = BFD; 01 = EFM)
M : Elected Master (0 = no, 1 = yes)
</artwork>
</figure>
</t>
</section>
<section title='Ring Announcement Phase'>
<t>
Each node participating in an MPLS ring is assigned an RID; in
the example, RID = 17. A node is also provisioned with a
mastership value. Each node advertises a ring node TLV for
each ring it is participating in, along with the associated
flags. It then starts timer T1.
</t>
<t>
A node in promiscuous mode doesn't advertise any ring node TLVs.
If it hears exactly one non-zero RID from its IGP neighbors, it
joins that ring, and sends one ring node TLV with that RID. If
it hears more than one RID from its IGP neighbors, it doesn't
join any rings, and withdraws any ring node TLVs it may have
advertised.
</t>
<t>
The announcement phase allows a ring node to discover other
ring nodes in the same ring so that a ring master can be
elected and ring links be identified.
</t>
</section>
<section title='Mastership Phase'>
<t>
When timer T1 fires, a node enters the mastership phase. In
this phase, each ring node N starts timer T2 and checks if it
is master. If it is the node with the lowest loopback address
of all nodes with the highest mastership values, N declares
itself master by readvertising its ring node TLV with the M
bit set.
</t>
<t>
When timer T2 fires, each node examines the ring node TLVs
from all other nodes in the ring to identify the ring master.
There should be exaclty one; if not, each node restarts timer
T2 and tries again. The nodes that set their M bit should be
extra careful in advertising their M bit in subsequent tries.
</t>
</section>
<section title='Ring Identification Phase'>
<t>
When there is exactly one ring master M, M enters the Ring
Identification Phase. M indicates that it has successfully
completed this phase by advertising ring link TLVs. This is
the trigger for M's CW neighbor to enter the Ring
Identification Phase. This phase passes CW until all ring
nodes have completed ring identification.
</t>
<t>
In the Ring Identification Phase, a node X that has two or
more IGP neighbors that belong to the ring picks one of them
to be its CW ring neighbor. If X is the ring master, it also
picks a node as its AC ring neighbor. If there are exactly
two such nodes, this step is trivial. If not, X computes a
ring that includes all nodes that have completed the Ring
Identification Phase (as seen by their ring link TLVs) and
further contains the maximal number of nodes that belong to
the ring. Based on that, X picks a CW neighbor and inserts
ring link TLVs with ring direction CW for each link to its CW
neighbor; X also inserts a ring link TLV with direction AC for
each link to its AC neighbor. Then, X determines its bypass
links. These are links connected to ring nodes that are not
ring neighbors. X advertises ring link TLVs for bypass links
by setting the link direction to "bypass link".
</t>
</section>
<section title='Ring Changes'>
<t>
A future version of this document will specify how ring
changes are detected and handled.
</t>
</section>
</section>
<section title='Ring Signaling' anchor='sig'>
<t>
A future version of this document will specify details about
ring LSP signaling.
</t>
</section>
<section title='Ring OAM'>
<t>
Each ring node should advertise in its ring node TLV the OAM
protocols it supports. Each ring node is expected to run a
link-level OAM over each ring and bypass link. This should be
an OAM protocol that both neighbors agree on. The default hello
time is 3.3 millisecond.
</t>
<t>
Each ring node also sends OAM messages over each direction of
its ring LSP. This is a multi-hop OAM to check LSP liveness;
typically, BFD would be used for this. The node chooses the
hello interval; the default is once a second.
</t>
</section>
<section title='Security Considerations' anchor='sec-con'>
<t>
It is not anticipated that either the notion of MPLS rings or
the extensions to various protocols to support them will cause
new security loopholes. As this document is updated, this
section will also be updated.
</t>
</section>
<section title='Acknowledgments'>
<t>
Many thanks to Pierre Bichon whose exemplar of self-organizing
networks and whose urging for ever simpler provisioning led to
the notion of promiscuous nodes.
</t>
</section>
<section anchor="IANA" title="IANA Considerations">
<t>
There are no requests as yet to IANA for this document.
</t>
</section>
</middle>
<back>
<references title='Normative References'>
<?rfc include='reference.RFC.2119'?>
</references>
<references title='Informative References'>
<?rfc include='reference.RFC.3209'?>
<?rfc include='reference.RFC.3630'?>
<?rfc include='reference.RFC.5036'?>
<?rfc include='reference.RFC.5305'?>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-21 12:04:24 |