<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8250 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8250.xml">
<!ENTITY RFC8754 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8762 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8762.xml">
<!ENTITY RFC8972 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8972.xml">
<!ENTITY RFC9197 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9197.xml">
<!ENTITY RFC9486 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9486.xml">
<!ENTITY RFC9268 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9268.xml">
<!ENTITY RFC9326 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9326.xml">
<!ENTITY RFC9343 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9343.xml">
<!ENTITY I-D.ietf-mpls-mna-hdr SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-mna-hdr.xml">
<!ENTITY I-D.ietf-mpls-mna-ps-hdr SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-mna-ps-hdr.xml">
<!ENTITY I-D.ietf-mpls-mna-fwk SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-mna-fwk.xml">
<!ENTITY I-D.ietf-mpls-mna-ioam SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-mna-ioam.xml">
<!ENTITY I-D.ietf-ippm-asymmetrical-pkts SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ippm-asymmetrical-pkts.xml">
]>
<rfc submissionType="IETF" docName="draft-gandhi-ippm-stamp-mpls-hdr-00" category="std" ipr="trust200902" consensus="true">
    <!-- Generated by id2xml 1.5.0 on 2020-02-06T01:41:26Z -->
    <?rfc compact="yes"?>
    <?rfc text-list-symbols="oo*+-"?>
    <?rfc subcompact="no"?>
    <?rfc sortrefs="no"?>
    <?rfc symrefs="yes"?>
    <?rfc strict="yes"?>
    <?rfc toc="yes"?>
    <front>
    <title abbrev="STAMP for Reflecting MPLS Sub-Stacks">Simple Two-Way Active Measurement Protocol (STAMP) Extensions for Reflecting STAMP Packet MPLS Sub-Stacks</title>
    <seriesInfo name="Internet-Draft" value="draft-gandhi-ippm-stamp-mpls-hdr-00"/>    
    <author fullname="Rakesh Gandhi" initials="R." role="editor" surname="Gandhi">
    <organization>Cisco Systems, Inc.</organization>
    <address>
    <postal><street>Canada</street>
    </postal>
        <email>rgandhi@cisco.com</email>
    </address>
    </author>

    <author fullname="Tianran Zhou" initials="T." surname="Zhou">
      <organization showOnFrontPage="true">Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>zhoutianran@huawei.com</email>
      </address>
    </author>

    <author fullname="Zhenqiang Li" initials="Z." surname="Li">
      <organization showOnFrontPage="true">China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>lizhenqiang@chinamobile.com</email>
      </address>
    </author>

    <date year="2025"/>
    <workgroup>IPPM Working Group</workgroup>
    <abstract>
        <t>
The Simple Two-Way Active Measurement Protocol (STAMP) and its optional extensions can be used for Edge-To-Edge (E2E) active measurement. In Situ Operations, Administration, and Maintenance (IOAM) data fields can be used for recording and collecting Hop-By-Hop (HBH) and E2E operational and telemetry information. This document extends STAMP to reflect MPLS Network Action Sub-Stacks for HBH and E2E active measurements, for example, using IOAM data fields.
</t>

    </abstract>
    </front>

    <middle>

   <section title="Introduction" anchor="sect-1">

       <t>
The Simple Two-Way Active Measurement Protocol (STAMP) provides capabilities for the measurement of various performance metrics in IP networks <xref target="RFC8762" format="default"/> without the use of a control channel to pre-signal session parameters. <xref target="RFC8972" format="default"/> defines optional extensions in the form of TLVs for STAMP. The STAMP test packets are transmitted along a path between a Session-Sender and a Session-Reflector to measure Edge-To-Edge (E2E) performance delay and packet loss along that path.
</t>

<t>
In Situ Operations, Administration, and Maintenance (IOAM) is used for recording and collecting operational and telemetry information while the packet traverses a path between two points in the network. The IOAM data fields are defined in <xref target="RFC9197" format="default"/>. Currently, there is no adopted method defined to reflect the collected IOAM data fields back to the Sender, where the Sender can use that information to support the hop-by-hop and edge-to-edge measurement use cases.
</t>

<t>
MPLS packets may carry MPLS Network Action (MNA) Sub-Stacks as defined in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/> and Post-Stack Header as defined in <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default"/>.
</t>

<t>
It may be desired to record and collect HBH and E2E operational and telemetry information using active measurement packets between two nodes in a network. This is achieved by augmenting STAMP <xref target="RFC8762" format="default"/> using optional STAMP extensions defined in <xref target="RFC8972" format="default"/> to reflect MNA Sub-Stacks as specified in this document. The procedure defined in this document leverages the existing implementations on the midpoint nodes with MPLS data plane without any additional requirements.
</t>

   </section>

   <section title="Conventions Used in This Document" anchor="sect-2">
       
   <section title="Requirements Language" anchor="sect-2.1">

               <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 title="Abbreviations" anchor="sect-2.2">

    <t>
    ECMP:  Equal Cost Multi-Path</t>
    <t>
    E2E:  Edge-To-Edge</t>
    <t>
    HBH:  Hop-By-Hop</t>
    <t>
    IOAM:  In Situ Operations, Administration, and Maintenance</t>
    <t>
    MNA:  Multiprotocol Label Switching Network Action</t>
    <t>
    MTU:  Maximum Transmission Unit </t>
    <t>
    STAMP:  Simple Two-way Active Measurement Protocol </t>
    <t>
    TLV:   Type-Length-Value </t>

    </section>

    <section title="STAMP Reference Topology" anchor="sect-2.3">

<t>
In the "STAMP Reference Topology" shown in Figure 1, the STAMP Session-Sender S1 initiates a Session-Sender test packet, and the STAMP Session-Reflector R1 transmits a reply Session-Reflector test packet. Node M1 is a midpoint node that does not perform any STAMP processing.
</t>

<t>
T1 is a transmit timestamp, and T4 is a receive timestamp added by node S1. T2 is a receive timestamp, and T3 is a transmit timestamp added by node R1.
</t>

   <figure anchor="stamp-reference-topology">
        <name>STAMP Reference Topology</name>
  <artwork name="" type="" align="left" alt=""><![CDATA[
          T1                                       T2   
         /                                           \   
+-------+    Test Packet  +-------+                   +-------+
|       | - - - - - - - - |       | - - - - - - - - ->|       |
|   S1  |=================|   M1  |===================|   R1  |
|       |<- - - - - - - - |       | - - - - - - - - - |       |
+-------+                 +-------+ Reply Test Packet +-------+
         \                                           /
          T4                                       T3

STAMP Session-Sender                     STAMP Session-Reflector
]]></artwork>
    </figure>

    </section>
    </section>

    <section title="Overview" anchor="sect-3">

        <t>
<xref target="RFC8972" format="default"/> defines optional extensions for STAMP. The optional extensions are added to the base STAMP test packet defined in <xref target="RFC8762" format="default"/> in the form of TLVs. As specified in <xref target="RFC8972" format="default"/>, both Session-Sender and Session-Reflector test packets are symmetric in size when including all optional TLVs. The Session-Reflector reflects all received STAMP TLVs from the Session-Sender test packets.
</t>

<t>
As specified in <xref target="RFC8762" format="default"/>, STAMP test packets are transmitted with IP/UDP headers. Since midpoint nodes do not process the UDP headers in the packets, they are agnostic to the STAMP test packets in the payload.
</t>

        <t>
This document also defines a new TLV option for STAMP, called "Reflected MNA Sub-Stack Data" (value TBA1). When a STAMP Session-Sender adds an MNA Sub-Stack in the test packet, it also adds a "Reflected MNA Sub-Stack Data" STAMP TLV in the Session-Sender test packet with the length set to the MNA Sub-Stack length (NASL) and the value field in the TLV initialized to zeros, in order to receive a copy of that MNA Sub-Stack back in the STAMP TLV. When adding multiple MNA Sub-Stacks in the Session-Sender test packet, multiple "Reflected MNA Sub-Stack Data" TLVs MUST be added, each one with the matching length to the MNA Sub-Stack and Ancillary Data and in the same order.
</t>

<t>
As the procedure defined in this document leverages the existing implementations on the midpoint nodes for the MNA Sub-Stacks, no additional requirements are specified when carrying MNA Sub-Stacks in STAMP. The MNA Sub-Stack is processed by the nodes using the same procedures specified in the document that defined the MNA Sub-Stack.
</t>

<t>
An example STAMP test packet for the MPLS data plane carrying MNA Sub-Stacks in the MPLS header and reflected MNA Sub-Stack data in STAMP TLVs is shown in Figure 2.
</t>

        <figure anchor="stamp-generic-reflected-mna-data">
        <name>Example STAMP Test Packet with Reflected MNA Sub-Stack Data STAMP TLV</name>
    <artwork name="" type="" align="left" alt=""><![CDATA[
    +------------------------------------------------+
    | MPLS Header                                    |
    +------------------------------------------------+
    | MNA Sub-Stack-1 I-D.ietf-mpls-mna-hdr          |
    ~                                                ~
    +------------------------------------------------+
    ~ ...                                            ~
    +------------------------------------------------+
    | MNA Sub-Stack-N I-D.ietf-mpls-mna-hdr          |
    ~                                                ~
    +------------------------------------------------+
    ~ ...                                            ~
    +------------------------------------------------+
    | MNA Post-Stack Header I-D.ietf-mpls-mna-ps-hdr |
    ~                                                ~
    +------------------------------------------------+
    | IP Header                                      |
    +------------------------------------------------+
    | UDP Header                                     |
    +------------------------------------------------+
    | STAMP Packet RFC 8972                          |
    +------------------------------------------------+
    | Reflected MNA Sub-Stack-1 Data STAMP TLV (TBA1)|
    ~                                                ~
    +------------------------------------------------+
    ~ ...                                            ~
    +------------------------------------------------+
    | Reflected MNA Sub-Stack-M Data STAMP TLV (TBA1)|
    ~                                                ~
    +------------------------------------------------+
    | Reflected MNA Post-Stack Data STAMP TLV (TBA1) |
    ~                                                ~
    +------------------------------------------------+
]]></artwork>
    </figure>

    <t>
When the Session-Reflector receives a STAMP test packet with an MNA and a STAMP TLV of "Reflected MNA Sub-Stack Data," the Session-Reflector that supports this STAMP TLV MUST copy the entire MNA Sub-Stack, including the Ancillary Data and header, into the "Reflected MNA Sub-Stack Data" TLV in the Session-Reflector payload. When there are multiple MNA Sub-Stacks in the Session-Sender test packet, all MNA Sub-Stacks, including Ancillary Data, MUST be copied in the STAMP TLVs and MUST add all MNA Sub-Stacks, including Ancillary Data, in the Session-Reflector test packet in the same order.
</t>

<t>
The Session-Reflector adds the matching MNA Sub-Stacks and Ancillary Data in the MPLS header of the Session-Reflector test packet for the reverse direction.
</t>

<t>
When the Session-Reflector receives a STAMP test packet with an MNA Sub-Stack but without a "Reflected MNA Sub-Stack Data" STAMP TLV, the Session-Reflector does not copy the MNA Sub-Stack into the Session-Reflector test packet.
</t>

<t>
When the Session-Sender test packets carry an MNA Sub-Stack that it does not require the Session-Reflector to reflect in the Session-Reflector test packet, it does not add the matching Reflected MNA Sub-Stack Data TLV in the Session-Sender test packet.
</t>

<t>
If the Session-Reflector receives Session-Sender test packets with non-zero values in the first 8 bytes (excluding the Ancillary Data field that may change) of the "Reflected MNA Sub-Stack Data" STAMP TLV, it MUST match the values in the corresponding MNA Sub-Stack in the MPLS header before copying data into the STAMP TLV. This mechanism is employed in case of ambiguity when there are multiple MNA Sub-Stacks in the MPLS header with the same length and not all need to be copied and reflected in the STAMP TLV.
</t>

<t>
The Session-Sender and Session-Reflector test packets are symmetric in size, and hence the Session-Sender and Session-Reflector MUST ensure that the resulting test packets do not exceed the MPLS MTU after adding the Reflected Data STAMP TLVs. If necessary, Reflected Data STAMP TLVs can be removed to avoid violating the MPLS MTU limit.
</t>

<t>
If, for any reason, the Session-Reflector does not use the received Reflected MNA Sub-Stack Data STAMP TLV for reflecting data, it MUST return the STAMP TLV as malformed, i.e., with the U flag (Unrecognized) set in the STAMP TLV Flags using the procedure defined in <xref target="RFC8972" format="default"/>.
</t>

<t>
Note that the use case where the MNA Sub-Stack length changes in the Session-Sender test packets along the path is outside the scope of this document.
Also, the use case where MNA Sub-Stacks are added or removed in the Session-Sender test packets along the path is outside the scope of this document.
</t>

    </section>

    <section title="Use Case of Reflecting IOAM Data Fields" anchor="sect-4">

    <t>
In Situ Operations, Administration, and Maintenance (IOAM) is used for recording and collecting operational and telemetry information while the packet traverses a path between two points in the network. The IOAM data fields are defined in <xref target="RFC9197" format="default"/>. Examples of data recorded by IOAM Trace Options include per-hop information, such as node ID, timestamp, queue depth, interface ID, interface load, etc. The information collected can be used for monitoring ECMP paths, proof-of-transit, and troubleshooting failures in the network. IOAM can be used with STAMP test packets for active measurement. The procedure and STAMP extensions defined in this document can be used to reflect the collected IOAM data fields back to the Sender, where the Sender can use that information to support the hop-by-hop and edge-to-edge measurement use cases.
</t>

<t>
<xref target="I-D.ietf-mpls-mna-hdr" format="default"/> defines the MNA Sub-Stack to carry various Network Actions with Ancillary data. <xref target="I-D.ietf-mpls-mna-ioam" format="default"/> defines extensions using MNA to carry IOAM data that may be carried in In-Stack Data <xref target="I-D.ietf-mpls-mna-hdr" format="default"/> or Post-Stack Header <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default"/>. The STAMP Session-Sender and Session-Reflector test packets carry the MNA Sub-Stack for HBH and E2E operational and telemetry information for active measurement, as shown in Figure 3.
</t>

        <figure anchor="stamp-reflected-mna-data-tlv">
        <name>Example STAMP Test Packet with Reflected MNA Sub-Stack Data TLV</name>
    <artwork name="" type="" align="left" alt=""><![CDATA[
    +------------------------------------------------+
    | MPLS Header                                    |
    +------------------------------------------------+
    | HBH IOAM RFC 9197                              |
    ~ MNA Sub-Stack  I-D.ietf-mpls-mna-hdr           ~
    ~ MNA Post-Stack Header I-D.ietf-mpls-mna-ps-hdr ~
    +------------------------------------------------+
    | IP Header                                      |
    +------------------------------------------------+
    | UDP Header                                     |
    +------------------------------------------------+
    | STAMP Packet RFC 8972                          |
    +------------------------------------------------+
    | Reflected MNA Sub-Stack Data STAMP TLV (TBA1)  |
    ~                                                ~
    +------------------------------------------------+
]]></artwork>
    </figure>
 
    </section>

    <section title="STAMP Extensions" anchor="sect-5">

    <section title="Reflected MNA Sub-Stack Data STAMP TLV" anchor="sect-5.1">

        <t>
The "Reflected MNA Sub-Stack Data" STAMP TLV is carried by Session-Sender and Session-Reflector test packets. STAMP test packets may carry multiple TLVs of this type. The format of the Reflected MNA Sub-Stack Data TLV is shown in Figure 4.
</t>

        <figure anchor="stamp-reflected-mna-data">
        <name>Reflected MNA Sub-Stack Data STAMP TLV</name>
    <artwork name="" type="" align="left" 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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |STAMP TLV Flags|  Type=TBA1    |         Length                |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                  Reflected MNA Sub-Stack Data                 |
 ~                                                               ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
    </figure>

<t>
The TLV fields are defined as follows:
</t>

<t>
Type: Type (value TBA1)
</t>

<t>
STAMP TLV Flags: The STAMP TLV Flags follow the procedures described in <xref target="RFC8972" format="default"/>.
</t>

<t>
Length: A two-octet field equal to the length of the Data in octets.
</t>

<t>
The Session-Reflector MUST return an error in the STAMP TLV Flags when it determines that the length of the TLV does not match the length of the corresponding MNA Sub-Stack when processing in the same order as the MNA Sub-Stacks in the MPLS header.
</t>

    </section>
    
    <section title="One-Way Measurement Using Reflected Data STAMP TLVs" anchor="sect-5.2">

    <t>
Similarly, in the case of one-way HBH and E2E measurements for MPLS data plane, the Session-Reflector does not need to add MNA Sub-Stacks in the reply Session-Reflector test packets matching the received MNA Sub-Stacks.
</t>

<t>
In this document, the Sub-TLV "MNA Sub-Stack Control" (Type TBA2) is defined for the STAMP TLV Type "Reflected Test Packet Control TLV" (Type TBA-ASYM) introduced in <xref target="I-D.ietf-ippm-asymmetrical-pkts" format="default"/>.
</t>

<t>
When a Session-Sender test packet is received with the "MNA Sub-Stack Control" Sub-TLV, the Session-Reflector does not add the received MNA Sub-Stacks in the MPLS header of the reply Session-Reflector STAMP test packet.
</t>

<t>
In the absence of this Sub-TLV in the received Session-Sender test packet, the Session-Reflector inserts new MNA Sub-Stacks matching all received MNA Sub-Stacks in the MPLS header of the reply Session-Reflector test packet.
</t>

<t>
The MNA Sub-Stacks received in the Session-Sender test packets are still reflected in STAMP TLVs to the Session-Sender.
</t>

    </section>

    </section>

    <section title="Security Considerations" anchor="sect-6">

     <t>
    The security considerations specified in <xref target="RFC8762" format="default"/>, <xref target="RFC8972" format="default"/>, <xref target="I-D.ietf-mpls-mna-hdr"/> and <xref target="I-D.ietf-mpls-mna-ps-hdr"/> apply to the procedure and extensions defined in this document.
    In addition, the security considerations specified in <xref target="RFC9197" format="default"/> and <xref target="I-D.ietf-mpls-mna-ioam"/> also apply when using the IOAM.
    </t>

    </section>

    <section title="IANA Considerations" anchor="sect-7">

<t>
IANA has created the "STAMP TLV Types" registry for <xref target="RFC8972" format="default"/>. IANA is requested to allocate a value for the "Reflected MNA Sub-Stack Data" TLV Type from the IETF Review TLV range of the same registry.
</t>

    <table anchor="iana-tlv-type-tbl" align="center">
       <name>STAMP TLV Types</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="center">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBA1 </td>
            <td align="center">Reflected MNA Sub-Stack Data</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
    </table>

<t>
IANA is requested to allocate values for the Sub-TLV Type "MNA Sub-Stack Control" (Type TBA2) for the STAMP TLV Type "Reflected Test Packet Control TLV" (Type TBA-ASYM) defined in <xref target="I-D.ietf-ippm-asymmetrical-pkts" format="default"/>.
</t>

   <table anchor="iana-tlv-type-tbl2" align="center">
       <name>Sub-TLV Types for Reflected Test Packet Control STAMP TLV</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="center">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
    
        <tbody>
          <tr>
            <td align="left">TBA2 </td>
            <td align="center">MNA Sub-Stack Control</td>
            <td align="left">This document</td>
        </tr>

        </tbody>
    
    </table>

    </section>

    </middle>

    <back>
    <references title="Normative References">
    &RFC2119; 
    &RFC8174; 
    &RFC8762;
    &RFC8972;
    &I-D.ietf-mpls-mna-hdr;
    &I-D.ietf-mpls-mna-ps-hdr;
    &I-D.ietf-mpls-mna-ioam;
    &I-D.ietf-ippm-asymmetrical-pkts;
    </references>
    <references title="Informative References">
    &RFC9197;

    </references>
    <section title="Acknowledgments" numbered="no" anchor="acknowledgments">

<t>
    TBA
</t>

    </section>

    </back>

    </rfc>
