RFC 5918

Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class (FEC)

πŸ“… published August 2010, from ietf

Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class (FEC) πŸ’–

Okay bestie, this is RFC 5918 and it's giving main character Standards Track energy ✨ It came out of the IETF in August 2010 (ISSN 2070-1721). The authors are R. Asati (Cisco Systems), I. Minei (Juniper Networks), and B. Thomas. The category is Standards Track, and the title block doesn't list anything it obsoletes or updates πŸ¦‹

Abstract 🌸

Okay so the Label Distribution Protocol (LDP) spec for the Wildcard Forward Equivalence Class (FEC) element has a few limitations, and kinda ngl they're annoying 😭 This doc fixes that by defining a Typed Wildcard FEC Element plus the procedures for using it. It also adds a new LDP capability so older routers stay compatible 🫢

Status of This Memo πŸ“

This is an Internet Standards Track document πŸ”₯

It's a product of the IETF, so it represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 5741 πŸ’œ

Info about the current status, any errata, and how to send feedback lives at http://www.rfc-editor.org/info/rfc5918 🌈

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved πŸ’…

So this document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Please read those carefully, because they spell out your rights and restrictions for this doc πŸ“– Any Code Components pulled out of this document have to include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Simplified BSD License describes ✨

Also, this document may include material from IETF Documents or IETF Contributions published or made public before November 10, 2008. The people who control the copyright in some of that material might not have given the IETF Trust permission to allow modifications outside the IETF Standards Process 😬 So unless you get a proper license from those copyright holders, this doc can't be modified outside the IETF Standards Process, and derivative works can't be made outside it either. The one exceptions are formatting it for publication as an RFC or translating it into languages other than English 🫢

Table of Contents 🧚

1. Introduction ....................................................3
2. Specification Language ..........................................4
3. The Typed Wildcard FEC Element ..................................4
4. Procedures for the Typed Wildcard FEC Element ...................5
5. Typed Wildcard FEC Capability ...................................6
6. Typed Wildcard FEC Element for Prefix FEC Element ...............7
7. Typed Wildcard FEC Element for Host and Wildcard FEC Elements ...8
8. IANA Considerations .............................................8
9. Security Considerations .........................................8
10. Acknowledgments ................................................9
11. References .....................................................9
   11.1. Normative References ......................................9
   11.2. Informative References ....................................9

1. Introduction ✨

Okay so LDP [RFC5036] hands out labels for Forwarding Equivalence Classes (FECs) πŸ¦‹ LDP uses FEC TLVs in its messages to specify FECs, and each FEC TLV holds one or more FEC elements. A FEC element has a FEC type and an optional type-dependent value πŸ’œ

RFC 5036 defines two FEC types (Prefix and Wildcard), and other documents add more, like [RFC4447] and [MLDP] 🌸

So here's the tea. As RFC 5036 explains, the Wildcard FEC Element refers to all FECs relative to an optional constraint. The only constraint RFC 5036 defines is the one that limits the Wildcard to "all FECs bound to a given label" πŸ™ˆ

The RFC 5036 version of the Wildcard FEC Element has these deficiencies, which make it less useful than it could be πŸ’€

  1. The Wildcard FEC Element is untyped. Sometimes you'd want to point at all FECs of one given type, as a constraint 😭
  2. The Wildcard FEC Element only works in Label Withdraw and Label Release messages. Sometimes it'd be super useful to have a typed Wildcard FEC Element in Label Request messages too πŸ“

This document:

  • addresses the limitations above by defining a Typed Wildcard FEC Element and the procedures for using it πŸ’–
  • specifies use of the LDP capability mechanism [RFC5561] at session establishment time, so a peer can be told that an LDP speaker can handle the Typed Wildcard FEC 🫢
  • specifies use of the Typed Wildcard FEC Element in a Label Request message πŸ”₯
  • specifies the Typed Wildcard FEC Element for the Prefix FEC Element that RFC 5036 defines πŸ‘‘

Also, this document does not change the procedures RFC 5036 specifies for the LDP Wildcard FEC Element. Hands off, RFC 5036 πŸ’…

2. Specification Language πŸ’…

Here's the official key-word part, copied exactly as it's written:

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

And the abbreviations you'll see:

  • LDP - Label Distribution Protocol 🌈
  • FEC - Forwarding Equivalence Class ✨
  • TLV - Type Length Value πŸŽ€
  • LSR - Label Switching Router 🧚

3. The Typed Wildcard FEC Element πŸ¦‹

Okay this is the star of the show πŸ‘‘ The Typed Wildcard FEC Element refers to all FECs of the specified type that meet the constraint. It specifies a 'FEC Element Type' and an optional constraint, which gives extra info πŸ’œ

Here's what the format looks like:

   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 2
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Typed (0x05)  | FEC Element   | Len FEC Type  |               |
   | Wildcard      | Type          | Info          |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
   |                                                               |
   ~          Additional FEC Type-specific Information             ~
   |                  (Optional)                                   |
   |                                               +-+-+-+-+-+-+-+-+
   |                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 1: Typed Wildcard FEC Element

Here's what each piece means πŸŽ€

  • Typed Wildcard: One-octet FEC Element Type (0x05).
  • FEC Element Type: One-octet FEC Element Type that says which FEC Element Type gets wildcarded. Please see Section 3.4.1 of RFC 5036 🧚
    • Any (future) document that specifies a new FEC Element Type (not defined in RFC 5036) should say whether typed wildcarding is needed for that FEC Element Type ✨
  • Len FEC Type Info: One octet giving the length in octets of the FEC Type Specific information field. It MUST be set to 0 if there is no Additional FEC Type-specific Information πŸ™ˆ
  • Additional FEC Type-specific Information (Optional): Extra info that's specific to the FEC Element Type and that's needed to fully specify the Typed Wildcard. If this field is absent, then all FECs of the specified FEC Type would be matched 🌸
    • Any (future) document that specifies Typed wildcarding for any FEC Element Type should also specify the length and format of the Additional FEC Type Specific Information, if it's included πŸ’œ

This document specifies one FEC Element Type instance (e.g., Prefix FEC) for the 'Typed Wildcard FEC Element' in Section 6 πŸ¦‹

4. Procedures for the Typed Wildcard FEC Element πŸ’–

Alright, the rules πŸ”₯ When a FEC TLV contains a Typed Wildcard FEC Element, the Typed Wildcard FEC Element MUST be the only FEC Element in the TLV. If an LDP speaker gets a FEC TLV with a Typed Wildcard FEC Element and any other FEC elements, then the LDP speaker should ignore the other FEC elements and keep processing as if the message only has the Typed Wildcard FEC Element 🫢

An LDP implementation that supports the Typed Wildcard FEC Element MUST support its use in Label Request, Label Withdraw, and Label Release messages πŸ’…

An LDP implementation that supports the Typed Wildcard FEC Element MUST support it for every FEC Element Type defined in [RFC5036] πŸ‘‘

Getting a Label Request message with a FEC TLV that contains a Typed Wildcard FEC Element is read as a request to send one or more Label Mappings for all FECs of the type named in the FEC Element Type field of that encoding 🌈

An LDP implementation that supports the Typed Wildcard FEC Element MUST support the following constraints whenever a Typed Wildcard FEC appears in a Label Withdraw or Label Release message 😭

  1. If the message carries an optional Label TLV, the Typed Wildcard FEC Element refers to all FECs of the specified FEC type bound to the specified label.
  2. If the message has no Label TLV, the Typed Wildcard FEC Element refers to all FECs of the specified FEC type.

Backwards compatibility with a router that doesn't support the Typed Wildcard FEC element is handled by the FEC procedures in RFC 5036. Here's the quote from RFC 5036 πŸŽ€

If it [an LSR] encounters a FEC Element type it cannot decode, it SHOULD stop decoding the FEC TLV, abort processing the message containing the TLV, and send an "Unknown FEC" Notification message to its LDP peer signaling an error.

So a router that gets a FEC TLV with a Typed Wildcard FEC element, either for a FEC Element Type it doesn't support or for one that doesn't support wildcarding, MUST stop decoding the FEC TLV, abort processing the message containing the TLV, and send an "Unknown FEC" Notification message to its LDP peer to signal an error πŸ’€

And last but not least, a router that gets a FEC TLV containing a Typed Wildcard FEC element MAY also use the mechanisms defined in [RFC5919] (say, if it had zero label bindings for the requested FEC type, etc.) 🧚

5. Typed Wildcard FEC Capability ✨

okay so you know how RFC 5036 FEC procedures are backward compatible with an LSR that doesn't support the Typed Wildcard FEC Element? πŸ’– That's great, but there's a catch. They don't give an LSR any way to find out whether its peer supports the element. The only option is to send a message that uses the FEC Element and then wait and see how the peer responds. Not very iconic πŸ’€

So the fix is a capability announcement. 🫢

An LDP speaker that supports the Typed Wildcard FEC Element MUST tell its peers about that support by including a Typed Wildcard FEC Element Capability Parameter [RFC5561] in its Initialization messages only. Initialization messages only, bestie, so don't go sprinkling it everywhere πŸ™ˆ

The Capability Parameter for the Typed Wildcard FEC capability is a TLV, and it 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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |U|F|Typed WCard FEC Cap(0x050B)|            Length             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |S| Reserved    |
  +-+-+-+-+-+-+-+-+

              Figure 2: Typed Wildcard FEC Capability Format

Here's what each piece needs to be πŸŽ€

  • U and F bits: MUST be 1 and 0, respectively, as per Section 3 of LDP Capabilities [RFC5561]. Yes, the U bit gets a 1 and the F bit gets a 0, no swapping allowed πŸ’…
  • Typed WCard FEC Cap: 0x050B
  • Length: Two octets. It MUST be set to 0x0001.
  • S-bit: MUST be 1 (indicates that capability is being advertised). The bit is literally saying "hey, I'm advertising this!" πŸ“£

6. Typed Wildcard FEC Element for Prefix FEC Element πŸ¦‹

RFC 5036 defines the Prefix FEC Element, but it never specifies a Typed Wildcard for it. Plot twist, right? 😭 This section fills that gap by specifying the Typed Wildcard FEC Element for Prefix FEC Elements.

The format of the Prefix FEC Typed Wildcard FEC Element (which we'll call "Prefix FEC Wildcard" for short) is based on Figure 1, and it 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 2
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Typed Wcard   | Type = Prefix |   Len = 2     |  Address...   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | ...Family     |
  +-+-+-+-+-+-+-+-+

       Figure 3: Format of Prefix FEC Element Using Typed Wildcard

Where:

  • FEC Element Type: "Prefix" FEC Element (0x02, per RFC 5036).
  • Len FEC Type Info: Two octets. It MUST be set to 0x0002.
  • Address Family: Two-octet quantity containing a value from the "ADDRESS FAMILY NUMBERS" registry on http://www.iana.org.

The procedures described in Section 4 apply to the Prefix FEC Wildcard processing. So the Section 4 rules are the ones you're using here, no new magic needed ✨

7. Typed Wildcard FEC Element for Host and Wildcard FEC Elements 🌸

Good news: there's no need to specify Typed Wildcard FEC Elements for the Host FEC Element specified by [RFC3036], and none for the Wildcard FEC Element specified by RFC 5036 either. Why? Because the [RFC3036] Host FEC Element has been removed from RFC 5036, and the Wildcard FEC Element is untyped by definition. So there's nothing to type 🧚

In other words, the 'FEC Element Type' field in 'Typed Wildcard FEC Element' MUST NOT be either 0x01 or 0x03. Those codes are off the table, babe πŸ™…β€β™€οΈ

8. IANA Considerations πŸ‘‘

This document introduces a new LDP FEC Element Type and a new LDP Capability, and IANA has assigned both πŸŽ‰

IANA has assigned a 'Typed Wildcard FEC Element' code point (0x05) from the LDP FEC Type Name Space. [RFC5036] splits the FEC Type Name Space into 3 regions: IETF Consensus region, First Come First Served region, and Private Use region. The code point 0x05 sits in the IETF Consensus range.

IANA has assigned a 'Typed Wildcard FEC Capability' code point (0x050B) from the TLV Type name space. [RFC5036] splits the TLV TYPE name space into 3 regions: IETF Consensus region, Vendor Private Use region, and Experimental Use region. The code point 0x050B is in the IETF Consensus range.

9. Security Considerations πŸ’€

Okay, this section is serious, so buckle up πŸ”₯

No security considerations beyond those that apply to the base LDP specification [RFC5036], and that are further described in [RFC5920], apply to use of the Typed Wildcard FEC Elements as described in this document. So the base LDP security stuff and the MPLS/GMPLS framework guidance still cover you.

Now for the fun part. One could deduce that the security exposure is reduced by this document. Why? An LDP speaker using the Typed Wildcard FEC Element can use a single message to request, withdraw, or release all the label mappings of a particular type (a particular Address Family Identifier (AFI), for example). Meanwhile, an LDP speaker using the Wildcard FEC Element, as defined in the base LDP specification [RFC5036], can use a single message to request, withdraw, or release all the label mappings of all types (all AFIs, for example). Narrower scope, smaller blast radius 🧁

10. Acknowledgments 🫢

The authors would like to thank Yakov Rekhter for suggesting that the limitations of the Wildcard FEC be addressed. Also, thanks to Adrian Farrel, Kamran Raza, and Richard L. Barnes for their extensive review of this document. The whole squad showed up 🌈

11. References πŸ“š

11.1. Normative References

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., "LDP Specification", RFC 5036, October 2007.
  • [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. Le Roux, "LDP Capabilities", RFC 5561, July 2009.

11.2. Informative References

  • [RFC3036] Andersson, L., Doolan, P., Feldman, N., Fredette, A., and B. Thomas, "LDP Specification", RFC 3036, January 2001.
  • [RFC4447] Martini, L., Ed., Rosen, E., El-Aawar, N., Smith, T., and G. Heron, "Pseudowire Setup and Maintenance Using the Label Distribution Protocol (LDP)", RFC 4447, April 2006.
  • [RFC5919] Asati, R., Mohapatra, P., Minei, I., and B. Thomas, "Signaling LDP Label Advertisement Completion", RFC 5919, August 2010.
  • [RFC5920] Fang, L., Ed., "Security Framework for MPLS and GMPLS Networks", RFC 5920, July 2010.
  • [MLDP] Minei, I., Ed., Kompella, K., Wijnands, I., Ed., and B. Thomas, "Label Distribution Protocol Extensions for Point-to-Multipoint and Multipoint-to-Multipoint Label Switched Paths", Work in Progress, July 2010.

Authors' Addresses πŸ¦‹

Rajiv Asati
Cisco Systems
7025-6 Kit Creek Rd.
Research Triangle Park, NC  27709-4987
EMail: rajiva@cisco.com


Ina Minei
Juniper Networks
1194 North Mathilda Ave.
Sunnyvale, CA  94089
EMail: ina@juniper.net


Bob Thomas
EMail: bobthomas@alum.mit.edu

That's the whole thing, bestie! πŸŒˆπŸ’– You now know the capability advertisement, the Prefix FEC Wildcard, and why the security exposure actually goes down. Iconic work, we ate this RFC πŸ“πŸ‘‘

πŸ“¦ where this page comes from