<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-ippm-asymmetrical-pkts-10" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.6.0 -->
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<front>
    <title abbrev="Asymmetrical Traffic Using STAMP">Performance Measurement with Asymmetrical
      Traffic Using Simple Two-Way Active Measurement Protocol (STAMP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-asymmetrical-pkts-10" />

    <author initials="G." surname="Mirsky" fullname="Greg Mirsky">
      <organization>Ericsson</organization>
      <address>
        <email>gregimirsky@gmail.com</email>
      </address>
    </author>

    <author fullname="Ernesto Ruffini" initials="E." surname="Ruffini">
      <organization>OutSys</organization>
      <address>
        <email>eruffini@outsys.org</email>
      </address>
    </author>

    <author fullname="Henrik Nydell" initials="H." surname="Nydell">
      <organization>Cisco Systems</organization>
      <address>
        <email>hnydell@cisco.com</email>
      </address>
    </author>

    <author initials="R." surname="Foote" fullname="Richard Foote">
      <organization>Nokia</organization>
      <address>
        <email>footer.foote@nokia.com </email>
      </address>
    </author>

    <author fullname="Will Hawkins" initials="W." surname="Hawkins">
      <organization>University of Cincinnati</organization>
      <address>
        <email>hawkinsw@obs.cr</email>
      </address>
    </author>

    <area>Transport</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>IPPM</keyword>
    <keyword>Performance Measurement </keyword>

    <abstract>
      <t>
      This document specifies an optional extension to the Simple Two-way Active Measurement Protocol (STAMP)
      to control the length and/or number of packets sent by a Session-Reflector in response to a single test packet from the Session-Sender during a STAMP test session.
      By default, a STAMP Session-Sender and Session-Reflector exchange packets symmetrically:
      the number of packets sent by the Session-Reflector and the Session-Sender are the same as is the length of the packets sent by the Session-Reflector and the Session-Sender.
      However, there are cases where a Session-Reflector responding with Asymmetrical Packets
      would ensure a closer approximation between active performance measurements and the
      conditions experienced by monitored application.
      The STAMP extension specified in this document allows operators to establish tests
      where a Session-Reflector sends Asymmetrical Packets, packets whose length is not symmetrical to test packet sent by the Session-Sender and/or packets that are not sent in direct response to a packet received from a Session-Sender.
      The document also includes an analysis of challenges related to performance monitoring in a multicast network.
      It specifies procedures and STAMP extensions to achieve more efficient measurements with a lesser impact on a network.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
    <t>
    Simple Two-way Active Measurement Protocol (STAMP) <xref target="RFC8762"/> defines the base STAMP functionalities.
    STAMP Optional Extensions <xref target="RFC8972"/> introduces a TLV structure that allows
		a Session-Sender to include optional instructions for Session-Reflectors
		to extend the functionality of the base STAMP protocol.
    New STAMP TLVs can be defined to support scenarios like the ones described in <xref target="RFC7497"/>,
    which discusses the coordination of messaging between the source
    and destination to help deliver one of the fundamental principles
    of IP performance metric measurements, minimizing the test traffic effect on user flows.
    </t>
    <t>
      By default, a STAMP Session-Sender and a Session-Reflector exchange packets symmetrically:
      the number of packets sent by the Session-Reflector and the Session-Sender are the same and the length of the packets sent by the Session-Reflector and the Session-Sender are the same.
		However, in some scenarios, e.g., rate measurements discussed in <xref target="RFC7497"/>,
    it would be beneficial for a Session-Reflector to respond with Asymmetrical Test packets: packets whose length is not symmetrical to test packet sent by the Session-Sender and/or packets that are not sent in direct response to a packet received from a Session-Sender.
    The optional extension defined in this document gives operators the tools to create such Asymmetrical Packets between a Session-Sender and a Session-Reflector.
    </t>
    <t>
    Measurement of performance metrics in a multicast network using an active measurement method
    (Section 3.4 of <xref target="RFC7799"/>) has specific challenges compared to what operators experience monitoring in a unicast network.
    This document analyzes these challenges and specifies procedures and STAMP extensions to
    achieve more efficient measurements with a lesser impact on a network.
		</t>

       <section anchor="terminology-sec" numbered="true" toc="default">
        <name>Terminology</name>
        <t>
          The document uses terms defined in <xref target="RFC8762" format="default"/>, especially Session-Sender, Session-Reflector and Symmetrical Packets.
        </t>
        <t>
          The document uses terms defined in <xref target="RFC8972" format="default"/>, especially STAMP Session Identifier (SSID),
          STAMP TLV Flags and Sub-TLVs.
        </t>
        <t>
         The document uses the terms In-Service and Out-of-Service defined in <xref target="RFC7497"/>.
        </t>
        <t>
          In this document, "Asymmetrical Packets" has two meanings, depending on the context. First, an Asymmetrical Packet means a packet sent by a Session-Reflector with a size different from the packet sent by the Session-Sender. The second, third, fourth, etc. packets sent by the Session-Reflector in response to a single test packet received from a Session-Sender are also referred to as Asymmetrical Packets.
        </t>
        <t>
          In this document, a Multicast Network means a network that sends data from a single source to multiple destinations by transmitting a single packet to a single, specially designated address.
        </t>
    </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 anchor="reflected-cntrl-tlv" numbered="true" toc="default">
      <name>Reflected Test Packet Control TLV</name>
      <t>
      This section defines a new optional STAMP extension, Reflected Test Packet Control TLV and a new STAMP TLV Flag value.
The format of this TLV is presented in <xref target="reflected-cntrl-tlv-fig"/>.
      </t>

        <figure anchor="reflected-cntrl-tlv-fig">
        <name>Reflected Test Packet Control TLV Format</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     |           Length              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |Length of the Reflected Packet |Number of the Reflected Packets|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |             Interval Between the Reflected Packets            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~                            Sub-TLVs                           ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>
  The descriptions of the fields are as follows:
      </t>
      <ul empty="true" spacing="normal">
        <li>STAMP TLV Flags is a one-octet field.</li>
        <li>Type is a one-octet field that identifies the Reflected Test Packet Control TLV.
        This field is set to TBA1 (<xref target="iana-pkt-cntrl-tlv"/>).</li>
        <li>Length is a two-octet field. The value is variable, and MUST NOT be smaller than 12 octets.</li>
        <li>Length of the Reflected Packet is a two-octet field.
        The value is an unsigned integer that is the requested length of a reflected test packet in octets.</li>
        <li>Number of the Reflected Packets is a two-octet field. The value is an unsigned integer that is the number of reflected test packets that
        the Session-Reflector is requested to transmit in response to receiving a STAMP test packet with
        the Reflected Test Packet Control TLV.</li>
        <li>Interval Between the Reflected Packets is a four-octet field. The value is an unsigned integer set to the interval in nanoseconds between
        the transmission of the consecutive reflected test packets in response to receiving
        a STAMP test packet with the Reflected Test Packet Control TLV.</li>
        <li> Sub-TLVs is an optional field that includes additional information communicated by a Session-Sender.</li>
      </ul>
			<t>
      Also, a new STAMP TLV flag <xref target="RFC8972"/>, Conformant Reflected Packet is allocated
      by IANA from "STAMP TLV Flags" subregistry (<xref target="iana-tlv-flag-sec"/>): the one-bit C flag (TBA4). A Session-Sender MUST zero
      this flag on transmission, and the Session-Reflector MUST ignore its value on the receipt of a STAMP test packet
      with a STAMP TLV.
      </t>
      <t>
   A Session-Sender MAY include the Reflected Test Packet Control TLV in a STAMP
   test packet. If the received STAMP test packet includes the Reflected Test Packet Control TLV,
   the Session-Reflector MUST transmit a sequence of reflected test packets according to the following rules:
   </t>
         <ul empty="true" spacing="normal">
         <li>The length of the reflected test packet MUST be the largest of the:</li>
         </ul>
         <ol type="a" spacing="compact">
         <li>
         The length of a base Session-Reflector packet in the mode (unauthenticated
or authenticated) of the received STAMP test packet, as defined in
Section 4.3 of <xref target="RFC8762"/>, including all STAMP extension TLVs <xref target="RFC8972"/>,
present in the received STAMP test packet but excluding any Extra Padding TLVs.
The rationale to exclude any Extra Padding TLV present in combination with
Reflected Test Packet Control TLV is to support a scenario when a Session-Reflector
is requested to transmit a sequence of packets shorter than the received STAMP packet.
         </li>
         <li>
The value in the Length of the Reflected Packet
field of the Reflected Test Packet Control TLV aligned at a four-octet
boundary.
         </li>
         </ol>
<t>In a case where the length of the reflected packet
calculated by this rule is longer than the length of the reflected
packet calculated by the rules in Section 3 of <xref target="RFC8972"/>, the Session-Reflector
MUST use the Extra Padding TLV (Section 4.1 of <xref target="RFC8972"/>) to increase
the length of the reflected test packet. If the calculated length of the reflected packet exceeds
the maximum transmission unit (MTU) of the interface to reach the Session-Sender,
the Session-Reflector MUST set the C (Conformant Reflected Packet) STAMP TLV flag (<xref target="iana-tlv-flag-sec"/>) to 1,
and MUST transmit a single reflected packet of the length equal to MTU of the egress interface.
Otherwise, the Session-Reflector MUST set the C flag to 0 in each reflected test packet.
</t>
<t>The number of reflected test packets in the sequence MUST equal the value of the "Number of the Reflected Test Packets" field.</t>
<t>
  If the value of the "Number of the Reflected Packets" field is larger than one,
the interval between the transmission of two consecutive reflected packets in the sequence MUST be equal to the value
  in the "Interval Between the Reflected Packets" field in nanoseconds.
To reduce the risk of creating unacceptable levels of congestion in the network that carries the reflected packets,
an implementation of a Session-Reflector that supports the Reflected Test Control TLV MUST provide a limit on the data rate
(bytes per second) and the data volume (total bytes) that would be generated in response to an incoming test packet.
If a test packet is received that would generate traffic that exceeds either of these limits, the Session-Reflector MUST
set the C flag (<xref target="iana-tlv-flag-sec"/>) to 1, and MUST transmit a single reflected packet.
Otherwise, the Session-Reflector MUST set the C flag to 0 in each reflected test packet.
</t>
<t>
  If the value of the "Number of the Reflected Packets" field equals zero, then the Session-Reflector MUST NOT send a reflected packet.
  Processing of the received STAMP test packet with the Reflected Test Packet Control TLV,
  in which the value of the "Number of the Reflected Packets" field equals zero, is according to local policy.
  The received STAMP test packet MUST be discarded if no policy to handle these cases is configured on the node.
</t>
<t>Each reflected test packet in the sequence is formed according to Section 4.3 of <xref target="RFC8762"/>.</t>
<t>
As defined above, there are two cases when a Session-Reflector will set the C flag in the reflected packet. To disambiguate
which case led to the C flag being set to 1, an implementation of Session-Sender may use the following:
</t>
<ul empty="true">
<li>The requested length exceeds the MTU of the egress interface of the Session-Reflector
if the length of the received reflected STAMP packet is less than the value of the Length of the "Reflected Packet" field.</li>
<li>The requested data rate and/or the data volume exceed the limits set at the Session-Reflector
if the length of the received reflected STAMP packet equals the value of the Length of the "Reflected Packet" field.</li>
</ul>

        <section anchor="address-group-sub-tlv" numbered="true" toc="default">
      <name>Address Group Sub-TLVs</name>

        <section anchor="l2-addr-grp-sub-tlv" numbered="true" toc="default">
      <name>Layer 2 Address Group Sub-TLV</name>
     <t>
      Layer 2 Address Group Sub-TLV:  A 16-octet sub-TLV that includes the
      EUI-48 Address Group Mask and EUI-48 Address Group. The Type of the sub-TLV
      is TBA2 (<xref target="iana-l2-l3-sub-tlv"/>).  The value of the sub-TLV
			Length field MUST be equal to 12. The format of the
      Layer 2 Address Group Sub-TLV is presented in <xref target="l2-addr-grp-sub-tlv-fig"/>.
      </t>
        <figure anchor="l2-addr-grp-sub-tlv-fig">
        <name>Layer 2 Address Group Sub-TLV Format</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sub-TLV Flags | Sub-TLV Type  |       Sub-TLV Length          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     EUI-48 Address Group Mask                 |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|                               |
|                       EUI-48 Address Group                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>
        The Value field of the Layer 2 Address Group Sub-TLV consists of the
        following fields:
      </t>
      <ul empty="true" spacing="normal">
      <li>EUI-48 Address Group Mask:  A six-octet field that represents the
         bitmask to be applied to the Session-Reflector MAC address.</li>
      <li>EUI-48 Address Group:  A six-octet field that represents the
         group that this TLV is addressed to.  If the Session-Reflector
         applies the EUI-48 Address Group Mask to its MAC address and the
         result is different from the EUI-48 Address Group, then the
         Session-Reflector MUST stop processing the received test packet.</li>
      </ul>
    </section>

            <section anchor="l3-addr-grp--sub-tlv" numbered="true" toc="default">
      <name>Layer 3 Address Group Sub-TLV</name>
     <t>
      Layer 3 Address Group Sub-TLV:  A variable-length sub-TLV that includes the
      IP address family, IP prefix, and IP prefix length.  The Type of the sub-TLV
      is TBA3 (<xref target="iana-l2-l3-sub-tlv"/>). The value of the sub-TLV
      Length field MUST be equal to 8 if the value of the Address Family field is
      set to 1 (i.e., IPv4). The value of the sub-TLV Length field MUST be equal to 20 if
      the value of the Address Family field is set to 2 (i.e., IPv6). The format of
      Layer 3 Address Group Sub-TLV is presented
      in <xref target="l3-addr-grp-sub-tlv-fig"/>.
      </t>
              <figure anchor="l3-addr-grp-sub-tlv-fig">
        <name>Layer 3 Address Group Sub-TLV Format</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sub-TLV Flags | Sub-TLV Type  |       Sub-TLV Length          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family| Prefix Length |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                       IP Prefix                               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>
        The Value field of the Layer 3 Address Group Sub-TLV consists of the
        following fields:
      </t>
      <ul empty="true" spacing="normal">
      <li>Address Family: A one-octet field that indicates the type of the IP address contained in the "IP Prefix" field.
      If that is IPv4 address, then the value MUST be set to 1. For an IPv6 address, the value MUST be set to 2.
      Other values MUST be considered invalid.</li>
      <li>Prefix Length: A one-octet unsigned integer field that contains the length, in bits,
      of the prefix of the value in the "IP Prefix" field.</li>
      <li>Reserved: A two-octet field. The field MUST be set to zeros on transmission and ignored on receipt.</li>
      <li>IP Prefix: A variable-length field. Depending on the value of the "Address Family" field,
      the field contains either an IPv4 or IPv6 address. If the former, the length is four octets; if the latter - 16 octets.</li>
      </ul>
    </section>
    </section>
    </section>

      <section anchor="theory-of-operation" numbered="true" toc="default">
      <name>Operational Considerations</name>

      <section anchor="rate-measurement" numbered="true" toc="default">
      <name>Rate Measurement</name>
      <t>
      <xref target="RFC7497"/> defines the problem of access rate measurement in access
   networks. Essential requirements identified for a test protocol are the
   ability to control packet characteristics on the tested path, such as
   asymmetric rate and asymmetric packet size. The Reflected Test
   Packet Control TLV, defined in <xref target="reflected-cntrl-tlv"/>, conforms to the
   requirements for measuring access rate by providing optional controls
   of the number of reflected test packets, the size of the reflected
   packet(s), and the time interval, i.e., rate, in transmitting the sequence of the reflected test packets.
   The access rate metric and method of access rate measurement are out of the scope of this document.
   The UDP Speed Test (<xref target="RFC9097"/> and <xref target="I-D.ietf-ippm-capacity-protocol"/>)
   also allows for the measurement of access bandwidth.
      </t>
      <section anchor="ops-sec" numbered="true" toc="default">
      <name>Operational Considerations for Performing Rate Measurement</name>
      <t>
      General considerations for using a testing protocol for
      rate measurement are documented in Section 7 of <xref target="RFC7497"/>.
      These considerations are specific for In-Service and
      Out-of-Service (using the terminology of <xref target="RFC7497"/>) rate measurement.
      In the Out-of-Service testing, an operator may use a very high traffic rate and/or volume
      (i.e., high values for the Length of the Reflected Packet and/or
Number of the Reflected Packets parameters, and/or low values for the Interval Between the Reflected Packets parameter of the
Reflected Test Packet Control TLV) to create congestion in the bottleneck. However, when performing In-Service rate testing,
an operator may start with a low rate and/or volume and gradually increase them with each transmitted Reflected Test Packet Control TLV.
      </t>
      </section>
    </section>

  <section anchor="multicast-measurement" numbered="true" toc="default">
<name>Active Performance Measurement in Multicast Environment</name>
<t>
For performance measurements using STAMP in a multicast environment, a Session-Sender
is expected to be the root and Session-Reflectors leaves of the same multicast distribution tree.
The mechanism of constructing the multicast tree is outside the scope of this document.
</t>
      <t>
      According to <xref target="RFC8972"/>, a STAMP Session is demultiplexed by a Session-Reflector by the tuple
      that consists of source and destination IP addresses, source and destination UDP port numbers, or
      the source IP address and STAMP Session Identifier. That is also the case when monitoring performance of a multicast
flow, despite the fact that the destination IP address is a multicast
address. Therefore, there is no special behavior defined for a Session-Reflector upon receiving
      a STAMP test packet over a multicast tree. It processes the packet according to <xref target="RFC8762"/> and <xref target="RFC8972"/>.
      The Session-Reflector MUST use the source IP address of the received STAMP test packet as the destination IP address of the reflected test packet,
      and MUST use one of the IP addresses associated with the node as the source IP address for that packet. As a result, a Session-Sender may receive
      multiple replies from multiple counterparts Session-Reflectors. Such a Session-Sender may include a Reflected Test Packet Control TLV
      and include either a Layer 2 Address Group Sub-TLV or Layer 3 Address Group Sub-TLV to limit the Session-Reflectors that respond.
</t>
<t>
The multicast environment itself could be configured to help alleviate the possibility that
network congestion may occur if a single test packet generates a large number of concurrent replies,
all directed to the same endpoint. Depending on the multicast-implementation,
adding the Reflected Test Packet Control TLV could allow the multicast environment to limit the number of replies by updating
fields of any STAMP packets it sees by modifying their Reflected Test Packet Control TLV Sub-TLV values:
</t>
<ul empty="true" spacing="normal">
<li>Randomly by specifying a Layer 2 Address Group Sub-TLV: for example,
setting the EUI-48 Address Group Mask to 0xF and the EUI-48 Address Group to 0x1.
As a result, only 1 out of 16 reflectors will reply;</li>
<li>Having a specific vendor NIC by specifying a Layer 2 Address Group Sub-TLV
with the EUI-48 Address Group Mask set to 0xFFFFFF000000;</li>
<li>Belonging to specific IP networks, for example, a subnet dedicated to IPv6 over IPv4
encapsulation by specifying the appropriate Layer 3 Address Group Sub-TLV.</li>
</ul>
<t>
 Multicast traffic is also intrinsically asymmetrical, and focus on the return path is usually limited.
 The Length of the Reflected Packet value can be used to ensure the reflected packet transports
 all the timestamps and requested information, crucial for the underlying measure,
 but is as short as possible so as not to flood the network with useless data.
</t>
</section>
      <section anchor="existing-extensions" numbered="true" toc="default">
      <name>Using Reflected Test Packet Control TLV in Combination with Other TLVs</name>
<t>
<xref target="RFC9503"/> defines the Return Path TLV which, when used
    in combination with the Return Address Sub-TLV, allows a Session-Sender to request
    the reflected packet be sent to a different address from the
    Session-Sender one.  These STAMP extensions could be used in combination
    with the Reflected Packet Control TLV, defined in this document, to direct
    the reflected STAMP test packets to a collector of measurement data (according to <xref target="RFC7594"/>)
    for further processing and network analytics.
    An example of the use case is a multicast scenario
    when, for example, the Session-Sender is close to the actual
    multicast source (such as a camera transmitting live
    video) so that the test packets follow the same path as the
    video stream packets in one direction but the reflected test packets
    follow another to a destination where the data would be analyzed.
    </t>
<t>
For compatibility with <xref target="RFC9503"/>, a Session-Sender MUST NOT include a Return Path Control Code Sub-TLV
with the Control Code flag set to No Reply Requested in the same test packet as the Reflected Test Packet Control TLV is non-zero.
A Session-Reflector that supports both TLVs MUST set the U flag to 1 in Return Path
and Reflected Test Packet Control TLVs in the reflected STAMP packet. Furthermore,
the Session-Reflector SHOULD log a notification to inform an operator about the misconstructed STAMP packet.
</t>
<t>
Reflected Test Packet Control TLV can be combined with the Class of Service TLV <xref target="RFC8972"/>
to augment rate testing or testing in a multicast network with monitoring the consistency
of Differentiated Services Code Point and Explicit Congestion Notification values
in forward and reverse directions of the particular STAMP test session.
</t>
</section>
  </section>

      <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
 Security considerations discussed in <xref target="RFC7497"/>,
 <xref target="RFC8762"/>,<xref target="RFC8972"/>, and <xref target="RFC9503"/>
 apply to this document.  Furthermore,
   spoofed STAMP test packets with the Reflected Test Packet Control TLV
   can be exploited to conduct a Denial-of-Service (DoS) attack. Hence,
   implementations MUST use an identity protection mechanism.
   For example, the Session-Reflector may verify the information about
the source of the STAMP packet against a pre-defined list of trusted
nodes. Furthermore, an implementation that supports this specification MUST provide administrative control of support of the
Reflected Test Packet Control TLV on a Session-Reflector with it being disabled by default.
   Also, either STAMP authentication mode <xref target="RFC8762"/> or HMAC TLV <xref target="RFC8972"/> SHOULD be used
   for a STAMP test session containing the Reflected Test Packet Control TLV.
      </t>
      <t>
      Furthermore, a DoS attack using the Reflected Test Packet Control TLV might target the STAMP Session-Reflector
      by overloading it with test packet reflection, e.g., minuscule intervals and/or an excessive number of concurrent test sessions.
      To mitigate that, a Session-Reflector implementation that supports the new TLV MUST
      provide a mechanism to limit the reflection rate and volume of STAMP test packets
      (see <xref target="reflected-cntrl-tlv"/> for detailed discussion).
      </t>
      <t>
  Considering the potential number of reflected packets generated by a single test packet sent to a multicast address,
  parameters in the first STAMP test packet with the Reflected Test Packet Control TLV MUST be selected conservatively.
  Consider the Number of the Reflected Packets field value set to one.  As a result, a Session-Sender,
  by counting the packets reflected after originating a first STAMP test packet with the Reflected Test Packet Control TLV,
  can evaluate the load caused by using the Reflected Test Packet Control TLV in which more than
  a single reflected packet to the same multicast destination is requested.
  To mitigate the risk of using  the Reflected Test Packet Control TLV in a multicast network further,
   a Session-Sender SHOULD sign packets using the HMAC TLV when sending such
   messages in unauthenticated mode <xref target="RFC8762"/>. But even with the HMAC TLV, the Reflected Test Packet Control TLV
could be exploited by a replay attack. To mitigate that risk,
   a STAMP Session-Reflector SHOULD use the value of the Sequence Number field <xref target="RFC8762"/> of the received STAMP test packet.
   If that value compared to the received in the previous test packet of the same STAMP test session is not increasing,
   then the Session-Reflector MUST respond with a single reflected packet, setting the U flag to 1 <xref target="RFC8972"/>.
</t>
<t>
A Session-Sender SHOULD NOT send the next STAMP test packet with the Reflected Test Packet Control TLV
before the Session-Reflector is expected to complete transmitting all reflected packets in response to the Reflected Test Packet Control TLV
in the previous test packet. In some scenarios the Reflected Test Packet Control TLV
might induce congestion on the transient bottleneck. Section 10 of <xref target="RFC9097"/>
specifies security requirements for capacity measurements with asymmetric UDP loads.
When planning In-Service capacity measurement operators SHOULD follow recommendations formulated in Section 7 of <xref target="RFC7497"/>.
Section 3.1.5 of <xref target="RFC8085"/> determines that a UDP congestion control SHOULD
respond quickly to experienced congestion and account for loss rate and response time when choosing a new rate.
Appendix A of <xref target="RFC9097"/> offers sample pseudocode for a UDP load rate adjustment algorithm with congestion control.
</t>
    </section>

    <section numbered="true" toc="default">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: This section MUST be removed before publication of the document.</t>
      <t>
    This section records the status of known implementations of the
     protocol defined by this specification at the time of posting of
     this Internet-Draft, and is based on a proposal described in
     <xref target="RFC7942"/>.  The description of implementations in this section is
     intended to assist the IETF in its decision processes in
     progressing drafts to RFCs.  Please note that the listing of any
     individual implementation here does not imply endorsement by the
     IETF. Furthermore, no effort has been spent to verify the
     information presented here that was supplied by IETF contributors.
     This is not intended as, and must not be construed to be, a
     catalog of available implementations or their features.  Readers
     are advised to note that other implementations may exist.
      </t>
      <t>
      According to <xref target="RFC7942"/>, "this will allow reviewers and working
     groups to assign due consideration to documents that have the
     benefit of running code, which may serve as evidence of valuable
     experimentation and feedback that have made the implemented
     protocols more mature.  It is up to the individual working groups
     to use this information as they see fit".
      </t>
      <t>-  The organization responsible for the implementation: Will Hawkins (Individual).</t>
      <t>-  The implementation's name: Teaparty.</t>
      <t>-  A brief general description: Teaparty is an open source implementation of the Simple Two-Way Active
Measurement Protocol and many of the optional extensions. The
implementation can function as a Session-Sender and Session-Reflector.
It contains support for Authenticated and Unauthenticated modes. It
also contains an implementation of a STAMP dissector for Wireshark.</t>
      <t>-  The implementation's level of maturity: Interoperable with Junos OS Evolved STAMP/TWAMP-Light implementations
(https://www.juniper.net/documentation/us/en/software/junos/standards/topics/concept/rpm.html),
Nokia's TWAMP Light implementation (https://github.com/nokia/twampy),
and Cujo's TWAMP Light implementation (https://github.com/getCUJO/twamp-light).</t>
      <t>-  Coverage: Includes support for:</t>
      <ul>
      <li>Authenticated and Unauthenticated modes</li>
      <li>Stateless and stateful operation</li>
      <li>9 standardized and to-be standardized extensions</li>
      </ul>
      <t> -  Version compatibility: N/A</t>
      <t>-  Licensing: GPLv3.</t>
      <t>-  Implementation experience: Incorporating the Reflected Packet Control TLV into the Teaparty
implementation was no challenge from the protocol perspective (because
the specification is well written and the authors were responsive to
requests for clarification) but did require enhancements to the
underlying mechanics. No extensions (or components of the base
functionality) before the Reflected Packet Control TLV required
support for the Session-Reflector to generate ongoing responses to a
test packet from a Session-Sender. As a result, all responses were
generated and sent upon receipt of a test packet with no further
processing. The functionality required to implement the Reflected
Packet Control TLV was already on the list of upcoming additions to
Teaparty, whether this extension was proposed or not (a complete
implementation of the Access Report extension requires such support).
Overall, implementation was straightforward.</t>
      <t>-  Contact information: Source code is available at https://github.com/cerfcast/teaparty.
Author is available at https://datatracker.ietf.org/person/hawkinsw@obs.cr</t>
      <t>-  The date when information about this particular implementation was last updated: April 28, 2025</t>

    </section>

        <section numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>
The authors thank Zhang Li, Ruediger Geib, Rakesh Gandhi, Giuseppe Fiocolla, Xiao Min, and Greg White for their
thorough reviews and helpful suggestions, which improved the document.
      </t>
    </section>

    <section anchor="iana-consider" numbered="true" toc="default">
      <name>IANA Considerations</name>
        <t>
          Note to the RFC Editor: Please update all TBA1/TBA2/TBA3/TBA4 through the document with the values assigned by IANA.
        </t>

    <section anchor="iana-pkt-cntrl-tlv" numbered="true" toc="default">
      <name>Reflected Test Packet Control TLV Type</name>
        <t>
          IANA is requested to assign a new value for the Reflected Test Packet Control TLV
          from the STAMP TLV Types registry under the "Simple Two-way Active Measurement Protocol (STAMP)
          TLV Types" registry group according to <xref target="refl-cntrl-table"/>.
        </t>
        <table anchor="refl-cntrl-table" align="center">
          <name>New Reflected Test Packet Control Type TLV</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">&nbsp;TBA1</td>
              <td align="left">Reflected Test Packet Control</td>
              <td align="left">This&nbsp;document</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="iana-tlv-flag-sec" numbered="true" toc="default">
      <name>Conformant Reflected Packet STAMP TLV Flag</name>
      <t>
        IANA is requested to allocate a bit position for the Conformant Reflected Packet flag
        from the "STAMP TLV Flags" registry under the "Simple Two-way Active Measurement Protocol (STAMP)
        TLV Types" registry group according to <xref target="iana-tlv-flag-tbl"/>.
      </t>
             <table anchor="iana-tlv-flag-tbl" align="center">
          <name>Conformant Reflected Packet STAMP TLV Flag</name>
          <thead>
            <tr>
              <th align="left">Bit position</th>
              <th align="left">Symbol</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
            </thead>
          <tbody>
            <tr>
              <td align="left">&nbsp;TBA4</td>
              <td align="left">C</td>
              <td align="left">Conformance </td>
              <td align="left">This&nbsp;document</td>
           </tr>
           </tbody>
           </table>
      </section>

    <section anchor="iana-l2-l3-sub-tlv" numbered="true" toc="default">
      <name>Layer 2 and Layer 3 Address Group Sub-TLV Types</name>
      <t>
        IANA is requested to assign new values for the Layer 2 and Layer 3 Address Group Sub-TLV Types
        from the "STAMP Sub-TLV Types" registry under the "Simple Two-way Active Measurement Protocol (STAMP)
        TLV Types" registry group according to according to <xref target="sub-tlv-type-tbl"/>.
     </t>
             <table anchor="sub-tlv-type-tbl" align="center">
          <name>STAMP Sub-TLV Types for the Reflected Test Packet Control TLV</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">TLV Used</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">&nbsp;TBA2</td>
              <td align="left">Layer 2 Address Group</td>
              <td align="left">Reflected Test Packet Control</td>
              <td align="left">This&nbsp;document</td>
           </tr>
            <tr>
              <td align="left">&nbsp;TBA3</td>
              <td align="left">Layer 3 Address Group</td>
              <td align="left">Reflected Test Packet Control</td>
              <td align="left">This&nbsp;document</td>
            </tr>
          </tbody>
        </table>
      </section>
</section>
</middle>

  <back>
      <references>
      <name>References</name>
    <references>
      <name>Normative References</name>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>

      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8762.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8972.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7497.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9503.xml"/>
    </references>

      <references title="Informative References">

      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7594.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9097.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8085.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml"/>
      <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-ippm-capacity-protocol.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7799.xml"/>
      </references>
      </references>

  </back>
</rfc>
