diff options
Diffstat (limited to 'doc/rfc/rfc8029.txt')
-rw-r--r-- | doc/rfc/rfc8029.txt | 4371 |
1 files changed, 4371 insertions, 0 deletions
diff --git a/doc/rfc/rfc8029.txt b/doc/rfc/rfc8029.txt new file mode 100644 index 0000000..cf4ff52 --- /dev/null +++ b/doc/rfc/rfc8029.txt @@ -0,0 +1,4371 @@ + + + + + + +Internet Engineering Task Force (IETF) K. Kompella +Request for Comments: 8029 Juniper Networks, Inc. +Obsoletes: 4379, 6424, 6829, 7537 G. Swallow +Updates: 1122 C. Pignataro, Ed. +Category: Standards Track N. Kumar +ISSN: 2070-1721 Cisco + S. Aldrin + Google + M. Chen + Huawei + March 2017 + + + Detecting Multiprotocol Label Switched (MPLS) Data-Plane Failures + +Abstract + + This document describes a simple and efficient mechanism to detect + data-plane failures in Multiprotocol Label Switching (MPLS) Label + Switched Paths (LSPs). It defines a probe message called an "MPLS + echo request" and a response message called an "MPLS echo reply" for + returning the result of the probe. The MPLS echo request is intended + to contain sufficient information to check correct operation of the + data plane and to verify the data plane against the control plane, + thereby localizing faults. + + This document obsoletes RFCs 4379, 6424, 6829, and 7537, and updates + RFC 1122. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc8029. + + + + + + + + + +Kompella, et al. Standards Track [Page 1] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +Copyright Notice + + Copyright (c) 2017 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + modifications of such material outside the IETF Standards Process. + Without obtaining an adequate license from the person(s) controlling + the copyright in such materials, this document may not be modified + outside the IETF Standards Process, and derivative works of it may + not be created outside the IETF Standards Process, except to format + it for publication as an RFC or to translate it into languages other + than English. + + + + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 2] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 + 1.1. Conventions . . . . . . . . . . . . . . . . . . . . . . . 5 + 1.2. Structure of This Document . . . . . . . . . . . . . . . 6 + 1.3. Scope of This Specification . . . . . . . . . . . . . . . 6 + 2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.1. Use of Address Range 127/8 . . . . . . . . . . . . . . . 8 + 2.2. Router Alert Option . . . . . . . . . . . . . . . . . . . 10 + 3. Packet Format . . . . . . . . . . . . . . . . . . . . . . . . 11 + 3.1. Return Codes . . . . . . . . . . . . . . . . . . . . . . 16 + 3.2. Target FEC Stack . . . . . . . . . . . . . . . . . . . . 17 + 3.2.1. LDP IPv4 Prefix . . . . . . . . . . . . . . . . . . . 19 + 3.2.2. LDP IPv6 Prefix . . . . . . . . . . . . . . . . . . . 19 + 3.2.3. RSVP IPv4 LSP . . . . . . . . . . . . . . . . . . . . 20 + 3.2.4. RSVP IPv6 LSP . . . . . . . . . . . . . . . . . . . . 20 + 3.2.5. VPN IPv4 Prefix . . . . . . . . . . . . . . . . . . . 21 + 3.2.6. VPN IPv6 Prefix . . . . . . . . . . . . . . . . . . . 22 + 3.2.7. L2 VPN Endpoint . . . . . . . . . . . . . . . . . . . 23 + 3.2.8. FEC 128 Pseudowire - IPv4 (Deprecated) . . . . . . . 23 + 3.2.9. FEC 128 Pseudowire - IPv4 (Current) . . . . . . . . . 24 + 3.2.10. FEC 129 Pseudowire - IPv4 . . . . . . . . . . . . . . 25 + 3.2.11. FEC 128 Pseudowire - IPv6 . . . . . . . . . . . . . . 26 + 3.2.12. FEC 129 Pseudowire - IPv6 . . . . . . . . . . . . . . 27 + 3.2.13. BGP Labeled IPv4 Prefix . . . . . . . . . . . . . . . 28 + 3.2.14. BGP Labeled IPv6 Prefix . . . . . . . . . . . . . . . 28 + 3.2.15. Generic IPv4 Prefix . . . . . . . . . . . . . . . . . 29 + 3.2.16. Generic IPv6 Prefix . . . . . . . . . . . . . . . . . 29 + 3.2.17. Nil FEC . . . . . . . . . . . . . . . . . . . . . . . 29 + 3.3. Downstream Mapping (Deprecated) . . . . . . . . . . . . . 30 + 3.4. Downstream Detailed Mapping TLV . . . . . . . . . . . . . 30 + 3.4.1. Sub-TLVs . . . . . . . . . . . . . . . . . . . . . . 34 + 3.4.2. Downstream Router and Interface . . . . . . . . . . . 40 + 3.5. Pad TLV . . . . . . . . . . . . . . . . . . . . . . . . . 41 + 3.6. Vendor Enterprise Number . . . . . . . . . . . . . . . . 41 + 3.7. Interface and Label Stack . . . . . . . . . . . . . . . . 42 + 3.8. Errored TLVs . . . . . . . . . . . . . . . . . . . . . . 43 + 3.9. Reply TOS Octet TLV . . . . . . . . . . . . . . . . . . . 44 + 4. Theory of Operation . . . . . . . . . . . . . . . . . . . . . 44 + 4.1. Dealing with Equal-Cost Multipath (ECMP) . . . . . . . . 44 + 4.2. Testing LSPs That Are Used to Carry MPLS Payloads . . . . 45 + 4.3. Sending an MPLS Echo Request . . . . . . . . . . . . . . 46 + 4.4. Receiving an MPLS Echo Request . . . . . . . . . . . . . 47 + 4.4.1. FEC Validation . . . . . . . . . . . . . . . . . . . 53 + + + + + + + +Kompella, et al. Standards Track [Page 3] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 4.5. Sending an MPLS Echo Reply . . . . . . . . . . . . . . . 54 + 4.5.1. Addition of a New Tunnel . . . . . . . . . . . . . . 55 + 4.5.2. Transition between Tunnels . . . . . . . . . . . . . 56 + 4.6. Receiving an MPLS Echo Reply . . . . . . . . . . . . . . 56 + 4.7. Issue with VPN IPv4 and IPv6 Prefixes . . . . . . . . . . 58 + 4.8. Non-compliant Routers . . . . . . . . . . . . . . . . . . 59 + 5. Security Considerations . . . . . . . . . . . . . . . . . . . 59 + 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 61 + 6.1. TCP and UDP Port Number . . . . . . . . . . . . . . . . . 61 + 6.2. MPLS LSP Ping Parameters . . . . . . . . . . . . . . . . 61 + 6.2.1. Message Types, Reply Modes, Return Codes . . . . . . 61 + 6.2.2. TLVs . . . . . . . . . . . . . . . . . . . . . . . . 62 + 6.2.3. Global Flags . . . . . . . . . . . . . . . . . . . . 64 + 6.2.4. Downstream Detailed Mapping Address Type . . . . . . 64 + 6.2.5. DS Flags . . . . . . . . . . . . . . . . . . . . . . 65 + 6.2.6. Multipath Types . . . . . . . . . . . . . . . 66 + 6.2.7. Pad Type . . . . . . . . . . . . . . . . . . . . . . 66 + 6.2.8. Interface and Label Stack Address Type . . . . . . . 67 + 6.3. IPv4 Special-Purpose Address Registry . . . . . . . . . . 67 + 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 67 + 7.1. Normative References . . . . . . . . . . . . . . . . . . 67 + 7.2. Informative References . . . . . . . . . . . . . . . . . 68 + Appendix A. Deprecated TLVs and Sub-TLVs (Non-normative) . . . . 72 + A.1. Target FEC Stack . . . . . . . . . . . . . . . . . . . . 72 + A.1.1. FEC 128 Pseudowire - IPv4 (Deprecated) . . . . . . . 72 + A.2. Downstream Mapping (Deprecated) . . . . . . . . . . . . . 72 + Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 77 + Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 77 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 78 + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 4] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +1. Introduction + + This document describes a simple and efficient mechanism to detect + data-plane failures in MPLS Label Switched Paths (LSPs). It defines + a probe message called an "MPLS echo request" and a response message + called an "MPLS echo reply" for returning the result of the probe. + The MPLS echo request is intended to contain sufficient information + to check correct operation of the data plane, as well as a mechanism + to verify the data plane against the control plane, thereby + localizing faults. + + 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 this + specification updates that RFC. The motivation for this change and + the details of this exceptional use are discussed in Section 2.1 + below. + + This document obsoletes RFC 4379 [RFC4379], RFC 6424 [RFC6424], RFC + 6829 [RFC6829], and RFC 7537 [RFC7537]. + +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 [RFC2119]. + + 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. + + + + + + + +Kompella, et al. Standards Track [Page 5] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +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" (Section 4) first; + the document is structured the way it is to avoid forward references. + +1.3. Scope of This Specification + + The primary goal of this document is to provide a clean and updated + LSP ping specification. + + [RFC4379] defines the basic mechanism for MPLS LSP validation that + can be used for fault detection and isolation. The scope of this + document also includes various updates to MPLS LSP ping, including: + + o Update all references and citations. + + * Obsoleted RFCs 2434, 2030, and 3036 are respectively replaced + with RFCs 5226, 5905, and 5036. + + * Additionally, some informative references were published as + RFCs: RFCs 4761, 5085, 5885, and 8077. + + o Incorporate all outstanding RFC errata. + + * See [Err108], [Err742], [Err1418], [Err1714], [Err1786], + [Err2978], [Err3399]. + + o Replace EXP with Traffic Class (TC), based on the update from RFC + 5462. + + o Incorporate the updates from RFC 6829, by adding the pseudowire + (PW) Forwarding Equivalence Classes (FECs) advertised over IPv6 + and obsoleting RFC 6829. + + o Incorporate the updates from RFC 7506, by adding the IPv6 Router + Alert Option (RAO) for MPLS Operations, Administration, and + Maintenance (OAM). + + o Incorporate newly defined bits on the Global Flags field from RFCs + 6425 and 6426. + + o Update the IPv4 addresses used in examples to utilize the + documentation prefix. Add examples with IPv6 addresses. + + + + + +Kompella, et al. Standards Track [Page 6] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + o Incorporate the updates from RFC 6424, by deprecating the + Downstream Mapping TLV (DSMAP) and adding the Downstream Detailed + Mapping TLV (DDMAP); updating two new Return Codes; adding the + motivations of tunneled or stitched LSPs; updating the procedures, + IANA considerations, and security considerations; and obsoleting + RFC 6424. + + o Incorporate the updates from RFC 7537, by updating the IANA + Considerations section and obsoleting RFC 7537. + + o Finally, obsolete RFC 4379. + +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 [RFC0792]) 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 + 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 to + confirm 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. + + + + + + + +Kompella, et al. Standards Track [Page 7] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + An LSP traceroute may cross a tunneled or stitched LSP en route to + the destination. While performing end-to-end LSP validation in such + scenarios, the FEC information included in the packet by the + Initiator may be different from the one assigned by the transit node + in a different segment of a stitched LSP or tunnel. Let us consider + a simple case. + + A B C D E + o -------- o -------- o --------- o --------- o + \_____/ | \______/ \______/ | \______/ + LDP | RSVP RSVP | LDP + | | + \____________________/ + LDP + + When an LSP traceroute is initiated from Router A to Router E, the + FEC information included in the packet will be LDP while Router C + along the path is a pure RSVP node and does not run LDP. + Consequently, node C will be unable to perform FEC validation. The + MPLS echo request should contain sufficient information to allow any + transit node within a stitched or tunneled LSP to perform FEC + validations to detect any misrouted echo requests. + + One way these tools can be used is to periodically ping a 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 + 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 Multipath (ECMP) load sharing. + + + + + +Kompella, et al. Standards Track [Page 8] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 IPv4 link-local + addresses. Use of the private address space was deemed ineffective + since the leading MPLS-based service is an IPv4 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. Older + deployed routers may not (correctly) implement IPv4 link-local + addresses and 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 an + IPv4-mapped IPv6 address for IPv6 was chosen for a number of reasons. + + RFC 1122 allocates the 127/8 as the "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 + 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. + + + +Kompella, et al. Standards Track [Page 9] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 range provides an easy + means of identifying possible LSP packets. + +2.2. Router Alert Option + + This document requires the use of the RAO set in an IP header in + order to have the transit node process the MPLS OAM payload. + + [RFC2113] defines a generic Option Value 0x0 for IPv4 RAO that alerts + the transit router to examine the IPv4 packet. [RFC7506] defines + MPLS OAM Option Value 69 for IPv6 RAO to alert transit routers to + examine the IPv6 packet more closely for MPLS OAM purposes. + + The use of the Router Alert IP Option in this document is as follows: + + In case of an IPv4 header, the generic IPv4 RAO value 0x0 + [RFC2113] SHOULD be used. In case of an IPv6 header, the IPv6 RAO + value (69) for MPLS OAM [RFC7506] MUST be used. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 10] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3. Packet Format + + An MPLS echo request/reply 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 (seconds fraction) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Received (seconds) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TimeStamp Received (seconds fraction) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TLVs ... | + . . + . . + . . + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + 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.) + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 11] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 |R|T|V| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + At the time of writing, three flags are defined: the R, T, and V + bits; 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 T (Respond Only If TTL Expired) flag MUST be set only in the echo + request packet by the sender. If the T flag is set to 1 in an + incoming echo request, and the TTL of the incoming MPLS label is more + than 1, then the receiving node MUST drop the incoming echo request + and MUST NOT send any echo reply to the sender. This flag MUST NOT + be set in the echo reply packet. If this flag is set in an echo + reply packet, then it MUST be ignored. The T flag is defined in + Section 3.4 of [RFC6425]. + + The R (Validate Reverse Path) flag is defined in [RFC6426]. When + this flag is set in the echo request, the Responder SHOULD return + reverse-path FEC information, as described in Section 3.4.2 of + [RFC6426]. + + 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 + + + + + + +Kompella, et al. Standards Track [Page 12] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 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) [RFC5085][RFC5885]. 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 code point is application specific and thus beyond the scope of + this document. + + Return Codes and Subcodes are described in Section 3.1. + + 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 (according to the sender's + clock) in 64-bit NTP timestamp format [RFC5905] 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 64-bit NTP timestamp + format in which the corresponding echo request was received. + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 13] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + + Two examples of how TLV and sub-TLV lengths are computed, and how + sub-TLVs are padded to be 4-octet aligned, are 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type = 1 (LDP IPv4 FEC) | Length = 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 14] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 = 32 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + 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 (Deprecated) + 3 Pad + 4 Unassigned + 5 Vendor Enterprise Number + 6 Unassigned + 7 Interface and Label Stack + 8 Unassigned + 9 Errored TLVs + 10 Reply TOS Byte + 20 Downstream Detailed Mapping + + 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. + + + + + +Kompella, et al. Standards Track [Page 15] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + + In Sections 3.2 through 3.9 and their various subsections, only the + Value field of the TLV is included. + +3.1. Return Codes + + The Return Code is set to zero by the sender of an echo request. The + receiver of said echo request can set it to one of the values listed + below in the corresponding echo reply that it generates. 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> + 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 + 14 See DDMAP TLV for meaning of Return Code and Return + Subcode (See Note 2) + 15 Label switched with FEC change + + Note 1 + + The Return Subcode (RSC) contains the point in the label stack + where processing was terminated. If the RSC is 0, no labels were + processed. Otherwise, the packet was label switched at depth RSC. + + + + + +Kompella, et al. Standards Track [Page 16] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Note 2 + + The Return Code is per "Downstream Detailed Mapping TLV" + (Section 3.4). This Return Code MUST be used only in the message + header and MUST be set only in the MPLS echo reply message. If + the Return Code is set in the MPLS echo request message, then it + MUST be ignored. When this Return Code is set, each Downstream + Detailed Mapping TLV MUST have an appropriate Return Code and + Return Subcode. This Return Code MUST be used when there are + multiple downstreams for a given node (such as Point-to-Multipoint + (P2MP) or ECMP), and the node needs to return a Return Code/Return + Subcode for each downstream. This Return Code MAY be used even + when there is only one downstream for a given node. + +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 Unassigned + 6 13 VPN IPv4 prefix + 7 25 VPN IPv6 prefix + 8 14 L2 VPN endpoint + 9 10 "FEC 128" Pseudowire - IPv4 (deprecated) + 10 14 "FEC 128" Pseudowire - IPv4 + 11 16+ "FEC 129" Pseudowire - IPv4 + 12 5 BGP labeled IPv4 prefix + 13 17 BGP labeled IPv6 prefix + 14 5 Generic IPv4 prefix + 15 17 Generic IPv6 prefix + 16 4 Nil FEC + 24 38 "FEC 128" Pseudowire - IPv6 + 25 40+ "FEC 129" Pseudowire - IPv6 + + Other FEC types have been defined and 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. + + + + + + + +Kompella, et al. Standards Track [Page 17] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 + [RFC5036] for 192.0.2.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 a FEC Stack TLV with one + FEC in it, namely, of type LDP IPv4 prefix, with prefix 192.0.2.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 203.0.113.0/24 in VPN foo. Say further that LSR Y + with loopback address 192.0.2.1 announced prefix 203.0.113.0/24 with + Route Distinguisher (RD) RD-foo-Y (which may in general be different + from the RD that LSR X uses in its own advertisements for VPN foo), + label 23456, and BGP next hop 192.0.2.1 [RFC4271]. Finally, suppose + that LSR X receives a label binding of 1001 for 192.0.2.1 via LDP. X + has two choices in sending an MPLS echo request: X can send an MPLS + echo request with a FEC Stack TLV with a single FEC of type VPN IPv4 + prefix with a prefix of 203.0.113.0/24 and an RD of RD-foo-Y. + Alternatively, X can send a FEC Stack TLV with two FECs, the first of + type LDP IPv4 with a prefix of 192.0.2.1/32 and the second of type of + IP VPN with a prefix 203.0.113.0/24 with an RD 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.) + + If, for example, an LSR Y has an LDP mapping for the IPv6 address + 2001:db8::1 (say, label 2001), then to verify that label 2001 does + reach an egress LSR that announced this prefix via LDP, LSR Y can + send an MPLS echo request with a FEC Stack TLV with one LDP IPv6 + prefix FEC, with prefix 2001:db8::1/128, and with a label of 2001. + + If an end-to-end path comprises of one or more tunneled or stitched + LSPs, each transit node that is the originating point of a new tunnel + or segment SHOULD reply back notifying the FEC stack change along + with the new FEC details, for example, if LSR X has an LDP mapping + for IPv4 prefix 192.0.2.10 on LSR Z (say, label 3001). Say further + that LSR A and LSR B are transit nodes along the path, which also + have an RSVP tunnel over which LDP is enabled. While replying back, + A SHOULD notify that the FEC changes from LDP to <RSVP, LDP>. If the + new tunnel is a transparent pipe, i.e., the data-plane trace will not + expire in the middle of the tunnel, then the transit node SHOULD NOT + reply back notifying the FEC stack change or the new FEC details. If + the transit node wishes to hide the nature of the tunnel from the + ingress of the echo request, then the transit node MAY notify the FEC + stack change and include Nil FEC as the new FEC. + + + + + +Kompella, et al. Standards Track [Page 18] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.1. LDP IPv4 Prefix + + The IPv4 Prefix FEC is defined in [RFC5036]. 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 [RFC5036] for an example of a + Mapping for an IPv4 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 prefix | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prefix Length | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.2. LDP IPv6 Prefix + + The IPv6 Prefix FEC is defined in [RFC5036]. 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 [RFC5036] 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 19] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.3. RSVP IPv4 LSP + + The value has the format below. The Value fields are taken from RFC + 3209 [RFC3209], Sections 4.6.1.1 and 4.6.2.1. + + 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 Endpoint Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Extended Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 Tunnel Sender Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | LSP ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.4. RSVP IPv6 LSP + + The value has the format below. The Value fields are taken from RFC + 3209 [RFC3209], Sections 4.6.1.2 and 4.6.2.2. + + 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 Endpoint Address | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | Tunnel ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Extended Tunnel ID | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv6 Tunnel Sender Address | + | | + | | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Must Be Zero | LSP ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Kompella, et al. Standards Track [Page 20] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +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 [RFC3107]. + + When a VPN IPv4 prefix is encoded in a label stack, the following + format is used. The Value field consists of the RD 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 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. + + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 21] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.6. VPN IPv6 Prefix + + VPN-IPv6 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 [RFC3107]. + + When a VPN IPv6 prefix is encoded in a label stack, the following + format is used. The Value field consists of the RD 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The RD 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. + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 22] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.7. L2 VPN Endpoint + + VPLS stands for Virtual Private LAN Service. The terms VPLS BGP NLRI + and VPLS Edge Identifier (VE ID) are defined in [RFC4761]. This + document uses the simpler term L2 VPN endpoint when referring to a + VPLS BGP NLRI. The RD 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 Pseudowire (PW) Type in + Section 3.2.9. + + When an L2 VPN endpoint is encoded in a label stack, the following + format is used. The Value field consists of an RD (8 octets), the + sender's (of the ping) 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 - IPv4 (Deprecated) + + See Appendix A.1.1 for details. + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 23] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.9. FEC 128 Pseudowire - IPv4 (Current) + + FEC 128 (0x80) is defined in [RFC8077], 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 fields to the local FEC information, the match + MUST be exact. + + When a FEC 128 is encoded in a label stack, the following format is + used. The Value field consists of the Sender's Provider Edge (PE) + IPv4 Address (the source address of the targeted LDP session), the + Remote PE IPv4 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 IPv4 Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote PE IPv4 Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 24] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.10. FEC 129 Pseudowire - IPv4 + + 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 [RFC8077]. 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 IPv4 addresses. + + When a 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 IPv4 Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote PE IPv4 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + +Kompella, et al. Standards Track [Page 25] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.11. FEC 128 Pseudowire - IPv6 + + The FEC 128 Pseudowire IPv6 sub-TLV has a structure consistent with + the FEC 128 Pseudowire IPv4 sub-TLV as described in Section 3.2.9. + The Value field consists of the Sender's PE IPv6 Address (the source + address of the targeted LDP session), the Remote PE IPv6 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 IPv6 Address ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ Remote PE IPv6 Address ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PW Type | Must Be Zero | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Sender's PE IPv6 Address: The source IP address of the target IPv6 + LDP session. 16 octets. + + Remote PE IPv6 Address: The destination IP address of the target IPv6 + LDP session. 16 octets. + + PW ID: Same as FEC 128 Pseudowire IPv4 in Section 3.2.9. + + PW Type: Same as FEC 128 Pseudowire IPv4 in Section 3.2.9. + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 26] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.12. FEC 129 Pseudowire - IPv6 + + The FEC 129 Pseudowire IPv6 sub-TLV has a structure consistent with + the FEC 129 Pseudowire IPv4 sub-TLV as described in Section 3.2.10. + When a FEC 129 is encoded in a label stack, the following format is + used. The length of this TLV is 40 + AGI (Attachment Group + Identifier) length + SAII (Source Attachment Individual Identifier) + length + TAII (Target Attachment Individual Identifier) 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 IPv6 Address ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ Remote PE IPv6 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Sender's PE IPv6 Address: The source IP address of the target IPv6 + LDP session. 16 octets. + + Remote PE IPv6 Address: The destination IP address of the target IPv6 + LDP session. 16 octets. + + The other fields are the same as FEC 129 Pseudowire IPv4 in + Section 3.2.10. + + + + + + + + + + +Kompella, et al. Standards Track [Page 27] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.13. BGP Labeled IPv4 Prefix + + BGP labeled IPv4 prefixes are defined in [RFC3107]. When a BGP + labeled IPv4 prefix is encoded in a label stack, the following format + is used. The Value field consists of 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.14. BGP Labeled IPv6 Prefix + + BGP labeled IPv6 prefixes are defined in [RFC3107]. 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 28] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.2.15. 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, the + 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 [RFC3209] + 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +3.2.16. 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.17. 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. + + + + +Kompella, et al. Standards Track [Page 29] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + +3.3. Downstream Mapping (Deprecated) + + See Appendix A.2 for more details. + +3.4. Downstream Detailed Mapping TLV + + The Downstream Detailed Mapping object is a TLV that MAY be included + in an MPLS echo request message. Only one Downstream Detailed + Mapping object may appear in an echo request. The presence of a + Downstream Detailed Mapping object is a request that Downstream + Detailed Mapping objects be included in the MPLS echo reply. If the + replying router is the destination (Label Edge Router) of the FEC, + then a Downstream Detailed Mapping TLV SHOULD NOT be included in the + MPLS echo reply. Otherwise, the replying router SHOULD include a + Downstream Detailed 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.4.2, "Downstream Router and + Interface". + + 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 Address (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Interface Address (4 or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Return Code | Return Subcode| Sub-TLV Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . List of Sub-TLVs . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + +Kompella, et al. Standards Track [Page 30] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + The Downstream Detailed Mapping TLV format is derived from the + deprecated Downstream Mapping TLV format (see Appendix A.2.) The key + change is that variable length and optional fields have been + converted into sub-TLVs. + + 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. + + 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 Address Type is set + to one of the following values: + + Type # Address Type + ------ ------------ + 1 IPv4 Numbered + 2 IPv4 Unnumbered + 3 IPv6 Numbered + 4 IPv6 Unnumbered + + DS Flags + + The DS Flags field is a bit vector of various flags 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. + + + + + + + +Kompella, et al. Standards Track [Page 31] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + + Downstream 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 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 + 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 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 + 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 Detailed 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 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, et al. Standards Track [Page 32] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Return Code + + The Return Code is set to zero by the sender of an echo request. + The receiver of said echo request can set it in the corresponding + echo reply that it generates to one of the values specified in + Section 3.1 other than 14. + + If the receiver sets a non-zero value of the Return Code field in + the Downstream Detailed Mapping TLV, then the receiver MUST also + set the Return Code field in the echo reply header to "See DDMAP + TLV for Return Code and Return Subcode" (Section 3.1). An + exception to this is if the receiver is a bud node [RFC4461] and + is replying as both an egress and a transit node with a Return + Code of 3 ("Replying router is an egress for the FEC at stack- + depth <RSC>") in the echo reply header. + + If the Return Code of the echo reply message is not set to either + "See DDMAP TLV for Return Code and Return Subcode" (Section 3.1) + or "Replying router is an egress for the FEC at stack-depth + <RSC>", then the Return Code specified in the Downstream Detailed + Mapping TLV MUST be ignored. + + Return Subcode + + The Return Subcode is set to zero by the sender. The receiver can + set this field to an appropriate value as specified in + Section 3.1: The Return Subcode is filled in with the stack-depth + for those codes that specify the stack-depth. For all other + codes, the Return Subcode MUST be set to zero. + + If the Return Code of the echo reply message is not set to either + "See DDMAP TLV for Return Code and Return Subcode" (Section 3.1) + or "Replying router is an egress for the FEC at stack-depth + <RSC>", then the Return Subcode specified in the Downstream + Detailed Mapping TLV MUST be ignored. + + Sub-TLV Length + + Total length in octets of the sub-TLVs associated with this TLV. + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 33] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.4.1. Sub-TLVs + + This section defines the sub-TLVs that MAY be included as part of the + Downstream Detailed Mapping TLV. + + Sub-Type Value Field + --------- ------------ + 1 Multipath data + 2 Label stack + 3 FEC stack change + +3.4.1.1. Multipath Data Sub-TLV + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Multipath Type | Multipath Length |Reserved (MBZ) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + | (Multipath Information) | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The multipath data sub-TLV includes Multipath Information. + + Multipath Type + + The type of the encoding for the Multipath Information. + + The following Multipath Types are defined in this document: + + 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. + + + + + + +Kompella, et al. Standards Track [Page 34] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Multipath Length + + The length in octets of the Multipath Information. + + MBZ + + MUST be set to zero when sending; MUST be ignored on receipt. + + Multipath Information + + Encoded multipath data (e.g., encoded address or label values), + according to the Multipath Type. See Section 3.4.1.1.1 for + encoding details. + +3.4.1.1.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:7F00:0/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, et al. Standards Track [Page 35] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 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, et al. Standards Track [Page 36] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Detailed Mapping TLVs: 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 Detailed 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. + + The encoding of Multipath Information in scenarios where a few LSRs + apply Entropy-label-based load-balancing while other LSRs are non-EL + (IP-based) load balanced will be defined in a different document. + + The encoding of Multipath Information in scenarios where LSRs have + Layer 2 ECMP over Link Aggregation Group (LAG) interfaces will be + defined in a different document. + +3.4.1.2. Label Stack Sub-TLV + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Label | Protocol | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Downstream Label | Protocol | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The Label Stack sub-TLV contains 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. The number of label/protocol pairs present in the sub-TLV + is determined based on the sub-TLV data length. When the Downstream + Detailed Mapping TLV is sent in the echo reply, this sub-TLV MUST be + included. + + + +Kompella, et al. Standards Track [Page 37] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Downstream Label + + 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 TC field [RFC5462] is bits 20-22, and S is + bit 23. The replying router SHOULD fill in the TC field and S + bit; the LSR receiving the echo reply MAY choose to ignore these. + + Protocol + + This specifies the label distribution protocol for the Downstream + label. Protocol values are taken from the following table: + + Protocol # Signaling Protocol + ---------- ------------------ + 0 Unknown + 1 Static + 2 BGP + 3 LDP + 4 RSVP-TE + +3.4.1.3. FEC Stack Change Sub-TLV + + A router MUST include the FEC stack change sub-TLV when the + downstream node in the echo reply has a different FEC Stack than the + FEC Stack received in the echo request. One or more FEC stack change + sub-TLVs MAY be present in the Downstream Detailed Mapping TLV. The + format is as below. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Operation Type | Address Type | FEC-tlv length| Reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Remote Peer Address (0, 4, or 16 octets) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . FEC TLV . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + +Kompella, et al. Standards Track [Page 38] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Operation Type + + The operation type specifies the action associated with the FEC + stack change. The following operation types are defined: + + Type # Operation + ------ --------- + 1 Push + 2 Pop + + Address Type + + The Address Type indicates the remote peer's address type. The + Address Type is set to one of the following values. The length of + the peer address is determined based on the address type. The + address type MAY be different from the address type included in + the Downstream Detailed Mapping TLV. This can happen when the LSP + goes over a tunnel of a different address family. The address + type MAY be set to Unspecified if the peer address is either + unavailable or the transit router does not wish to provide it for + security or administrative reasons. + + Type # Address Type Address length + ------ ------------ -------------- + 0 Unspecified 0 + 1 IPv4 4 + 2 IPv6 16 + + FEC TLV Length + + Length in octets of the FEC TLV. + + Reserved + + This field is reserved for future use and MUST be set to zero. + + Remote Peer Address + + The remote peer address specifies the remote peer that is the next + hop for the FEC being currently traced. If the operation type is + PUSH, the remote peer address is the address of the peer from + which the FEC being pushed was learned. If the operation type is + pop, the remote peer address MAY be set to Unspecified. + + For upstream-assigned labels [RFC5331], an operation type of pop + will have a remote peer address (the upstream node that assigned + the label), and this SHOULD be included in the FEC stack change + + + + +Kompella, et al. Standards Track [Page 39] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + sub-TLV. The remote peer address MAY be set to Unspecified if the + address needs to be hidden. + + FEC TLV + + The FEC TLV is present only when the FEC-tlv length field is non- + zero. The FEC TLV specifies the FEC associated with the FEC stack + change operation. This TLV MAY be included when the operation + type is pop. It MUST be included when the operation type is PUSH. + The FEC TLV contains exactly one FEC from the list of FECs + specified in Section 3.2. A Nil FEC MAY be associated with a PUSH + operation if the responding router wishes to hide the details of + the FEC being pushed. + + FEC stack change sub-TLV operation rules are as follows: + + a. A FEC stack change sub-TLV containing a PUSH operation MUST NOT + be followed by a FEC stack change sub-TLV containing a pop + operation. + + b. One or more pop operations MAY be followed by one or more PUSH + operations. + + c. One FEC stack change sub-TLV MUST be included per FEC stack + change. For example, if 2 labels are going to be pushed, then + one FEC stack change sub-TLV MUST be included for each FEC. + + d. A FEC splice operation (an operation where one FEC ends and + another FEC starts, MUST be performed by including a pop type FEC + stack change sub-TLV followed by a PUSH type FEC stack change + sub-TLV. + + e. A Downstream Detailed Mapping TLV containing only one FEC stack + change sub-TLV with pop operation is equivalent to IS_EGRESS + (Return Code 3, Section 3.1) for the outermost FEC in the FEC + stack. The ingress router performing the LSP traceroute MUST + treat such a case as an IS_EGRESS for the outermost FEC. + +3.4.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/ + + + +Kompella, et al. Standards Track [Page 40] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + interfaces (and their corresponding labels) for X with respect to L. + Each pair of downstream router and interface requires a separate + Downstream Detailed 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. + +3.5. 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 + ----- ------- + 0 Reserved + 1 Drop Pad TLV from reply + 2 Copy Pad TLV to reply + 3-250 Unassigned + 251-254 Reserved for Experimental Use + 255 Reserved + + The Pad TLV can be added to an echo request to create a message of a + specific length in cases where messages of various sizes are needed + for troubleshooting. The first octet allows for controlling the + inclusion of this additional padding in the respective echo reply. + +3.6. Vendor Enterprise Number + + "Private Enterprise Numbers" [IANA-ENT] are maintained by IANA. The + Length of this TLV is always 4; the value is the Structure of + Management Information (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. + + + +Kompella, et al. Standards Track [Page 41] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.7. 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. + + 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 this 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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 + ------ ------------ -------- + 0 Reserved 4 + 1 IPv4 Numbered 12 + 2 IPv4 Unnumbered 12 + 3 IPv6 Numbered 36 + 4 IPv6 Unnumbered 24 + 5-250 Unassigned + 251-254 Reserved for Experimental Use + 255 Reserved + + + +Kompella, et al. Standards Track [Page 42] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + + 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.8. 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 | + . . + . . + . . + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + +Kompella, et al. Standards Track [Page 43] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +3.9. Reply TOS Octet 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 Type of Service (TOS) + octet 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +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 a label is mapped to an egress IP address of + 198.51.100.1, the FEC Stack contains a single element, namely, an LDP + IPv4 prefix sub-TLV with value 198.51.100.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 203.0.113.0/24 that is tunneled over an LDP LSP + with egress 192.0.2.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. + +4.1. Dealing with Equal-Cost Multipath (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. + + + + + +Kompella, et al. Standards Track [Page 44] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Regarding the last two points stated above: 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 + 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 Detailed Mapping TLV. This + is used as follows. An ingress LSR periodically sends an LSP + traceroute message to determine whether there are multipaths for a + given LSP. If so, each hop will provide some information as to 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 + ascertain 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 to unlabeled interfaces. + + + + + + + + + +Kompella, et al. Standards Track [Page 45] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +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 an IPv6 address from the range + 0:0:0:0:0:FFFF:7F00:0/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 IP + Option of value 0x0 [RFC2113] for IPv4 or value 69 [RFC7506] for IPv6 + 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 [RFC3209]. 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 + 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 [RFC5085][RFC5885]. + + 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 NTP format that the + echo request is sent. The TimeStamp Received is set to zero. + + An MPLS echo request MUST have a 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 Detailed Mapping TLV. + + + +Kompella, et al. Standards Track [Page 46] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +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 the stack is considered to be a + 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 Return 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. + + 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 set to + zero. If there are any TLVs not marked as "Ignore" (i.e., if the + TLV type is less than 32768, see Section 3) that LSR X does not + understand, LSR X SHOULD send an MPLS "TLV not understood" (as + appropriate), and set the Subcode 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 field's 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 "Label stack + sub-TLV" in the Downstream Detailed Mapping TLV + (not always present). + + Label-L: the label from the actual stack currently being + examined. Requires no initialization. + + + + + +Kompella, et al. Standards Track [Page 47] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Label-stack-depth: the depth of the 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 the 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 */ + + 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 that it is 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 */ + + + +Kompella, et al. Standards Track [Page 48] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Label-L { + + /* Indicates a temporary or permanent label synchronization + problem, and 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 + Next Hop Label Forwarding Entry (NHLFE), and proceed to step 4 + (Label Operation Check). + + } + + 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 Detailed Mapping TLV is present in the received + echo request { + + If the IP address in the TLV is 127.0.0.1 or 0::1 { + + + + + +Kompella, et al. Standards Track [Page 49] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Detailed 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 */ + + 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 go to step 7 + (Send Reply Packet). + + } + + If a Downstream Detailed Mapping TLV is present { + + A Downstream Detailed Mapping TLV SHOULD be included in + the echo reply (see Section 3.4) filled in with + information about the current ECMP path. + + } + + } + + + + + +Kompella, et al. Standards Track [Page 50] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + If no Downstream Detailed 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 Detailed + 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 Detailed + 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 be 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 FECs in the FEC stack is greater than or equal + to FEC-stack-depth { + Perform the FEC Checking procedure (see Section 4.4.1). + + 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). + } + + + + + + + + +Kompella, et al. Standards Track [Page 51] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 5. Egress Processing: + + /* These steps are performed by the LSR that identified itself as + the tail-end LSR for an LSP. */ + + If the received echo request contains no Downstream Detailed + 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 Detailed Mapping TLV match Interface-I and Stack-R. + If not, set Best-return-code to 5, "Downstream Mapping Mismatch". + 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 + Section 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. + 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). + } + + + + +Kompella, et al. Standards Track [Page 52] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Section 4.5. + +4.4.1. FEC Validation + + /* This section describes validation of a FEC entry within the Target + FEC Stack and accepts a FEC, Label-L, and Interface-I. + + If the outermost FEC of the Target FEC stack is the Nil FEC, then the + node MUST skip the Target FEC validation completely. This is to + support FEC hiding, in which the outer hidden FEC can be the Nil FEC. + Else, 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 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. + + + + + + +Kompella, et al. Standards Track [Page 53] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 5. This is a protocol check. Check what protocol would be used to + advertise the FEC. If it can be determined that no protocol + associated with Interface-I would have advertised a 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 of value 0x0 [RFC2113] for IPv4 or 69 + [RFC7506] for IPv6. If the reply is sent over an LSP, the topmost + label MUST in this case be the Router Alert label (1) (see + [RFC3032]). + + 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 section. + + 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 + Detailed Mapping TLVs SHOULD NOT be included in the echo reply. + + If the echo request contains a Downstream Detailed 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 Detailed Mapping TLVs for each + one to the echo reply it sends back. A replying node should follow + the procedures defined in Section 4.5.1 if there is a FEC stack + change due to tunneled LSP. If the FEC stack change is due to + stitched LSP, it should follow the procedures defined in + Section 4.5.2. + + + +Kompella, et al. Standards Track [Page 54] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + If the Downstream Detailed 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 + Detailed 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.5.1. Addition of a New Tunnel + + A transit node knows when the FEC being traced is going to enter a + tunnel at that node. Thus, it knows about the new outer FEC. All + transit nodes that are the origination point of a new tunnel SHOULD + add the FEC stack change sub-TLV (Section 3.4.1.3) to the Downstream + Detailed Mapping TLV in the echo reply. The transit node SHOULD add + one FEC stack change sub-TLV of operation type PUSH, per new tunnel + being originated at the transit node. + + A transit node that sends a Downstream FEC stack change sub-TLV in + the echo reply SHOULD fill the address of the remote peer, which is + the peer of the current LSP being traced. If the transit node does + not know the address of the remote peer, it MUST set the address type + to Unspecified. + + The Label Stack sub-TLV MUST contain one additional label per FEC + being PUSHed. The label MUST be encoded as defined in + Section 3.4.1.2. The label value MUST be the value used to switch + the data traffic. If the tunnel is a transparent pipe to the node, + i.e., the data-plane trace will not expire in the middle of the new + tunnel, then a FEC stack change sub-TLV SHOULD NOT be added, and the + Label Stack sub-TLV SHOULD NOT contain a label corresponding to the + hidden tunnel. + + If the transit node wishes to hide the nature of the tunnel from the + ingress of the echo request, then it MAY not want to send details + about the new tunnel FEC to the ingress. In such a case, the transit + node SHOULD use the Nil FEC. The echo reply would then contain a FEC + stack change sub-TLV with operation type PUSH and a Nil FEC. The + value of the label in the Nil FEC MUST be set to zero. The remote + peer address type MUST be set to Unspecified. The transit node + SHOULD add one FEC stack change sub-TLV of operation type PUSH, per + new tunnel being originated at the transit node. The Label Stack + sub-TLV MUST contain one additional label per FEC being PUSHed. The + label value MUST be the value used to switch the data traffic. + + + +Kompella, et al. Standards Track [Page 55] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +4.5.2. Transition between Tunnels + + A transit node stitching two LSPs SHOULD include two FEC stack change + sub-TLVs. One with a pop operation for the old FEC (ingress) and one + with the PUSH operation for the new FEC (egress). The replying node + SHOULD set the Return Code to "Label switched with FEC change" to + indicate change in the FEC being traced. + + If the replying node wishes to perform FEC hiding, it SHOULD respond + back with two FEC stack change sub-TLVs, one pop followed by one + PUSH. The pop operation MAY either exclude the FEC TLV (by setting + the FEC TLV length to 0) or set the FEC TLV to contain the LDP FEC. + The PUSH operation SHOULD have the FEC TLV containing the Nil FEC. + The Return Code SHOULD be set to "Label switched with FEC change". + + If the replying node wishes to perform FEC hiding, it MAY choose to + not send any FEC stack change sub-TLVs in the echo reply if the + number of labels does not change for the downstream node and the FEC + type also does not change (Nil FEC). In such case, the replying node + MUST NOT set the Return Code to "Label switched with FEC change". + +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 Detailed Mappings, and X wishes + to traceroute further, it SHOULD copy the Downstream Detailed + Mapping(s) into its next echo request(s) (with TTL incremented by + one). + + If one or more FEC stack change sub-TLVs are received in the MPLS + echo reply, the ingress node SHOULD process them and perform some + validation. + + The FEC stack changes are associated with a downstream neighbor and + along a particular path of the LSP. Consequently, the ingress will + need to maintain a FEC stack per path being traced (in case of + multipath). All changes to the FEC stack resulting from the + processing of a FEC stack change sub-TLV(s) should be applied only + for the path along a given downstream neighbor. The following + algorithm should be followed for processing FEC stack change + sub-TLVs. + + + +Kompella, et al. Standards Track [Page 56] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + push_seen = FALSE + fec_stack_depth = current-depth-of-fec-stack-being-traced + saved_fec_stack = current_fec_stack + + while (sub-tlv = get_next_sub_tlv(downstream_detailed_map_tlv)) + + if (sub-tlv == NULL) break + + if (sub-tlv.type == FEC-Stack-Change) { + + if (sub-tlv.operation == POP) { + if (push_seen) { + Drop the echo reply + current_fec_stack = saved_fec_stack + return + } + + if (fec_stack_depth == 0) { + Drop the echo reply + current_fec_stack = saved_fec_stack + return + } + + Pop FEC from FEC stack being traced + fec_stack_depth--; + } + + if (sub-tlv.operation == PUSH) { + push_seen = 1 + Push FEC on FEC stack being traced + fec_stack_depth++; + } + } + } + + + if (fec_stack_depth == 0) { + Drop the echo reply + current_fec_stack = saved_fec_stack + return + } + + The next MPLS echo request along the same path should use the + modified FEC stack obtained after processing the FEC stack change + sub-TLVs. A non-Nil FEC guarantees that the next echo request along + the same path will have the Downstream Detailed Mapping TLV validated + for IP address, interface address, and label stack mismatches. + + + + +Kompella, et al. Standards Track [Page 57] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + If the top of the FEC stack is a Nil FEC and the MPLS echo reply does + not contain any FEC stack change sub-TLVs, then it does not + necessarily mean that the LSP has not started traversing a different + tunnel. It could be that the LSP associated with the Nil FEC + terminated at a transit node, and at the same time, a new LSP started + at the same transit node. The Nil FEC would now be associated with + the new LSP (and the ingress has no way of knowing this). Thus, it + is not possible to build an accurate hierarchical LSP topology if a + traceroute contains Nil FECs. + + A reply from a downstream node with Return Code 3, may not + necessarily be for the FEC being traced. It could be for one of the + new FECs that was added. On receipt of an IS_EGRESS reply, the LSP + ingress should check if the depth of Target FEC sent to the node that + just responded was the same as the depth of the FEC that was being + traced. If it was not, then it should pop an entry from the Target + FEC stack and resend the request with the same TTL (as previously + sent). The process of popping a FEC is to be repeated until either + the LSP ingress receives a non-IS_EGRESS reply or until all the + additional FECs added to the FEC stack have already been popped. + Using an IS_EGRESS reply, an ingress can build a map of the + hierarchical LSP structure traversed by a given FEC. + + When the MPLS echo reply Return Code is "Label switched with FEC + change", the ingress node SHOULD manipulate the FEC stack as per the + FEC stack change sub-TLVs contained in the Downstream Detailed + Mapping TLV. A transit node can use this Return Code for stitched + LSPs and for hierarchical LSPs. In case of ECMP or P2MP, there could + be multiple paths and Downstream Detailed Mapping TLVs with different + Return Codes (see Section 3.1, Note 2). The ingress node should + build the topology based on the Return Code per ECMP path/P2MP + branch. + +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 to + send back Return Code 13. In that case, the initiating LSR can retry + + + + +Kompella, et al. Standards Track [Page 58] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + +4.8. Non-compliant Routers + + If the egress for the FEC Stack being pinged does not support LSP + ping, then no reply will be sent, resulting in possible "false + negatives". When in "traceroute" mode, if 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 the Downstream Detailed Mapping TLV "Downstream + IP Address" field set to the ALLROUTERs multicast address until a + reply is received with a Downstream Detailed Mapping TLV. The label + Stack TLV MAY be omitted from the Downstream Detailed Mapping TLV. + Furthermore, the "Validate FEC Stack" flag SHOULD NOT be set until an + echo reply packet with a Downstream Detailed Mapping TLV is received. + +5. 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 (DoS) 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. + + To avoid potential DoS 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 in Section 6.1. + + 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 an exact match on this field. + + + + +Kompella, et al. Standards Track [Page 59] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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. + + The value part of the Pad TLV contains a variable number of octets. + With the exception of the first octet, these contents, if any, are + ignored on receipt, and can therefore serve as a clandestine channel. + + When MPLS LSP ping is used within an administrative domain, a + deployment can increase security by using border filtering of + incoming LSP ping packets as well as outgoing LSP ping packets. + + Although this document makes special use of 127/8 addresses, 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". + + If a network operator wants to prevent tracing inside a tunnel, one + can use the Pipe Model [RFC3443], i.e., hide the outer MPLS tunnel by + not propagating the MPLS TTL into the outer tunnel (at the start of + the outer tunnel). By doing this, LSP traceroute packets will not + expire in the outer tunnel, and the outer tunnel will not get traced. + + If one doesn't wish to expose the details of the new outer LSP, then + the Nil FEC can be used to hide those details. Using the Nil FEC + ensures that the trace progresses without false negatives and all + transit nodes (of the new outer tunnel) perform some minimal + validations on the received MPLS echo requests. + + + + + + +Kompella, et al. Standards Track [Page 60] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +6. IANA Considerations + +6.1. TCP and UDP Port Number + + The TCP and UDP port number 3503 has been allocated by IANA for LSP + echo requests and replies. + +6.2. MPLS LSP Ping Parameters + + IANA maintains the "Multiprotocol Label Switching (MPLS) Label + Switched Paths (LSPs) Ping Parameters" registry at + [IANA-MPLS-LSP-PING]. + + The following subsections detail the name spaces managed by IANA. + For some 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 + [RFC5226]), "Specification Required", and "Vendor Private Use". + + Values from "Specification Required" ranges MUST be registered with + IANA. The request MUST be made via an 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. + +6.2.1. Message Types, Reply Modes, Return Codes + + 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. + + + + + + + + +Kompella, et al. Standards Track [Page 61] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Message Types defined in this document are the following: + + Value Meaning + ----- ------- + 1 MPLS Echo Request + 2 MPLS Echo Reply + + 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. + + IANA has updated the reference for each these values to this + document. + +6.2.2. TLVs + + IANA has created and maintains a registry for the Type field of top- + level TLVs as well as for any associated sub-TLVs. Note that 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 + ranges 0-16383 and 32768-49161 are made via Standards Action as + defined in [RFC5226]; assignments in the ranges 16384-31743 and + 49162-64511 are made via "Specification Required"; values in the + ranges 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, et al. Standards Track [Page 62] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Unassigned + 6 VPN IPv4 prefix + 7 VPN IPv6 prefix + 8 L2 VPN endpoint + 9 "FEC 128" Pseudowire - IPv4 (Deprecated) + 10 "FEC 128" Pseudowire - IPv4 + 11 "FEC 129" Pseudowire - IPv4 + 12 BGP labeled IPv4 prefix + 13 BGP labeled IPv6 prefix + 14 Generic IPv4 prefix + 15 Generic IPv6 prefix + 16 Nil FEC + 24 "FEC 128" Pseudowire - IPv6 + 25 "FEC 129" Pseudowire - IPv6 + 2 Downstream Mapping (Deprecated) + 3 Pad + 4 Unassigned + 5 Vendor Enterprise Number + 6 Unassigned + 7 Interface and Label Stack + 8 Unassigned + 9 Errored TLVs + Any value The TLV not understood + 10 Reply TOS Byte + 20 Downstream Detailed Mapping + + IANA has updated the reference for each of these values to this + document. + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 63] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +6.2.3. Global Flags + + IANA has created a "Global Flags" subregistry of the "Multiprotocol + Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" + registry. + + This registry tracks the assignment of 16 flags in the Global Flags + field of the MPLS LSP ping echo request message. The flags are + numbered from 0 (most significant bit, transmitted first) to 15. + + New entries are assigned by Standards Action. + + Initial entries in the registry are as follows: + + Bit number | Name | Reference + ------------+----------------------------+-------------- + 15 | V Flag | [RFC8029] + 14 | T Flag | [RFC6425] + 13 | R Flag | [RFC6426] + 12-0 | Unassigned | [RFC8029] + +6.2.4. Downstream Detailed Mapping Address Type + + This document extends RFC 4379 by defining a new address type for use + with the Downstream Mapping and Downstream Detailed Mapping TLVs. + IANA has established a registry to assign address types for use with + the Downstream Mapping and Downstream Detailed Mapping TLVs, which + initially allocates the following assignments: + + Type # Address Type K Octets Reference + ------ ------------ -------- --------- + 1 IPv4 Numbered 16 [RFC8029] + 2 IPv4 Unnumbered 16 [RFC8029] + 3 IPv6 Numbered 40 [RFC8029] + 4 IPv6 Unnumbered 28 [RFC8029] + 5 Non IP 12 [RFC6426] + + Downstream Detailed Mapping Address Type Registry + + Because the field in this case is an 8-bit field, the allocation + policy for this registry is "Standards Action". + + + + + + + + + + +Kompella, et al. Standards Track [Page 64] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +6.2.5. DS Flags + + This document defines the Downstream Mapping (DSMAP) TLV and the + Downstream Detailed Mapping (DDMAP) TLV, which have Type 2 and Type + 20, respectively, assigned from the "TLVs" subregistry of the + "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) + Ping Parameters" registry. + + DSMAP has been deprecated by DDMAP, but both TLVs share a field: DS + Flags. + + IANA has created and now maintains a registry entitled "DS Flags". + + The registration policy for this registry is Standards Action + [RFC5226]. + + IANA has made the following assignments: + + Bit Number Name Reference + ---------- ------------------------------------------- --------- + 7 N: Treat as a Non-IP Packet [RFC8029] + 6 I: Interface and Label Stack Object Request [RFC8029] + 5 E: ELI/EL push indicator [RFC8012] + 4 L: Label-based load balance indicator [RFC8012] + 3-0 Unassigned + + + + + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 65] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +6.2.6. Multipath Types + + IANA has created and now maintains a registry entitled "Multipath + Types". + + The registration policy [RFC5226] for this registry is Standards + Action. + + IANA has made the following assignments: + + Value Meaning Reference + ---------- ---------------------------------------- --------- + 0 no multipath [RFC8029] + 1 Unassigned + 2 IP address [RFC8029] + 3 Unassigned + 4 IP address range [RFC8029] + 5-7 Unassigned + 8 Bit-masked IP address set [RFC8029] + 9 Bit-masked label set [RFC8029] + 10 IP and label set [RFC8012] + 11-250 Unassigned + 251-254 Reserved for Experimental Use [RFC8029] + 255 Reserved [RFC8029] + +6.2.7. Pad Type + + IANA has created and now maintains a registry entitled "Pad Types". + + The registration policy [RFC5226] for this registry is Standards + Action. + + IANA has made the following initial assignments: + + Registry Name: Pad Types + + Value Meaning Reference + ---------- ---------------------------------------- --------- + 0 Reserved [RFC8029] + 1 Drop Pad TLV from reply [RFC8029] + 2 Copy Pad TLV to reply [RFC8029] + 3-250 Unassigned + 251-254 Experimental Use [RFC8029] + 255 Reserved [RFC8029] + + + + + + + +Kompella, et al. Standards Track [Page 66] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +6.2.8. Interface and Label Stack Address Type + + IANA has created and now maintains a registry entitled "Interface and + Label Stack Address Types". + + The registration policy [RFC5226] for this registry is Standards + Action. + + IANA has made the following initial assignments: + + Registry Name: Interface and Label Stack Address Types + + Value Meaning Reference + ---------- ---------------------------------------- --------- + 0 Reserved [RFC8029] + 1 IPv4 Numbered [RFC8029] + 2 IPv4 Unnumbered [RFC8029] + 3 IPv6 Numbered [RFC8029] + 4 IPv6 Unnumbered [RFC8029] + 5-250 Unassigned + 251-254 Experimental Use [RFC8029] + 255 Reserved [RFC8029] + +6.3. IPv4 Special-Purpose Address Registry + + IANA has updated the reference in Note 1 of the "IANA IPv4 Special- + Purpose Address Registry" [IANA-SPECIAL-IPv4] to point to this + document. + +7. References + +7.1. Normative References + + [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - + Communication Layers", STD 3, RFC 1122, + DOI 10.17487/RFC1122, October 1989, + <http://www.rfc-editor.org/info/rfc1122>. + + [RFC1812] Baker, F., Ed., "Requirements for IP Version 4 Routers", + RFC 1812, DOI 10.17487/RFC1812, June 1995, + <http://www.rfc-editor.org/info/rfc1812>. + + [RFC2113] Katz, D., "IP Router Alert Option", RFC 2113, + DOI 10.17487/RFC2113, February 1997, + <http://www.rfc-editor.org/info/rfc2113>. + + + + + + +Kompella, et al. Standards Track [Page 67] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <http://www.rfc-editor.org/info/rfc2119>. + + [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., + Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack + Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, + <http://www.rfc-editor.org/info/rfc3032>. + + [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A + Border Gateway Protocol 4 (BGP-4)", RFC 4271, + DOI 10.17487/RFC4271, January 2006, + <http://www.rfc-editor.org/info/rfc4271>. + + [RFC4379] Kompella, K. and G. Swallow, "Detecting Multi-Protocol + Label Switched (MPLS) Data Plane Failures", RFC 4379, + DOI 10.17487/RFC4379, February 2006, + <http://www.rfc-editor.org/info/rfc4379>. + + [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an + IANA Considerations Section in RFCs", BCP 26, RFC 5226, + DOI 10.17487/RFC5226, May 2008, + <http://www.rfc-editor.org/info/rfc5226>. + + [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, + "Network Time Protocol Version 4: Protocol and Algorithms + Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, + <http://www.rfc-editor.org/info/rfc5905>. + + [RFC6424] Bahadur, N., Kompella, K., and G. Swallow, "Mechanism for + Performing Label Switched Path Ping (LSP Ping) over MPLS + Tunnels", RFC 6424, DOI 10.17487/RFC6424, November 2011, + <http://www.rfc-editor.org/info/rfc6424>. + + [RFC7506] Raza, K., Akiya, N., and C. Pignataro, "IPv6 Router Alert + Option for MPLS Operations, Administration, and + Maintenance (OAM)", RFC 7506, DOI 10.17487/RFC7506, April + 2015, <http://www.rfc-editor.org/info/rfc7506>. + +7.2. Informative References + + [Err108] RFC Errata, Erratum ID 108, RFC 4379. + + [Err742] RFC Errata, Erratum ID 742, RFC 4379. + + [Err1418] RFC Errata, Erratum ID 1418, RFC 4379. + + + + +Kompella, et al. Standards Track [Page 68] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + [Err1714] RFC Errata, Erratum ID 1714, RFC 4379. + + [Err1786] RFC Errata, Erratum ID 1786, RFC 4379. + + [Err2978] RFC Errata, Erratum ID 2978, RFC 4379. + + [Err3399] RFC Errata, Erratum ID 3399, RFC 4379. + + [IANA-ENT] IANA, "PRIVATE ENTERPRISE NUMBERS", + <http://www.iana.org/assignments/enterprise-numbers>. + + [IANA-MPLS-LSP-PING] + IANA, "Multiprotocol Label Switching (MPLS) Label Switched + Paths (LSPs) Ping Parameters", + <http://www.iana.org/assignments/ + mpls-lsp-ping-parameters>. + + [IANA-SPECIAL-IPv4] + IANA, "IANA IPv4 Special-Purpose Address Registry", + <http://www.iana.org/assignments/ + iana-ipv4-special-registry>. + + [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, + RFC 792, DOI 10.17487/RFC0792, September 1981, + <http://www.rfc-editor.org/info/rfc792>. + + [RFC3107] Rekhter, Y. and E. Rosen, "Carrying Label Information in + BGP-4", RFC 3107, DOI 10.17487/RFC3107, May 2001, + <http://www.rfc-editor.org/info/rfc3107>. + + [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., + and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP + Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, + <http://www.rfc-editor.org/info/rfc3209>. + + [RFC3443] Agarwal, P. and B. Akyol, "Time To Live (TTL) Processing + in Multi-Protocol Label Switching (MPLS) Networks", + RFC 3443, DOI 10.17487/RFC3443, January 2003, + <http://www.rfc-editor.org/info/rfc3443>. + + [RFC4026] Andersson, L. and T. Madsen, "Provider Provisioned Virtual + Private Network (VPN) Terminology", RFC 4026, + DOI 10.17487/RFC4026, March 2005, + <http://www.rfc-editor.org/info/rfc4026>. + + + + + + + +Kompella, et al. Standards Track [Page 69] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + [RFC4365] Rosen, E., "Applicability Statement for BGP/MPLS IP + Virtual Private Networks (VPNs)", RFC 4365, + DOI 10.17487/RFC4365, February 2006, + <http://www.rfc-editor.org/info/rfc4365>. + + [RFC4461] Yasukawa, S., Ed., "Signaling Requirements for Point-to- + Multipoint Traffic-Engineered MPLS Label Switched Paths + (LSPs)", RFC 4461, DOI 10.17487/RFC4461, April 2006, + <http://www.rfc-editor.org/info/rfc4461>. + + [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private + LAN Service (VPLS) Using BGP for Auto-Discovery and + Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, + <http://www.rfc-editor.org/info/rfc4761>. + + [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., + "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, + October 2007, <http://www.rfc-editor.org/info/rfc5036>. + + [RFC5085] Nadeau, T., Ed. and C. Pignataro, Ed., "Pseudowire Virtual + Circuit Connectivity Verification (VCCV): A Control + Channel for Pseudowires", RFC 5085, DOI 10.17487/RFC5085, + December 2007, <http://www.rfc-editor.org/info/rfc5085>. + + [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream + Label Assignment and Context-Specific Label Space", + RFC 5331, DOI 10.17487/RFC5331, August 2008, + <http://www.rfc-editor.org/info/rfc5331>. + + [RFC5462] Andersson, L. and R. Asati, "Multiprotocol Label Switching + (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic + Class" Field", RFC 5462, DOI 10.17487/RFC5462, February + 2009, <http://www.rfc-editor.org/info/rfc5462>. + + [RFC5885] Nadeau, T., Ed. and C. Pignataro, Ed., "Bidirectional + Forwarding Detection (BFD) for the Pseudowire Virtual + Circuit Connectivity Verification (VCCV)", RFC 5885, + DOI 10.17487/RFC5885, June 2010, + <http://www.rfc-editor.org/info/rfc5885>. + + [RFC6425] Saxena, S., Ed., Swallow, G., Ali, Z., Farrel, A., + Yasukawa, S., and T. Nadeau, "Detecting Data-Plane + Failures in Point-to-Multipoint MPLS - Extensions to LSP + Ping", RFC 6425, DOI 10.17487/RFC6425, November 2011, + <http://www.rfc-editor.org/info/rfc6425>. + + + + + + +Kompella, et al. Standards Track [Page 70] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + [RFC6426] Gray, E., Bahadur, N., Boutros, S., and R. Aggarwal, "MPLS + On-Demand Connectivity Verification and Route Tracing", + RFC 6426, DOI 10.17487/RFC6426, November 2011, + <http://www.rfc-editor.org/info/rfc6426>. + + [RFC6829] Chen, M., Pan, P., Pignataro, C., and R. Asati, "Label + Switched Path (LSP) Ping for Pseudowire Forwarding + Equivalence Classes (FECs) Advertised over IPv6", + RFC 6829, DOI 10.17487/RFC6829, January 2013, + <http://www.rfc-editor.org/info/rfc6829>. + + [RFC7537] Decraene, B., Akiya, N., Pignataro, C., Andersson, L., and + S. Aldrin, "IANA Registries for LSP Ping Code Points", + RFC 7537, DOI 10.17487/RFC7537, May 2015, + <http://www.rfc-editor.org/info/rfc7537>. + + [RFC8012] Akiya, N., Swallow, G., Pignataro, C., Malis, A., and S. + Aldrin, "Label Switched Path (LSP) and Pseudowire (PW) + Ping/Trace over MPLS Networks Using Entropy Labels (ELs)", + RFC 8012, DOI 10.17487/RFC8012, November 2016, + <http://www.rfc-editor.org/info/rfc8012>. + + [RFC8077] Martini, L., Ed., and G. Heron, Ed., "Pseudowire Setup and + Maintenance Using the Label Distribution Protocol (LDP)", + STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017, + <http://www.rfc-editor.org/info/rfc8077>. + + + + + + + + + + + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 71] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +Appendix A. Deprecated TLVs and Sub-TLVs (Non-normative) + + This appendix describes deprecated elements, which are non-normative + for an implementation. They are included in this document for + historical and informational purposes. + +A.1. Target FEC Stack + +A.1.1. FEC 128 Pseudowire - IPv4 (Deprecated) + + FEC 128 (0x80) is defined in [RFC4447], 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 a FEC 128 is encoded in a label stack, the following format is + used. The Value field consists of the Remote PE IPv4 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 IPv4 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 Section 3.2.9), 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. + +A.2. Downstream Mapping (Deprecated) + + 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. + + + +Kompella, et al. Standards Track [Page 72] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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.4.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, et al. Standards Track [Page 73] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 + 5 Non IP 12 + + 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, et al. Standards Track [Page 74] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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, et al. Standards Track [Page 75] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + 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 Section 3.4.1.1.1 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 TC bits are bits 20-22, and bit 23 is the S + bit. The replying router SHOULD fill in the TC and S bits; the + LSR receiving the echo reply MAY choose to ignore these bits. + + + + + +Kompella, et al. Standards Track [Page 76] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + + Protocol + + The protocol is taken from the following table: + + Protocol # Signaling Protocol + ---------- ------------------ + 0 Unknown + 1 Static + 2 BGP + 3 LDP + 4 RSVP-TE + +Acknowledgements + + The original acknowledgements from RFC 4379 state the following: + + 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. + + We would like to thank Loa Andersson for motivating the advancement + of this specification. + + We also would like to thank Alexander Vainshtein, Yimin Shen, Curtis + Villamizar, David Allan, Vincent Roca, Mirja Kuhlewind, and Elwyn + Davies for their review and useful comments. + +Contributors + + A mechanism used to detect data-plane failures in MPLS LSPs was + originally published as RFC 4379 in February 2006. It was produced + by the MPLS Working Group of the IETF and was jointly authored by + Kireeti Kompella and George Swallow. + + The following made vital contributions to all aspects of the original + RFC 4379, 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 + Nischal Sheth, Juniper Networks, Inc. + Sanjay Wadhwa, Juniper Networks, Inc. + + + +Kompella, et al. Standards Track [Page 77] + +RFC 8029 Detecting MPLS Data-Plane Failures March 2017 + + +Authors' Addresses + + Kireeti Kompella + Juniper Networks, Inc. + + Email: kireeti.kompella@gmail.com + + + George Swallow + Cisco Systems, Inc. + + Email: swallow.ietf@gmail.com + + + Carlos Pignataro (editor) + Cisco Systems, Inc. + + Email: cpignata@cisco.com + + + Nagendra Kumar + Cisco Systems, Inc. + + Email: naikumar@cisco.com + + + Sam Aldrin + Google + + Email: aldrin.ietf@gmail.com + + + Mach(Guoyi) Chen + Huawei + + Email: mach.chen@huawei.com + + + + + + + + + + + + + + + +Kompella, et al. Standards Track [Page 78] + |