<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-mh-6man-icmpv6-reflection-01"
     ipr="trust200902" updates="8335">
  <front>
    <title abbrev="ICMPv6 Reflection">Internet Control Message Protocol
    (ICMPv6) Reflection</title>

    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
      <organization abbrev="">Huawei</organization>

      <address>
        <postal>
          <street>8-2 Matam</street>

          <city>Haifa</city>

          <code>3190501</code>

          <country>Israel</country>
        </postal>

        <email>tal.mizrahi.phd@gmail.com</email>
      </address>
    </author>

    <author fullname="Xiaoming He" initials="X." surname="He">
      <organization>China Telecom</organization>

      <address>
        <email>hexm4@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Tianran Zhou" initials="T." surname="Zhou">
      <organization abbrev="">Huawei</organization>

      <address>
        <postal>
          <street>156 Beiqing Rd.</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>zhoutianran@huawei.com</email>
      </address>
    </author>

    <author fullname="Ron Bonica" initials="R." surname="Bonica">
      <organization>Juniper Networks</organization>

      <address>
        <postal>
          <country>USA</country>
        </postal>

        <email>rbonica@juniper.net</email>
      </address>
    </author>

    <author fullname="Xiao Min" initials="X." surname="Min">
      <organization>ZTE Corp.</organization>

      <address>
        <email>xiao.min2@zte.com.cn</email>
      </address>
    </author>

    <date year="2024"/>

    <workgroup>6MAN</workgroup>

    <keyword>ICMP</keyword>

    <keyword>ICMPv6</keyword>

    <abstract>
      <t>This document describes the ICMPv6 Reflection utility. ICMPv6
      Reflection uses a request-response handshake that is similar to ICMPv6
      Echo, except that after a request is sent, the corresponding reply
      includes the request message itself or a subset of its fields as
      specified in the request. Specifically, the IPv6 header of the request
      message and its IPv6 extension headers, if they are present, can be
      included in the reply. Network operators can use ICMPv6 Reflection to
      determine how IPv6 extension headers have been altered by transit
      nodes.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>The IPv6 Reflection utility is an IPv6 <xref target="RFC8200"/>
      diagnostic tool. It is similar to the Ping <xref target="RFC2151"/> and
      PROBE <xref target="RFC8335"/> utilities in the following respects:</t>

      <t><list style="symbols">
          <t>A probing node sends an ICMPv6 <xref target="RFC4443"/> message
          to a probed node. This ICMP message requests specific
          information.</t>

          <t>The probed node receives the above-mentioned message, encodes the
          requested information in another ICMPv6 message, and sends it back
          to the probing node.</t>
        </list></t>

      <t>For the purposes of this document, the ICMPv6 message that the
      probing node sends is called the "request message" and the message that
      the probed node sends is called the "reply message".</t>

      <t>In the IPv6 Reflection utility, the following information can be
      requested:</t>

      <t><list style="symbols">
          <t>The status of an interface on the probed node.</t>

          <t>A copy of the entire request message, including the encapsulating
          IPv6 header and its extension headers, as it arrived at the probed
          node.</t>
        </list></t>

      <t>The probing node can also request specific pieces of the request
      message, as they arrived at the probing node, such as the IPv6 header of
      the request or one of its IPv6 extension headers.</t>

      <t>The ICMPv6 Reflection procedure uses Extended Echo Request and
      Extended Echo Reply messages. As defined in <xref target="RFC8335"/>,
      each of these message types can include an extension structure <xref
      target="RFC4884"/>. ICMPv6 Reflection uses these extension structures to
      reflect the request message or a subset of its fields back to the
      probing node. This is performed by specific extension objects that are
      defined in this document.</t>
    </section>

    <section anchor="Conventions" title="Conventions">
      <section title="Requirement Language">
        <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"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.</t>
      </section>

      <section title="Terminology">
        <t>Abbreviations used in this document:</t>

        <t><list hangIndent="11" style="hanging">
            <t hangText="ICMP:">Internet Control Message Protocol</t>

            <t hangText="MTU:">Maximum Transmission Unit</t>
          </list></t>
      </section>
    </section>

    <section anchor="UseCaseSec" title="Use Cases">
      <t>The following protocols define IPv6 extension headers that can be
      used for tracing a path and its performance:</t>

      <t><list style="symbols">
          <t>IPv6 Options for In Situ Operations, Administration, and
          Maintenance (IOAM) <xref target="RFC9486"/></t>

          <t>Inband Flow Analyzer <xref target="I-D.kumar-ippm-ifa"/></t>

          <t>Path Tracing in SRv6 networks <xref
          target="I-D.filsfils-ippm-path-tracing"/></t>

          <t>Segment Routing Header encapsulation for In-situ OAM Data <xref
          target="I-D.ali-spring-ioam-srv6"/></t>
        </list></t>

      <t>These extensions are used for collecting information along a packet's
      delivery path. Currently, the collected information is sent to a
      controller for processing. However, in some cases this information is
      relevant to the sender.</t>

      <t>The ICMPv6 Reflection utility provides a mechanism by which this
      information can be returned to the probing node.</t>
    </section>

    <section anchor="TheorySec" title="Theory of Operation">
      <t>The probing node sends an ICMPv6 Extended Echo Request message <xref
      target="RFC8335"/> to the probed node. The ICMPv6 Extended Echo Request
      message contains an ICMP Extension Header <xref target="RFC4884"/>,
      followed by any combination of the extension objects defined in <xref
      target="RefEcho"/> of this document. These objects are referred to as
      Reflection objects. Each object indicates that the probing node requests
      some or all of the ICMPv6 Extended Echo Request message, as it arrived
      at the probed node, to be reflected back to the probing node.</t>

      <t>Each object in the ICMPv6 Extended Echo Request message contains an
      object payload field whose length SHOULD be sufficient to carry the
      requested information. The total length of the ICMPv6 Extended Echo
      Request message MUST NOT exceed the IPv6 minimum MTU (1280 bytes.)</t>

      <t>The probed node receives the ICMPv6 Extended Echo Request and formats
      an ICMPv6 Extended Echo Reply message. The main body of the ICMPv6
      Extended Echo Reply message reflects the status of the interface
      identified by the Destination Address field in the IPv6 header, as
      defined in <xref target="RFC8335"/>.</t>

      <t>The ICMPv6 Extended Echo Reply message contains an ICMP Extension
      Header, followed by all of the objects that the ICMPv6 Extended Echo
      Request message contained. They are listed in the order that they
      appeared in the ICMPv6 Extended Echo Request message. The probed node
      copies the requested information into the object payload field of the
      object if all of the following requirements are satisfied:</t>

      <t><list style="symbols">
          <t>The probed node supports the object.</t>

          <t>Divulging the requested information does not violate the probed
          node's security policy.</t>

          <t>The payload field is sufficiently large to accommodate the
          requested data without truncation.</t>
        </list></t>

      <t>Otherwise, it sets the object payload field to all zeros.</t>

      <t>An example of a request and a reply is illustrated in <xref
      target="ReflectionFormats"/>. In this example the request incorporates
      two Reflection objects. The 'Reflect All' object requests the entire
      request message up to and including the ICMP extension header. The
      'Reflect Arbitrary Data' object is reflected by the probed node
      including the arbitrary data in the object payload. The request and
      reply include the same set of objects, and each object has the same
      length in the request and reply, making the request and reply symmetric
      in length.</t>

      <figure align="center" anchor="ReflectionFormats"
              title="ICMPv6 Reflection Message Formats">
        <artwork align="left"><![CDATA[

       +----------------------------+   +----------------------------+
       |        IPv6 Header         |   |        IPv6 Header         |
       |    and extension headers   |   |    and extension headers   |
       +----------------------------+   +----------------------------+
       |       ICMPv6 Header        |   |       ICMPv6 Header        |
       |   Extended Echo Request    |   |    Extended Echo Reply     |
       +----------------------------+   +----------------------------+
       |   ICMP Extension Header    |   |   ICMP Extension Header    |
     +-+----------------------------+   +----------------------------+
     | |'Reflect All' Object Header |   |'Reflect All' Object Header |
     | +----------------------------+   +----------------------------+
     | |       Object payload       |   |   Request's IPv6 Header    |
     | |       (placeholder)        |   |   and extension headers    |
     | |                            |   |  ------------------------  |
     | |                            |   |  Request's ICMPv6 Header   |
One -+ |                            |   |   Extended Echo Request    |
or   | |                            |   |  ------------------------  |
more | |                            |   | Request's ICMP Ext. Header |
Ref- | +----------------------------+   +----------------------------+
lec- | |'Reflect Arbitrary Data' Hdr|   |'Reflect Arbitrary Data' Hdr|
tion | +----------------------------+   +----------------------------+
obj- | |       Object payload       |   |       Object payload       |
ects | |       Arbitrary data       |   |  Request's Arbitrary data  |
     +-+----------------------------+   +----------------------------+

       ^                            ^   ^                            ^
       |                            |   |                            |
       +-- Extended Echo Request ---+   +--- Extended Echo Reply ----+

           ]]></artwork>
      </figure>
    </section>

    <section anchor="RefEcho" title="ICMP Extension Objects">
      <t>This document defines the following extension object classes.</t>

      <t><list style="symbols">
          <t>Reflect All</t>

          <t>Reflect IPv6 Header</t>

          <t>Reflect HBH Header</t>

          <t>Reflect Routing Header</t>

          <t>Reflect Destination Header</t>

          <t>Reflect Request</t>

          <t>Reflect Arbitrary Data</t>
        </list></t>

      <t>Collectively, these objects are referred to as Reflection objects. An
      implementation that supports ICMPv6 Reflection MUST support the Reflect
      All object and MAY support other Reflection objects.</t>

      <t>An Extended Echo Request MAY include one or more Reflection object.
      If the Reflect All object is present, it MUST be the first object.</t>

      <section title="Reflection Objects">
        <t>Each Reflection object includes the following:</t>

        <t><list style="symbols">
            <t>An object class (as specified in <xref target="IANA"/>).</t>

            <t>C-Type as described below.</t>

            <t>An object payload field, whose length SHOULD be sufficient to
            contain the requested information without truncation.</t>
          </list></t>

        <t>The C-Type value is used for indicating whether the probed node was
        able to process the object. The following C-Type values are supported
        in each of the Reflection objects:</t>

        <t><list style="symbols">
            <t>(0) Request</t>

            <t>(1) Reply - No Error</t>

            <t>(2) Reply - Unsupported Object</t>

            <t>(3) Reply - Unsupported due to Security Policy</t>

            <t>(4) Reply - Object Length Exceeded</t>
          </list></t>

        <t>The C-Type field of a Reflection object in a request message MUST
        be set to the 'Request' value. If the probed node is able to process
        the Reflection object, it incorporates the requested information in
        the object payload of the respective object in the Extended Echo Reply
        message, and updates the C-Type field to the 'Reply - No Error' value.
        If the probed node is not able to process the object for any of the
        reasons listed in <xref target="TheorySec"/>, it updates the C-Type
        value of the object in the Extended Echo Reply, indicating the reason
        for not processing it.</t>
      </section>

      <section title="Reflect All Object">
        <t>The requested information in this object is the IPv6 header, all of
        its extensions, and the ICMPv6 Extened Echo Request up to and
        including the ICMP extension header, as they arrived at the probed
        node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the object payload
        field MUST contain all zeros.</t>
      </section>

      <section title="Reflect IPv6 Header">
        <t>The requested information in this object is the IPv6 header, not
        including the IPv6 extension headers, as it arrived at the probed
        node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the object payload
        field MUST contain all zeros</t>
      </section>

      <section title="Reflect HBH Header">
        <t>The requested information in this object is the Hop-by-hop Options
        extension header, as it arrived at the probed node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the payload field MUST
        contain all zeros</t>
      </section>

      <section title="Reflect Routing Header">
        <t>The requested information in this object is the Routing header, as
        it arrived at the probed node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the payload field MUST
        contain all zeros</t>
      </section>

      <section title="Reflect Destination Header">
        <t>The requested information in this object is the Destination Options
        header, as it arrived at the probed node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the payload field MUST
        contain all zeros</t>
      </section>

      <section title="Reflect Request">
        <t>The requested information in this object is the ICMPv6 Extended
        Echo Request message up to and including the ICMP extension header, as
        it arrived at the probed node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the payload field MUST
        contain all zeros</t>
      </section>

      <section title="Reflect Arbitrary Data">
        <t>The requested information in this object is the arbitrary data in
        the object payload field of the current object, as it arrived at the
        probed node. Reflection of arbitrary data is slightly similar to the
        way the data of ICMP Echo messages is reflected back to the probing
        node.</t>

        <t>In the ICMPv6 Extended Echo Request message, the object payload
        field contains arbitrary data. </t>
      </section>
    </section>

    <section title="Updates to [RFC8335]">
      <t>OLD:</t>

      <artwork><![CDATA[
   When applied to the ICMP Extended Echo Request message, the ICMP 
   Extension Structure MUST contain exactly one instance of the 
   Interface Identification Object (see Section 2.1).
]]></artwork>

      <t>NEW:</t>

      <artwork><![CDATA[
   When applied to the ICMP Extended Echo Request message, the ICMP 
   Extension Structure MUST contain zero or one instances of the 
   Interface Identification Object (see Section 2.1).
]]></artwork>

      <t>OLD:</t>

      <artwork><![CDATA[
   The ICMP Extension Structure does not include exactly one Interface 
   Identification Object.
]]></artwork>

      <t>NEW:</t>

      <artwork><![CDATA[
   The ICMP Extension Structure includes more than one Interface 
   Identification Object.
]]></artwork>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to allocate the following values in the "ICMP
      Extension Object Classes and Class Sub-types" registry.</t>

      <figure align="center" anchor="IcmpTypes" title="IANA Allocation">
        <artwork align="left"><![CDATA[
         
+-----------+------------------+--------+---------------+-----------------+  
| Class-Num |    Object Name   | C-Type |  C-Type Name  |     Reference   |  
+-----------+------------------+--------+---------------+-----------------+  
|   TBD1    | Reflect All      |  0-4   |  See below    | [This document] |  
|           |                  |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+  
|   TBD2    | Reflect IPv6     |  0-4   |  See below    | [This document] |  
|           | Header           |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+  
|   TBD3    | Reflect HBH      |  0-4   |  See below    | [This document] |  
|           | Header           |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+
|   TBD4    | Reflect Routing  |  0-4   |  See below    | [This document] |  
|           | Header           |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+
|   TBD5    | Reflect          |  0-4   |  See below    | [This document] |  
|           | Destination      |        |               |                 |
|           | Header           |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+
|   TBD6    | Reflect Request  |  0-4   |  See below    | [This document] |  
|           |                  |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+  
|   TBD7    | Reflect          |  0-4   |  See below    | [This document] |  
|           | Arbitrary Data   |        |               |                 |
+-----------+------------------+--------+---------------+-----------------+
  ]]></artwork>
      </figure>

      <t>For each of the object classes above the following C-Type values are
      defined:</t>

      <t><list style="symbols">
          <t>(0) Request</t>

          <t>(1) Reply - No Error</t>

          <t>(2) Reply - Unsupported Object</t>

          <t>(3) Reply - Unsupported due to Security Policy</t>

          <t>(4) Reply - Object Length Exceeded</t>
        </list></t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Since this document uses technologies from <xref target="RFC4443"/>,
      <xref target="RFC4884"/>, and <xref target="RFC8335"/>, it inherits
      security considerations from those documents.</t>

      <t>The Reflection procedure that is defined in this document is
      symmetric in terms of the length of the request and reply messages. This
      symmetry mitigates the potential for amplification attacks, which would
      be possible if the reply message was longer than the request
      message.</t>

      <t>Depending on the network policy and the location of nodes in the
      network, ICMPv6 informational and/or error messages are sometimes
      filtered or not supported. For example, some nodes do not reply to
      ICMPv6 Echo or do not send ICMPv6 Time Exceeded messages (used in
      Traceroute), due to policy considerations that may be related to DoS
      mitigation or to privacy. Network operators SHOULD apply similar
      considerations to ICMPv6 Extended Echo messages when they are used for
      Reflection. For example, an operator can choose to disable support for
      ICMPv6 Reflection in networks or in nodes that do not respond to ICMPv6
      Echo and/or do not generate ICMPv6 Time Exceeded messages.</t>
    </section>
  
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.8174'?>

      <?rfc include='reference.RFC.8200'?>

      <?rfc include='reference.RFC.4443'?>

      <?rfc include='reference.RFC.8335'?>

      <?rfc include='reference.RFC.4884'?>

      <?rfc include='reference.RFC.2151'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.9486'?>

      <?rfc include='reference.I-D.filsfils-ippm-path-tracing'?>

      <?rfc include='reference.I-D.ali-spring-ioam-srv6'?>

      <?rfc include='reference.I-D.kumar-ippm-ifa'?>
    </references>

	    <section numbered="no" title="Contributors">
          <t><figure>
              <artwork><![CDATA[ 
   Shahar Belkar
   Huawei
   8-2 Matam
   Haifa 3190501
   Israel
   Email: shahar.belkar@huawei.com

   
   Chongfeng Xie
   China Telecom
   Email: xiechf@chinatelecom.cn


   Zhenqiang Li
   China Mobile
   Email: li_zhenqiang@hotmail.com


   Justin Iurman
   Universite de Liege
   10, Allee de la decouverte (B28)
   4000 Sart-Tilman
   Belgium
   Email: justin.iurman@uliege.be

]]></artwork>
            </figure></t>	
	
    </section>

	</back>
</rfc>
