RFC 4203

OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)

πŸ“… published October 2005, from ietf

OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS) πŸ’–

okay bestie, so this is RFC 4203 πŸŽ€. It was written by K. Kompella, Ed. and Y. Rekhter, Ed. from Juniper Networks, in the Network Working Group. It's a Standards Track doc, published in October 2005. It updates RFC 3630 πŸ¦‹, and the title block doesn't list anything it obsoletes.

Status of This Memo πŸ“œ

This is an Internet standards track protocol spec for the Internet community, and it's literally asking for discussion and suggestions for improvements 🫢. To check the standardization state and status of this protocol, look at the current edition of "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ✨.

Copyright (C) The Internet Society (2005).

Abstract 🌸

The vibe here is: this doc spells out how to encode extensions to the OSPF routing protocol so it can support Generalized Multi-Protocol Label Switching (GMPLS) 🧚.

1. Introduction ✨

okay so this section is where it all starts πŸ’…. The whole point is extending the OSPF routing protocol [OSPF] so it can carry link state information for Generalized Multi-Protocol Label Switching (GMPLS). The list of required OSPF upgrades is laid out in [GMPLS-ROUTING] πŸ”₯.

Here's the main idea. We're talking about the Traffic Engineering (TE) properties of GMPLS TE links, which can be announced in OSPF TE LSAs πŸ’œ. A TE LSA is an opaque LSA with area flooding scope [OSPF-TE]. It has exactly one top-level Type/Length/Value (TLV) triplet, and it has one or more nested sub-TLVs for extensibility πŸ¦‹. That top-level TLV can be one of two values, (1) Router Address or (2) Link. In this doc, we level up the sub-TLVs under the Link TLV so it can handle GMPLS πŸ’–. Specifically, we add these sub-TLVs to the Link TLV:

Sub-TLV Type      Length    Name
          11           8    Link Local/Remote Identifiers
          14           4    Link Protection Type
          15    variable    Interface Switching Capability Descriptor
          16    variable    Shared Risk Link Group

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 BCP 14, RFC 2119 [RFC2119]. (Translation: these capitalised words are the official strength-of-requirement words, so read them literally πŸ™ˆ.)

Link Local/Remote Identifiers is a sub-TLV of the Link TLV πŸ’•. Its type is 11, and its length is eight octets. The value field holds four octets of Link Local Identifier, followed by four octets of Link Remote Identifier (see Section "Support for unnumbered links" of [GMPLS-ROUTING]). If the Link Remote Identifier isn't known, it gets set to 0 πŸ€·β€β™€οΈ.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Link Local Identifier                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Link Remote Identifier                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A node can pass its Link Local Identifier to its neighbour using a link local Opaque LSA, as described in Section "Exchanging Link Local TE Information" πŸ¦‹.

The Link Protection Type is a sub-TLV of the Link TLV πŸ’…. Its type is 14, and its length is four octets.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Protection Cap |                    Reserved                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The first octet is a bit vector that describes the protection capabilities of the link (see Section "Link Protection Type" of [GMPLS-ROUTING]) πŸ”. The bits are:

   0x01  Extra Traffic
   0x02  Unprotected

   0x04  Shared

   0x08  Dedicated 1:1

   0x10  Dedicated 1+1

   0x20  Enhanced

   0x40  Reserved

   0x80  Reserved

The remaining three octets SHOULD be set to zero by the sender, and SHOULD be ignored by the receiver 🫢.

The Link Protection Type sub-TLV may occur at most once within the Link TLV ✨.

The SRLG is a sub-TLV (of type 16) of the Link TLV 🧚. Its length is the length of the list in octets. Its value is an unordered list of 32 bit numbers, and those numbers are the SRLGs that the link belongs to. The value field 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Shared Risk Link Group Value                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        ............                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Shared Risk Link Group Value                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

This sub-TLV carries the Shared Risk Link Group information (see Section "Shared Risk Link Group Information" of [GMPLS-ROUTING]) πŸ’œ.

The SRLG sub-TLV may occur at most once within the Link TLV 🌸.

1.4. Interface Switching Capability Descriptor πŸ‘‘

The Interface Switching Capability Descriptor is a sub-TLV (of type 15) of the Link TLV πŸ’–. Its length is the length of the value field in octets. The value field 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Switching Cap |   Encoding    |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 0              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 1              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 2              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 3              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 4              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 5              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 6              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Max LSP Bandwidth at priority 7              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Switching Capability-specific information              |
|                  (variable)                                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Switching Capability (Switching Cap) field holds one of these values:

   1     Packet-Switch Capable-1 (PSC-1)
   2     Packet-Switch Capable-2 (PSC-2)
   3     Packet-Switch Capable-3 (PSC-3)
   4     Packet-Switch Capable-4 (PSC-4)
   51    Layer-2 Switch Capable  (L2SC)
   100   Time-Division-Multiplex Capable (TDM)
   150   Lambda-Switch Capable   (LSC)
   200   Fiber-Switch Capable    (FSC)

The Encoding field holds one of the values specified in Section 3.1.1 of [GMPLS-SIG] πŸ“.

Maximum LSP Bandwidth is encoded as a list of eight 4 octet fields in the IEEE floating point format [IEEE], with priority 0 first and priority 7 last. The units are bytes (not bits!) per second πŸ™ˆπŸ’€.

What goes in the Switching Capability specific information field depends on the value of the Switching Capability field 🧩.

When the Switching Capability field is PSC-1, PSC-2, PSC-3, or PSC-4, the Switching Capability specific information field includes Minimum LSP Bandwidth, Interface MTU, and padding. 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Minimum LSP Bandwidth                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Interface MTU       |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Minimum LSP Bandwidth is a 4 octets field in the IEEE floating point format. The units are bytes (not bits!) per second πŸ’§. The Interface MTU is a 2 octets integer. The padding is 2 octets, and it's there to make the Interface Switching Capability Descriptor sub-TLV 32-bits aligned πŸ“. The padding SHOULD be set to zero by the sender and SHOULD be ignored by the receiver 🫢.

When the Switching Capability field is L2SC, there's no Switching Capability specific information field at all 🌷.

When the Switching Capability field is TDM, the Switching Capability specific information field includes Minimum LSP Bandwidth, an indication of whether the interface supports Standard or Arbitrary SONET/SDH, and padding. 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Minimum LSP Bandwidth                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Indication  |                 Padding                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Minimum LSP Bandwidth is a 4 octets field in the IEEE floating point format. The units are bytes (not bits!) per second πŸ’«. The SONET/SDH indication is 1 octet. Its value is 0 if the interface supports Standard SONET/SDH, and 1 if the interface supports Arbitrary SONET/SDH πŸ¦‹. The padding is 3 octets, and it's used to make the Interface Switching Capability Descriptor sub-TLV 32-bits aligned. The padding SHOULD be set to zero by the sender and SHOULD be ignored by the receiver πŸ’….

When the Switching Capability field is LSC, there's no Switching Capability specific information field present either 🌈.

To support interfaces that have more than one Interface Switching Capability Descriptor (see Section "Interface Switching Capability Descriptor" of [GMPLS-ROUTING]), the Interface Switching Capability Descriptor sub-TLV may occur more than once within the Link TLV 🧚✨.

2. Implications on Graceful Restart ✨

Okay so when a router restarts, it should follow the OSPF restart procedures [OSPF-RESTART] and the RSVP-TE restart procedures [GMPLS-RSVP]. The whole vibe is keeping the restart graceful πŸ’–

When a restarting node is about to originate its TE LSAs, the ones containing a Link TLV should go out with 0 unreserved bandwidth and a Traffic Engineering metric set to 0xffffffff. If the Link has LSC or FSC as its Switching Capability, they also get 0 as Max LSP Bandwidth. They stay that way until the node can figure out how much is actually unreserved, counting the resources reserved by the already established LSPs that were preserved across the restart πŸ₯Ί

Once the restarting node has worked out those unreserved resources, counting the resources reserved by the already established LSPs preserved across the restart, it should advertise them in its TE LSAs. Glow up complete ✨

Now for a planned restart, the restarting node SHOULD originate its TE LSAs containing Link TLV with 0 as unreserved bandwidth. If the Link has LSC or FSC as its Switching Capability, it also goes out with 0 as Max LSP Bandwidth. The whole point is to discourage new LSP establishment through the restarting router πŸ™ˆ

Neighbors of the restarting node should keep advertising the actual unreserved bandwidth on the TE links from those neighbors to that node 🫢

Regular graceful restart should not be aborted if a TE LSA or TE topology changes. TE graceful restart need not be aborted if a TE LSA or TE topology changes πŸ’…

Sometimes a node needs to tell its neighbors on a particular interface some Traffic Engineering info, and it's so useful, ngl. One example is the Link Local Identifier. If nodes X and Y are connected by an unnumbered point-to-point interface I, then X's Link Local Identifier for I is Y's Link Remote Identifier for I. X can share its Link Local Identifier for I by swapping a TE link local opaque LSA with Y (more on that below). This info only needs to go over interface I, which is why it's a link local Opaque LSA 🌸

A TE Link Local LSA is an opaque LSA of type 9 (link-local flooding scope) with Opaque Type 1 (TE LSA) and Opaque ID of 0. Here's the layout:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            LS age             |    Options    |       9       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Opaque Type  |                   Opaque ID                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Advertising Router                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     LS sequence number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         LS checksum           |             length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-                            TLVs                             -+
   |                             ...                               |

The TLVs in the body of a TE Link Local LSA are formatted exactly like TE TLVs: a 2-octet Type field, then a 2-octet Length field that tells you the length of the Value field in octets. The Top Level Type for the Link Local TLV is 4. The Value field gets zero-padded at the end to a four octet boundary 🧚

The only TLV defined here is the Link Local Identifier TLV, with Type 1, Length 4, and a Value that's the 32 bit Link Local Identifier for the link the TE Link Local LSA is exchanged over ⭐

4. Contributors 🫢

Big shoutout to these legends who helped make this happen πŸ’œ

Ayan Banerjee
Calient Networks
5853 Rue Ferrari
San Jose, CA 95138

Phone: +1.408.972.3645
EMail: abanerjee@calient.net
John Drake
Calient Networks
5853 Rue Ferrari
San Jose, CA 95138

Phone: +1.408.972.3720
EMail: jdrake@calient.net
Greg Bernstein
Ciena Corporation
10480 Ridgeview Court
Cupertino, CA 94014

Phone: +1.408.366.4713
EMail: greg@ciena.com
Don Fedyk
Nortel Networks Corp.
600 Technology Park Drive
Billerica, MA 01821

Phone: +1.978.288.4506
EMail: dwfedyk@nortelnetworks.com
Eric Mannie
Independent Consultant

EMail: eric_mannie@hotmail.com
Debanjan Saha
Tellium Optical Systems
2 Crescent Place
P.O. Box 901
Ocean Port, NJ 07757

Phone: +1.732.923.4264
EMail: dsaha@tellium.com
Vishal Sharma
Metanoia, Inc.
335 Elan Village Lane, Unit 203
San Jose, CA 95134-2539

Phone: +1.408.943.1794
EMail: v.sharma@ieee.org

5. Acknowledgements 🌷

The authors would like to thank Suresh Katukam, Jonathan Lang, Quaizar Vohra, and Alex Zinin for their comments on the document. Thank you, babes πŸ₯°

6. Security Considerations πŸ”

This document specifies the contents of Opaque LSAs in OSPFv2. Opaque LSAs are not used for SPF computation or normal routing, so the extensions specified here have no direct effect on IP routing.

Tampering with GMPLS TE LSAs may have an effect on the underlying transport (optical and/or SONET-SDH) network. Bestie, this is serious 😭

[OSPF-TE] suggests mechanisms such as [OSPF-SIG] to protect the transmission of this information, and those or other mechanisms should be used to secure and/or authenticate the information carried in the Opaque LSAs πŸ›‘οΈ

7. IANA Considerations πŸ“‹

The memo introduces four new sub-TLVs of the TE Link TLV in the TE Opaque LSA for OSPF v2. [OSPF-TE] says that the sub-TLVs of the TE Link TLV in the range 10-32767 must be assigned by Expert Review, and must be registered with IANA.

The memo has four suggested values for the four sub-TLVs of the TE Link TLV. It is strongly recommended that the suggested values be granted, as there are interoperable implementations using these values 🀝

Finally, a new Top Level Type for OSPF TE LSAs for the Link Local TLV has been allocated from the Standards Action space πŸ‘‘

8. References πŸ“š

8.1. Normative References

[GMPLS-ROUTING] Kompella, K., Ed., and Y. Rekhter, Ed., "Routing
                Extensions in Support of Generalized Multi-Protocol
                Label Switching (GMPLS)", RFC 4202, October 2005.

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

[GMPLS-SIG]     Berger, L., "Generalized Multi-Protocol Label
                Switching (GMPLS) Signaling Functional Description",
                RFC 3471, January 2003.

[IEEE]          IEEE, "IEEE Standard for Binary Floating-Point
                Arithmetic", Standard 754-1985, 1985 (ISBN 1-5593-
                7653-8).

[OSPF]          Moy, J., "OSPF Version 2", STD 54, RFC 2328, April
                1998.

[OSPF-RESTART]  Moy, J., Pillay-Esnault, P., and A. Lindem, "Graceful
                OSPF Restart", RFC 3623, November 2003.

[OSPF-SIG]      Murphy, S., Badger, M., and B. Wellington, "OSPF with
                Digital Signatures", RFC 2154, June 1997.

[OSPF-TE]       Katz, D., Kompella, K., and Yeung, D., "Traffic
                Engineering (TE) Extensions to OSPF Version 2", RFC
                3630, September 2003.

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

Authors' Addresses πŸ’œ

Kireeti Kompella
Juniper Networks, Inc.
1194 N. Mathilda Ave
Sunnyvale, CA 94089

EMail: kireeti@juniper.net
Yakov Rekhter
Juniper Networks, Inc.
1194 N. Mathilda Ave
Sunnyvale, CA 94089

EMail: yakov@juniper.net

Copyright (C) The Internet Society (2005).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.

Intellectual Property 🧠

The IETF takes no position on the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or on whether any license under such rights might or might not be available. It also doesn't claim to have made any independent effort to identify any such rights. Info on the procedures for rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be found in the IETF online IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology required to implement this standard. Please send that info to the IETF at ietf-ipr@ietf.org.

Acknowledgement πŸŽ€

Funding for the RFC Editor function is currently provided by the Internet Society πŸ’–

πŸ“¦ where this page comes from