RFC 7110

Return Path Specified Label Switched Path (LSP) Ping

๐Ÿ“… published January 2014, from ietf

RFC 7110: Return Path Specified LSP Ping ๐ŸŽ€

okay bestie, this RFC is a whole mood โœจ it's all about letting you pick the return path for an LSP ping echo reply, so you can test both directions in one go and the test gets way more reliable ๐Ÿ’…

The title block, the important bits ๐Ÿฆ‹

  • RFC number: 7110
  • Title: Return Path Specified Label Switched Path (LSP) Ping
  • Authors: M. Chen and W. Cao (Huawei Technologies Co., Ltd), S. Ning (Tata Communications), F. Jounay (Orange CH), and S. Delord (no affiliation listed in the header)
  • Category: Standards Track
  • ISSN: 2070-1721
  • Date: January 2014
  • Obsoletes and updates: the header doesn't list anything it obsoletes or updates

Abstract

okay so this doc adds extensions to the data-plane failure-detection protocol for MPLS Label Switched Paths (LSPs) that everyone calls "LSP ping" ๐Ÿ” the extensions let you choose which LSP the echo reply comes back on ๐Ÿ›ค๏ธ forcing a specific return path can check bidirectional connectivity and make LSP ping more robust ๐Ÿ’–

Status of This Memo ๐ŸŒธ

this is an Internet Standards Track document ๐ŸŽ€

it's a product of the Internet Engineering Task Force (IETF), so it reflects the consensus of the IETF community ๐Ÿซถ it got public review and was approved for publication by the Internet Engineering Steering Group (IESG) โœ… more on Internet Standards is in Section 2 of RFC 5741 ๐Ÿ“š

for the current status, any errata, and how to give feedback, check http://www.rfc-editor.org/info/rfc7110 ๐Ÿ”—

Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved. ยฉ๏ธ

this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were on the date it was published ๐Ÿ“œ please read those carefully, because they spell out your rights and restrictions ๐Ÿง any Code Components pulled out of this document must include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in that license ๐Ÿ’œ


Table of Contents ๐Ÿงš

   1. Introduction ....................................................3
   2. Requirements Language ...........................................3
   3. Problem Statements and Solution Overview ........................3
      3.1. Limitations of Existing Mechanisms for Bidirectional LSPs ..4
      3.2. Limitations of Existing Mechanisms for Handling
           Unreliable Return Paths ....................................4
   4. Extensions ......................................................5
      4.1. Reply via Specified Path Mode ..............................6
      4.2. Reply Path (RP) TLV ........................................6
      4.3. Tunnel Sub-TLVs ............................................8
           4.3.1. IPv4 RSVP Tunnel Sub-TLV ...........................10
           4.3.2. IPv6 RSVP Tunnel Sub-TLV ...........................11
           4.3.3. Static Tunnel Sub-TLV ..............................12
      4.4. Reply TC TLV ..............................................12
   5. Theory of Operation ............................................13
      5.1. Sending an Echo Request ...................................14
      5.2. Receiving an Echo Request .................................14
      5.3. Sending an Echo Reply .....................................15
      5.4. Receiving an Echo Reply ...................................16
      5.5. Non-IP Encapsulation for MPLS-TP LSPs .....................16
   6. Security Considerations ........................................16
   7. IANA Considerations ............................................17
      7.1. TLVs ......................................................17
      7.2. New Target FEC Stack Sub-TLVs .............................17
      7.3. New Reply Mode ............................................17
      7.4. Reply Path Return Code ....................................18
   8. Contributors ...................................................19
   9. Acknowledgements ...............................................19
   10. References ....................................................19
      10.1. Normative References .....................................19
      10.2. Informative References ...................................20

1. Introduction โœจ

okay so this doc extends the data-plane failure-detection protocol for MPLS LSPs that everybody calls "LSP ping" [RFC4379] ๐Ÿ’… the new bits let you specify the return path for the echo reply message ๐Ÿ›ค๏ธ which means more robustness, less room for error, and a more reliable echo reply overall ๐Ÿซถ

it adds a new Reply Mode called "Reply via Specified Path" ๐Ÿฆ‹ and a new Type-Length-Value (TLV) called "Reply Path (RP) TLV" ๐Ÿ’œ the procedures here only apply to "ping" mode. "traceroute" mode is out of scope for this document ๐Ÿ™ˆ

quick terminology check: "bidirectional LSP" here covers two things. one is the co-routed bidirectional LSP from [RFC3945] ๐ŸŒธ the other is the associated bidirectional LSP, which is built from a pair of unidirectional LSPs (one for each direction) that are linked to each other at the LSP's ingress and egress points [RFC5654] ๐Ÿ”— these mechanisms can work for both IP/MPLS and MPLS Transport Profile (MPLS-TP) setups ๐ŸŒˆ

2. Requirements Language ๐Ÿ’–

the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] ๐Ÿ“š

3. Problem Statements and Solution Overview ๐Ÿ”

so MPLS LSP ping is defined in [RFC4379] ๐ŸŽ€ it can detect data-path failures in all MPLS LSPs ๐Ÿ’…

LSPs are everywhere now, and they're increasingly used to provide bidirectional services ๐ŸŒ the co-routed bidirectional LSP is defined in [RFC3945], and the associated bidirectional LSP is defined in [RFC5654] โœจ with those services out there, operators want to test both directions of a bidirectional LSP in a single operation ๐Ÿซถ

there's another problem too ๐Ÿ˜ฌ when you test just one direction of an LSP (either a unidirectional LSP or one direction of a bidirectional LSP) with LSP ping, the result can depend on whether the echo reply actually gets delivered ๐Ÿ“ญ if the echo reply doesn't make it from the egress Label Switching Router (LSR) back to the ingress LSR, you can get false negatives ๐Ÿ’€ the LSP under test gets reported as "down" even though it's totally working ๐Ÿ˜ญ

3.1. Limitations of Existing Mechanisms for Bidirectional LSPs ๐Ÿงš

with the existing LSP ping mechanisms, as defined in [RFC4379], operators have to turn on LSP detection at each of the two ends of a bidirectional LSP separately ๐Ÿ˜ฉ that doubles the workload, and it can also cause extra trouble when checking the backward direction of the LSP under this condition:

The LSR that the operator logged on to perform the checking operations might not have out-of-band connectivity to the LSR at the far end of the LSP. That can mean it is not possible to check the return direction of a bidirectional LSP in a single operation -- the operator must log on to the LSR at the other end of the LSP to test the return direction.

associated bidirectional LSPs have the same issues as the co-routed ones ๐Ÿ™„

this document defines a mechanism that lets the operator ask for both directions of a bidirectional LSP to be tested by a single LSP ping message exchange ๐ŸŽ€

3.2. Limitations of Existing Mechanisms for Handling Unreliable Return Paths ๐ŸŒธ

[RFC4379] defines four Reply Modes ๐ŸŒˆ

  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

obviously, the return path reliability issue doesn't apply to the first one, since there's no reply at all ๐Ÿ™ƒ

[RFC4379] says the third mode may be used when the IP return path is considered unreliable ๐Ÿ›Ÿ but this mode needs every intermediate node to support the Router Alert option and to understand how to forward MPLS echo replies ๐Ÿ˜ต that's a seriously strict requirement in deployed IP/MPLS networks, especially since the return path might go through legacy IP-only routers ๐Ÿš๏ธ

and honestly, Reply Modes 2 or 3 can't guarantee that echo responses get through an IP network that's fundamentally unreliable ๐Ÿ’” when they don't arrive, you get false negatives, and the LSP looks broken when it isn't ๐Ÿ˜ญ

letting the ingress LSR control the path used for echo reply messages gives the operator an extra layer of deterministic process for the LSP ping test ๐Ÿง  for example, say you're testing an LSP and Reply Mode 2 is used at the start, but no echo reply comes back ๐Ÿ‘€ if you suspect the return path has failed, the operator can start another LSP ping using the Reply Mode defined in this document, and specify a different return path that seems workable to finish the test ๐Ÿ”

this document defines extensions to LSP ping so you can specify the return paths of the echo reply message inside an echo request message ๐Ÿ’œ

4. Extensions ๐Ÿฆ‹

LSP ping, defined in [RFC4379], works by sending an echo request message ๐Ÿ“จ it carries the Forwarding Equivalence Class (FEC) information of the LSP being tested ๐Ÿงพ that FEC info says which MPLS path is being verified, along the same data path as other normal data packets in that FEC ๐Ÿ›ฃ๏ธ

[RFC4379] defines four Reply Modes that tell the egress LSR how to send an echo reply back ๐Ÿ’… this document adds a new one, the "Reply via Specified Path" mode ๐ŸŽ€ it tells the egress LSR of the tested LSP to send the echo reply back along the path that's specified in the echo request message โœจ

on top of that, two new TLVs are defined here: the "Reply Path (RP) TLV" and the "Reply Traffic Class (TC) TLV" [RFC5462] ๐ŸŒˆ the Reply Path TLV holds one or more nested sub-TLVs, which carry the specified return path information for the echo reply message ๐Ÿซถ

4.1. Reply via Specified Path Mode ๐Ÿงš

a new Reply Mode is defined to go in the Reply Mode field of the echo request message ๐Ÿ’–

the value for Reply via Specified Path mode is 5. IANA gave it out using early allocation, and IANA still needs to confirm it ๐Ÿ™ˆ

    Value    Meaning
    -----    -------
        5     Reply via Specified Path

the Reply via Specified Path mode asks the remote LSR that receives the echo request message to send the echo reply message back along the specified paths carried in the Reply Path TLV ๐Ÿ”ฅ

4.2. Reply Path (RP) TLV โœจ

okay so the Reply Path (RP) TLV is technically optional inside the LSP ping protocol ๐ŸŽ€ BUT if you asked for the Reply via Specified Path mode from Section 4.1, the Reply Path (RP) TLV MUST be included in your echo request message. If it's missing, that counts as a malformed echo request, as described in [RFC4379] ๐Ÿ’€ And if an echo request does have a Reply Path (RP) TLV, then the echo reply from an implementation that's conformant to this spec MUST include one too. no cap, it's a whole vibe ๐Ÿ’…

The Reply Path (RP) TLV carries the specified return path that the echo reply is required to follow ๐Ÿฆ‹ The format looks like this:

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Reply Path TLV Type       |          Length               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Reply Path return code     |           Flags               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                          Reply Path                           |
    ~                                                               ~
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Figure 1: Reply Path TLV

Reply Path TLV Type: it's 2 octets long, and the type value is 21 ๐ŸŒธ

Length: also 2 octets. It tells you the length in octets of the Reply Path return code, Flags, and Reply Path fields โœจ

Reply Path return code: this one is 2 octets too ๐ŸŽ€ The egress LSR of the forward LSP uses it to report how the Reply Path TLV processing went and how the return path was picked. It MUST be set to zero in a Reply Path TLV carried on an echo request message and MUST be ignored on receipt. Here are the Reply Path return codes this document defines for a Reply Path TLV carried on an echo reply:

Value         Meaning
------        ----------------------
0x0000        Reserved, MUST NOT be used
0x0001        Malformed Reply Path TLV was received
0x0002        One or more of the sub-TLVs in the Reply Path TLV
              were not understood
0x0003        The echo reply was sent successfully using the
              specified Reply Path
0x0004        The specified Reply Path was not found, the echo
              reply was sent via another LSP
0x0005        The specified Reply Path was not found, the echo
              reply was sent via pure IP forwarding (non-MPLS)
              path
0x0006-0xfffb Unassigned
0xfffc-0xffff Experimental Use

Flags: also 2 octets ๐Ÿ’œ The egress uses it to figure out how to process the Reply Paths field when it's doing return path selection. It's a bit vector with this format:

       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |      MUST be zero         |A|B|
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                Figure 2:  Flags
  • A (Alternative path): the egress LSR MUST select a non-default path as the return path. This is super useful when you suspect reverse default path problems, and you can actually confirm them by forcing the echo reply onto a non-default return path ๐Ÿ”ฅ Here, the default path just means the path the egress LSR would use to send the echo reply when Reply Mode 2 or 3 is used. If the A bit is set, you don't need to carry any specific reply path sub-TLVs, and if they show up anyway, they SHOULD be ignored.
  • B (Bidirectional): the return path is required to follow the reverse direction of the tested bidirectional LSP ๐Ÿฆ‹ If the B bit is set, there's no need to carry any specific reply path sub-TLVs, and when received, the sub-TLVs SHOULD be ignored.
โš ๏ธ The A flag and B flag MUST NOT both be set. If they are, an echo reply with the RP return code set to "Malformed Reply Path TLV was received" MUST be returned. not me making the rules, but we follow them ๐Ÿ™ˆ

Reply Path: this is where the return path lives ๐Ÿ“ It's variable in length and can contain zero, one, or more Target FEC sub-TLVs [RFC4379]. In an echo request, it carries sub-TLVs that describe the specified path the echo reply is required to follow. In an echo reply, the sub-TLVs describe the FEC Stack information of the return path (when the return path is an MPLS path) that the echo reply will be sent along ๐Ÿงš

4.3. Tunnel Sub-TLVs ๐ŸŒˆ

okay so [RFC4379] already defined several Target FEC sub-TLVs, and those are a great way to identify a specific return path ๐Ÿ’– The Reply Path TLV can carry any sub-TLV defined for use in the Target FEC Stack TLV to specify the return path, including ones that exist now and ones that get defined later โœจ

This document defines three new Target FEC sub-TLVs: the IPv4 RSVP Tunnel sub-TLV, the IPv6 RSVP Tunnel sub-TLV, and the Static Tunnel sub-TLV ๐ŸŽ€ One usage of these generic RSVP Tunnel sub-TLVs is when LSP ping is used to periodically verify the control plane against the data plane [RFC5884]. Using a Tunnel instead of a particular LSP can avoid the impact of an LSP identifier changing when Make-Before-Break (MBB) is deployed ๐Ÿ‘‘ These sub-TLVs can also be used in the Reply Path TLV, so the operator can specify a more generic tunnel FEC, rather than a particular LSP, as the return path.

No assignments of sub-TLVs are made directly for TLV Type 21. The sub-TLV space and assignments for TLV Type 21 will be the same as those for TLV Type 1. Sub-types for TLV Type 1 and TLV Type 21 MUST be kept the same, and any new sub-type added to TLV Type 1 MUST apply to TLV Type 21 as well ๐Ÿซถ

With the Return Path TLV flags and the sub-TLVs defined for the Target FEC Stack TLV and in this document, you get these options for specifying a return path ๐Ÿ’…

  1. a particular LSP as return path
    • use those sub-TLVs defined for the Target FEC Stack TLV
  2. a more generic tunnel FEC as return path
    • use the IPv4/IPv6 RSVP and Static Tunnel sub-TLVs defined in Sections Section 4.3.1, Section 4.3.2, and Section 4.3.3 of this document
  3. the reverse path of the bidirectional LSP as return path
    • use B bit defined in Section 4.2 of this document.
  4. Force return path to non-default path
    • use A bit defined in Section 4.2 of this document.

4.3.1. IPv4 RSVP Tunnel Sub-TLV ๐Ÿฆ‹

the format of the IPv4 RSVP Tunnel sub-TLV is:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 RSVP Tunnel sub-TLV Type |        Length                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 IPv4 tunnel end point address                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Flags            |     Tunnel ID                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Extended Tunnel ID                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   IPv4 tunnel sender address                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Figure 3: IPv4 RSVP Tunnel Sub-TLV

The IPv4 RSVP Tunnel sub-TLV is derived from the RSVP IPv4 FEC TLV defined in Section 3.2.3 of [RFC4379]. Every field has the same semantics as in [RFC4379], except that the LSP-ID field is left out and a brand-new Flags field gets added ๐ŸŒธ

The IPv4 RSVP Tunnel sub-TLV Type field is 2 octets long, and the recommended type value is 26.

Flags: 2 octets long ๐Ÿฉต It tells the egress LSR how to choose the return path. It's a bit vector with this format:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         MUST be zero      |S|P|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 4: Tunnel Flags
  • P (Primary): the return path MUST be chosen from the LSPs that belong to the specified Tunnel, and the LSP MUST be the primary LSP.
  • S (Secondary): the return path MUST be chosen from the LSPs that belong to the specified Tunnel, and the LSP MUST be the secondary LSP. Primary and secondary LSPs are defined in [RFC4872] ๐Ÿงš
โš ๏ธ The P bit and S bit MUST NOT both be set. If they are, an echo reply with the RP return code set to "Malformed Reply Path TLV was received" SHOULD be returned. If both the P bit and S bit are unset, the return path could be any one of the LSPs from the same Tunnel ๐Ÿ’œ

4.3.2. IPv6 RSVP Tunnel Sub-TLV ๐Ÿ’–

the format of the IPv6 RSVP Tunnel sub-TLV is:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 RSVP Tunnel sub-TLV Type |        Length                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 IPv6 tunnel end point address                 |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Flags            |     Tunnel ID                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Extended Tunnel ID                      |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   IPv6 tunnel sender address                  |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Figure 5: IPv6 RSVP Tunnel Sub-TLV

The IPv6 RSVP Tunnel sub-TLV is derived from the RSVP IPv6 FEC TLV defined in Section 3.2.4 of [RFC4379]. Every field has the same semantics as in [RFC4379], except that the LSP-ID field is left out and a brand-new Flags field gets added โœจ

The IPv6 RSVP Tunnel sub-TLV Type field is 2 octets long, and the type value is 27.

The Flags field is 2 octets long and is identical to the one described in Section 4.3.1 ๐Ÿซถ

4.3.3. Static Tunnel Sub-TLV โœจ

okay so the Static RSVP Tunnel sub-TLV has this layout ๐Ÿฆ‹ and its value fields borrow their definitions from [RFC6370], so go check that one for the deets ๐Ÿ’…

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Static Tunnel sub-TLV Type |        Length                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Source Global ID                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Source Node ID                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Destination Global ID                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Destination Node ID                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Source Tunnel Num       |     Destination Tunnel Num    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Flags            |     Must Be Zero              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 6: Static Tunnel Sub-TLV

The Flags field is 2 octets long and is identical to the one described in Section 4.3.1 ๐ŸŽ€

The sub-TLV type value is 28 ๐Ÿ’œ


4.4. Reply TC TLV ๐ŸŒˆ

okay so the Reply TOS Byte TLV [RFC4379] lets the originator of the echo request ask for the echo reply to come back with the IP header TOS byte set to whatever value is in the TLV ๐Ÿ’… this doc does the same vibe with a brand new TLV, the Reply TC TLV ๐Ÿซถ the originator of the echo request MAY use it to ask for the echo reply to be sent with the TC bits of the return path LSP set to the value in this TLV โœจ and it's not stuck to Reply via Specified Path (the Reply Mode defined in this doc). it works in all the other Reply Modes too, iconic ๐Ÿ‘‘ the format is:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Reply TC TLV type        |          Length               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TC  |                    MUST be zero                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 7: Reply TC TLV

The Reply TC TLV Type field is 2 octets long, and the type value is 22 ๐ŸŒธ

The Length field is 2 octets long, and its value is fixed at 4 octets ๐Ÿ“


5. Theory of Operation ๐Ÿ”ฅ

bestie, the procedures in this doc only apply to "ping" mode for now ๐Ÿ™ˆ "traceroute" mode is out of scope here, so we're not doing that one ๐Ÿ’€

in [RFC4379], the echo reply is what reports the LSP checking result back to the LSP ping initiator ๐Ÿ“ฌ this doc defines a new Reply Mode and a new TLV (the Reply Path TLV) so the LSP ping initiator can specify or constrain the return path of the echo reply ๐Ÿฆ‹ the echo reply is also extended so it can detect the requested return path by looking at a specified path FEC TLV โœจ this means LSP ping can catch failures in both directions with a single operation. literally cuts the operational steps needed to verify end-to-end bidirectional connectivity and integrity of an LSP in half ๐Ÿ˜ญ๐Ÿซถ

when the return path is an MPLS path, the echo reply MUST carry the FEC Stack information in a Reply Path TLV so it can test the return MPLS LSP path ๐Ÿ’– the destination IP address of the echo reply message MUST never be used in a forwarding decision ๐Ÿ™…โ€โ™€๏ธ to make sure that can't happen, the destination IP address of the echo reply sent along the specified return path MUST be set to numbers from the range 127/8 for IPv4 or 0:0:0:0:0:FFFF:127.0.0.0/104 for IPv6, the IP Time to Live (TTL) MUST be set to 1, and the TTL in the outermost label MUST be set to 255 ๐Ÿ”’

when the return path is a pure IP forwarding path, the procedures in [RFC4379] apply unchanged (the destination IP address is copied from the source IP address) ๐ŸŒˆ


5.1. Sending an Echo Request ๐Ÿ’…

when you're sending an echo request, you follow the rules and procedures in Section 4.3 of [RFC4379] plus this stuff: the Reply Mode of the echo request MUST be set to "Reply via Specified Path", and a Reply Path TLV MUST be carried in the echo request message to match ๐ŸŽ€ the Reply Path TLV holds one or several reply path sub-TLV(s) that identify the return path(s) the egress LSR should use for its reply ๐Ÿงš

for a bidirectional LSP, the ingress LSR and egress LSR already know how the forward and backward direction LSPs are related ๐Ÿค so only the B bit SHOULD be set in the Reply Path TLV โœจ if the operator wants the echo reply to go somewhere other than the reverse direction of the bidirectional LSP, then the A bit SHOULD be set, or another FEC sub-TLV SHOULD be carried in the Reply Path TLV instead, and the B bit MUST be clear ๐Ÿ’œ

sometimes operators want to treat two unidirectional LSPs (one for each direction) as a pair, even if there's no binding relationship between them ๐Ÿ‘ฏ with the mechanism in this doc, they can run LSP ping once from one end and finish failure detection on both unidirectional LSPs ๐Ÿ”ฅ to make that happen, the echo request message MUST carry (in the Reply Path TLV) a FEC sub-TLV that belongs to the backward LSP ๐Ÿ™Œ


5.2. Receiving an Echo Request ๐Ÿฆ‹

"Ping" mode processing, as defined in Section 4.4 of [RFC4379], still applies here ๐Ÿ’… on top of that, when an echo request comes in and the egress LSR doesn't know the Reply Mode from this doc, it sends back an echo reply with the return code set to "Malformed echo request received" and the Subcode set to zero, following the rules of [RFC4379] ๐Ÿ’€ if the egress LSR does know the Reply Mode, it SHOULD look at the Reply Path TLV and find and select the desired return path ๐Ÿงš if there's a matched path, an echo reply with a Reply Path TLV that identifies the return path SHOULD be sent back to the ingress LSR, and the Reply Path return code SHOULD be set to "The echo reply was sent successfully using the specified Reply Path" ๐ŸŽ€ if there's no such path, an echo reply with the Reply Path TLV SHOULD be sent back to the ingress LSR, and the Reply Path return code SHOULD be set to the relevant code (defined in Section 4.2) for what actually happened, so it reflects how the Reply Path TLV was processed and how the return path was picked ๐ŸŒธ

for example, if the specified LSP isn't found and the egress picks another LSP as the return path, the Reply Path return code SHOULD be set to "The specified reply path was not found, the echo reply was sent via another LSP" ๐Ÿ˜ญ and if the egress picks an IP path instead, the Reply Path return code SHOULD be set to "The specified Reply Path was not found, the echo reply was sent via pure IP forwarding (non-MPLS) path" ๐ŸŒŠ if there's an unknown sub-TLV in the received Reply Path TLV, the Reply Path return code SHOULD be set to "One or more of the sub-TLVs in the Reply Path TLV were not understood" ๐Ÿค”

if the A bit of the Reply Path TLV in a received echo request is set, the egress LSR SHOULD send the echo reply along a non-default return path ๐Ÿ›ค๏ธ

if the B bit of the Reply Path TLV in a received echo request is set, the egress LSR SHOULD send the echo reply along the reverse direction of the bidirectional LSP ๐Ÿ”

and lowkey, the FEC validate results of the forward path LSP SHOULD NOT affect the egress LSR continuing to test the return path LSP ๐Ÿ™…โ€โ™€๏ธโœจ


5.3. Sending an Echo Reply ๐ŸŒธ

as [RFC4379] says, the echo reply message is a UDP packet, and it MUST be sent only in response to an MPLS echo request ๐Ÿ’Œ the source IP address is a valid IP address of the replier, and the source UDP port is the well-know UDP port for LSP ping ๐ŸŽ€

when the return path is an MPLS LSP, the destination IP address of the echo reply is copied from the destination IP address of the echo request, and the destination UDP port is copied from the source UDP port of the echo request ๐Ÿฆ‹ the IP TTL MUST be set to 1, and the TTL in the outermost label MUST be set to 255 ๐Ÿ”’

when the return path is a pure IP forwarding path, the same rules from [RFC4379] apply, so the destination IP address and UDP port get copied from the source IP address and source UDP port of the echo request ๐ŸŒˆ

when sending the echo reply, a Reply Path TLV that identifies the return path MUST be carried ๐Ÿ’– the Reply Path return code SHOULD be set to the relevant code that reflects how the egress processed the Reply Path TLV in the echo request and which return path it chose ๐Ÿงš carrying the Reply Path TLV in the echo reply gives the ingress LSR enough info about the reverse direction of the tested path to check that the data plane matches the control plane ๐Ÿซถ so one LSP ping can test both directions of a path, main character energy โœจ if the return path is a pure IP path, no sub-TLVs are carried in the Reply Path TLV ๐Ÿ™ƒ


5.4. Receiving an Echo Reply ๐Ÿซง

the rules and process in Section 4.6 of [RFC4379] apply here ๐Ÿ’… when an echo reply is received, the Reply Mode is "Reply via Specified Path", the Reply Path return code is "The echo reply was sent successfully using the specified Reply Path", and the return path is an MPLS LSP, the ingress LSR MUST perform FEC validation based on the FEC Stack information of the return path carried in the Reply Path TLV ๐Ÿ˜ค it does this the same way an egress LSR does when it receives an echo request, and the FEC validation process (relevant to "ping" mode) in Section 4.4.1 of [RFC4379] applies here too ๐Ÿ”ฅ

when an echo reply comes back with the return code set to "Malformed echo request received" and the Subcode set to zero, it's possible the egress LSR doesn't know the "Reply via Specified Path" Reply Mode ๐Ÿ™ˆ in that case the operator may choose to re-run LSP ping using one of the four Reply Modes defined in [RFC4379] ๐Ÿ”

if the Reply Path return code in the Reply Path TLV is set to "The specified reply path was not found, ...", it means the egress LSR couldn't find a matching return path like you asked ๐Ÿ˜ญ operators can choose another LSP as the return path or use other methods to dig into the path further ๐Ÿ•ต๏ธโ€โ™€๏ธโœจ


5.5. Non-IP Encapsulation for MPLS-TP LSPs ๐Ÿงš

okay so in some MPLS-TP deployments, IP addressing might not be available, or some form of non-IP encapsulation might just be preferred ๐ŸŒŠ in those cases, the Non-IP encapsulation defined in [RFC6426] applies here ๐ŸŽ€ the LSP Ping Reply Mode in the echo request and echo reply is set to 5, and the return path of the echo reply is whatever the Reply Path TLV says ๐Ÿ’œ

6. Security Considerations ๐Ÿ”’

Okay, bestie, the security stuff ๐Ÿ˜ญ. Everything [RFC4379] said about security applies here too, so go read that one as well. ๐Ÿ›ก๏ธ

Now the new part: these extensions could be used for "proxying" attacks ๐Ÿ‘€. Like, an echo request initiator could name a return path whose destination isn't the initiator itself. Normally this won't happen ๐Ÿ™…โ€โ™€๏ธ, because in an MPLS domain the initiators and receivers are in the same domain. But to stop this extension from being used as a proxy for attacks, the return path LSP should have its destination at the same node the forward path comes from ๐Ÿ’…. If the receiver can't figure out whether the return path LSP ends at the initiator, it may drop the echo request ๐Ÿ’€. So when the initiator sends an echo request, it should pick a proper source address based on the specified return path LSP, so the receiver can make that call. Main character security energy ๐Ÿ‘‘โœจ.

7. IANA Considerations ๐Ÿ“‹

7.1. TLVs ๐ŸŽ€

IANA gave the value 21 to the Reply Path TLV and the value 22 to the Reply TC TLV, both from the "Multiprotocol Label Switching Architecture (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry, in the "TLVs" subregistry ๐ŸŒธ.

Value   Meaning                           Reference
-----   -------                           ---------
21      Reply Path TLV                    this document (Section 4.2)
22      Reply TC TLV                      this document (Section 4.4)

Here's the tea โ˜•: the sub-TLV space and assignments for the Reply Path TLV match the Target FEC Stack TLV's. The sub-types for the Target FEC Stack TLV and the Reply Path TLV MUST be kept the same ๐Ÿซถ. Any new sub-type added to the Target FEC Stack TLV MUST apply to the Reply Path TLV as well ๐Ÿ”ฅ. Non-negotiable, periodt ๐Ÿ’….

7.2. New Target FEC Stack Sub-TLVs ๐Ÿฆ‹

IANA picked up three new sub-TLV types from the "Multiprotocol Label Switching Architecture (MPLS) Label Switched Paths (LSPs) Ping Parameters - TLVs" registry, in the "Sub-TLVs for TLV Types 1, 16, and 21" subregistry โœจ.

Sub-Type      Sub-TLV Name             Reference
-------       -----------             ---------
26          IPv4 RSVP Tunnel        this document (Section 4.3.1)
27          IPv6 RSVP Tunnel        this document (Section 4.3.2)
28          Static Tunnel           this document (Section 4.3.3)

7.3. New Reply Mode ๐Ÿงš

IANA allocated (5 - Reply via Specified Path) from the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry, in the "Reply Modes" subregistry ๐Ÿ’œ.

Value    Meaning                      Reference
-----    -----                        ----------
5        Reply via Specified Path     this document (Section 4.1)

7.4. Reply Path Return Code ๐Ÿ“

IANA made a brand-new subregistry in the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" for Reply Path return codes ๐ŸŒˆ.

This document (Section 4.2) defines these return codes:

Value         Meaning
------        ----------------------
0x0000        No return code
0x0001        Malformed Reply Path TLV was received
0x0002        One or more of the sub-TLVs in the Reply Path TLV
              were not understood
0x0003        The echo reply was sent successfully using the
              specified Reply Path
0x0004        The specified Reply Path was not found, the echo
              reply was sent via another LSP
0x0005        The specified Reply Path was not found, the echo
              reply was sent via pure IP forwarding (non-MPLS)
              path
0x0006-0xfffb Unassigned
0xfffc-0xffff Reserved for Experimental Use

Range 0x0006-0xfffb isn't allocated yet and is saved for future extensions ๐Ÿ”ฎ, and it gets allocated via Standard Action. The 0xfffc-0xffff range is for Experimental Use ๐Ÿงช.

8. Contributors ๐Ÿซถ

Shoutout to the people who also helped write this doc ๐Ÿ“ฃ:

Ehud Doron
Orckit-Corrigent
EMail: ehudd@orckit.com

Ronen Solomon
Orckit-Corrigent
EMail: RonenS@orckit.com

Ville Hallivuori
Tellabs
Sinimaentie 6 C
FI-02630 Espoo, Finland
EMail: ville.hallivuori@tellabs.com

Xinchun Guo
EMail: guoxinchun@huawei.com

9. Acknowledgements ๐Ÿ’–

The authors thanked Adrian Farrel, Peter Ashwood-Smith, Sriganesh Kini, Gregory Mirsky, Eric Gray, Loa Andersson, Carlos Pignataro, and Tom Petch for their reviews, suggestions, and comments. Iconic behaviour from all of them ๐Ÿ‘‘.

10. References ๐Ÿ“š

10.1. Normative References ๐Ÿ”—

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

[RFC4379]  Kompella, K. and G. Swallow, "Detecting Multi-Protocol
           Label Switched (MPLS) Data Plane Failures", RFC 4379,
           February 2006.

[RFC6370]  Bocci, M., Swallow, G., and E. Gray, "MPLS Transport
           Profile (MPLS-TP) Identifiers", RFC 6370, September 2011.

10.2. Informative References ๐Ÿง 

[RFC3945]  Mannie, E., "Generalized Multi-Protocol Label Switching
           (GMPLS) Architecture", RFC 3945, October 2004.

[RFC4872]  Lang, J., Rekhter, Y., and D. Papadimitriou, "RSVP-TE
           Extensions in Support of End-to-End Generalized Multi-
           Protocol Label Switching (GMPLS) Recovery", RFC 4872, May
           2007.

[RFC5462]  Andersson, L. and R. Asati, "Multiprotocol Label Switching
           (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic
           Class" Field", RFC 5462, February 2009.

[RFC5654]  Niven-Jenkins, B., Brungard, D., Betts, M., Sprecher, N.,
           and S. Ueno, "Requirements of an MPLS Transport Profile",
           RFC 5654, September 2009.

[RFC5884]  Aggarwal, R., Kompella, K., Nadeau, T., and G. Swallow,
           "Bidirectional Forwarding Detection (BFD) for MPLS Label
           Switched Paths (LSPs)", RFC 5884, June 2010.

[RFC6426]  Gray, E., Bahadur, N., Boutros, S., and R. Aggarwal, "MPLS
           On-Demand Connectivity Verification and Route Tracing",
           RFC 6426, November 2011.

Authors' Addresses ๐ŸŒŸ

Mach(Guoyi) Chen
Huawei Technologies Co., Ltd
Q14 Huawei Campus, No. 156 Beiqing Road, Hai-dian District
Beijing  100095
China

EMail: mach.chen@huawei.com


Wei Cao
Huawei Technologies Co., Ltd
Q14 Huawei Campus, No. 156 Beiqing Road, Hai-dian District
Beijing  100095
China

EMail: wayne.caowei@huawei.com


So Ning
Tata Communications

EMail: ning.so@tatacommunications.com


Frederic Jounay
Orange CH
4 rue caudray 1020 Renens
Switzerland

EMail: frederic.jounay@orange.ch


Simon Delord

EMail: Simon.delord@team.telstra.com
๐Ÿ“ฆ where this page comes from