| draft-ietf-mpls-rfc3036bis-04.txt | | rfc5036.txt | |
|
| | | | |
| Network Working Group Loa Andersson | | | |
| Internet Draft Ina Minei | | | |
| Expiration Date: March 2007 Bob Thomas | | | |
| Editors | | | |
| | | | |
| September 2006 | | | |
| | | | |
| LDP Specification | | | |
| | | | |
| draft-ietf-mpls-rfc3036bis-04.txt | | | |
| | | | |
| Status of this Memo | | | |
| | | | |
| By submitting this Internet-Draft, each author represents that any | | | |
| applicable patent or other IPR claims of which he or she is aware | | | |
| have been or will be disclosed, and any of which he or she becomes | | | |
| aware will be disclosed, in accordance with Section 6 of BCP 79. | | | |
| | | | |
| Internet-Drafts are working documents of the Internet Engineering | | | |
| Task Force (IETF), its areas, and its working groups. Note that other | | | |
| groups may also distribute working documents as Internet-Drafts. | | | |
| | | | |
| Internet-Drafts are draft documents valid for a maximum of six months | | | |
| and may be updated, replaced, or obsoleted by other documents at any | | | |
| time. It is inappropriate to use Internet-Drafts as reference | | | |
| material or to cite them other than as "work in progress." | | | |
| | | | |
| The list of current Internet-Drafts can be accessed at | | | |
| http://www.ietf.org/ietf/1id-abstracts.txt. | | | |
| | | | |
| The list of Internet-Draft Shadow Directories can be accessed at | | | |
| http://www.ietf.org/shadow.html. | | | |
| | | | |
| Source of this document | | | |
| | | | |
| This document is produced as part of advancing the LDP specification | | | |
| to draft standard status. The LDP specification was originally | | | |
| published as RFC 3036 in January 2001. It was produced by the MPLS | | | |
| working of the IETF and was jointly authored by Loa Andersson, Paul | | | |
| Doolan, Nancy Feldman, Andre Fredette and Bob Thomas. | | | |
| | | | |
| Abstract | | | |
| | | | |
| The architecture for Multi Protocol Label Switching (MPLS) is | | | |
| described in RFC 3031 [RFC3031]. A fundamental concept in MPLS is | | | |
| that two Label Switching Routers (LSRs) must agree on the meaning of | | | |
| the labels used to forward traffic between and through them. This | | | |
| common understanding is achieved by using a set of procedures, called | | | |
| a label distribution protocol, by which one LSR informs another of | | | |
| label bindings it has made. This document defines a set of such | | | |
| procedures called LDP (for Label Distribution Protocol) by which LSRs | | | |
| distribute labels to support MPLS forwarding along normally routed | | | |
| paths. | | | |
| | | | |
| Table of Contents | | | |
| | | | |
| Source of this document ............................... 1 | | | |
| 1 LDP Overview .......................................... 7 | | | |
| 1.1 LDP Peers ............................................. 8 | | | |
| 1.2 LDP Message Exchange .................................. 8 | | | |
| 1.3 LDP Message Structure ................................. 9 | | | |
| 1.4 LDP Error Handling .................................... 9 | | | |
| 1.5 LDP Extensibility and Future Compatibility ............ 9 | | | |
| 1.6 Specification Language ................................ 9 | | | |
| 2 LDP Operation ......................................... 10 | | | |
| 2.1 FECs .................................................. 10 | | | |
| 2.2 Label Spaces, Identifiers, Sessions and Transport ..... 11 | | | |
| 2.2.1 Label Spaces .......................................... 11 | | | |
| 2.2.2 LDP Identifiers ....................................... 11 | | | |
| 2.2.3 LDP Sessions .......................................... 12 | | | |
| 2.2.4 LDP Transport ......................................... 12 | | | |
| 2.3 LDP Sessions between non-Directly Connected LSRs ...... 12 | | | |
| 2.4 LDP Discovery ......................................... 13 | | | |
| 2.4.1 Basic Discovery Mechanism ............................. 13 | | | |
| 2.4.2 Extended Discovery Mechanism .......................... 13 | | | |
| 2.5 Establishing and Maintaining LDP Sessions ............ 14 | | | |
| 2.5.1 LDP Session Establishment ............................. 14 | | | |
| 2.5.2 Transport Connection Establishment .................... 15 | | | |
| 2.5.3 Session Initialization ................................ 16 | | | |
| 2.5.4 Initialization State Machine .......................... 19 | | | |
| 2.5.5 Maintaining Hello Adjacencies ......................... 21 | | | |
| 2.5.6 Maintaining LDP Sessions .............................. 21 | | | |
| 2.6 Label Distribution and Management ..................... 22 | | | |
| 2.6.1 Label Distribution Control Mode ....................... 22 | | | |
| 2.6.1.1 Independent Label Distribution Control ................ 22 | | | |
| 2.6.1.2 Ordered Label Distribution Control .................... 22 | | | |
| 2.6.2 Label Retention Mode .................................. 23 | | | |
| 2.6.2.1 Conservative Label Retention Mode ..................... 23 | | | |
| 2.6.2.2 Liberal Label Retention Mode .......................... 24 | | | |
| 2.6.3 Label Advertisement Mode .............................. 24 | | | |
| 2.7 LDP Identifiers and Next Hop Addresses ................ 24 | | | |
| 2.8 Loop Detection ........................................ 25 | | | |
| 2.8.1 Label Request Message ................................. 26 | | | |
| 2.8.2 Label Mapping Message ................................. 27 | | | |
| 2.8.3 Discussion ............................................ 29 | | | |
| 2.9 Authenticity and Integrity of LDP Messages ............ 29 | | | |
| 2.9.1 TCP MD5 Signature Option .............................. 30 | | | |
| 2.9.2 LDP Use of TCP MD5 Signature Option ................... 31 | | | |
| 2.10 Label Distribution for Explicitly Routed LSPs ......... 32 | | | |
| 3 Protocol Specification ................................ 32 | | | |
| 3.1 LDP PDUs .............................................. 32 | | | |
| 3.2 LDP Procedures ........................................ 33 | | | |
| 3.3 Type-Length-Value Encoding ............................ 34 | | | |
| 3.4 TLV Encodings for Commonly Used Parameters ............ 35 | | | |
| 3.4.1 FEC TLV ............................................... 36 | | | |
| 3.4.1.1 FEC Procedures ........................................ 37 | | | |
| 3.4.2 Label TLVs ............................................ 38 | | | |
| 3.4.2.1 Generic Label TLV ..................................... 38 | | | |
| 3.4.2.2 ATM Label TLV ......................................... 38 | | | |
| 3.4.2.3 Frame Relay Label TLV ................................. 39 | | | |
| 3.4.3 Address List TLV ...................................... 40 | | | |
| 3.4.4 Hop Count TLV ......................................... 41 | | | |
| 3.4.4.1 Hop Count Procedures .................................. 41 | | | |
| 3.4.5 Path Vector TLV ....................................... 43 | | | |
| 3.4.5.1 Path Vector Procedures ................................ 43 | | | |
| 3.4.5.1.1 Label Request Path Vector ............................. 43 | | | |
| 3.4.5.1.2 Label Mapping Path Vector ............................. 44 | | | |
| 3.4.6 Status TLV ............................................ 45 | | | |
| 3.5 LDP Messages .......................................... 46 | | | |
| 3.5.1 Notification Message .................................. 49 | | | |
| 3.5.1.1 Notification Message Procedures ....................... 50 | | | |
| 3.5.1.2 Events Signaled by Notification Messages .............. 50 | | | |
| 3.5.1.2.1 Malformed PDU or Message .............................. 51 | | | |
| 3.5.1.2.2 Unknown or Malformed TLV .............................. 52 | | | |
| 3.5.1.2.3 Session KeepAlive Timer Expiration .................... 52 | | | |
| 3.5.1.2.4 Unilateral Session Shutdown ........................... 52 | | | |
| 3.5.1.2.5 Initialization Message Events ......................... 52 | | | |
| 3.5.1.2.6 Events Resulting From Other Messages .................. 53 | | | |
| 3.5.1.2.7 Internal Errors ....................................... 53 | | | |
| 3.5.1.2.8 Miscellaneous Events .................................. 53 | | | |
| 3.5.2 Hello Message ......................................... 53 | | | |
| 3.5.2.1 Hello Message Procedures .............................. 55 | | | |
| 3.5.3 Initialization Message ................................ 57 | | | |
| 3.5.3.1 Initialization Message Procedures ..................... 65 | | | |
| 3.5.4 KeepAlive Message ..................................... 65 | | | |
| 3.5.4.1 KeepAlive Message Procedures .......................... 65 | | | |
| 3.5.5 Address Message ....................................... 66 | | | |
| 3.5.5.1 Address Message Procedures ............................ 66 | | | |
| 3.5.6 Address Withdraw Message .............................. 67 | | | |
| 3.5.6.1 Address Withdraw Message Procedures ................... 68 | | | |
| 3.5.7 Label Mapping Message ................................. 68 | | | |
| 3.5.7.1 Label Mapping Message Procedures ...................... 69 | | | |
| 3.5.7.1.1 Independent Control Mapping ........................... 70 | | | |
| 3.5.7.1.2 Ordered Control Mapping ............................... 70 | | | |
| 3.5.7.1.3 Downstream on Demand Label Advertisement .............. 71 | | | |
| 3.5.7.1.4 Downstream Unsolicited Label Advertisement ............ 71 | | | |
| 3.5.8 Label Request Message ................................. 72 | | | |
| 3.5.8.1 Label Request Message Procedures ...................... 73 | | | |
| 3.5.9 Label Abort Request Message ........................... 74 | | | |
| 3.5.9.1 Label Abort Request Message Procedures ................ 75 | | | |
| 3.5.10 Label Withdraw Message ................................ 77 | | | |
| 3.5.10.1 Label Withdraw Message Procedures ..................... 78 | | | |
| 3.5.11 Label Release Message ................................. 78 | | | |
| 3.5.11.1 Label Release Message Procedures ...................... 79 | | | |
| 3.6 Messages and TLVs for Extensibility ................... 80 | | | |
| 3.6.1 LDP Vendor-private Extensions ......................... 80 | | | |
| 3.6.1.1 LDP Vendor-private TLVs ............................... 80 | | | |
| 3.6.1.2 LDP Vendor-private Messages ........................... 82 | | | |
| 3.6.2 LDP Experimental Extensions ........................... 83 | | | |
| 3.7 Message Summary ....................................... 84 | | | |
| 3.8 TLV Summary ........................................... 84 | | | |
| 3.9 Status Code Summary ................................... 85 | | | |
| 3.10 Well-known Numbers .................................... 86 | | | |
| 3.10.1 UDP and TCP Ports ..................................... 86 | | | |
| 3.10.2 Implicit NULL Label ................................... 86 | | | |
| 4 IANA Considerations ................................... 87 | | | |
| 4.1 Message Type Name Space ............................... 87 | | | |
| 4.2 TLV Type Name Space ................................... 87 | | | |
| 4.3 FEC Type Name Space ................................... 88 | | | |
| 4.4 Status Code Name Space ................................ 88 | | | |
| 4.5 Experiment ID Name Space .............................. 88 | | | |
| 5 Security Considerations ............................... 89 | | | |
| 5.1 Spoofing .............................................. 89 | | | |
| 5.2 Privacy ............................................... 90 | | | |
| 5.3 Denial of Service ..................................... 90 | | | |
| 6 Areas for Future Study ................................ 92 | | | |
| 7 Changes from RFC3036 .................................. 93 | | | |
| 8 Acknowledgments ....................................... 95 | | | |
| 9 References ............................................ 96 | | | |
| 9.1 Normative references .................................. 96 | | | |
| 9.2 Non-normative references .............................. 96 | | | |
| 10 Intellectual Property Statement ....................... 97 | | | |
| 11 Editors' Addresses .................................... 98 | | | |
| Appendix A LDP Label Distribution Procedures ..................... 99 | | | |
| A.1 Handling Label Distribution Events .................... 101 | | | |
| A.1.1 Receive Label Request ................................. 102 | | | |
| A.1.2 Receive Label Mapping ................................. 105 | | | |
| A.1.3 Receive Label Abort Request ........................... 111 | | | |
| A.1.4 Receive Label Release ................................. 113 | | | |
| A.1.5 Receive Label Withdraw ................................ 115 | | | |
| A.1.6 Recognize New FEC ..................................... 117 | | | |
| A.1.7 Detect Change in FEC Next Hop ......................... 119 | | | |
| A.1.8 Receive Notification / Label Request Aborted .......... 122 | | | |
| A.1.9 Receive Notification / No Label Resources ............. 123 | | | |
| A.1.10 Receive Notification / No Route ....................... 123 | | | |
| A.1.11 Receive Notification / Loop Detected .................. 124 | | | |
| A.1.12 Receive Notification / Label Resources Available ...... 125 | | | |
| A.1.13 Detect local label resources have become available .... 126 | | | |
| | | | |
| A.1.14 LSR decides to no longer label switch a FEC ........... 127 | | | |
| A.1.15 Timeout of deferred label request ..................... 127 | | | |
| A.2 Common Label Distribution Procedures .................. 128 | | | |
| A.2.1 Send_Label ............................................ 128 | | | |
| A.2.2 Send_Label_Request .................................... 130 | | | |
| A.2.3 Send_Label_Withdraw ................................... 131 | | | |
| A.2.4 Send_Notification ..................................... 131 | | | |
| A.2.5 Send_Message .......................................... 132 | | | |
| A.2.6 Check_Received_Attributes ............................. 132 | | | |
| A.2.7 Prepare_Label_Request_Attributes ...................... 133 | | | |
| A.2.8 Prepare_Label_Mapping_Attributes ...................... 135 | | | |
| Full Copyright Statement .............................. 138 | | | |
| | | | |
| 1. LDP Overview | | | |
| | | | |
| The MPLS architecture [RFC3031] defines a label distribution protocol | | | |
| as a set of procedures by which one Label Switched Router (LSR) | | | |
| informs another of the meaning of labels used to forward traffic | | | |
| between and through them. | | | |
| | | | |
| The MPLS architecture does not assume a single label distribution | | | |
| protocol. In fact, a number of different label distribution proto- | | | |
| cols are being standardized. Existing protocols have been extended | | | |
| so that label distribution can be piggybacked on them. New protocols | | | |
| have also been defined for the explicit purpose of distributing | | | |
| labels. The MPLS architecture discusses some of the considerations | | | |
| when choosing a label distribution protocol for use in particular | | | |
| MPLS applications such as Traffic Engineering [RFC2702]. | | | |
| | | | |
| The Label Distribution Protocol (LDP) is a protocol defined for dis- | | | |
| tributing labels. It was originally published as RFC3036 in January | | | |
| 2001. It was produced by the MPLS working of the IETF and was jointly | | | |
| authored by Loa Andersson, Paul Doolan, Nancy Feldman, Andre Fredette | | | |
| and Bob Thomas. | | | |
| | | | |
| LDP is a protocol defined for distributing labels. It is the set of | | | |
| procedures and messages by which Label Switched Routers (LSRs) estab- | | | |
| lish Label Switched Paths (LSPs) through a network by mapping net- | | | |
| work-layer routing information directly to data-link layer switched | | | |
| paths. These LSPs may have an endpoint at a directly attached neigh- | | | |
| bor (comparable to IP hop-by-hop forwarding), or may have an endpoint | | | |
| at a network egress node, enabling switching via all intermediary | | | |
| nodes. | | | |
| | | | |
| LDP associates a Forwarding Equivalence Class (FEC) [RFC3031] with | | | |
| each LSP it creates. The FEC associated with an LSP specifies which | | | |
| packets are "mapped" to that LSP. LSPs are extended through a net- | | | |
| work as each LSR "splices" incoming labels for a FEC to the outgoing | | | |
| label assigned to the next hop for the given FEC. | | | |
| | | | |
| More information about the applicability of LDP can be found in | | | |
| [RFC3037]. | | | |
| | | | |
| This document assumes (but does not require) familiarity with the | | | |
| MPLS architecture [RFC3031]. Note that [RFC3031] includes a glossary | | | |
| of MPLS terminology, such as ingress, label switched path, etc. | | | |
| | | | |
| 1.1. LDP Peers | | | |
| | | | |
| Two LSRs which use LDP to exchange label/FEC mapping information are | | | |
| known as "LDP Peers" with respect to that information and we speak of | | | |
| there being an "LDP Session" between them. A single LDP session | | | |
| allows each peer to learn the other's label mappings; i.e., the pro- | | | |
| tocol is bi-directional. | | | |
| | | | |
| 1.2. LDP Message Exchange | | | |
| | | | |
| There are four categories of LDP messages: | | | |
| | | | |
| 1. Discovery messages, used to announce and maintain the presence | | | |
| of an LSR in a network. | | | |
| | | | |
| 2. Session messages, used to establish, maintain, and terminate | | | |
| sessions between LDP peers. | | | |
| | | | |
| 3. Advertisement messages, used to create, change, and delete | | | |
| label mappings for FECs. | | | |
| | | | |
| 4. to signal error information. | | | |
| | | | |
| Discovery messages provide a mechanism whereby LSRs indicate their | | | |
| presence in a network by sending a Hello message periodically. This | | | |
| is transmitted as a UDP packet to the LDP port at the `all routers on | | | |
| this subnet' group multicast address. When an LSR chooses to estab- | | | |
| lish a session with another LSR learned via the Hello message, it | | | |
| uses the LDP initialization procedure over TCP transport. Upon suc- | | | |
| cessful completion of the initialization procedure, the two LSRs are | | | |
| LDP peers, and may exchange advertisement messages. | | | |
| | | | |
| When to request a label or advertise a label mapping to a peer is | | | |
| largely a local decision made by an LSR. In general, the LSR | | | |
| requests a label mapping from a neighboring LSR when it needs one, | | | |
| and advertises a label mapping to a neighboring LSR when it wishes | | | |
| the neighbor to use a label. | | | |
| | | | |
| Correct operation of LDP requires reliable and in order delivery of | | | |
| messages. To satisfy these requirements LDP uses the TCP transport | | | |
| for session, advertisement and notification messages; i.e., for | | | |
| everything but the UDP-based discovery mechanism. | | | |
| | | | |
| 1.3. LDP Message Structure | | | |
| | | | |
| All LDP messages have a common structure that uses a Type-Length- | | | |
| Value (TLV) encoding scheme; see Section "Type-Length-Value" encod- | | | |
| ing. The Value part of a TLV-encoded object, or TLV for short, may | | | |
| itself contain one or more TLVs. | | | |
| | | | |
| 1.4. LDP Error Handling | | | |
| | | | |
| LDP errors and other events of interest are signaled to an LDP peer | | | |
| by notification messages. | | | |
| | | | |
| There are two kinds of LDP notification messages: | | | |
| | | | |
| 1. Error notifications, used to signal fatal errors. If an LSR | | | |
| receives an error notification from a peer for an LDP session, | | | |
| it terminates the LDP session by closing the TCP transport con- | | | |
| nection for the session and discarding all label mappings | | | |
| learned via the session. | | | |
| | | | |
| 2. Advisory notifications, used to pass an LSR information about | | | |
| the LDP session or the status of some previous message received | | | |
| from the peer. | | | |
| | | | |
| 1.5. LDP Extensibility and Future Compatibility | | | |
| | | | |
| Functionality may be added to LDP in the future. It is likely that | | | |
| future functionality will utilize new messages and object types | | | |
| (TLVs). It may be desirable to employ such new messages and TLVs | | | |
| within a network using older implementations that do not recognize | | | |
| them. While it is not possible to make every future enhancement | | | |
| backwards compatible, some prior planning can ease the introduction | | | |
| of new capabilities. This specification defines rules for handling | | | |
| unknown message types and unknown TLVs for this purpose. | | | |
| | | | |
| 1.6. Specification Language | | | |
| | | | |
| 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. LDP Operation | | | |
| | | | |
| 2.1. FECs | | | |
| | | | |
| It is necessary to precisely specify which packets may be mapped to | | | |
| each LSP. This is done by providing a FEC specification for each | | | |
| LSP. The FEC identifies the set of IP packets which may be mapped to | | | |
| that LSP. | | | |
| | | | |
| Each FEC is specified as a set of one or more FEC elements. Each FEC | | | |
| element identifies a set of packets which may be mapped to the corre- | | | |
| sponding LSP. When an LSP is shared by multiple FEC elements, that | | | |
| LSP is terminated at (or before) the node where the FEC elements can | | | |
| no longer share the same path. | | | |
| | | | |
| This specification defines a single type of FEC element, the "Address | | | |
| Prefix FEC element". This element is an address prefix of any length | | | |
| from 0 to a full address, inclusive. | | | |
| | | | |
| Additional FEC elements may be defined, as needed, by other specifi- | | | |
| cations. | | | |
| | | | |
| In the remainder of this section we give the rules to be used for | | | |
| mapping packets to LSPs that have been set up using an Address Prefix | | | |
| FEC element. | | | |
| | | | |
| We say that a particular address "matches" a particular address pre- | | | |
| fix if and only if that address begins with that prefix. We also say | | | |
| that a particular packet matches a particular LSP if and only if that | | | |
| LSP has an Address Prefix FEC element which matches the packet's des- | | | |
| tination address. With respect to a particular packet and a particu- | | | |
| lar LSP, we refer to any Address Prefix FEC element which matches the | | | |
| packet as the "matching prefix". | | | |
| | | | |
| The procedure for mapping a particular packet to a particular LSP | | | |
| uses the following rules. Each rule is applied in turn until the | | | |
| packet can be mapped to an LSP. | | | |
| | | | |
| - If a packet matches exactly one LSP, the packet is mapped to that | | | |
| LSP. | | | |
| | | | |
| - If a packet matches multiple LSPs, it is mapped to the LSP whose | | | |
| matching prefix is the longest. If there is no one LSP whose | | | |
| matching prefix is longest, the packet is mapped to one from the | | | |
| set of LSPs whose matching prefix is longer than the others. The | | | |
| procedure for selecting one of those LSPs is beyond the scope of | | | |
| this document. | | | |
| | | | |
| - If it is known that a packet must traverse a particular egress | | | |
| router, and there is an LSP which has an Address Prefix FEC ele- | | | |
| ment which is a /32 address of that router, then the packet is | | | |
| mapped to that LSP. The procedure for obtaining this knowledge | | | |
| is beyond the scope of this document. | | | |
| | | | |
| The procedure for determining that a packet must traverse a particu- | | | |
| lar egress router is beyond the scope of this document. (As an exam- | | | |
| ple, if one is running a link state routing algorithm, it may be pos- | | | |
| sible to obtain this information from the link state data base. As | | | |
| another example, if one is running BGP, it may be possible to obtain | | | |
| this information from the BGP next hop attribute of the packet's | | | |
| route.) | | | |
| | | | |
| 2.2. Label Spaces, Identifiers, Sessions and Transport | | | |
| | | | |
| 2.2.1. Label Spaces | | | |
| | | | |
| The notion of "label space" is useful for discussing the assignment | | | |
| and distribution of labels. There are two types of label spaces: | | | |
| | | | |
| - Per interface label space. Interface-specific incoming labels | | | |
| are used for interfaces that use interface resources for labels. | | | |
| An example of such an interface is a label-controlled ATM inter- | | | |
| face that uses VCIs as labels, or a Frame Relay interface that | | | |
| uses DLCIs (Data Link Connection Identifiers) as labels. | | | |
| | | | |
| Note that the use of a per interface label space only makes sense | | | |
| when the LDP peers are "directly connected" over an interface, | | | |
| and the label is only going to be used for traffic sent over that | | | |
| interface. | | | |
| | | | |
| - Per platform label space. Platform-wide incoming labels are used | | | |
| for interfaces that can share the same labels. | | | |
| | | | |
| 2.2.2. LDP Identifiers | | | |
| | | | |
| An LDP identifier is a six octet quantity used to identify an LSR | | | |
| label space. The first four octets identify the LSR and must be a | | | |
| globally unique value, such as a 32-bit router Id assigned to the | | | |
| LSR. The last two octets identify a specific label space within the | | | |
| LSR. The last two octets of LDP Identifiers for platform-wide label | | | |
| spaces are always both zero. This document uses the following print | | | |
| representation for LDP Identifiers: | | | |
| | | | |
| <LSR Id> : <label space id> | | | |
| e.g., lsr171:0, lsr19:2. | | | |
| | | | |
| Note that an LSR that manages and advertises multiple label spaces | | | |
| uses a different LDP Identifier for each such label space. | | | |
| | | | |
| A situation where an LSR would need to advertise more than one label | | | |
| space to a peer and hence use more than one LDP Identifier occurs | | | |
| when the LSR has two links to the peer and both are ATM (and use per | | | |
| interface labels). Another situation would be where the LSR had two | | | |
| links to the peer, one of which is ethernet (and uses per platform | | | |
| labels) and the other of which is ATM. | | | |
| | | | |
| 2.2.3. LDP Sessions | | | |
| | | | |
| LDP sessions exist between LSRs to support label exchange between | | | |
| them. | | | |
| | | | |
| When an LSR uses LDP to advertise more than one label space to | | | |
| another LSR it uses a separate LDP session for each label space. | | | |
| | | | |
| 2.2.4. LDP Transport | | | |
| | | | |
| LDP uses TCP as a reliable transport for sessions. | | | |
| | | | |
| When multiple LDP sessions are required between two LSRs there is | | | |
| one TCP session for each LDP session. | | | |
| | | | |
| 2.3. LDP Sessions between non-Directly Connected LSRs | | | |
| | | | |
| LDP sessions between LSRs that are not directly connected at the link | | | |
| level may be desirable in some situations. | | | |
| | | | |
| For example, consider a "traffic engineering" application where LSRa | | | |
| sends traffic matching some criteria via an LSP to non-directly con- | | | |
| nected LSRb rather than forwarding the traffic along its normally | | | |
| routed path. | | | |
| | | | |
| The path between LSRa and LSRb would include one or more intermediate | | | |
| LSRs (LSR1,...LSRn). An LDP session between LSRa and LSRb would | | | |
| enable LSRb to label switch traffic arriving on the LSP from LSRa by | | | |
| providing LSRb means to advertise labels for this purpose to LSRa. | | | |
| | | | |
| In this situation LSRa would apply two labels to traffic it forwards | | | |
| on the LSP to LSRb: a label learned from LSR1 to forward traffic | | | |
| along the LSP path from LSRa to LSRb; and a label learned from LSRb | | | |
| to enable LSRb to label switch traffic arriving on the LSP. | | | |
| | | | |
| LSRa first adds the label learned via its LDP session with LSRb to | | | |
| the packet label stack (either by replacing the label on top of the | | | |
| packet label stack with it if the packet arrives labeled or by push- | | | |
| ing it if the packet arrives unlabeled). Next, it pushes the label | | | |
| for the LSP learned from LSR1 onto the label stack. | | | |
| | | | |
| 2.4. LDP Discovery | | | |
| | | | |
| LDP discovery is a mechanism that enables an LSR to discover poten- | | | |
| tial LDP peers. Discovery makes it unnecessary to explicitly config- | | | |
| ure an LSR's label switching peers. | | | |
| | | | |
| There are two variants of the discovery mechanism: | | | |
| | | | |
| - A basic discovery mechanism used to discover LSR neighbors that | | | |
| are directly connected at the link level. | | | |
| | | | |
| - An extended discovery mechanism used to locate LSRs that are not | | | |
| directly connected at the link level. | | | |
| | | | |
| 2.4.1. Basic Discovery Mechanism | | | |
| | | | |
| To engage in LDP Basic Discovery on an interface an LSR periodically | | | |
| sends LDP Link Hellos out the interface. LDP Link Hellos are sent as | | | |
| UDP packets addressed to the well-known LDP discovery port for the | | | |
| "all routers on this subnet" group multicast address. | | | |
| | | | |
| An LDP Link Hello sent by an LSR carries the LDP Identifier for the | | | |
| label space the LSR intends to use for the interface and possibly | | | |
| additional information. | | | |
| | | | |
| Receipt of an LDP Link Hello on an interface identifies a "Hello | | | |
| adjacency" with a potential LDP peer reachable at the link level on | | | |
| the interface as well as the label space the peer intends to use for | | | |
| the interface. | | | |
| | | | |
| 2.4.2. Extended Discovery Mechanism | | | |
| | | | |
| LDP sessions between non-directly connected LSRs are supported by LDP | | | |
| Extended Discovery. | | | |
| | | | |
| To engage in LDP Extended Discovery an LSR periodically sends LDP | | | |
| Targeted Hellos to a specific address. LDP Targeted Hellos are sent | | | |
| as UDP packets addressed to the well-known LDP discovery port at the | | | |
| specific address. | | | |
| | | | |
| An LDP Targeted Hello sent by an LSR carries the LDP Identifier for | | | |
| the label space the LSR intends to use and possibly additional | | | |
| optional information. | | | |
| | | | |
| Extended Discovery differs from Basic Discovery in the following | | | |
| ways: | | | |
| | | | |
| - A Targeted Hello is sent to a specific address rather than to the | | | |
| "all routers" group multicast address for the outgoing interface. | | | |
| | | | |
| - Unlike Basic Discovery, which is symmetric, Extended Discovery is | | | |
| asymmetric. | | | |
| | | | |
| One LSR initiates Extended Discovery with another targeted LSR, | | | |
| and the targeted LSR decides whether to respond to or ignore the | | | |
| Targeted Hello. A targeted LSR that chooses to respond does so | | | |
| by periodically sending Targeted Hellos to the initiating LSR. | | | |
| | | | |
| Receipt of an LDP Targeted Hello identifies a "Hello adjacency" with | | | |
| a potential LDP peer reachable at the network level and the label | | | |
| space the peer intends to use. | | | |
| | | | |
| 2.5. Establishing and Maintaining LDP Sessions | | | |
| | | | |
| 2.5.1. LDP Session Establishment | | | |
| | | | |
| The exchange of LDP Discovery Hellos between two LSRs triggers LDP | | | |
| session establishment. Session establishment is a two step process: | | | |
| | | | |
| - Transport connection establishment. | | | |
| - Session initialization | | | |
| | | | |
| The following describes establishment of an LDP session between LSRs | | | |
| LSR1 and LSR2 from LSR1's point of view. It assumes the exchange of | | | |
| Hellos specifying label space LSR1:a for LSR1 and label space LSR2:b | | | |
| for LSR2. | | | |
| | | | |
| 2.5.2. Transport Connection Establishment | | | |
| | | | |
| The exchange of Hellos results in the creation of a Hello adjacency | | | |
| at LSR1 that serves to bind the link (L) and the label spaces LSR1:a | | | |
| and LSR2:b. | | | |
| | | | |
| 1. If LSR1 does not already have an LDP session for the exchange of | | | |
| label spaces LSR1:a and LSR2:b it attempts to open a TCP con- | | | |
| nection for a new LDP session with LSR2. | | | |
| | | | |
| LSR1 determines the transport addresses to be used at its end | | | |
| (A1) and LSR2's end (A2) of the LDP TCP connection. Address A1 | | | |
| is determined as follows: | | | |
| | | | |
| a. If LSR1 uses the Transport Address optional object (TLV) in | | | |
| Hello's it sends to LSR2 to advertise an address, A1 is the | | | |
| address LSR1 advertises via the optional object; | | | |
| | | | |
| b. If LSR1 does not use the Transport Address optional object, | | | |
| A1 is the source address used in Hellos it sends to LSR2. | | | |
| | | | |
| Similarly, address A2 is determined as follows: | | | |
| | | | |
| a. If LSR2 uses the Transport Address optional object, A2 is | | | |
| the address LSR2 advertises via the optional object; | | | |
| | | | |
| b. If LSR2 does not use the Transport Address optional object, | | | |
| A2 is the source address in Hellos received from LSR2. | | | |
| | | | |
| 2. LSR1 determines whether it will play the active or passive role | | | |
| in session establishment by comparing addresses A1 and A2 as | | | |
| unsigned integers. If A1 > A2, LSR1 plays the active role; | | | |
| otherwise it is passive. | | | |
| | | | |
| The procedure for comparing A1 and A2 as unsigned integers is: | | | |
| | | | |
| - If A1 and A2 are not in the same address family, they are | | | |
| incomparable, and no session can be established. | | | |
| | | | |
| - Let U1 be the abstract unsigned integer obtained by treat- | | | |
| ing A1 as a sequence of bytes, where the byte which appears | | | |
| earliest in the message is the most significant byte of the | | | |
| integer and the byte which appears latest in the message is | | | |
| the least significant byte of the integer. | | | |
| | | | |
| Let U2 be the abstract unsigned integer obtained from A2 in | | | |
| a similar manner. | | | |
| | | | |
| - Compare U1 with U2. If U1 > U2, then A1 > A2; if U1 < U2, | | | |
| then A1 < A2. | | | |
| | | | |
| 3. If LSR1 is active, it attempts to establish the LDP TCP connec- | | | |
| tion by connecting to the well-known LDP port at address A2. | | | |
| If LSR1 is passive, it waits for LSR2 to establish the LDP TCP | | | |
| connection to its well-known LDP port. | | | |
| | | | |
| Note that when an LSR sends a Hello it selects the transport address | | | |
| for its end of the session connection and uses the Hello to advertise | | | |
| the address, either explicitly by including it in an optional Trans- | | | |
| port Address TLV or implicitly by omitting the TLV and using it as | | | |
| the Hello source address. | | | |
| | | | |
| An LSR MUST advertise the same transport address in all Hellos that | | | |
| advertise the same label space. This requirement ensures that two | | | |
| LSRs linked by multiple Hello adjacencies using the same label spaces | | | |
| play the same connection establishment role for each adjacency. | | | |
| | | | |
| 2.5.3. Session Initialization | | | |
| | | | |
| After LSR1 and LSR2 establish a transport connection they negotiate | | | |
| session parameters by exchanging LDP Initialization messages. The | | | |
| parameters negotiated include LDP protocol version, label distribu- | | | |
| tion method, timer values, VPI/VCI (Virtual Path Identifier/ Virtual | | | |
| Channel Identifier) ranges for label controlled ATM, DLCI (Data Link | | | |
| Connection Identifier) ranges for label controlled Frame Relay, etc. | | | |
| | | | |
| Successful negotiation completes establishment of an LDP session | | | |
| between LSR1 and LSR2 for the advertisement of label spaces LSR1:a | | | |
| and LSR2:b. | | | |
| | | | |
| The following describes the session initialization from LSR1's point | | | |
| of view. | | | |
| | | | |
| After the connection is established, if LSR1 is playing the active | | | |
| role, it initiates negotiation of session parameters by sending an | | | |
| Initialization message to LSR2. If LSR1 is passive, it waits for | | | |
| LSR2 to initiate the parameter negotiation. | | | |
| | | | |
| In general when there are multiple links between LSR1 and LSR2 and | | | |
| multiple label spaces to be advertised by each, the passive LSR can- | | | |
| not know which label space to advertise over a newly established TCP | | | |
| connection until it receives the LDP Initialization message on the | | | |
| connection. The Initialization message carries both the LDP Identi- | | | |
| fier for the sender's (active LSR's) label space and the LDP Identi- | | | |
| fier for the receiver's (passive LSR's) label space. | | | |
| | | | |
| By waiting for the Initialization message from its peer the passive | | | |
| LSR can match the label space to be advertised by the peer (as deter- | | | |
| mined from the LDP Identifier in the PDU header for the Initializa- | | | |
| tion message) with a Hello adjacency previously created when Hellos | | | |
| were exchanged. | | | |
| | | | |
| 1. When LSR1 plays the passive role: | | | |
| | | | |
| a. If LSR1 receives an Initialization message it attempts to | | | |
| match the LDP Identifier carried by the message PDU with a | | | |
| Hello adjacency. | | | |
| | | | |
| b. If there is a matching Hello adjacency, the adjacency speci- | | | |
| fies the local label space for the session. | | | |
| | | | |
| Next LSR1 checks whether the session parameters proposed in | | | |
| the message are acceptable. If they are, LSR1 replies with | | | |
| an Initialization message of its own to propose the parame- | | | |
| ters it wishes to use and a KeepAlive message to signal | | | |
| acceptance of LSR2's parameters. If the parameters are not | | | |
| acceptable, LSR1 responds by sending a Session | | | |
| Rejected/Parameters Error Notification message and closing | | | |
| the TCP connection. | | | |
| | | | |
| c. If LSR1 cannot find a matching Hello adjacency it sends a | | | |
| Session Rejected/No Hello Error Notification message and | | | |
| closes the TCP connection. | | | |
| | | | |
| d. If LSR1 receives a KeepAlive in response to its Initializa- | | | |
| tion message, the session is operational from LSR1's point | | | |
| of view. | | | |
| | | | |
| e. If LSR1 receives an Error Notification message, LSR2 has | | | |
| rejected its proposed session and LSR1 closes the TCP con- | | | |
| nection. | | | |
| | | | |
| 2. When LSR1 plays the active role: | | | |
| | | | |
| a. If LSR1 receives an Error Notification message, LSR2 has | | | |
| rejected its proposed session and LSR1 closes the TCP con- | | | |
| nection. | | | |
| | | | |
| b. If LSR1 receives an Initialization message, it checks | | | |
| whether the session parameters are acceptable. If so, it | | | |
| replies with a KeepAlive message. If the session parame- | | | |
| ters are unacceptable, LSR1 sends a Session Rejected/Param- | | | |
| eters Error Notification message and closes the connection. | | | |
| | | | |
| c. If LSR1 receives a KeepAlive message, LSR2 has accepted its | | | |
| proposed session parameters. | | | |
| | | | |
| d. When LSR1 has received both an acceptable Initialization | | | |
| message and a KeepAlive message the session is operational | | | |
| from LSR1's point of view. | | | |
| | | | |
| Until the LDP session is established, no other messages | | | |
| except those listed in the procedures above may be | | | |
| exchanged, and the rules for processing the U-bit in LDP | | | |
| messages are overridden. If a message other than those | | | |
| listed in the procedures above is received, a Shutdown msg | | | |
| MUST be transmitted and the transport connection MUST be | | | |
| closed. | | | |
| | | | |
| It is possible for a pair of incompatibly configured LSRs that | | | |
| disagree on session parameters to engage in an endless sequence | | | |
| of messages as each NAKs the other's Initialization messages with | | | |
| Error Notification messages. | | | |
| | | | |
| An LSR MUST throttle its session setup retry attempts with an | | | |
| exponential backoff in situations where Initialization messages | | | |
| are being NAK'd. It is also recommended that an LSR detecting | | | |
| such a situation take action to notify an operator. | | | |
| | | | |
| The session establishment setup attempt following a NAK'd Ini- | | | |
| tialization message MUST be delayed no less than 15 seconds, and | | | |
| subsequent delays MUST grow to a maximum delay of no less than 2 | | | |
| minutes. The specific session establishment action that must be | | | |
| delayed is the attempt to open the session transport connection | | | |
| by the LSR playing the active role. | | | |
| | | | |
| The throttled sequence of Initialization NAKs is unlikely to | | | |
| cease until operator intervention reconfigures one of the LSRs. | | | |
| After such a configuration action there is no further need to | | | |
| throttle subsequent session establishment attempts (until their | | | |
| initialization messages are NAK'd). | | | |
| | | | |
| Due to the asymmetric nature of session establishment, reconfigu- | | | |
| ration of the passive LSR will go unnoticed by the active LSR | | | |
| without some further action. Section "Hello Message" describes | | | |
| an optional mechanism an LSR can use to signal potential LDP | | | |
| peers that it has been reconfigured. | | | |
| | | | |
| 2.5.4. Initialization State Machine | | | |
| | | | |
| It is convenient to describe LDP session negotiation behavior in | | | |
| terms of a state machine. We define the LDP state machine to have | | | |
| five possible states and present the behavior as a state transition | | | |
| table and as a state transition diagram. Note that a shutdown message | | | |
| is implemented as a notification message with a status TLV indicating | | | |
| a fatal error. | | | |
| | | | |
| Session Initialization State Transition Table | | | |
| | | | |
| STATE EVENT NEW STATE | | | |
| | | | |
| NON EXISTENT Session TCP connection established INITIALIZED | | | |
| established | | | |
| | | | |
| INITIALIZED Transmit Initialization msg OPENSENT | | | |
| (Active Role) | | | |
| | | | |
| Receive acceptable OPENREC | | | |
| Initialization msg | | | |
| (Passive Role ) | | | |
| Action: Transmit Initialization | | | |
| msg and KeepAlive msg | | | |
| | | | |
| Receive Any other LDP msg NON EXISTENT | | | |
| Action: Transmit Error Notification msg | | | |
| (NAK) and close transport connection | | | |
| | | | |
| OPENREC Receive KeepAlive msg OPERATIONAL | | | |
| | | | |
| Receive Any other LDP msg NON EXISTENT | | | |
| Action: Transmit Error Notification msg | | | |
| (NAK) and close transport connection | | | |
| | | | |
| OPENSENT Receive acceptable OPENREC | | | |
| Initialization msg | | | |
| Action: Transmit KeepAlive msg | | | |
| | | | |
| Receive Any other LDP msg NON EXISTENT | | | |
| Action: Transmit Error Notification msg | | | |
| (NAK) and close transport connection | | | |
| | | | |
| OPERATIONAL Receive Shutdown msg NON EXISTENT | | | |
| Action: Transmit Shutdown msg and | | | |
| close transport connection | | | |
| | | | |
| Receive other LDP msgs OPERATIONAL | | | |
| Timeout NON EXISTENT | | | |
| Action: Transmit Shutdown msg and | | | |
| close transport connection | | | |
| | | | |
| Session Initialization State Transition Diagram | | | |
| | | | |
| +------------+ | | | |
| | | | | | |
| +------------>|NON EXISTENT|<--------------------+ | | | |
| | | | | | | | |
| | +------------+ | | | | |
| | Session | ^ | | | | |
| | connection | | | | | | |
| | established | | Rx any LDP msg except | | | | |
| | V | Init msg or Timeout | | | | |
| | +-----------+ | | | | |
| Rx Any other | | | | | | | |
| msg or | |INITIALIZED| | | | | |
| Timeout / | +---| |-+ | | | | |
| Tx NAK msg | | +-----------+ | | | | | |
| | | (Passive Role) | (Active Role) | | | | |
| | | Rx Acceptable | Tx Init msg | | | | |
| | | Init msg / | | | | | |
| | | Tx Init msg | | | | | |
| | | Tx KeepAlive | | | | | |
| | V msg V | | | | |
| | +-------+ +--------+ | | | | |
| | | | | | | | | | |
| +---|OPENREC| |OPENSENT|----------------->| | | | |
| +---| | | | Rx Any other msg | | | | |
| | +-------+ +--------+ or Timeout | | | | |
| Rx KeepAlive | ^ | Tx NAK msg | | | | |
| msg | | | | | | | |
| | | | Rx Acceptable | | | | |
| | | | Init msg / | | | | |
| | +----------------+ Tx KeepAlive msg | | | | |
| | | | | | |
| | +-----------+ | | | | |
| +----->| | | | | | |
| |OPERATIONAL| | | | | |
| | |---------------------------->+ | | | |
| +-----------+ Rx Shutdown msg | | | |
| All other | ^ or Timeout / | | | |
| LDP msgs | | Tx Shutdown msg | | | |
| | | | | | |
| +---+ | | | |
| | | | |
| 2.5.5. Maintaining Hello Adjacencies | | | |
| | | | |
| An LDP session with a peer has one or more Hello adjacencies. | | | |
| | | | |
| An LDP session has multiple Hello adjacencies when a pair of LSRs is | | | |
| connected by multiple links that share the same label space; for | | | |
| example, multiple PPP links between a pair of routers. In this situ- | | | |
| ation the Hellos an LSR sends on each such link carry the same LDP | | | |
| Identifier. | | | |
| | | | |
| LDP includes mechanisms to monitor the necessity of an LDP session | | | |
| and its Hello adjacencies. | | | |
| | | | |
| LDP uses the regular receipt of LDP Discovery Hellos to indicate a | | | |
| peer's intent to use the label space identified by the Hello. An LSR | | | |
| maintains a hold timer with each Hello adjacency which it restarts | | | |
| when it receives a Hello that matches the adjacency. If the timer | | | |
| expires without receipt of a matching Hello from the peer, LDP con- | | | |
| cludes that the peer no longer wishes to label switch using that | | | |
| label space for that link (or target, in the case of Targeted Hellos) | | | |
| or that the peer has failed. The LSR then deletes the Hello adja- | | | |
| cency. When the last Hello adjacency for a LDP session is deleted, | | | |
| the LSR terminates the LDP session by sending a Notification message | | | |
| and closing the transport connection. | | | |
| | | | |
| 2.5.6. Maintaining LDP Sessions | | | |
| | | | |
| LDP includes mechanisms to monitor the integrity of the LDP session. | | | |
| | | | |
| LDP uses the regular receipt of LDP PDUs on the session transport | | | |
| connection to monitor the integrity of the session. An LSR maintains | | | |
| a KeepAlive timer for each peer session which it resets whenever it | | | |
| receives an LDP PDU from the session peer. If the KeepAlive timer | | | |
| expires without receipt of an LDP PDU from the peer the LSR concludes | | | |
| that the transport connection is bad or that the peer has failed, and | | | |
| it terminates the LDP session by closing the transport connection. | | | |
| | | | |
| After an LDP session has been established, an LSR must arrange that | | | |
| its peer receive an LDP PDU from it at least every KeepAlive time | | | |
| period to ensure the peer restarts the session KeepAlive timer. The | | | |
| LSR may send any protocol message to meet this requirement. In cir- | | | |
| cumstances where an LSR has no other information to communicate to | | | |
| its peer, it sends a KeepAlive message. | | | |
| | | | |
| An LSR may choose to terminate an LDP session with a peer at any | | | |
| time. Should it choose to do so, it informs the peer with a Shutdown | | | |
| message. | | | |
| | | | |
| 2.6. Label Distribution and Management | | | |
| | | | |
| The MPLS architecture [RFC3031] allows an LSR to distribute a FEC | | | |
| label binding in response to an explicit request from another LSR. | | | |
| This is known as Downstream On Demand label distribution. It also | | | |
| allows an LSR to distribute label bindings to LSRs that have not | | | |
| explicitly requested them. [RFC3031] calls this method of label dis- | | | |
| tribution Unsolicited Downstream; this document uses the term Down- | | | |
| stream Unsolicited. | | | |
| | | | |
| Both of these label distribution techniques may be used in the same | | | |
| network at the same time. However, for any given LDP session, each | | | |
| LSR must be aware of the label distribution method used by its peer | | | |
| in order to avoid situations where one peer using Downstream Unso- | | | |
| licited label distribution assumes its peer is also. See Section | | | |
| "Downstream on Demand label Advertisement". | | | |
| | | | |
| 2.6.1. Label Distribution Control Mode | | | |
| | | | |
| The behavior of the initial setup of LSPs is determined by whether | | | |
| the LSR is operating with independent or ordered LSP control. An LSR | | | |
| may support both types of control as a configurable option. | | | |
| | | | |
| 2.6.1.1. Independent Label Distribution Control | | | |
| | | | |
| When using independent LSP control, each LSR may advertise label map- | | | |
| pings to its neighbors at any time it desires. For example, when | | | |
| operating in independent Downstream on Demand mode, an LSR may answer | | | |
| requests for label mappings immediately, without waiting for a label | | | |
| mapping from the next hop. When operating in independent Downstream | | | |
| Unsolicited mode, an LSR may advertise a label mapping for a FEC to | | | |
| its neighbors whenever it is prepared to label-switch that FEC. | | | |
| | | | |
| A consequence of using independent mode is that an upstream label can | | | |
| be advertised before a downstream label is received. | | | |
| | | | |
| 2.6.1.2. Ordered Label Distribution Control | | | |
| | | | |
| When using LSP ordered control, an LSR may initiate the transmission | | | |
| of a label mapping only for a FEC for which it has a label mapping | | | |
| for the FEC next hop, or for which the LSR is the egress. For each | | | |
| FEC for which the LSR is not the egress and no mapping exists, the | | | |
| LSR MUST wait until a label from a downstream LSR is received before | | | |
| mapping the FEC and passing corresponding labels to upstream LSRs. | | | |
| An LSR may be an egress for some FECs and a non-egress for others. | | | |
| | | | |
| An LSR may act as an egress LSR, with respect to a particular FEC, | | | |
| under any of the following conditions: | | | |
| | | | |
| 1. The FEC refers to the LSR itself (including one of its directly | | | |
| attached interfaces). | | | |
| | | | |
| 2. The next hop router for the FEC is outside of the Label Switch- | | | |
| ing Network. | | | |
| | | | |
| 3. FEC elements are reachable by crossing a routing domain bound- | | | |
| ary, such as another area for OSPF summary networks, or another | | | |
| autonomous system for OSPF AS externals and BGP routes | | | |
| [RFC2328] [RFC4271]. | | | |
| | | | |
| Note that whether an LSR is an egress for a given FEC may change over | | | |
| time, depending on the state of the network and LSR configuration | | | |
| settings. | | | |
| | | | |
| 2.6.2. Label Retention Mode | | | |
| | | | |
| The MPLS architecture [RFC3031] introduces the notion of label reten- | | | |
| tion mode which specifies whether an LSR maintains a label binding | | | |
| for a FEC learned from a neighbor that is not its next hop for the | | | |
| FEC. | | | |
| | | | |
| 2.6.2.1. Conservative Label Retention Mode | | | |
| | | | |
| In Downstream Unsolicited advertisement mode, label mapping adver- | | | |
| tisements for all routes may be received from all peer LSRs. When | | | |
| using conservative label retention, advertised label mappings are | | | |
| retained only if they will be used to forward packets (i.e., if they | | | |
| are received from a valid next hop according to routing). If operat- | | | |
| ing in Downstream on Demand mode, an LSR will request label mappings | | | |
| only from the next hop LSR according to routing. Since Downstream on | | | |
| Demand mode is primarily used when label conservation is desired | | | |
| (e.g., an ATM switch with limited cross connect space), it is typi- | | | |
| cally used with the conservative label retention mode. | | | |
| | | | |
| The main advantage of the conservative mode is that only the labels | | | |
| that are required for the forwarding of data are allocated and main- | | | |
| tained. This is particularly important in LSRs where the label space | | | |
| is inherently limited, such as in an ATM switch. A disadvantage of | | | |
| the conservative mode is that if routing changes the next hop for a | | | |
| given destination, a new label must be obtained from the new next hop | | | |
| before labeled packets can be forwarded. | | | |
| | | | |
| 2.6.2.2. Liberal Label Retention Mode | | | |
| | | | |
| In Downstream Unsolicited advertisement mode, label mapping adver- | | | |
| tisements for all routes may be received from all LDP peers. When | | | |
| using liberal label retention, every label mappings received from a | | | |
| peer LSR is retained regardless of whether the LSR is the next hop | | | |
| for the advertised mapping. When operating in Downstream on Demand | | | |
| mode with liberal label retention, an LSR might choose to request | | | |
| label mappings for all known prefixes from all peer LSRs. Note, how- | | | |
| ever, that Downstream on Demand mode is typically used by devices | | | |
| such as ATM switch-based LSRs for which the conservative approach is | | | |
| recommended. | | | |
| | | | |
| The main advantage of the liberal label retention mode is that reac- | | | |
| tion to routing changes can be quick because labels already exist. | | | |
| The main disadvantage of the liberal mode is that unneeded label map- | | | |
| pings are distributed and maintained. | | | |
| | | | |
| 2.6.3. Label Advertisement Mode | | | |
| | | | |
| Each interface on an LSR is configured to operate in either Down- | | | |
| stream Unsolicited or Downstream on Demand advertisement mode. LSRs | | | |
| exchange advertisement modes during initialization. The major dif- | | | |
| ference between Downstream Unsolicited and Downstream on Demand modes | | | |
| is in which LSR takes responsibility for initiating mapping requests | | | |
| and mapping advertisements. | | | |
| | | | |
| 2.7. LDP Identifiers and Next Hop Addresses | | | |
| | | | |
| An LSR maintains learned labels in a Label Information Base (LIB). | | | |
| When operating in Downstream Unsolicited mode, the LIB entry for an | | | |
| address prefix associates a collection of (LDP Identifier, label) | | | |
| pairs with the prefix, one such pair for each peer advertising a | | | |
| label for the prefix. | | | |
| | | | |
| When the next hop for a prefix changes the LSR must retrieve the | | | |
| label advertised by the new next hop from the LIB for use in forward- | | | |
| ing. To retrieve the label the LSR must be able to map the next hop | | | |
| address for the prefix to an LDP Identifier. | | | |
| | | | |
| Similarly, when the LSR learns a label for a prefix from an LDP peer, | | | |
| it must be able to determine whether that peer is currently a next | | | |
| hop for the prefix to determine whether it needs to start using the | | | |
| newly learned label when forwarding packets that match the prefix. | | | |
| To make that decision the LSR must be able to map an LDP Identifier | | | |
| to the peer's addresses to check whether any are a next hop for the | | | |
| prefix. | | | |
| | | | |
| To enable LSRs to map between a peer LDP identifier and the peer's | | | |
| addresses, LSRs advertise their addresses using LDP Address and With- | | | |
| draw Address messages. | | | |
| | | | |
| An LSR sends an Address message to advertise its addresses to a peer. | | | |
| An LSR sends a Withdraw Address message to withdraw previously adver- | | | |
| tised addresses from a peer | | | |
| | | | |
| 2.8. Loop Detection | | | |
| | | | |
| Loop detection is a configurable option which provides a mechanism | | | |
| for finding looping LSPs and for preventing Label Request messages | | | |
| from looping in the presence of non-merge capable LSRs. | | | |
| | | | |
| The mechanism makes use of Path Vector and Hop Count TLVs carried by | | | |
| Label Request and Label Mapping messages. It builds on the following | | | |
| basic properties of these TLVs: | | | |
| | | | |
| - A Path Vector TLV contains a list of the LSRs that its containing | | | |
| message has traversed. An LSR is identified in a Path Vector | | | |
| list by its unique LSR Identifier (Id), which is the first four | | | |
| octets of its LDP Identifier. When an LSR propagates a message | | | |
| containing a Path Vector TLV it adds its LSR Id to the Path Vec- | | | |
| tor list. An LSR that receives a message with a Path Vector that | | | |
| contains its LSR Id detects that the message has traversed a | | | |
| loop. LDP supports the notion of a maximum allowable Path Vector | | | |
| length; an LSR that detects a Path Vector has reached the maximum | | | |
| length behaves as if the containing message has traversed a loop. | | | |
| | | | |
| - A Hop Count TLV contains a count of the LSRS that the containing | | | |
| message has traversed. When an LSR propagates a message contain- | | | |
| ing a Hop Count TLV it increments the count. An LSR that detects | | | |
| a Hop Count has reached a configured maximum value behaves as if | | | |
| the containing message has traversed a loop. By convention a | | | |
| count of 0 is interpreted to mean the hop count is unknown. | | | |
| Incrementing an unknown hop count value results in an unknown hop | | | |
| count value (0). | | | |
| | | | |
| The following paragraphs describes LDP loop detection procedures. | | | |
| For these paragraphs, and only these paragraphs, "MUST" is redefined | | | |
| to mean "MUST if configured for loop detection". The paragraphs | | | |
| specify messages that MUST carry Path Vector and Hop Count TLVs. | | | |
| Note that the Hop Count TLV and its procedures are used without the | | | |
| Path Vector TLV in situations when loop detection is not configured | | | |
| (see [RFC3035] and [RFC3034]). | | | |
| | | | |
| 2.8.1. Label Request Message | | | |
| | | | |
| The use of the Path Vector TLV and Hop Count TLV prevent Label | | | |
| Request messages from looping in environments that include non-merge | | | |
| capable LSRs. | | | |
| | | | |
| The rules that govern use of the Hop Count TLV in Label Request mes- | | | |
| sages by LSR R when Loop Detection is enabled are the following: | | | |
| | | | |
| - The Label Request message MUST include a Hop Count TLV. | | | |
| | | | |
| - If R is sending the Label Request because it is a FEC ingress, it | | | |
| MUST include a Hop Count TLV with hop count value 1. | | | |
| | | | |
| - If R is sending the Label Request as a result of having received a | | | |
| Label Request from an upstream LSR, and if the received Label | | | |
| Request contains a Hop Count TLV, R MUST increment the received hop | | | |
| count value by 1 and MUST pass the resulting value in a Hop Count | | | |
| TLV to its next hop along with the Label Request message; | | | |
| | | | |
| The rules that govern use of the Path Vector TLV in Label Request | | | |
| messages by LSR R when Loop Detection is enabled are the following: | | | |
| | | | |
| - If R is sending the Label Request because it is a FEC ingress, | | | |
| then if R is non-merge capable, it MUST include a Path Vector TLV | | | |
| of length 1 containing its own LSR Id. | | | |
| | | | |
| - If R is sending the Label Request as a result of having received | | | |
| a Label Request from an upstream LSR, then if the received Label | | | |
| Request contains a Path Vector TLV or if R is non-merge capable: | | | |
| | | | |
| R MUST add its own LSR Id to the Path Vector, and MUST pass | | | |
| the resulting Path Vector to its next hop along with the | | | |
| Label Request message. If the Label Request contains no Path | | | |
| Vector TLV, R MUST include a Path Vector TLV of length 1 con- | | | |
| taining its own LSR Id. | | | |
| | | | |
| Note that if R receives a Label Request message for a particular | | | |
| FEC, and R has previously sent a Label Request message for that FEC | | | |
| to its next hop and has not yet received a reply, and if R intends | | | |
| to merge the newly received Label Request with the existing out- | | | |
| standing Label Request, then R does not propagate the Label Request | | | |
| to the next hop. | | | |
| | | | |
| If R receives a Label Request message from its next hop with a Hop | | | |
| Count TLV which exceeds the configured maximum value, or with a | | | |
| Path Vector TLV containing its own LSR Id or which exceeds the max- | | | |
| imum allowable length, then R detects that the Label Request | | | |
| message has traveled in a loop. | | | |
| | | | |
| When R detects a loop, it MUST send a Loop Detected Notification | | | |
| message to the source of the Label Request message and drop the | | | |
| Label Request message. | | | |
| | | | |
| 2.8.2. Label Mapping Message | | | |
| | | | |
| The use of the Path Vector TLV and Hop Count TLV in the Label Mapping | | | |
| message provide a mechanism to find and terminate looping LSPs. When | | | |
| an LSR receives a Label Mapping message from a next hop, the message | | | |
| is propagated upstream as specified below until an ingress LSR is | | | |
| reached or a loop is found. | | | |
| | | | |
| The rules that govern the use of the Hop Count TLV in Label Mapping | | | |
| messages sent by an LSR R when Loop Detection is enabled are the fol- | | | |
| lowing: | | | |
| | | | |
| - R MUST include a Hop Count TLV. | | | |
| | | | |
| - If R is the egress, the hop count value MUST be 1. | | | |
| | | | |
| - If the Label Mapping message is being sent to propagate a Label | | | |
| Mapping message received from the next hop to an upstream peer, the | | | |
| hop count value MUST be determined as follows: | | | |
| | | | |
| o If R is a member of the edge set of an LSR domain whose LSRs do | | | |
| not perform 'TTL-decrement' (e.g., an ATM LSR domain or a Frame | | | |
| Relay LSR domain) and the upstream peer is within that domain, R | | | |
| MUST reset the hop count to 1 before propagating the message. | | | |
| | | | |
| o Otherwise, R MUST increment the hop count received from the next | | | |
| hop before propagating the message. | | | |
| | | | |
| - If the Label Mapping message is not being sent to propagate a | | | |
| Label Mapping message, the hop count value MUST be the result of | | | |
| incrementing R's current knowledge of the hop count learned from | | | |
| previous Label Mapping messages. Note that this hop count value | | | |
| will be unknown if R has not received a Label Mapping message from | | | |
| the next hop. | | | |
| | | | |
| Any Label Mapping message MAY contain a Path Vector TLV. The rules | | | |
| that govern the mandatory use of the Path Vector TLV in Label Mapping | | | |
| messages sent by LSR R when Loop Detection is enabled are the follow- | | | |
| ing: | | | |
| | | | |
| - If R is the egress, the Label Mapping message need not include a | | | |
| Path Vector TLV. | | | |
| | | | |
| - If R is sending the Label Mapping message to propagate a Label | | | |
| Mapping message received from the next hop to an upstream peer, | | | |
| then: | | | |
| | | | |
| o If R is merge capable and if R has not previously sent a Label | | | |
| Mapping message to the upstream peer, then it MUST include a | | | |
| Path Vector TLV. | | | |
| | | | |
| o If the received message contains an unknown hop count, then R | | | |
| MUST include a Path Vector TLV. | | | |
| | | | |
| o If R has previously sent a Label Mapping message to the | | | |
| upstream peer, then it MUST include a Path Vector TLV if the | | | |
| received message reports an LSP hop count increase, a change in | | | |
| hop count from unknown to known, or a change from known to | | | |
| unknown. | | | |
| | | | |
| If the above rules require R include a Path Vector TLV in the Label | | | |
| Mapping message, R computes it as follows: | | | |
| | | | |
| o If the received Label Mapping message included a Path Vector, | | | |
| the Path Vector sent upstream MUST be the result of adding R's | | | |
| LSR Id to the received Path Vector. | | | |
| | | | |
| o If the received message had no Path Vector, the Path Vector | | | |
| sent upstream MUST be a path vector of length 1 containing R's | | | |
| LSR Id. | | | |
| | | | |
| - If the Label Mapping message is not being sent to propagate a | | | |
| received message upstream, the Label Mapping message MUST | | | |
| include a Path Vector of length 1 containing R's LSR Id. | | | |
| | | | |
| If R receives a Label Mapping message from its next hop with a | | | |
| Hop Count TLV which exceeds the configured maximum value, or with | | | |
| a Path Vector TLV containing its own LSR Id or which exceeds the | | | |
| maximum allowable length, then R detects that the corresponding | | | |
| LSP contains a loop. | | | |
| | | | |
| When R detects a loop, it MUST stop using the label for forward- | | | |
| ing, drop the Label Mapping message, and signal Loop Detected | | | |
| status to the source of the Label Mapping message. | | | |
| | | | |
| 2.8.3. Discussion | | | |
| | | | |
| If loop detection is desired in an MPLS domain, then it should be | | | |
| turned on in ALL LSRs within that MPLS domain, else loop detection | | | |
| will not operate properly and may result in undetected loops or in | | | |
| falsely detected loops. | | | |
| | | | |
| LSRs which are configured for loop detection are NOT expected to | | | |
| store the path vectors as part of the LSP state. | | | |
| | | | |
| Note that in a network where only non-merge capable LSRs are present, | | | |
| Path Vectors are passed downstream from ingress to egress, and are | | | |
| not passed upstream. Even when merge is supported, Path Vectors need | | | |
| not be passed upstream along an LSP which is known to reach the | | | |
| egress. When an LSR experiences a change of next hop, it need pass | | | |
| Path Vectors upstream only when it cannot tell from the hop count | | | |
| that the change of next hop does not result in a loop. | | | |
| | | | |
| In the case of ordered label distribution, Label Mapping messages are | | | |
| propagated from egress toward ingress, naturally creating the Path | | | |
| Vector along the way. In the case of independent label distribution, | | | |
| an LSR may originate a Label Mapping message for an FEC before | | | |
| receiving a Label Mapping message from its downstream peer for that | | | |
| FEC. In this case, the subsequent Label Mapping message for the FEC | | | |
| received from the downstream peer is treated as an update to LSP | | | |
| attributes, and the Label Mapping message must be propagated | | | |
| upstream. Thus, it is recommended that loop detection be configured | | | |
| in conjunction with ordered label distribution, to minimize the num- | | | |
| ber of Label Mapping update messages. | | | |
| | | | |
| 2.9. Authenticity and Integrity of LDP Messages | | | |
| | | | |
| This section specifies a mechanism to protect against the introduc- | | | |
| tion of spoofed TCP segments into LDP session connection streams. | | | |
| The use of this mechanism MUST be supported as a configurable option. | | | |
| | | | |
| The mechanism is based on use of the TCP MD5 Signature Option speci- | | | |
| fied in [RFC2385] for use by BGP [RFC4271]. See [RFC1321] for a | | | |
| specification of the MD5 hash function. From a standards maturity | | | |
| point of view, the current document relates to [RFC2385] the same way | | | |
| as [RFC4271] relates to [RFC2385]. This is explained in [RFC4278]. | | | |
| | | | |
| 2.9.1. TCP MD5 Signature Option | | | |
| | | | |
| The following quotes from [RFC2385] outline the security properties | | | |
| achieved by using the TCP MD5 Signature Option and summarizes its | | | |
| operation: | | | |
| | | | |
| "IESG Note | | | |
| | | | |
| This document describes current existing practice for securing | | | |
| BGP against certain simple attacks. It is understood to have | | | |
| security weaknesses against concerted attacks." | | | |
| | | | |
| "Abstract | | | |
| | | | |
| This memo describes a TCP extension to enhance security for | | | |
| BGP. It defines a new TCP option for carrying an MD5 [RFC1321] | | | |
| digest in a TCP segment. This digest acts like a signature for | | | |
| that segment, incorporating information known only to the con- | | | |
| nection end points. Since BGP uses TCP as its transport, using | | | |
| this option in the way described in this paper significantly | | | |
| reduces the danger from certain security attacks on BGP." | | | |
| | | | |
| "Introduction | | | |
| | | | |
| The primary motivation for this option is to allow BGP to pro- | | | |
| tect itself against the introduction of spoofed TCP segments | | | |
| into the connection stream. Of particular concern are TCP | | | |
| resets. | | | |
| | | | |
| To spoof a connection using the scheme described in this paper, | | | |
| an attacker would not only have to guess TCP sequence numbers, | | | |
| but would also have had to obtain the password included in the | | | |
| MD5 digest. This password never appears in the connection | | | |
| stream, and the actual form of the password is up to the appli- | | | |
| cation. It could even change during the lifetime of a particu- | | | |
| lar connection so long as this change was synchronized on both | | | |
| ends (although retransmission can become problematical in some | | | |
| TCP implementations with changing passwords). | | | |
| | | | |
| Finally, there is no negotiation for the use of this option in | | | |
| a connection, rather it is purely a matter of site policy | | | |
| whether or not its connections use the option." | | | |
| | | | |
| "MD5 as a Hashing Algorithm | | | |
| | | | |
| Since this memo was first issued (under a different title), the | | | |
| MD5 algorithm has been found to be vulnerable to collision | | | |
| search attacks [Dobb], and is considered by some to be | | | |
| insufficiently strong for this type of application. | | | |
| | | | |
| This memo still specifies the MD5 algorithm, however, since the | | | |
| option has already been deployed operationally, and there was | | | |
| no "algorithm type" field defined to allow an upgrade using the | | | |
| same option number. The original document did not specify a | | | |
| type field since this would require at least one more byte, and | | | |
| it was felt at the time that taking 19 bytes for the complete | | | |
| option (which would probably be padded to 20 bytes in TCP | | | |
| implementations) would be too much of a waste of the already | | | |
| limited option space. | | | |
| | | | |
| This does not prevent the deployment of another similar option | | | |
| which uses another hashing algorithm (like SHA-1). Also, if | | | |
| most implementations pad the 18 byte option as defined to 20 | | | |
| bytes anyway, it would be just as well to define a new option | | | |
| which contains an algorithm type field. | | | |
| | | | |
| This would need to be addressed in another document, however." | | | |
| | | | |
| End of quotes from [RFC2385]. | | | |
| | | | |
| 2.9.2. LDP Use of TCP MD5 Signature Option | | | |
| | | | |
| LDP uses the TCP MD5 Signature Option as follows: | | | |
| | | | |
| - Use of the MD5 Signature Option for LDP TCP connections is a con- | | | |
| figurable LSR option. | | | |
| | | | |
| - An LSR that uses the MD5 Signature Option is configured with a | | | |
| password (shared secret) for each potential LDP peer. | | | |
| | | | |
| - The LSR applies the MD5 algorithm as specified in [RFC2385] to | | | |
| compute the MD5 digest for a TCP segment to be sent to a peer. | | | |
| This computation makes use of the peer password as well as the | | | |
| TCP segment. | | | |
| | | | |
| - When the LSR receives a TCP segment with an MD5 digest, it vali- | | | |
| dates the segment by calculating the MD5 digest (using its own | | | |
| record of the password) and compares the computed digest with the | | | |
| received digest. If the comparison fails, the segment is dropped | | | |
| without any response to the sender. | | | |
| | | | |
| - The LSR ignores LDP Hellos from any LSR for which a password has | | | |
| not been configured. This ensures that the LSR establishes LDP | | | |
| TCP connections only with LSRs for which a password has been con- | | | |
| figured. | | | |
| | | | |
| 2.10. Label Distribution for Explicitly Routed LSPs | | | |
| | | | |
| Traffic Engineering [RFC2702] is expected to be an important MPLS | | | |
| application. MPLS support for Traffic Engineering uses explicitly | | | |
| routed LSPs, which need not follow normally-routed (hop-by-hop) paths | | | |
| as determined by destination-based routing protocols. CR-LDP [CRLDP] | | | |
| defines extensions to LDP to use LDP to set up explicitly routed | | | |
| LSPs. | | | |
| | | | |
| 3. Protocol Specification | | | |
| | | | |
| Previous sections that describe LDP operation have discussed scenar- | | | |
| ios that involve the exchange of messages among LDP peers. This sec- | | | |
| tion specifies the message encodings and procedures for processing | | | |
| the messages. | | | |
| | | | |
| LDP message exchanges are accomplished by sending LDP protocol data | | | |
| units (PDUs) over LDP session TCP connections. | | | |
| | | | |
| Each LDP PDU can carry one or more LDP messages. Note that the mes- | | | |
| sages in an LDP PDU need not be related to one another. For example, | | | |
| a single PDU could carry a message advertising FEC-label bindings for | | | |
| several FECs, another message requesting label bindings for several | | | |
| other FECs, and a third notification message signaling some event. | | | |
| | | | |
| 3.1. LDP PDUs | | | |
| | | | |
| Each LDP PDU is an LDP header followed by one or more LDP messages. | | | |
| The LDP header is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Version | PDU Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | LDP Identifier | | | | |
| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Version | | | |
| Two octet unsigned integer containing the version number of the proto- | | | |
| col. This version of the specification specifies LDP protocol version | | | |
| 1. | | | |
| | | | |
| PDU Length | | | |
| Two octet integer specifying the total length of this PDU in octets, | | | |
| excluding the Version and PDU Length fields. | | | |
| | | | |
| The maximum allowable PDU Length is negotiable when an LDP session is | | | |
| initialized. Prior to completion of the negotiation the maximum | | | |
| allowable length is 4096 bytes. | | | |
| | | | |
| LDP Identifier | | | |
| Six octet field that uniquely identifies the label space of the send- | | | |
| ing LSR for which this PDU applies. The first four octets identify | | | |
| the LSR and MUST be a globally unique value. It SHOULD be a 32-bit | | | |
| router Id assigned to the LSR and also used to identify it in loop | | | |
| detection Path Vectors. The last two octets identify a label space | | | |
| within the LSR. For a platform-wide label space, these SHOULD both be | | | |
| zero. | | | |
| | | | |
| Note that there is no alignment requirement for the first octet of an | | | |
| LDP PDU. | | | |
| | | | |
| 3.2. LDP Procedures | | | |
| | | | |
| LDP defines messages, TLVs and procedures in the following areas: | | | |
| | | | |
| - Peer discovery; | | | |
| - Session management; | | | |
| - Label distribution; | | | |
| - Notification of errors and advisory information. | | | |
| | | | |
| The sections that follow describe the message and TLV encodings for | | | |
| these areas and the procedures that apply to them. | | | |
| | | | |
| The label distribution procedures are complex and are difficult to | | | |
| describe fully, coherently and unambiguously as a collection of sepa- | | | |
| rate message and TLV specifications. | | | |
| | | | |
| Appendix A, "LDP Label Distribution Procedures", describes the label | | | |
| distribution procedures in terms of label distribution events that | | | |
| may occur at an LSR and how the LSR must respond. Appendix A is the | | | |
| specification of LDP label distribution procedures. If a procedure | | | |
| described elsewhere in this document conflicts with Appendix A, | | | |
| Appendix A specifies LDP behavior. | | | |
| | | | |
| 3.3. Type-Length-Value Encoding | | | |
| | | | |
| LDP uses a Type-Length-Value (TLV) encoding scheme to encode much of | | | |
| the information carried in LDP messages. | | | |
| | | | |
| An LDP TLV is encoded as a 2 octet field that uses 14 bits to specify | | | |
| a Type and 2 bits to specify behavior when an LSR doesn't recognize | | | |
| the Type, followed by a 2 octet Length Field, followed by a variable | | | |
| length Value field. | | | |
| | | | |
| 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| Type | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| | Value | | | | |
| ~ ~ | | | |
| | | | | | |
| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| U bit | | | |
| Unknown TLV bit. Upon receipt of an unknown TLV, if U is clear | | | |
| (=0), a notification MUST be returned to the message originator | | | |
| and the entire message MUST be ignored; if U is set (=1), the | | | |
| unknown TLV MUST be silently ignored and the rest of the message | | | |
| processed as if the unknown TLV did not exist. The sections fol- | | | |
| lowing that define TLVs specify a value for the U-bit. | | | |
| | | | |
| F bit | | | |
| Forward unknown TLV bit. This bit applies only when the U bit is | | | |
| set and the LDP message containing the unknown TLV is to be for- | | | |
| warded. If F is clear (=0), the unknown TLV is not forwarded with | | | |
| the containing message; if F is set (=1), the unknown TLV is for- | | | |
| warded with the containing message. The sections following that | | | |
| define TLVs specify a value for the F-bit. By setting both the U | | | |
| and F bits, a TLV can be propagated as opaque data through nodes | | | |
| that do not recognize the TLV. | | | |
| | | | |
| Type | | | |
| Encodes how the Value field is to be interpreted. | | | |
| | | | |
| Length | | | |
| Specifies the length of the Value field in octets. | | | |
| | | | |
| Value | | | |
| Octet string of Length octets that encodes information to be | | | |
| interpreted as specified by the Type field. | | | |
| | | | |
| Note that there is no alignment requirement for the first octet of a | | | |
| TLV. | | | |
| | | | |
| Note that the Value field itself may contain TLV encodings. That is, | | | |
| TLVs may be nested. | | | |
| | | | |
| The TLV encoding scheme is very general. In principle, everything | | | |
| appearing in an LDP PDU could be encoded as a TLV. This specifica- | | | |
| tion does not use the TLV scheme to its full generality. It is not | | | |
| used where its generality is unnecessary and its use would waste | | | |
| space unnecessarily. These are usually places where the type of a | | | |
| value to be encoded is known, for example by its position in a mes- | | | |
| sage or an enclosing TLV, and the length of the value is fixed or | | | |
| readily derivable from the value encoding itself. | | | |
| | | | |
| Some of the TLVs defined for LDP are similar to one another. For | | | |
| example, there is a Generic Label TLV, an ATM Label TLV, and a Frame | | | |
| Relay TLV; see Sections "Generic Label TLV", "ATM Label TLV", and | | | |
| "Frame Relay TLV". | | | |
| | | | |
| While it is possible to think about TLVs related in this way in terms | | | |
| of a TLV type that specifies a TLV class and a TLV subtype that spec- | | | |
| ifies a particular kind of TLV within that class, this specification | | | |
| does not formalize the notion of a TLV subtype. | | | |
| | | | |
| The specification assigns type values for related TLVs, such as the | | | |
| label TLVs, from a contiguous block in the 16-bit TLV type number | | | |
| space. | | | |
| | | | |
| Section "TLV Summary" lists the TLVs defined in this version of the | | | |
| protocol and the section in this document that describes each. | | | |
| | | | |
| 3.4. TLV Encodings for Commonly Used Parameters | | | |
| | | | |
| There are several parameters used by more than one LDP message. The | | | |
| TLV encodings for these commonly used parameters are specified in | | | |
| this section. | | | |
| | | | |
| 3.4.1. FEC TLV | | | |
| | | | |
| Labels are bound to Forwarding Equivalence Classes (FECs). A FEC is | | | |
| a list of one or more FEC elements. The FEC TLV encodes FEC items. | | | |
| | | | |
| Its encoding is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| FEC (0x0100) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC Element 1 | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| ~ ~ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC Element n | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| FEC Element 1 to FEC Element n | | | |
| There are several types of FEC elements; see Section "FECs". The | | | |
| FEC element encoding depends on the type of FEC element. | | | |
| | | | |
| A FEC Element value is encoded as a 1 octet field that specifies | | | |
| the element type, and a variable length field that is the type- | | | |
| dependent element value. Note that while the representation of | | | |
| the FEC element value is type-dependent, the FEC element encoding | | | |
| itself is one where standard LDP TLV encoding is not used. | | | |
| | | | |
| The FEC Element value encoding is: | | | |
| | | | |
| FEC Element Type Value | | | |
| type name | | | |
| | | | |
| Wildcard 0x01 No value; i.e., 0 value octets; | | | |
| see below. | | | |
| Prefix 0x02 See below. | | | |
| | | | |
| Note that this version of LDP supports the use of multiple FEC | | | |
| Elements per FEC for the Label Mapping message only. The use of | | | |
| multiple FEC Elements in other messages is not permitted in this | | | |
| version, and is a subject for future study. | | | |
| | | | |
| Wildcard FEC Element | | | |
| | | | |
| To be used only in the Label Withdraw and Label Release | | | |
| Messages. Indicates the withdraw/release is to be applied to | | | |
| all FECs associated with the label within the following label | | | |
| TLV. Must be the only FEC Element in the FEC TLV. | | | |
| | | | |
| Prefix FEC Element value encoding: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Prefix (2) | Address Family | PreLen | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Prefix | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Address Family | | | |
| Two octet quantity containing a value from ADDRESS FAMILY NUM- | | | |
| BERS in [ASSIGNED_AF] that encodes the address family for the | | | |
| address prefix in the Prefix field. | | | |
| | | | |
| PreLen | | | |
| One octet unsigned integer containing the length in bits of the | | | |
| address prefix that follows. A length of zero indicates a pre- | | | |
| fix that matches all addresses (the default destination); in | | | |
| this case the Prefix itself is zero octets). | | | |
| | | | |
| Prefix | | | |
| An address prefix encoded according to the Address Family | | | |
| field, whose length, in bits, was specified in the PreLen | | | |
| field, padded to a byte boundary. | | | |
| | | | |
| 3.4.1.1. FEC Procedures | | | |
| | | | |
| If in decoding a FEC TLV an LSR encounters a FEC Element with an | | | |
| Address Family it does not support, it SHOULD stop decoding the FEC | | | |
| TLV, abort processing the message containing the TLV, and send an | | | |
| "Unsupported Address Family" Notification message to its LDP peer | | | |
| signaling an error. | | | |
| | | | |
| If it 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. | | | |
| | | | |
| 3.4.2. Label TLVs | | | |
| | | | |
| Label TLVs encode labels. Label TLVs are carried by the messages | | | |
| used to advertise, request, release and withdraw label mappings. | | | |
| | | | |
| There are several different kinds of Label TLVs which can appear in | | | |
| situations that require a Label TLV. | | | |
| | | | |
| 3.4.2.1. Generic Label TLV | | | |
| | | | |
| An LSR uses Generic Label TLVs to encode labels for use on links for | | | |
| which label values are independent of the underlying link technology. | | | |
| Examples of such links are PPP and Ethernet. | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Generic Label (0x0200) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Label | | | |
| This is a 20-bit label value represented as a 20-bit number in a 4 | | | |
| octet field as follows: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| For further information, see [RFC3032]. | | | |
| | | | |
| 3.4.2.2. ATM Label TLV | | | |
| | | | |
| An LSR uses ATM Label TLVs to encode labels for use on ATM links. | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| ATM Label (0x0201) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |Res| V | VPI | VCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| Res | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and MUST be ignored on receipt. | | | |
| | | | |
| V-bits | | | |
| Two-bit switching indicator. If V-bits is 00, both the VPI and | | | |
| VCI are significant. If V-bits is 01, only the VPI field is sig- | | | |
| nificant. If V-bit is 10, only the VCI is significant. | | | |
| | | | |
| VPI | | | |
| Virtual Path Identifier. If VPI is less than 12-bits it SHOULD be | | | |
| right justified in this field and preceding bits SHOULD be set to | | | |
| 0. | | | |
| | | | |
| VCI | | | |
| Virtual Channel Identifier. If the VCI is less than 16- bits, it | | | |
| SHOULD be right justified in the field and the preceding bits MUST | | | |
| be set to 0. If Virtual Path switching is indicated in the V-bits | | | |
| field, then this field MUST be ignored by the receiver and set to | | | |
| 0 by the sender. | | | |
| | | | |
| 3.4.2.3. Frame Relay Label TLV | | | |
| | | | |
| An LSR uses Frame Relay Label TLVs to encode labels for use on Frame | | | |
| Relay links. | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Frame Relay Label (0x0202)| Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Reserved |Len| DLCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Res | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and MUST be ignored on receipt. | | | |
| | | | |
| Len | | | |
| This field specifies the number of bits of the DLCI. The follow- | | | |
| ing values are supported: | | | |
| | | | |
| 0 = 10 bits DLCI | | | |
| 2 = 23 bits DLCI | | | |
| | | | |
| Len values 1 and 3 are reserved. | | | |
| | | | |
| DLCI | | | |
| The Data Link Connection Identifier | | | |
| | | | |
| For a 10bit DLCI, the encoding is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Frame Relay Label (0x0202)| Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Reserved |Len| 0 | 10 bit DLCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| For a 23bit DLCI, the encoding is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Frame Relay Label (0x0202)| Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Reserved |Len| 23 bit DLCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| For further information, see [RFC3034]. | | | |
| | | | |
| 3.4.3. Address List TLV | | | |
| | | | |
| The Address List TLV appears in Address and Address Withdraw mes- | | | |
| sages. | | | |
| | | | |
| Its encoding is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Address List (0x0101) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Address Family | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | |
| | | | | | |
| | Addresses | | | | |
| ~ ~ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Address Family | | | |
| Two octet quantity containing a value from ADDRESS FAMILY NUMBERS | | | |
| in [ASSIGNED_AF] that encodes the addresses contained in the | | | |
| Addresses field. | | | |
| | | | |
| Addresses | | | |
| | | | |
| A list of addresses from the specified Address Family. The | | | |
| encoding of the individual addresses depends on the Address | | | |
| Family. | | | |
| | | | |
| The following address encodings are defined by this version of the | | | |
| protocol: | | | |
| | | | |
| Address Family Address Encoding | | | |
| | | | |
| IPv4 4 octet full IPv4 address | | | |
| IPv6 16 octet full IPv6 address | | | |
| | | | |
| 3.4.4. Hop Count TLV | | | |
| | | | |
| The Hop Count TLV appears as an optional field in messages that set | | | |
| up LSPs. It calculates the number of LSR hops along an LSP as the | | | |
| LSP is being setup. | | | |
| | | | |
| Note that setup procedures for LSPs that traverse ATM and Frame Relay | | | |
| links require use of the Hop Count TLV (see [RFC3035] and [RFC3034]). | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Hop Count (0x0103) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | HC Value | | | | |
| +-+-+-+-+-+-+-+-+ | | | |
| | | | |
| HC Value | | | |
| 1 octet unsigned integer hop count value. | | | |
| | | | |
| 3.4.4.1. Hop Count Procedures | | | |
| | | | |
| During setup of an LSP an LSR R may receive a Label Mapping or Label | | | |
| Request message for the LSP that contains the Hop Count TLV. If it | | | |
| does, it SHOULD record the hop count value. | | | |
| | | | |
| If LSR R then propagates the Label Mapping message for the LSP to an | | | |
| upstream peer or the Label Request message to a downstream peer to | | | |
| continue the LSP setup, it must determine a hop count to include in | | | |
| the propagated message as follows: | | | |
| | | | |
| - If the message is a Label Request message, R MUST increment the | | | |
| received hop count; | | | |
| | | | |
| - If the message is a Label Mapping message, R determines the hop | | | |
| count as follows: | | | |
| | | | |
| o If R is a member of the edge set of an LSR domain whose LSRs do | | | |
| not perform 'TTL-decrement' and the upstream peer is within | | | |
| that domain, R MUST reset the hop count to 1 before propagating | | | |
| the message. | | | |
| | | | |
| o Otherwise, R MUST increment the received hop count. | | | |
| | | | |
| The first LSR in the LSP (ingress for a Label Request message, egress | | | |
| for a Label Mapping message) SHOULD set the hop count value to 1. | | | |
| | | | |
| By convention a value of 0 indicates an unknown hop count. The | | | |
| result of incrementing an unknown hop count is itself an unknown hop | | | |
| count (0). | | | |
| | | | |
| Use of the unknown hop count value greatly reduces the signaling | | | |
| overhead when independent control is used. When a new LSP is estab- | | | |
| lished, each LSR starts with unknown hop count. Addition of a new | | | |
| LSR whose hop count is also unknown does not cause a hop count update | | | |
| to be propagated upstream since the hop count remains unknown. When | | | |
| the egress is finally added to the LSP, then the LSRs propagate hop | | | |
| count updates upstream via Label Mapping messages. | | | |
| | | | |
| Without use of the unknown hop count, each time a new LSR is added to | | | |
| the LSP a hop count update would need to be propagated upstream if | | | |
| the new LSR is closer to the egress than any of the other LSRs. | | | |
| These updates are useless overhead since they don't reflect the hop | | | |
| count to the egress. | | | |
| | | | |
| >From the perspective of the ingress node, the fact that the hop | | | |
| count is unknown implies nothing about whether a packet sent on the | | | |
| LSP will actually make it to the egress. All it implies is that the | | | |
| hop count update from the egress has not yet reached the ingress. | | | |
| | | | |
| If an LSR receives a message containing a Hop Count TLV, it MUST | | | |
| check the hop count value to determine whether the hop count has | | | |
| exceeded its configured maximum allowable value. If so, it MUST | | | |
| behave as if the containing message has traversed a loop by sending a | | | |
| Notification message signaling Loop Detected in reply to the sender | | | |
| of the message. | | | |
| | | | |
| If Loop Detection is configured, the LSR MUST follow the procedures | | | |
| specified in Section "Loop Detection". | | | |
| | | | |
| 3.4.5. Path Vector TLV | | | |
| | | | |
| The Path Vector TLV is used with the Hop Count TLV in Label Request | | | |
| and Label Mapping messages to implement the optional LDP loop detec- | | | |
| tion mechanism. See Section "Loop Detection". Its use in the Label | | | |
| Request message records the path of LSRs the request has traversed. | | | |
| Its use in the Label Mapping message records the path of LSRs a label | | | |
| advertisement has traversed to setup an LSP. Its encoding is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Path Vector (0x0104) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | LSR Id 1 | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| ~ ~ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | LSR Id n | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| One or more LSR Ids | | | |
| | | | |
| A list of router-ids indicating the path of LSRs the message has | | | |
| traversed. Each LSR Id is the first four octets (router-id) of | | | |
| the LDP identifier for the corresponding LSR. This ensures it is | | | |
| unique within the LSR network. | | | |
| | | | |
| 3.4.5.1. Path Vector Procedures | | | |
| | | | |
| The Path Vector TLV is carried in Label Mapping and Label Request | | | |
| messages when loop detection is configured. | | | |
| | | | |
| 3.4.5.1.1. Label Request Path Vector | | | |
| | | | |
| Section "Loop Detection" specifies situations when an LSR must | | | |
| include a Path Vector TLV in a Label Request message. | | | |
| | | | |
| An LSR that receives a Path Vector in a Label Request message MUST | | | |
| perform the procedures described in Section "Loop Detection". | | | |
| | | | |
| If the LSR detects a loop, it MUST reject the Label Request message. | | | |
| | | | |
| The LSR MUST: | | | |
| | | | |
| 1. Transmit a Notification message to the sending LSR signaling | | | |
| "Loop Detected". | | | |
| | | | |
| 2. Not propagate the Label Request message further. | | | |
| | | | |
| Note that a Label Request message with Path Vector TLV is forwarded | | | |
| until: | | | |
| | | | |
| 1. A loop is found, | | | |
| | | | |
| 2. The LSP egress is reached, | | | |
| | | | |
| 3. The maximum Path Vector limit or maximum Hop Count limit is | | | |
| reached. This is treated as if a loop had been detected. | | | |
| | | | |
| 3.4.5.1.2. Label Mapping Path Vector | | | |
| | | | |
| Section "Loop Detection" specifies the situations when an LSR must | | | |
| include a Path Vector TLV in a Label Mapping message. | | | |
| | | | |
| An LSR that receives a Path Vector in a Label Mapping message MUST | | | |
| perform the procedures described in Section "Loop Detection". | | | |
| | | | |
| If the LSR detects a loop, it MUST reject the Label Mapping message | | | |
| in order to prevent a forwarding loop. The LSR MUST: | | | |
| | | | |
| 1. Transmit a Label Release message carrying a Status TLV to the | | | |
| sending LSR to signal "Loop Detected". | | | |
| | | | |
| 2. Not propagate the message further. | | | |
| | | | |
| 3. Check whether the Label Mapping message is for an existing LSP. | | | |
| If so, the LSR must unsplice any upstream labels which are | | | |
| spliced to the downstream label for the FEC. | | | |
| | | | |
| Note that a Label Mapping message with a Path Vector TLV is forwarded | | | |
| until: | | | |
| | | | |
| 1. A loop is found, | | | |
| | | | |
| 2. An LSP ingress is reached, or | | | |
| | | | |
| 3. The maximum Path Vector or maximum Hop Count limit is reached. | | | |
| | | | |
| This is treated as if a loop had been detected. | | | |
| | | | |
| 3.4.6. Status TLV | | | |
| | | | |
| Notification messages carry Status TLVs to specify events being sig- | | | |
| naled. | | | |
| | | | |
| The encoding for the Status TLV is: | | | |
| | | | |
| 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| Status (0x0300) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Status Code | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message Type | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| U bit | | | |
| SHOULD be 0 when the Status TLV is sent in a Notification message. | | | |
| SHOULD be 1 when the Status TLV is sent in some other message. | | | |
| | | | |
| F bit | | | |
| SHOULD be the same as the setting of the F-bit in the Status Code | | | |
| field. | | | |
| | | | |
| Status Code | | | |
| 32-bit unsigned integer encoding the event being signaled. The | | | |
| structure of a Status Code is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |E|F| Status Data | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| E bit | | | |
| Fatal error bit. If set (=1), this is a fatal error notifica- | | | |
| tion. If clear (=0), this is an advisory notification. | | | |
| | | | |
| F bit | | | |
| Forward bit. If set (=1), the notification SHOULD be forwarded | | | |
| to the LSR for the next-hop or previous-hop for the LSP, if | | | |
| any, associated with the event being signaled. If clear (=0), | | | |
| the notification SHOULD NOT be forwarded. | | | |
| | | | |
| Status Data | | | |
| 30-bit unsigned integer which specifies the status information. | | | |
| | | | |
| This specification defines Status Codes (32-bit unsigned integers | | | |
| with the above encoding). | | | |
| | | | |
| A Status Code of 0 signals success. | | | |
| | | | |
| Message ID | | | |
| If non-zero, 32-bit value that identifies the peer message to | | | |
| which the Status TLV refers. If zero, no specific peer message is | | | |
| being identified. | | | |
| | | | |
| Message Type | | | |
| If non-zero, the type of the peer message to which the Status TLV | | | |
| refers. If zero, the Status TLV does not refer to any specific | | | |
| message type. | | | |
| | | | |
| Note that use of the Status TLV is not limited to Notification mes- | | | |
| sages. A message other than a Notification message may carry a Sta- | | | |
| tus TLV as an Optional Parameter. When a message other than a Noti- | | | |
| fication carries a Status TLV the U-bit of the Status TLV SHOULD be | | | |
| set to 1 to indicate that the receiver SHOULD silently discard the | | | |
| TLV if unprepared to handle it. | | | |
| | | | |
| 3.5. LDP Messages | | | |
| | | | |
| All LDP messages have the following format: | | | |
| | | | |
| 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| Message Type | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| + + | | | |
| | Mandatory Parameters | | | | |
| + + | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| + + | | | |
| | Optional Parameters | | | | |
| + + | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| U bit | | | |
| Unknown message bit. Upon receipt of an unknown message, if U is | | | |
| clear (=0), a notification is returned to the message originator; | | | |
| if U is set (=1), the unknown message is silently ignored. The | | | |
| sections following that define messages specify a value for the U- | | | |
| bit. | | | |
| | | | |
| Message Type | | | |
| Identifies the type of message | | | |
| | | | |
| Message Length | | | |
| Specifies the cumulative length in octets of the Message ID, | | | |
| Mandatory Parameters, and Optional Parameters. | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. Used by the sending | | | |
| LSR to facilitate identifying notification messages that may apply | | | |
| to this message. An LSR sending a notification message in | | | |
| response to this message SHOULD include this Message Id in the | | | |
| Status TLV carried by the notification message; see Section "Noti- | | | |
| fication Message". | | | |
| | | | |
| Mandatory Parameters | | | |
| Variable length set of required message parameters. Some messages | | | |
| have no required parameters. | | | |
| | | | |
| For messages that have required parameters, the required parame- | | | |
| ters MUST appear in the order specified by the individual message | | | |
| specifications in the sections that follow. | | | |
| | | | |
| Optional Parameters | | | |
| Variable length set of optional message parameters. Many messages | | | |
| have no optional parameters. | | | |
| | | | |
| For messages that have optional parameters, the optional parame- | | | |
| ters may appear in any order. | | | |
| | | | |
| Note that there is no alignment requirement for the first octet of an | | | |
| LDP message and that there is no padding at the end of a message; | | | |
| that is, parameters can end at odd-byte boundaries. | | | |
| | | | |
| The following message types are defined in this version of LDP: | | | |
| | | | |
| Message Name Section Title | | | |
| | | | |
| Notification "Notification Message" | | | |
| Hello "Hello Message" | | | |
| Initialization "Initialization Message" | | | |
| KeepAlive "KeepAlive Message" | | | |
| Address "Address Message" | | | |
| Address Withdraw "Address Withdraw Message" | | | |
| Label Mapping "Label Mapping Message" | | | |
| Label Request "Label Request Message" | | | |
| Label Abort Request "Label Abort Request Message" | | | |
| Label Withdraw "Label Withdraw Message" | | | |
| Label Release "Label Release Message" | | | |
| | | | |
| The sections that follow specify the encodings and procedures for | | | |
| these messages. | | | |
| | | | |
| Some of the above messages are related to one another, for example | | | |
| the Label Mapping, Label Request, Label Withdraw, and Label Release | | | |
| messages. | | | |
| | | | |
| While it is possible to think about messages related in this way in | | | |
| terms of a message type that specifies a message class and a message | | | |
| subtype that specifies a particular kind of message within that | | | |
| class, this specification does not formalize the notion of a message | | | |
| subtype. | | | |
| | | | |
| The specification assigns type values for related messages, such as | | | |
| the label messages, from of a contiguous block in the 16-bit message | | | |
| type number space. | | | |
| | | | |
| 3.5.1. Notification Message | | | |
| | | | |
| An LSR sends a Notification message to inform an LDP peer of a sig- | | | |
| nificant event. A Notification message signals a fatal error or pro- | | | |
| vides advisory information such as the outcome of processing an LDP | | | |
| message or the state of the LDP session. | | | |
| | | | |
| The encoding for the Notification Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Notification (0x0001) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Status (TLV) | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Status TLV | | | |
| Indicates the event being signaled. The encoding for the Status | | | |
| TLV is specified in Section "Status TLV". | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The following Optional Parameters are generic | | | |
| and may appear in any Notification Message: | | | |
| | | | |
| Optional Parameter Type Length Value | | | |
| | | | |
| Extended Status 0x0301 4 See below | | | |
| Returned PDU 0x0302 var See below | | | |
| Returned Message 0x0303 var See below | | | |
| | | | |
| Other Optional Parameters, specific to the particular event being | | | |
| signaled by the Notification Messages may appear. These are | | | |
| described elsewhere. | | | |
| | | | |
| Extended Status | | | |
| The 4 octet value is an Extended Status Code that encodes addi- | | | |
| tional information that supplements the status information con- | | | |
| tained in the Notification Status Code. | | | |
| | | | |
| Returned PDU | | | |
| An LSR uses this parameter to return part of an LDP PDU to the | | | |
| LSR that sent it. The value of this TLV is the PDU header and | | | |
| as much PDU data following the header as appropriate for the | | | |
| condition being signaled by the Notification message. | | | |
| | | | |
| Returned Message | | | |
| An LSR uses this parameter to return part of an LDP message to | | | |
| the LSR that sent it. The value of this TLV is the message | | | |
| type and length fields and as much message data following the | | | |
| type and length fields as appropriate for the condition being | | | |
| signaled by the Notification message. | | | |
| | | | |
| 3.5.1.1. Notification Message Procedures | | | |
| | | | |
| If an LSR encounters a condition requiring it to notify its peer with | | | |
| advisory or error information it sends the peer a Notification mes- | | | |
| sage containing a Status TLV that encodes the information and option- | | | |
| ally additional TLVs that provide more information about the condi- | | | |
| tion. | | | |
| | | | |
| If the condition is one that is a fatal error the Status Code carried | | | |
| in the notification will indicate that. In this case, after sending | | | |
| the Notification message the LSR SHOULD terminate the LDP session by | | | |
| closing the session TCP connection and discard all state associated | | | |
| with the session, including all label-FEC bindings learned via the | | | |
| session. | | | |
| | | | |
| When an LSR receives a Notification message that carries a Status | | | |
| Code that indicates a fatal error, it SHOULD terminate the LDP ses- | | | |
| sion immediately by closing the session TCP connection and discard | | | |
| all state associated with the session, including all label-FEC bind- | | | |
| ings learned via the session. | | | |
| | | | |
| The above statement does not apply to the processing of the Shutdown | | | |
| message in the session initialization procedure. When an LSR receives | | | |
| a Shutdown message during session initialization, it SHOULD transmit | | | |
| a Shutdown message and then close the transport connection. | | | |
| | | | |
| 3.5.1.2. Events Signaled by Notification Messages | | | |
| | | | |
| It is useful for descriptive purpose to classify events signaled by | | | |
| Notification Messages into the following categories. | | | |
| | | | |
| 3.5.1.2.1. Malformed PDU or Message | | | |
| | | | |
| Malformed LDP PDUs or Messages that are part of the LDP Discovery | | | |
| mechanism are handled by silently discarding them. | | | |
| | | | |
| An LDP PDU received on a TCP connection for an LDP session is mal- | | | |
| formed if: | | | |
| | | | |
| - The LDP Identifier in the PDU header is unknown to the | | | |
| receiver, or it is known but is not the LDP Identifier associ- | | | |
| ated by the receiver with the LDP peer for this LDP session. | | | |
| This is a fatal error signaled by the Bad LDP Identifier Status | | | |
| Code. | | | |
| | | | |
| - The LDP protocol version is not supported by the receiver, or | | | |
| it is supported but is not the version negotiated for the ses- | | | |
| sion during session establishment. This is a fatal error sig- | | | |
| naled by the Bad Protocol Version Status Code. | | | |
| | | | |
| - The PDU Length field is too small (< 14) or too large | | | |
| (> maximum PDU length). This is a fatal error signaled by the | | | |
| Bad PDU Length Status Code. Section "Initialization Message" | | | |
| describes how the maximum PDU length for a session is deter- | | | |
| mined. | | | |
| | | | |
| An LDP Message is malformed if: | | | |
| | | | |
| - The Message Type is unknown. | | | |
| | | | |
| If the Message Type is < 0x8000 (high order bit = 0) it is an | | | |
| error signaled by the Unknown Message Type Status Code. | | | |
| | | | |
| If the Message Type is >= 0x8000 (high order bit = 1) it is | | | |
| silently discarded. | | | |
| | | | |
| - The Message Length is too large, that is, indicates that the | | | |
| message extends beyond the end of the containing LDP PDU. This | | | |
| is a fatal error signaled by the Bad Message Length Status | | | |
| Code. | | | |
| | | | |
| - The Message Length is too small, that is, smaller than the | | | |
| smallest possible value component. This is a fatal error sig- | | | |
| naled by the Bad Message Length Status Code. | | | |
| | | | |
| - The message is missing one or more Mandatory Parameters. This | | | |
| is a non-fatal error signaled by the Missing Message Parameters | | | |
| Status Code. | | | |
| | | | |
| 3.5.1.2.2. Unknown or Malformed TLV | | | |
| | | | |
| Malformed TLVs contained in LDP messages that are part of the LDP | | | |
| Discovery mechanism are handled by silently discarding the containing | | | |
| message. | | | |
| | | | |
| A TLV contained in an LDP message received on a TCP connection of an | | | |
| LDP is malformed if: | | | |
| | | | |
| - The TLV Length is too large, that is, indicates that the TLV | | | |
| extends beyond the end of the containing message. This is a | | | |
| fatal error signaled by the Bad TLV Length Status Code. | | | |
| | | | |
| - The TLV type is unknown. | | | |
| | | | |
| If the TLV type is < 0x8000 (high order bit 0) it is an error | | | |
| signaled by the Unknown TLV Status Code. | | | |
| | | | |
| If the TLV type is >= 0x8000 (high order bit 1) the TLV is | | | |
| silently dropped. | | | |
| | | | |
| - The TLV Value is malformed. This occurs when the receiver han- | | | |
| dles the TLV but cannot decode the TLV Value. This is inter- | | | |
| preted as indicative of a bug in either the sending or receiv- | | | |
| ing LSR. It is a fatal error signaled by the Malformed TLV | | | |
| Value Status Code. | | | |
| | | | |
| 3.5.1.2.3. Session KeepAlive Timer Expiration | | | |
| | | | |
| This is a fatal error signaled by the KeepAlive Timer Expired Status | | | |
| Code. | | | |
| | | | |
| 3.5.1.2.4. Unilateral Session Shutdown | | | |
| | | | |
| This is a fatal event signaled by the Shutdown Status Code. The | | | |
| Notification Message may optionally include an Extended Status TLV to | | | |
| provide a reason for the Shutdown. The sending LSR terminates the | | | |
| session immediately after sending the Notification. | | | |
| | | | |
| 3.5.1.2.5. Initialization Message Events | | | |
| | | | |
| The session initialization negotiation (see Section "Session Initial- | | | |
| ization") may fail if the session parameters received in the Initial- | | | |
| ization Message are unacceptable. This is a fatal error. The spe- | | | |
| cific Status Code depends on the parameter deemed unacceptable, and | | | |
| is defined in Sections "Initialization Message". | | | |
| | | | |
| 3.5.1.2.6. Events Resulting From Other Messages | | | |
| | | | |
| Messages other than the Initialization message may result in events | | | |
| that must be signaled to LDP peers via Notification Messages. These | | | |
| events and the Status Codes used in the Notification Messages to sig- | | | |
| nal them are described in the sections that describe these messages. | | | |
| | | | |
| 3.5.1.2.7. Internal Errors | | | |
| | | | |
| An LDP implementation may be capable of detecting problem conditions | | | |
| specific to its implementation. When such a condition prevents an | | | |
| implementation from interacting correctly with a peer, the implemen- | | | |
| tation should, when capable of doing so, use the Internal Error Sta- | | | |
| tus Code to signal the peer. This is a fatal error. | | | |
| | | | |
| 3.5.1.2.8. Miscellaneous Events | | | |
| | | | |
| These are events that fall into none of the categories above. There | | | |
| are no miscellaneous events defined in this version of the protocol. | | | |
| | | | |
| 3.5.2. Hello Message | | | |
| | | | |
| LDP Hello Messages are exchanged as part of the LDP Discovery Mecha- | | | |
| nism; see Section "LDP Discovery". | | | |
| | | | |
| The encoding for the Hello Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Hello (0x0100) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Common Hello Parameters TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Common Hello Parameters TLV | | | |
| Specifies parameters common to all Hello messages. The encoding | | | |
| for the Common Hello Parameters TLV is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Common Hello Parms(0x0400)| Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Hold Time |T|R| Reserved | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Hold Time, | | | |
| Hello hold time in seconds. An LSR maintains a record of Hel- | | | |
| los received from potential peers (see Section "Hello Message | | | |
| Procedures"). Hello Hold Time specifies the time the sending | | | |
| LSR will maintain its record of Hellos from the receiving LSR | | | |
| without receipt of another Hello. | | | |
| | | | |
| A pair of LSRs negotiates the hold times they use for Hellos | | | |
| from each other. Each proposes a hold time. The hold time | | | |
| used is the minimum of the hold times proposed in their Hellos. | | | |
| | | | |
| A value of 0 means use the default, which is 15 seconds for | | | |
| Link Hellos and 45 seconds for Targeted Hellos. A value of | | | |
| 0xffff means infinite. | | | |
| | | | |
| T, Targeted Hello | | | |
| A value of 1 specifies that this Hello is a Targeted Hello. A | | | |
| value of 0 specifies that this Hello is a Link Hello. | | | |
| | | | |
| R, Request Send Targeted Hellos | | | |
| A value of 1 requests the receiver to send periodic Targeted | | | |
| Hellos to the source of this Hello. A value of 0 makes no | | | |
| request. | | | |
| | | | |
| An LSR initiating Extended Discovery sets R to 1. If R is 1, | | | |
| the receiving LSR checks whether it has been configured to send | | | |
| Targeted Hellos to the Hello source in response to Hellos with | | | |
| this request. If not, it ignores the request. If so, it ini- | | | |
| tiates periodic transmission of Targeted Hellos to the Hello | | | |
| source. | | | |
| | | | |
| Reserved | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and ignored on receipt. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters defined by this ver- | | | |
| sion of the protocol are | | | |
| | | | |
| Optional Parameter Type Length Value | | | |
| | | | |
| IPv4 Transport Address 0x0401 4 See below | | | |
| Configuration 0x0402 4 See below | | | |
| Sequence Number | | | |
| IPv6 Transport Address 0x0403 16 See below | | | |
| | | | |
| IPv4 Transport Address | | | |
| Specifies the IPv4 address to be used for the sending LSR when | | | |
| opening the LDP session TCP connection. If this optional TLV | | | |
| is not present the IPv4 source address for the UDP packet car- | | | |
| rying the Hello SHOULD be used. | | | |
| | | | |
| Configuration Sequence Number | | | |
| Specifies a 4 octet unsigned configuration sequence number that | | | |
| identifies the configuration state of the sending LSR. Used by | | | |
| the receiving LSR to detect configuration changes on the send- | | | |
| ing LSR. | | | |
| | | | |
| IPv6 Transport Address | | | |
| Specifies the IPv6 address to be used for the sending LSR when | | | |
| opening the LDP session TCP connection. If this optional TLV | | | |
| is not present the IPv6 source address for the UDP packet car- | | | |
| rying the Hello SHOULD be used. | | | |
| | | | |
| 3.5.2.1. Hello Message Procedures | | | |
| | | | |
| An LSR receiving Hellos from another LSR maintains a Hello adjacency | | | |
| corresponding to the Hellos. The LSR maintains a hold timer with the | | | |
| Hello adjacency which it restarts whenever it receives a Hello that | | | |
| matches the Hello adjacency. If the hold timer for a Hello adjacency | | | |
| expires the LSR discards the Hello adjacency: see sections "Maintain- | | | |
| ing Hello Adjacencies" and "Maintaining LDP Sessions". | | | |
| | | | |
| We recommend that the interval between Hello transmissions be at most | | | |
| one third of the Hello hold time. | | | |
| | | | |
| An LSR processes a received LDP Hello as follows: | | | |
| | | | |
| 1. The LSR checks whether the Hello is acceptable. The criteria | | | |
| for determining whether a Hello is acceptable are implementa- | | | |
| tion dependent (see below for example criteria). | | | |
| | | | |
| 2. If the Hello is not acceptable, the LSR ignores it. | | | |
| | | | |
| 3. If the Hello is acceptable, the LSR checks whether it has a | | | |
| Hello adjacency for the Hello source. If so, it restarts the | | | |
| hold timer for the Hello adjacency. If not it creates a Hello | | | |
| adjacency for the Hello source and starts its hold timer. | | | |
| | | | |
| 4. If the Hello carries any optional TLVs the LSR processes them | | | |
| (see below). | | | |
| | | | |
| 5. Finally, if the LSR has no LDP session for the label space | | | |
| specified by the LDP identifier in the PDU header for the | | | |
| Hello, it follows the procedures of Section "LDP Session Estab- | | | |
| lishment". | | | |
| | | | |
| The following are examples of acceptability criteria for Link and | | | |
| Targeted Hellos: | | | |
| | | | |
| A Link Hello is acceptable if the interface on which it was | | | |
| received has been configured for label switching. | | | |
| | | | |
| A Targeted Hello from source address A is acceptable if either: | | | |
| | | | |
| - The LSR has been configured to accept Targeted Hellos, or | | | |
| | | | |
| - The LSR has been configured to send Targeted Hellos to A. | | | |
| | | | |
| The following describes how an LSR processes Hello optional TLVs: | | | |
| | | | |
| Transport Address | | | |
| The LSR associates the specified transport address with the | | | |
| Hello adjacency. | | | |
| | | | |
| Configuration Sequence Number | | | |
| The Configuration Sequence Number optional parameter is used by | | | |
| the sending LSR to signal configuration changes to the receiv- | | | |
| ing LSR. When a receiving LSR playing the active role in LDP | | | |
| session establishment detects a change in the sending LSR con- | | | |
| figuration, it may clear the session setup backoff delay, if | | | |
| any, associated with the sending LSR (see Section "Session Ini- | | | |
| tialization"). | | | |
| | | | |
| A sending LSR using this optional parameter is responsible for | | | |
| maintaining the configuration sequence number it transmits in | | | |
| Hello messages. Whenever there is a configuration change on | | | |
| the sending LSR, it increments the configuration sequence num- | | | |
| ber. | | | |
| | | | |
| 3.5.3. Initialization Message | | | |
| | | | |
| The LDP Initialization Message is exchanged as part of the LDP ses- | | | |
| sion establishment procedure; see Section "LDP Session Establish- | | | |
| ment". | | | |
| | | | |
| The encoding for the Initialization Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Initialization (0x0200) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Common Session Parameters TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Common Session Parameters TLV | | | |
| Specifies values proposed by the sending LSR for parameters that | | | |
| must be negotiated for every LDP session. | | | |
| | | | |
| The encoding for the Common Session Parameters TLV is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| Common Sess Parms (0x0500)| Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Protocol Version | KeepAlive Time | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |A|D| Reserved | PVLim | Max PDU Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Receiver LDP Identifier | | | | |
| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++ | | | |
| | | | |
| Protocol Version | | | |
| Two octet unsigned integer containing the version number of the | | | |
| protocol. This version of the specification specifies LDP pro- | | | |
| tocol version 1. | | | |
| | | | |
| KeepAlive Time | | | |
| Two octet unsigned non zero integer that indicates the number | | | |
| of seconds that the sending LSR proposes for the value of the | | | |
| KeepAlive Time. The receiving LSR MUST calculate the value of | | | |
| the KeepAlive Timer by using the smaller of its proposed | | | |
| KeepAlive Time and the KeepAlive Time received in the PDU. The | | | |
| value chosen for KeepAlive Time indicates the maximum number of | | | |
| seconds that may elapse between the receipt of successive PDUs | | | |
| from the LDP peer on the session TCP connection. The KeepAlive | | | |
| Timer is reset each time a PDU arrives. | | | |
| | | | |
| A, Label Advertisement Discipline | | | |
| Indicates the type of Label advertisement. A value of 0 means | | | |
| Downstream Unsolicited advertisement; a value of 1 means Down- | | | |
| stream On Demand. | | | |
| | | | |
| If one LSR proposes Downstream Unsolicited and the other pro- | | | |
| poses Downstream on Demand, the rules for resolving this dif- | | | |
| ference is: | | | |
| | | | |
| - If the session is for a label-controlled ATM link or a | | | |
| label-controlled Frame Relay link, then Downstream on Demand | | | |
| MUST be used. | | | |
| | | | |
| - Otherwise, Downstream Unsolicited MUST be used. | | | |
| | | | |
| If the label advertisement discipline determined in this way is | | | |
| unacceptable to an LSR, it MUST send a Session Rejected/Parame- | | | |
| ters Advertisement Mode Notification message in response to the | | | |
| Initialization message and not establish the session. | | | |
| | | | |
| D, Loop Detection | | | |
| Indicates whether loop detection based on path vectors is | | | |
| enabled. A value of 0 means loop detection is disabled; a | | | |
| value of 1 means that loop detection is enabled. | | | |
| | | | |
| PVLim, Path Vector Limit | | | |
| The configured maximum path vector length. MUST be 0 if loop | | | |
| detection is disabled (D = 0). If the loop detection proce- | | | |
| dures would require the LSR to send a path vector that exceeds | | | |
| this limit, the LSR will behave as if a loop had been detected | | | |
| for the FEC in question. | | | |
| | | | |
| When Loop Detection is enabled in a portion of a network, it is | | | |
| recommended that all LSRs in that portion of the network be | | | |
| configured with the same path vector limit. Although knowledge | | | |
| of a peer's path vector limit will not change an LSR's behav- | | | |
| ior, it does enable the LSR to alert an operator to a possible | | | |
| misconfiguration. | | | |
| | | | |
| Reserved | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and ignored on receipt. | | | |
| | | | |
| Max PDU Length | | | |
| Two octet unsigned integer that proposes the maximum allowable | | | |
| length for LDP PDUs for the session. A value of 255 or less | | | |
| specifies the default maximum length of 4096 octets. | | | |
| | | | |
| The receiving LSR MUST calculate the maximum PDU length for the | | | |
| session by using the smaller of its and its peer's proposals | | | |
| for Max PDU Length. The default maximum PDU length applies | | | |
| before session initialization completes. | | | |
| | | | |
| If the maximum PDU length determined this way is unacceptable | | | |
| to an LSR, it MUST send a Session Rejected/Parameters Max PDU | | | |
| Length Notification message in response to the Initialization | | | |
| message and not establish the session. | | | |
| | | | |
| Receiver LDP Identifier | | | |
| Identifies the receiver's label space. This LDP Identifier, | | | |
| together with the sender's LDP Identifier in the PDU header | | | |
| enables the receiver to match the Initialization message with | | | |
| one of its Hello adjacencies; see Section "Hello Message Proce- | | | |
| dures". | | | |
| | | | |
| If there is no matching Hello adjacency, the LSR MUST send a | | | |
| Session Rejected/No Hello Notification message in response to | | | |
| the Initialization message and not establish the session. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters are: | | | |
| | | | |
| Optional Parameter Type Length Value | | | |
| | | | |
| ATM Session Parameters 0x0501 var See below | | | |
| Frame Relay Session 0x0502 var See below | | | |
| Parameters | | | |
| | | | |
| ATM Session Parameters | | | |
| Used when an LDP session manages label exchange for an ATM link | | | |
| to specify ATM-specific session parameters. | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| ATM Sess Parms (0x0501) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | M | N |D| Reserved | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | ATM Label Range Component 1 | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| ~ ~ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | ATM Label Range Component N | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| M, ATM Merge Capabilities | | | |
| Specifies the merge capabilities of an ATM switch. The | | | |
| following values are supported in this version of the | | | |
| specification: | | | |
| | | | |
| Value Meaning | | | |
| | | | |
| 0 Merge not supported | | | |
| 1 VP Merge supported | | | |
| 2 VC Merge supported | | | |
| 3 VP & VC Merge supported | | | |
| | | | |
| If the merge capabilities of the LSRs differ, then: | | | |
| | | | |
| - Non-merge and VC-merge LSRs may freely interoperate. | | | |
| | | | |
| - The interoperability of VP-merge-capable switches with non- | | | |
| VP-merge-capable switches is a subject for future study. | | | |
| When the LSRs differ on the use of VP-merge, the session is | | | |
| established, but VP merge is not used. | | | |
| | | | |
| Note that if VP merge is used, it is the responsibility of the | | | |
| ingress node to ensure that the chosen VCI is unique within the | | | |
| LSR domain. | | | |
| | | | |
| N, Number of label range components | | | |
| Specifies the number of ATM Label Range Components included in | | | |
| the TLV. | | | |
| | | | |
| D, VC Directionality | | | |
| A value of 0 specifies bidirectional VC capability, meaning the | | | |
| LSR can (within a given VPI) support the use of a given VCI as | | | |
| a label for both link directions independently. A value of 1 | | | |
| specifies unidirectional VC capability, meaning (within a given | | | |
| VPI) a given VCI may appear in a label mapping for one direc- | | | |
| tion on the link only. When either or both of the peers speci- | | | |
| fies unidirectional VC capability, both LSRs use unidirectional | | | |
| VC label assignment for the link as follows. The LSRs compare | | | |
| their LDP Identifiers as unsigned integers. The LSR with the | | | |
| larger LDP Identifier may assign only odd-numbered VCIs in the | | | |
| VPI/VCI range as labels. The system with the smaller LDP Iden- | | | |
| tifier may assign only even-numbered VCIs in the VPI/VCI range | | | |
| as labels. | | | |
| | | | |
| Reserved | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and ignored on receipt. | | | |
| | | | |
| One or more ATM Label Range Components | | | |
| A list of ATM Label Range Components which together specify the | | | |
| Label range supported by the transmitting LSR. | | | |
| | | | |
| A receiving LSR MUST calculate the intersection between the | | | |
| received range and its own supported label range. The inter- | | | |
| section is the range in which the LSR may allocate and accept | | | |
| labels. LSRs MUST NOT establish a session with neighbors for | | | |
| which the intersection of ranges is NULL. In this case, the | | | |
| LSR MUST send a Session Rejected/Parameters Label Range Notifi- | | | |
| cation message in response to the Initialization message and | | | |
| not establish the session. | | | |
| | | | |
| The encoding for an ATM Label Range Component is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Res | Minimum VPI | Minimum VCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Res | Maximum VPI | Maximum VCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Res | | | |
| This field is reserved. It MUST be set to zero on transmis- | | | |
| sion and MUST be ignored on receipt. | | | |
| | | | |
| Minimum VPI (12 bits) | | | |
| This 12 bit field specifies the lower bound of a block of | | | |
| Virtual Path Identifiers that is supported on the originat- | | | |
| ing switch. If the VPI is less than 12-bits it SHOULD be | | | |
| right justified in this field and preceding bits SHOULD be | | | |
| set to 0. | | | |
| | | | |
| Minimum VCI (16 bits) | | | |
| This 16 bit field specifies the lower bound of a block of | | | |
| Virtual Connection Identifiers that is supported on the | | | |
| originating switch. If the VCI is less than 16-bits it | | | |
| SHOULD be right justified in this field and preceding bits | | | |
| SHOULD be set to 0. | | | |
| | | | |
| Maximum VPI (12 bits) | | | |
| This 12 bit field specifies the upper bound of a block of | | | |
| Virtual Path Identifiers that is supported on the originat- | | | |
| ing switch. If the VPI is less than 12-bits it SHOULD be | | | |
| right justified in this field and preceding bits SHOULD be | | | |
| set to 0. | | | |
| | | | |
| Maximum VCI (16 bits) | | | |
| This 16 bit field specifies the upper bound of a block of | | | |
| Virtual Connection Identifiers that is supported on the | | | |
| originating switch. If the VCI is less than 16-bits it | | | |
| SHOULD be right justified in this field and preceding bits | | | |
| SHOULD be set to 0. | | | |
| | | | |
| When peer LSRs are connected indirectly by means of an ATM VP, the | | | |
| sending LSR SHOULD set the Minimum and Maximum VPI fields to 0, | | | |
| and the receiving LSR MUST ignore the Minimum and Maximum VPI | | | |
| fields. | | | |
| | | | |
| Frame Relay Session Parameters | | | |
| Used when an LDP session manages label exchange for a Frame | | | |
| Relay link to specify Frame Relay-specific session parameters. | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0|0| FR Sess Parms (0x0502) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | M | N |D| Reserved | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Frame Relay Label Range Component 1 | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| ~ ~ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Frame Relay Label Range Component N | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| M, Frame Relay Merge Capabilities | | | |
| Specifies the merge capabilities of a Frame Relay switch. The | | | |
| following values are supported in this version of the specifi- | | | |
| cation: | | | |
| | | | |
| Value Meaning | | | |
| | | | |
| 0 Merge not supported | | | |
| 1 Merge supported | | | |
| | | | |
| Non-merge and merge Frame Relay LSRs may freely interoperate. | | | |
| | | | |
| N, Number of label range components Specifies the number of Frame | | | |
| Relay Label Range Components included in the TLV. | | | |
| | | | |
| D, VC Directionality | | | |
| A value of 0 specifies bidirectional VC capability, meaning the | | | |
| LSR can support the use of a given DLCI as a label for both | | | |
| link directions independently. A value of 1 specifies unidi- | | | |
| rectional VC capability, meaning a given DLCI may appear in a | | | |
| label mapping for one direction on the link only. When either | | | |
| or both of the peers specifies unidirectional VC capability, | | | |
| both LSRs use unidirectional VC label assignment for the link | | | |
| as follows. The LSRs compare their LDP Identifiers as unsigned | | | |
| integers. The LSR with the larger LDP Identifier may assign | | | |
| only odd-numbered DLCIs in the range as labels. The system | | | |
| with the smaller LDP Identifier may assign only even-numbered | | | |
| DLCIs in the range as labels. | | | |
| | | | |
| Reserved | | | |
| This field is reserved. It MUST be set to zero on transmission | | | |
| and ignored on receipt. | | | |
| | | | |
| One or more Frame Relay Label Range Components | | | |
| A list of Frame Relay Label Range Components which together | | | |
| specify the Label range supported by the transmitting LSR. | | | |
| | | | |
| A receiving LSR MUST calculate the intersection between the | | | |
| received range and its own supported label range. The inter- | | | |
| section is the range in which the LSR may allocate and accept | | | |
| labels. LSRs MUST NOT establish a session with neighbors for | | | |
| which the intersection of ranges is NULL. In this case, the | | | |
| LSR MUST send a Session Rejected/Parameters Label Range Notifi- | | | |
| cation message in response to the Initialization message and | | | |
| not establish the session. | | | |
| | | | |
| The encoding for a Frame Relay Label Range Component is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Reserved |Len| Minimum DLCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Reserved | Maximum DLCI | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Reserved | | | |
| This field is reserved. It MUST be set to zero on transmis- | | | |
| sion and ignored on receipt. | | | |
| | | | |
| Len | | | |
| This field specifies the number of bits of the DLCI. The | | | |
| following values are supported: | | | |
| | | | |
| Len DLCI bits | | | |
| | | | |
| 0 10 | | | |
| 2 23 | | | |
| | | | |
| Len values 1 and 3 are reserved. | | | |
| | | | |
| Minimum DLCI | | | |
| This 23-bit field specifies the lower bound of a block of | | | |
| Data Link Connection Identifiers (DLCIs) that is supported | | | |
| on the originating switch. The DLCI SHOULD be right justi- | | | |
| fied in this field and unused bits SHOULD be set to 0. | | | |
| | | | |
| Maximum DLCI | | | |
| This 23-bit field specifies the upper bound of a block of | | | |
| Data Link Connection Identifiers (DLCIs) that is supported | | | |
| on the originating switch. The DLCI SHOULD be right | | | |
| justified in this field and unused bits SHOULD be set to 0. | | | |
| | | | |
| Note that there is no Generic Session Parameters TLV for sessions | | | |
| which advertise Generic Labels. | | | |
| | | | |
| 3.5.3.1. Initialization Message Procedures | | | |
| | | | |
| See Section "LDP Session Establishment" and particularly Section | | | |
| "Session Initialization" for general procedures for handling the Ini- | | | |
| tialization Message. | | | |
| | | | |
| 3.5.4. KeepAlive Message | | | |
| | | | |
| An LSR sends KeepAlive Messages as part of a mechanism that monitors | | | |
| the integrity of the LDP session transport connection. | | | |
| | | | |
| The encoding for the KeepAlive Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| KeepAlive (0x0201) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Optional Parameters | | | |
| No optional parameters are defined for the KeepAlive message. | | | |
| | | | |
| 3.5.4.1. KeepAlive Message Procedures | | | |
| | | | |
| The KeepAlive Timer mechanism described in Section "Maintaining LDP | | | |
| Sessions" resets a session KeepAlive timer every time an LDP PDU is | | | |
| received on the session TCP connection. The KeepAlive Message is | | | |
| provided to allow reset of the KeepAlive Timer in circumstances where | | | |
| an LSR has no other information to communicate to an LDP peer. | | | |
| | | | |
| An LSR MUST arrange that its peer receive an LDP Message from it at | | | |
| least every KeepAlive Time period. Any LDP protocol message will do | | | |
| but, in circumstances where no other LDP protocol messages have been | | | |
| sent within the period, a KeepAlive message MUST be sent. | | | |
| | | | |
| 3.5.5. Address Message | | | |
| | | | |
| An LSR sends the Address Message to an LDP peer to advertise its | | | |
| interface addresses. | | | |
| | | | |
| The encoding for the Address Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Address (0x0300) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| | Address List TLV | | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Address List TLV | | | |
| The list of interface addresses being advertised by the sending | | | |
| LSR. The encoding for the Address List TLV is specified in | | | |
| Section "Address List TLV". | | | |
| | | | |
| Optional Parameters | | | |
| No optional parameters are defined for the Address message. | | | |
| | | | |
| 3.5.5.1. Address Message Procedures | | | |
| | | | |
| An LSR that receives an Address Message message uses the addresses it | | | |
| learns to maintain a database for mapping between peer LDP Identi- | | | |
| fiers and next hop addresses; see Section "LDP Identifiers and Next | | | |
| Hop Addresses". | | | |
| | | | |
| When a new LDP session is initialized and before sending Label Map- | | | |
| ping or Label Request messages an LSR SHOULD advertise its interface | | | |
| addresses with one or more Address messages. | | | |
| | | | |
| Whenever an LSR "activates" a new interface address, it SHOULD | | | |
| advertise the new address with an Address message. | | | |
| | | | |
| Whenever an LSR "de-activates" a previously advertised address, it | | | |
| SHOULD withdraw the address with an Address Withdraw message; see | | | |
| Section "Address Withdraw Message". | | | |
| | | | |
| If an LSR does not support the Address Family specified in the | | | |
| Address List TLV, it SHOULD send an "Unsupported Address Family" | | | |
| Notification to its LDP signalling an error and abort processing the | | | |
| message. | | | |
| | | | |
| An LSR may re-advertise an address (A) that it has previously adver- | | | |
| tised without explicitly withdrawing the address. If the receiver | | | |
| already has address binding (LSR, A) it SHOULD take no further | | | |
| action. | | | |
| | | | |
| An LSR may withdraw an address (A) without having previously adver- | | | |
| tised it. If the receiver has no address binding (LSR, A), it SHOULD | | | |
| take no further action. | | | |
| | | | |
| 3.5.6. Address Withdraw Message | | | |
| | | | |
| An LSR sends the Address Withdraw Message to an LDP peer to withdraw | | | |
| previously advertised interface addresses. | | | |
| | | | |
| The encoding for the Address Withdraw Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Address Withdraw (0x0301) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| | Address List TLV | | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| Address list TLV | | | |
| The list of interface addresses being withdrawn by the sending | | | |
| LSR. The encoding for the Address list TLV is specified in | | | |
| Section "Address List TLV". | | | |
| | | | |
| Optional Parameters | | | |
| No optional parameters are defined for the Address Withdraw mes- | | | |
| sage. | | | |
| | | | |
| 3.5.6.1. Address Withdraw Message Procedures | | | |
| | | | |
| See Section "Address Message Procedures" | | | |
| | | | |
| 3.5.7. Label Mapping Message | | | |
| | | | |
| An LSR sends a Label Mapping message to an LDP peer to advertise FEC- | | | |
| label bindings to the peer. | | | |
| | | | |
| The encoding for the Label Mapping Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Label Mapping (0x0400) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| FEC TLV | | | |
| Specifies the FEC component of the FEC-Label mapping being adver- | | | |
| tised. See Section "FEC TLV" for encoding. | | | |
| | | | |
| Label TLV | | | |
| Specifies the Label component of the FEC-Label mapping. See Sec- | | | |
| tion "Label TLV" for encoding. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters are: | | | |
| | | | |
| Optional Parameter Length Value | | | |
| | | | |
| Label Request 4 See below | | | |
| Message ID TLV | | | |
| Hop Count TLV 1 See below | | | |
| Path Vector TLV variable See below | | | |
| | | | |
| The encodings for the Hop Count, and Path Vector TLVs can be found | | | |
| in Section "TLV Encodings for Commonly Used Parameters". | | | |
| | | | |
| Label Request Message ID | | | |
| If this Label Mapping message is a response to a Label Request | | | |
| message it MUST include the Request Message Id optional parame- | | | |
| ter. The value of this optional parameter is the Message Id of | | | |
| the corresponding Label Request Message. | | | |
| | | | |
| Hop Count | | | |
| Specifies the running total of the number of LSR hops along the | | | |
| LSP being setup by the Label Message. Section "Hop Count Pro- | | | |
| cedures" describes how to handle this TLV. | | | |
| | | | |
| Path Vector | | | |
| Specifies the LSRs along the LSP being setup by the Label Mes- | | | |
| sage. Section "Path Vector Procedures" describes how to handle | | | |
| this TLV. | | | |
| | | | |
| 3.5.7.1. Label Mapping Message Procedures | | | |
| | | | |
| The Mapping message is used by an LSR to distribute a label mapping | | | |
| for a FEC to an LDP peer. If an LSR distributes a mapping for a FEC | | | |
| to multiple LDP peers, it is a local matter whether it maps a single | | | |
| label to the FEC, and distributes that mapping to all its peers, or | | | |
| whether it uses a different mapping for each of its peers. | | | |
| | | | |
| An LSR is responsible for the consistency of the label mappings it | | | |
| has distributed, and that its peers have these mappings. | | | |
| | | | |
| An LSR receiving a Label Mapping message from a downstream LSR for a | | | |
| Prefix SHOULD NOT use the label for forwarding unless its routing ta- | | | |
| ble contains an entry that exactly matches the FEC Element. | | | |
| | | | |
| See Appendix A "LDP Label Distribution Procedures" for more details. | | | |
| | | | |
| 3.5.7.1.1. Independent Control Mapping | | | |
| | | | |
| If an LSR is configured for independent control, a mapping message is | | | |
| transmitted by the LSR upon any of the following conditions: | | | |
| | | | |
| 1. The LSR recognizes a new FEC via the forwarding table, and the | | | |
| label advertisement mode is Downstream Unsolicited advertise- | | | |
| ment. | | | |
| | | | |
| 2. The LSR receives a Request message from an upstream peer for a | | | |
| FEC present in the LSR's forwarding table. | | | |
| | | | |
| 3. The next hop for a FEC changes to another LDP peer, and loop | | | |
| detection is configured. | | | |
| | | | |
| 4. The attributes of a mapping change. | | | |
| | | | |
| 5. The receipt of a mapping from the downstream next hop AND | | | |
| a) no upstream mapping has been created OR | | | |
| b) loop detection is configured OR | | | |
| c) the attributes of the mapping have changed. | | | |
| | | | |
| 3.5.7.1.2. Ordered Control Mapping | | | |
| | | | |
| If an LSR is doing ordered control, a Mapping message is transmitted | | | |
| by downstream LSRs upon any of the following conditions: | | | |
| | | | |
| 1. The LSR recognizes a new FEC via the forwarding table, and is | | | |
| the egress for that FEC. | | | |
| | | | |
| 2. The LSR receives a Request message from an upstream peer for a | | | |
| FEC present in the LSR's forwarding table, and the LSR is the | | | |
| egress for that FEC OR has a downstream mapping for that FEC. | | | |
| | | | |
| 3. The next hop for a FEC changes to another LDP peer, and loop | | | |
| detection is configured. | | | |
| | | | |
| 4. The attributes of a mapping change. | | | |
| | | | |
| 5. The receipt of a mapping from the downstream next hop AND | | | |
| a) no upstream mapping has been created OR | | | |
| b) loop detection is configured OR | | | |
| c) the attributes of the mapping have changed. | | | |
| | | | |
| 3.5.7.1.3. Downstream on Demand Label Advertisement | | | |
| | | | |
| In general, the upstream LSR is responsible for requesting label map- | | | |
| pings when operating in Downstream on Demand mode. However, unless | | | |
| some rules are followed, it is possible for neighboring LSRs with | | | |
| different advertisement modes to get into a livelock situation where | | | |
| everything is functioning properly, but no labels are distributed. | | | |
| For example, consider two LSRs Ru and Rd where Ru is the upstream LSR | | | |
| and Rd is the downstream LSR for a particular FEC. In this example, | | | |
| Ru is using Downstream Unsolicited advertisement mode and Rd is using | | | |
| Downstream on Demand mode. In this case, Rd may assume that Ru will | | | |
| request a label mapping when it wants one and Ru may assume that Rd | | | |
| will advertise a label if it wants Ru to use one. If Rd and Ru oper- | | | |
| ate as suggested, no labels will be distributed from Rd to Ru. | | | |
| | | | |
| This livelock situation can be avoided if the following rule is | | | |
| observed: an LSR operating in Downstream on Demand mode SHOULD NOT be | | | |
| expected to send unsolicited mapping advertisements. Therefore, if | | | |
| the downstream LSR is operating in Downstream on Demand mode, the | | | |
| upstream LSR is responsible for requesting label mappings as needed. | | | |
| | | | |
| 3.5.7.1.4. Downstream Unsolicited Label Advertisement | | | |
| | | | |
| In general, the downstream LSR is responsible for advertising a label | | | |
| mapping when it wants an upstream LSR to use the label. An upstream | | | |
| LSR may issue a mapping request if it so desires. | | | |
| | | | |
| The combination of Downstream Unsolicited mode and conservative label | | | |
| retention can lead to a situation where an LSR releases the label for | | | |
| a FEC that it later needs. For example, if LSR Rd advertises to LSR | | | |
| Ru the label for a FEC for which it is not Ru's next hop, Ru will | | | |
| release the label. If Ru's next hop for the FEC later changes to Rd, | | | |
| it needs the previously released label. | | | |
| | | | |
| To deal with this situation either Ru can explicitly request the | | | |
| label when it needs it, or Rd can periodically readvertise it to Ru. | | | |
| In many situations Ru will know when it needs the label from Rd. For | | | |
| example, when its next hop for the FEC changes to Rd. However, there | | | |
| could be situations when Ru does not. For example, Rd may be | | | |
| attempting to establish an LSP with non-standard properties. Forcing | | | |
| Ru to explicitly request the label in this situation would require it | | | |
| to maintain state about a potential LSP with non-standard properties. | | | |
| | | | |
| In situations where Ru knows it needs the label, it is responsible | | | |
| for explicitly requesting the label by means of a Label Request mes- | | | |
| sage. In situations where Ru may not know that it needs the label, | | | |
| Rd is responsible for periodically readvertising the label to Ru. | | | |
| | | | |
| For this version of LDP, the only situation where Ru knows it needs a | | | |
| label for a FEC from Rd is when Rd is its next hop for the FEC, Ru | | | |
| does not have a label from Rd, and the LSP for the FEC is one that | | | |
| can be established with TLVs defined in this document. | | | |
| | | | |
| 3.5.8. Label Request Message | | | |
| | | | |
| An LSR sends the Label Request Message to an LDP peer to request a | | | |
| binding (mapping) for a FEC. | | | |
| | | | |
| The encoding for the Label Request Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Label Request (0x0401) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| FEC TLV | | | |
| The FEC for which a label is being requested. See Section "FEC | | | |
| TLV" for encoding. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters are: | | | |
| | | | |
| Optional Parameter Length Value | | | |
| | | | |
| Hop Count TLV 1 See below | | | |
| Path Vector TLV variable See below | | | |
| | | | |
| The encodings for the Hop Count, and Path Vector TLVs can be found | | | |
| in Section "TLV Encodings for Commonly Used Parameters". | | | |
| | | | |
| Hop Count | | | |
| Specifies the running total of the number of LSR hops along the | | | |
| LSP being setup by the Label Request Message. Section "Hop | | | |
| Count Procedures" describes how to handle this TLV. | | | |
| | | | |
| Path Vector | | | |
| Specifies the LSRs along the LSR being setup by the Label | | | |
| Request Message. Section "Path Vector Procedures" describes | | | |
| how to handle this TLV. | | | |
| | | | |
| 3.5.8.1. Label Request Message Procedures | | | |
| | | | |
| The Request message is used by an upstream LSR to explicitly request | | | |
| that the downstream LSR assign and advertise a label for a FEC. | | | |
| | | | |
| An LSR may transmit a Request message under any of the following con- | | | |
| ditions: | | | |
| | | | |
| 1. The LSR recognizes a new FEC via the forwarding table, and the | | | |
| next hop is an LDP peer, and the LSR doesn't already have a | | | |
| mapping from the next hop for the given FEC. | | | |
| | | | |
| 2. The next hop to the FEC changes, and the LSR doesn't already | | | |
| have a mapping from that next hop for the given FEC. | | | |
| | | | |
| Note that if the LSR already has a pending Label Request mes- | | | |
| sage for the new next hop it SHOULD NOT issue an additional | | | |
| Label Request in response to the next hop change. | | | |
| | | | |
| 3. The LSR receives a Label Request for a FEC from an upstream LDP | | | |
| peer, the FEC next hop is an LDP peer, and the LSR doesn't | | | |
| already have a mapping from the next hop. | | | |
| | | | |
| Note that since a non-merge LSR must setup a separate LSP for | | | |
| each upstream peer requesting a label, it must send a separate | | | |
| Label Request for each such peer. A consequence of this is | | | |
| that a non-merge LSR may have multiple Label Request messages | | | |
| for a given FEC outstanding at the same time. | | | |
| | | | |
| The receiving LSR SHOULD respond to a Label Request message with a | | | |
| Label Mapping for the requested label or with a Notification message | | | |
| indicating why it cannot satisfy the request. | | | |
| | | | |
| When the FEC for which a label is requested is a Prefix FEC Element, | | | |
| the receiving LSR uses its routing table to determine its response. | | | |
| Unless its routing table includes an entry that exactly matches the | | | |
| requested Prefix, the LSR MUST respond with a No Route Notification | | | |
| message. | | | |
| | | | |
| The message ID of the Label Request message serves as an identifier | | | |
| for the Label Request transaction. When the receiving LSR responds | | | |
| with a Label Mapping message, the mapping message MUST include a | | | |
| Label Request/Returned Message ID TLV optional parameter which | | | |
| includes the message ID of the Label Request message. Note that | | | |
| since LSRs use Label Request message IDs as transaction identifiers | | | |
| an LSR SHOULD NOT reuse the message ID of a Label Request message | | | |
| until the corresponding transaction completes. | | | |
| | | | |
| This version of the protocol defines the following Status Codes for | | | |
| the Notification message that signals a request cannot be satisfied: | | | |
| | | | |
| No Route | | | |
| The FEC for which a label was requested includes a FEC Element | | | |
| for which the LSR does not have a route. | | | |
| | | | |
| No Label Resources | | | |
| The LSR cannot provide a label because of resource limitations. | | | |
| When resources become available the LSR MUST notify the | | | |
| requesting LSR by sending a Notification message with the Label | | | |
| Resources Available Status Code. | | | |
| | | | |
| An LSR that receives a No Label Resources response to a Label | | | |
| Request message MUST NOT issue further Label Request messages | | | |
| until it receives a Notification message with the Label | | | |
| Resources Available Status code. | | | |
| | | | |
| Loop Detected | | | |
| The LSR has detected a looping Label Request message. | | | |
| | | | |
| See Appendix A "LDP Label Distribution Procedures" for more details. | | | |
| | | | |
| 3.5.9. Label Abort Request Message | | | |
| | | | |
| The Label Abort Request message may be used to abort an outstanding | | | |
| Label Request message. | | | |
| | | | |
| The encoding for the Label Abort Request Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Label Abort Req (0x0404) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label Request Message ID TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| FEC TLV | | | |
| Identifies the FEC for which the Label Request is being aborted. | | | |
| | | | |
| Label Request Message ID TLV | | | |
| Specifies the message ID of the Label Request message to be | | | |
| aborted. | | | |
| | | | |
| Optional Parameters | | | |
| No optional parameters are defined for the Label Abort Req mes- | | | |
| sage. | | | |
| | | | |
| 3.5.9.1. Label Abort Request Message Procedures | | | |
| | | | |
| An LSR Ru may send a Label Abort Request message to abort an out- | | | |
| standing Label Request message for FEC sent to LSR Rd in the follow- | | | |
| ing circumstances: | | | |
| | | | |
| 1. Ru's next hop for FEC has changed from LSR Rd to LSR X; or | | | |
| | | | |
| 2. Ru is a non-merge, non-ingress LSR and has received a Label | | | |
| Abort Request for FEC from an upstream peer Y. | | | |
| | | | |
| 3. Ru is a merge, non-ingress LSR and has received a Label Abort | | | |
| Request for FEC from an upstream peer Y and Y is the only | | | |
| (last) upstream LSR requesting a label for FEC. | | | |
| | | | |
| There may be other situations where an LSR may choose to abort an | | | |
| outstanding Label Request message in order to reclaim resource asso- | | | |
| ciated with the pending LSP. However, specification of general | | | |
| strategies for using the abort mechanism is beyond the scope of LDP. | | | |
| | | | |
| When an LSR receives a Label Abort Request message, if it has not | | | |
| previously responded to the Label Request being aborted with a Label | | | |
| Mapping message or some other Notification message, it MUST acknowl- | | | |
| edge the abort by responding with a Label Request Aborted Notifica- | | | |
| tion message. The Notification MUST include a Label Request Message | | | |
| ID TLV that carries the message ID of the aborted Label Request mes- | | | |
| sage. | | | |
| | | | |
| If an LSR receives a Label Abort Request Message after it has | | | |
| responded to the Label Request in question with a Label Mapping mes- | | | |
| sage or a Notification message, it ignores the abort request. | | | |
| | | | |
| If an LSR receives a Label Mapping message in response to a Label | | | |
| Request message after it has sent a Label Abort Request message to | | | |
| abort the Label Request, the label in the Label Mapping message is | | | |
| valid. The LSR may choose to use the label or to release it with a | | | |
| Label Release message. | | | |
| | | | |
| An LSR aborting a Label Request message may not reuse the Message ID | | | |
| for the Label Request message until it receives one of the following | | | |
| from its peer: | | | |
| | | | |
| - A Label Request Aborted Notification message acknowledging the | | | |
| abort; | | | |
| | | | |
| - A Label Mapping message in response to the Label Request mes- | | | |
| sage being aborted; | | | |
| | | | |
| - A Notification message in response to the Label Request message | | | |
| being aborted (e.g., Loop Detected, No Label Resources, etc.). | | | |
| | | | |
| To protect itself against tardy peers or faulty peer implementations | | | |
| an LSR may choose to time out receipt of the above. The time out | | | |
| period should be relatively long (several minutes). If the time out | | | |
| period elapses with no reply from the peer the LSR may reuse the Mes- | | | |
| sage Id of the Label Request message; if it does so, it should also | | | |
| discard any record of the outstanding Label Request and Label Abort | | | |
| messages. | | | |
| | | | |
| Note that the response to a Label Abort Request message is never | | | |
| "ordered". That is, the response does not depend on the downstream | | | |
| state of the LSP setup being aborted. An LSR receiving a Label Abort | | | |
| Request message MUST process it immediately, regardless of the down- | | | |
| stream state of the LSP, responding with a Label Request Aborted | | | |
| Notification or ignoring it, as appropriate. | | | |
| | | | |
| 3.5.10. Label Withdraw Message | | | |
| | | | |
| An LSR sends a Label Withdraw Message to an LDP peer to signal the | | | |
| peer that the peer may not continue to use specific FEC-label map- | | | |
| pings the LSR had previously advertised. This breaks the mapping | | | |
| between the FECs and the labels. | | | |
| | | | |
| The encoding for the Label Withdraw Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Label Withdraw (0x0402) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label TLV (optional) | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| FEC TLV | | | |
| Identifies the FEC for which the FEC-label mapping is being with- | | | |
| drawn. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters are: | | | |
| | | | |
| Optional Parameter Length Value | | | |
| | | | |
| Label TLV variable See below | | | |
| | | | |
| The encoding for Label TLVs are found in Section "Label TLVs". | | | |
| | | | |
| Label | | | |
| If present, specifies the label being withdrawn (see procedures | | | |
| below). | | | |
| | | | |
| 3.5.10.1. Label Withdraw Message Procedures | | | |
| | | | |
| An LSR transmits a Label Withdraw message under the following condi- | | | |
| tions: | | | |
| | | | |
| 1. The LSR no longer recognizes a previously known FEC for which | | | |
| it has advertised a label. | | | |
| | | | |
| 2. The LSR has decided unilaterally (e.g., via configuration) to | | | |
| no longer label switch a FEC (or FECs) with the label mapping | | | |
| being withdrawn. | | | |
| | | | |
| The FEC TLV specifies the FEC for which labels are to be withdrawn. | | | |
| If no Label TLV follows the FEC, all labels associated with the FEC | | | |
| are to be withdrawn; otherwise only the label specified in the | | | |
| optional Label TLV is to be withdrawn. | | | |
| | | | |
| The FEC TLV may contain the Wildcard FEC Element; if so, it may con- | | | |
| tain no other FEC Elements. In this case, if the Label Withdraw mes- | | | |
| sage contains an optional Label TLV, then the label is to be with- | | | |
| drawn from all FECs to which it is bound. If there is not an | | | |
| optional Label TLV in the Label Withdraw message, then the sending | | | |
| LSR is withdrawing all label mappings previously advertised to the | | | |
| receiving LSR. | | | |
| | | | |
| An LSR that receives a Label Withdraw message MUST respond with a | | | |
| Label Release message. | | | |
| | | | |
| See Appendix A "LDP Label Distribution Procedures" for more details. | | | |
| | | | |
| 3.5.11. Label Release Message | | | |
| | | | |
| An LSR sends a Label Release message to an LDP peer to signal the | | | |
| peer that the LSR no longer needs specific FEC-label mappings previ- | | | |
| ously requested of and/or advertised by the peer. | | | |
| | | | |
| The encoding for the Label Release Message is: | | | |
| | | | |
| 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 | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| |0| Label Release (0x0403) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | FEC TLV | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Label TLV (optional) | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Optional Parameters | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| Message ID | | | |
| 32-bit value used to identify this message. | | | |
| | | | |
| FEC TLV | | | |
| Identifies the FEC for which the FEC-label mapping is being | | | |
| released. | | | |
| | | | |
| Optional Parameters | | | |
| This variable length field contains 0 or more parameters, each | | | |
| encoded as a TLV. The optional parameters are: | | | |
| | | | |
| Optional Parameter Length Value | | | |
| | | | |
| Label TLV variable See below | | | |
| | | | |
| The encodings for Label TLVs are found in Section "Label TLVs". | | | |
| | | | |
| Label | | | |
| If present, the label being released (see procedures below). | | | |
| | | | |
| 3.5.11.1. Label Release Message Procedures | | | |
| | | | |
| An LSR transmits a Label Release message to a peer when it is no | | | |
| longer needs a label previously received from or requested of that | | | |
| peer. | | | |
| | | | |
| An LSR MUST transmit a Label Release message under any of the follow- | | | |
| ing conditions: | | | |
| | | | |
| 1. The LSR which sent the label mapping is no longer the next hop | | | |
| for the mapped FEC, and the LSR is configured for conservative | | | |
| operation. | | | |
| | | | |
| 2. The LSR receives a label mapping from an LSR which is not the | | | |
| next hop for the FEC, and the LSR is configured for conserva- | | | |
| tive operation. | | | |
| | | | |
| 3. The LSR receives a Label Withdraw message. | | | |
| | | | |
| Note that if an LSR is configured for "liberal mode", a release mes- | | | |
| sage will never be transmitted in the case of conditions (1) and (2) | | | |
| as specified above. In this case, the upstream LSR keeps each unused | | | |
| label, so that it can immediately be used later if the downstream | | | |
| peer becomes the next hop for the FEC. | | | |
| | | | |
| The FEC TLV specifies the FEC for which labels are to be released. | | | |
| If no Label TLV follows the FEC, all labels associated with the FEC | | | |
| are to be released; otherwise only the label specified in the | | | |
| optional Label TLV is to be released. | | | |
| | | | |
| The FEC TLV may contain the Wildcard FEC Element; if so, it may con- | | | |
| tain no other FEC Elements. In this case, if the Label Release mes- | | | |
| sage contains an optional Label TLV, then the label is to be released | | | |
| for all FECs to which it is bound. If there is not an | | | |
| | | | |
| optional Label TLV in the Label Release message, then the sending LSR | | | |
| is releasing all label mappings previously learned from the receiving | | | |
| LSR. | | | |
| | | | |
| See Appendix A "LDP Label Distribution Procedures" for more details. | | | |
| | | | |
| 3.6. Messages and TLVs for Extensibility | | | |
| | | | |
| Support for LDP extensibility includes the rules for the U and F bits | | | |
| that specify how an LSR handles unknown TLVs and messages. | | | |
| | | | |
| This section specifies TLVs and messages for vendor-private and | | | |
| experimental use. | | | |
| | | | |
| 3.6.1. LDP Vendor-private Extensions | | | |
| | | | |
| Vendor-private TLVs and messages are used to convey vendor-private | | | |
| information between LSRs. | | | |
| | | | |
| 3.6.1.1. LDP Vendor-private TLVs | | | |
| | | | |
| The Type range 0x3E00 through 0x3EFF is reserved for vendor-private | | | |
| TLVs. | | | |
| | | | |
| The encoding for a vendor-private TLV is: | | | |
| | | | |
| 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| Type (0x3E00-0x3EFF) | Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Vendor ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| | Data.... | | | | |
| ~ ~ | | | |
| | | | | | |
| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| U bit | | | |
| Unknown TLV bit. Upon receipt of an unknown TLV, if U is clear | | | |
| (=0), a notification MUST be returned to the message originator | | | |
| and the entire message MUST be ignored; if U is set (=1), the | | | |
| unknown TLV is silently ignored and the rest of the message is | | | |
| processed as if the unknown TLV did not exist. | | | |
| | | | |
| The determination as to whether a vendor-private message is under- | | | |
| stood is based on the Type and the mandatory Vendor ID field. | | | |
| | | | |
| Implementations that support vendor-private TLVs MUST support a | | | |
| user-accessible configuration interface that causes the U-bit to | | | |
| be set on all transmitted vendor-private TLVs; this requirement | | | |
| MAY be satisfied by a user-accessible configuration interface that | | | |
| prevents transmission of all vendor-private TLVs for which the U- | | | |
| bit is clear. | | | |
| | | | |
| F bit | | | |
| Forward unknown TLV bit. This bit only applies when the U bit is | | | |
| set and the LDP message containing the unknown TLV is is to be | | | |
| forwarded. If F is clear (=0), the unknown TLV is not forwarded | | | |
| with the containing message; if F is set (=1), the unknown TLV is | | | |
| forwarded with the containing message. | | | |
| | | | |
| Type | | | |
| Type value in the range 0x3E00 through 0x3EFF. Together, the Type | | | |
| and Vendor Id field specify how the Data field is to be inter- | | | |
| preted. | | | |
| | | | |
| Length | | | |
| Specifies the cumulative length in octets of the Vendor ID and | | | |
| Data fields. | | | |
| | | | |
| Vendor Id | | | |
| 802 Vendor ID as assigned by the IEEE. | | | |
| | | | |
| Data | | | |
| The remaining octets after the Vendor ID in the Value field are | | | |
| optional vendor-dependent data. | | | |
| | | | |
| 3.6.1.2. LDP Vendor-private Messages | | | |
| | | | |
| The Message Type range 0x3E00 through 0x3EFF is reserved for vendor- | | | |
| private Messages. | | | |
| | | | |
| 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| Msg Type (0x3E00-0x3EFF) | Message Length | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Message ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | Vendor ID | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| + + | | | |
| | Remaining Mandatory Parameters | | | | |
| + + | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | | | |
| + + | | | |
| | Optional Parameters | | | | |
| + + | | | |
| | | | | | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | |
| | | | |
| U bit | | | |
| Unknown message bit. Upon receipt of an unknown message, if U is | | | |
| clear (=0), a notification is returned to the message originator; | | | |
| if U is set (=1), the unknown message is silently ignored. | | | |
| | | | |
| The determination as to whether a vendor-private message is under- | | | |
| stood is based on the Msg Type and the Vendor ID parameter. | | | |
| | | | |
| Implementations that support vendor-private messages MUST support | | | |
| a user-accessible configuration interface that causes the U-bit to | | | |
| be set on all transmitted vendor-private messages; this require- | | | |
| ment MAY be satisfied by a user-accessible configuration interface | | | |
| that prevents transmission of all vendor-private messages for | | | |
| which the U-bit is clear. | | | |
| | | | |
| Msg Type | | | |
| Message type value in the range 0x3E00 through 0x3EFF. Together, | | | |
| the Msg Type and the Vendor ID specify how the message is to be | | | |
| interpreted. | | | |
| | | | |
| Message Length | | | |
| Specifies the cumulative length in octets of the Message ID, Ven- | | | |
| dor ID, Remaining Mandatory Parameters and Optional Parameters. | | | |
| | | | |
| Message ID | | | |
| 32-bit integer used to identify this message. Used by the sending | | | |
| LSR to facilitate identifying notification messages that may apply | | | |
| to this message. An LSR sending a notification message in | | | |
| response to this message will include this Message Id in the noti- | | | |
| fication message; see Section "Notification Message". | | | |
| | | | |
| Vendor ID | | | |
| 802 Vendor ID as assigned by the IEEE. | | | |
| | | | |
| Remaining Mandatory Parameters | | | |
| Variable length set of remaining required message parameters. | | | |
| | | | |
| Optional Parameters | | | |
| Variable length set of optional message parameters. | | | |
| | | | |
| 3.6.2. LDP Experimental Extensions | | | |
| | | | |
| LDP support for experimentation is similar to support for vendor- | | | |
| private extensions with the following differences: | | | |
| | | | |
| - The Type range 0x3F00 through 0x3FFF is reserved for experimen- | | | |
| tal TLVs. | | | |
| | | | |
| - The Message Type range 0x3F00 through 0x3FFF is reserved for | | | |
| experimental messages. | | | |
| | | | |
| - The encodings for experimental TLVs and messages are similar to | | | |
| the vendor-private encodings with the following difference. | | | |
| | | | |
| Experimental TLVs and messages use an Experiment ID field in | | | |
| place of a Vendor ID field. The Experiment ID field is used | | | |
| with the Type or Message Type field to specify the interpreta- | | | |
| tion of the experimental TLV or Message. | | | |
| | | | |
| Administration of Experiment IDs is the responsibility of the | | | |
| experimenters. | | | |
| | | | |
| 3.7. Message Summary | | | |
| | | | |
| The following are the LDP messages defined in this version of the | | | |
| protocol. | | | |
| | | | |
| Message Name Type Section Title | | | |
| | | | |
| Notification 0x0001 "Notification Message" | | | |
| Hello 0x0100 "Hello Message" | | | |
| Initialization 0x0200 "Initialization Message" | | | |
| KeepAlive 0x0201 "KeepAlive Message" | | | |
| Address 0x0300 "Address Message" | | | |
| Address Withdraw 0x0301 "Address Withdraw Message" | | | |
| Label Mapping 0x0400 "Label Mapping Message" | | | |
| Label Request 0x0401 "Label Request Message" | | | |
| Label Withdraw 0x0402 "Label Withdraw Message" | | | |
| Label Release 0x0403 "Label Release Message" | | | |
| Label Abort Request 0x0404 "Label Abort Request Message" | | | |
| Vendor-Private 0x3E00- "LDP Vendor-private Extensions" | | | |
| 0x3EFF | | | |
| Experimental 0x3F00- "LDP Experimental Extensions" | | | |
| 0x3FFF | | | |
| | | | |
| 3.8. TLV Summary | | | |
| | | | |
| The following are the TLVs defined in this version of the protocol. | | | |
| | | | |
| TLV Type Section Title | | | |
| | | | |
| FEC 0x0100 "FEC TLV" | | | |
| Address List 0x0101 "Address List TLV" | | | |
| Hop Count 0x0103 "Hop Count TLV" | | | |
| Path Vector 0x0104 "Path Vector TLV" | | | |
| Generic Label 0x0200 "Generic Label TLV" | | | |
| ATM Label 0x0201 "ATM Label TLV" | | | |
| Frame Relay Label 0x0202 "Frame Relay Label TLV" | | | |
| Status 0x0300 "Status TLV" | | | |
| Extended Status 0x0301 "Notification Message" | | | |
| Returned PDU 0x0302 "Notification Message" | | | |
| Returned Message 0x0303 "Notification Message" | | | |
| Common Hello 0x0400 "Hello Message" | | | |
| Parameters | | | |
| IPv4 Transport Address 0x0401 "Hello Message" | | | |
| Configuration 0x0402 "Hello Message" | | | |
| Sequence Number | | | |
| IPv6 Transport Address 0x0403 "Hello Message" | | | |
| Common Session 0x0500 "Initialization Message" | | | |
| Parameters | | | |
| ATM Session Parameters 0x0501 "Initialization Message" | | | |
| Frame Relay Session 0x0502 "Initialization Message" | | | |
| Parameters | | | |
| Label Request 0x0600 "Label Mapping Message" | | | |
| Message ID | | | |
| Vendor-Private 0x3E00- "LDP Vendor-private Extensions" | | | |
| 0x3EFF | | | |
| Experimental 0x3F00- "LDP Experimental Extensions" | | | |
| 0x3FFF | | | |
| | | | |
| 3.9. Status Code Summary | | | |
| | | | |
| The following are the Status Codes defined in this version of the | | | |
| protocol. | | | |
| | | | |
| The "E" column is the required setting of the Status Code E-bit; the | | | |
| "Status Data" column is the value of the 30-bit Status Data field in | | | |
| the Status Code TLV. Note that the setting of the Status Code F-bit | | | |
| is at the discretion of the LSR originating the Status TLV. | | | |
| | | | |
| Status Code E Status Data Section Title | | | |
| | | | |
| Success 0 0x00000000 "Status TLV" | | | |
| Bad LDP Identifier 1 0x00000001 "Events Signaled by ..." | | | |
| Bad Protocol Version 1 0x00000002 "Events Signaled by ..." | | | |
| Bad PDU Length 1 0x00000003 "Events Signaled by ..." | | | |
| Unknown Message Type 0 0x00000004 "Events Signaled by ..." | | | |
| Bad Message Length 1 0x00000005 "Events Signaled by ..." | | | |
| Unknown TLV 0 0x00000006 "Events Signaled by ..." | | | |
| Bad TLV length 1 0x00000007 "Events Signaled by ..." | | | |
| Malformed TLV Value 1 0x00000008 "Events Signaled by ..." | | | |
| Hold Timer Expired 1 0x00000009 "Events Signaled by ..." | | | |
| Shutdown 1 0x0000000A "Events Signaled by ..." | | | |
| Loop Detected 0 0x0000000B "Loop Detection" | | | |
| Unknown FEC 0 0x0000000C "FEC Procedures" | | | |
| No Route 0 0x0000000D "Label Request Mess ..." | | | |
| No Label Resources 0 0x0000000E "Label Request Mess ..." | | | |
| Label Resources / 0 0x0000000F "Label Request Mess ..." | | | |
| Available | | | |
| Session Rejected/ 1 0x00000010 "Session Initialization" | | | |
| No Hello | | | |
| Session Rejected/ 1 0x00000011 "Session Initialization" | | | |
| Parameters Advertisement Mode | | | |
| Session Rejected/ 1 0x00000012 "Session Initialization" | | | |
| Parameters Max PDU Length | | | |
| Session Rejected/ 1 0x00000013 "Session Initialization" | | | |
| Parameters Label Range | | | |
| KeepAlive Timer 1 0x00000014 "Events Signaled by ..." | | | |
| Expired | | | |
| Label Request Aborted 0 0x00000015 "Label Request Abort ..." | | | |
| Missing Message 0 0x00000016 "Events Signaled by ..." | | | |
| Parameters | | | |
| Unsupported Address 0 0x00000017 "FEC Procedures" | | | |
| Family "Address Message Proc ..." | | | |
| Session Rejected/ 1 0x00000018 "Session Initialization" | | | |
| Bad KeepAlive Time | | | |
| Internal Error 1 0x00000019 "Events Signaled by ..." | | | |
| | | | |
| 3.10. Well-known Numbers | | | |
| | | | |
| 3.10.1. UDP and TCP Ports | | | |
| | | | |
| The UDP port for LDP Hello messages is 646. | | | |
| | | | |
| The TCP port for establishing LDP session connections is 646. | | | |
| | | | |
| 3.10.2. Implicit NULL Label | | | |
| | | | |
| The Implicit NULL label is defined in [RFC3031] as follows: | | | |
| | | | |
| "The Implicit NULL label is a label with special semantics which an | | | |
| LSR can bind to an address prefix. If LSR Ru, by consulting its ILM | | | |
| (Incoming Label Map) sees that labeled packet P must be forwarded | | | |
| next to Rd, but that Rd has distributed a binding of Implicit NULL to | | | |
| the corresponding address prefix, then instead of replacing the value | | | |
| of the label on top of the label stack, Ru pops the label stack, and | | | |
| then forwards the resulting packet to Rd." | | | |
| | | | |
| The implicit NULL label is represented in LDP as a Generic Label TLV | | | |
| with a Label field value of 3, as defined in [RFC3032]. | | | |
| | | | |
| 4. IANA Considerations | | | |
| | | | |
| LDP defines the following name spaces which require management: | | | |
| | | | |
| - Message Type Name Space. | | | |
| - TLV Type Name Space. | | | |
| - FEC Type Name Space. | | | |
| - Status Code Name Space. | | | |
| - Experiment ID Name Space. | | | |
| | | | |
| The following sections provide guidelines for managing these name | | | |
| spaces. | | | |
| | | | |
| 4.1. Message Type Name Space | | | |
| | | | |
| LDP divides the name space for message types into three ranges. The | | | |
| following are the guidelines for managing these ranges: | | | |
| | | | |
| - Message Types 0x0000 - 0x3DFF. Message types in this range are | | | |
| part of the LDP base protocol. Following the policies outlined | | | |
| in [IANA], Message types in this range are allocated through an | | | |
| IETF Consensus action. | | | |
| | | | |
| - Message Types 0x3E00 - 0x3EFF. Message types in this range are | | | |
| reserved for Vendor Private extensions and are the responsibil- | | | |
| ity of the individual vendors (see Section "LDP Vendor-private | | | |
| Messages"). IANA management of this range of the Message Type | | | |
| Name Space is unnecessary. | | | |
| | | | |
| - Message Types 0x3F00 - 0x3FFF. Message types in this range are | | | |
| reserved for Experimental extensions and are the responsibility | | | |
| of the individual experimenters (see Sections "LDP Experimental | | | |
| Extensions" and "Experiment ID Name Space"). IANA management | | | |
| of this range of the Message Type Name Space is unnecessary; | | | |
| however, IANA is responsible for managing part of the Experi- | | | |
| ment ID Name Space (see below). | | | |
| | | | |
| 4.2. TLV Type Name Space | | | |
| | | | |
| LDP divides the name space for TLV types into three ranges. The fol- | | | |
| lowing are the guidelines for managing these ranges: | | | |
| | | | |
| - TLV Types 0x0000 - 0x3DFF. TLV types in this range are part of | | | |
| the LDP base protocol. Following the policies outlined in | | | |
| [IANA], TLV types in this range are allocated through an IETF | | | |
| Consensus action. | | | |
| | | | |
| - TLV Types 0x3E00 - 0x3EFF. TLV types in this range are | | | |
| reserved for Vendor Private extensions and are the responsibil- | | | |
| ity of the individual vendors (see Section "LDP Vendor-private | | | |
| TLVs"). IANA management of this range of the TLV Type Name | | | |
| Space is unnecessary. | | | |
| | | | |
| - TLV Types 0x3F00 - 0x3FFF. TLV types in this range are | | | |
| reserved for Experimental extensions and are the responsibility | | | |
| of the individual experimenters (see Sections "LDP Experimental | | | |
| Extensions" and "Experiment ID Name Space"). IANA management | | | |
| of this range of the TLV Name Space is unnecessary; however, | | | |
| IANA is responsible for managing part of the Experiment ID Name | | | |
| Space (see below). | | | |
| | | | |
| 4.3. FEC Type Name Space | | | |
| | | | |
| The range for FEC types is 0 - 255. | | | |
| | | | |
| Following the policies outlined in [IANA], FEC types in the range 0 - | | | |
| 127 are allocated through an IETF Consensus action, types in the | | | |
| range 128 - 191 are allocated as First Come First Served, and types | | | |
| in the range 192 - 255 are reserved for Private Use. | | | |
| | | | |
| 4.4. Status Code Name Space | | | |
| | | | |
| The range for Status Codes is 0x00000000 - 0x3FFFFFFF. | | | |
| | | | |
| Following the policies outlined in [IANA], Status Codes in the range | | | |
| 0x00000000 - 0x1FFFFFFF are allocated through an IETF Consensus | | | |
| action, codes in the range 0x20000000 - 0x3EFFFFFF are allocated as | | | |
| First Come First Served, and codes in the range 0x3F000000 - | | | |
| 0x3FFFFFFF are reserved for Private Use. | | | |
| | | | |
| 4.5. Experiment ID Name Space | | | |
| | | | |
| The range for Experiment Ids is 0x00000000 - 0xffffffff. | | | |
| | | | |
| Following the policies outlined in [IANA], Experiment Ids in the | | | |
| range 0x00000000 - 0xefffffff are allocated as First Come First | | | |
| Served and Experiment Ids in the range 0xf0000000 - 0xffffffff are | | | |
| reserved for Private Use. | | | |
| | | | |
| 5. Security Considerations | | | |
| | | | |
| This section identifies threats to which LDP may be vulnerable and | | | |
| discusses means by which those threats might be mitigated. | | | |
| | | | |
| 5.1. Spoofing | | | |
| | | | |
| There are two types of LDP communication that could be the target of | | | |
| a spoofing attack. | | | |
| | | | |
| 1. Discovery exchanges carried by UDP. | | | |
| | | | |
| LSRs indicate their willingness to establish and maintain LDP ses- | | | |
| sions by periodically sending Hello messages. Receipt of a Hello | | | |
| serves to create a new "Hello adjacency", if one does not already | | | |
| exist, or to refresh an existing one. Spoofing a Hello packet for | | | |
| an existing adjacency can cause the adjacency to time out and that | | | |
| can result in termination of the associated session. This can | | | |
| occur when the spoofed Hello specifies a small Hold Time, causing | | | |
| the receiver to expect Hellos within this interval, while the true | | | |
| neighbor continues sending Hellos at the lower, previously agreed | | | |
| to, frequency. | | | |
| | | | |
| LSRs directly connected at the link level exchange Basic Hello | | | |
| messages over the link. The threat of spoofed Basic Hellos can be | | | |
| reduced by: | | | |
| | | | |
| o Accepting Basic Hellos only on interfaces to which LSRs that | | | |
| can be trusted are directly connected. | | | |
| | | | |
| o Ignoring Basic Hellos not addressed to the All Routers on | | | |
| this Subnet multicast group. | | | |
| | | | |
| LSRs not directly connected at the link level may use Extended | | | |
| Hello messages to indicate willingness to establish an LDP ses- | | | |
| sion. An LSR can reduce the threat of spoofed Extended Hellos by | | | |
| filtering them and accepting only those originating at sources | | | |
| permitted by an access list. | | | |
| | | | |
| 2. Session communication carried by TCP. | | | |
| | | | |
| LDP specifies use of the TCP MD5 Signature Option to provide for | | | |
| the authenticity and integrity of session messages. | | | |
| | | | |
| [RFC2385] asserts that MD5 authentication is now considered by | | | |
| some to be too weak for this application. It also points out that | | | |
| a similar TCP option with a stronger hashing algorithm (it cites | | | |
| SHA-1 as an example) could be deployed. To our knowledge no such | | | |
| TCP option has been defined and deployed. However, we note that | | | |
| LDP can use whatever TCP message digest techniques are available, | | | |
| and when one stronger than MD5 is specified and implemented, | | | |
| upgrading LDP to use it would be relatively straightforward. | | | |
| | | | |
| 5.2. Privacy | | | |
| | | | |
| LDP provides no mechanism for protecting the privacy of label distri- | | | |
| bution. | | | |
| | | | |
| The security requirements of label distribution protocols are essen- | | | |
| tially identical to those of the protocols which distribute routing | | | |
| information. By providing a mechanism to ensure the authenticity and | | | |
| integrity of its messages LDP provides a level of security which is | | | |
| at least as good as, though no better than, that which can be pro- | | | |
| vided by the routing protocols themselves. The more general issue of | | | |
| whether privacy should be required for routing protocols is beyond | | | |
| the scope of this document. | | | |
| | | | |
| One might argue that label distribution requires privacy to address | | | |
| the threat of label spoofing. However, that privacy would not pro- | | | |
| tect against label spoofing attacks since data packets carry labels | | | |
| in the clear. Furthermore, label spoofing attacks can be made with- | | | |
| out knowledge of the FEC bound to a label. | | | |
| | | | |
| To avoid label spoofing attacks, it is necessary to ensure that | | | |
| labeled data packets are labeled by trusted LSRs and that the labels | | | |
| placed on the packets are properly learned by the labeling LSRs. | | | |
| | | | |
| 5.3. Denial of Service | | | |
| | | | |
| LDP provides two potential targets for denial of service (DoS) | | | |
| attacks: | | | |
| | | | |
| 1. Well known UDP Port for LDP Discovery | | | |
| | | | |
| An LSR administrator can address the threat of DoS attacks via | | | |
| Basic Hellos by ensuring that the LSR is directly connected only | | | |
| to peers which can be trusted to not initiate such an attack. | | | |
| Interfaces to peers interior to the administrator's domain should | | | |
| not represent a threat since interior peers are under the adminis- | | | |
| trator's control. Interfaces to peers exterior to the domain rep- | | | |
| resent a potential threat since exterior peers are not. An admin- | | | |
| istrator can reduce that threat by connecting the LSR only to | | | |
| exterior peers that can be trusted to not initiate a Basic Hello | | | |
| attack. | | | |
| | | | |
| DoS attacks via Extended Hellos are potentially a more serious | | | |
| threat. This threat can be addressed by filtering Extended Hellos | | | |
| using access lists that define addresses with which extended dis- | | | |
| covery is permitted. However, performing the filtering requires | | | |
| LSR resource. | | | |
| | | | |
| In an environment where a trusted MPLS cloud can be identified, | | | |
| LSRs at the edge of the cloud can be used to protect interior LSRs | | | |
| against DoS attacks via Extended Hellos by filtering out Extended | | | |
| Hellos originating outside of the trusted MPLS cloud, accepting | | | |
| only those originating at addresses permitted by access lists. | | | |
| This filtering protects LSRs in the interior of the cloud but con- | | | |
| sumes resources at the edges. | | | |
| | | | |
| 2. Well known TCP port for LDP Session Establishment | | | |
| | | | |
| Like other control plane protocols that use TCP, LDP may be the | | | |
| target of DoS attacks, such a SYN attacks. LDP is no more or less | | | |
| vulnerable to such attacks than other control plane protocols that | | | |
| use TCP. | | | |
| | | | |
| The threat of such attacks can be mitigated somewhat by the fol- | | | |
| lowing: | | | |
| | | | |
| o An LSR SHOULD avoid promiscuous TCP listens for LDP session | | | |
| establishment. It SHOULD use only listens that are specific | | | |
| to discovered peers. This enables it to drop attack packets | | | |
| early in their processing since they are less likely to | | | |
| match existing or in-progress connections. | | | |
| | | | |
| o The use of the MD5 option helps somewhat since it prevents a | | | |
| SYN from being accepted unless the MD5 segment checksum is | | | |
| valid. However, the receiver must compute the checksum | | | |
| before it can decide to discard an otherwise acceptable SYN | | | |
| segment. | | | |
| | | | |
| o The use of access list mechanisms applied at the boundary of | | | |
| the MPLS cloud in a manner similar to that suggested above | | | |
| for Extended Hellos can protect the interior against attacks | | | |
| originating from outside the cloud. | | | |
| | | | |
| 6. Areas for Future Study | | | |
| | | | |
| The following topics not addressed in this version of LDP are possi- | | | |
| ble areas for future study: | | | |
| | | | |
| - Section 2.16 of the MPLS architecture [RFC3031] requires that | | | |
| the initial label distribution protocol negotiation between | | | |
| peer LSRs enable each LSR to determine whether its peer is | | | |
| capable of popping the label stack. This version of LDP | | | |
| assumes that LSRs support label popping for all link types | | | |
| except ATM and Frame Relay. A future version may specify means | | | |
| to make this determination part of the session initiation nego- | | | |
| tiation. | | | |
| | | | |
| - LDP support for CoS (class of service) is not specified in this | | | |
| version. CoS support may be addressed in a future version. | | | |
| | | | |
| - LDP support for multicast is not specified in this version. | | | |
| Multicast support may be addressed in a future version. | | | |
| | | | |
| - LDP support for multipath label switching is not specified in | | | |
| this version. Multipath support may be addressed in a future | | | |
| version. | | | |
| | | | |
| - LDP support for signalling the maximum transmission unit is not | | | |
| specified in this version. It is discussed in the experimental | | | |
| document [LDP-MTU]. | | | |
| | | | |
| - The current specification does not address basic peer discovery | | | |
| on non-broadcast multi access (NBMA) media. The solution avail- | | | |
| able in the current specification is to use extended peer dis- | | | |
| covery in such setups. The issue of defining a mechanism seman- | | | |
| tically similar to basic discovery (1 hop limit, bind the hello | | | |
| adjacency to an interface) that uses a preconfigured neighbor | | | |
| addresses, is left for further study. | | | |
| | | | |
| - The current specification does not support shutting down an | | | |
| adjacency. The motivation for doing it, and the mechanisms for | | | |
| achieving it are left for further study. | | | |
| | | | |
| - The current specification does not include a method for secur- | | | |
| ing Hello messages, to detect spoofing of Hellos. The scenarios | | | |
| where this is necessary, as well as the mechanism for achieving | | | |
| it are left for future study. | | | |
| | | | |
| - The current specification does not have the ability to detect a | | | |
| stateless fast control plane restart. The method for achieving | | | |
| this, possibly through an "incarnation/instance" number carried | | | |
| in the Hello message is left for future study. | | | |
| | | | |
| - The current specification does not support an "end of LIB" mes- | | | |
| sage, analogous to BGP's end of RIB message which an LDP LSR | | | |
| (operating in DU mode) would use following session establish- | | | |
| ment. The discussion on the need for such a mechanism and its | | | |
| implementation are left for future study. | | | |
| | | | |
| - The current specification does not deal with situations where | | | |
| different LSRs advertise the same address. Such situations | | | |
| typically occur as the result of configuration errors, and the | | | |
| goal in this case is to provide the LSRs advertising the same | | | |
| address with enough information to enable operators to take | | | |
| corrective action. The specification of this mechanism is left | | | |
| for a separate document. | | | |
| | | | |
| 7. Changes from RFC3036 | | | |
| | | | |
| Here is a list of changes from RFC3036 | | | |
| 1. Removed the Host Address FEC and references to it, since it is | | | |
| not used by any implementation. | | | |
| 2. Split the reference list into normative and non-normative ref- | | | |
| erences | | | |
| 3. Removed "MPLS using ATM VP Switching" from the list of norma- | | | |
| tive references, and references to it. | | | |
| 4. Removed reference to RFC 1700 and replaced it with a link to | | | |
| http://www.iana.org/assignments/address-family-numbers. | | | |
| 5. Removed reference to RFC 1771 and replaced it with a reference | | | |
| to RFC 4271. | | | |
| 6. Clarified the use of the F bit. | | | |
| 7. Added option to allow split horizon when doing ordered control. | | | |
| 8. Clarified the processing of messages with the U-bit set during | | | |
| the session initialization procedures | | | |
| 9. Clarified the processing of the E-bit during session initial- | | | |
| ization procedures. | | | |
| 10. Added text explaining that the shutdown message in the state | | | |
| transition diagram is implemented as as a notification message | | | |
| with a status TLV indicating a fatal error. | | | |
| 11. Added case for TLV length too short in the specification for | | | |
| handling malformed TLVs. | | | |
| 12. Explained the security threat posed by hello spoofing. | | | |
| 13. Added reference to 4271 and 4278 and text for standards matu- | | | |
| rity variance with regards to the MD5 option. | | | |
| 14. Added text from 3031 explaining the handling of implicit NULL | | | |
| label. | | | |
| | | | |
| 15. Included the encoding of DLCIs to remove normative reference to | | | |
| 3034. | | | |
| 16. Moved references to 3031, 3032 and 3034 to informative. | | | |
| 17. In the section describing handling of unknown TLV, removed ref- | | | |
| erence to inexistent section (errata in original document). | | | |
| 18. Added text clarifying how to achieve interoperability when | | | |
| sending vendor-private TLVs and messages. | | | |
| 19. In the "receive label request" procedures, if a loop is | | | |
| detected, changed the procedure to send a notification before | | | |
| aborting the rest of the processing. | | | |
| 20. In "receive label release" procedures, clarified the behavior | | | |
| for merge-capable LSRs. | | | |
| 21. In "receive label release" procedures, clarified the behavior | | | |
| for receipt of an unknown FEC. | | | |
| 22. In note 4 of "Detect Change in FEC Next Hop", modified the text | | | |
| to reference the correct set of conditions for sending a label | | | |
| request procedure (typo in the original document). | | | |
| 23. In the procedures for "LSR decides to no longer label switch a | | | |
| FEC", clarified the fact that the label must not be reused | | | |
| until a label release is received. | | | |
| 24. In the routine "Prepare_Label_Mapping_Attributes" added a note | | | |
| regarding the treatment of unknown TLVs according to their U | | | |
| and F bits. | | | |
| 25. In the address message processing procedures, clarified the | | | |
| behavior for the case where an LSR receives re-advertisement of | | | |
| an address previously advertised it, or withdrawal of an | | | |
| address from an LSR that has not previously advertised that | | | |
| address. | | | |
| 26. In the routine "Receive Label Mapping" clarified the meaning of | | | |
| PrevAdvLabel when no label advertisement message has been sent | | | |
| previously. | | | |
| 27. In the "Receive Label Mapping" procedures, if a loop is | | | |
| detected, modified the procedure to send a notification before | | | |
| aborting the rest of the processing. | | | |
| 28. In the "Receive Label Mapping" procedures, corrected step | | | |
| LMp.10 to handle label mapping messages for additional (non- | | | |
| merged) LSPs for the FEC. | | | |
| 29. In the "Receive Label Mapping" procedures, clarified behavior | | | |
| when receiving a duplicate label for the same FEC. | | | |
| 30. In the routine "Receive Label Abort Request" clarified the | | | |
| behavior for non-merging LSRs. | | | |
| 31. Added the following items to the section discussing areas for | | | |
| future study: | | | |
| o extensions for communicating the maximum transmission unit | | | |
| o basic peer discovery on NBMA media | | | |
| o option of shutting down an adjacency | | | |
| o mechanisms for securing Hello messages | | | |
| o detection of a stateless fast control plane restart | | | |
| o support of "end of LIB" message | | | |
| o mechanisms for dealing with the case where different LSRs | | | |
| advertise the same address. | | | |
| | | | |
| 8. Acknowledgments | | | |
| | | | |
| This document was originally published as RFC 3036 in January 2001. | | | |
| It was produced by the MPLS working of the IETF and was jointly | | | |
| authored by Loa Andersson, Paul Doolan, Nancy Feldman, Andre Fredette | | | |
| and Bob Thomas. | | | |
| | | | |
| The ideas and text in RFC3036 were collected from a number of | | | |
| sources. We would like to thank Rick Boivie, Ross Callon, Alex | | | |
| Conta, Eric Gray, Yoshihiro Ohba, Eric Rosen, Bernard Suter, Yakov | | | |
| Rekhter, and Arun Viswanathan for their input for RFC3036. | | | |
| | | | |
| The editors would like to thank Eric Gray, David Black and Sam Hart- | | | |
| man for their input to and review of the current document. | | | |
| | | | |
| In addition, the editors would like to thank the members of the mpls | | | |
| working group for their ideas and the support they have given to this | | | |
| document, and in particular to Eric Rosen, Luca Martini, Markus Jork, | | | |
| Mark Duffy, Vach Kompella, Kishore Tiruveedhula. Rama Ramakrishnan, | | | |
| Nick Weeds, Adrian Farrel and Andy Malis. | | | |
| | | | |
| 9. References | | | |
| | | | |
| 9.1. Normative references | | | |
| | | | |
| [IANA] Narten, T. and H. Alvestrand, "Guidelines for Writing an | | | |
| IANA Considerations Section in RFCs", BCP 26, RFC 2434, | | | |
| October 1998. | | | |
| | | | |
| [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm," RFC 1321, | | | |
| April 1992. | | | |
| | | | |
| [RFC1483] Heinanen, J., "Multiprotocol Encapsulation over ATM Adap- | | | |
| tation Layer 5", RFC 1483, July 1993. | | | |
| | | | |
| [ASSIGNED_AF] http://www.iana.org/assignments/address-family-numbers | | | |
| | | | |
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | | | |
| Requirement Levels", BCP 14, RFC 2119, March 1997. | | | |
| | | | |
| [RFC2385] Heffernan, A., "Protection of BGP Sessions via the TCP | | | |
| MD5 Signature Option", RFC 2385, August 1998. | | | |
| | | | |
| [RFC3035] Davie, B., Lawrence, J., McCloghrie, K., Rekhter, Y., | | | |
| Rosen, E., Swallow, G. and P. Doolan, "MPLS using LDP and | | | |
| ATM VC Switching", RFC 3035, January 2001. | | | |
| | | | |
| [RFC3037] Thomas, B. and E. Gray, "LDP Applicability", RFC 3037, | | | |
| January 2001. | | | |
| | | | |
| 9.2. Non-normative references | | | |
| | | | |
| [CRLDP] L. Andersson, A. Fredette, B. Jamoussi, R. Callon, P. | | | |
| Doolan, N. Feldman, E. Gray, J. Halpern, J. Heinanen T. | | | |
| E. Kilty, A. G. Malis, M. Girish, K. Sundell, P. Vaana- | | | |
| nen, T. Worster, L. Wu, R. Dantu, "Constraint-Based LSP | | | |
| Setup using LDP", RFC 3212, January 2002 | | | |
| | | | |
| [DIFFSERV] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z. | | | |
| and W. Weiss, "An Architecture for Differentiated Ser- | | | |
| vices", RFC 2475, December 1998. | | | |
| | | | |
| [LDP-MTU] Black, B. and Kompella, K. "Maximum Transmission Unit | | | |
| Signalling Extensions for the Label Distribution Proto- | | | |
| col", draft-ietf-mpls-ldp-mtu-extensions-03.txt, April | | | |
| 2004. | | | |
| | | | |
| [RFC2205] Braden, R., Zhang, L., Berson, S., Herzog, S. and S. | | | |
| | | | |
| Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 | | | |
| Functional Specification", RFC 2205, September 1997. | | | |
| | | | |
| [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998. | | | |
| | | | |
| [RFC2702] Awduche, D., Malcolm, J., Agogbua, J., O'Dell, M. and J. | | | |
| McManus, "Requirements for Traffic Engineering over | | | |
| MPLS", RFC 2702, September 1999. | | | |
| | | | |
| [RFC3031] Rosen, E., Viswanathan, A. and R. Callon, "Multiprotocol | | | |
| Label Switching Architecture", RFC 3031, January 2001. | | | |
| | | | |
| [RFC3032] Rosen, E., Rekhter, Y., Tappan, D., Farinacci, D., | | | |
| Fedorkow, G., Li, T. and A. Conta, "MPLS Label Stack | | | |
| Encoding", RFC 3032, January 2001. | | | |
| | | | |
| [RFC3034] Conta, A., Doolan, P. and A. Malis, "Use of Label Switch- | | | |
| ing on Frame Relay Networks Specification", RFC 3034, | | | |
| January 2001. | | | |
| | | | |
| [RFC4271] Rekhter, Y., Li, T. and Hares, S. "A Border Gateway Pro- | | | |
| tocol 4 (BGP-4)", RFC 4271, January 2006. | | | |
| | | | |
| [RFC4278] Bellovin, S., Zinin, A., "Standards Maturity Variance | | | |
| Regarding the TCP MD5 Signature Option (RFC 2385) and the | | | |
| BGP-4 Specification", RFC 4278, January 2006. | | | |
| | | | |
| 10. Intellectual Property Statement | | | |
| | | | |
| The IETF takes no position regarding 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 the extent to which any license under such rights | | | |
| might or might not be available; nor does it represent that it has | | | |
| made any independent effort to identify any such rights. Information | | | |
| on the procedures with respect to rights in RFC documents can be | | | |
| found in BCP 78 and BCP 79. | | | |
| | | | |
| Copies of IPR disclosures made to the IETF Secretariat and any assur- | | | |
| ances of licenses to be made available, or the result of an attempt | | | |
| made to obtain a general license or permission for the use of such | | | |
| proprietary rights by implementers or users of this specification can | | | |
| be obtained from the IETF on-line 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 that may be required to implement | | | |
| this standard. Please address the information to the IETF at ietf- | | | |
| ipr@ietf.org. | | | |
| | | | |
| 11. Editors' Addresses | | | |
| | | | |
| Loa Andersson | | | |
| Acreo AB | | | |
| Isafjordsgatan 22 | | | |
| Kista, Sweden | | | |
| email: loa.andersson@acreo.se | | | |
| loa@pi.se | | | |
| | | | |
| Ina Minei | | | |
| Juniper Networks | | | |
| 1194 N. Mathilda Ave. | | | |
| Sunnyvale, CA 94089 | | | |
| email: ina@juniper.net | | | |
| | | | |
| Bob Thomas | | | |
| Cisco Systems, Inc. | | | |
| 1414 Massachusetts Ave | | | |
| Boxborough, MA 01719 | | | |
| email: rhthomas@cisco.com | | | |
| | | | |
| Appendix A. LDP Label Distribution Procedures | | | |
| | | | |
| This section specifies label distribution behavior in terms of LSR | | | |
| response to the following events: | | | |
| | | | |
| - Receive Label Request Message; | | | |
| - Receive Label Mapping Message; | | | |
| - Receive Label Abort Request Message; | | | |
| - Receive Label Release Message; | | | |
| - Receive Label Withdraw Message; | | | |
| - Recognize new FEC; | | | |
| - Detect change in FEC next hop; | | | |
| - Receive Notification Message / Label Request Aborted; | | | |
| - Receive Notification Message / No Label Resources; | | | |
| - Receive Notification Message / No Route; | | | |
| - Receive Notification Message / Loop Detected; | | | |
| - Receive Notification Message / Label Resources Available; | | | |
| - Detect local label resources have become available; | | | |
| - LSR decides to no longer label switch a FEC; | | | |
| - Timeout of deferred label request. | | | |
| | | | |
| The specification of LSR behavior in response to an event has three | | | |
| parts: | | | |
| | | | |
| 1. Summary. Prose that describes LSR response to the event in | | | |
| overview. | | | |
| | | | |
| 2. Context. A list of elements referred to by the Algorithm part | | | |
| of the specification. (See 3.) | | | |
| | | | |
| 3. Algorithm. An algorithm for LSR response to the event. | | | |
| | | | |
| The Summary may omit details of the LSR response, such as bookkeeping | | | |
| action or behavior dependent on the LSR label advertisement mode, | | | |
| control mode, or label retention mode in use. The intent is that the | | | |
| Algorithm fully and unambiguously specify the LSR response. | | | |
| | | | |
| The algorithms in this section use procedures defined in the MPLS | | | |
| architecture specification [RFC3031] for hop-by-hop routed traffic. | | | |
| These procedures are: | | | |
| | | | |
| - Label Distribution procedure, which is performed by a down- | | | |
| stream LSR to determine when to distribute a label for a FEC to | | | |
| LDP peers. The architecture defines four Label Distribution | | | |
| procedures: | | | |
| | | | |
| . Downstream Unsolicited Independent Control, called | | | |
| PushUnconditional in [RFC3031]. | | | |
| | | | |
| . Downstream Unsolicited Ordered Control, called | | | |
| PushConditional in [RFC3031]. | | | |
| | | | |
| . Downstream On Demand Independent Control, called | | | |
| PulledUnconditional in [RFC3031]. | | | |
| | | | |
| . Downstream On Demand Ordered Control, called | | | |
| PulledConditional in [RFC3031]. | | | |
| | | | |
| - Label Withdrawal procedure, which is performed by a downstream | | | |
| LSR to determine when to withdraw a FEC label mapping previ- | | | |
| ously distributed to LDP peers. The architecture defines a | | | |
| single Label Withdrawal procedure. Whenever an LSR breaks the | | | |
| binding between a label and a FEC, it MUST withdraw the FEC | | | |
| label mapping from all LDP peers to which it has previously | | | |
| sent the mapping. | | | |
| | | | |
| - Label Request procedure, which is performed by an upstream LSR | | | |
| to determine when to explicitly request that a downstream LSR | | | |
| bind a label to a FEC and send it the corresponding label map- | | | |
| ping. The architecture defines three Label Request procedures: | | | |
| | | | |
| . Request Never. The LSR never requests a label. | | | |
| | | | |
| . Request When Needed. The LSR requests a label whenever | | | |
| it needs one. | | | |
| | | | |
| . Request On Request. This procedure is used by | | | |
| non-label merging LSRs. The LSR requests a label | | | |
| when it receives a request for one, in addition | | | |
| to whenever it needs one. | | | |
| | | | |
| - Label Release procedure, which is performed by an upstream LSR | | | |
| to determine when to release a previously received label map- | | | |
| ping for a FEC. The architecture defines two Label Release | | | |
| procedures: | | | |
| | | | |
| . Conservative label retention, called Release On Change in | | | |
| [RFC3031]. | | | |
| | | | |
| . Liberal label retention, called No Release On Change in | | | |
| [RFC3031]. | | | |
| | | | |
| - Label Use procedure, which is performed by an LSR to determine | | | |
| when to start using a FEC label for forwarding/switching. The | | | |
| architecture defines three Label Use procedures: | | | |
| | | | |
| . Use Immediate. The LSR immediately uses a label received | | | |
| from a FEC next hop for forwarding/switching. | | | |
| | | | |
| . Use If Loop Free. The LSR uses a FEC label received from a | | | |
| FEC next hop for forwarding/switching only if it has | | | |
| determined that by doing so it will not cause a forwarding | | | |
| loop. | | | |
| | | | |
| . Use If Loop Not Detected. This procedure is the same as Use | | | |
| Immediate unless the LSR has detected a loop in the FEC LSP. | | | |
| Use of the FEC label for forwarding/switching will continue | | | |
| until the next hop for the FEC changes or the loop is no | | | |
| longer detected. | | | |
| | | | |
| This version of LDP does not include a loop prevention mecha- | | | |
| nism; therefore, the procedures below do not make use of the | | | |
| Use If Loop Free procedure. | | | |
| | | | |
| - Label No Route procedure (called Label Not Available procedure | | | |
| in [RFC3031]), which is performed by an upstream LSR to deter- | | | |
| mine how to respond to a No Route notification from a down- | | | |
| stream LSR in response to a request for a FEC label mapping. | | | |
| The architecture specification defines two Label No Route pro- | | | |
| cedures: | | | |
| | | | |
| . Request Retry. The LSR should issue the label request at a | | | |
| later time. | | | |
| | | | |
| . No Request Retry. The LSR should assume the downstream LSR | | | |
| will provide a label mapping when the downstream LSR has a | | | |
| next hop and it should not reissue the request. | | | |
| | | | |
| A.1. Handling Label Distribution Events | | | |
| | | | |
| This section defines LDP label distribution procedures by specifying | | | |
| an algorithm for each label distribution event. The requirement on | | | |
| an LDP implementation is that its event handling must have the effect | | | |
| specified by the algorithms. That is, an implementation need not | | | |
| follow exactly the steps specified by the algorithms as long as the | | | |
| effect is identical. | | | |
| | | | |
| The algorithms for handling label distribution events share common | | | |
| actions. The specifications below package these common actions into | | | |
| procedure units. Specifications for these common procedures are in | | | |
| their own section "Common Label Distribution Procedures", which fol- | | | |
| lows this. | | | |
| | | | |
| An implementation would use data structures to store information | | | |
| about protocol activity. This appendix specifies the information to | | | |
| be stored in sufficient detail to describe the algorithms, and | | | |
| assumes the ability to retrieve the information as needed. It does | | | |
| not specify the details of the data structures. | | | |
| | | | |
| A.1.1. Receive Label Request | | | |
| | | | |
| Summary: | | | |
| | | | |
| The response by an LSR to receipt of a FEC label request from an | | | |
| LDP peer may involve one or more of the following actions: | | | |
| | | | |
| - Transmission of a notification message to the requesting LSR | | | |
| indicating why a label mapping for the FEC cannot be provided; | | | |
| | | | |
| - Transmission of a FEC label mapping to the requesting LSR; | | | |
| | | | |
| - Transmission of a FEC label request to the FEC next hop; | | | |
| | | | |
| - Installation of labels for forwarding/switching use by the LSR. | | | |
| | | | |
| Context: | | | |
| | | | |
| - LSR. The LSR handling the event. | | | |
| | | | |
| - MsgSource. The LDP peer that sent the message. | | | |
| | | | |
| - FEC. The FEC specified in the message. | | | |
| | | | |
| - RAttributes. Attributes received with the message. E.g., Hop | | | |
| Count, Path Vector. | | | |
| | | | |
| - SAttributes. Attributes to be included in Label Request mes- | | | |
| sage, if any, propagated to FEC Next Hop. | | | |
| | | | |
| - StoredHopCount. The hop count, if any, previously recorded for | | | |
| the FEC. | | | |
| | | | |
| Algorithm: | | | |
| | | | |
| LRq.1 Execute procedure Check_Received_Attributes (MsgSource, | | | |
| LabelRequest, RAttributes). | | | |
| If Loop Detected, goto LRq.4. | | | |
| | | | |
| LRq.2 Is there a Next Hop for FEC? | | | |
| If not, goto LRq.5. | | | |
| | | | |
| LRq.3 Is MsgSource the Next Hop? | | | |
| Ifnot, goto LRq.6. | | | |
| | | | |
| LRq.4 Execute procedure Send_Notification (MsgSource, Loop | | | |
| Detected). | | | |
| Goto LRq.13 | | | |
| | | | |
| LRq.5 Execute procedure Send_Notification (MsgSource, No Route). | | | |
| Goto LRq.13. | | | |
| | | | |
| LRq.6 Has LSR previously received a label request for FEC from | | | |
| MsgSource? | | | |
| If not, goto LRq.8. (See Note 1.) | | | |
| | | | |
| LRq.7 Is the label request a duplicate request? | | | |
| If so, Goto LRq.13. (See Note 2.) | | | |
| | | | |
| LRq.8 Record label request for FEC received from MsgSource and | | | |
| mark it pending. | | | |
| | | | |
| LRq.9 Perform LSR Label Distribution procedure: | | | |
| | | | |
| For Downstream Unsolicited Independent Control OR | | | |
| For Downstream On Demand Independent Control | | | |
| | | | |
| 1. Has LSR previously received and retained a label map- | | | |
| ping for FEC from Next Hop?. | | | |
| Is so, set Propagating to IsPropagating. | | | |
| If not, set Propagating to NotPropagating. | | | |
| | | | |
| 2. Execute procedure Prepare_Label_Map- | | | |
| ping_Attributes(MsgSource, FEC, RAttributes, SAt- | | | |
| tributes, Propagating, StoredHopCount). | | | |
| | | | |
| 3. Execute procedure Send_Label (MsgSource, FEC, SAt- | | | |
| tributes). | | | |
| | | | |
| 4. Is LSR egress for FEC? OR | | | |
| Has LSR previously received and retained a label map- | | | |
| ping for FEC from Next Hop? | | | |
| If so, goto LRq.11. | | | |
| If not, goto LRq.10. | | | |
| | | | |
| For Downstream Unsolicited Ordered Control OR | | | |
| For Downstream On Demand Ordered Control | | | |
| | | | |
| 1. Is LSR egress for FEC? OR | | | |
| Has LSR previously received and retained a label map- | | | |
| ping for FEC from Next Hop? (See Note 3.) | | | |
| If not, goto LRq.10. | | | |
| | | | |
| 2. Execute procedure Prepare_Label_Map- | | | |
| ping_Attributes(MsgSource, FEC, RAttributes, SAt- | | | |
| tributes, IsPropagating, StoredHopCount) | | | |
| | | | |
| 3. Execute procedure Send_Label (MsgSource, FEC, SAt- | | | |
| tributes). | | | |
| Goto LRq.11. | | | |
| | | | |
| LRq.10 Perform LSR Label Request procedure: | | | |
| | | | |
| For Request Never | | | |
| | | | |
| 1. Goto LRq.13. | | | |
| | | | |
| For Request When Needed OR | | | |
| For Request On Request | | | |
| | | | |
| 1. Execute procedure Prepare_Label_Request_Attributes | | | |
| (Next Hop, FEC, RAttributes, SAttributes); | | | |
| | | | |
| 2. Execute procedure Send_Label_Request (Next Hop, FEC, | | | |
| SAttributes). | | | |
| Goto LRq.13. | | | |
| | | | |
| LRq.11 Has LSR successfully sent a label for FEC to MsgSource? | | | |
| If not, goto LRq.13. (See Note 4.) | | | |
| | | | |
| LRq.12 Perform LSR Label Use procedure. | | | |
| | | | |
| For Use Immediate OR | | | |
| For Use If Loop Not Detected | | | |
| 1. Install label sent to MsgSource and label from Next | | | |
| Hop (if LSR is not egress) for forwarding/switching | | | |
| use. | | | |
| | | | |
| LRq.13 DONE | | | |
| | | | |
| Notes: | | | |
| | | | |
| 1. In the case where MsgSource is a non-label merging LSR it will | | | |
| send a label request for each upstream LDP peer that has | | | |
| requested a label for FEC from it. The LSR must be able to | | | |
| distinguish such requests from a non-label merging MsgSource | | | |
| from duplicate label requests. | | | |
| | | | |
| The LSR uses the message ID of received Label Request messages | | | |
| to detect duplicate requests. This means that an LSR (the | | | |
| upstream peer) may not reuse the message ID used for a Label | | | |
| Request until the Label Request transaction has completed. | | | |
| | | | |
| 2. When an LSR sends a label request to a peer it records that the | | | |
| request has been sent and marks it as outstanding. As long as | | | |
| the request is marked outstanding the LSR SHOULD NOT send | | | |
| another request for the same label to the peer. Such a second | | | |
| request would be a duplicate. The Send_Label_Request procedure | | | |
| described below obeys this rule. | | | |
| | | | |
| A duplicate label request is considered a protocol error and | | | |
| SHOULD be dropped by the receiving LSR (perhaps with a suitable | | | |
| notification returned to MsgSource). | | | |
| | | | |
| 3. If LSR is not merge-capable, this test will fail. | | | |
| | | | |
| 4. The Send_Label procedure may fail due to lack of label | | | |
| resources, in which case the LSR SHOULD NOT perform the Label | | | |
| Use procedure. | | | |
| | | | |
| A.1.2. Receive Label Mapping | | | |
| | | | |
| Summary: | | | |
| | | | |
| The response by an LSR to receipt of a FEC label mapping from an | | | |
| LDP peer may involve one or more of the following actions: | | | |
| | | | |
| - Transmission of a label release message for the FEC label to | | | |
| the LDP peer; | | | |
| | | | |
| - Transmission of label mapping messages for the FEC to one or | | | |
| more LDP peers, | | | |
| - Installation of the newly learned label for forwarding/switch- | | | |
| ing use by the LSR. | | | |
| | | | |
| Context: | | | |
| | | | |
| - LSR. The LSR handling the event. | | | |
| | | | |
| - MsgSource. The LDP peer that sent the message. | | | |
| | | | |
| - FEC. The FEC specified in the message. | | | |
| | | | |
| - Label. The label specified in the message. | | | |
| | | | |
| - PrevAdvLabel. The label for FEC, if any, previously advertised | | | |
| to an upstream peer. Assuming no label was previously adver- | | | |
| tised, this is the same label as the one in the Label Mapping | | | |
| Message being processed. | | | |
| | | | |
| - StoredHopCount. The hop count previously recorded for the FEC. | | | |
| | | | |
| - RAttributes. Attributes received with the message. E.g., Hop | | | |
| Count, Path Vector. | | | |
| | | | |
| - SAttributes to be included in Label Mapping message, if any, | | | |
| propagated to upstream peers. | | | |
| | | | |
| Algorithm: | | | |
| | | | |
| LMp.1 Does the received label mapping match an outstanding | | | |
| label request for FEC previously sent to MsgSource. | | | |
| If not, goto LMp.3. | | | |
| | | | |
| LMp.2 Delete record of outstanding FEC label request. | | | |
| | | | |
| LMp.3 Execute procedure Check_Received_Attributes (MsgSource, | | | |
| LabelMapping, RAttributes). | | | |
| If No Loop Detected, goto LMp.9. | | | |
| | | | |
| LMp.4 Does the LSR have a previously received label mapping for | | | |
| FEC from MsgSource? (See Note 1.) | | | |
| If not, goto LMp.8. |