diff options
Diffstat (limited to 'doc/rfc/rfc4379.txt')
-rw-r--r-- | doc/rfc/rfc4379.txt | 2803 |
1 files changed, 2803 insertions, 0 deletions
diff --git a/doc/rfc/rfc4379.txt b/doc/rfc/rfc4379.txt new file mode 100644 index 0000000..812398f --- /dev/null +++ b/doc/rfc/rfc4379.txt @@ -0,0 +1,2803 @@ + + + + + + +Network Working Group K. Kompella +Request for Comments: 4379 Juniper Networks, Inc. +Updates: 1122 G. Swallow +Category: Standards Track Cisco Systems, Inc. + February 2006 + + + Detecting Multi-Protocol Label Switched (MPLS) Data Plane Failures + +Status of This Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2006). + +Abstract + + This document describes a simple and efficient mechanism that can be + used to detect data plane failures in Multi-Protocol Label Switching + (MPLS) Label Switched Paths (LSPs). There are two parts to this + document: information carried in an MPLS "echo request" and "echo + reply" for the purposes of fault detection and isolation, and + mechanisms for reliably sending the echo reply. + +Table of Contents + + 1. Introduction ....................................................2 + 1.1. Conventions ................................................3 + 1.2. Structure of This Document .................................3 + 1.3. Contributors ...............................................3 + 2. Motivation ......................................................4 + 2.1. Use of Address Range 127/8 .................................4 + 3. Packet Format ...................................................6 + 3.1. Return Codes ..............................................10 + 3.2. Target FEC Stack ..........................................11 + 3.2.1. LDP IPv4 Prefix ....................................12 + 3.2.2. LDP IPv6 Prefix ....................................13 + 3.2.3. RSVP IPv4 LSP ......................................13 + 3.2.4. RSVP IPv6 LSP ......................................14 + 3.2.5. VPN IPv4 Prefix ....................................14 + 3.2.6. VPN IPv6 Prefix ....................................15 + 3.2.7. L2 VPN Endpoint ....................................16 + + + +Kompella & Swallow Standards Track [Page 1] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 3.2.8. FEC 128 Pseudowire (Deprecated) ....................16 + 3.2.9. FEC 128 Pseudowire (Current) .......................17 + 3.2.10. FEC 129 Pseudowire ................................18 + 3.2.11. BGP Labeled IPv4 Prefix ...........................19 + 3.2.12. BGP Labeled IPv6 Prefix ...........................20 + 3.2.13. Generic IPv4 Prefix ...............................20 + 3.2.14. Generic IPv6 Prefix ...............................21 + 3.2.15. Nil FEC ...........................................21 + 3.3. Downstream Mapping ........................................22 + 3.3.1. Multipath Information Encoding .....................26 + 3.3.2. Downstream Router and Interface ....................28 + 3.4. Pad TLV ...................................................29 + 3.5. Vendor Enterprise Number ..................................29 + 3.6. Interface and Label Stack .................................29 + 3.7. Errored TLVs ..............................................31 + 3.8. Reply TOS Byte TLV ........................................31 + 4. Theory of Operation ............................................32 + 4.1. Dealing with Equal-Cost Multi-Path (ECMP) .................32 + 4.2. Testing LSPs That Are Used to Carry MPLS Payloads .........33 + 4.3. Sending an MPLS Echo Request ..............................33 + 4.4. Receiving an MPLS Echo Request ............................34 + 4.4.1. FEC Validation .....................................40 + 4.5. Sending an MPLS Echo Reply ................................41 + 4.6. Receiving an MPLS Echo Reply ..............................42 + 4.7. Issue with VPN IPv4 and IPv6 Prefixes .....................42 + 4.8. Non-compliant Routers .....................................43 + 5. References .....................................................43 + 5.1. Normative References ......................................43 + 5.2. Informative References ....................................44 + 6. Security Considerations ........................................44 + 7. IANA Considerations ............................................46 + 7.1. Message Types, Reply Modes, Return Codes ..................46 + 7.2. TLVs ......................................................47 + 8. Acknowledgements ...............................................48 + +1. Introduction + + This document describes a simple and efficient mechanism that can be + used to detect data plane failures in MPLS Label Switched Paths + (LSPs). There are two parts to this document: information carried in + an MPLS "echo request" and "echo reply", and mechanisms for + transporting the echo reply. The first part aims at providing enough + information to check correct operation of the data plane, as well as + a mechanism to verify the data plane against the control plane, and + thereby localize faults. The second part suggests two methods of + reliable reply channels for the echo request message for more robust + fault isolation. + + + + +Kompella & Swallow Standards Track [Page 2] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + An important consideration in this design is that MPLS echo requests + follow the same data path that normal MPLS packets would traverse. + MPLS echo requests are meant primarily to validate the data plane, + and secondarily to verify the data plane against the control plane. + Mechanisms to check the control plane are valuable, but are not + covered in this document. + + This document makes special use of the address range 127/8. This is + an exception to the behavior defined in RFC 1122 [RFC1122] and + updates that RFC. The motivation for this change and the details of + this exceptional use are discussed in section 2.1 below. + +1.1. Conventions + + 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 RFC 2119 [KEYWORDS]. + + The term "Must Be Zero" (MBZ) is used in object descriptions for + reserved fields. These fields MUST be set to zero when sent and + ignored on receipt. + + Terminology pertaining to L2 and L3 Virtual Private Networks (VPNs) + is defined in [RFC4026]. + + Since this document refers to the MPLS Time to Live (TTL) far more + frequently than the IP TTL, the authors have chosen the convention of + using the unqualified "TTL" to mean "MPLS TTL" and using "IP TTL" for + the TTL value in the IP header. + +1.2. Structure of This Document + + The body of this memo contains four main parts: motivation, MPLS echo + request/reply packet format, LSP ping operation, and a reliable + return path. It is suggested that first-time readers skip the actual + packet formats and read the Theory of Operation first; the document + is structured the way it is to avoid forward references. + +1.3. Contributors + + The following made vital contributions to all aspects of this + document, and much of the material came out of debate and discussion + among this group. + + Ronald P. Bonica, Juniper Networks, Inc. + Dave Cooper, Global Crossing + Ping Pan, Hammerhead Systems + + + + +Kompella & Swallow Standards Track [Page 3] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Nischal Sheth, Juniper Networks, Inc. + Sanjay Wadhwa, Juniper Networks, Inc. + +2. Motivation + + When an LSP fails to deliver user traffic, the failure cannot always + be detected by the MPLS control plane. There is a need to provide a + tool that would enable users to detect such traffic "black holes" or + misrouting within a reasonable period of time, and a mechanism to + isolate faults. + + In this document, we describe a mechanism that accomplishes these + goals. This mechanism is modeled after the ping/traceroute paradigm: + ping (ICMP echo request [ICMP]) is used for connectivity checks, and + traceroute is used for hop-by-hop fault localization as well as path + tracing. This document specifies a "ping" mode and a "traceroute" + mode for testing MPLS LSPs. + + The basic idea is to verify that packets that belong to a particular + Forwarding Equivalence Class (FEC) actually end their MPLS path on a + Label Switching Router (LSR) that is an egress for that FEC. This + document proposes that this test be carried out by sending a packet + (called an "MPLS echo request") along the same data path as other + packets belonging to this FEC. An MPLS echo request also carries + information about the FEC whose MPLS path is being verified. This + echo request is forwarded just like any other packet belonging to + that FEC. In "ping" mode (basic connectivity check), the packet + should reach the end of the path, at which point it is sent to the + control plane of the egress LSR, which then verifies whether it is + indeed an egress for the FEC. In "traceroute" mode (fault + isolation), the packet is sent to the control plane of each transit + LSR, which performs various checks that it is indeed a transit LSR + for this path; this LSR also returns further information that helps + check the control plane against the data plane, i.e., that forwarding + matches what the routing protocols determined as the path. + + One way these tools can be used is to periodically ping an FEC to + ensure connectivity. If the ping fails, one can then initiate a + traceroute to determine where the fault lies. One can also + periodically traceroute FECs to verify that forwarding matches the + control plane; however, this places a greater burden on transit LSRs + and thus should be used with caution. + +2.1. Use of Address Range 127/8 + + As described above, LSP ping is intended as a diagnostic tool. It is + intended to enable providers of an MPLS-based service to isolate + network faults. In particular, LSP ping needs to diagnose situations + + + +Kompella & Swallow Standards Track [Page 4] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + where the control and data planes are out of sync. It performs this + by routing an MPLS echo request packet based solely on its label + stack. That is, the IP destination address is never used in a + forwarding decision. In fact, the sender of an MPLS echo request + packet may not know, a priori, the address of the router at the end + of the LSP. + + Providers of MPLS-based services also need the ability to trace all + of the possible paths that an LSP may take. Since most MPLS services + are based on IP unicast forwarding, these paths are subject to + equal-cost multi-path (ECMP) load sharing. + + This leads to the following requirements: + + 1. Although the LSP in question may be broken in unknown ways, the + likelihood of a diagnostic packet being delivered to a user of an + MPLS service MUST be held to an absolute minimum. + + 2. If an LSP is broken in such a way that it prematurely terminates, + the diagnostic packet MUST NOT be IP forwarded. + + 3. A means of varying the diagnostic packets such that they exercise + all ECMP paths is thus REQUIRED. + + Clearly, using general unicast addresses satisfies neither of the + first two requirements. A number of other options for addresses were + considered, including a portion of the private address space (as + determined by the network operator) and the newly designated IPv4 + link local addresses. Use of the private address space was deemed + ineffective since the leading MPLS-based service is an IPv4 Virtual + Private Network (VPN). VPNs often use private addresses. + + The IPv4 link local addresses are more attractive in that the scope + over which they can be forwarded is limited. However, if one were to + use an address from this range, it would still be possible for the + first recipient of a diagnostic packet that "escaped" from a broken + LSP to have that address assigned to the interface on which it + arrived and thus could mistakenly receive such a packet. + Furthermore, the IPv4 link local address range has only recently been + allocated. Many deployed routers would forward a packet with an + address from that range toward the default route. + + The 127/8 range for IPv4 and that same range embedded in as IPv4- + mapped IPv6 addresses for IPv6 was chosen for a number of reasons. + + RFC 1122 allocates the 127/8 as "Internal host loopback address" and + states: "Addresses of this form MUST NOT appear outside a host." + Thus, the default behavior of hosts is to discard such packets. This + + + +Kompella & Swallow Standards Track [Page 5] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + helps to ensure that if a diagnostic packet is misdirected to a host, + it will be silently discarded. + + RFC 1812 [RFC1812] states: + + A router SHOULD NOT forward, except over a loopback interface, any + packet that has a destination address on network 127. A router + MAY have a switch that allows the network manager to disable these + checks. If such a switch is provided, it MUST default to + performing the checks. + + This helps to ensure that diagnostic packets are never IP forwarded. + + The 127/8 address range provides 16M addresses allowing wide + flexibility in varying addresses to exercise ECMP paths. Finally, as + an implementation optimization, the 127/8 provides an easy means of + identifying possible LSP packets. + +3. Packet Format + + An MPLS echo request is a (possibly labeled) IPv4 or IPv6 UDP packet; + the contents of the UDP packet 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version Number | Global Flags | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Message Type | Reply mode | Return Code | Return Subcode| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sender's Handle | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sequence Number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Sent (seconds) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Sent (microseconds) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Received (seconds) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Received (microseconds) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TLVs ... | + . . + . . + . . + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Kompella & Swallow Standards Track [Page 6] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + The Version Number is currently 1. (Note: the version number is to + be incremented whenever a change is made that affects the ability of + an implementation to correctly parse or process an MPLS echo + request/reply. These changes include any syntactic or semantic + changes made to any of the fixed fields, or to any Type-Length-Value + (TLV) or sub-TLV assignment or format that is defined at a certain + version number. The version number may not need to be changed if an + optional TLV or sub-TLV is added.) + + The Global Flags field is a bit vector with the following format: + + 0 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | MBZ |V| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + One flag is defined for now, the V bit; the rest MUST be set to zero + when sending and ignored on receipt. + + The V (Validate FEC Stack) flag is set to 1 if the sender wants the + receiver to perform FEC Stack validation; if V is 0, the choice is + left to the receiver. + + The Message Type is one of the following: + + Value Meaning + ----- ------- + 1 MPLS echo request + 2 MPLS echo reply + + The Reply Mode can take one of the following values: + + Value Meaning + ----- ------- + 1 Do not reply + 2 Reply via an IPv4/IPv6 UDP packet + 3 Reply via an IPv4/IPv6 UDP packet with Router Alert + 4 Reply via application level control channel + + An MPLS echo request with 1 (Do not reply) in the Reply Mode field + may be used for one-way connectivity tests; the receiving router may + log gaps in the Sequence Numbers and/or maintain delay/jitter + statistics. An MPLS echo request would normally have 2 (Reply via an + IPv4/IPv6 UDP packet) in the Reply Mode field. If the normal IP + return path is deemed unreliable, one may use 3 (Reply via an + IPv4/IPv6 UDP packet with Router Alert). Note that this requires + that all intermediate routers understand and know how to forward MPLS + + + +Kompella & Swallow Standards Track [Page 7] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + echo replies. The echo reply uses the same IP version number as the + received echo request, i.e., an IPv4 encapsulated echo reply is sent + in response to an IPv4 encapsulated echo request. + + Some applications support an IP control channel. One such example is + the associated control channel defined in Virtual Circuit + Connectivity Verification (VCCV) [VCCV]. Any application that + supports an IP control channel between its control entities may set + the Reply Mode to 4 (Reply via application level control channel) to + ensure that replies use that same channel. Further definition of + this codepoint is application specific and thus beyond the scope of + this document. + + Return Codes and Subcodes are described in the next section. + + The Sender's Handle is filled in by the sender, and returned + unchanged by the receiver in the echo reply (if any). There are no + semantics associated with this handle, although a sender may find + this useful for matching up requests with replies. + + The Sequence Number is assigned by the sender of the MPLS echo + request and can be (for example) used to detect missed replies. + + The TimeStamp Sent is the time-of-day (in seconds and microseconds, + according to the sender's clock) in NTP format [NTP] when the MPLS + echo request is sent. The TimeStamp Received in an echo reply is the + time-of-day (according to the receiver's clock) in NTP format that + the corresponding echo request was received. + + TLVs (Type-Length-Value tuples) 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type | Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Value | + . . + . . + . . + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Types are defined below; Length is the length of the Value field in + octets. The Value field depends on the Type; it is zero padded to + align to a 4-octet boundary. TLVs may be nested within other TLVs, + in which case the nested TLVs are called sub-TLVs. Sub-TLVs have + independent types and MUST also be 4-octet aligned. + + + +Kompella & Swallow Standards Track [Page 8] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Two examples follow. The Label Distribution Protocol (LDP) IPv4 FEC + sub-TLV has 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type = 1 (LDP IPv4 FEC) | Length = 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The Length for this TLV is 5. A Target FEC Stack TLV that contains + an LDP IPv4 FEC sub-TLV and a VPN IPv4 prefix sub-TLV has 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type = 1 (FEC TLV) | Length = 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-Type = 1 (LDP IPv4 FEC) | Length = 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-Type = 6 (VPN IPv4 prefix)| Length = 13 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Route Distinguisher | + | (8 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 9] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + A description of the Types and Values of the top-level TLVs for LSP + ping are given below: + + Type # Value Field + ------ ----------- + 1 Target FEC Stack + 2 Downstream Mapping + 3 Pad + 4 Not Assigned + 5 Vendor Enterprise Number + 6 Not Assigned + 7 Interface and Label Stack + 8 Not Assigned + 9 Errored TLVs + 10 Reply TOS Byte + + Types less than 32768 (i.e., with the high-order bit equal to 0) are + mandatory TLVs that MUST either be supported by an implementation or + result in the return code of 2 ("One or more of the TLVs was not + understood") being sent in the echo response. + + Types greater than or equal to 32768 (i.e., with the high-order bit + equal to 1) are optional TLVs that SHOULD be ignored if the + implementation does not understand or support them. + +3.1. Return Codes + + The Return Code is set to zero by the sender. The receiver can set + it to one of the values listed below. The notation <RSC> refers to + the Return Subcode. This field is filled in with the stack-depth for + those codes that specify that. For all other codes, the Return + Subcode MUST be set to zero. + + Value Meaning + ----- ------- + + 0 No return code + + 1 Malformed echo request received + + 2 One or more of the TLVs was not understood + + 3 Replying router is an egress for the FEC at stack- + depth <RSC> + + 4 Replying router has no mapping for the FEC at stack- + depth <RSC> + + + + +Kompella & Swallow Standards Track [Page 10] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 5 Downstream Mapping Mismatch (See Note 1) + + 6 Upstream Interface Index Unknown (See Note 1) + + 7 Reserved + + 8 Label switched at stack-depth <RSC> + + 9 Label switched but no MPLS forwarding at stack-depth + <RSC> + + 10 Mapping for this FEC is not the given label at stack- + depth <RSC> + + 11 No label entry at stack-depth <RSC> + + 12 Protocol not associated with interface at FEC stack- + depth <RSC> + + 13 Premature termination of ping due to label stack + shrinking to a single label + + Note 1 + + The Return Subcode contains the point in the label stack where + processing was terminated. If the RSC is 0, no labels were + processed. Otherwise the packet would have been label switched at + depth RSC. + +3.2. Target FEC Stack + + A Target FEC Stack is a list of sub-TLVs. The number of elements is + determined by looking at the sub-TLV length fields. + + Sub-Type Length Value Field + -------- ------ ----------- + 1 5 LDP IPv4 prefix + 2 17 LDP IPv6 prefix + 3 20 RSVP IPv4 LSP + 4 56 RSVP IPv6 LSP + 5 Not Assigned + 6 13 VPN IPv4 prefix + 7 25 VPN IPv6 prefix + 8 14 L2 VPN endpoint + 9 10 "FEC 128" Pseudowire (deprecated) + 10 14 "FEC 128" Pseudowire + 11 16+ "FEC 129" Pseudowire + 12 5 BGP labeled IPv4 prefix + + + +Kompella & Swallow Standards Track [Page 11] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 13 17 BGP labeled IPv6 prefix + 14 5 Generic IPv4 prefix + 15 17 Generic IPv6 prefix + 16 4 Nil FEC + + Other FEC Types will be defined as needed. + + Note that this TLV defines a stack of FECs, the first FEC element + corresponding to the top of the label stack, etc. + + An MPLS echo request MUST have a Target FEC Stack that describes the + FEC Stack being tested. For example, if an LSR X has an LDP mapping + [LDP] for 192.168.1.1 (say, label 1001), then to verify that label + 1001 does indeed reach an egress LSR that announced this prefix via + LDP, X can send an MPLS echo request with an FEC Stack TLV with one + FEC in it, namely, of type LDP IPv4 prefix, with prefix + 192.168.1.1/32, and send the echo request with a label of 1001. + + Say LSR X wanted to verify that a label stack of <1001, 23456> is the + right label stack to use to reach a VPN IPv4 prefix [see section + 3.2.5] of 10/8 in VPN foo. Say further that LSR Y with loopback + address 192.168.1.1 announced prefix 10/8 with Route Distinguisher + RD-foo-Y (which may in general be different from the Route + Distinguisher that LSR X uses in its own advertisements for VPN foo), + label 23456 and BGP next hop 192.168.1.1 [BGP]. Finally, suppose + that LSR X receives a label binding of 1001 for 192.168.1.1 via LDP. + X has two choices in sending an MPLS echo request: X can send an MPLS + echo request with an FEC Stack TLV with a single FEC of type VPN IPv4 + prefix with a prefix of 10/8 and a Route Distinguisher of RD-foo-Y. + Alternatively, X can send an FEC Stack TLV with two FECs, the first + of type LDP IPv4 with a prefix of 192.168.1.1/32 and the second of + type of IP VPN with a prefix 10/8 with Route Distinguisher of RD- + foo-Y. In either case, the MPLS echo request would have a label + stack of <1001, 23456>. (Note: in this example, 1001 is the "outer" + label and 23456 is the "inner" label.) + +3.2.1. LDP IPv4 Prefix + + The IPv4 Prefix FEC is defined in [LDP]. When an LDP IPv4 prefix is + encoded in a label stack, the following format is used. The value + consists of 4 octets of an IPv4 prefix followed by 1 octet of prefix + length in bits; the format is given below. The IPv4 prefix is in + network byte order; if the prefix is shorter than 32 bits, trailing + bits SHOULD be set to zero. See [LDP] for an example of a Mapping + for an IPv4 FEC. + + + + + + +Kompella & Swallow Standards Track [Page 12] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.2. LDP IPv6 Prefix + + The IPv6 Prefix FEC is defined in [LDP]. When an LDP IPv6 prefix is + encoded in a label stack, the following format is used. The value + consists of 16 octets of an IPv6 prefix followed by 1 octet of prefix + length in bits; the format is given below. The IPv6 prefix is in + network byte order; if the prefix is shorter than 128 bits, the + trailing bits SHOULD be set to zero. See [LDP] for an example of a + Mapping for an IPv6 FEC. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 prefix | + | (16 octets) | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.3. RSVP IPv4 LSP + + The value has the format below. The value fields are taken from RFC + 3209, sections 4.6.1.1 and 4.6.2.1. See [RSVP-TE]. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 tunnel end point address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Extended Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 tunnel sender address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | LSP ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + +Kompella & Swallow Standards Track [Page 13] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +3.2.4. RSVP IPv6 LSP + + The value has the format below. The value fields are taken from RFC + 3209, sections 4.6.1.2 and 4.6.2.2. See [RSVP-TE]. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 tunnel end point address | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Extended Tunnel ID | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 tunnel sender address | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | LSP ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.5. VPN IPv4 Prefix + + VPN-IPv4 Network Layer Routing Information (NLRI) is defined in + [RFC4365]. This document uses the term VPN IPv4 prefix for a VPN- + IPv4 NLRI that has been advertised with an MPLS label in BGP. See + [BGP-LABEL]. + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 14] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + When a VPN IPv4 prefix is encoded in a label stack, the following + format is used. The value field consists of the Route Distinguisher + advertised with the VPN IPv4 prefix, the IPv4 prefix (with trailing 0 + bits to make 32 bits in all), and a prefix length, 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Route Distinguisher | + | (8 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The Route Distinguisher (RD) is an 8-octet identifier; it does not + contain any inherent information. The purpose of the RD is solely to + allow one to create distinct routes to a common IPv4 address prefix. + The encoding of the RD is not important here. When matching this + field to the local FEC information, it is treated as an opaque value. + +3.2.6. VPN IPv6 Prefix + + VPN-IPv6 Network Layer Routing Information (NLRI) is defined in + [RFC4365]. This document uses the term VPN IPv6 prefix for a VPN- + IPv6 NLRI that has been advertised with an MPLS label in BGP. See + [BGP-LABEL]. + + When a VPN IPv6 prefix is encoded in a label stack, the following + format is used. The value field consists of the Route Distinguisher + advertised with the VPN IPv6 prefix, the IPv6 prefix (with trailing 0 + bits to make 128 bits in all), and a prefix length, 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Route Distinguisher | + | (8 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 prefix | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + +Kompella & Swallow Standards Track [Page 15] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + The Route Distinguisher is identical to the VPN IPv4 Prefix RD, + except that it functions here to allow the creation of distinct + routes to IPv6 prefixes. See section 3.2.5. When matching this + field to local FEC information, it is treated as an opaque value. + +3.2.7. L2 VPN Endpoint + + VPLS stands for Virtual Private LAN Service. The terms VPLS BGP NLRI + and VE ID (VPLS Edge Identifier) are defined in [VPLS-BGP]. This + document uses the simpler term L2 VPN endpoint when referring to a + VPLS BGP NLRI. The Route Distinguisher is an 8-octet identifier used + to distinguish information about various L2 VPNs advertised by a + node. The VE ID is a 2-octet identifier used to identify a + particular node that serves as the service attachment point within a + VPLS. The structure of these two identifiers is unimportant here; + when matching these fields to local FEC information, they are treated + as opaque values. The encapsulation type is identical to the PW Type + in section 3.2.8 below. + + When an L2 VPN endpoint is encoded in a label stack, the following + format is used. The value field consists of a Route Distinguisher (8 + octets), the sender (of the ping)'s VE ID (2 octets), the receiver's + VE ID (2 octets), and an encapsulation type (2 octets), formatted 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Route Distinguisher | + | (8 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sender's VE ID | Receiver's VE ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Encapsulation Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.8. FEC 128 Pseudowire (Deprecated) + + FEC 128 (0x80) is defined in [PW-CONTROL], as are the terms PW ID + (Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero + 32-bit connection ID. The PW Type is a 15-bit number indicating the + encapsulation type. It is carried right justified in the field below + termed encapsulation type with the high-order bit set to zero. Both + of these fields are treated in this protocol as opaque values. + + + + + + + +Kompella & Swallow Standards Track [Page 16] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + When an FEC 128 is encoded in a label stack, the following format is + used. The value field consists of the remote PE address (the + destination address of the targeted LDP session), the PW ID, and the + encapsulation type 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote PE Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + This FEC is deprecated and is retained only for backward + compatibility. Implementations of LSP ping SHOULD accept and process + this TLV, but SHOULD send LSP ping echo requests with the new TLV + (see next section), unless explicitly configured to use the old TLV. + + An LSR receiving this TLV SHOULD use the source IP address of the LSP + echo request to infer the sender's PE address. + +3.2.9. FEC 128 Pseudowire (Current) + + FEC 128 (0x80) is defined in [PW-CONTROL], as are the terms PW ID + (Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero + 32-bit connection ID. The PW Type is a 15-bit number indicating the + encapsulation type. It is carried right justified in the field below + termed encapsulation type with the high-order bit set to zero. + + Both of these fields are treated in this protocol as opaque values. + When matching these field to the local FEC information, the match + MUST be exact. + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 17] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + When an FEC 128 is encoded in a label stack, the following format is + used. The value field consists of the sender's PE address (the + source address of the targeted LDP session), the remote PE address + (the destination address of the targeted LDP session), the PW ID, and + the encapsulation type 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sender's PE Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote PE Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.10. FEC 129 Pseudowire + + FEC 129 (0x81) and the terms PW Type, Attachment Group Identifier + (AGI), Attachment Group Identifier Type (AGI Type), Attachment + Individual Identifier Type (AII Type), Source Attachment Individual + Identifier (SAII), and Target Attachment Individual Identifier (TAII) + are defined in [PW-CONTROL]. The PW Type is a 15-bit number + indicating the encapsulation type. It is carried right justified in + the field below PW Type with the high-order bit set to zero. All the + other fields are treated as opaque values and copied directly from + the FEC 129 format. All of these values together uniquely define the + FEC within the scope of the LDP session identified by the source and + remote PE addresses. + + + + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 18] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + When an FEC 129 is encoded in a label stack, the following format is + used. The Length of this TLV is 16 + AGI length + SAII length + TAII + length. Padding is used to make the total length a multiple of 4; + the length of the padding is not included in the Length 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sender's PE Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote PE Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW Type | AGI Type | AGI Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ AGI Value ~ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | AII Type | SAII Length | SAII Value | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ SAII Value (continued) ~ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | AII Type | TAII Length | TAII Value | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ TAII Value (continued) ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TAII (cont.) | 0-3 octets of zero padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.11. BGP Labeled IPv4 Prefix + + BGP labeled IPv4 prefixes are defined in [BGP-LABEL]. When a BGP + labeled IPv4 prefix is encoded in a label stack, the following format + is used. The value field consists the IPv4 prefix (with trailing 0 + bits to make 32 bits in all), and the prefix length, 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 Prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + +Kompella & Swallow Standards Track [Page 19] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +3.2.12. BGP Labeled IPv6 Prefix + + BGP labeled IPv6 prefixes are defined in [BGP-LABEL]. When a BGP + labeled IPv6 prefix is encoded in a label stack, the following format + is used. The value consists of 16 octets of an IPv6 prefix followed + by 1 octet of prefix length in bits; the format is given below. The + IPv6 prefix is in network byte order; if the prefix is shorter than + 128 bits, the trailing bits SHOULD be set to zero. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 prefix | + | (16 octets) | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.13. Generic IPv4 Prefix + + The value consists of 4 octets of an IPv4 prefix followed by 1 octet + of prefix length in bits; the format is given below. The IPv4 prefix + is in network byte order; if the prefix is shorter than 32 bits, + trailing bits SHOULD be set to zero. This FEC is used if the + protocol advertising the label is unknown or may change during the + course of the LSP. An example is an inter-AS LSP that may be + signaled by LDP in one Autonomous System (AS), by RSVP-TE [RSVP-TE] + in another AS, and by BGP between the ASes, such as is common for + inter-AS VPNs. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 20] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +3.2.14. Generic IPv6 Prefix + + The value consists of 16 octets of an IPv6 prefix followed by 1 octet + of prefix length in bits; the format is given below. The IPv6 prefix + is in network byte order; if the prefix is shorter than 128 bits, the + trailing bits SHOULD be set to zero. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 prefix | + | (16 octets) | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.15. Nil FEC + + At times, labels from the reserved range, e.g., Router Alert and + Explicit-null, may be added to the label stack for various diagnostic + purposes such as influencing load-balancing. These labels may have + no explicit FEC associated with them. The Nil FEC Stack is defined + to allow a Target FEC Stack sub-TLV to be added to the Target FEC + Stack to account for such labels so that proper validation can still + be performed. + + The Length is 4. Labels are 20-bit values treated as numbers. + + 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 | MBZ | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Label is the actual label value inserted in the label stack; the MBZ + fields MUST be zero when sent and ignored on receipt. + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 21] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +3.3. Downstream Mapping + + The Downstream Mapping object is a TLV that MAY be included in an + echo request message. Only one Downstream Mapping object may appear + in an echo request. The presence of a Downstream Mapping object is a + request that Downstream Mapping objects be included in the echo + reply. If the replying router is the destination of the FEC, then a + Downstream Mapping TLV SHOULD NOT be included in the echo reply. + Otherwise the replying router SHOULD include a Downstream Mapping + object for each interface over which this FEC could be forwarded. + For a more precise definition of the notion of "downstream", see + section 3.3.2, "Downstream Router and Interface". + + The Length is K + M + 4*N octets, where M is the Multipath Length, + and N is the number of Downstream Labels. Values for K are found in + the description of Address Type below. The Value field of a + Downstream Mapping has 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | MTU | Address Type | DS Flags | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream IP Address (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Interface Address (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Multipath Type| Depth Limit | Multipath Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . (Multipath Information) . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Label | Protocol | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Label | Protocol | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Maximum Transmission Unit (MTU) + + The MTU is the size in octets of the largest MPLS frame (including + label stack) that fits on the interface to the Downstream LSR. + + + + + +Kompella & Swallow Standards Track [Page 22] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Address Type + + The Address Type indicates if the interface is numbered or + unnumbered. It also determines the length of the Downstream IP + Address and Downstream Interface fields. The resulting total for + the initial part of the TLV is listed in the table below as "K + Octets". The Address Type is set to one of the following values: + + Type # Address Type K Octets + ------ ------------ -------- + 1 IPv4 Numbered 16 + 2 IPv4 Unnumbered 16 + 3 IPv6 Numbered 40 + 4 IPv6 Unnumbered 28 + + DS Flags + + The DS Flags field is a bit vector with the following format: + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + | Rsvd(MBZ) |I|N| + +-+-+-+-+-+-+-+-+ + + Two flags are defined currently, I and N. The remaining flags + MUST be set to zero when sending and ignored on receipt. + + Flag Name and Meaning + ---- ---------------- + + I Interface and Label Stack Object Request + + When this flag is set, it indicates that the replying + router SHOULD include an Interface and Label Stack + Object in the echo reply message. + + N Treat as a Non-IP Packet + + Echo request messages will be used to diagnose non-IP + flows. However, these messages are carried in IP + packets. For a router that alters its ECMP algorithm + based on the FEC or deep packet examination, this flag + requests that the router treat this as it would if the + determination of an IP payload had failed. + + + + + + + +Kompella & Swallow Standards Track [Page 23] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Downstream IP Address and Downstream Interface Address + + IPv4 addresses and interface indices are encoded in 4 octets; IPv6 + addresses are encoded in 16 octets. + + If the interface to the downstream LSR is numbered, then the + Address Type MUST be set to IPv4 or IPv6, the Downstream IP + Address MUST be set to either the downstream LSR's Router ID or + the interface address of the downstream LSR, and the Downstream + Interface Address MUST be set to the downstream LSR's interface + address. + + If the interface to the downstream LSR is unnumbered, the Address + Type MUST be IPv4 Unnumbered or IPv6 Unnumbered, the Downstream IP + Address MUST be the downstream LSR's Router ID, and the Downstream + Interface Address MUST be set to the index assigned by the + upstream LSR to the interface. + + If an LSR does not know the IP address of its neighbor, then it + MUST set the Address Type to either IPv4 Unnumbered or IPv6 + Unnumbered. For IPv4, it must set the Downstream IP Address to + 127.0.0.1; for IPv6 the address is set to 0::1. In both cases, + the interface index MUST be set to 0. If an LSR receives an Echo + Request packet with either of these addresses in the Downstream IP + Address field, this indicates that it MUST bypass interface + verification but continue with label validation. + + If the originator of an Echo Request packet wishes to obtain + Downstream Mapping information but does not know the expected + label stack, then it SHOULD set the Address Type to either IPv4 + Unnumbered or IPv6 Unnumbered. For IPv4, it MUST set the + Downstream IP Address to 224.0.0.2; for IPv6 the address MUST be + set to FF02::2. In both cases, the interface index MUST be set to + 0. If an LSR receives an Echo Request packet with the all-routers + multicast address, then this indicates that it MUST bypass both + interface and label stack validation, but return Downstream + Mapping TLVs using the information provided. + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 24] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Multipath Type + + The following Multipath Types are defined: + + Key Type Multipath Information + --- ---------------- --------------------- + 0 no multipath Empty (Multipath Length = 0) + 2 IP address IP addresses + 4 IP address range low/high address pairs + 8 Bit-masked IP IP address prefix and bit mask + address set + 9 Bit-masked label set Label prefix and bit mask + + Type 0 indicates that all packets will be forwarded out this one + interface. + + Types 2, 4, 8, and 9 specify that the supplied Multipath + Information will serve to exercise this path. + + Depth Limit + + The Depth Limit is applicable only to a label stack and is the + maximum number of labels considered in the hash; this SHOULD be + set to zero if unspecified or unlimited. + + Multipath Length + + The length in octets of the Multipath Information. + + Multipath Information + + Address or label values encoded according to the Multipath Type. + See the next section below for encoding details. + + Downstream Label(s) + + The set of labels in the label stack as it would have appeared if + this router were forwarding the packet through this interface. + Any Implicit Null labels are explicitly included. Labels are + treated as numbers, i.e., they are right justified in the field. + + A Downstream Label is 24 bits, in the same format as an MPLS label + minus the TTL field, i.e., the MSBit of the label is bit 0, the + LSBit is bit 19, the EXP bits are bits 20-22, and bit 23 is the S + bit. The replying router SHOULD fill in the EXP and S bits; the + LSR receiving the echo reply MAY choose to ignore these bits. + + + + + +Kompella & Swallow Standards Track [Page 25] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Protocol + + The Protocol is taken from the following table: + + Protocol # Signaling Protocol + ---------- ------------------ + 0 Unknown + 1 Static + 2 BGP + 3 LDP + 4 RSVP-TE + +3.3.1. Multipath Information Encoding + + The Multipath Information encodes labels or addresses that will + exercise this path. The Multipath Information depends on the + Multipath Type. The contents of the field are shown in the table + above. IPv4 addresses are drawn from the range 127/8; IPv6 addresses + are drawn from the range 0:0:0:0:0:FFFF:127/104. Labels are treated + as numbers, i.e., they are right justified in the field. For Type 4, + ranges indicated by Address pairs MUST NOT overlap and MUST be in + ascending sequence. + + Type 8 allows a more dense encoding of IP addresses. The IP prefix + is formatted as a base IP address with the non-prefix low-order bits + set to zero. The maximum prefix length is 27. Following the prefix + is a mask of length 2^(32-prefix length) bits for IPv4 and 2^(128- + prefix length) bits for IPv6. Each bit set to 1 represents a valid + address. The address is the base IPv4 address plus the position of + the bit in the mask where the bits are numbered left to right + beginning with zero. For example, the IPv4 addresses 127.2.1.0, + 127.2.1.5-127.2.1.15, and 127.2.1.20-127.2.1.29 would be encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + +Kompella & Swallow Standards Track [Page 26] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Those same addresses embedded in IPv6 would be encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Type 9 allows a more dense encoding of labels. The label prefix is + formatted as a base label value with the non-prefix low-order bits + set to zero. The maximum prefix (including leading zeros due to + encoding) length is 27. Following the prefix is a mask of length + 2^(32-prefix length) bits. Each bit set to one represents a valid + label. The label is the base label plus the position of the bit in + the mask where the bits are numbered left to right beginning with + zero. Label values of all the odd numbers between 1152 and 1279 + would be encoded 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 +- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0| +-+-+- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1| +-+-+-+-+- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1| +-+-+-+-+-+-+- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1| +-+-+-+-+-+-+-+-+- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1| +-+-+-+-+-+-+-+-+- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + If the received Multipath Information is non-null, the labels and IP + addresses MUST be picked from the set provided. If none of these + labels or addresses map to a particular downstream interface, then + for that interface, the type MUST be set to 0. If the received + Multipath Information is null (i.e., Multipath Length = 0, or for + Types 8 and 9, a mask of all zeros), the type MUST be set to 0. + + + +Kompella & Swallow Standards Track [Page 27] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + For example, suppose LSR X at hop 10 has two downstream LSRs, Y and + Z, for the FEC in question. The received X could return Multipath + Type 4, with low/high IP addresses of 127.1.1.1->127.1.1.255 for + downstream LSR Y and 127.2.1.1->127.2.1.255 for downstream LSR Z. + The head end reflects this information to LSR Y. Y, which has three + downstream LSRs, U, V, and W, computes that 127.1.1.1->127.1.1.127 + would go to U and 127.1.1.128-> 127.1.1.255 would go to V. Y would + then respond with 3 Downstream Mappings: to U, with Multipath Type 4 + (127.1.1.1->127.1.1.127); to V, with Multipath Type 4 + (127.1.1.127->127.1.1.255); and to W, with Multipath Type 0. + + Note that computing Multipath Information may impose a significant + processing burden on the receiver. A receiver MAY thus choose to + process a subset of the received prefixes. The sender, on receiving + a reply to a Downstream Mapping with partial information, SHOULD + assume that the prefixes missing in the reply were skipped by the + receiver, and MAY re-request information about them in a new echo + request. + +3.3.2. Downstream Router and Interface + + The notion of "downstream router" and "downstream interface" should + be explained. Consider an LSR X. If a packet that was originated + with TTL n>1 arrived with outermost label L and TTL=1 at LSR X, X + must be able to compute which LSRs could receive the packet if it was + originated with TTL=n+1, over which interface the request would + arrive and what label stack those LSRs would see. (It is outside the + scope of this document to specify how this computation is done.) The + set of these LSRs/interfaces consists of the downstream + routers/interfaces (and their corresponding labels) for X with + respect to L. Each pair of downstream router and interface requires + a separate Downstream Mapping to be added to the reply. + + The case where X is the LSR originating the echo request is a special + case. X needs to figure out what LSRs would receive the MPLS echo + request for a given FEC Stack that X originates with TTL=1. + + The set of downstream routers at X may be alternative paths (see the + discussion below on ECMP) or simultaneous paths (e.g., for MPLS + multicast). In the former case, the Multipath Information is used as + a hint to the sender as to how it may influence the choice of these + alternatives. + + + + + + + + + +Kompella & Swallow Standards Track [Page 28] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +3.4. Pad TLV + + The value part of the Pad TLV contains a variable number (>= 1) of + octets. The first octet takes values from the following table; all + the other octets (if any) are ignored. The receiver SHOULD verify + that the TLV is received in its entirety, but otherwise ignores the + contents of this TLV, apart from the first octet. + + Value Meaning + ----- ------- + 1 Drop Pad TLV from reply + 2 Copy Pad TLV to reply + 3-255 Reserved for future use + +3.5. Vendor Enterprise Number + + SMI Private Enterprise Numbers are maintained by IANA. The Length is + always 4; the value is the SMI Private Enterprise code, in network + octet order, of the vendor with a Vendor Private extension to any of + the fields in the fixed part of the message, in which case this TLV + MUST be present. If none of the fields in the fixed part of the + message have Vendor Private extensions, inclusion of this TLV is + OPTIONAL. Vendor Private ranges for Message Types, Reply Modes, and + Return Codes have been defined. When any of these are used, the + Vendor Enterprise Number TLV MUST be included in the message. + +3.6. Interface and Label Stack + + The Interface and Label Stack TLV MAY be included in a reply message + to report the interface on which the request message was received and + the label stack that was on the packet when it was received. Only + one such object may appear. The purpose of the object is to allow + the upstream router to obtain the exact interface and label stack + information as it appears at the replying LSR. + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 29] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + The Length is K + 4*N octets; N is the number of labels in the label + stack. Values for K are found in the description of Address Type + below. The Value field of a Downstream Mapping has 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IP Address (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Interface (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . . + . Label Stack . + . . + . . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Address Type + + The Address Type indicates if the interface is numbered or + unnumbered. It also determines the length of the IP Address and + Interface fields. The resulting total for the initial part of the + TLV is listed in the table below as "K Octets". The Address Type + is set to one of the following values: + + Type # Address Type K Octets + ------ ------------ -------- + 1 IPv4 Numbered 12 + 2 IPv4 Unnumbered 12 + 3 IPv6 Numbered 36 + 4 IPv6 Unnumbered 24 + + IP Address and Interface + + IPv4 addresses and interface indices are encoded in 4 octets; IPv6 + addresses are encoded in 16 octets. + + If the interface upon which the echo request message was received + is numbered, then the Address Type MUST be set to IPv4 or IPv6, + the IP Address MUST be set to either the LSR's Router ID or the + interface address, and the Interface MUST be set to the interface + address. + + + + +Kompella & Swallow Standards Track [Page 30] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + If the interface is unnumbered, the Address Type MUST be either + IPv4 Unnumbered or IPv6 Unnumbered, the IP Address MUST be the + LSR's Router ID, and the Interface MUST be set to the index + assigned to the interface. + + Label Stack + + The label stack of the received echo request message. If any TTL + values have been changed by this router, they SHOULD be restored. + +3.7. Errored TLVs + + The following TLV is a TLV that MAY be included in an echo reply to + inform the sender of an echo request of mandatory TLVs either not + supported by an implementation or parsed and found to be in error. + + The Value field contains the TLVs that were not understood, encoded + as sub-TLVs. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type = 9 | Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Value | + . . + . . + . . + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.8. Reply TOS Byte TLV + + This TLV MAY be used by the originator of the echo request to request + that an echo reply be sent with the IP header TOS byte set to the + value specified in the TLV. This TLV has a length of 4 with the + following 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Reply-TOS Byte| Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + +Kompella & Swallow Standards Track [Page 31] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +4. Theory of Operation + + An MPLS echo request is used to test a particular LSP. The LSP to be + tested is identified by the "FEC Stack"; for example, if the LSP was + set up via LDP, and is to an egress IP address of 10.1.1.1, the FEC + Stack contains a single element, namely, an LDP IPv4 prefix sub-TLV + with value 10.1.1.1/32. If the LSP being tested is an RSVP LSP, the + FEC Stack consists of a single element that captures the RSVP Session + and Sender Template that uniquely identifies the LSP. + + FEC Stacks can be more complex. For example, one may wish to test a + VPN IPv4 prefix of 10.1/8 that is tunneled over an LDP LSP with + egress 10.10.1.1. The FEC Stack would then contain two sub-TLVs, the + bottom being a VPN IPv4 prefix, and the top being an LDP IPv4 prefix. + If the underlying (LDP) tunnel were not known, or was considered + irrelevant, the FEC Stack could be a single element with just the VPN + IPv4 sub-TLV. + + When an MPLS echo request is received, the receiver is expected to + verify that the control plane and data plane are both healthy (for + the FEC Stack being pinged) and that the two planes are in sync. The + procedures for this are in section 4.4 below. + +4.1. Dealing with Equal-Cost Multi-Path (ECMP) + + LSPs need not be simple point-to-point tunnels. Frequently, a single + LSP may originate at several ingresses, and terminate at several + egresses; this is very common with LDP LSPs. LSPs for a given FEC + may also have multiple "next hops" at transit LSRs. At an ingress, + there may also be several different LSPs to choose from to get to the + desired endpoint. Finally, LSPs may have backup paths, detour paths, + and other alternative paths to take should the primary LSP go down. + + To deal with the last two first: it is assumed that the LSR sourcing + MPLS echo requests can force the echo request into any desired LSP, + so choosing among multiple LSPs at the ingress is not an issue. The + problem of probing the various flavors of backup paths that will + typically not be used for forwarding data unless the primary LSP is + down will not be addressed here. + + Since the actual LSP and path that a given packet may take may not be + known a priori, it is useful if MPLS echo requests can exercise all + possible paths. This, although desirable, may not be practical, + because the algorithms that a given LSR uses to distribute packets + over alternative paths may be proprietary. + + To achieve some degree of coverage of alternate paths, there is a + certain latitude in choosing the destination IP address and source + + + +Kompella & Swallow Standards Track [Page 32] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + UDP port for an MPLS echo request. This is clearly not sufficient; + in the case of traceroute, more latitude is offered by means of the + Multipath Information of the Downstream Mapping TLV. This is used as + follows. An ingress LSR periodically sends an MPLS traceroute + message to determine whether there are multipaths for a given LSP. + If so, each hop will provide some information how each of its + downstream paths can be exercised. The ingress can then send MPLS + echo requests that exercise these paths. If several transit LSRs + have ECMP, the ingress may attempt to compose these to exercise all + possible paths. However, full coverage may not be possible. + +4.2. Testing LSPs That Are Used to Carry MPLS Payloads + + To detect certain LSP breakages, it may be necessary to encapsulate + an MPLS echo request packet with at least one additional label when + testing LSPs that are used to carry MPLS payloads (such as LSPs used + to carry L2VPN and L3VPN traffic. For example, when testing LDP or + RSVP-TE LSPs, just sending an MPLS echo request packet may not detect + instances where the router immediately upstream of the destination of + the LSP ping may forward the MPLS echo request successfully over an + interface not configured to carry MPLS payloads because of the use of + penultimate hop popping. Since the receiving router has no means to + differentiate whether the IP packet was sent unlabeled or implicitly + labeled, the addition of labels shimmed above the MPLS echo request + (using the Nil FEC) will prevent a router from forwarding such a + packet out unlabeled interfaces. + +4.3. Sending an MPLS Echo Request + + An MPLS echo request is a UDP packet. The IP header is set as + follows: the source IP address is a routable address of the sender; + the destination IP address is a (randomly chosen) IPv4 address from + the range 127/8 or IPv6 address from the range + 0:0:0:0:0:FFFF:127/104. The IP TTL is set to 1. The source UDP port + is chosen by the sender; the destination UDP port is set to 3503 + (assigned by IANA for MPLS echo requests). The Router Alert option + MUST be set in the IP header. + + An MPLS echo request is sent with a label stack corresponding to the + FEC Stack being tested. Note that further labels could be applied + if, for example, the normal route to the topmost FEC in the stack is + via a Traffic Engineered Tunnel [RSVP-TE]. If all of the FECs in the + stack correspond to Implicit Null labels, the MPLS echo request is + considered unlabeled even if further labels will be applied in + sending the packet. + + If the echo request is labeled, one MAY (depending on what is being + pinged) set the TTL of the innermost label to 1, to prevent the ping + + + +Kompella & Swallow Standards Track [Page 33] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + request going farther than it should. Examples of where this SHOULD + be done include pinging a VPN IPv4 or IPv6 prefix, an L2 VPN endpoint + or a pseudowire. Preventing the ping request from going too far can + also be accomplished by inserting a Router Alert label above this + label; however, this may lead to the undesired side effect that MPLS + echo requests take a different data path than actual data. For more + information on how these mechanisms can be used for pseudowire + connectivity verification, see [VCCV]. + + In "ping" mode (end-to-end connectivity check), the TTL in the + outermost label is set to 255. In "traceroute" mode (fault isolation + mode), the TTL is set successively to 1, 2, and so on. + + The sender chooses a Sender's Handle and a Sequence Number. When + sending subsequent MPLS echo requests, the sender SHOULD increment + the Sequence Number by 1. However, a sender MAY choose to send a + group of echo requests with the same Sequence Number to improve the + chance of arrival of at least one packet with that Sequence Number. + + The TimeStamp Sent is set to the time-of-day (in seconds and + microseconds) that the echo request is sent. The TimeStamp Received + is set to zero. + + An MPLS echo request MUST have an FEC Stack TLV. Also, the Reply + Mode must be set to the desired reply mode; the Return Code and + Subcode are set to zero. In the "traceroute" mode, the echo request + SHOULD include a Downstream Mapping TLV. + +4.4. Receiving an MPLS Echo Request + + Sending an MPLS echo request to the control plane is triggered by one + of the following packet processing exceptions: Router Alert option, + IP TTL expiration, MPLS TTL expiration, MPLS Router Alert label, or + the destination address in the 127/8 address range. The control + plane further identifies it by UDP destination port 3503. + + For reporting purposes the bottom of stack is considered to be + stack-depth of 1. This is to establish an absolute reference for the + case where the actual stack may have more labels than there are FECs + in the Target FEC Stack. + + Furthermore, in all the error codes listed in this document, a + stack-depth of 0 means "no value specified". This allows + compatibility with existing implementations that do not use the + Return Subcode field. + + An LSR X that receives an MPLS echo request then processes it as + follows. + + + +Kompella & Swallow Standards Track [Page 34] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 1. General packet sanity is verified. If the packet is not well- + formed, LSR X SHOULD send an MPLS Echo Reply with the Return Code + set to "Malformed echo request received" and the Subcode to zero. + If there are any TLVs not marked as "Ignore" that LSR X does not + understand, LSR X SHOULD send an MPLS "TLV not understood" (as + appropriate), and the Subcode set to zero. In the latter case, + the misunderstood TLVs (only) are included as sub-TLVs in an + Errored TLVs TLV in the reply. The header fields Sender's Handle, + Sequence Number, and Timestamp Sent are not examined, but are + included in the MPLS echo reply message. + + The algorithm uses the following variables and identifiers: + + + Interface-I: the interface on which the MPLS echo request was + received. + + Stack-R: the label stack on the packet as it was received. + + Stack-D: the label stack carried in the Downstream Mapping + TLV (not always present) + + Label-L: the label from the actual stack currently being + examined. Requires no initialization. + + Label-stack-depth: the depth of label being verified. Initialized to + the number of labels in the received label stack + S. + + FEC-stack-depth: depth of the FEC in the Target FEC Stack that + should be used to verify the current actual label. + Requires no initialization. + + Best-return-code: contains the return code for the echo reply packet + as currently best known. As algorithm progresses, + this code may change depending on the results of + further checks that it performs. + + Best-rtn-subcode: similar to Best-return-code, but for the Echo + Reply Subcode. + + FEC-status: result value returned by the FEC Checking + algorithm described in section 4.4.1. + + /* Save receive context information */ + + + + + + +Kompella & Swallow Standards Track [Page 35] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + 2. If the echo request is good, LSR X stores the interface over + which the echo was received in Interface-I, and the label stack + with which it came in Stack-R. + + /* The rest of the algorithm iterates over the labels in Stack-R, + verifies validity of label values, reports associated label + switching operations (for traceroute), verifies correspondence + between the Stack-R and the Target FEC Stack description in the + body of the echo request, and reports any errors. */ + + /* The algorithm iterates as follows. */ + + 3. Label Validation: + + If Label-stack-depth is 0 { + + /* The LSR needs to report its being a tail-end for the LSP */ + + Set FEC-stack-depth to 1, set Label-L to 3 (Implicit Null). + Set Best-return-code to 3 ("Replying router is an egress for + the FEC at stack depth"), set Best-rtn-subcode to the + value of FEC-stack-depth (1) and go to step 5 (Egress + Processing). + } + + /* This step assumes there is always an entry for well-known + label values */ + + Set Label-L to the value extracted from Stack-R at depth + Label-stack-depth. Look up Label-L in the Incoming Label Map + (ILM) to determine if the label has been allocated and an + operation is associated with it. + + If there is no entry for L { + + /* Indicates a temporary or permanent label synchronization + problem the LSR needs to report an error */ + + Set Best-return-code to 11 ("No label entry at stack-depth") + and Best-rtn-subcode to Label-stack-depth. Go to step 7 + (Send Reply Packet). + } + + Else { + + Retrieve the associated label operation from the + corresponding NLFE and proceed to step 4 (Label Operation + check). + + + +Kompella & Swallow Standards Track [Page 36] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + } + + 4. Label Operation Check + + If the label operation is "Pop and Continue Processing" { + + /* Includes Explicit Null and Router Alert label cases */ + + Iterate to the next label by decrementing Label-stack-depth + and loop back to step 3 (Label Validation). + } + + If the label operation is "Swap or Pop and Switch based on Popped + Label" { + + Set Best-return-code to 8 ("Label switched at stack-depth") + and Best-rtn-subcode to Label-stack-depth to report transit + switching. + + If a Downstream Mapping TLV is present in the received echo + request { + + If the IP address in the TLV is 127.0.0.1 or 0::1 { + Set Best-return-code to 6 ("Upstream Interface Index + Unknown"). An Interface and Label Stack TLV SHOULD be + included in the reply and filled with Interface-I and + Stack-R. + } + + Else { + + Verify that the IP address, interface address, and label + stack in the Downstream Mapping TLV match Interface-I + and Stack-R. If there is a mismatch, set + Best-return-code to 5, "Downstream Mapping Mismatch". + An Interface and Label Stack TLV SHOULD be included in + the reply and filled in based on Interface-I and + Stack-R. Go to step 7 (Send Reply Packet). + } + } + + + For each available downstream ECMP path { + + Retrieve output interface from the NHLFE entry. + + /* Note: this return code is set even if Label-stack-depth + is one */ + + + +Kompella & Swallow Standards Track [Page 37] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + If the output interface is not MPLS enabled { + + Set Best-return-code to Return Code 9, "Label switched + but no MPLS forwarding at stack-depth" and set + Best-rtn-subcode to Label-stack-depth and goto + Send_Reply_Packet. + } + + If a Downstream Mapping TLV is present { + + A Downstream Mapping TLV SHOULD be included in the echo + reply (see section 3.3) filled in with information about + the current ECMP path. + } + } + + If no Downstream Mapping TLV is present, or the Downstream IP + Address is set to the ALLROUTERS multicast address, + go to step 7 (Send Reply Packet). + + If the "Validate FEC Stack" flag is not set and the LSR is not + configured to perform FEC checking by default, go to step 7 + (Send Reply Packet). + + /* Validate the Target FEC Stack in the received echo request. + + First determine FEC-stack-depth from the Downstream Mapping + TLV. This is done by walking through Stack-D (the Downstream + labels) from the bottom, decrementing the number of labels + for each non-Implicit Null label, while incrementing + FEC-stack-depth for each label. If the Downstream Mapping TLV + contains one or more Implicit Null labels, FEC-stack-depth + may be greater than Label-stack-depth. To be consistent with + the above stack-depths, the bottom is considered to entry 1. + */ + + Set FEC-stack-depth to 0. Set i to Label-stack-depth. + + While (i > 0 ) do { + ++FEC-stack-depth. + if Stack-D[FEC-stack-depth] != 3 (Implicit Null) + --i. + } + + If the number of labels in the FEC stack is greater + than or equal to FEC-stack-depth { + + + + + +Kompella & Swallow Standards Track [Page 38] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Perform the FEC Checking procedure (see subsection 4.4.1 + below). + + If FEC-status is 2, set Best-return-code to 10 ("Mapping + for this FEC is not the given label at stack-depth"). + + If the return code is 1, set Best-return-code to + FEC-return-code and Best-rtn-subcode to FEC-stack-depth. + } + + Go to step 7 (Send Reply Packet). + } + + 5. Egress Processing: + + /* These steps are performed by the LSR that identified itself + as the tail-end LSR for an LSP. */ + + If received echo request contains no Downstream Mapping TLV, or + the Downstream IP Address is set to 127.0.0.1 or 0::1 + go to step 6 (Egress FEC Validation). + + Verify that the IP address, interface address, and label stack in + the Downstream Mapping TLV match Interface-I and Stack-R. If + not, set Best-return-code to 5, "Downstream Mapping + Mis-match". A Received Interface and Label Stack TLV SHOULD be + created for the echo response packet. Go to step 7 (Send Reply + Packet). + + 6. Egress FEC Validation: + + /* This is a loop for all entries in the Target FEC Stack + starting with FEC-stack-depth. */ + + Perform FEC checking by following the algorithm described in + subsection 4.4.1 for Label-L and the FEC at FEC-stack-depth. + + Set Best-return-code to FEC-code and Best-rtn-subcode to the + value in FEC-stack-depth. + + If FEC-status (the result of the check) is 1, + go to step 7 (Send Reply Packet). + + /* Iterate to the next FEC entry */ + + ++FEC-stack-depth. + + + + + +Kompella & Swallow Standards Track [Page 39] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + If FEC-stack-depth > the number of FECs in the FEC-stack, + go to step 7 (Send Reply Packet). + + If FEC-status is 0 { + ++Label-stack-depth. + If Label-stack-depth > the number of labels in Stack-R, + Go to step 7 (Send Reply Packet). + + Label-L = extracted label from Stack-R at depth + Label-stack-depth. + Loop back to step 6 (Egress FEC Validation). + } + + 7. Send Reply Packet: + + Send an MPLS echo reply with a Return Code of Best-return-code, + and a Return Subcode of Best-rtn-subcode. Include any TLVs + created during the above process. The procedures for sending + the echo reply are found in subsection 4.4.1. + +4.4.1. FEC Validation + + /* This subsection describes validation of an FEC entry within the + Target FEC Stack and accepts an FEC, Label-L, and Interface-I. + The algorithm performs the following steps. */ + + 1. Two return values, FEC-status and FEC-return-code, are initialized + to 0. + + 2. If the FEC is the Nil FEC { + If Label-L is either Explicit_Null or Router_Alert, return. + + Else { + Set FEC-return-code to 10 ("Mapping for this FEC is not + the given label at stack-depth"). + Set FEC-status to 1 + Return. + } + } + + 3. Check the FEC label mapping that describes how traffic received on + the LSP is further switched or which application it is associated + with. If no mapping exists, set FEC-return-code to Return 4, + "Replying router has no mapping for the FEC at stack-depth". Set + FEC-status to 1. Return. + + 4. If the label mapping for FEC is Implicit Null, set FEC-status to 2 + and proceed to step 5. Otherwise, if the label mapping for FEC is + + + +Kompella & Swallow Standards Track [Page 40] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Label-L, proceed to step 5. Otherwise, set FEC-return-code to 10 + ("Mapping for this FEC is not the given label at stack-depth"), + set FEC-status to 1, and return. + + 5. This is a protocol check. Check what protocol would be used to + advertise FEC. If it can be determined that no protocol + associated with Interface-I would have advertised an FEC of that + FEC-Type, set FEC-return-code to 12 ("Protocol not associated with + interface at FEC stack-depth"). Set FEC-status to 1. + + 6. Return. + +4.5. Sending an MPLS Echo Reply + + An MPLS echo reply is a UDP packet. It MUST ONLY be sent in response + to an MPLS echo request. The source IP address is a routable address + of the replier; the source port is the well-known UDP port for LSP + ping. The destination IP address and UDP port are copied from the + source IP address and UDP port of the echo request. The IP TTL is + set to 255. If the Reply Mode in the echo request is "Reply via an + IPv4 UDP packet with Router Alert", then the IP header MUST contain + the Router Alert IP option. If the reply is sent over an LSP, the + topmost label MUST in this case be the Router Alert label (1) (see + [LABEL-STACK]). + + The format of the echo reply is the same as the echo request. The + Sender's Handle, the Sequence Number, and TimeStamp Sent are copied + from the echo request; the TimeStamp Received is set to the time-of- + day that the echo request is received (note that this information is + most useful if the time-of-day clocks on the requester and the + replier are synchronized). The FEC Stack TLV from the echo request + MAY be copied to the reply. + + The replier MUST fill in the Return Code and Subcode, as determined + in the previous subsection. + + If the echo request contains a Pad TLV, the replier MUST interpret + the first octet for instructions regarding how to reply. + + If the replying router is the destination of the FEC, then Downstream + Mapping TLVs SHOULD NOT be included in the echo reply. + + If the echo request contains a Downstream Mapping TLV, and the + replying router is not the destination of the FEC, the replier SHOULD + compute its downstream routers and corresponding labels for the + incoming label, and add Downstream Mapping TLVs for each one to the + echo reply it sends back. + + + + +Kompella & Swallow Standards Track [Page 41] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + If the Downstream Mapping TLV contains Multipath Information + requiring more processing than the receiving router is willing to + perform, the responding router MAY choose to respond with only a + subset of multipaths contained in the echo request Downstream + Mapping. (Note: The originator of the echo request MAY send another + echo request with the Multipath Information that was not included in + the reply.) + + Except in the case of Reply Mode 4, "Reply via application level + control channel", echo replies are always sent in the context of the + IP/MPLS network. + +4.6. Receiving an MPLS Echo Reply + + An LSR X should only receive an MPLS echo reply in response to an + MPLS echo request that it sent. Thus, on receipt of an MPLS echo + reply, X should parse the packet to ensure that it is well-formed, + then attempt to match up the echo reply with an echo request that it + had previously sent, using the destination UDP port and the Sender's + Handle. If no match is found, then X jettisons the echo reply; + otherwise, it checks the Sequence Number to see if it matches. + + If the echo reply contains Downstream Mappings, and X wishes to + traceroute further, it SHOULD copy the Downstream Mapping(s) into its + next echo request(s) (with TTL incremented by one). + +4.7. Issue with VPN IPv4 and IPv6 Prefixes + + Typically, an LSP ping for a VPN IPv4 prefix or VPN IPv6 prefix is + sent with a label stack of depth greater than 1, with the innermost + label having a TTL of 1. This is to terminate the ping at the egress + PE, before it gets sent to the customer device. However, under + certain circumstances, the label stack can shrink to a single label + before the ping hits the egress PE; this will result in the ping + terminating prematurely. One such scenario is a multi-AS Carrier's + Carrier VPN. + + To get around this problem, one approach is for the LSR that receives + such a ping to realize that the ping terminated prematurely, and send + back error code 13. In that case, the initiating LSR can retry the + ping after incrementing the TTL on the VPN label. In this fashion, + the ingress LSR will sequentially try TTL values until it finds one + that allows the VPN ping to reach the egress PE. + + + + + + + + +Kompella & Swallow Standards Track [Page 42] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +4.8. Non-compliant Routers + + If the egress for the FEC Stack being pinged does not support MPLS + ping, then no reply will be sent, resulting in possible "false + negatives". If in "traceroute" mode, a transit LSR does not support + LSP ping, then no reply will be forthcoming from that LSR for some + TTL, say, n. The LSR originating the echo request SHOULD try sending + the echo request with TTL=n+1, n+2, ..., n+k to probe LSRs further + down the path. In such a case, the echo request for TTL > n SHOULD + be sent with Downstream Mapping TLV "Downstream IP Address" field set + to the ALLROUTERs multicast address until a reply is received with a + Downstream Mapping TLV. The label stack MAY be omitted from the + Downstream Mapping TLV. Furthermore, the "Validate FEC Stack" flag + SHOULD NOT be set until an echo reply packet with a Downstream + Mapping TLV is received. + +5. References + +5.1. Normative References + + [BGP] Rekhter, Y., Li, T., and S. Hares, "A Border Gateway + Protocol 4 (BGP-4)", RFC 4271, January 2006. + + [IANA] Narten, T. and H. Alvestrand, "Guidelines for Writing + an IANA Considerations Section in RFCs", BCP 26, RFC + 2434, October 1998. + + [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [LABEL-STACK] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., + Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack + Encoding", RFC 3032, January 2001. + + [NTP] Mills, D., "Simple Network Time Protocol (SNTP) + Version 4 for IPv4, IPv6 and OSI", RFC 2030, October + 1996. + + [RFC1122] Braden, R., "Requirements for Internet Hosts - + Communication Layers", STD 3, RFC 1122, October 1989. + + [RFC1812] Baker, F., "Requirements for IP Version 4 Routers", + RFC 1812, June 1995. + + [RFC4026] Andersson, L. and T. Madsen, "Provider Provisioned + Virtual Private Network (VPN) Terminology", RFC 4026, + March 2005. + + + + +Kompella & Swallow Standards Track [Page 43] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +5.2. Informative References + + [BGP-LABEL] Rekhter, Y. and E. Rosen, "Carrying Label Information + in BGP-4", RFC 3107, May 2001. + + [ICMP] Postel, J., "Internet Control Message Protocol", STD + 5, RFC 792, September 1981. + + [LDP] Andersson, L., Doolan, P., Feldman, N., Fredette, A., + and B. Thomas, "LDP Specification", RFC 3036, January + 2001. + + [PW-CONTROL] Martini, L., El-Aawar, N., Heron, G., Rosen, E., + Tappan, D., and T. Smith, "Pseudowire Setup and + Maintenance using the Label Distribution Protocol", + Work in Progress. + + [RFC4365] Rosen, E., "Applicability Statement for BGP/MPLS IP + Virtual Private Networks (VPNs)", RFC 4365, February + 2006. + + [RSVP-TE] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, + V., and G. Swallow, "RSVP-TE: Extensions to RSVP for + LSP Tunnels", RFC 3209, December 2001. + + [VCCV] Nadeau, T. and R. Aggarwal, "Pseudo Wire Virtual + Circuit Connectivity Verification (VCCV), Work in + Progress, August 2005. + + [VPLS-BGP] Kompella, K. and Y. Rekhter, "Virtual Private LAN + Service", Work in Progress. + +6. Security Considerations + + Overall, the security needs for LSP ping are similar to those of ICMP + ping. + + There are at least three approaches to attacking LSRs using the + mechanisms defined here. One is a Denial-of-Service attack, by + sending MPLS echo requests/replies to LSRs and thereby increasing + their workload. The second is obfuscating the state of the MPLS data + plane liveness by spoofing, hijacking, replaying, or otherwise + tampering with MPLS echo requests and replies. The third is an + unauthorized source using an LSP ping to obtain information about the + network. + + + + + + +Kompella & Swallow Standards Track [Page 44] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + To avoid potential Denial-of-Service attacks, it is RECOMMENDED that + implementations regulate the LSP ping traffic going to the control + plane. A rate limiter SHOULD be applied to the well-known UDP port + defined below. + + Unsophisticated replay and spoofing attacks involving faking or + replaying MPLS echo reply messages are unlikely to be effective. + These replies would have to match the Sender's Handle and Sequence + Number of an outstanding MPLS echo request message. A non-matching + replay would be discarded as the sequence has moved on, thus a spoof + has only a small window of opportunity. However, to provide a + stronger defense, an implementation MAY also validate the TimeStamp + Sent by requiring and exact match on this field. + + To protect against unauthorized sources using MPLS echo request + messages to obtain network information, it is RECOMMENDED that + implementations provide a means of checking the source addresses of + MPLS echo request messages against an access list before accepting + the message. + + It is not clear how to prevent hijacking (non-delivery) of echo + requests or replies; however, if these messages are indeed hijacked, + LSP ping will report that the data plane is not working as it should. + + It does not seem vital (at this point) to secure the data carried in + MPLS echo requests and replies, although knowledge of the state of + the MPLS data plane may be considered confidential by some. + Implementations SHOULD, however, provide a means of filtering the + addresses to which echo reply messages may be sent. + + Although this document makes special use of 127/8 address, these are + used only in conjunction with the UDP port 3503. Furthermore, these + packets are only processed by routers. All other hosts MUST treat + all packets with a destination address in the range 127/8 in + accordance to RFC 1122. Any packet received by a router with a + destination address in the range 127/8 without a destination UDP port + of 3503 MUST be treated in accordance to RFC 1812. In particular, + the default behavior is to treat packets destined to a 127/8 address + as "martians". + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 45] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +7. IANA Considerations + + The TCP and UDP port number 3503 has been allocated by IANA for LSP + echo requests and replies. + + The following sections detail the new name spaces to be managed by + IANA. For each of these name spaces, the space is divided into + assignment ranges; the following terms are used in describing the + procedures by which IANA allocates values: "Standards Action" (as + defined in [IANA]), "Specification Required", and "Vendor Private + Use". + + Values from "Specification Required" ranges MUST be registered with + IANA. The request MUST be made via an Experimental RFC that + describes the format and procedures for using the code point; the + actual assignment is made during the IANA actions for the RFC. + + Values from "Vendor Private" ranges MUST NOT be registered with IANA; + however, the message MUST contain an enterprise code as registered + with the IANA SMI Private Network Management Private Enterprise + Numbers. For each name space that has a Vendor Private range, it + must be specified where exactly the SMI Private Enterprise Number + resides; see below for examples. In this way, several enterprises + (vendors) can use the same code point without fear of collision. + +7.1. Message Types, Reply Modes, Return Codes + + The IANA has created and will maintain registries for Message Types, + Reply Modes, and Return Codes. Each of these can take values in the + range 0-255. Assignments in the range 0-191 are via Standards + Action; assignments in the range 192-251 are made via "Specification + Required"; values in the range 252-255 are for Vendor Private Use, + and MUST NOT be allocated. + + If any of these fields fall in the Vendor Private range, a top-level + Vendor Enterprise Number TLV MUST be present in the message. + + Message Types defined in this document are the following: + + Value Meaning + ----- ------- + 1 MPLS echo request + 2 MPLS echo reply + + + + + + + + +Kompella & Swallow Standards Track [Page 46] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + Reply Modes defined in this document are the following: + + Value Meaning + ----- ------- + 1 Do not reply + 2 Reply via an IPv4/IPv6 UDP packet + 3 Reply via an IPv4/IPv6 UDP packet with Router Alert + 4 Reply via application level control channel + + Return Codes defined in this document are listed in section 3.1. + +7.2. TLVs + + The IANA has created and will maintain a registry for the Type field + of top-level TLVs as well as for any associated sub-TLVs. Note the + meaning of a sub-TLV is scoped by the TLV. The number spaces for the + sub-TLVs of various TLVs are independent. + + The valid range for TLVs and sub-TLVs is 0-65535. Assignments in the + range 0-16383 and 32768-49161 are made via Standards Action as + defined in [IANA]; assignments in the range 16384-31743 and + 49162-64511 are made via "Specification Required" as defined above; + values in the range 31744-32767 and 64512-65535 are for Vendor + Private Use, and MUST NOT be allocated. + + If a TLV or sub-TLV has a Type that falls in the range for Vendor + Private Use, the Length MUST be at least 4, and the first four octets + MUST be that vendor's SMI Private Enterprise Number, in network octet + order. The rest of the Value field is private to the vendor. + + + + + + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 47] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + + TLVs and sub-TLVs defined in this document are the following: + + Type Sub-Type Value Field + ---- -------- ----------- + 1 Target FEC Stack + 1 LDP IPv4 prefix + 2 LDP IPv6 prefix + 3 RSVP IPv4 LSP + 4 RSVP IPv6 LSP + 5 Not Assigned + 6 VPN IPv4 prefix + 7 VPN IPv6 prefix + 8 L2 VPN endpoint + 9 "FEC 128" Pseudowire (Deprecated) + 10 "FEC 128" Pseudowire + 11 "FEC 129" Pseudowire + 12 BGP labeled IPv4 prefix + 13 BGP labeled IPv6 prefix + 14 Generic IPv4 prefix + 15 Generic IPv6 prefix + 16 Nil FEC + 2 Downstream Mapping + 3 Pad + 4 Not Assigned + 5 Vendor Enterprise Number + 6 Not Assigned + 7 Interface and Label Stack + 8 Not Assigned + 9 Errored TLVs + Any value The TLV not understood + 10 Reply TOS Byte + +8. Acknowledgements + + This document is the outcome of many discussions among many people, + including Manoj Leelanivas, Paul Traina, Yakov Rekhter, Der-Hwa Gan, + Brook Bailey, Eric Rosen, Ina Minei, Shivani Aggarwal, and Vanson + Lim. + + The description of the Multipath Information sub-field of the + Downstream Mapping TLV was adapted from text suggested by Curtis + Villamizar. + + + + + + + + + +Kompella & Swallow Standards Track [Page 48] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +Authors' Addresses + + Kireeti Kompella + Juniper Networks + 1194 N.Mathilda Ave + Sunnyvale, CA 94089 + + EMail: kireeti@juniper.net + + + George Swallow + Cisco Systems + 1414 Massachusetts Ave, + Boxborough, MA 01719 + + Phone: +1 978 936 1398 + EMail: swallow@cisco.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kompella & Swallow Standards Track [Page 49] + +RFC 4379 Detecting MPLS Data Plane Failures February 2006 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2006). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position 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 + assurances 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. + +Acknowledgement + + Funding for the RFC Editor function is provided by the IETF + Administrative Support Activity (IASA). + + + + + + + +Kompella & Swallow Standards Track [Page 50] + |