RFC 6689

Usage of the RSVP ASSOCIATION Object

πŸ“… published July 2012, from ietf

Internet Engineering Task Force (IETF) πŸŽ€

Request for Comments: 6689 πŸ’– Author: L. Berger, LabN 🫢 Category: Informational πŸ¦‹ Date: July 2012 πŸ“… ISSN: 2070-1721 ✨

It has no Obsoletes or Updates line in its header, so it doesn't list any. πŸ™ˆ

Usage of the RSVP ASSOCIATION Object πŸ‘‘

Abstract ✨

okay so the RSVP ASSOCIATION object is defined for GMPLS-controlled label switched paths (LSPs) 🧚 in this context, the object is used to link recovery LSPs to the LSP they're protecting πŸ”₯ this doc walks through how that association is supposed to be provided for GMPLS recovery πŸ’… it doesn't define any new procedures or mechanisms, and it's strictly informative in nature 🌸

Status of This Memo πŸ“œ

this doc is not an Internet Standards Track specification, it's just published for informational purposes πŸ¦‹

it's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community πŸ’œ it got public review and was approved for publication by the Internet Engineering Steering Group (IESG) ✨ not every IESG-approved doc is a candidate for any level of Internet Standard, see Section 2 of RFC 5741 πŸ™ˆ

info about the current status of this doc, any errata, and how to give feedback is at http://www.rfc-editor.org/info/rfc6689 🌈

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights 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 in effect on the date of publication πŸ“œ please actually read these, bestie, because they explain your rights and restrictions for this doc 🫢 any 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're provided without warranty as described in the Simplified BSD License πŸ’…

Table of Contents πŸ—‚οΈ

   1. Introduction ....................................................2
   2. Background ......................................................2
      2.1. LSP Association ............................................3
      2.2. End-to-End Recovery LSP Association ........................4
      2.3. Segment Recovery LSP Association ...........................7
      2.4. Resource Sharing LSP Association ...........................8
   3. Association of GMPLS Recovery LSPs ..............................8
   4. Security Considerations ........................................10
   5. Acknowledgments ................................................10
   6. References .....................................................10
      6.1. Normative References ......................................10
      6.2. Informative References ....................................11

1. Introduction ✨

okay so end-to-end and segment recovery are defined for GMPLS-controlled label switched paths (LSPs) in [RFC4872] and [RFC4873], respectively 🧚 both definitions use the ASSOCIATION object to link recovery LSPs to the LSP they're protecting πŸ’– this doc gives extra narrative on how those associations are supposed to be identified πŸ¦‹ it does not define any new procedures or mechanisms and is strictly informative in nature 🌸

you might be wondering why this doc is even needed, and that's valid πŸ™ˆ but questions kept coming up in the Common Control and Measurement Plane (CCAMP) working group about how to properly interpret the ASSOCIATION object in the context of end-to-end and segment recovery 😭 the working group agreed this doc should be produced to close the matter once and for all πŸ’… it formalizes the explanation Adrian Farrel gave in an e-mail to the working group, see [AF-EMAIL] πŸ‘‘ and to be clear, this doc in no way modifies the normative definitions of end-to-end and segment recovery, see [RFC4872] or [RFC4873] πŸ’œ

2. Background 🌈

this section reviews the definition of LSP association in the contexts of end-to-end and segment recovery, as defined in [RFC4872] and [RFC4873] ✨ it merely reiterates what's already been defined 🫢 if there are any differences between this text and [RFC4872] or [RFC4873], the earlier RFCs are the authoritative text, no debate πŸ’…

2.1. LSP Association πŸ¦‹

[RFC4872] introduces the concept and the mechanisms that support associating one LSP with another LSP across different RSVP - Traffic Engineering (RSVP-TE) sessions 🧚 this association is enabled through the ASSOCIATION object πŸ”₯ the ASSOCIATION object is defined in Section 16 of [RFC4872], and it's explicitly defined as having both general application and specific use within the context of recovery πŸ’– end-to-end recovery usage is defined in [RFC4872] and is covered in Section 2.2 of this document πŸ’œ segment recovery usage is defined in [RFC4873] and is covered in Section 2.3 of this document 🌸 resource sharing type LSP association is also defined in [RFC4873] πŸ™ˆ strictly speaking, that's beyond the scope of this doc, but it's covered in Section 2.4 of this document for completeness 🫢 the rest of this section covers generic usage of the ASSOCIATION object πŸ’…

in general, LSP association using the ASSOCIATION object can happen based on the values carried in the ASSOCIATION object ✨ which means LSPs can be associated independently of, and across, different sessions 🌈 this is a huge glow-up compared to the LSP association possible in base MPLS [RFC3209] and GMPLS [RFC3473] πŸ‘‘ literally iconic πŸ”₯

when the ASSOCIATION object is in play, LSP association is always initiated by an upstream node, which inserts the appropriate ASSOCIATION objects in the Path message of the LSPs that are to be associated 🧚 downstream nodes then correlate LSPs based on the ASSOCIATION objects they receive πŸ’– multiple types of LSP association are supported by the ASSOCIATION object, and the downstream correlation is made based on the type πŸ¦‹

[RFC4872] defines Class Types (C-Types) 1 and 2 of the ASSOCIATION object πŸ’œ both have essentially the same semantics, and they only differ in the type of address carried (IPv4 and IPv6) 🌸 the defined objects carry multiple fields, and taken together those fields let you identify which LSPs are associated with one another 🫢 the fields defined in [RFC4872] are:

o Association Type: This field identifies the usage, or application, of the ASSOCIATION object. The currently defined values are "Recovery" [RFC4872] and "Resource Sharing" [RFC4873]. This field also scopes the interpretation of the object. In other words, the type field is included when matching LSPs (i.e., the type fields must match), and the way associations are identified may be type dependent. πŸ“œ

o Association Source: This field is used to provide global scope (within the address space) to the identified association. There are no specific rules in the general case for which an address should be used by a node creating an ASSOCIATION object beyond that the address is "associated to the node that originated the association", see [RFC4872]. 🧚

o Association ID: This field provides an "identifier" that further scopes an association. Again, this field is combined with the other ASSOCIATION object fields to support identification of associated LSPs. The generic definition does not provide any specific rules on how matching is to be done, so such rules are governed by the Association Type. Note that the definition permits the association of an arbitrary number of LSPs. πŸ’…

as defined, the ASSOCIATION object may only be carried in a Path message, so LSP association takes place based on the Path state πŸ¦‹ the definition permits one or more objects to be present πŸ’– supporting multiple objects means an LSP can be associated with other LSPs in more than one way at a time πŸ”₯ for example, an LSP might carry one ASSOCIATION object to associate it with another LSP for end-to-end recovery, a second ASSOCIATION object to associate it with another LSP for segment recovery, and a third ASSOCIATION object to associate it with yet another LSP for resource sharing πŸ‘‘ three hats, one LSP, no notes πŸ’€βœ¨


2.2. End-to-End Recovery LSP Association ✨

okay so the association of LSPs for end-to-end LSP recovery is defined in Section 16.2 of [RFC4872] πŸ¦‹ there are also a bunch of extra conformance statements (aka statements using [RFC2119] key words) in Sections 7.3, 8.3, 9.3, and 11.1 of [RFC4872]. bestie, when you analyze this definition (like with ANY Standards Track RFC) you have to sort out which statements use [RFC2119] key words (these are the conformance ones πŸ’…) and which ones don't (these are only informative, no cap). it's giving homework, but it's so worth it 🌸

end-to-end recovery-related LSP association can happen in two distinct forms, per Section 16.2 πŸŽ€

  • a. Between multiple (one or more) working LSPs and a single shared (associated) recovery LSP. this basically matches the shared 1:N (N >= 1) recovery type described in the other sections of [RFC4872] πŸ’œ
  • b. Between a single working LSP and multiple (one or more) recovery LSPs. this basically matches all the other recovery types described in [RFC4872] ✨

both forms share the same Association Type (Recovery) and the same Association Source (the working LSP's tunnel sender address) 🧚 they also share the same definition of the Association ID, which is (quoting [RFC4872]):

The Association ID MUST be set to the LSP ID of the LSP being protected by this LSP or the LSP protecting this LSP. If unknown, this value is set to its own signaled LSP_ID value (default). Also, the value of the Association ID MAY change during the lifetime of the LSP.

the interpretation is pretty straightforward πŸ’– the Association ID carries one of three values:

  • The LSP ID of the LSP being protected.
  • The LSP ID of the protection LSP.
  • In the case where the matching LSP is not yet known (i.e., initiated), the LSP ID value of the LSP itself.

the text also explicitly allows changing the Association ID during the lifetime of an LSP πŸ‘‘ but this is only an option. it's neither required (i.e., "MUST") nor recommended (i.e., "SHOULD"). it should be noted that [RFC4872] does NOT describe when a change should be initiated or how to actually do it πŸ™ˆ so clearly you need to be careful when you change the Association ID, so the old association doesn't get lost during the transition to the new one. main character caution energy 🫢

the text doesn't preclude (so we assume) that one or more ASSOCIATION objects can also be added to an LSP that was originated without any ASSOCIATION objects. again, that's a case [RFC4872] doesn't explicitly discuss πŸ“

so from all this, the following combinations can happen 🌈

Case 1. When the ASSOCIATION object of the LSP being protected is initialized before the ASSOCIATION objects of any recovery LSPs are initialized, the Association ID in the LSP being protected and in any recovery LSPs will carry the same value, and that value will be the LSP ID value of the LSP being protected.

Case 2. When the ASSOCIATION object of a recovery LSP is initialized before the ASSOCIATION object of any protected LSP is initialized, the Association ID in the recovery LSP and in any LSPs being protected by that LSP will carry the same value, and that value will be the LSP ID value of the recovery LSP.

Case 3. When the ASSOCIATION objects of both the LSP being protected and the recovery LSP are initialized concurrently, the Association ID carried in the LSP being protected is the LSP ID value of the recovery LSP, and the Association ID carried in the recovery LSP is the LSP ID value of the LSP being protected. since this case can only apply to LSPs with matching tunnel sender addresses, its scope is limited to end-to-end recovery. note that this is implicit in [RFC4872], since its scope is limited to end-to-end recovery πŸ¦‹

in practical terms, Case 2 only happens with the shared 1:N (N >= 1) end-to-end recovery type, and Case 1 happens with all the other end-to-end recovery types πŸ’… Case 3 is allowed, but how often it shows up is up for interpretation πŸ€·β€β™€οΈ some people think it'll be the common case, and that working and recovery LSPs will often start out with no ASSOCIATION objects and then get Case 3 objects once the LSPs are established. others think Case 3 will rarely, if ever, happen 😭 either way it doesn't change interoperability much, because an [RFC4872]-compliant implementation needs to properly handle (identify associations for) all three cases πŸŽ€

it's important to note that Section 16.2 of [RFC4872] provides no further requirements on how or when the Association ID value is selected. the other sections DO give more narrative and three additional requirements πŸ”₯ generally, the narrative highlights Case 3 but doesn't rule out the other cases. the three additional requirements, by [RFC4872] section number, are:

  • Section 7.3 -- "The Association ID MUST be set by default to the LSP ID of the protected LSP corresponding to N = 1."

when you put this together with the three cases above, you can see it clarifies which LSP ID value should be used when a single shared protection LSP is established at the same time as Case 3, or after Case 2, with more than one LSP to be protected πŸ’œ

  • Section 8.3 -- "Secondary protecting LSPs are signaled by setting in the new PROTECTION object the S bit and the P bit to 1, and in the ASSOCIATION object, the Association ID to the associated primary working LSP_ID, which MUST be known before signaling of the secondary LSP."

this clarifies that with the "Rerouting without Extra-Traffic" type of recovery, you're required to follow Case 1 or Case 3, but NOT Case 2 🫢

  • Section 9.3 -- "Secondary protecting LSPs are signaled by setting in the new PROTECTION object the S bit and the P bit to 1, and in the ASSOCIATION object, the Association ID to the associated primary working LSP_ID, which MUST be known before signaling of the secondary LSP."

this clarifies that with the "Shared-Mesh Restoration" type of recovery, you're required to follow Case 1 or Case 3, but NOT Case 2 ✨

  • Section 11.1 -- "In both cases, the Association ID of the ASSOCIATION object MUST be set to the LSP ID value of the signaled LSP."

this clarifies that with the "LSP Rerouting" type of recovery, you're required to follow Case 1 or Case 3, but NOT Case 2 🌸


2.3. Segment Recovery LSP Association 🧚

GMPLS segment recovery is defined in [RFC4873]. segment recovery reuses the LSP association mechanisms, including the Association Type field value, defined in [RFC4872]. the main text about this in [RFC4873] says:

3.2.1. Recovery Type Processing Recovery type processing procedures are the same as those defined in [RFC4872], but processing and identification occur with respect to segment recovery LSPs. Note that this means that multiple ASSOCIATION objects of type recovery may be present on an LSP.

so this means Case 2 (from above) is what you follow πŸ’– and the Association Source is set to the tunnel sender address of the segment recovery LSPs. the explicit exclusion of Case 3 isn't listed, because its non-applicability is considered obvious to an informed reader πŸ™ˆ (honestly, having that exclusion spelled out might have saved us from needing this document 😭)


2.4. Resource Sharing LSP Association 🌈

Section 3.2.2 of [RFC4873] defines another type of LSP association, used for "Resource Sharing" πŸ“ resource sharing lets you share resources across LSPs with different SESSION objects. without this object, you can only share across LSPs with a shared SESSION object (see [RFC3209]) πŸ’…

resource sharing is indicated with a new Association Type value. since the Association Type field value isn't the same as the one used for recovery type LSP association, the semantics for associating LSPs using an ASSOCIATION object with the new type are different from recovery type LSP association πŸ¦‹

Section 3.2.2 of [RFC4873] states these rules for constructing an ASSOCIATION object for resource sharing type LSP association:

  • The Association Type value is set to "Resource Sharing".
  • Association Source is set to the originating node's router address.
  • The Association ID is set to a value that uniquely identifies the set of LSPs to be associated.

setting the Association ID to the working LSP's LSP ID value is mentioned, but with the "MAY" key word. per [RFC2119], this means using the LSP ID value is completely optional, and the choice of Association ID is truly up to the originating node πŸ‘‘

additionally, the identical ASSOCIATION object is used for all LSPs that should be associated using Resource Sharing. this is different from recovery type LSP association, where the LSPs can carry different Association ID fields and still be associated (see Case 3 in Section 2.2) πŸŽ€ iykyk πŸ’œ

3. Association of GMPLS Recovery LSPs ✨

Okay so the last part was all about building an ASSOCIATION object, including how to pick the value for the Association ID field, as defined in [RFC4872] and [RFC4873]. πŸ’– This section is the other side of that: how a downstream receiver works out that one LSP is associated with another LSP based on those ASSOCIATION objects. Also, this section does not change the normative definitions of end-to-end and segment recovery, so go read [RFC4872] or [RFC4873] for those. πŸŽ€

The ASSOCIATION object only shows up in Path messages, so the identification only happens based on Path state. πŸ¦‹ To spot a recovery type association between LSPs, a downstream receiver needs to be able to handle all three cases from Section 2.2. Cases 1 and 2 are simple, because the associated LSPs carry the identical ASSOCIATION object. That's always true for resource sharing type LSP association too, see Section 2.4. ✨ Case 3 is the messy one, because the LSPs can have different Association ID fields and still be associated. πŸ™ˆ The receiver also needs to allow for changes in the set of ASSOCIATION objects included in an LSP. Iykyk. πŸ’…

Based on the [RFC4872] and [RFC4873] definitions for the ASSOCIATION object, here's the behavior you can follow so a receiver always correctly identifies the association between LSPs. 🫢

  • Covering Cases 1 and 2 and resource sharing type LSP association:

For ASSOCIATION objects with the Association Type field values of "Recovery" (1) and "Resource Sharing" (2), you identify the association between LSPs by comparing all fields of each ASSOCIATION object carried in the Path messages associated with each LSP. 🌸 An association exists when the same values are carried in all fields of an ASSOCIATION object in each LSP's Path message. Also, more than one association may exist (for example, to support different association types or end-to-end and segment recovery), so all carried ASSOCIATION objects need to be examined. πŸ”₯

  • Covering Case 3:

Any ASSOCIATION object with the Association Type field value of "Recovery" (1) that doesn't yield an association in the prior comparison needs to be checked to see if a Case 3 association is indicated. πŸ‘‘ Since this case only applies to end-to-end recovery, the first step is to find any other LSPs with the identical SESSION object fields and the identical tunnel sender address fields as the LSP carrying the ASSOCIATION object. If such LSPs exist, a Case 3 association is identified by comparing the value of the Association ID field with the LSP ID field of the other LSP. If the values are identical, then an end-to-end recovery association exists. ⭐ And because this behavior only applies to end-to-end recovery, this check only needs to be performed at the egress. 🧚

No additional behavior is needed to support changes in the set of ASSOCIATION objects included in an LSP, as long as the change represents either a new association or a change in identifiers made as described in Section 2.2. Easy. πŸ’œ


4. Security Considerations πŸ’€

This document reviews procedures defined in [RFC4872] and [RFC4873] and does not define any new procedures. So, no new security considerations are introduced in this document. ⚠️ Still, these are the procedures you're working with, so keep the full security story of [RFC4872] and [RFC4873] in mind. πŸ”’

5. Acknowledgments 🫢

This document formalizes the explanation provided in an e-mail to the working group authored by Adrian Farrel, see [AF-EMAIL]. πŸ’Œ It was written in response to questions raised in the CCAMP working group by Nic Neate <nhn@dataconnection.com>. Valuable comments and input were also received from Dimitri Papadimitriou, Francois Le Faucheur, and Ashok Narayanan. Thank you, legends! πŸ‘‘βœ¨

6. References πŸ“š

6.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC4872]  Lang, J., Ed., Rekhter, Y., Ed., and D. Papadimitriou,
           Ed., "RSVP-TE Extensions in Support of End-to-End
           Generalized Multi-Protocol Label Switching (GMPLS)
           Recovery", RFC 4872, May 2007.  Lang, J., Rekhter, Y., and
           Papadimitriou, D., "RSVP-TE

[RFC4873]  Berger, L., Bryskin, I., Papadimitriou, D., and A. Farrel,
           "GMPLS Segment Recovery", RFC 4873, May 2007.

[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.

[RFC3473]  Berger, L., Ed., "Generalized Multi-Protocol Label
           Switching (GMPLS) Signaling Resource ReserVation
           Protocol-Traffic Engineering (RSVP-TE) Extensions", RFC
           3473, January 2003.

6.2. Informative References

[AF-EMAIL] Farrel, A. "Re: Clearing up your misunderstanding of the
           Association ID", CCAMP working group mailing list,
           http://www.ietf.org/mail-archive/web/ccamp/
           current/msg00644.html, November 18, 2008.

Author's Address πŸŽ€

Lou Berger
LabN Consulting, L.L.C.
Phone: +1-301-468-9228
EMail: lberger@labn.net
πŸ“¦ where this page comes from