RFC 5710
PathErr Message Triggered MPLS and GMPLS LSP Reroutes
PathErr Message Triggered MPLS and GMPLS LSP Reroutes π¦
okay bestie, so this is RFC 5710 β¨. It's an IETF doc on the Standards Track (ISSN 2070-1721), published in January 2010. The authors are L. Berger from LabN, D. Papadimitriou from Alcatel Lucent, and JP. Vasseur from Cisco π . The header doesn't list anything it obsoletes or updates, so it stands on its own πΈ.
Abstract
okay so the abstract is giving "here's the vibe" π. This doc explains how RSVP PathErr messages can be used to trigger rerouting of MPLS and GMPLS point-to-point Traffic Engineering (TE) Label Switched Paths (LSPs) without first removing LSP state or resources π«Ά. Rerouting like this is handy in several cases, like soft-preemption and graceful shutdown π₯. It only uses Standards Track mechanisms that already exist, so it leans on RSVP-TE and just lays out a sequence of actions to run π§. It also defines a brand-new reroute-specific error code, so future docs can add their own reroute-application-specific error values π.
Status of This Memo
this part is the official paperwork π. It's an Internet Standards Track document π. It's a product of the Internet Engineering Task Force (IETF), it represents the consensus of the IETF community, it got public review, and the Internet Engineering Steering Group (IESG) approved it for publication π. More info on Internet Standards is in Section 2 of RFC 5741 β¨. For the current status, any errata, and how to give feedback, check http://www.rfc-editor.org/info/rfc5710 πΈ.
Copyright Notice
Β© vibes first: the copyright is Copyright (c) 2010 IETF Trust and the persons identified as the document authors. and everything's reserved π
. This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stood on the publication date, so read those carefully π. Code Components pulled out of this doc must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, same as the Simplified BSD License says π.
Table of Contents
1. Introduction ....................................................3
1.1. Conventions Used in This Document ..........................4
2. Reroute Requests ................................................4
2.1. Processing at Requesting Node ..............................4
2.1.1. Reroute Request Timeouts ............................5
2.2. Processing at Upstream Node ................................6
2.3. Processing at Ingress ......................................6
3. Example Reroute Requests ........................................7
3.1. Node Reroute Request .......................................7
3.2. Interface Reroute Request ..................................7
3.3. Component Reroute Request ..................................8
3.4. Label Reroute Request ......................................9
4. IANA Considerations .............................................9
5. Security Considerations ........................................10
6. References .....................................................10
6.1. Normative References ......................................10
6.2. Informative References ....................................11
7. Acknowledgments ................................................11
1. Introduction β¨
okay so RSVP (see [RFC2205]) got extended to control TE LSPs for both MPLS and GMPLS, in [RFC3209] and [RFC3473] respectively π¦. In every case, a PathErr message reports errors to nodes upstream of the one that detected the error π. As [RFC2205] defines it, and [RFC3209] left alone, PathErr messages "do not change path state in the nodes through which they pass" π«Ά. BUT, even with that rule, PathErr messages are mostly used to report errors during LSP establishment, which means the RSVP-TE processing that happens before the ingress gets a Resv message π₯. (See [RFC5711] for a wider chat about PathErr handling π§.)
Support for that usage got a glow-up when the Path_State_Removed flag arrived in [RFC3473] π . It lets a processing node free up related LSP state and resources πΈ. [RFC4920] covers PathErr usage during LSP establishment in detail, and explains how a node can say that it, or one of its associated resources, should be avoided (aka routed around) during LSP establishment π.
PathErr messages can also do their thing for other cases that show up after an LSP is already up π. This doc focuses on those, where a node uses PathErr to ask an upstream node to reroute an LSP around the node doing the indicating, or around resources tied to that node π. Soft-preemption and graceful shutdown are the big examples (see [RFC5712] and [GRACEFUL]) π.
This doc uses the term "reroute request" for a node's indication that an upstream reroute should happen π. It describes how a node can start a reroute request without disrupting LSP data traffic, or, when that's what it wants, with data traffic disrupted and the LSP-associated state and resources removed π«Ά. This doc only applies to point-to-point LSPs. Point-to-multipoint LSPs are for further study π.
The reroute request mechanisms are derived from [RFC4920], and the error codes come from [RFC4736] β¨. This doc covers two things: (1) how a non-disruptive reroute request can be issued, and (2) how, based on an optional "timeout" period, rerouting can be forced by removing LSP state and associated resources and signaling that removal π₯. Even though it shows how existing protocol definitions can support rerouting, it also defines a new reroute-specific error code so future reroute-application-specific error values have a home π§.
1.1. Conventions Used in This Document
the keyword bit π€: 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] π.
2. Reroute Requests π
this section is where the downstream node says "hey, I'd love for an upstream node to reroute this LSP," and where upstream nodes respond π¦. Initiating nodes, transit nodes, and ingress nodes each get their own part πΈ.
2.1. Processing at Requesting Node π
when a transit or egress node wants to request rerouting of an established LSP, it first checks if it can act on the reroute request locally π. That check MUST be performed on the condition that the Explicit Route Object (ERO) (see [RFC3209]) received in the LSP's incoming Path message does not preclude LSP rerouting π«Ά. Examples of requests that can trigger reroutes are avoiding an outgoing interface, a component, a label resource, or a next hop that isn't explicitly listed in the ERO π₯. In all cases, the actual repair action SHOULD be performed after verifying that local policy allows local repair for that LSP/state π§. So basically, any traffic-rerouting action tied to this state must be initiated and completed only as local node policy allows π.
When the node can't act locally, it MUST issue a PathErr message saying it can't do local rerouting π. That PathErr message MUST contain an ERROR_SPEC object in the format defined in [RFC2205] or [RFC3473] π. It MUST include one of these combinations of error codes and error values π:
- "
Notify/Local node maintenance required" to support backwards compatibility and to reroute around the local node. - "
Notify/Local link maintenance required" to support backwards compatibility and to reroute around a local interface. - "
Reroute/<any Reroute error value>" for future compatibility, and when backwards compatibility isn't a concern.
The rest of the ERROR_SPEC object gets built based on the local rerouting decision and the resource the upstream node should avoid π . It's really important to note that the address and TLVs carried by the ERROR_SPEC object identify the resource to be avoided, NOT the error code and value π«Ά.
When the reroute decision redirects traffic around the local node, the local node MUST be indicated in the ERROR_SPEC object π¦. Otherwise, meaning the reroute decision does NOT redirect traffic around the local node, the impacted interface MUST be indicated in the ERROR_SPEC object, and the IF_ID ([RFC3473]) ERROR_SPEC object formats SHOULD be used to indicate that impacted interface π.
The IF_ID ([RFC3473]) ERROR_SPEC object format MUST be used for a reroute request that's more specific than an interface π₯. The TLVs defined in [RFC3471], as updated by [RFC3477], [RFC4201], and [RFC4920], MAY be used to provide specific, additional reroute request info, like rerouting around a specific label π§. The principles for ERROR_SPEC object construction, defined in Section 6.3.1 of [RFC4920], SHOULD be followed πΈ.
2.1.1. Reroute Request Timeouts β°
okay so reroute request timeouts are how you remove an LSP when nobody responds to a reroute request π. A reroute request timeout is used when an LSP is going to be removed once the reroute request timeout period expires π . When that removal is wanted, the initiating node MUST start a timeout after it initiates a reroute request, and during that timeout it expects to get a response to the reroute request π«Ά. Valid responses are a PathTear message, or a trigger Path message with an ERO that avoids the resource indicated in the reroute request π. If either type of message shows up, the timeout period MUST be canceled and no further action is needed π.
Also, normal refresh processing is NOT changed by reroute request timeouts π. That processing might remove Path state during the timeout period, and if it does, the timeout period MUST ALSO be canceled π.
If the reroute request timeout is reached, the initiating node MUST remove the LSP and its associated state and resources π₯. Removal of LSP state gets signaled downstream with a matching PathTear message π§. Removal gets signaled upstream with a PathErr message carrying the error code "Service preempted" π. The Path_State_Removed flag MUST be set if it's supported π. When Path_State_Removed isn't supported, a matching ResvTear MUST ALSO be sent πΈ.
that's the first chunk of the spec, bestie ππ
2.2. Processing at Upstream Node π¦
Okay bestie, so if a transit node's policy says it's allowed to handle reroute requests and do local repair, it MUST look at incoming PathErr messages to see if it can reroute something π. A reroute request shows up in a PathErr message that carries one of the error code and value combos from Section 2.1. Also, a conformant implementation MUST check for all three of those combinations, no skipping π .
A transit node MAY act on a reroute request locally when the ERO in the LSP's incoming Path message doesn't block the reroute. Loosely routed LSP next hops are one example πΈ. If the request can be handled locally, standard local repair processing MUST be followed β¨. The node SHOULD limit how many local repair attempts it makes π. And honestly? The expected norm is that local repair, and therefore this case, gets ruled out by policy, so don't get too excited π.
When the transit node supports [RFC4920] and is a boundary node, and Boundary rerouting is allowed, it SHOULD use a route request as a trigger to reroute the LSP π§. (Per [RFC4920], the Flags field of the LSP_ATTRIBUTES object in the initial Path message indicates "Boundary rerouting".) If the node is going to trigger a reroute, it MUST first identify an alternate path within the domain π. If it finds one, the node MUST terminate the PathErr message and issue a Path message that reflects that alternate path π. After that, processing continues per [RFC4920]. If there's no alternate path, the node just can't act on the reroute request, and that's the tea β.
When a transit node can't act on a reroute request locally under standard processing, it MUST propagate the received PathErr message to the previous hop π.
2.3. Processing at Ingress π
When reroute processing is supported, an ingress node MUST check received PathErr messages to figure out which ones are indicating reroute requests π. Again, the request shows up as a PathErr message carrying one of the error code and value combos from Section 2.1, and a conformant implementation MUST check for all three of those combinations π«Ά.
Once the ingress gets a reroute request, it MUST try to find an alternate path that avoids the node, interface, resource, etc. named in the ERROR_SPEC object π. If it can't find one, the reroute request MUST be discarded π. If it does find one, a corresponding make-before-break LSP SHOULD be initiated, and standard make-before-break procedures MUST be followed β. Very dramatic, very polite, very much a vibe.
3. Example Reroute Requests β¨
This section is just examples, so it's informative rather than prescriptive π. Reroute requests are always sent via PathErr messages. Like we talked about above, a PathErr message can carry either an [RFC2205] format ERROR_SPEC object or an IF_ID [RFC3473] format ERROR_SPEC object. The thing that tells you which resource to avoid is the address and TLVs in the ERROR_SPEC object, not the error value π.
3.1. Node Reroute Request πΈ
If the node should be avoided by an upstream node, the node that's starting the reroute can format the ERROR_SPEC per [RFC2205]. For example:
- IPv4 ERROR_SPEC object: Class = 6, C-Type = 1
+-------------+-------------+-------------+-------------+
| IPv4 Error Node Address (4 bytes) |
+-------------+-------------+-------------+-------------+
| Flags | Error Code | Error Value |
+-------------+-------------+-------------+-------------+
The node address is set to the local node's TE router address πΊοΈ. The error code is set to either "Notify/Local node maintenance required" or "Reroute/<any Reroute error value>".
3.2. Interface Reroute Request π¦
If a numbered interface should be avoided by an upstream node, the node starting the reroute can format the ERROR_SPEC per [RFC3473]. For example:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Class-Num (6) | C-Type (3) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Error Node Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Error Code | Error Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (1) | Length (8) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The node address is set to the local node's TE router address π§. The error code is set to either "Notify/Local link maintenance required" or "Reroute/<any Reroute error value>". The IP address is set to the TE address of the interface to be avoided π.
3.3. Component Reroute Request π
If an unnumbered component should be avoided by an upstream node, the node starting the reroute formats the ERROR_SPEC per [RFC4201]. For example:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Class-Num (6) | C-Type (3) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Error Node Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Error Code | Error Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (3) | Length (12) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface ID (32 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The node address is set to the local TE address used in the advertisement of the bundle associated with the component π‘. The error code is set to either "Notify/Local link maintenance required" or "Reroute/<any Reroute error value>". The Router ID is set to the local router ID, and the Interface ID is the identifier the local node assigned to the component link π.
3.4. Label Reroute Request π
If a label should be avoided by an upstream node, the node starting the reroute can format the ERROR_SPEC per [RFC4920]. For example:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Class-Num (6) | C-Type (3) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Error Node Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Error Code | Error Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (1) | Length (8) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type (6) | Length (8) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DOWNSTREAM_LABEL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The node address is set to the local node's TE router address π¦. The error code is set to either "Notify/Local link maintenance required" or "Reroute/<any Reroute error value>". The IP address is set to the TE address of the interface that supports the label to be avoided. DOWNSTREAM_LABEL indicates the label to be avoided π«Ά.
4. IANA Considerations ποΈ
IANA assigned values for the namespaces defined in this document and reviewed in this section π.
IANA made the assignment in the "Error Codes and Globally-Defined Error Value Sub-Codes" section of the "RSVP Parameters" registry:
34 Reroute [RFC5710]
This error code has the following defined Error Value sub-code:
0 = Generic LSP reroute request
Reroute error values should be allocated based on the following allocation policy, as defined in [RFC5226] π:
Range Registration Procedures
-------- ------------------------
0-32767 IETF Consensus
32768-65535 Private Use
5. Security Considerations π₯
Okay, this section is serious business, so pay attention π. Sections 9 of [RFC4920] and [RFC4736] should be used as the starting point for reviewing the security considerations related to the formats and mechanisms discussed in this document π‘οΈ. This document introduces a new error code, but that code is functionally equivalent to existing semantics. Specifically, it matches the error code/error value combinations of "Notify/Local node maintenance required" and "Notify/Local link maintenance required" π§. So, as far as security goes, this document introduces no new security considerations beyond what already applies to those existing formats and mechanisms π. Future documents may define new error values, and any considerations specific to those values should be discussed in the document that defines them β οΈ.
6. References π
6.1. Normative References π
okay bestie, these are the docs that RFC 5710 leans on hardcore, so they're the ones you need to have open next to it π§
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
- [RFC2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and S. Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 Functional Specification", RFC 2205, September 1997.
- [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP Tunnels", RFC 3209, December 2001.
- [RFC3471] Berger, L., Ed., "Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description", RFC 3471, January 2003.
- [RFC3473] Berger, L., Ed., "Generalized Multi-Protocol Label Switching (GMPLS) Signaling Resource ReserVation Protocol-Traffic Engineering (RSVP-TE) Extensions", RFC 3473, January 2003.
- [RFC3477] Kompella, K. and Y. Rekhter, "Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)", RFC 3477, January 2003.
- [RFC4201] Kompella, K., Rekhter, Y., and L. Berger, "Link Bundling in MPLS Traffic Engineering (TE)", RFC 4201, October 2005.
- [RFC4920] Farrel, A., Ed., Satyanarayana, A., Iwata, A., Fujita, N., and G. Ash, "Crankback Signaling Extensions for MPLS and GMPLS RSVP-TE", RFC 4920, July 2007.
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
6.2. Informative References π¦
these ones are extra reading, not required, but they're giving context and I'm obsessed π
- [RFC4736] Vasseur, JP., Ed., Ikejiri, Y., and R. Zhang, "Reoptimization of Multiprotocol Label Switching (MPLS) Traffic Engineering (TE) Loosely Routed Label Switched Path (LSP)", RFC 4736, November 2006.
- [GRACEFUL] Ali, Z., Vasseur, JP., Zamfir, A., and J. Newton, "Graceful Shutdown in MPLS and Generalized MPLS Traffic Engineering Networks", Work in Progress, September 2009.
- [RFC5711] Vasseur, JP., Ed., Swallow, G., and I. Minei, "Node Behavior upon Originating and Receiving Resource Reservation Protocol (RSVP) Path Error Messages", RFC 5711, January 2010.
- [RFC5712] Meyer, M., Ed. and JP. Vasseur, Ed., "MPLS Traffic Engineering Soft Preemption", RFC 5712, January 2010.
7. Acknowledgments π«Ά
the people who made this doc happen, and we love them for it π
This document was conceived along with Matthew Meyer. George Swallow provided valuable feedback. The General Area Review Team (Gen-ART) review was performed by Francis Dupont. πΈ
Authors' Addresses β¨
the humans behind the doc, with their contact info π
Lou Berger
Lou Berger
LabN Consulting, L.L.C.
Phone: +1-301-468-9228
EMail: lberger@labn.net
Dimitri Papadimitriou
Dimitri Papadimitriou
Alcatel Lucent
Francis Wellesplein 1,
B-2018 Antwerpen, Belgium
Phone: +32 3 240-8491
EMail: Dimitri.Papadimitriou@alcatel-lucent.be
JP Vasseur
JP Vasseur
Cisco Systems, Inc
11, Rue Camille Desmoulins
L'Atlantis
92782 Issy Les Moulineaux
France
EMail: jpv@cisco.com
that's the whole thing, bestie πβ¨π
π¦ where this page comes from
- ietf: rfc5710 2010-01
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms