idnits 2.17.1 draft-ietf-mpls-ldp-07.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Looks like you're using RFC 2026 boilerplate. This must be updated to follow RFC 3978/3979, as updated by RFC 4748. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == No 'Intended status' indicated for this document; assuming Proposed Standard Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack separate sections for Informative/Normative References. All references will be assumed normative when checking for downward references. ** There are 15 instances of too long lines in the document, the longest one being 6 characters in excess of 72. ** The abstract seems to contain references ([ARCH], [FRAMEWORK], [LDPAPPLIC]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. ** The document seems to lack a both a reference to RFC 2119 and the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords -- however, there's a paragraph with a matching beginning. Boilerplate error? RFC 2119 keyword, line 936: '... LSR MUST wait until a label from a ...' RFC 2119 keyword, line 1088: '... Request message MUST include a Hop Co...' RFC 2119 keyword, line 1091: '... MUST include a Hop Count TLV with...' RFC 2119 keyword, line 1095: '...Hop Count TLV, R MUST increment the re...' RFC 2119 keyword, line 1096: '...t value by 1 and MUST pass the resulti...' (26 more instances...) Miscellaneous warnings: ---------------------------------------------------------------------------- -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (June 2000) is 8713 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC1321' is mentioned on line 1273, but not defined == Missing Reference: 'Dobb' is mentioned on line 1306, but not defined == Missing Reference: 'RFC2385' is mentioned on line 1339, but not defined ** Obsolete undefined reference: RFC 2385 (Obsoleted by RFC 5925) == Unused Reference: 'DIFFSERV' is defined on line 4065, but no explicit reference was found in the text == Unused Reference: 'LSPTUN' is defined on line 4086, but no explicit reference was found in the text -- Possible downref: Non-RFC (?) normative reference: ref. 'ARCH' -- Possible downref: Non-RFC (?) normative reference: ref. 'ATM' -- Possible downref: Non-RFC (?) normative reference: ref. 'ATM-VP' -- Possible downref: Non-RFC (?) normative reference: ref. 'CRLDP' -- Possible downref: Non-RFC (?) normative reference: ref. 'DIFFSERV' -- Possible downref: Non-RFC (?) normative reference: ref. 'ENCAP' -- Possible downref: Non-RFC (?) normative reference: ref. 'FR' -- Possible downref: Non-RFC (?) normative reference: ref. 'FRAMEWORK' ** Obsolete normative reference: RFC 2434 (ref. 'IANA') (Obsoleted by RFC 5226) -- Possible downref: Non-RFC (?) normative reference: ref. 'LDPAPPLIC' -- Possible downref: Non-RFC (?) normative reference: ref. 'LSPTUN' -- Possible downref: Non-RFC (?) normative reference: ref. 'TE' Summary: 7 errors (**), 0 flaws (~~), 6 warnings (==), 13 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 Network Working Group Loa Andersson 2 Internet Draft Nortel Networks Inc. 3 Expiration Date: December 2000 4 Paul Doolan 5 Ennovate Networks 7 Nancy Feldman 8 IBM Corp 10 Andre Fredette 11 Nortel Networks Inc. 13 Bob Thomas 14 Cisco Systems, Inc. 16 June 2000 18 LDP Specification 20 draft-ietf-mpls-ldp-07.txt 22 Status of this Memo 24 This document is an Internet-Draft and is in full conformance with 25 all provisions of Section 10 of RFC2026. 27 Internet-Drafts are working documents of the Internet Engineering 28 Task Force (IETF), its areas, and its working groups. Note that 29 other groups may also distribute working documents as Internet- 30 Drafts. 32 Internet-Drafts are draft documents valid for a maximum of six months 33 and may be updated, replaced, or obsoleted by other documents at any 34 time. It is inappropriate to use Internet-Drafts as reference 35 material or to cite them other than as "work in progress." 37 The list of current Internet-Drafts can be accessed at 38 http://www.ietf.org/ietf/1id-abstracts.txt 40 The list of Internet-Draft Shadow Directories can be accessed at 41 http://www.ietf.org/shadow.html. 43 Abstract 45 An overview of Multi Protocol Label Switching (MPLS) is provided in 46 [FRAMEWORK] and a proposed architecture in [ARCH]. A fundamental 47 concept in MPLS is that two Label Switching Routers (LSRs) must agree 48 on the meaning of the labels used to forward traffic between and 49 through them. This common understanding is achieved by using a set 50 of procedures, called a label distribution protocol, by which one LSR 51 informs another of label bindings it has made. This document defines 52 a set of such procedures called LDP (for Label Distribution Protocol) 53 by which LSRs distribute labels to support MPLS forwarding along 54 normally routed paths [LDPAPPLIC]. 56 Table of Contents 58 1 LDP Overview ....................................... 7 59 1.1 LDP Peers .......................................... 7 60 1.2 LDP Message Exchange ............................... 8 61 1.3 LDP Message Structure .............................. 8 62 1.4 LDP Error Handling ................................. 9 63 1.5 LDP Extensibility and Future Compatibility ......... 9 64 1.6 Specification Language ............................. 9 65 2 LDP Operation ...................................... 9 66 2.1 FECs ............................................... 9 67 2.2 Label Spaces, Identifiers, Sessions and Transport .. 11 68 2.2.1 Label Spaces ....................................... 11 69 2.2.2 LDP Identifiers .................................... 12 70 2.2.3 LDP Sessions ....................................... 12 71 2.2.4 LDP Transport ...................................... 12 72 2.3 LDP Sessions between non-Directly Connected LSRs ... 13 73 2.4 LDP Discovery ..................................... 13 74 2.4.1 Basic Discovery Mechanism .......................... 13 75 2.4.2 Extended Discovery Mechanism ....................... 14 76 2.5 Establishing and Maintaining LDP Sessions .......... 15 77 2.5.1 LDP Session Establishment .......................... 15 78 2.5.2 Transport Connection Establishment ................. 15 79 2.5.3 Session Initialization ............................. 16 80 2.5.4 Initialization State Machine ....................... 19 81 2.5.5 Maintaining Hello Adjacencies ...................... 22 82 2.5.6 Maintaining LDP Sessions ........................... 22 83 2.6 Label Distribution and Management .................. 23 84 2.6.1 Label Distribution Control Mode .................... 23 85 2.6.1.1 Independent Label Distribution Control ............. 23 86 2.6.1.2 Ordered Label Distribution Control ................. 23 87 2.6.2 Label Retention Mode ............................... 24 88 2.6.2.1 Conservative Label Retention Mode .................. 24 89 2.6.2.2 Liberal Label Retention Mode ....................... 25 90 2.6.3 Label Advertisement Mode ........................... 25 91 2.7 LDP Identifiers and Next Hop Addresses ............. 25 92 2.8 Loop Detection ..................................... 26 93 2.8.1 Label Request Message .............................. 27 94 2.8.2 Label Mapping Message .............................. 28 95 2.8.3 Discussion ......................................... 30 96 2.9 Authenticity and Integrity of LDP Messages ......... 30 97 2.9.1 TCP MD5 Signature Option ........................... 31 98 2.9.2 LDP Use of TCP MD5 Signature Option ................ 32 99 2.10 Label Distribution for Explicitly Routed LSPs ...... 33 100 3 Protocol Specification ............................. 33 101 3.1 LDP PDUs ........................................... 33 102 3.2 LDP Procedures ..................................... 34 103 3.3 Type-Length-Value Encoding ......................... 35 104 3.4 TLV Encodings for Commonly Used Parameters ......... 36 105 3.4.1 FEC TLV ............................................ 36 106 3.4.1.1 FEC Procedures ..................................... 39 107 3.4.2 Label TLVs ......................................... 39 108 3.4.2.1 Generic Label TLV .................................. 39 109 3.4.2.2 ATM Label TLV ...................................... 40 110 3.4.2.3 Frame Relay Label TLV .............................. 40 111 3.4.3 Address List TLV ................................... 41 112 3.4.4 Hop Count TLV ...................................... 42 113 3.4.4.1 Hop Count Procedures ............................... 42 114 3.4.5 Path Vector TLV .................................... 44 115 3.4.5.1 Path Vector Procedures ............................. 44 116 3.4.5.1.1 Label Request Path Vector .......................... 44 117 3.4.5.1.2 Label Mapping Path Vector .......................... 45 118 3.4.6 Status TLV ......................................... 46 119 3.5 LDP Messages ....................................... 47 120 3.5.1 Notification Message ............................... 50 121 3.5.1.1 Notification Message Procedures .................... 51 122 3.5.1.2 Events Signaled by Notification Messages ........... 51 123 3.5.1.2.1 Malformed PDU or Message ........................... 51 124 3.5.1.2.2 Unknown or Malformed TLV ........................... 52 125 3.5.1.2.3 Session KeepAlive Timer Expiration ................. 53 126 3.5.1.2.4 Unilateral Session Shutdown ........................ 53 127 3.5.1.2.5 Initialization Message Events ...................... 53 128 3.5.1.2.6 Events Resulting From Other Messages ............... 53 129 3.5.1.2.7 Internal Errors .................................... 54 130 3.5.1.2.8 Miscellaneous Events ............................... 54 131 3.5.2 Hello Message ...................................... 54 132 3.5.2.1 Hello Message Procedures ........................... 56 133 3.5.3 Initialization Message ............................. 58 134 3.5.3.1 Initialization Message Procedures .................. 66 135 3.5.4 KeepAlive Message .................................. 66 136 3.5.4.1 KeepAlive Message Procedures ....................... 66 137 3.5.5 Address Message .................................... 67 138 3.5.5.1 Address Message Procedures ......................... 67 139 3.5.6 Address Withdraw Message ........................... 68 140 3.5.6.1 Address Withdraw Message Procedures ................ 69 141 3.5.7 Label Mapping Message .............................. 69 142 3.5.7.1 Label Mapping Message Procedures ................... 70 143 3.5.7.1.1 Independent Control Mapping ........................ 70 144 3.5.7.1.2 Ordered Control Mapping ............................ 71 145 3.5.7.1.3 Downstream on Demand Label Advertisement ........... 71 146 3.5.7.1.4 Downstream Unsolicited Label Advertisement ......... 72 147 3.5.8 Label Request Message .............................. 73 148 3.5.8.1 Label Request Message Procedures ................... 74 149 3.5.9 Label Abort Request Message ........................ 75 150 3.5.9.1 Label Abort Request Message Procedures ............. 76 151 3.5.10 Label Withdraw Message ............................. 77 152 3.5.10.1 Label Withdraw Message Procedures .................. 78 153 3.5.11 Label Release Message .............................. 79 154 3.5.11.1 Label Release Message Procedures ................... 80 155 3.6 Messages and TLVs for Extensibility ................ 81 156 3.6.1 LDP Vendor-private Extensions ...................... 81 157 3.6.1.1 LDP Vendor-private TLVs ............................ 81 158 3.6.1.2 LDP Vendor-private Messages ........................ 82 159 3.6.2 LDP Experimental Extensions ........................ 84 160 3.7 Message Summary .................................... 84 161 3.8 TLV Summary ........................................ 85 162 3.9 Status Code Summary ................................ 86 163 3.10 Well-known Numbers ................................. 87 164 3.10.1 UDP and TCP Ports .................................. 87 165 3.10.2 Implicit NULL Label ................................ 87 166 4 IANA Considerations ................................ 87 167 4.1 Message Type Name Space ............................ 88 168 4.2 TLV Type Name Space ................................ 88 169 4.3 FEC Type Name Space ................................ 89 170 4.4 Status Code Space .................................. 89 171 4.5 Experiment ID Name Space ........................... 89 172 5 Security Considerations ............................ 89 173 5.1 Spoofing ........................................... 89 174 5.2 Privacy ............................................ 90 175 5.3 Denial of Service .................................. 91 176 6 Areas for Future Study ............................. 92 177 7 Intellectual Property Considerations ............... 93 178 8 Acknowledgments .................................... 93 179 9 References ......................................... 93 180 10 Author Information ................................. 95 182 Appendix.A LDP Label Distribution Procedures .................. 96 183 A.1 Handling Label Distribution Events ................. 98 184 A.1.1 Receive Label Request .............................. 99 185 A.1.2 Receive Label Mapping .............................. 102 186 A.1.3 Receive Label Abort Request ........................ 108 187 A.1.4 Receive Label Release .............................. 110 188 A.1.5 Receive Label Withdraw ............................. 112 189 A.1.6 Recognize New FEC .................................. 113 190 A.1.7 Detect Change in FEC Next Hop ...................... 116 191 A.1.8 Receive Notification / Label Request Aborted ....... 119 192 A.1.9 Receive Notification / No Label Resources .......... 119 193 A.1.10 Receive Notification / No Route .................... 120 194 A.1.11 Receive Notification / Loop Detected ............... 121 195 A.1.12 Receive Notification / Label Resources Available ... 122 196 A.1.13 Detect local label resources have become available . 122 197 A.1.14 LSR decides to no longer label switch a FEC ........ 123 198 A.1.15 Timeout of deferred label request .................. 124 199 A.2 Common Label Distribution Procedures ............... 125 200 A.2.1 Send_Label ......................................... 125 201 A.2.2 Send_Label_Request ................................. 126 202 A.2.3 Send_Label_Withdraw ................................ 128 203 A.2.4 Send_Notification .................................. 128 204 A.2.5 Send_Message ....................................... 129 205 A.2.6 Check_Received_Attributes .......................... 129 206 A.2.7 Prepare_Label_Request_Attributes ................... 131 207 A.2.8 Prepare_Label_Mapping_Attributes ................... 132 209 1. LDP Overview 211 The MPLS architecture [ARCH] defines a label distribution protocol as 212 a set of procedures by which one Label Switched Router (LSR) informs 213 another of the meaning of labels used to forward traffic between and 214 through them. 216 The MPLS architecture does not assume a single label distribution 217 protocol. In fact, a number of different label distribution 218 protocols are being standardized. Existing protocols have been 219 extended so that label distribution can be piggybacked on them. New 220 protocols have also been defined for the explicit purpose of 221 distributing labels. The MPLS architecture discusses some of the 222 considerations when choosing a label distribution protocol for use in 223 particular MPLS applications such as Traffic Engineering [TE]. 225 The Label Distribution Protocol (LDP) defined in this document is a 226 new protocol defined for distributing labels. It is the set of 227 procedures and messages by which Label Switched Routers (LSRs) 228 establish Label Switched Paths (LSPs) through a network by mapping 229 network-layer routing information directly to data-link layer 230 switched paths. These LSPs may have an endpoint at a directly 231 attached neighbor (comparable to IP hop-by-hop forwarding), or may 232 have an endpoint at a network egress node, enabling switching via all 233 intermediary nodes. 235 LDP associates a Forwarding Equivalence Class (FEC) [ARCH] with each 236 LSP it creates. The FEC associated with an LSP specifies which 237 packets are "mapped" to that LSP. LSPs are extended through a 238 network as each LSR "splices" incoming labels for a FEC to the 239 outgoing label assigned to the next hop for the given FEC. 241 More information about the applicability of LDP can be found in 242 [LDPAPPLIC]. 244 This document assumes familiarity with the MPLS architecture [ARCH]. 245 Note that [ARCH] includes a glossary of MPLS terminology, such as 246 ingress, label switched path, etc. 248 1.1. LDP Peers 250 Two LSRs which use LDP to exchange label/FEC mapping information are 251 known as "LDP Peers" with respect to that information and we speak of 252 there being an "LDP Session" between them. A single LDP session 253 allows each peer to learn the other's label mappings; i.e., the 254 protocol is bi-directional. 256 1.2. LDP Message Exchange 258 There are four categories of LDP messages: 260 1. Discovery messages, used to announce and maintain the presence 261 of an LSR in a network. 263 2. Session messages, used to establish, maintain, and terminate 264 sessions between LDP peers. 266 3. Advertisement messages, used to create, change, and delete 267 label mappings for FECs. 269 4. Notification messages, used to provide advisory information and 270 to signal error information. 272 Discovery messages provide a mechanism whereby LSRs indicate their 273 presence in a network by sending a Hello message periodically. This 274 is transmitted as a UDP packet to the LDP port at the `all routers on 275 this subnet' group multicast address. When an LSR chooses to 276 establish a session with another LSR learned via the Hello message, 277 it uses the LDP initialization procedure over TCP transport. Upon 278 successful completion of the initialization procedure, the two LSRs 279 are LDP peers, and may exchange advertisement messages. 281 When to request a label or advertise a label mapping to a peer is 282 largely a local decision made by an LSR. In general, the LSR 283 requests a label mapping from a neighboring LSR when it needs one, 284 and advertises a label mapping to a neighboring LSR when it wishes 285 the neighbor to use a label. 287 Correct operation of LDP requires reliable and in order delivery of 288 messages. To satisfy these requirements LDP uses the TCP transport 289 for session, advertisement and notification messages; i.e., for 290 everything but the UDP-based discovery mechanism. 292 1.3. LDP Message Structure 294 All LDP messages have a common structure that uses a Type-Length- 295 Value (TLV) encoding scheme; see Section "Type-Length-Value" 296 encoding. The Value part of a TLV-encoded object, or TLV for short, 297 may itself contain one or more TLVs. 299 1.4. LDP Error Handling 301 LDP errors and other events of interest are signaled to an LDP peer 302 by notification messages. 304 There are two kinds of LDP notification messages: 306 1. Error notifications, used to signal fatal errors. If an LSR 307 receives an error notification from a peer for an LDP session, 308 it terminates the LDP session by closing the TCP transport 309 connection for the session and discarding all label mappings 310 learned via the session. 312 2. Advisory notifications, used to pass an LSR information about 313 the LDP session or the status of some previous message received 314 from the peer. 316 1.5. LDP Extensibility and Future Compatibility 318 Functionality may be added to LDP in the future. It is likely that 319 future functionality will utilize new messages and object types 320 (TLVs). It may be desirable to employ such new messages and TLVs 321 within a network using older implementations that do not recognize 322 them. While it is not possible to make every future enhancement 323 backwards compatible, some prior planning can ease the introduction 324 of new capabilities. This specification defines rules for handling 325 unknown message types and unknown TLVs for this purpose. 327 1.6. Specification Language 329 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 330 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 331 document are to be interpreted as described in [rfc2119]. 333 2. LDP Operation 335 2.1. FECs 337 It is necessary to precisely specify which packets may be mapped to 338 each LSP. This is done by providing a FEC specification for each 339 LSP. The FEC identifies the set of IP packets which may be mapped to 340 that LSP. 342 Each FEC is specified as a set of one or more FEC elements. Each FEC 343 element identifies a set of packets which may be mapped to the 344 corresponding LSP. When an LSP is shared by multiple FEC elements, 345 that LSP is terminated at (or before) the node where the FEC elements 346 can no longer share the same path. 348 Following are the currently defined types of FEC elements. New 349 element types may be added as needed: 351 1. Address Prefix. This element is an address prefix of any 352 length from 0 to a full address, inclusive. 354 2. Host Address. This element is a full host address. 356 (We will see below that an Address Prefix FEC element which is a full 357 address has a different effect than a Host Address FEC element which 358 has the same address.) 360 We say that a particular address "matches" a particular address 361 prefix if and only if that address begins with that prefix. We also 362 say that a particular packet matches a particular LSP if and only if 363 that LSP has an Address Prefix FEC element which matches the packet's 364 destination address. With respect to a particular packet and a 365 particular LSP, we refer to any Address Prefix FEC element which 366 matches the packet as the "matching prefix". 368 The procedure for mapping a particular packet to a particular LSP 369 uses the following rules. Each rule is applied in turn until the 370 packet can be mapped to an LSP. 372 - If there is exactly one LSP which has a Host Address FEC element 373 that is identical to the packet's destination address, then the 374 packet is mapped to that LSP. 376 - If there are multiple LSPs, each containing a Host Address FEC 377 element that is identical to the packet's destination address, 378 then the packet is mapped to one of those LSPs. The procedure 379 for selecting one of those LSPs is beyond the scope of this 380 document. 382 - If a packet matches exactly one LSP, the packet is mapped to that 383 LSP. 385 - If a packet matches multiple LSPs, it is mapped to the LSP whose 386 matching prefix is the longest. If there is no one LSP whose 387 matching prefix is longest, the packet is mapped to one from the 388 set of LSPs whose matching prefix is longer than the others. The 389 procedure for selecting one of those LSPs is beyond the scope of 390 this document. 392 - If it is known that a packet must traverse a particular egress 393 router, and there is an LSP which has an Address Prefix FEC 394 element which is an address of that router, then the packet is 395 mapped to that LSP. The procedure for obtaining this knowledge 396 is beyond the scope of this document. 398 The procedure for determining that a packet must traverse a 399 particular egress router is beyond the scope of this document. (As 400 an example, if one is running a link state routing algorithm, it may 401 be possible to obtain this information from the link state data base. 402 As another example, if one is running BGP, it may be possible to 403 obtain this information from the BGP next hop attribute of the 404 packet's route.) 406 It is worth pointing out a few consequences of these rules: 408 - A packet may be sent on the LSP whose Address Prefix FEC element 409 is the address of the packet's egress router ONLY if there is no 410 LSP matching the packet's destination address. 412 - A packet may match two LSPs, one with a Host Address FEC element 413 and one with an Address Prefix FEC element. In this case, the 414 packet is always assigned to the former. 416 - A packet which does not match a particular Host Address FEC 417 element may not be sent on the corresponding LSP, even if the 418 Host Address FEC element identifies the packet's egress router. 420 2.2. Label Spaces, Identifiers, Sessions and Transport 422 2.2.1. Label Spaces 424 The notion of "label space" is useful for discussing the assignment 425 and distribution of labels. There are two types of label spaces: 427 - Per interface label space. Interface-specific incoming labels 428 are used for interfaces that use interface resources for labels. 429 An example of such an interface is a label-controlled ATM 430 interface that uses VCIs as labels, or a Frame Relay interface 431 that uses DLCIs as labels. 433 Note that the use of a per interface label space only makes sense 434 when the LDP peers are "directly connected" over an interface, 435 and the label is only going to be used for traffic sent over that 436 interface. 438 - Per platform label space. Platform-wide incoming labels are used 439 for interfaces that can share the same labels. 441 2.2.2. LDP Identifiers 443 An LDP identifier is a six octet quantity used to identify an LSR 444 label space. The first four octets identify the LSR and must be a 445 globally unique value, such as a 32-bit router Id assigned to the 446 LSR. The last two octets identify a specific label space within the 447 LSR. The last two octets of LDP Identifiers for platform-wide label 448 spaces are always both zero. This document uses the following print 449 representation for LDP Identifiers: 451 :