<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" number="8611" category="std" consensus="yes" submissionType="IETF" ipr="trust200902" updates="8029" obsoletes="" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 2.22.3 -->
  <!-- ***** FRONT MATTER ***** -->
  <front>
    <title abbrev="LSP Ping for LAG">
   Label Switched Path (LSP) Ping and Traceroute Multipath Support for Link Aggregation Group (LAG) Interfaces</title>
    <seriesInfo name="RFC" value="8611"/>
    <author fullname="Nobo Akiya" initials="N." surname="Akiya">
      <organization>Big Switch Networks</organization>
      <address>
        <email>nobo.akiya.dev@gmail.com</email>
      </address>
    </author>
    <author fullname="George Swallow" initials="G." surname="Swallow">
      <organization abbrev="SETC">Southend Technical Center</organization>
      <address>
        <email>swallow.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Stephane Litkowski" initials="S." surname="Litkowski">
      <organization>Orange</organization>
      <address>
        <email>stephane.litkowski@orange.com</email>
      </address>
    </author>
    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization>Orange</organization>
      <address>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author fullname="John E. Drake" initials="J." surname="Drake">
      <organization>Juniper Networks</organization>
      <address>
        <email>jdrake@juniper.net</email>
      </address>
    </author>
    <author fullname="Mach(Guoyi) Chen" initials="M." surname="Chen">
      <organization>Huawei</organization>
      <address>
        <email>mach.chen@huawei.com</email>
      </address>
    </author>
    <date month="June" year="2019"/>
    <area>RTG</area>
    <workgroup>MPLS</workgroup>
    <keyword>MPLS</keyword>
    <keyword>LSP Ping</keyword>
    <keyword>LAG</keyword>
    <abstract>
      <t>This document defines extensions to the MPLS Label Switched Path
      (LSP) Ping and Traceroute mechanisms as specified in RFC 8029. The
      extensions allow the MPLS LSP Ping and Traceroute mechanisms to discover
      and exercise specific paths of Layer 2 (L2) Equal-Cost Multipath (ECMP)
      over Link Aggregation Group (LAG) interfaces. Additionally, a mechanism
      is defined to enable the determination of the capabilities supported by a Label
      Switching Router (LSR).</t>
      <t>This document updates RFC 8029.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="INTRO" numbered="true" toc="default">
      <name>Introduction</name>
      <section numbered="true" toc="default">
        <name>Background</name>
        <t>The MPLS Label Switched Path (LSP) Ping and Traceroute mechanisms
        <xref target="RFC8029" format="default"/> are powerful tools designed to diagnose all
        available Layer 3 (L3) paths of LSPs, including diagnostic coverage of
        L3 Equal-Cost Multipath (ECMP). In many MPLS networks, Link
        Aggregation Groups (LAGs), as defined in <xref target="IEEE802.1AX" format="default"/>,
        provide Layer 2 (L2) ECMP and are often used for various reasons.
        MPLS LSP Ping and Traceroute tools were not designed to discover and
        exercise specific paths of L2 ECMP. This produces a limitation for the
        following scenario when an LSP traverses a LAG:</t>
        <ul spacing="normal">
          <li>Label switching over some member links of the LAG is
            successful, but fails over other member links of the LAG.</li>
          <li>MPLS echo request for the LSP over the LAG is load-balanced on
            one of the member links that is label switching successfully.</li>
        </ul>
        <t>With the above scenario, MPLS LSP Ping and Traceroute will
        not be able to detect the label-switching failure of the problematic
        member link(s) of the LAG. In other words, lack of L2 ECMP diagnostic
        coverage can produce an outcome where MPLS LSP Ping and Traceroute can
        be blind to label-switching failures over a problematic LAG interface.
        It is, thus, desirable to extend the MPLS LSP Ping and Traceroute to
        have deterministic diagnostic coverage of LAG interfaces.</t>
        <t>
   The work toward a solution to this problem was motivated by issues
   encountered in live networks.
</t>
      </section>
      <section numbered="true" toc="default">
        <name>Terminology</name>
        <t>The following acronyms/terms are used in this document: </t>
        <ul spacing="normal">
          <li>MPLS - Multiprotocol Label Switching.</li>
          <li>LSP - Label Switched Path.</li>
          <li>LSR - Label Switching Router.</li>
          <li>ECMP - Equal-Cost Multipath.</li>
          <li>LAG - Link Aggregation Group.</li>
          <li>Initiator LSR - The LSR that sends the MPLS echo request
            message.</li>
          <li>Responder LSR - The LSR that receives the MPLS echo request
            message and sends the MPLS echo reply message.</li>
        </ul>
      </section>
      <section numbered="true" toc="default">
        <name>Requirements Language</name>
        <t>
    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
    NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
    "MAY", and "OPTIONAL" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Overview of Solution</name>
      <t>This document defines a new TLV to discover the capabilities of a
      responder LSR and extensions for use with the MPLS LSP Ping and
      Traceroute mechanisms to describe Multipath Information for individual
      LAG member links, thus allowing MPLS LSP Ping and Traceroute to discover
      and exercise specific paths of L2 ECMP over LAG interfaces. The reader
      is expected to be familiar with the Downstream Detailed Mapping
      TLV (DDMAP) described in Section 3.4 of <xref target="RFC8029" format="default"/>.</t>
      <t>The solution consists of the MPLS echo request containing a DDMAP TLV
      and the new LSR Capability TLV to indicate that separate load-balancing
      information for each L2 next hop over LAG is desired in the MPLS echo
      reply. The responder LSR places the same LSR Capability TLV in the MPLS
      echo reply to provide acknowledgement back to the initiator LSR. It also
      adds, for each downstream LAG member, load-balancing information (i.e.,
      multipath information and interface index). This mechanism is applicable
      to all types of LSPs that can traverse LAG interfaces. Many LAGs
      are built from peer-to-peer links, with router X and router X+1 having direct
      connectivity and the same number of LAG members. It is possible to build
      LAGs asymmetrically by using Ethernet switches between two routers.
      <xref target="_LAG_L2_ISSUES" format="default"/> lists some use cases for which the mechanisms defined in this
      document may not be applicable. Note that the mechanisms described in
      this document do not impose any changes to scenarios where an LSP is
      pinned down to a particular LAG member (i.e., the LAG is not treated as
      one logical interface by the LSP).</t>
      <t>The following figure and description provide an example of an LDP
      network.</t>
      <t/>
      <figure anchor="fig_example_ldp_network">
        <name>Example LDP Network</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
  <----- LDP Network ----->

          +-------+
          |       |
  A-------B=======C-------E
          |               |
          +-------D-------+

  ---- Non-LAG
  ==== LAG comprising of two member links
]]></artwork>
      </figure>
      <t> When node A is initiating LSP Traceroute to node E, node B
      will return to node A load-balancing information for the following entries:
      </t>
      <ol spacing="normal" type="1">
        <li>Downstream C over Non-LAG (upper path).</li>
        <li>First Downstream C over LAG (middle path).</li>
        <li>Second Downstream C over LAG (middle path).</li>
        <li>Downstream D over Non-LAG (lower path).</li>
      </ol>
      <t> This document defines: </t>
      <ul spacing="normal">
        <li>in <xref target="_LSR_CAP" format="default"/>, a mechanism to discover
          capabilities of responder LSRs;</li>
        <li>in <xref target="_DISCOVER" format="default"/>, a mechanism to discover L2 ECMP
          information;</li>
        <li>in <xref target="_TRAVERSE" format="default"/>, a mechanism to validate L2 ECMP
          traversal;</li>
        <li>in <xref target="_LSR_CAP_TLV" format="default"/>, the LSR Capability TLV;</li>
        <li>in <xref target="DS_Flags" format="default"/>, the LAG Description Indicator
          flag;</li>
        <li>in <xref target="_INT_IND_DDMAP" format="default"/>, the Local Interface Index
          Sub-TLV;</li>
        <li>in <xref target="_REM_INT_INDEX" format="default"/>, the Remote Interface Index
          Sub-TLV; and</li>
        <li>in <xref target="_D_ILS" format="default"/>, the Detailed Interface and Label
          Stack TLV.</li>
      </ul>
    </section>
    <section anchor="_LSR_CAP" numbered="true" toc="default">
      <name>LSR Capability Discovery</name>
      <t>The MPLS Ping operates by an initiator LSR sending an MPLS echo
      request message and receiving back a corresponding MPLS echo reply
      message from a responder LSR. The MPLS Traceroute operates in a similar
      way except the initiator LSR potentially sends multiple MPLS echo
      request messages with incrementing TTL values.</t>
      <t>There have been many extensions to the MPLS Ping and Traceroute
      mechanisms over the years. Thus, it is often useful, and sometimes
      necessary, for the initiator LSR to deterministically disambiguate the
      differences between: </t>
      <ul spacing="normal">
        <li>The responder LSR sent the MPLS echo reply message with contents
          C because it has feature X, Y, and Z implemented.</li>
        <li>The responder LSR sent the MPLS echo reply message with contents
          C because it has a subset of features X, Y, and Z (i.e., not all of them) implemented.</li>
        <li>The responder LSR sent the MPLS echo reply message with contents
          C because it does not have features X, Y, or Z implemented.</li>
      </ul>
      <t>To allow the initiator LSR to disambiguate the above
      differences, this document defines the LSR Capability TLV (described in
      <xref target="_LSR_CAP_TLV" format="default"/>). When the initiator LSR wishes to
      discover the capabilities of the responder LSR, the initiator LSR
      includes the LSR Capability TLV in the MPLS echo request message. When
      the responder LSR receives an MPLS echo request message with the LSR
      Capability TLV included, if it knows the LSR Capability TLV, then it
      MUST include the LSR Capability TLV in the MPLS echo reply message with
      the LSR Capability TLV describing the features and extensions supported by
      the local LSR. Otherwise, an MPLS echo reply must be sent back to the
      initiator LSR with the return code set to "One or more of the TLVs was
      not understood", according to the rules defined in Section 3 of <xref target="RFC8029" format="default"/>. Then, the initiator LSR can send another MPLS echo
      request without including the LSR Capability TLV.</t>
      <t>It is RECOMMENDED that implementations supporting the LAG multipath
      extensions defined in this document include the LSR Capability TLV in
      MPLS echo request messages.</t>
      <section numbered="true" toc="default">
        <name>Initiator LSR Procedures</name>
        <t>If an initiator LSR does not know what capabilities a responder LSR
        can support, it can send an MPLS echo request message and carry the
        LSR Capability TLV to the responder to discover the capabilities that
        the responder LSR can support.</t>
      </section>
      <section numbered="true" toc="default">
        <name>Responder LSR Procedures</name>
        <t>When a responder LSR receives an MPLS echo request message that
        carries the LSR Capability TLV, the following procedures are used:</t>
        <t>If the responder knows how to process the LSR Capability TLV, the
        following procedures are used:</t>
        <ul spacing="normal">
          <li>The responder LSR MUST include the LSR Capability TLV in the
            MPLS echo reply message.</li>
          <li>
            <t>If the responder LSR understands the LAG Description Indicator
            flag:</t>
            <ul spacing="normal">
              <li>Set the Downstream LAG Info Accommodation flag if the
                responder LSR is capable of describing the outgoing LAG member
                links separately; otherwise, clear the Downstream LAG Info
                Accommodation flag.</li>
              <li>Set the Upstream LAG Info Accommodation flag if the responder
                LSR is capable of describing the incoming LAG member links
                separately; otherwise, clear the Upstream LAG Info
                Accommodation flag.</li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="_DISCOVER" numbered="true" toc="default">
      <name>Mechanism to Discover L2 ECMP</name>
      <section numbered="true" toc="default">
        <name>Initiator LSR Procedures</name>
        <t>Through LSR Capability Discovery as defined in <xref target="_LSR_CAP" format="default"/>, the
        initiator LSR can understand whether the responder LSR can describe
        incoming/outgoing LAG member links separately in the DDMAP TLV.</t>
        <t>Once the initiator LSR knows that a responder can support this
        mechanism, then it sends an MPLS echo request carrying a DDMAP TLV
        with the LAG Description Indicator flag (G) set to the responder
        LSR. The LAG Description Indicator flag (G) indicates that separate
        load-balancing information for each L2 next hop over a LAG is desired
        in the MPLS echo reply. The new LAG Description Indicator flag is
        described in <xref target="DS_Flags" format="default"/>.</t>
      </section>
      <section anchor="s_responder_lsr_proc" numbered="true" toc="default">
        <name>Responder LSR Procedures</name>
        <t>When a responder LSR receives an MPLS echo request message with the
        LAG Description Indicator flag set in the DDMAP TLV, if the
        responder LSR understands the LAG Description Indicator flag and is
        capable of describing outgoing LAG member links separately, the
        following procedures are used, regardless of whether or not the outgoing
        interfaces include LAG interfaces: </t>
        <ul spacing="normal">
          <li>
            <t>For each downstream interface that is a LAG interface: </t>
            <ul spacing="normal">
              <li>The responder LSR MUST include a DDMAP TLV when sending the
                MPLS echo reply. There is a single DDMAP TLV for the LAG
                interface, with member links described using sub-TLVs.</li>
              <li>The responder LSR MUST set the LAG Description Indicator
                flag in the DS Flags field of the DDMAP TLV.</li>
              <li>In the DDMAP TLV, the Local Interface Index Sub-TLV, Remote
                Interface Index Sub-TLV, and Multipath Data Sub-TLV are used to
                describe each LAG member link. All other fields of the DDMAP
                TLV are used to describe the LAG interface.</li>
              <li>
                <t>For each LAG member link of the LAG interface: </t>
                <ul spacing="normal">
                  <li>The responder LSR MUST add a Local Interface Index
                    Sub-TLV (described in <xref target="_INT_IND_DDMAP" format="default"/>)
                    with the LAG Member Link Indicator flag set in the
                    Interface Index Flags field. It describes the interface
                    index of this outgoing LAG member link (the local
                    interface index is assigned by the local LSR).</li>
                  <li>The responder LSR MAY add a Remote Interface Index
                    Sub-TLV (described in <xref target="_REM_INT_INDEX" format="default"/>)
                    with the LAG Member Link Indicator flag set in the
                    Interface Index Flags field. It describes the interface
                    index of the incoming LAG member link on the downstream
                    LSR (this interface index is assigned by the downstream
                    LSR). How the local LSR obtains the interface index of the
                    LAG member link on the downstream LSR is outside the scope
                    of this document.</li>
                  <li>The responder LSR MUST add a Multipath Data Sub-TLV
                    for this LAG member link, if the received DDMAP TLV
                    requested multipath information.</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>Based on the procedures described above, every LAG member
        link will have a Local Interface Index Sub-TLV and a Multipath Data
        Sub-TLV entry in the DDMAP TLV. The order of the sub-TLVs in the
        DDMAP TLV for a LAG member link MUST be Local Interface Index Sub-TLV
        immediately followed by Multipath Data Sub-TLV, except as follows. A
        LAG member link MAY also have a corresponding Remote Interface Index
        Sub-TLV. When a Local Interface Index Sub-TLV, a Remote Interface
        Index Sub-TLV, and a Multipath Data Sub-TLV are placed in the DDMAP TLV
        to describe a LAG member link, they MUST be placed in the order of
        Local Interface Index Sub-TLV, Remote Interface Index Sub-TLV, and
        Multipath Data Sub-TLV. 

The blocks of Local Interface Index,
        Remote Interface Index (optional), and Multipath Data Sub-TLVs for each member
        link MUST appear adjacent to each other and be in order of increasing local
        interface index.</t>
        <t>A responder LSR possessing a LAG interface with two member links
        would send the following DDMAP for this LAG interface: 

</t>
        <t/>
        <figure anchor="fig_ex_ddmap_in_reply">
          <name>Example of DDMAP in MPLS Echo Reply</name>
          <artwork align="left" name="" type="" alt=""><![CDATA[
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ~  DDMAP fields describing LAG interface (DS Flags with G set)  ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Local Interface Index Sub-TLV of LAG member link #1           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Remote Interface Index Sub-TLV of LAG member link #1          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Multipath Data Sub-TLV LAG member link #1                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Local Interface Index Sub-TLV of LAG member link #2           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Remote Interface Index Sub-TLV of LAG member link #2          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Multipath Data Sub-TLV LAG member link #2                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Label Stack Sub-TLV                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>When none of the received multipath information maps to a
        particular LAG member link, then the responder LSR MUST still place
        the Local Interface Index Sub-TLV and the Multipath Data Sub-TLV for
        that LAG member link in the DDMAP TLV. The value of the Multipath Length
        field of the Multipath Data Sub-TLV is set to zero.</t>
      </section>
      <section anchor="_DISC_ADD_INIT" numbered="true" toc="default">
        <name>Additional Initiator LSR Procedures</name>
        <t>The procedures in <xref target="s_responder_lsr_proc" format="default"/> allow an initiator LSR to: </t>
        <ul spacing="normal">
          <li>Identify whether or not the responder LSR can describe outgoing
            LAG member links separately, by looking at the LSR Capability
            TLV.</li>
          <li>Utilize the value of the LAG Description Indicator flag in DS
            Flags to identify whether each received DDMAP TLV describes a LAG
            interface or a non-LAG interface.</li>
          <li>Obtain multipath information that is expected to traverse the
            specific LAG member link described by the corresponding interface
            index.</li>
        </ul>
        <t>When an initiator LSR receives a DDMAP containing LAG member
        information from a downstream LSR with TTL=n, then the subsequent
        DDMAP sent by the initiator LSR to the downstream LSR with TTL=n+1
        through a particular LAG member link MUST be updated according to the following
        procedures: </t>
        <ul spacing="normal">
          <li>The Local Interface Index Sub-TLVs MUST be removed in the
            sending DDMAP.</li>
          <li>If the Remote Interface Index Sub-TLVs were present and the
            initiator LSR is traversing over a specific LAG member link, then
            the Remote Interface Index Sub-TLV corresponding to the LAG member
            link being traversed SHOULD be included in the sending DDMAP. All
            other Remote Interface Index Sub-TLVs MUST be removed from the
            sending DDMAP.</li>
          <li>The Multipath Data Sub-TLVs MUST be updated to include just one
            Multipath Data Sub-TLV. The initiator LSR MAY just keep the
            Multipath Data Sub-TLV corresponding to the LAG member link being
            traversed or combine the Multipath Data Sub-TLVs for all LAG
            member links into a single Multipath Data Sub-TLV when diagnosing
            further downstream LSRs.</li>
          <li>All other fields of the DDMAP are to comply with procedures
            described in <xref target="RFC8029" format="default"/>.</li>
        </ul>
        <t>
	    <xref target="fig_ex_ddmap_in_request" format="default"/> is an example that shows how to use the DDMAP TLV to
            send a notification about which member link (link #1 in the example) will be chosen to
            send the MPLS echo request message to the next downstream LSR: </t>
        <t/>
        <figure anchor="fig_ex_ddmap_in_request">
          <name>Example of DDMAP in MPLS Echo Request</name>
          <artwork align="left" name="" type="" alt=""><![CDATA[
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ~  DDMAP fields describing LAG interface (DS Flags with G set)  ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |[OPTIONAL] Remote Interface Index Sub-TLV of LAG member link #1|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |             Multipath Data Sub-TLV LAG member link #1         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Label Stack Sub-TLV                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="_TRAVERSE" numbered="true" toc="default">
      <name>Mechanism to Validate L2 ECMP Traversal</name>
      <t><xref target="_DISCOVER" format="default"/> defines the responder LSR procedures to
      construct a DDMAP for a downstream LAG. The Remote Interface Index
      Sub-TLV that describes the incoming LAG member links of the downstream
      LSR is optional, because this information from the downstream LSR is
      often not available on the responder LSR. In such case, the traversal of
      LAG member links can be validated with procedures described in <xref target="_WO_RII" format="default"/>. If LSRs can provide the Remote Interface Index
      Sub-TLVs, then the validation procedures described in <xref target="_W_RII" format="default"/> can be used.</t>
      <section anchor="_WO_RII" numbered="true" toc="default">
        <name>Incoming LAG Member Links Verification</name>
        <t>Without downstream LSRs returning Remote Interface Index Sub-TLVs
        in the DDMAP, validation of the LAG member link traversal requires
        that the initiator LSR traverses all available LAG member links and takes
        the results through additional logic. This section provides the mechanism for
        the initiator LSR to obtain additional information from the downstream
        LSRs and describes the additional logic in the initiator LSR to
        validate the L2 ECMP traversal.</t>
        <section anchor="_WO_RII_INIT" numbered="true" toc="default">
          <name>Initiator LSR Procedures</name>
          <t>An MPLS echo request carrying a DDMAP TLV with the Interface and
          Label Stack Object Request flag and LAG Description Indicator
          flag set is sent to indicate the request for Detailed Interface and
          Label Stack TLV with additional LAG member link information (i.e.,
          interface index) in the MPLS echo reply.</t>
        </section>
        <section anchor="_WO_RII_RESP" numbered="true" toc="default">
          <name>Responder LSR Procedures</name>
          <t>When it receives an echo request with the LAG Description Indicator
   flag set, a responder LSR that understands that flag and is capable of
   describing the incoming LAG member
          link SHOULD use the following procedures, regardless of whether or
          not the incoming interface was a LAG interface: </t>
          <ul spacing="normal">
            <li>
              <t>When the I flag (Interface and Label Stack Object Request
              flag) of the DDMAP TLV in the received MPLS echo request is
              set:</t>
              <ul spacing="normal">
                <li>The responder LSR MUST add the Detailed Interface and
                  Label Stack TLV (described in <xref target="_D_ILS" format="default"/>) in
                  the MPLS echo reply.</li>
                <li>If the incoming interface is a LAG, the responder LSR
                  MUST add the Incoming Interface Index Sub-TLV (described in
                  <xref target="_IN_INT_IND" format="default"/>) in the Detailed Interface and
                  Label Stack TLV. The LAG Member Link Indicator flag MUST
                  be set in the Interface Index Flags field, and the Interface
                  Index field set to the LAG member link that received the
                  MPLS echo request.</li>
              </ul>
            </li>
          </ul>
          <t> These procedures allow the initiator LSR to utilize the Incoming Interface Index Sub-TLV in the Detailed
              Interface and the Label Stack TLV to derive, if the incoming
              interface is a LAG, the identity of the incoming LAG member.</t>
        </section>
        <section numbered="true" toc="default">
          <name>Additional Initiator LSR Procedures</name>
          <t>Along with procedures described in <xref target="_DISCOVER" format="default"/>,
          the procedures described in this section will allow an initiator LSR
          to know: </t>
          <ul spacing="normal">
            <li>The expected load-balance information of every LAG member
              link, at LSR with TTL=n.</li>
            <li>With specific entropy, the expected interface index of the
              outgoing LAG member link at TTL=n.</li>
            <li>With specific entropy, the interface index of the incoming
              LAG member link at TTL=n+1.</li>
          </ul>
          <t>Depending on the LAG traffic division algorithm, the
          messages may or may not traverse different member links. The
          expectation is that there's a relationship between the interface
          index of the outgoing LAG member link at TTL=n and the interface
          index of the incoming LAG member link at TTL=n+1 for all entropies
          examined. 

   In other words,
   the messages with a set of entropies that load-balances to 
   outgoing LAG member link X at TTL=n should all reach the next hop on 
   the same incoming LAG member link Y at TTL=n+1.
          </t>
          <t>
   With additional logic, the initiator LSR can perform the following
   checks in a scenario where it (a) knows that there is a LAG
   that has two LAG members, between TTL=n and TTL=n+1, and (b) has
   the multipath information to traverse the two LAG member links.
</t>
          <t>The initiator LSR sends two MPLS echo request messages to
          traverse the two LAG member links at TTL=n+1: </t>
          <ul spacing="normal">
            <li>
              <t>Success case: </t>
              <ul spacing="normal">
                <li>One MPLS echo request message reaches TTL=n+1 on LAG
                  member link 1.</li>
                <li>The other MPLS echo request message reaches TTL=n+1 on
                  LAG member link 2.</li>
              </ul>
              <t>The two MPLS echo request messages sent by the
              initiator LSR reach the immediate downstream LSR from two
              different LAG member links.</t>
            </li>
            <li>
              <t>Error case: </t>
              <ul spacing="normal">
                <li>One MPLS echo request message reaches TTL=n+1 on LAG
                  member link 1.</li>
                <li>The other MPLS echo request message also reaches TTL=n+1
                  on LAG member link 1.</li>
                <li>One or both MPLS echo request messages cannot reach the
                  immediate downstream LSR on whichever link.</li>
              </ul>
              <t>One or two MPLS echo request messages sent by the
              initiator LSR cannot reach the immediate downstream LSR, or the
              two MPLS echo request messages reach at the immediate downstream
              LSR from the same LAG member link.</t>
            </li>
          </ul>
          <t>Note that the procedures defined above will provide a
          deterministic result for LAG interfaces that are back-to-back
          connected between LSRs (i.e., no L2 switch in between). 

If there is an L2 switch between the LSR at TTL=n and the LSR at TTL=n+1,
there is no guarantee that every incoming interface at TTL=n+1 can be
traversed, even when traversing every outgoing LAG member link at TTL=n.

Issues resulting from LAG with an L2 switch in between are further described
in <xref target="_LAG_L2_ISSUES" format="default"/>.

   LAG provisioning models in operator networks should be
   considered when analyzing the output of LSP Traceroute that is
   exercising L2 ECMPs.
          </t>
        </section>
      </section>
      <section anchor="_W_RII" numbered="true" toc="default">
        <name>Individual End-to-End Path Verification</name>
        <t>When the Remote Interface Index Sub-TLVs are available from an LSR
        with TTL=n, then the validation of LAG member link traversal can be
        performed by the downstream LSR of TTL=n+1. The initiator LSR follows
        the procedures described in <xref target="_DISC_ADD_INIT" format="default"/>.</t>
        <t>The DDMAP validation procedures for the downstream responder LSR
        are then updated to include the comparison of the incoming LAG member
        link to the interface index described in the Remote Interface Index
        Sub-TLV in the DDMAP TLV. Failure of this comparison results in the
        return code being set to "Downstream Mapping Mismatch (5)".</t>
      </section>
    </section>
    <section anchor="_LSR_CAP_TLV" numbered="true" toc="default">
      <name>LSR Capability TLV</name>
      <t>This document defines a new TLV that is referred to as the LSR
      Capability TLV. It MAY be included in the MPLS echo request message and
      the MPLS echo reply message. An MPLS echo request message and an MPLS
      echo reply message MUST NOT include more than one LSR Capability TLV.
      The presence of an LSR Capability TLV in an MPLS echo request message is
      a request that a responder LSR includes an LSR Capability TLV in the
      MPLS echo reply message, with the LSR Capability TLV describing features
      and extensions that the responder LSR supports.</t>
      <t>The format of the LSR Capability TLV is as below:</t>
      <t>LSR Capability TLV Type is 4. Length is 4. The LSR Capability TLV has
      the following format:  </t>
      <t/>
      <figure anchor="fig_lsr_cap_tlv">
        <name>LSR Capability TLV</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      LSR Capability Flags                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>Where:</t>
      <ul empty="true" spacing="normal">
        <li>The Type field is 2 octets in length, and the value is 4.</li>
        <li>The Length field is 2 octets in length, and the value is 4.</li>
        <li>
          <t>The LSR Capability Flags field is 4 octets in length; this
          document defines the following flags:</t>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                 Reserved (Must Be Zero)                   |U|D|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <t>This document defines two flags. The unallocated flags
          MUST be set to zero when sending and ignored on receipt. Both the U
          and the D flag MUST be cleared in the MPLS echo request message when
          sending and ignored on receipt. 

   Zero, one, or both of the flags (U and D) MAY be set in the MPLS echo reply message. </t>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
   Flag  Name and Meaning
   ----  ----------------

      U  Upstream LAG Info Accommodation

         An LSR sets this flag when the LSR is capable of describing
         a LAG member link in the Incoming Interface Index Sub-TLV
         in the Detailed Interface and Label Stack TLV.

      D  Downstream LAG Info Accommodation

         An LSR sets this flag when the LSR is capable of describing 
         LAG member links in the Local Interface Index Sub-TLV and 
         the Multipath Data Sub-TLV in the Downstream Detailed 
         Mapping TLV.
]]></artwork>
        </li>
      </ul>
    </section>
    <section anchor="DS_Flags" numbered="true" toc="default">
      <name>LAG Description Indicator Flag: G</name>
      <t>This document defines a new flag, the G flag (LAG Description
      Indicator), in the DS Flags field of the DDMAP TLV.</t>
      <t>The G flag in the MPLS echo request message indicates the request
      for detailed LAG information from the responder LSR. In the MPLS echo
      reply message, the G flag MUST be set if the DDMAP TLV describes a LAG
      interface. It MUST be cleared otherwise.</t>
      <t>The G flag is defined as below: </t>
      <ul empty="true" spacing="normal">
        <li>
          <t>The Bit Number is 3. </t>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   | MBZ |G|E|L|I|N|
   +-+-+-+-+-+-+-+-+
]]></artwork>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
Flag  Name and Meaning
----  ----------------

   G  LAG Description Indicator

      When this flag is set in the MPLS echo request, the responder 
      LSR is requested to respond with detailed LAG information.  
      When this flag is set in the MPLS echo reply, the corresponding 
      DDMAP TLV describes a LAG interface.
]]></artwork>
        </li>
      </ul>
    </section>
    <section anchor="_INT_IND_DDMAP" numbered="true" toc="default">
      <name>Local Interface Index Sub-TLV</name>
      <t>The Local Interface Index Sub-TLV describes the interface index
      assigned by the local LSR to an egress interface. One or more Local
      Interface Index sub-TLVs MAY appear in a DDMAP TLV.</t>
      <t>The format of the Local Interface Index Sub-TLV is below:</t>
      <t/>
      <figure anchor="fig_LII_subTLV">
        <name>Local Interface Index Sub-TLV</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     Local Interface Index                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>Where:</t>
      <ul spacing="normal">
        <li>The Type field is 2 octets in length, and the value is 4.</li>
        <li>The Length field is 2 octets in length, and the value is 4.</li>
        <li>The Local Interface Index field is 4 octets in length; it is an
          interface index assigned by a local LSR to an egress interface. It's
          normally an unsigned integer and in network byte order.</li>
      </ul>
    </section>
    <section anchor="_REM_INT_INDEX" numbered="true" toc="default">
      <name>Remote Interface Index Sub-TLV</name>
      <t>The Remote Interface Index Sub-TLV is an optional TLV; it describes
      the interface index assigned by a downstream LSR to an ingress
      interface. One or more Remote Interface Index sub-TLVs MAY appear in a
      DDMAP TLV.</t>
      <t>The format of the Remote Interface Index Sub-TLV is below:</t>
      <t/>
      <figure anchor="fig_RII_subTLV">
        <name>Remote Interface Index Sub-TLV</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Remote Interface Index                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>Where:</t>
      <ul spacing="normal">
        <li>The Type field is 2 octets in length, and the value is
          5.</li>
        <li>The Length field is 2 octets in length, and the value is 4.</li>
        <li>The Remote Interface Index field is 4 octets in length; it is an
          interface index assigned by a downstream LSR to an ingress
          interface. It's normally an unsigned integer and in network byte
          order.</li>
      </ul>
    </section>
    <section anchor="_D_ILS" numbered="true" toc="default">
      <name>Detailed Interface and Label Stack TLV</name>
      <t>The Detailed Interface and Label Stack TLV MAY be
      included in an MPLS echo reply message to report the interface on which
      the MPLS echo request message was received and the label stack that was
      on the packet when it was received. A responder LSR MUST NOT insert more
      than one instance of this TLV into the MPLS echo reply message. This TLV
      allows the initiator LSR to obtain the exact interface and label stack
      information as it appears at the responder LSR.</t>
      <t>Detailed Interface and Label Stack TLV Type is 6. Length is K +
      Sub-TLV Length (sum of Sub-TLVs). 

   K is the sum of all fields of this
   TLV prior to the list of Sub-TLVs, but the length of K depends on 
   the Address Type.

      Details of this information is described below. The Detailed Interface
      and Label Stack TLV has the following format: </t>
      <t/>
      <figure anchor="fig_detailed_int">
        <name>Detailed Interface and       Label Stack TLV</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Address Type  |             Reserved (Must Be Zero)           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   IP Address (4 or 16 octets)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Interface (4 or 16 octets)                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  .                                                               .   
  .                      List of Sub-TLVs                         .   
  .                                                               .   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>The Detailed Interface and Label Stack TLV format is derived
      from the Interface and Label Stack TLV format (from <xref target="RFC8029" format="default"/>). Two changes are introduced. The first is that the
      label stack is converted into a sub-TLV. The second is that a new
      sub-TLV is added to describe an interface index. The other fields of the
      Detailed Interface and Label Stack TLV have the same use and meaning as
      in <xref target="RFC8029" format="default"/>. A summary of these fields is as below:
      </t>
      <ul empty="true" spacing="normal">
        <li>
          <t>Address Type </t>
          <ul spacing="normal">
            <li>
              <t>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 length of the initial part
              of the TLV is listed as "K Octets". The Address Type is set to
              one of the following values: </t>
              <t/>
              <artwork align="left" name="" type="" alt=""><![CDATA[
         Type #        Address Type           K Octets
         ------        ------------           --------
              1        IPv4 Numbered                16
              2        IPv4 Unnumbered              16
              3        IPv6 Numbered                40
              4        IPv6 Unnumbered              28
]]></artwork>
            </li>
          </ul>
        </li>
        <li>
          <t>IP Address and Interface </t>
          <ul spacing="normal">
            <li>IPv4 addresses and interface indices are encoded in 4 octets;
              IPv6 addresses are encoded in 16 octets.</li>
            <li>If the interface upon which the echo request message was
              received is numbered, then the Address Type MUST be set to IPv4
              Numbered or IPv6 Numbered, 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.</li>
            <li>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.</li>
            <li>Note: Usage of IPv6 Unnumbered has the same issue as <xref target="RFC8029" format="default"/>, which is described in Section 3.4.2 of <xref target="RFC7439" format="default"/>. 

	      A solution should be considered and applied
              to both <xref target="RFC8029" format="default"/> and this document.</li>
          </ul>
        </li>
      </ul>
      <section numbered="true" toc="default">
        <name>Sub-TLVs</name>
        <t>This section defines the sub-TLVs that MAY be included as part of
        the Detailed Interface and Label Stack TLV. Two sub-TLVs are
        defined:</t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
        Sub-Type    Sub-TLV Name
        ---------   ------------
          1         Incoming Label Stack
          2         Incoming Interface Index
]]></artwork>
        <section numbered="true" toc="default">
          <name>Incoming Label Stack Sub-TLV</name>
          <t>The Incoming Label Stack Sub-TLV contains the label stack as
          received by an LSR. If any TTL values have been changed by this LSR,
          they SHOULD be restored.</t>
          <t>Incoming Label Stack Sub-TLV Type is 1. Length is variable, and
          its format is as below: </t>
          <t/>
          <figure anchor="fig_ILS_subTLV">
            <name>Incoming Label    Stack Sub-TLV</name>
            <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                 Label                 | TC  |S|      TTL      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  .                                                               .
  .                                                               .
  .                                                               .
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                 Label                 | TC  |S|      TTL      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure>
        </section>
        <section anchor="_IN_INT_IND" numbered="true" toc="default">
          <name>Incoming Interface Index Sub-TLV</name>
          <t>The Incoming Interface Index Sub-TLV MAY be
          included in a Detailed Interface and Label Stack TLV. The Incoming
          Interface Index Sub-TLV describes the index assigned by a local LSR
          to the interface that received the MPLS echo request message.</t>
          <t>Incoming Interface Index Sub-TLV Type is 2. Length is 8, and its
          format is as below:</t>
          <figure anchor="fig_III_subTLV">
            <name>Incoming Interface    Index Sub-TLV</name>
            <artwork align="left" name="" type="" alt=""><![CDATA[
   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             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    Interface Index Flags      |       Reserved (Must Be Zero) |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Incoming Interface Index                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure>
          <t> Interface Index Flags</t>
          <ul empty="true" spacing="normal">
            <li>
              <t>The Interface Index Flags field is a bit vector with following
              format. </t>
              <t/>
              <artwork align="left" name="" type="" alt=""><![CDATA[
   0                   1
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Reserved (Must Be Zero)   |M|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
              <t>One flag is defined: M. The remaining flags MUST be
              set to zero when sending and ignored on receipt. </t>
              <t/>
              <artwork align="left" name="" type="" alt=""><![CDATA[
  Flag  Name and Meaning
  ----  ----------------

     M  LAG Member Link Indicator

        When this flag is set, the interface index described in this 
        sub-TLV is a member of a LAG.
]]></artwork>
            </li>
          </ul>
          <t>Incoming Interface Index </t>
          <ul empty="true" spacing="normal">
            <li>An Index assigned by the LSR to this interface. It's normally
              an unsigned integer and in network byte order.</li>
          </ul>
        </section>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Rate-Limiting on Echo Request/Reply Messages</name>
      <t>An LSP may be over several LAGs. Each LAG may have many
      member links. To exercise all the links, many echo request/reply
      messages will be sent in a short period. It's possible that those
      messages may traverse a common path as a burst. Under some circumstances,
      this might cause congestion at the common path. To avoid potential
      congestion, it is RECOMMENDED that implementations randomly delay the
      echo request and reply messages at the initiator LSRs and responder
      LSRs. Rate-limiting of ping traffic is further specified in Section 5 of
      <xref target="RFC8029" format="default"/> and Section 4.1 of <xref target="RFC6425" format="default"/>, which
      apply to this document as well.</t>
    </section>
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document extends the LSP Traceroute mechanism <xref target="RFC8029" format="default"/> to discover and exercise L2 ECMP paths to determine
      problematic member link(s) of a LAG. These on-demand diagnostic
      mechanisms are used by an operator within an MPLS control domain.</t>
      <t><xref target="RFC8029" format="default"/> reviews the possible attacks and approaches
      to mitigate possible threats when using these mechanisms.</t>
      <t>To prevent leakage of vital information to untrusted users, a
      responder LSR MUST only accept MPLS echo request messages from
      designated trusted sources via filtering the source IP address field of
      received MPLS echo request messages. As noted in <xref target="RFC8029" format="default"/>, spoofing attacks only have a small window of
      opportunity. 

   If an intermediate node hijacks these messages (i.e., causes 
   non-delivery), the use of these mechanisms will determine the data 
   plane is not working as it should.
   Hijacking of a responder node such
      that it provides a legitimate reply would involve compromising the node
      itself and the MPLS control domain. 

<xref target="RFC5920" format="default"/> 
 provides additional MPLS network-wide
   operation recommendations to avoid attacks.

 Please note that source IP address
      filtering provides only a weak form of access control and is not, in
      general, a reliable security mechanism. Nonetheless, it is required here
      in the absence of any more robust mechanisms that might be used.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section numbered="true" toc="default">
        <name>LSR Capability TLV</name>
        <t>IANA has assigned value 4 (from the range
        0-16383) for the LSR Capability TLV from the "TLVs" registry under
	the "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs)
	Ping Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>. </t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
  Type    TLV Name                                    Reference
  -----   --------                                    ---------
    4     LSR Capability                              RFC 8611
]]></artwork>
        <section numbered="true" toc="default">
          <name>LSR Capability Flags</name>
          <t>IANA has created a new
          "LSR Capability Flags" registry. The initial contents are as follows:
          </t>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
  Value   Meaning                                     Reference
  -----   -------                                     ---------
    31    D: Downstream LAG Info Accommodation        RFC 8611
    30    U: Upstream LAG Info Accommodation          RFC 8611
  0-29    Unassigned
]]></artwork>
          <t> Assignments of LSR Capability Flags are via Standards
          Action <xref target="RFC8126" format="default"/>.</t>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>Local Interface Index Sub-TLV</name>
        <t>IANA has assigned value 4 (from the range
        0-16383) for the Local Interface Index Sub-TLV from the "Sub-TLVs for
	TLV Type 20" subregistry of the "TLVs" registry in the
        "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping
	Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>.
        </t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
  Sub-Type   Sub-TLV Name                             Reference
  --------   ------------                             ---------
     4       Local Interface Index                    RFC 8611
]]></artwork>
        <section numbered="true" toc="default">
          <name>Interface Index Flags</name>
          <t>IANA has created a new "Interface Index Flags" registry. The
	  initial contents are as follows:
          </t>
          <t/>
          <artwork align="left" name="" type="" alt=""><![CDATA[
 Bit Number Name                                      Reference
 ---------- --------------------------------          ---------
      15    M: LAG Member Link Indicator              RFC 8611
    0-14    Unassigned
]]></artwork>
          <t> Assignments of Interface Index Flags are via Standards
          Action <xref target="RFC8126" format="default"/>.</t>
          <t>Note that this registry is used by the Interface Index Flags
          field of the following sub-TLVs: </t>
          <ul spacing="normal">
            <li>The Local Interface Index Sub-TLV, which may be present in the
              Downstream Detailed Mapping TLV.</li>
            <li>The Remote Interface Index Sub-TLV, which may be present in
              the Downstream Detailed Mapping TLV.</li>
            <li>The Incoming Interface Index Sub-TLV, which may be present in
              the Detailed Interface and Label Stack TLV.</li>
          </ul>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>Remote Interface Index Sub-TLV</name>
        <t>IANA has assigned value 5 (from the range
        0-16383) for the Remote Interface Index Sub-TLV from the
        "Sub-TLVs for TLV Type 20" subregistry of the "TLVs" registry in the
        "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping
	Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>. </t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
  Sub-Type   Sub-TLV Name                             Reference
  --------   ------------                             ---------
    5        Remote Interface Index                   RFC 8611
]]></artwork>
      </section>
      <section numbered="true" toc="default">
        <name>Detailed Interface and Label Stack TLV</name>
        <t>IANA has assigned value 6 (from the range
        0-16383) for the Detailed Interface and Label Stack TLV from the
	"TLVs" registry in the
        "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping
	Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>. </t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
  Type    TLV Name                                    Reference
  -----   --------                                    ---------
    6     Detailed Interface and Label Stack          RFC 8611
]]></artwork>
        <section numbered="true" toc="default">
          <name>Sub-TLVs for TLV Type 6</name>
          <t>
	    RFC 8029 changed the registration procedures for TLV and sub-TLV
	    registries for LSP Ping.
          </t>
          <t>IANA has created a new
          "Sub-TLVs for TLV Type 6" subregistry under the "TLVs" registry of
	  the "Multiprotocol Label Switching (MPLS) Label Switched Paths
	  (LSPs) Ping Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>.</t>
          <t>
	    This registry conforms with RFC 8029.
          </t>
          <t>The registration procedures for this sub-TLV registry are:

          </t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Range        Registration Procedure   Note
-----        ----------------------   -----
0-16383      Standards Action         This range is for mandatory
                                      TLVs or for optional TLVs that
                                      require an error message if
                                      not recognized.
16384-31743  RFC Required             This range is for mandatory 
                                      TLVs or for optional TLVs that
                                      require an error message if 
                                      not recognized.
31744-32767  Private Use              Not to be assigned
32768-49161  Standards Action         This range is for optional TLVs
                                      that can be silently dropped if
                                      not recognized.
49162-64511  RFC Required             This range is for optional TLVs
                                      that can be silently dropped if
                                      not recognized.
64512-65535  Private Use              Not to be assigned
]]></artwork>
          <t>The initial allocations for this registry are:

          </t>
          <artwork align="left" name="" type="" alt=""><![CDATA[
Sub-Type     Sub-TLV Name             Reference Comment
--------     ------------             --------- -------
0            Reserved                 RFC 8611
1            Incoming Label Stack     RFC 8611
2            Incoming Interface Index RFC 8611
3-31743      Unassigned
31744-32767                           RFC 8611  Reserved for 
                                                Private Use
32768-64511  Unassigned
64512-65535                           RFC 8611  Reserved for 
                                                Private Use
]]></artwork>
          <t>
 Note: IETF does not prescribe how the Private Use sub-TLVs are
 handled; however, if a packet containing a sub-TLV from a Private Use
 ranges is received by an LSR that does not recognize the sub-TLV, an
 error message MAY be returned if the sub-TLV is from the range 31744-32767,
 and the packet SHOULD be silently dropped if it is from the range
 64511-65535.

          </t>
        </section>
        <section numbered="true" toc="default">
          <name>Interface and Label Stack Address Types</name>
          <t>The Detailed Interface and Label Stack TLV shares the
          Interface and Label Stack Address Types with the Interface and
          Label Stack TLV. To reflect this, IANA has updated the name of the registry from "Interface and
          Label Stack Address Types" to "Interface and Label Stack
	  and Detailed Interface and Label Stack Address Types".</t>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>DS Flags</name>
        <t>IANA has assigned a new bit number from the "DS
        Flags" subregistry of the "Multiprotocol Label Switching (MPLS) Label
	Switched Paths (LSPs) Ping Parameters" registry <xref target="IANA-MPLS-LSP-PING" format="default"/>.</t>
        <t>Note: the "DS Flags" subregistry was created by <xref target="RFC8029" format="default"/>. </t>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
 Bit number Name                                        Reference
 ---------- ----------------------------------------    ---------
      3     G: LAG Description Indicator                RFC 8611
]]></artwork>
      </section>
    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->
  <back>
    <!-- References split into informative and normative -->
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8029" target="https://www.rfc-editor.org/info/rfc8029">
          <front>
            <title>Detecting Multiprotocol Label Switched (MPLS) Data-Plane Failures</title>
            <seriesInfo name="DOI" value="10.17487/RFC8029"/>
            <seriesInfo name="RFC" value="8029"/>
            <author initials="K." surname="Kompella" fullname="K. Kompella">
              <organization/>
            </author>
            <author initials="G." surname="Swallow" fullname="G. Swallow">
              <organization/>
            </author>
            <author initials="C." surname="Pignataro" fullname="C. Pignataro" role="editor">
              <organization/>
            </author>
            <author initials="N." surname="Kumar" fullname="N. Kumar">
              <organization/>
            </author>
            <author initials="S." surname="Aldrin" fullname="S. Aldrin">
              <organization/>
            </author>
            <author initials="M." surname="Chen" fullname="M. Chen">
              <organization/>
            </author>
            <date year="2017" month="March"/>
            <abstract>
              <t>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.</t>
              <t>This document obsoletes RFCs 4379, 6424, 6829, and 7537, and updates RFC 1122.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="BCP" value="26"/>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7439" target="https://www.rfc-editor.org/info/rfc7439">
          <front>
            <title>Gap Analysis for Operating IPv6-Only MPLS Networks</title>
            <seriesInfo name="DOI" value="10.17487/RFC7439"/>
            <seriesInfo name="RFC" value="7439"/>
            <author initials="W." surname="George" fullname="W. George" role="editor">
              <organization/>
            </author>
            <author initials="C." surname="Pignataro" fullname="C. Pignataro" role="editor">
              <organization/>
            </author>
            <date year="2015" month="January"/>
            <abstract>
              <t>This document reviews the Multiprotocol Label Switching (MPLS) protocol suite in the context of IPv6 and identifies gaps that must be addressed in order to allow MPLS-related protocols and applications to be used with IPv6-only networks.  This document is intended to focus on gaps in the standards defining the MPLS suite, and is not intended to highlight particular vendor implementations (or lack thereof) in the context of IPv6-only MPLS functionality.</t>
              <t>In the data plane, MPLS fully supports IPv6, and MPLS labeled packets can be carried over IPv6 packets in a variety of encapsulations. However, support for IPv6 among MPLS control-plane protocols, MPLS applications, MPLS Operations, Administration, and Maintenance (OAM), and MIB modules is mixed, with some protocols having major gaps.  For most major gaps, work is in progress to upgrade the relevant protocols.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC5920" target="https://www.rfc-editor.org/info/rfc5920">
          <front>
            <title>Security Framework for MPLS and GMPLS Networks</title>
            <seriesInfo name="DOI" value="10.17487/RFC5920"/>
            <seriesInfo name="RFC" value="5920"/>
            <author initials="L." surname="Fang" fullname="L. Fang" role="editor">
              <organization/>
            </author>
            <date year="2010" month="July"/>
            <abstract>
              <t>This document provides a security framework for Multiprotocol Label Switching (MPLS) and Generalized Multiprotocol Label Switching (GMPLS) Networks.  This document addresses the security aspects that are relevant in the context of MPLS and GMPLS.  It describes the security threats, the related defensive techniques, and the mechanisms for detection and reporting.  This document emphasizes RSVP-TE and LDP security considerations, as well as inter-AS and inter-provider security considerations for building and maintaining MPLS and GMPLS networks across different domains or different Service Providers.  This document is not an Internet Standards Track  specification; it is published for informational purposes.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6425" target="https://www.rfc-editor.org/info/rfc6425">
          <front>
            <title>Detecting Data-Plane Failures in Point-to-Multipoint MPLS - Extensions to LSP Ping</title>
            <seriesInfo name="DOI" value="10.17487/RFC6425"/>
            <seriesInfo name="RFC" value="6425"/>
            <author initials="S." surname="Saxena" fullname="S. Saxena" role="editor">
              <organization/>
            </author>
            <author initials="G." surname="Swallow" fullname="G. Swallow">
              <organization/>
            </author>
            <author initials="Z." surname="Ali" fullname="Z. Ali">
              <organization/>
            </author>
            <author initials="A." surname="Farrel" fullname="A. Farrel">
              <organization/>
            </author>
            <author initials="S." surname="Yasukawa" fullname="S. Yasukawa">
              <organization/>
            </author>
            <author initials="T." surname="Nadeau" fullname="T. Nadeau">
              <organization/>
            </author>
            <date year="2011" month="November"/>
            <abstract>
              <t>Recent proposals have extended the scope of Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) to encompass point-to-multipoint (P2MP) LSPs.</t>
              <t>The requirement for a simple and efficient mechanism that can be used to detect data-plane failures in point-to-point (P2P) MPLS LSPs has been recognized and has led to the development of techniques for fault detection and isolation commonly referred to as "LSP ping".</t>
              <t>The scope of this document is fault detection and isolation for P2MP MPLS LSPs.  This documents does not replace any of the mechanisms of LSP ping, but clarifies their applicability to MPLS P2MP LSPs, and extends the techniques and mechanisms of LSP ping to the MPLS P2MP environment.</t>
              <t>This document updates RFC 4379.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="IANA-MPLS-LSP-PING" target="https://www.iana.org/assignments/mpls-lsp-ping-parameters/">
          <front>
            <title>Multiprotocol Label Switching (MPLS) Label Switched Paths
          (LSPs) Ping Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IEEE802.1AX">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks - Link
          Aggregation</title>
            <seriesInfo name="IEEE Std." value="802.1AX"/>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
            <!--    <date month="December" year="2014"/> -->
          </front>
          <!--	<seriesInfo name="DOI" value="10.1109/IEEESTD.2014.7055197"/> -->
        </reference>
      </references>
    </references>
    <section anchor="_LAG_L2_ISSUES" numbered="true" toc="default">
      <name>LAG with Intermediate L2 Switch Issues</name>
      <t>Several flavors of provisioning models that use a "LAG with L2 switch" and the
      corresponding MPLS data-plane ECMP traversal validation issues are
      described in this appendix.</t>
      <section numbered="true" toc="default">
        <name>Equal Numbers of LAG Members</name>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
R1 ==== S1 ==== R2
]]></artwork>
        <t>The issue with this LAG provisioning model is that packets
        traversing a LAG member from Router 1 (R1) to intermediate L2 switch
        (S1) can get load-balanced by S1 towards Router 2 (R2). Therefore,
        MPLS echo request messages traversing a specific LAG member from R1 to
        S1 can actually reach R2 via any of the LAG members, and the sender of
        the MPLS echo request messages has no knowledge of this nor any way to
        control this traversal. 




In the worst case, MPLS echo request messages with
specific entropies will exercise every LAG member link from
R1 to S1 and can all reach R2 via the same LAG member link.
Thus, it is impossible for the MPLS echo request sender to verify that
packets intended to traverse a specific LAG member link from R1 to S1
did actually traverse that LAG member link and to deterministically
exercise "receive" processing of every LAG member link on R2.

 (Note: As far as we can tell, there's not a better option
        than "try a bunch of entropy labels and see what responses you can get
        back", and that's the same remedy in all the described topologies.)</t>
      </section>
      <section numbered="true" toc="default">
        <name>Deviating Numbers of LAG Members</name>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
           ____
R1 ==== S1 ==== R2
]]></artwork>
        <t>There are deviating numbers of LAG members on the two sides
        of the L2 switch. The issue with this LAG provisioning model is the
        same as with the previous model: the sender of MPLS echo request messages has no
        knowledge of the L2 load-balancing algorithm nor entropy values to control
        the traversal.</t>
      </section>
      <section numbered="true" toc="default">
        <name>LAG Only on Right</name>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
R1 ---- S1 ==== R2
]]></artwork>
        <t>

   The issue with this LAG provisioning model is that there is no way
   for an MPLS echo request sender to deterministically exercise
   both LAG member links from S1 to R2.

 And without such, "receive" processing
        of R2 on each LAG member cannot be verified.</t>
      </section>
      <section numbered="true" toc="default">
        <name>LAG Only on Left</name>
        <t/>
        <artwork align="left" name="" type="" alt=""><![CDATA[
R1 ==== S1 ---- R2
]]></artwork>
        <t>The MPLS echo request sender has knowledge of how to traverse
        both LAG members from R1 to S1. However, both types of packets will
        terminate on the non-LAG interface at R2. It becomes impossible for the
        MPLS echo request sender to know that MPLS echo request messages
        intended to traverse a specific LAG member from R1 to S1 did indeed
        traverse that LAG member.</t>
      </section>
    </section>
    <section numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Nagendra Kumar and Sam Aldrin for
      providing useful comments and suggestions. The authors would like to
      thank Loa Andersson for performing a detailed review and providing a
      number of comments.</t>
      <t>The authors also would like to extend sincere thanks to the MPLS RT
      review members who took the time to review and provide comments. The members
      are Eric Osborne, Mach Chen, and Yimin Shen. The suggestion by Mach Chen
      to generalize and create the LSR Capability TLV was tremendously helpful
      for this document and likely for future documents extending the MPLS LSP
      Ping and Traceroute mechanisms. The suggestion by Yimin Shen to create
      two separate validation procedures had a big impact on the contents of
      this document.</t>
    </section>
  </back>
</rfc>
