<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced.
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml">
<!ENTITY RFC7950 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7950.xml">
<!ENTITY RFC7149 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7149.xml">
<!ENTITY RFC7426 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7426.xml">
<!ENTITY RFC8299 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8299.xml">
<!ENTITY RFC8309 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8309.xml">
<!ENTITY RFC8340 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8340.xml">
<!ENTITY RFC8453 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8453.xml">
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8345 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8345.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-he-6man-icmpv6-extensions-ipv6-ext-header-00"
     ipr="trust200902">
  <front>
    <title>ICMPv6 Extensions for Reflecting IPv6 Extension Header</title>

    <author fullname="Xiaoming He" initials="X." surname="He">
      <organization>China Telecom</organization>

      <address>
        <email>hexm4@chinatelecom.cn</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>

    <author fullname="Chongfeng Xie" initials="C." surname="Xie">
      <organization>China Telecom</organization>

      <address>
        <email>xiechf@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
      <organization>Huawei</organization>

      <address>
        <email>tal.mizrahi.phd@gmail.com</email>
      </address>
    </author>

    <author fullname="Zhenqiang Li" initials="Z." surname="Li">
      <organization>China Mobile</organization>

      <address>
        <email>li_zhenqiang@hotmail.com</email>
      </address>
    </author>

    <date year="2024"/>

    <area>IPPM</area>

    <workgroup>6MAN Working Group</workgroup>

    <keyword>ICMPv6 extensions</keyword>

    <abstract>
      <t>This document defines a generic ICMPv6 extensions for carrying and reflecting IPv6 extension header, using two extended ICMPv6 message types: Echo Request and Echo Reply, for diagnostic purposes. Also, an example of leveraging the ICMPv6 extensions for carrying and reflecting IPv6 option header, which contains the IOAM Trace Option, is presented.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>As specified in [RFC4443], the Internet Control Message Protocol for IPv6 (ICMPv6) is an integral part of IPv6, and the base protocol MUST be fully implemented by every IPv6 node. ICMPv6 messages include error messages and informational messages, and the latter are referred to as ICMPv6 Echo Request/Reply messages. ICMPv6 Echo request/reply message is very commonly used for diagnostic purposes, such as PING [RFC2151], to test bidirectional connectivity between two nodes: the source node sends an Echo Request to the destination node, and the destination node responds with an Echo Reply to the source node. The data (payload) received in the ICMPv6 Echo Request message MUST be returned entirely and unmodified in the ICMPv6 Echo Reply message.</t>

      <t>[RFC4884] defines ICMPv6 Extension Structure by which multi-part ICMPv6 error messages are supported.  [RFC8335] defines ICMPv6 Extended Echo Request/Reply messages, containing an ICMPv6 Extension Structure customized for this message.  Both [RFC4884] and [RFC8335] provide sound principles and examples on how to extend ICMPv6 messages.</t>

      <t>IPv6 encapsulation for In-situ OAM (IOAM) data is defined in RFC9486], which uses the IPv6 Hop-by-Hop and Destination options header to carry IOAM data fields ([RFC9197], [RFC9326]). [I-D. shi-ippm-congestion-measurement-data] also adopts Hop-by-hop Option Header and Destination option header to collect the congestion information data along the path. [draft-filsfils-ippm-path-tracing] provides a record of the packet path as a sequence of interface ids by adopting Hop-by-hop Option Header and Destination option header. These two extension option headers are used for collecting information along the path a packet traverses. It is expected that there are more requirements that need to use IPv6 options header for carrying path information in the future.</t>

      <t>The collected information is then exported to a central collector or controller for further process. However, clearly in some cases, the sender is more concerned about these trace information. Currently there are some RFCs and ongoing drafts in IETF that describe methods for sending this tracking information back to the sender. [RFC9322] defines two new flags in the IOAM Trace Option headers: the Loopback and Active flags. The Loopback flag is used to request that each transit device along the path loops back a truncated copy of the data packet to the sender.  The Active flag indicates that a packet is used for active measurement. [I-D. ippm-stamp-ext-hdr-00] extends Simple Two-Way Active Measurement Protocol (STAMP) to carry and reflect any type of IPv6 option that carries IOAM data fields.</t>

      <t>This document defines a generic ICMPv6 extensions for carrying and reflecting IPv6 extension headers, using two extended ICMPv6 message types: Echo Request and Echo Reply. Also, an example of leveraging the ICMPv6 extensions for carrying and reflecting IPv6 option header, which contains the IOAM Trace Option, is presented.</t>
    </section>

    <section title="Conventions">
    
     <section title="Requirements 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>ICMPv6:      Internet Control Message Protocol for IPv6</t>
      <t>IOAM:      In situ Operation, Administration, and Maintenance</t>
      <t>ECMP:      Equal-Cost Multipath</t>
     </section>
    </section>

    <section title="The extended ICMPv6 Messages">
      <t>This document defines two extended ICMPv6 types: the extended Echo Request and the extended Echo Reply.</t>

     <section title="The extended Echo Request Message">
      <t><figure
       title="The Extended Echo Request">
       <artwork>
        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      |     Code      |          Checksum             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Identifier          |        Sequence Number        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                 ICMP Extension Structure                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
       </figure></t>

      <t>ICMPv6 Fields:</t>

	 <t>Type: TDB, defined in this document.</t>

	 <t>Code: MUST be set to 0.</t>

	 <t>Identifier: As defined in [RFC4443], the identifier to aid in matching Echo Replies to this Echo Request. May be zero.</t>

	 <t>Sequence Number: As defined in [RFC4443], the sequence number to aid in matching Echo Replies to this Echo Request. May be zero.</t>

	 <t>ICMP Extension Structure: As defined in [RFC4884], it contains exactly one Extension Header followed by one or more extension objects.</t>

	 <t>Description</t>

	 <t>Every node MUST implement an ICMPv6 Echo responder function that receives ICMPv6 Echo Requests and originates corresponding Echo Replies.  A node SHOULD also implement an application-layer interface for originating ICMPv6 Echo Requests and receiving ICMPv6 Echo Replies, for diagnostic purposes.</t>

	 <t>Upper Layer Notification</t>

	 <t>Echo Request messages MAY be passed to processes receiving ICMP messages.</t>

	  <section title="ICMP Extension Objects">
	   <t>Each extension object contains one 32-bit word, representing an object header without any payload. All object headers share a common format. Figure 2 depicts the object header.</t>

	   <t><figure
          title="Object header without any Payload">
          <artwork>
       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |   Class-Num   |   C-Type      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>                 
	 	</figure></t>

	  <t>AS defined in [RFC4884], an object header has the following fields:</t>

	  <t>Length: 16 bits, length of the object, measured in octets, including the object header.</t>

	  <t>Class-Num: 8 bits, identifies object class.</t>

	  <t>C-Type: 8 bits, identifies object sub-type.</t>

	  <t>This document defines the values of Class-Num and C-Type as follows:

	  <list style="symbols">
	   <t>Class-Num: IPv6 extension header Object. The values are listed as the following:</t>
	   <t><artwork>
      Value         Object Name
      -----         -----------
      TBD1          the Hop-by-Hop Options header
      TBD2          the Destination Options header
      TBD3          the Routing header</artwork>
	  </t>
      </list>

	 <list style="symbols">
	  <t>C-Type: Values are listed as the following:</t>
       <t><artwork>
      Class-Num     C-Type     C-Type Name
      ---------     ------     -----------
      TBD1          0          Reserved
      TBD2          0          Reserved
      TBD3          0          Reserved</artwork>
	  </t>
 	 </list>
 	 </t>   
	</section>
	
	<section title="Examples of Echo Request">
	 <t>In some use cases where only one object is used, which instructs the destination node (Echo responder) to copy the corresponding IPv6 extension header into the Object payload in the extended Echo Reply packet,, the Echo Request is depicted as follows:</t>

 	 <t><figure
       title="Echo Request of ICMP extension structure including one object">
       <artwork>                                                                           
   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      |     Code      |          Checksum             |  
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
  |           Identifier          |        Sequence Number        |  
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
  |                    ICMP Extension Header                      |  
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
  |             Length            |  Class-Num1   |   C-Type(0)   |  
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>                                                                       
       </figure></t>

	<t>In another use cases where multiple objects may be used, which instruct the destination node to copy the multiple corresponding IPv6 extension headers into the Object payload respectively, the Echo Request with two objects is depicted as follows:</t>

	<t><figure
       title="Echo Request of ICMP extension header including two object">
       <artwork>                                                                         
  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      |     Code      |          Checksum             | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 |           Identifier          |        Sequence Number        | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 |                    ICMP Extension Header                      | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 |             Length            |   Class-Num1    |   C-Type(0) | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 |             Length            |   Class-Num2    |   C-Type(0) | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>                                                                   
       </figure></t>       
      </section>
	</section>

     <section title="The extended Echo Reply Message">
      <t><figure
       title="The Extended Echo Reqply">
       <artwork>      
        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      |     Code      |          Checksum             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Identifier          |        Sequence Number        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                 ICMP Extension Structure                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
       </figure></t>
       
	 <t>ICMPv6 Fields:</t>

	 <t>Type: TDB, defined in this document.</t>

	 <t>Code: MUST be set to 0.</t>

	 <t>Identifier: As defined in [RFC4443], the identifier from the invoking Echo Request message.</t>

	 <t>Sequence Number: As defined in [RFC4443], the sequence number from the invoking Echo Request message.</t>

	 <t>ICMP Extension Structure: As defined in [RFC4884], it contains exactly one Extension Header followed by one or more extension objects.</t>

	 <t>Description</t>

	 <t>Every node MUST implement an ICMPv6 Echo responder function that receives ICMPv6 Echo Requests and originates corresponding Echo Replies.  A node SHOULD also implement an application-layer interface for originating ICMPv6 Echo Requests and receiving ICMPv6 Echo Replies, for diagnostic purposes.</t>

	 <t>Upper Layer Notification</t>

	 <t>Echo Reply messages MUST be passed to the process that originated an Echo Request message.</t>

	 <section title="ICMP Extension Objects">
	   <t>Each extension object contains one or more 32-bit words, including an object header and payload.  All object headers share a common format.  Figure 6 depicts the object header and payload.</t>

	   <t><figure
          title="Object header and payload">
          <artwork>
       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |   Class-Num   |   C-Type      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      |                   // (Object payload) //                      |
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
      </figure></t>
      
	  <t>AS defined in [RFC4884], an object header has the following fields:</t>

	  <t>Length: 16 bits, length of the object, measured in octets, including the object header.</t>

	  <t>Class-Num: 8 bits, and its values are defined in Section 3.1.1.</t>

	  <t>C-Type: 8 bits, and its values are defined in Section 3.1.1.</t>

	  <t>Object payload: n*32 bits, MUST contain the integral IPv6 extension header, including Next Header field, Hdr Ext Len field and Options field, defined in RFC8200. Echo Reply packet MUST copy the entire IPv6 extension header into the Object payload.</t>
	</section>

	<section title="Examples of Echo Reply">
	 <t>In some use cases where only one object is used, the Echo Reply, with an Object payload containing the corresponding IPv6 extension header, is depicted as follows:</t>

 	 <t><figure
       title="The extended Echo Reply including an object carrying the corresponding IPv6 extension header">
       <artwork>	                                                                        
   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      |     Code      |          Checksum             |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |           Identifier          |        Sequence Number        |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |                    ICMP Extension Header                      |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |             Length            |   Class-Num1    | C-Type (0)  |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |                                                               |   
  |   Object payload containing IPv6 Hop-by-Hop Options Header    |   
  |                                                               |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>                                                                        
       </figure></t>

	<t>In another use cases where two objects may be used, the Echo Reply, with two Object payloads containing the IPv6 extension header respectively, is depicted as follows:</t>

     <t><figure
      title="The extended Echo Reply including two objects">
      <artwork>
        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      |     Code      |          Checksum             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Identifier          |        Sequence Number        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    ICMP Extension Header                      | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             Length            |  Class-Num1   |   C-Type (0)  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
       |                                                               |
       |   Object payload containing IPv6 Hop-by-Hop Options Header    |
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             Length            |  Class-Num2   |  C-Type (0)   |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
       |                                                               |
       |  Object payload containing IPv6 Destination Options Header    |
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork>
       </figure></t>
      </section>
     </section>
    </section>


    <section title="The Extended Echo Request/Reply Operation">
	 <t>When the source node adds an IPv6 extension header to be reflected, it also MUST add one object contained in ICMP extension structure in the extended ICMPv6 Echo Request packet, which instructs the destination node to copy the corresponding IPv6 extension header into the Object payload in the extended Echo Reply packet. When adding multiple IPv6 extension headers, one or multiple objects MUST be added, each one with matching IPv6 extension header object class.</t>

	 <t>When the extended Echo Request packet carries an IPv6 extension header that it does not require Echo responder to reflect in the Echo Reply packet, it SHOULD not add the matching object class in ICMP extension structure in the extended Echo Request packet.</t>

	 <t>When the Echo responder receives the extended Echo Request packet with IPv6 extension header and ICMP extension structure, the responder that supports this extended Echo, MUST copy the entire IPv6 extension header into the Object payload in the extended Echo Reply packet.</t>

	 <t>When the Echo responder receives the extended Echo Request packet with IPv6 extension header but it does not carry any object in ICMP extension structure, the responder SHOULD not copy the entire IPv6 extension header into the Object payload.</t>

	 <t>When the Echo responder receives the extended Echo Request packet with IPv6 extension header and ICMP extension structure carrying any unrecognized object class, the responder SHOULD skip this object and only copy the entire IPv6 extension header with recognized object class into the Object payload.</t>
    </section>
	 
    <section title="Example of Reflecting IOAM Trace Information">
      <t>In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in packets while they traverse a path between two points in the network. The IOAM data fields are defined in [RFC9197]. This document presents an example of leveraging the ICMPv6 extensions for carrying and reflecting IPv6 options header, which contains the IOAM Trace Option. IPv6 encapsulation for IOAM data is defined in RFC9486], which uses the IPv6 Hop-by-Hop option header to collect information along the path a packet traverses. Clearly in some cases, the sender is more concerned about these trace information. Some possible needs are listed as follows:

	  <list style="symbols">
	  <t>Which nodes and links does the specified traffic flow traverse?</t>

	  <t>In an Equal-Cost Multipath (ECMP) scenario, which ECMP path does a specified N-tuple of flow pass through?</t>

	  <t> Is the specified traffic flow forwarding path consistent on both forward and reverse path?</t>
	  </list>
	 </t>

	<t>An integral extended Echo Request packet includes IPv6 header, Hop-by-Hop option header, ICMPv6 header and ICMP extension structure that contains one object, instructing the Echo responder to reflect IOAM trace information. This extended Echo Request packet is depicted as follows:</t>

	 <t><figure
      title="An integral extended Echo Request packet">
      <artwork>	                                                          
      +----------------------------+                          
      |        IPv6 Header         |                          
      +----------------------------+                          
      |  Hop-by-Hop Option Header  |                          
      +----------------------------+                          
      |       ICMPv6 Header        |                          
      +----------------------------+--+                       
      |   ICMP Extension Header    |  |                       
      +----------------------------+ ICMP Extension Structure 
      |        Object Header       |  |                       
      +----------------------------+--+</artwork>                                                                                
      </figure></t>

    <t>Similarly, an integral extended Echo Reply packet also includes IPv6 header, Hop-by-Hop option header, ICMPv6 header and ICMP extension structure that contains one object with object payload field filled with Hop-by-Hop option header. This extended Echo Reply packet is depicted as follows:</t>

   	 <t><figure
      title="An integral extended Echo Reply packet">
      <artwork>                                                                      
   	 +----------------------------------+                          
   	 |          IPv6 Header             |                          
   	 +----------------------------------+                          
   	 |     Hop-by-Hop Options Header    |                          
   	 +----------------------------------+                          
   	 |           ICMPv6 Header          |                          
   	 +----------------------------------+--+                       
   	 |       ICMP Extension Header      |  |                       
   	 +----------------------------------+  |                       
   	 |          Object Header           |ICMP Extension Structure  
   	 +----------------------------------+  |                       
   	 |       Object payload             |  |                       
   	 | (IPv6 Hop-by-Hop Options Header) |  |                       
   	 +----------------------------------+--+</artwork>                       
      </figure></t>                                                                                                                           			 	                   

	<section title="Operation of the Extended ICMPv6 Messages">
	  <t>An IOAM network can be depicted as follows.</t>

	  <t><figure
       title="IOAM network">
       <artwork>
                                                                                          
   +--------+     +-----------+     +-----------+     +-----------+     +--------+ 
   |  Host  |=====| IOAM node |=====| IOAM node |=====| IOAM node |=====|  Host  | 
   +--------+     +-----------+     +-----------+     +-----------+     +--------+ 
                  Encapsulating        Transit        Decapsulating                
                     Node                Node              Node                    
                                                                                   
                  |------------------  IOAM-Domain  ---------------|</artwork>                                                                                                  
       </figure></t> 

	 <t>The sender (source) of the Echo request messages can be a host or network device. When a host or a network device sends an Echo request message, if it acts as an IOAM encapsulating node, it MUST perform the operation of IOAM Data-Fields encapsulation, i.e., it MUST place the IOAM Data-Fields directly in the IPv6 Hop-by-Hop Option Header.</t>

	 <t>To accurately retrieve the trace information the Echo request packet traverses, including all nodes and links it passes through, the IOAM encapsulating node MUST set both the Most significant bit (Bit 0) and Bit 1 of the IOAM Trace-Type value to "1". Therefore, when processing this trace option, every transit node (including encapsulating node) in IOAM-Domain MUST populates its IOAM data with two data fields, namely, the Hop_Lim and node_id data field and ingress_if_id and egress_if_id data field.</t>

	 <t>The rest of the bits of IOAM-Trace-Type MAY be set "1" or "0" depending on implementation.</t>

	 <t>Similarly, the responder (destination) of the Echo request messages can also be a host or network device.  When a host or a network device receives an Echo request message, if it acts as an IOAM node, no matter what node (encapsulating node, transit node or decapsulating node) it is, it MUST originate an Echo reply message, copying the entire IPv6 Hop-by-Hop Option Header with IOAM Data into the Object payload of ICMP Extension Structure.</t>

	 <t>In reverse path, to accurately retrieve the trace information the Echo reply packet traverses, similarly, when processing this trace option, every transit node in IOAM-Domain MUST populates IOAM Data with two data fields, namely, the Hop_Lim and node_id data field and ingress_if_id and egress_if_id data field.</t>

	 <t>The sender can determine the consistence of the forward and reverse path by comparing the Object payload of ICMP Extension Structure with the IPv6 Hop-by-Hop Options Header carrying IOAM data in the received Echo reply packet.</t>

	 <t>Notably, to simulate the real path the specified traffic flow traverses, especially in ECMP scenario, the same value or values in any ECMP affecting fields (e.g., the 3-tuple of the Flow Label, Source Address, and Destination Address fields [RFC6437]) MUST be populated in Echo request packets, ensuring the fate sharing between the Echo request/reply packets and the specified traffic flow packets.</t>
     </section> 
    </section>        

    <section title="Updates to RFC 4884">
	<t>Section 4.6 of [RFC4884] provides a list of extensible ICMP messages (i.e., messages that can carry the ICMP Extension Structure).  This document adds the ICMPv6 Extended Echo Request message and the ICMPv6 Extended Echo Reply message to that list.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <section title="ICMPv6 Type">
        <t>IANA is requested to allocate the following values in the "Internet Control Message Protocol version 6 (ICMPv6) Parameters" registry.</t>

	   <t>Two values are to be allocated from the "ICMPv6 type Numbers" range:</t>

 	   <t><figure
        title="The extended ICMPv6 Type Numbers">
        <artwork>	                                                                               
   +---------+------------------+--------+-------------+------------------+   
   | Type    |      Name        |  Code  |    Name     |     Reference    |   
   +---------+------------------+--------+-------------+------------------+   
   | TBD     |  Echo Request    |   0    |  Reserved   | [This document]  |   
   +---------+---------------------------+-------------+------------------+   
   | TBD     |  Echo Reply      |   0    |  Reserved   |  [This document] |   
   +---------+------------------+--------+-------------+------------------+</artwork>                                                                                                                                                             
      </figure></t>

	  <t>The two type values should be allocated from one of the unassigned values greater than 127.</t>

	  <t>IANA is requested to define a code registry for each of the two new types. The registration procedure for these registries is First Come First Served. In each of these new registries, a single code value is assigned by this document: Code 0.</t>
	 </section>

	 <section title="ICMP Extension Object Class">
	  <t>IANA is requested to allocate the following values in the "ICMP Extension Object Classes and Class Sub-types" registry.</t>

	  <t><figure
        title="ICMP Extension Object Classes and Class Sub-types values">
        <artwork>                                                                                                     
  +--------------+----------------------------+----------+---------------+-----------------+  
  |  Class-Num   |        Object Name         |  C-Type  |  C-Type Name  |     Reference   |  
  +--------------+------------------+---------+---------------+----------------------------+  
  |     TBD1     | Hop-by-Hop Options Header  |    0     |  Reserved     | [This document] |  
  +--------------+----------------------------+----------+---------------+-----------------+  
  |     TBD2     | Destination Options Header |    0     |  Reserved     | [This document] |  
  +--------------+----------------------------+----------+---------------+-----------------+  
  |     TBD3     | Routing Header             |    0     |  Reserved     | [This document] |  
  +--------------+----------------------------+----------+---------------+-----------------+</artwork>
        </figure></t>
       </section>
    </section>

    <section anchor="scecurity" title="Security Considerations">
      <t>From a security perspective this document does not introduce new security threats beyond the threats that are already applicable for existing ICMPv6 messages, and are described in [RFC4443].</t>

      <t>The extended ICMPv6 Echo Reply message can be longer than the extended Echo Request message, since the Extension Structure of the extended Echo Reply includes one or more objects containing the respective IPv6 options header. Thus, an Echo Reply message is slightly amplified compared to an Echo Request message.  However, the amplification effect is minor, as an IPv6 options can have a maximum length of 255 octets.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119.xml"?>

      <?rfc include="reference.RFC.2151.xml"?>

      <?rfc include="reference.RFC.4443.xml"?>

      <?rfc include="reference.RFC.4884.xml"?>

      <?rfc include="reference.RFC.8174.xml"?>

      <?rfc include="reference.RFC.8335.xml"?>

      <?rfc include="reference.RFC.9197.xml"?>

      <?rfc include="reference.RFC.9486.xml"?>    
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.8126.xml"?>

      <?rfc include="reference.RFC.9322.xml"?>

      <?rfc include="reference.RFC.9343.xml"?>

      <?rfc include="reference.I-D.ietf-ippm-stamp-ext-hdr.xml"?>

      <?rfc include="reference.I-D.shi-ippm-congestion-measurement-data.xml"?>

      <?rfc include="reference.I-D.filsfils-ippm-path-tracing.xml"?>
    </references>
  </back>
</rfc>