RFC 3212
Constraint-Based LSP Setup using LDP
RFC 3212: Constraint-Based LSP Setup using LDP ๐
Part 1 of 8 ๐
Okay bestie, this is the RFC for Constraint-Based LSP Setup using LDP ๐ฆ, and it's a Standards Track document from January 2002. The Network Working Group published it. B. Jamoussi (Nortel Networks) is the editor, and the rest of the crew is L. Andersson (Utfors AB), R. Callon (Juniper Networks), R. Dantu (Netrake Corporation), L. Wu (Cisco Systems), P. Doolan (OTB Consulting Corp.), T. Worster, N. Feldman (IBM Corp.), A. Fredette (ANF Consulting), M. Girish (Atoga Systems), E. Gray (Sandburst), J. Heinanen (Song Networks, Inc.), T. Kilty (Newbridge Networks, Inc.), and A. Malis (Vivace Networks). It doesn't obsolete or update anything, since the header doesn't list any. ๐ธ
Status of this Memo
This document specifies an Internet standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements. ๐ For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited. โจ
Copyright Notice
Copyright (C) The Internet Society (2002). All Rights Reserved. ๐ฅ
Abstract
Okay so this doc lays out the mechanisms and TLVs (Type/Length/Value) that support CR-LSPs (constraint-based routed Label Switched Path) using LDP (Label Distribution Protocol). ๐ง
It proposes an end-to-end setup mechanism for a CR-LSP that the ingress LSR (Label Switching Router) starts. It also specifies mechanisms for reserving resources using LDP. It's giving main character energy ๐
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 RFC 2119 [6]. ๐
Table of Contents
1. Introduction....................................................3
2. Constraint-based Routing Overview...............................4
2.1 Strict and Loose Explicit Routes...............................5
2.2 Traffic Characteristics........................................5
2.3 Preemption.....................................................5
2.4 Route Pinning..................................................6
2.5 Resource Class.................................................6
3. Solution Overview...............................................6
3.1 Required Messages and TLVs.....................................7
3.2 Label Request Message..........................................7
3.3 Label Mapping Message..........................................9
3.4 Notification Message..........................................10
3.5 Release , Withdraw, and Abort Messages........................11
4. Protocol Specification.........................................11
4.1 Explicit Route TLV (ER-TLV)...................................11
4.2 Explicit Route Hop TLV (ER-Hop TLV)...........................12
4.3 Traffic Parameters TLV........................................13
4.3.1 Semantics...................................................15
4.3.1.1 Frequency.................................................15
4.3.1.2 Peak Rate.................................................16
4.3.1.3 Committed Rate............................................16
4.3.1.4 Excess Burst Size.........................................16
4.3.1.5 Peak Rate Token Bucket....................................16
4.3.1.6 Committed Data Rate Token Bucket..........................17
4.3.1.7 Weight....................................................18
4.3.2 Procedures..................................................18
4.3.2.1 Label Request Message.....................................18
4.3.2.2 Label Mapping Message.....................................18
4.3.2.3 Notification Message......................................19
4.4 Preemption TLV................................................19
4.5 LSPID TLV.....................................................20
4.6 Resource Class (Color) TLV....................................21
4.7 ER-Hop semantics..............................................22
4.7.1. ER-Hop 1: The IPv4 prefix..................................22
4.7.2. ER-Hop 2: The IPv6 address.................................23
4.7.3. ER-Hop 3: The autonomous system number....................24
4.7.4. ER-Hop 4: LSPID............................................24
4.8. Processing of the Explicit Route TLV.........................26
4.8.1. Selection of the next hop..................................26
4.8.2. Adding ER-Hops to the explicit route TLV...................27
4.9 Route Pinning TLV.............................................28
4.10 CR-LSP FEC Element...........................................28
5. IANA Considerations............................................29
5.1 TLV Type Name Space...........................................29
5.2 FEC Type Name Space...........................................30
5.3 Status Code Space.............................................30
6. Security Considerations........................................31
7. Acknowledgments................................................31
8. Intellectual Property Consideration............................31
9. References.....................................................32
Appendix A: CR-LSP Establishment Examples.........................33
A.1 Strict Explicit Route Example.................................33
A.2 Node Groups and Specific Nodes Example........................34
Appendix B. QoS Service Examples..................................36
B.1 Service Examples..............................................36
B.2 Establishing CR-LSP Supporting Real-Time Applications.........38
B.3 Establishing CR-LSP Supporting Delay Insensitive Applications.38
Author's Addresses................................................39
Full Copyright Statement..........................................42
1. Introduction โจ
LDP (Label Distribution Protocol) is defined in [1] for handing out labels inside one MPLS domain. ๐ One of the most important things MPLS can do, and LDP especially, is support constraint-based routing of traffic across the routed network. Constraint-based routing lets you extend the info used to set up paths past what the routing protocol has. For example, an LSP can be set up based on explicit route constraints, QoS constraints, and other constraints. Constraint-based routing (CR) is a mechanism for meeting the Traffic Engineering requirements proposed by [2] and [3]. LDP can be extended to meet those requirements, so it supports constraint-based routed label switched paths (CR-LSPs). CR-LSPs also work for other things, like MPLS-based VPNs [4]. You can read more about where CR-LDP applies in [5]. ๐ฆ
CR in MPLS has been explored elsewhere in [2] and [3]. Explicit routing is a subset of the bigger constraint-based routing function. At the MPLS WG meeting in Washington IETF (December 1997), the group agreed that LDP should support explicit routing of LSPs, with a way to indicate associated (forwarding) priority. Then at the Chicago meeting (August 1998), they decided explicit path setup in LDP would move to its own document. ๐ That's this document. It was accepted as a working document at the Orlando meeting (December 1998). ๐
Here's the deal: this specification proposes an end-to-end setup mechanism for a constraint-based routed LSP (CR-LSP) that the ingress LSR starts. It also specifies mechanisms for reserving resources using LDP. ๐
This document introduces TLVs and procedures that support:
- Strict and Loose Explicit Routing
- Specification of Traffic Parameters
- Route Pinning
- CR-LSP Preemption though setup/holding priorities
- Handling Failures
- LSPID
- Resource Class
Section 2 introduces the various constraints defined here. Section 3 outlines the CR-LDP solution. Section 4 defines the TLVs and procedures used to set up constraint-based routed label switched paths. Appendix A has several examples of CR-LSP path setup, and Appendix B has Service Definition Examples. ๐ซถ
2. Constraint-based Routing Overview ๐ธ
Constraint-based routing is a mechanism that supports the Traffic Engineering requirements defined in [3]. Explicit Routing is a subset of the more general constraint-based routing, where the constraint is the explicit route (ER). Other constraints exist to give a network operator control over the path an LSP takes. This section gives an overview of the constraints this specification supports. ๐ง
Like any other LSP, a CR-LSP is a path through an MPLS network. The difference is that other paths are set up purely from routing tables or a management system, while the constraint-based route is calculated at one point at the edge of network, based on criteria that include, but aren't limited to, routing information. ๐ The goal is that this functionality shall give special characteristics to the LSP so it better supports the traffic sent over it. People set up CR-LSPs because they want to assign certain bandwidth or other Service Class characteristics to the LSP, or because they want alternative routes to use physically separate paths through the network. โจ
2.1 Strict and Loose Explicit Routes ๐ฆ
An explicit route is represented in a Label Request Message as a list of nodes, or groups of nodes, along the constraint-based route. When the CR-LSP is established, all or a subset of the nodes in a group may be traversed by the LSP. Certain operations to be performed along the path can also be encoded in the constraint-based route. ๐ฅ
Being able to specify groups of nodes, as well as specific nodes, gives the system a lot of local flexibility when it fulfils a constraint-based route request. A subset of each group will be traversed, so the system can choose. This also lets the generator of the constraint-based route work with some imperfect information about the details of the path. ๐
The constraint-based route is encoded as a series of ER-Hops inside a constraint-based route TLV. Each ER-Hop may identify a group of nodes in the constraint-based route. The constraint-based route is then a path that includes all the identified groups of nodes, in the order they appear in the TLV. ๐
To keep things simple, each group of nodes is called an "abstract node". So you can also say a constraint-based route is a path including all of the abstract nodes, with the specified operations happening along that path. ๐
Part 1 done! Parts 2 through 8 are still coming, so stay tuned, bestie ๐ซถ๐
2.2 Traffic Characteristics ๐
okay so the traffic stuff for a path lives in the Traffic Parameters TLV ๐ It's described with three things: a peak rate, a committed rate, and a service granularity. The peak and committed rates are the bandwidth limits for a path, and the service granularity is how you put a limit on the delay variation the CR-LDP MPLS domain might add to a path's traffic ๐ฆ
2.3 Preemption โจ
okay this one is giving drama ๐ฅ CR-LDP reserves the resources a path needs on every hop of its route. But what if there's no route with enough room? Then existing paths can get rerouted so their resources get freed up for the new path. That's preemption ๐
Priorities decide who gets bumped. Existing paths are ranked by their holding priority, and the new path is ranked by its setup priority, and that's how you figure out whether the new path is allowed to kick an existing one off ๐ The setupPriority of a new CR-LSP and the holdingPriority of an existing CR-LSP are the attributes that carry these values. A higher holding priority means the path, once it's up, is less likely to get preempted ๐ง A higher setup priority means that when resources are scarce, the path is more likely to bump other paths ๐ธ Exactly how bumping works is up to network policy, so that part's not set in stone.
Which setup and holding values you hand out to which paths? Also network policy, babe ๐
Priority values run from zero (0) to seven (7). Zero is the most important path and it's called the highest priority. Seven is the least important one โจ Default values are also up to network policy, but the recommended default is (4) ๐
And ngl, here's the big rule: the setupPriority of a CR-LSP should not be higher (numerically less) than its holdingPriority. If it were, the path could bump an LSP and then get bumped by the next "equivalent" request, and that's a whole mess ๐ญ
2.4 Route Pinning ๐ฆ
Route pinning is for the loosely routed bits of an LSP. Those are the segments where the next hop is marked with the L bit set, or where the next hop is an abstract node ๐ So say you'd rather not switch the path even when a better next hop shows up somewhere along that loose part. You can set up a CR-LSP with route pinning to keep things steady ๐ซถ
2.5 Resource Class ๐ธ
The network operator can sort network resources into classes in a bunch of different ways. You'll also see these called "colors" or "administrative groups" ๐จ When you're establishing a CR-LSP, you have to say which resource classes that CR-LSP is allowed to draw from. Think of it like a guest list for the resources ๐
3. Solution Overview ๐ง
The CR-LSP over LDP spec has three main goals, babes:
- Meet the requirements outlined in [3] for doing traffic engineering, and give us a solid base for doing more general constraint-based routing ๐
- Build on stuff that's already specified and already does the job, wherever that's possible. That's why this spec is built on [1] ๐ซถ
- Keep the solution simple ๐
Quick scope check: this document only specifies support for unidirectional point-to-point CR-LSPs. Point-to-multipoint and multipoint-to-point are for further study (FFS) ๐ฎ
Support for constraint-based routed LSPs here depends on these minimal LDP behaviors from [1]:
- Use of Basic and/or Extended Discovery Mechanisms.
- Use of the Label Request Message defined in [1] in downstream on demand label advertisement mode with ordered control.
- Use of the Label Mapping Message defined in [1] in downstream on demand mode with ordered control.
- Use of the Notification Message defined in [1].
- Use of the Withdraw and Release Messages defined in [1].
- Use of the Loop Detection (in the case of loosely routed segments of a CR-LSP) mechanisms defined in [1].
On top of what [1] already does, this spec adds a few new things ๐
- The Label Request Message used to set up a CR-LSP has one or more CR-TLVs from Section 4. For example, the Label Request Message might include the ER-TLV ๐
- An LSR works out ordered control all by itself, just from seeing one or more CR-TLVs in the Label Request Message. An LSR can still be configured for independent control for LSPs that come from dynamic routing ๐ง But if a Label Request Message has one or more CR-TLVs, then ordered control is what sets up the CR-LSP. This is also true for the loosely routed parts of a CR-LSP ๐
- There are new status codes for error notifications when an established path that's specified in the CR-TLVs fails. All the new status codes require the
Fbit to be set ๐ฅ
Optional TLVs MUST be implemented to be compliant with the protocol. They're still optional to actually carry in the CR-LDP messages, though, and they're how you signal certain characteristics of the CR-LSP being set up or changed ๐ฆ
Examples of CR-LSP establishment are in Appendix A, so you can see how all these mechanisms actually work together โจ
3.1 Required Messages and TLVs ๐
Anything about Messages, TLVs, and procedures that isn't explicitly defined in this document is defined in the LDP Specification [1]. If you want an informational doc on the state transitions tied to CR-LDP messages, check out [7] ๐ธ
The subsections below are basically a cross-reference to [1], plus any extra functionality beyond [1] that's needed ๐
Heads up: the Status TLV isn't only for Notification messages, as Section 3.4.6 of [1] describes. A message other than a Notification can carry a Status TLV as an Optional Parameter ๐ When that happens, the U-bit of the Status TLV should be set to 1, which tells the receiver it can quietly drop the TLV if it's not ready to handle it ๐
3.2 Label Request Message ๐
The Label Request Message is as defined in 3.5.8 of [1], with these changes (they only kick in if any of the CR-TLVs is included in the Label Request Message) โจ
- The Label Request Message MUST include a single FEC-TLV element. The CR-LSP FEC TLV element SHOULD be used. The other FEC-TLVs defined in [1] MAY be used instead for certain applications ๐ฆ
- The Optional Parameters TLV includes the definition of any of the Constraint-based TLVs specified in Section 4 ๐ง
- The procedures for handling the Label Request Message get augmented by the CR-TLV procedures in Section 4 ๐
Here's how the CR-LDP Label Request Message is encoded ๐ซถ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| Label Request (0x0401) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC TLV |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSPID TLV (CR-LDP, mandatory) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ER-TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Traffic TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Pinning TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resource Class TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Preemption TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.3 Label Mapping Message ๐ธ
The Label Mapping Message is as defined in 3.5.7 of [1], with these changes ๐
- The Label Mapping Message MUST include a single Label-TLV ๐
- The Label Mapping Message procedures are limited to downstream on demand ordered control mode ๐ง
A Mapping message gets sent from a downstream LSR to an upstream LSR under either of these conditions ๐
- The LSR is the egress end of the CR-LSP and an upstream mapping has been requested.
- The LSR got a mapping from its downstream next hop LSR for a CR-LSP where an upstream request is still pending.
And here's the CR-LDP Label Mapping Message encoding ๐ฆ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| Label Mapping (0x0400) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC TLV |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Label TLV |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Label Request Message ID TLV |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSPID TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Traffic TLV (CR-LDP, optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.4 Notification Message โจ
okay so the Notification Message is defined in Section 3.5.1 of [1], and the Status TLV encoding is defined in Section 3.4.6 of [1] ๐ Setting up a CR-LSP can fail for lots of reasons, and every one of those failures counts as an advisory condition. The Notification Message is how they get reported ๐ฅ
Notification Messages carry Status TLVs to say which event is being signaled. New status codes are defined in Section 4.11 for error notifications about establishing a CR-LSP and processing the CR-TLV ๐ Every single one of the new status codes requires that the F bit be set, no exceptions bestie ๐ซถ
The Notification Message MAY carry the LSPID TLV of the corresponding CR-LSP ๐ฆ
Notification Messages MUST be forwarded toward the LSR originating the Label Request at each hop, and at any time that procedures in this specification - or in [1] - specify sending a Notification Message in response to a Label Request Message โจ
The encoding of the notification message looks like this ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| Notification (0x0001) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status (TLV) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Optional Parameters |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.5 Release , Withdraw, and Abort Messages ๐ธ
The Label Release , Label Withdraw, and Label Abort Request Messages work exactly as specified in [1], so no glow-up needed there ๐ These messages MAY also carry the LSPID TLV ๐ง
4. Protocol Specification โจ
The Label Request Message defined in [1] MUST carry the LSPID TLV, and it MAY carry one or more of the optional Constraint-based Routing TLVs (CR-TLVs) defined in this section ๐ If we ever need more constraints, we can add them later by defining new TLVs, which is very giving future-proof energy ๐ฎ In this specification, these are the TLVs defined:
- Explicit Route TLV
- Explicit Route Hop TLV
- Traffic Parameters TLV
- Preemption TLV
- LSPID TLV
- Route Pinning TLV
- Resource Class TLV
- CR-LSP FEC TLV
4.1 Explicit Route TLV (ER-TLV) ๐บ๏ธ
okay so the ER-TLV is the object that spells out the path the LSP is going to take ๐ฆ It's made up of one or more Explicit Route Hop TLVs (ER-Hop TLVs), which we get to in Section 4.2 ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0800 | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ER-Hop TLV 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ER-Hop TLV 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ............ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ER-Hop TLV n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ๐ A fourteen-bit field carrying the value of the ER-TLV, which is Type = 0x0800.
Length ๐ Tells you the length of the value field in bytes.
ER-Hop TLVs ๐ซถ One or more ER-Hop TLVs, defined in Section 4.2.
4.2 Explicit Route Hop TLV (ER-Hop TLV) ๐งฉ
The contents of an ER-TLV are a series of variable length ER-Hop TLVs ๐
A node that gets a label request message containing an ER-Hop type it doesn't support MUST not progress the label request message to the downstream LSR, and it MUST send back a "No Route" Notification Message ๐ that's a hard stop, bestie ๐
Each ER-Hop TLV has this form โจ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Content // |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ER-Hop Type ๐ฅ A fourteen-bit field carrying the type of the ER-Hop contents. These are the values defined so far:
Value Type
------ ------------------------
0x0801 IPv4 prefix
0x0802 IPv6 prefix
0x0803 Autonomous system number
0x0804 LSPID
Length ๐ Tells you the length of the value field in bytes.
L bit ๐ฆ The L bit in the ER-Hop is a one-bit attribute. If the L bit is set, the attribute is "loose." If it isn't set, the attribute is "strict." For brevity, an ER-Hop with the loose attribute is a "loose ER-Hop," and otherwise it's a "strict ER-Hop." The abstract node of a strict or loose ER-Hop is then called a strict or loose node, respectively ๐ Loose and strict nodes are always interpreted relative to their prior abstract nodes. The path between a strict node and its prior node MUST include only network nodes from the strict node and its prior abstract node ๐ซ
The path between a loose node and its prior node MAY include other network nodes, which are not part of the strict node or its prior abstract node ๐
Contents ๐ง A variable length field holding a node or abstract node, which is one of the consecutive nodes that make up the explicitly routed LSP.
4.3 Traffic Parameters TLV ๐ธ
The next few sections are all about the CR-LSP Traffic Parameters ๐ The Traffic Parameter values are how you express what the CR-LSP needs in order to behave ๐ฅ Each one gets its own subsection below.
A Traffic Parameters TLV is what carries those values around ๐ The Traffic Parameters TLV has a Flags field, a Frequency, a Weight, and the five Traffic Parameters: PDR, PBS, CDR, CBS, and EBS ๐ซถ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0810 | Length = 24 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Frequency | Reserved | Weight |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peak Data Rate (PDR) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peak Burst Size (PBS) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Committed Data Rate (CDR) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Committed Burst Size (CBS) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Excess Burst Size (EBS) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ๐ธ A fourteen-bit field carrying the value of the Traffic Parameters TLV, which is Type = 0x0810.
Length ๐ Tells you the length of the value field in bytes, which is 24.
Flags ๐ The Flags field looks like this:
+--+--+--+--+--+--+--+--+
| Res |F6|F5|F4|F3|F2|F1|
+--+--+--+--+--+--+--+--+
- Res - These bits are reserved. Zero on transmission. Ignored on receipt.
- F1 - Corresponds to the PDR.
- F2 - Corresponds to the PBS.
- F3 - Corresponds to the CDR.
- F4 - Corresponds to the CBS.
- F5 - Corresponds to the EBS.
- F6 - Corresponds to the Weight.
Each flag Fi is a Negotiable Flag that matches up with one Traffic Parameter ๐ฆ A value of zero means NotNegotiable, and a value of one means Negotiable ๐
Frequency ๐ The Frequency field is an 8 bit unsigned integer with these code points defined:
0- Unspecified
1- Frequent
2- VeryFrequent
3-255 - Reserved
Reserved - Zero on transmission. Ignored on receipt.
Weight ๐ An 8 bit unsigned integer telling you the weight of the CR-LSP. Valid weight values run from 1 to 255. A value of 0 means weight isn't applicable for the CR-LSP ๐ซถ
Traffic Parameters ๐ฅ Each Traffic Parameter is encoded as a 32-bit IEEE single-precision floating-point number. Positive infinity is represented as an IEEE single-precision floating-point number with an exponent of all ones (255) and a sign and mantissa of all zeros โพ๏ธ PDR and CDR are in units of bytes per second, and PBS, CBS, and EBS are in units of bytes ๐
The value of PDR MUST be greater than or equal to the value of CDR in a correctly encoded Traffic Parameters TLV ๐
4.3.1 Semantics ๐ง
4.3.1.1 Frequency ๐
The Frequency tells you the granularity at which the CDR allocated to the CR-LSP gets made available ๐ VeryFrequent means the available rate should average at least the CDR when measured over any time interval equal to or longer than the shortest packet time at the CDR. Frequent means the available rate should average at least the CDR when measured over any time interval equal to or longer than a small number of shortest packet times at the CDR ๐ฆ
Unspecified means the CDR MAY be provided at any granularity ๐ธ
4.3.1.2 Peak Rate ๐
The Peak Rate defines the maximum rate at which traffic SHOULD be sent to the CR-LSP ๐ It's really useful for resource allocation. If resource allocation within the MPLS domain depends on the Peak Rate value, then it should be enforced at the ingress to the MPLS domain ๐ซถ
The Peak Rate is defined in terms of the two Traffic Parameters PDR and PBS. See section 4.3.1.5 below ๐
4.3.1.3 Committed Rate ๐ธ
The Committed Rate defines the rate that the MPLS domain commits to making available to the CR-LSP ๐
The Committed Rate is defined in terms of the two Traffic Parameters CDR and CBS. See section 4.3.1.6 below ๐
4.3.1.4 Excess Burst Size โก
The Excess Burst Size may be used at the edge of an MPLS domain for traffic conditioning ๐ง The EBS MAY be used to measure how far the traffic sent on a CR-LSP goes past the committed rate ๐
The possible traffic conditioning actions, like passing, marking, or dropping, are specific to the MPLS domain ๐
The Excess Burst Size is defined together with the Committed Rate. See section 4.3.1.6 below ๐
4.3.1.5 Peak Rate Token Bucket โจ
okay so the Peak Rate of a CR-LSP gets described with a token bucket called P. It has a token rate PDR and a maximum bucket size PBS ๐ชฃ
The bucket starts out totally full at time 0, so Tp(0) = PBS ๐ After that, Tp goes up by one PDR each second, but only while it's still below PBS. Then when a packet of B bytes shows up at time t:
- If
Tp(t)-B >= 0, the packet is not over the peak rate, andTpgets knocked down byB, with 0 as the floor. Otherwise, - the packet is over the peak rate, and
Tpjust stays where it is ๐ โโ๏ธ
ngl the math is simple: a PDR or PBS that's positive infinity means packets literally never go over the peak rate ๐ฆ
Also, the LSR doesn't have to actually build this token bucket in its code. This formal version is just the official way to describe it ๐ง
4.3.1.6 Committed Data Rate Token Bucket ๐
the committed rate of a CR-LSP is described with a token bucket C that runs at CDR. How far the offered rate goes over the committed rate MAY be measured with a second bucket, E, which also runs at CDR ๐ธ The biggest size for C is CBS, and the biggest size for E is EBS.
Both buckets start full at time 0, meaning Tc(0) = CBS and Te(0) = EBS ๐
After that, Tc and Te get updated CDR times per second like this:
- If
Tcis less thanCBS,Tcgoes up by one. Otherwise, - if
Teis less thanEBS,Tegoes up by one. Otherwise, neitherTcnorTegoes up ๐ซถ
When a packet of B bytes arrives at time t:
- If
Tc(t)-B >= 0, the packet is not over the Committed Rate, andTcgets reduced byB, with 0 as the floor. Otherwise, - if
Te(t)-B >= 0, the packet is over the Committed Rate but not over theEBS, andTegets reduced byB, with 0 as the floor. Otherwise, - the packet is over both the Committed Rate and the
EBS, and neitherTcnorTegets reduced ๐ญ
The vibes here: a CDR of positive infinity means packets are never over the Committed Rate or the EBS ๐ And a positive infinite CBS or EBS means that limit can never be exceeded ๐
Again, the LSR's real implementation doesn't need to copy this formal model ๐
4.3.1.7 Weight ๐
The Weight decides a CR-LSP's relative share of the spare bandwidth that's above its committed rate โจ What "relative share" means is up to the MPLS domain, so it's not one universal thing ๐ฆ
4.3.2 Procedures ๐ฅ
4.3.2.1 Label Request Message ๐
If an LSR gets a Traffic Parameters TLV that was encoded wrong, and the PDR value is less than the CDR value, then it MUST send a Notification Message with the Status code Traffic Parameters Unavailable to the upstream LSR that sent it the bad message ๐
If a Traffic Parameter is marked Negotiable in the Label Request Message by its Negotiable Flag, then an LSR MAY swap in a smaller value for that Traffic Parameter โจ
If the Weight is marked Negotiable in the Label Request Message by its Negotiable Flag, then an LSR may swap the Weight for a lower value, all the way down to 0 ๐
After any possible Traffic Parameter negotiation, if an LSR CAN support the CR-LSP Traffic Parameters, then the LSR MUST reserve the matching resources for that CR-LSP ๐ซถ
After any possible Traffic Parameter negotiation, if an LSR CANNOT support the CR-LSP Traffic Parameters, then the LSR MUST send a Notification Message that contains the Resource Unavailable status code ๐
4.3.2.2 Label Mapping Message ๐ธ
If an LSR gets a Traffic Parameters TLV that was encoded wrong, and the PDR value is less than the CDR value, then it MUST send a Label Release message with the Status code Traffic Parameters Unavailable to the LSR that sent it the bad message ๐ญ On top of that, the LSP should send a Notification Message upstream with the status code Label Request Aborted.
If the negotiation flag was set in the label request message, then the egress LSR MUST include the Traffic Parameters and Weight (possibly negotiated ones) in the Label Mapping message ๐ฆ
The Traffic Parameters and the Weight in a Label Mapping message MUST be forwarded unchanged ๐ง
An LSR SHOULD adjust the resources it reserved for a CR-LSP when it gets a Label Mapping Message, if the Traffic Parameters are different from the ones in the matching Label Request Message ๐ฅ
4.3.2.3 Notification Message ๐
If an LSR gets a Notification Message for a CR-LSP, it SHOULD release any resources it might have reserved for that CR-LSP ๐ Also, when a Downstream LSR sends a Notification Message that's tied to a Label Request from an upstream LSR, the local LSR MUST propagate the Notification message using the procedures in [1]. And the F bit MUST be set ๐
4.4 Preemption TLV ๐
The default setup and holding priorities should sit in the middle of the range (e.g., 4) ๐ That way this feature can be switched on bit by bit in a live network, by moving the priority up or down starting from the middle ๐ง
Since the Preemption TLV is optional, LSPs that get set up without an explicitly signaled preemption TLV SHOULD be treated as LSPs with the default setup and holding priorities (e.g., 4) ๐
When an LSP that's already established gets preempted, the LSR doing the preempting sends a Withdraw Message upstream and a Release Message downstream ๐ซถ
When an LSP that's still being set up gets preempted (it has an outstanding Label Request and hasn't gotten a Label Mapping back yet), the LSR doing the preempting sends a Notification Message upstream and an Abort Message downstream ๐ญ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0820 | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SetPrio | HoldPrio | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ๐ง A fourteen-bit field carrying the value of the Preemption-TLV Type, which is 0x0820.
Length ๐ Says how long the value field is, in bytes. Here it's 4.
Reserved ๐ซถ Set to zero when sending. Ignored when receiving.
SetPrio ๐ A SetupPriority of zero (0) is the priority for the most important path, which is called the highest priority. Seven (7) is the priority for the least important path. The higher the setup priority, the more paths CR-LDP can bump to set up the path. The default value should be 4 ๐ฅ
HoldPrio ๐ A HoldingPriority of zero (0) is the priority for the most important path, which is called the highest priority. Seven (7) is the priority for the least important path. The default value should be 4. The higher the holding priority, the less likely it is that CR-LDP will reallocate its bandwidth to a new path ๐ธ
4.5 LSPID TLV ๐
the LSPID is a unique identifier for a CR-LSP inside an MPLS network โจ
It's made from the ingress LSR Router ID (or any of its own IPv4 addresses) plus a Local CR-LSP ID that's unique to that LSR ๐ฆ
The LSPID is handy for network management, for CR-LSP repair, and for using an already-established CR-LSP as a hop in an ER-TLV ๐ง
An "action indicator flag" is carried in the LSPID TLV. This flag explicitly says what to do if the LSP already exists on the LSR that gets the message ๐
Sometimes a network operator needs to change an established CR-LSP's bandwidth reservation, because the traffic on it has new requirements ๐ The "action indicator flag" is how you say "modify the bandwidth, and maybe other parameters, without interrupting service." This is super useful for dynamic network resource management, where traffic with different priorities and service classes is mixed together ๐
The procedure for the code point "modify" is defined in [8]. The procedures for the other flags are FFS ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0821 | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |ActFlg | Local CR-LSP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ingress LSR Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ๐ง A fourteen-bit field carrying the value of the LSPID-TLV Type, which is 0x0821.
Length ๐ Says how long the value field is, in bytes. Here it's 4.
ActFlg ๐ธ The Action Indicator Flag. It's a 4-bit field that explicitly says what to do if the LSP already exists on the LSR that gets the message. These are the proposed indicator code points:
0000: indicates initial LSP setup
0001: indicates modify LSP
Reserved ๐ซถ Set to zero when sending. Ignored when receiving.
Local CR-LSP ID ๐ The Local LSP ID is an identifier for the CR-LSP that's unique within the Ingress LSR that started the CR-LSP โจ
Ingress LSR Router ID ๐ฆ An LSR may use any of its own IPv4 addresses in this field ๐ง
4.6 Resource Class (Color) TLV ๐
The Resource Class from [3] is how you say which links this CR-LSP is allowed to use ๐ That info lets the network's topology get pruned down to the good stuff ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0822 | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RsCls |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ๐ง A fourteen-bit field carrying the value of the ResCls-TLV Type, which is 0x0822.
Length ๐ Says how long the value field is, in bytes. Here it's 4.
RsCls ๐ฅ The Resource Class bit mask. It shows which of the 32 "administrative groups" or "colors" of links the CR-LSP can traverse ๐ธ
4.7 ER-Hop semantics โจ
4.7.1. ER-Hop 1: The IPv4 prefix โจ
The abstract node this ER-Hop stands for is the crew of every node whose IP address sits inside this prefix. ๐ธ A prefix length of 32 means it's just one IPv4 node, so no squad, just a solo queen. ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0801 | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Reserved | PreLen |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Address (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type โ a fourteen-bit field holding the ER-Hop 1 value, IPv4 Address, Type = 0x0801 ๐
- Length โ the length of the value field in bytes, which is 8 ๐
- L Bit โ set means Loose hop, cleared means strict hop ๐ฆ
- Reserved โ zero on transmission, ignored on receipt ๐ซถ
- PreLen โ the Prefix Length, 1-32 ๐
- IP Address โ a four-byte field with the IP Address ๐
4.7.2. ER-Hop 2: The IPv6 address ๐
Same energy as ER-Hop 1, just with an IPv6 address. ๐ง
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| 0x0802 | Length = 20 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Reserved | PreLen |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPV6 address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPV6 address (continued) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPV6 address (continued) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPV6 address (continued) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type โ a fourteen-bit field holding the ER-Hop 2 value, IPv6 Address, Type = 0x0802 ๐
- Length โ the length of the value field in bytes, which is 20 ๐
- L Bit โ set means Loose hop, cleared means strict hop ๐ฆ
- Reserved โ zero on transmission, ignored on receipt ๐ซถ
- PreLen โ the Prefix Length, 1-128 ๐
- IPv6 address โ a 128-bit unicast host address ๐
4.7.3. ER-Hop 3: The autonomous system number ๐
This ER-Hop's abstract node is every node that belongs to the autonomous system. The whole AS, bestie. ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| 0x0803 | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Reserved | AS Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type โ a fourteen-bit field holding the ER-Hop 3 value, AS Number, Type = 0x0803 ๐
- Length โ the length of the value field in bytes, which is 4 ๐
- L Bit โ set means Loose hop, cleared means strict hop ๐ฆ
- Reserved โ zero on transmission, ignored on receipt ๐ซถ
- AS Number โ the Autonomous System number ๐
4.7.4. ER-Hop 4: LSPID ๐ฆ
The LSPID is how you name the tunnel ingress point as the next hop in the ER. โจ This ER-Hop lets you stack new CR-LSPs inside a CR-LSP that's already set up, and it also lets you splice the CR-LSP being established onto an existing one. Main character energy, ngl. ๐
If an LSPID Hop is the last ER-Hop in an ER-TLV, the LSR may splice the CR-LSP of the incoming Label Request onto the CR-LSP that already exists with this LSPID. ๐ซถ This is super handy for local repair: say a Label Request shows up at the next ER-Hop right after the loosely specified CR-LSP segment. Using the LSPID Hop here means the ER-Hops don't have to keep the whole leftover ER-TLV around as state at each LSR on either end (upstream or downstream) of that loose segment. ๐ง Why? The upstream LSR only needs to remember the next ER-Hop and the LSPID, and the downstream LSR only needs the LSPID, so both ends can tell they're talking about the same LSP. Iconic efficiency. ๐ธ
If the LSPID Hop is not the last hop in an ER-TLV, the LSR must remove the LSP-ID Hop and forward the remaining ER-TLV in a Label Request message over an LDP session with the LSR that is the specified CR-LSP's egress. ๐ That egress LSR carries on processing the CR-LSP Label Request Message, and the result is a tunneled (or stacked) CR-LSP. ๐ง
To support labels negotiated for tunneled CR-LSP segments, an LDP session is required [1] between the tunnel end points, possibly using the existing CR-LSP. Using the existence of the CR-LSP in place of a session, or other possible session-less approaches, is FFS. ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| 0x0804 | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Reserved | Local LSPID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ingress LSR Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type โ a fourteen-bit field holding the ER-Hop 4 value, LSPID, Type = 0x0804 ๐
- Length โ the length of the value field in bytes, which is 8 ๐
- L Bit โ set means Loose hop, cleared means strict hop ๐ฆ
- Reserved โ zero on transmission, ignored on receipt ๐ซถ
- Local LSPID โ a 2-byte field with the LSPID, which is unique with reference to its Ingress LSR ๐
- Ingress LSR Router ID โ an LSR may use any of its own IPv4 addresses in this field ๐
4.8. Processing of the Explicit Route TLV ๐บ๏ธ
4.8.1. Selection of the next hop ๐งญ
A Label Request Message with an explicit route TLV must figure out the next hop for this path. โจ That choice might come from a bunch of possible alternatives, and how the node picks from that set is implementation dependent and outside the scope of this spec. Picking particular paths is also out of scope, but each node is assumed to make a best effort to find a loop-free path. โป๏ธ Heads up, though: local policy can override those best efforts. ๐ โโ๏ธ
To work out the next hop, a node runs through these steps:
- The node receiving the Label Request Message must first check the first ER-Hop. If the L bit is not set on the first ER-Hop and the node is not part of the abstract node that ER-Hop describes, the message got to the wrong place, and the node should return a "Bad Initial ER-Hop Error" status. If the L bit is set and the local node is not part of that abstract node, the node picks a next hop that's along the path to the abstract node described by the first ER-Hop. If there's no first ER-Hop at all, the message is also in error, and the system should return a "Bad Explicit Routing TLV Error" status using a Notification Message sent upstream. ๐ญ
- If there's no second ER-Hop, that means the explicit route is over. The explicit route TLV should be removed from the Label Request Message. This node may or may not be the end of the LSP. Processing carries on with section 4.8.2, where a new explicit route TLV may be added to the Label Request Message. ๐
- If the node is also part of the abstract node described by the second ER-Hop, the node deletes the first ER-Hop and goes back to step 2. Notice what happens here: the second ER-Hop becomes the first ER-Hop of the next round. ๐
- The node figures out whether it's topologically adjacent to the abstract node described by the second ER-Hop. If it is, the node picks a particular next hop that is a member of that abstract node. Then it deletes the first ER-Hop and continues with section 4.8.2. ๐
- Next, the node picks a next hop inside the abstract node of the first ER-Hop that's along the path to the abstract node of the second ER-Hop. If no such path exists, there are two cases:
- 5.a If the second ER-Hop is a strict ER-Hop, that's an error, and the node should return a "Bad Strict Node Error" status. ๐ซ
- 5.b Otherwise, if the second ER-Hop is a loose ER-Hop, the node picks any next hop that's along the path to the next abstract node. If there's no path within the MPLS domain, that's an error, and the node should return a "Bad Loose Node Error" status. ๐ฅฒ
- Finally, the node swaps out the first ER-Hop for any ER-Hop that denotes an abstract node containing the next hop. This is needed so the explicit route will be accepted when the next hop receives it. ๐ค
- The node progresses the Label Request Message to the next hop. ๐
4.8.2. Adding ER-Hops to the explicit route TLV โ
After picking a next hop, the node may change the explicit route in the following ways. ๐ท
If, while running the algorithm in section 4.8.1, the explicit route TLV gets removed, the node may add a brand-new explicit route TLV. ๐
Otherwise, if the node is a member of the abstract node for the first ER-Hop, a series of ER-Hops may be inserted before the first ER-Hop or may replace it. Each ER-Hop in that series must denote an abstract node that is a subset of the current abstract node. ๐งฉ
Alternatively, if the first ER-Hop is a loose ER-Hop, an arbitrary series of ER-Hops may be inserted before the first ER-Hop. ๐
4.9 Route Pinning TLV
okay so Section 2.4 is where route pinning gets explained, bestie ๐ Here's how the Route Pinning TLV is encoded:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0823 | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|P| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type ๐ง is a fourteen-bit field carrying the value of the Pinning-TLV Type =
0x0823. - Length is the length of the value field in bytes =
4. - P Bit ๐ is set to
1to indicate that route pinning is requested. It is set to0to indicate that route pinning is not requested. - Reserved is zero on transmission and ignored on receipt.
4.10 CR-LSP FEC Element
ngl this one is so cute โจ A brand-new FEC element is introduced in this specification just for CR-LSPs. A FEC TLV containing a FEC of Element type CR-LSP (0x04) is a CR-LSP FEC TLV. The CR-LSP FEC Element is an opaque FEC, and it's only meant to be used in Messages of CR-LSPs ๐ฆ
A single FEC element MUST be included in the Label Request Message. The FEC Element SHOULD be the CR-LSP FEC Element. However, one of the other FEC elements (Type=0x01, 0x02, 0x03) defined in [1] MAY be in CR-LDP messages instead of the CR-LSP FEC Element for certain applications. A FEC TLV containing a FEC of Element type CR-LSP (0x04) is a CR-LSP FEC TLV.
FEC Element Type Value
Type name
CR-LSP 0x04 No value; i.e., 0 value octets;
The CR-LSP FEC TLV encoding is as follows ๐ธ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Type = 0x0100 | Length = 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CR-LSP (4) |
+-+-+-+-+-+-+-+-+
- Type is a fourteen-bit field carrying the value of the FEC TLV Type =
0x0100. - Length is the length of the value field in bytes =
1. - CR-LSP FEC Element Type is
0x04.
5. IANA Considerations
the IANA stuff is a little boring but it's important, so let's go ๐ CR-LDP defines the following name spaces, which require management:
- TLV types.
- FEC types.
- Status codes.
The following sections provide guidelines for managing these name spaces.
5.1 TLV Type Name Space
RFC 3036 [1] defines the LDP TLV name space. This document further subdivides the range of RFC 3036 from that TLV space for TLVs associated with the CR-LDP in the range 0x0800 - 0x08FF.
Following the policies outlined in [IANA], TLV types in this range are allocated through an IETF Consensus action.
Initial values for this range are specified in the following table:
TLV Type
-------------------------------------- ----------
Explicit Route TLV 0x0800
Ipv4 Prefix ER-Hop TLV 0x0801
Ipv6 Prefix ER-Hop TLV 0x0802
Autonomous System Number ER-Hop TLV 0x0803
LSP-ID ER-Hop TLV 0x0804
Traffic Parameters TLV 0x0810
Preemption TLV 0x0820
LSPID TLV 0x0821
Resource Class TLV 0x0822
Route Pinning TLV 0x0823
5.2 FEC Type Name Space
RFC 3036 defines the FEC Type name space. Further, RFC 3036 has assigned values 0x00 through 0x03. FEC types 0 through 127 are available for assignment through IETF consensus action. This specification makes the following additional assignment, using the policies outlined in [IANA]:
FEC Element Type
-------------------------------------- ----------
CR-LSP FEC Element 0x04
5.3 Status Code Space
RFC 3036 defines the Status Code name space. This document further subdivides the range of RFC 3036 from that TLV space for TLVs associated with the CR-LDP in the range 0x04000000 - 0x040000FF.
Following the policies outlined in [IANA], TLV types in this range are allocated through an IETF Consensus action.
Initial values for this range are specified in the following table:
Status Code Type
-------------------------------------- ----------
Bad Explicit Routing TLV Error 0x04000001
Bad Strict Node Error 0x04000002
Bad Loose Node Error 0x04000003
Bad Initial ER-Hop Error 0x04000004
Resource Unavailable 0x04000005
Traffic Parameters Unavailable 0x04000006
LSP Preempted 0x04000007
Modify Request Not Supported 0x04000008
6. Security Considerations
๐จ this part is SERIOUS, bestie, no skipping! CR-LDP inherits the same security mechanism described in Section 4.0 of [1] to protect against the introduction of spoofed TCP segments into LDP session connection streams. ๐๐
7. Acknowledgments
the people who helped make this happen deserve all the flowers ๐ The messages used to signal the CR-LSP setup are based on the work done by the LDP [1] design team.
The list of authors provided with this document is a reduction of the original list. Currently listed authors wish to acknowledge that a substantial amount was also contributed to this work by: Osama Aboul-Magd, Peter Ashwood-Smith, Joel Halpern, Fiffi Hellstrand, Kenneth Sundell and Pasi Vaananen.
The authors would also like to acknowledge the careful review and comments of Ken Hayward, Greg Wright, Geetha Brown, Brian Williams, Paul Beaubien, Matthew Yuen, Liam Casey, Ankur Anand and Adrian Farrel. ๐ซถ
8. Intellectual Property Consideration
the IETF has been notified of intellectual property rights claimed in regard to some or all of the specification contained in this document. For more information consult the online list of claimed rights. โ๏ธ
9. References
- [1] Andersson, L., Doolan, P., Feldman, N., Fredette, A. and B. Thomas, "Label Distribution Protocol Specification", RFC 3036, January 2001.
- [2] Rosen, E., Viswanathan, A. and R. Callon, "Multiprotocol Label Switching Architecture", RFC 3031, January 2001.
- [3] Awduche, D., Malcolm, J., Agogbua, J., O'Dell, M. and J. McManus, "Requirements for Traffic Engineering Over MPLS", RFC 2702, September 1999.
- [4] Gleeson, B., Lin, A., Heinanen, Armitage, G. and A. Malis, "A Framework for IP Based Virtual Private Networks", RFC 2764, February 2000.
- [5] Ash, J., Girish, M., Gray, E., Jamoussi, B. and G. Wright, "Applicability Statement for CR-LDP", RFC 3213, January 2002.
- [6] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
- [7] Boscher, C., Cheval, P., Wu, L. and E. Gray, "LDP State Machine", RFC 3215, January 2002.
- [8] Ash, J., Lee, Y., Ashwood-Smith, P., Jamoussi, B., Fedyk, D., Skalecki, D. and L. Li, "LSP Modification Using CR-LDP", RFC 3214, January 2002.
Appendix A: CR-LSP Establishment Examples
A.1 Strict Explicit Route Example
this appendix is a worked example and it's giving tutorial energy ๐ง It shows how a strictly routed CR-LSP gets set up. In this example, a specific node represents each abstract node.
The sample network used here is a four node network with two edge LSRs and two core LSRs as follows:
abc
LSR1------LSR2------LSR3------LSR4
LSR1 generates a Label Request Message as described in Section 3.1 of this document and sends it to LSR2. This message includes the CR-TLV.
A vector of three ER-Hop TLVs <a, b, c> composes the ER-TLV. The ER-Hop TLVs used in this example are of type 0x0801 (IPv4 prefix) with a prefix length of 32. Hence, each ER-Hop TLV identifies a specific node as opposed to a group of nodes. At LSR2, the following processing of the ER-TLV per Section 4.8.1 of this document takes place:
- The node LSR2 is part of the abstract node described by the first hop
<a>. Therefore, the first step passes the test. Go to step 2. - There is a second ER-Hop,
<b>. Go to step 3. - LSR2 is not part of the abstract node described by the second ER-Hop
<b>. Go to Step 4. - LSR2 determines that it is topologically adjacent to the abstract node described by the second ER-Hop
<b>. LSR2 selects a next hop (LSR3) which is the abstract node. LSR2 deletes the first ER-Hop<a>from the ER-TLV, which now becomes<b, c>. Processing continues with Section 4.8.2.
At LSR2, the following processing of Section 4.8.2 takes place: Executing algorithm 4.8.1 did not result in the removal of the ER-TLV.
Also, LSR2 is not a member of the abstract node described by the first ER-Hop <b>.
Finally, the first ER-Hop <b> is a strict hop.
Therefore, processing section 4.8.2 does not result in the insertion of new ER-Hops. The selection of the next hop has been already done is step 4 of Section 4.8.1 and the processing of the ER-TLV is completed at LSR2. In this case, the Label Request Message including the ER-TLV <b, c> is progressed by LSR2 to LSR3.
At LSR3, a similar processing to the ER-TLV takes place except that the incoming ER-TLV = <b, c> and the outgoing ER-TLV is <c>.
At LSR4, the following processing of section 4.8.1 takes place:
- The node LSR4 is part of the abstract node described by the first hop
<c>. Therefore, the first step passes the test. Go to step 2. - There is no second ER-Hop, this indicates the end of the CR-LSP. The ER-TLV is removed from the Label Request Message. Processing continues with Section 4.8.2.
At LSR4, the following processing of Section 4.8.2 takes place: Executing algorithm 4.8.1 resulted in the removal of the ER-TLV. LSR4 does not add a new ER-TLV.
Therefore, processing section 4.8.2 does not result in the insertion of new ER-Hops. This indicates the end of the CR-LSP and the processing of the ER-TLV is completed at LSR4.
At LSR4, processing of Section 3.2 is invoked. The first condition is satisfied (LSR4 is the egress end of the CR-LSP and upstream mapping has been requested). Therefore, a Label Mapping Message is generated by LSR4 and sent to LSR3.
At LSR3, the processing of Section 3.2 is invoked. The second condition is satisfied (LSR3 received a mapping from its downstream next hop LSR4 for a CR-LSP for which an upstream request is still pending). Therefore, a Label Mapping Message is generated by LSR3 and sent to LSR2.
At LSR2, a similar processing to LSR 3 takes place and a Label Mapping Message is sent back to LSR1, which completes the end-to-end CR-LSP setup. โจ๐
A.2 Node Groups and Specific Nodes Example
Okay so picture this ๐ a request at the ingress LSR to set up a CR-LSP can come from a management system or an application. The details are implementation specific, so it's totally up to whoever builds it โจ
The ingress LSR takes info from that management system or application, and maybe also from the routing database, to work out the explicit route and build the Label Request Message ๐
The Label Request Message carries the other necessary info, plus an ER-TLV that defines the explicitly routed path. In our example, the ER-Hop TLVs are supposed to hold an abstract node for a group of nodes, then an abstract node for a specific node, then another abstract node for a group of nodes, and finally an abstract node for a specific egress point. It's giving a whole little obstacle course ๐ง
In--{Group 1}--{Specific A}--{Group 2}--{Specific Out: B}
The ER-TLV contains four ER-Hop TLVs:
- An ER-Hop TLV that specifies a group of LSRs valid for the first abstract node representing a group of nodes (Group 1).
- An ER-Hop TLV that indicates the specific node (Node A).
- An ER-Hop TLV that specifies a group of LSRs valid for the second abstract node representing a group of nodes (Group 2).
- An ER-Hop TLV that indicates the specific egress point for the CR-LSP (Node B).
All the ER-Hop TLVs are strictly routed nodes ๐ฅ
Here's how the setup procedure goes, step by step:
- The ingress node sends the Label Request Message to a node that is a member of the group of nodes indicated in the first ER-Hop TLV, following normal routing for the specific node (A).
- The node that receives the message identifies itself as part of the group indicated in the first ER-Hop TLV, and that it is not the specific node (A) in the second. Further, it realizes that the specific node (A) is not one of its next hops.
- It keeps the ER-Hop TLVs intact and sends a Label Request Message to another node that is part of the group indicated in the first ER-Hop TLV (Group 1), following normal routing for the specific node (A).
- The node that receives the message identifies itself as part of the group indicated in the first ER-Hop TLV, and that it is not the specific node (A) in the second ER-Hop TLV. Further, it realizes that the specific node (A) is one of its next hops.
- It removes the first ER-Hop TLVs and sends a Label Request Message to the specific node (A).
- The specific node (A) recognizes itself in the first ER-Hop TLV and removes the specific ER-Hop TLV.
- It sends a Label Request Message to a node that is a member of the group (Group 2) indicated in the ER-Hop TLV.
- The node that receives the message identifies itself as part of the group indicated in the first ER-Hop TLV, and further realizes that the specific egress node (B) is one of its next hops.
- It sends a Label Request Message to the specific egress node (B).
- The specific egress node (B) recognizes itself as the egress for the CR-LSP and returns a Label Mapping Message, which traverses the same path as the Label Request Message in the opposite direction ๐ฆ
Appendix B. QoS Service Examples
B.1 Service Examples
Building an end-to-end service is the result of the rules enforced at the edge and the treatment that packets get at the network nodes ๐ The rules define the traffic conditioning actions implemented at the edge, and they include policing with pass, mark, and drop capabilities. The edge rules are expected to be defined by mutual agreements between the service providers and their customers, and they'll be an essential part of the SLA. So the edge rules are not included in the signaling protocol.
Packet treatment at a network node is usually called the local behavior. Local behavior could be specified in many ways. One example is the service frequency introduced in section 4.3.2.1, together with the resource reservation rules implemented at the nodes โจ
Edge rules and local behaviors are the main building blocks for end-to-end service construction. The table below shows how the building block approach applies to constructing different services, including those defined for ATM ๐
Service PDR PBS CDR CBS EBS Service Conditioning
Examples Frequency Action
DS S S =PDR =PBS 0 Frequent drop>PDR
TS S S S S 0 Unspecified drop>PDR,PBS
mark>CDR,CBS
BE inf inf inf inf 0 Unspecified -
FRS S S CIR ~B_C ~B_E Unspecified drop>PDR,PBS
mark>CDR,CBS,EBS
ATM-CBR PCR CDVT =PCR =CDVT 0 VeryFrequent drop>PCR
ATM-VBR.3(rt) PCR CDVT SCR MBS 0 Frequent drop>PCR
mark>SCR,MBS
ATM-VBR.3(nrt) PCR CDVT SCR MBS 0 Unspecified drop>PCR
mark>SCR,MBS
ATM-UBR PCR CDVT - - 0 Unspecified drop>PCR
ATM-GFR.1 PCR CDVT MCR MBS 0 Unspecified drop>PCR
ATM-GFR.2 PCR CDVT MCR MBS 0 Unspecified drop>PCR
mark>MCR,MFS
int-serv-CL p m r b 0 Frequent drop>p
drop>r,b
S= User specified
In the table above, DS refers to a delay sensitive service, where the network commits to deliver user datagrams at a rate of PDR with high probability, with minimum delay and delay requirements. Datagrams in excess of PDR will be discarded ๐ธ
TS refers to a generic throughput sensitive service, where the network commits to deliver user datagrams at a rate of at least CDR with high probability. The user may transmit at a rate higher than CDR, but datagrams in excess of CDR would have a lower probability of being delivered.
BE is the best effort service, and it implies there are no expected service guarantees from the network ๐
B.2 Establishing CR-LSP Supporting Real-Time Applications
In this scenario the customer needs to establish an LSP to support real-time applications like voice and video ๐ The Delay-sensitive (DS) service is requested in this case.
The first step is specifying the traffic parameters in the signaling message. The two parameters of interest to the DS service are PDR and PBS, and the user specifies their values based on their requirements. Since all the traffic parameters are included in the signaling message, appropriate values must be assigned to all of them. For the DS service, the CDR and CBS values are set equal to PDR and PBS respectively. An indication of whether the parameter values are subject to negotiation is flagged ๐ซถ
The transport characteristics of the DS service require Frequent frequency to be requested, to reflect the real-time delay requirements of the service.
In addition to the transport characteristics, both the network provider and the customer need to agree on the actions enforced at the edge. The specification of those actions is expected to be part of the service level agreement (SLA) negotiation, and it is not included in the signaling protocol. For the DS service, the edge action is to drop packets that exceed the PDR and PBS specifications. The signaling message is sent in the direction of the ER path, and the LSP is established following the normal LDP procedures. Each LSR applies its admission control rules. If sufficient resources are not available and the parameter values are subject to negotiation, then the LSR could negotiate down PDR, PBS, or both ๐
The new parameter values are echoed back in the Label Mapping Message. LSRs might need to re-adjust their resource reservations based on the new traffic parameter values ๐ฅ
B.3 Establishing CR-LSP Supporting Delay Insensitive Applications
In this example we assume a throughput sensitive (TS) service is requested. For resource allocation, the user assigns values for PDR, PBS, CDR, and CBS. The negotiation flag is set if the traffic parameters are subject to negotiation. Since the service is delay insensitive by definition, the Unspecified frequency is signaled to indicate that service frequency is not an issue ๐
Similar to the previous example, the edge actions are not subject to signaling and are specified in the service level agreement between the user and the network provider.
For the TS service, the edge rules might include marking to indicate high discard precedence values for all packets that exceed CDR and CBS. The edge rules will also include dropping packets that conform to neither PDR nor PBS ๐ง
Each LSR of the LSP is expected to run its admission control rules and negotiate traffic parameters down if sufficient resources do not exist. The new parameter values are echoed back in the Label Mapping Message. LSRs might need to re-adjust their resources based on the new traffic parameter values โจ
10. Author's Addresses ๐
Here's who wrote this, bestie ๐
Loa Andersson
Utfors Bredband AB
Rasundavagen 12 169 29
Solna
Phone: +46 8 5270 50 38
EMail: loa.andersson@utfors.se
Ross Callon
Juniper Networks
1194 North Mathilda Avenue,
Sunnyvale, CA 94089
Phone: 978-692-6724
EMail: rcallon@juniper.net
Ram Dantu
Netrake Corporation
3000 Technology Drive, #100
Plano Texas, 75024
Phone: 214 291 1111
EMail: rdantu@netrake.com
Paul Doolan
On The Beach Consulting Corp
34 Mill Pond Circle
Milford MA 01757
Phone 617 513 852
EMail: pdoolan@acm.org
Nancy Feldman
IBM Research
30 Saw Mill River Road
Hawthorne, NY 10532
Phone: 914-784-3254
EMail: Nkf@us.ibm.com
Andre Fredette
ANF Consulting
62 Duck Pond Dr.
Groton, MA 01450
EMail: afredette@charter.net
Eric Gray
600 Federal Drive
Andover, MA 01810
Phone: (978) 689-1610
EMail: eric.gray@sandburst.com
Juha Heinanen
Song Networks, Inc.
Hallituskatu 16
33200 Tampere, Finland
EMail: jh@song.fi
Bilel Jamoussi
Nortel Networks
600 Technology Park Drive
Billerica, MA 01821
USA
Phone: +1 978 288-4506
Mail: Jamoussi@nortelnetworks.com
Timothy E. Kilty
Island Consulting
Phone: (978) 462 7091
EMail: tim-kilty@mediaone.net
Andrew G. Malis
Vivace Networks
2730 Orchard Parkway
San Jose, CA 95134
Phone: +1 408 383 7223
EMail: Andy.Malis@vivacenetworks.com
Muckai K Girish
Atoga Systems
49026 Milmont Drive
Fremont, CA 94538
EMail: muckai@atoga.com
Tom Worster
Phone: 617 247 2624
EMail: fsb@thefsb.org
Liwen Wu
Cisco Systems
250 Apollo Drive
Chelmsford, MA. 01824
Phone: 978-244-3087
EMail: liwwu@cisco.com
Full Copyright Statement โจ
Okay bestie, legal stuff is the one place I keep the exact words ๐
Copyright (C) The Internet Society (2002). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement ๐
Funding for the RFC Editor function is currently provided by the Internet Society. ๐ซถ
๐ฆ where this page comes from
- ietf: rfc3212 2002-01
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms