<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!--<!DOCTYPE rfc SYSTEM "rfc4748.dtd"> -->

<rfc category="std" ipr="trust200902" docName="draft-xiao-6man-icmpv6-ioam-conf-state-01" updates="4884" consensus="true">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc toc="yes"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<front>
  <title abbrev="ICMPv6 Ping Enabled IOAM Capabilities"> ICMPv6 Echo Request/Reply for Enabled In-situ OAM Capabilities </title>

  <author fullname="Xiao Min" initials="X" surname="Min">
      <organization>ZTE Corp.</organization>
     <address>
       <postal>
         <street></street>

         <!-- Reorder these if your country does things differently -->

         <city>Nanjing</city>

         <region></region>

         <code></code>

         <country>China</country>
       </postal>

       <phone>+86 25 88013062</phone>

       <email>xiao.min2@zte.com.cn</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
    </author>

  <author fullname="Greg Mirsky" initials="G" surname="Mirsky">
      <organization>Ericsson</organization>
     <address>
       <postal>
         <street></street>

         <!-- Reorder these if your country does things differently -->

         <city></city>

         <region></region>

         <code></code>

         <country>United States of America</country>
       </postal>

       <phone></phone>

       <email>gregimirsky@gmail.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
    </author>

    <date year="2022"/>
	
    <area>Internet</area>
    <workgroup>6MAN Working Group</workgroup>

    <keyword>Request for Comments</keyword>
    <keyword>RFC</keyword>
    <keyword>Internet Draft</keyword>
    <keyword>I-D</keyword>

    <abstract>
  <t> This document describes the ICMPv6 IOAM Echo functionality, which uses the ICMPv6 IOAM Echo Request/Reply messages, 
  allowing the IOAM encapsulating node to discover the enabled IOAM capabilities of each IOAM transit and decapsulating 
  node.</t>
  <t> This document updates RFC 4884.</t>
    </abstract>
    
</front>
  
<middle>

  <section title="Introduction">

  <t> IPv6 encapsulation for In-situ OAM (IOAM) data is defined in <xref target="I-D.ietf-ippm-ioam-ipv6-options"/>, 
  which uses IPv6 hop-by-hop options and destination option to carry IOAM data.</t>
  
  <t> As specified in <xref target="I-D.ietf-ippm-ioam-conf-state"/>, echo request/reply can be used for the IOAM 
  encapsulating node to discover the enabled IOAM capabilities at IOAM transit and decapsulating nodes.</t>

  <t> As specified in <xref target="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. <xref target="RFC4884"/> 
  defines ICMPv6 Extension Structure by which multi-part ICMPv6 error messages are supported. <xref target="RFC8335"/> defines 
  ICMPv6 Extended Echo Request/Reply messages, and the ICMPv6 Extended Echo Request contains an ICMPv6 Extension Structure 
  customized for this message. Both <xref target="RFC4884"/> and <xref target="RFC8335"/> provide sound principles 
  and examples on how to extend ICMPv6 error messages and echo request/reply messages.</t>
  
  <t> This document describes the ICMPv6 IOAM Echo functionality, which uses the ICMPv6 IOAM Echo Request/Reply messages, 
  allowing the IOAM encapsulating node to discover the enabled IOAM capabilities of each IOAM transit and decapsulating 
  node.</t>
  
  <t> The IOAM encapsulating node sends an ICMPv6 IOAM Echo Request message to each IOAM transit and decapsulating node, 
  then each receiving node executes access control procedures, and if access is granted, each receiving node returns an 
  ICMPv6 IOAM Echo Reply message which indicates the enabled IOAM capabilities of the receiving node. The ICMPv6 IOAM Echo 
  Reply message contains an ICMPv6 Extension Structure exactly customized to this message, and the ICMPv6 Extension Structure 
  contains one or more IOAM Capabilities Objects.</t>
  
  <t> Note that before the IOAM encapsulating node sends the ICMPv6 IOAM Echo Request messages, it needs to know the IPv6 
  address of each node along the transport path of a data packet to which IOAM data would be added. That can be achieved by 
  executing ICMPv6 traceroute or provisioning explicit path at the IOAM encapsulating node.</t>
       
  </section>
  
   <section title="Conventions Used in This Document">

	<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="ICMPv6 IOAM Echo Request">

	<t> The ICMPv6 IOAM Echo Request message is encapsulated in an IPv6 header <xref target="RFC8200"/>, 
	like any ICMPv6 message.</t>
	
	<t> The ICMPv6 IOAM Echo Request message has the following format:</t>
	 
     <figure anchor="Figure_1" title="ICMPv6 IOAM Echo Request Message">
     <artwork align="center">     <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number| Num of NS-IDs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.           IOAM Capabilities Query Container Payload           .
.                        as specified in                        .
.         Section 3.1 of draft-ietf-ippm-ioam-conf-state        .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>

      <t>IPv6 Header fields:</t>

      <t><list style="symbols">
          <t>Source Address: The Source Address identifies the IOAM encapsulating node. 
		  It MUST be a valid IPv6 unicast address.</t>

          <t>Destination Address: The Destination Address identifies the IOAM transit or 
		  decapsulating node. It MUST be a valid IPv6 unicast address.</t>
        </list></t>

      <t>ICMPv6 fields:</t>

      <t><list style="symbols">
          <t>Type: IOAM Echo Request. The value is TBD1.</t>

          <t>Code: MUST be set to 0 and MUST be ignored upon receipt. </t>

          <t>Checksum: The same as defined in <xref target="RFC4443"/>.</t>

          <t>Identifier: An Identifier aids in matching IOAM Echo
          Replies to IOAM Echo Requests. It may be zeroed.</t>

          <t>Sequence Number: A Sequence Number to aid in matching IOAM
          Echo Replies to IOAM Echo Requests. It may be zeroed.</t>

          <t>Num of NS-IDs: Number of Namespace-IDs within the payload.</t>

          <t>Following the IOAM Echo Request header, it's a List of Namespace-IDs, which is 
		  also called IOAM Capabilities Query Container Payload in Section 3.1 of 
		  <xref target="I-D.ietf-ippm-ioam-conf-state"/>. If the payload would not otherwise 
		  terminate on a 4-octet boundary, it MUST be padded with zeroes.</t>
        </list></t>
	 
  </section> 
   
  <section title="ICMPv6 IOAM Echo Reply">

	<t> The ICMPv6 IOAM Echo Reply message is encapsulated in an IPv6 header <xref target="RFC8200"/>, 
	like any ICMPv6 message.</t>
	
	<t> The ICMPv6 IOAM Echo Reply message has the following format:</t>
	 
     <figure anchor="Figure_2" title="ICMPv6 IOAM Echo Reply Message">
     <artwork align="center">     <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number| Num of NS-IDs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.         IOAM Capabilities Response Container Payload          .
.                        as specified in                        .
.         Section 3.2 of draft-ietf-ippm-ioam-conf-state        .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>

      <t>IPv6 Header fields:</t>

      <t><list style="symbols">
          <t>Source Address: Copied from the Destination Address field of the
          invoking IOAM Echo Request packet.</t>

          <t>Destination Address: Copied from the Source Address field of the
          invoking IOAM Echo Request packet.</t>
        </list></t>

      <t>ICMPv6 fields:<list style="symbols">
          <t>Type: IOAM Echo Reply. The value is TBD2.</t>

          <t>Code: Values are (0) No Error, (1) Malformed Query, (2) No Matched Namespace-ID, and (3) Exceed 
		  the minimum IPv6 MTU.</t>

          <t>Checksum: The same as defined in <xref target="RFC4443"/>.</t>

          <t>Identifier: Copied from the Identifier field of the invoking
          IOAM Echo Request message.</t>

          <t>Sequence Number: Copied from the Sequence Number field of the
          invoking IOAM Echo Request message.</t>

          <t>Num of NS-IDs: Number of different Namespace-IDs within the payload, its value MUST be no 
		  more than the Num of NS-IDs field of the invoking IOAM Echo Request message.</t>

          <t>Following the IOAM Echo Reply header, it's a List of IOAM Capabilities Objects, which is 
		  also called IOAM Capabilities Response Container Payload in Section 3.2 of 
		  <xref target="I-D.ietf-ippm-ioam-conf-state"/>.</t>
		  
          <t>Section 7 of <xref target="RFC4884"/> defines the ICMP Extension Structure. As per RFC 4884, 
		  the Extension Structure contains exactly one Extension Header followed by one or more objects. 
		  When applied to the ICMPv6 IOAM Echo Reply message, the ICMP Extension Structure MUST contain 
		  one or more IOAM Capabilities Objects.</t>
        </list></t>
	 
	<section  anchor="objects" title="IOAM Capabilities Objects">

	<t> All ICMPv6 IOAM Capabilities Objects are encapsulated in an ICMPv6 IOAM Echo Reply message.</t>
	
	<t> Each ICMPv6 IOAM Capabilities Object has the following format:</t>
	 
     <figure anchor="Figure_3" title="IOAM Capabilities Object">
     <artwork align="center">     <![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                IOAM Capabilities Object Payload               .
.                        as specified in                        .
.        Section 3.2.x of draft-ietf-ippm-ioam-conf-state       .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>
	 
      <t>Object fields:<list style="symbols">
          <t>Class-Num: IOAM Capabilities Objects. The values are listed as the following:</t>
        </list></t>
		
        <figure>
          <artwork><![CDATA[
   Value         Object Name
   -----         -----------
   TBD3          IOAM Tracing Capabilities Object
   TBD4          IOAM Proof-of-Transit Capabilities Object
   TBD5          IOAM Edge-to-Edge Capabilities Object
   TBD6          IOAM DEX Capabilities Object
   TBD7          IOAM End-of-Domain Object   
        ]]></artwork>
        </figure>
		
        <t><list style="symbols">
          <t>C-Type: Values are listed as the following:</t>
        </list></t>
		
        <figure>
          <artwork><![CDATA[
   Class-Num     C-Type     C-Type Name          
   ---------     ------     -----------          
   TBD3          0          Reserved             
                 1          Pre-allocated Tracing
                 2          Incremental Tracing
   TBD4          0          Reserved             
   TBD5          0          Reserved             
   TBD6          0          Reserved             
   TBD7          0          Reserved             
        ]]></artwork>
        </figure>
		
        <t><list style="symbols">
          <t>Length: Length of the object, measured in octets, including the
          Object Header and Object Payload.</t>

          <t>Following the IOAM Capabilities Object Header, it's the IOAM Capabilities Object Payload, 
		  which is defined respectively in Section 3.2.1, Section 3.2.2, Section 3.2.3, Section 3.2.4, 
		  Section 3.2.5 and Section 3.2.6 of <xref target="I-D.ietf-ippm-ioam-conf-state"/>.</t>
        </list></t>
	
    </section> 
	 
	<section title="Examples of IOAM Echo Reply">
        
     <t> The format of ICMPv6 IOAM Echo Reply can vary from deployment to deployment.</t> 
	 
     <t> In a deployment where only the default Namespace-ID is used, the IOAM Pre-allocated Tracing 
	 Capabilities and IOAM Proof-of-Transit Capabilities are enabled at the IOAM transit node that received 
	 ICMPv6 IOAM Echo Request message, the ICMPv6 IOAM Echo Reply message is depicted as the following:</t> 
	 
     <figure anchor="Figure_4" title="Example 1 of IOAM Echo Reply">
     <artwork align="center">     <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number| Num of NS-IDs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM-Trace-Type                 |  Reserved   |W|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |          Ingress_MTU          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ingress_if_id (short or wide format)         ......          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          | IOAM-POT-Type |SoP| Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>
	 
     <t> In a deployment where two Namespace-IDs (Namespace-ID1 and Namespace-ID2) are used, for both 
	 Namespace-ID1 and Namespace-ID2 the IOAM Pre-allocated Tracing Capabilities and IOAM Proof-of-Transit 
	 Capabilities are enabled at the IOAM transit node that received ICMPv6 IOAM Echo Request message, the 
	 ICMPv6 IOAM Echo Reply message is depicted as the following:</t> 
	 
     <figure anchor="Figure_5" title="Example 2 of IOAM Echo Reply">
     <artwork align="center">     <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number| Num of NS-IDs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM-Trace-Type                 |  Reserved   |W|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID1         |          Ingress_MTU          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ingress_if_id (short or wide format)         ......          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID1         | IOAM-POT-Type |SoP| Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM-Trace-Type                 |  Reserved   |W|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID2         |          Ingress_MTU          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ingress_if_id (short or wide format)         ......          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID2         | IOAM-POT-Type |SoP| Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>
	 
     <t> In a deployment where only the default Namespace-ID is used, the IOAM Pre-allocated Tracing Capabilities, 
	 IOAM Proof-of-Transit Capabilities and IOAM Edge-to-Edge Capabilities are enabled at the IOAM decapsulating 
	 node that received ICMPv6 IOAM Echo Request message, the ICMPv6 IOAM Echo Reply message is depicted as the following:</t> 
	 
     <figure anchor="Figure_6" title="Example 3 of IOAM Echo Reply">
     <artwork align="center">     <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number| Num of NS-IDs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM-Trace-Type                 |  Reserved   |W|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |          Ingress_MTU          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ingress_if_id (short or wide format)         ......          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Default Namespace-ID      | IOAM-POT-Type |SoP| Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |         IOAM-E2E-Type         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|TSF|         Reserved          |              MBZ              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]>     </artwork>
     </figure>
        
     <t> Note that when an ICMPv6 IOAM Echo Request message or IOAM Echo Reply message is received, the Payload Length 
	 field of IPv6 Header <xref target="RFC8200"/> indicates the message length.</t> 
	
    </section> 
  </section> 
   
  <section anchor="proc" title="ICMPv6 Message Processing">

      <t>When a node receives an ICMPv6 IOAM Echo Request and any of
      the following conditions apply, the node MUST silently discard the
      incoming message:</t>

      <t><list style="symbols">
          <t>The node does not recognize the ICMPv6 IOAM Echo Request message.</t>

          <t>The node has not explicitly enabled ICMPv6 IOAM Echo functionality.</t>

          <t>The incoming ICMPv6 IOAM Echo Request carries a Source Address
          that is not explicitly authorized.</t>

          <t>The Source Address of the incoming message is not a unicast address.</t>
		  
          <t>The Destination Address of the incoming message is a multicast address.</t>
        </list></t>

      <t>Otherwise, when a node receives an ICMPv6 IOAM Echo Request, it MUST
      format an ICMPv6 IOAM Echo Reply as follows:
	  <list style="symbols">
	  
          <t>Set the Hop Limit to 255.</t>
		  
          <t>Set the DiffServ codepoint to <xref target="RFC4594">CS0</xref>.</t>
		  
          <t>Copy the Destination Address from the IOAM Echo Request
          to the Source Address of the IOAM Echo Reply.</t>

          <t>Copy the Source Address from the IOAM Echo Request to
          the Destination Address of the IOAM Echo Reply.</t>
		  
          <t>Set the Next Header to (58) ICMPv6.</t>
		  
          <t>Set the ICMPv6 Type to (TBD2) IOAM Echo Reply.</t>
		  
          <t>Copy the Identifier from the IOAM Echo Request to the
          IOAM Echo Reply.</t>

          <t>Copy the Sequence Number from the IOAM Echo Request
          to the IOAM Echo Reply.</t>
		  
          <t>Set the Code field as described in <xref target="code"/>.</t>
		  
          <t>If the Code field is equal to (0) No Error, then add one or more 
		  objects as described in <xref target="objects"/>.</t>

          <t>Set the Checksum appropriately.</t>

          <t>Forward the ICMPv6 IOAM Echo Reply to its destination.</t>
		  
        </list></t>
	 
	<section anchor="code" title="Code Field Processing">

        <t>The Code field MUST be set to (1) Malformed Query if any of the
        following conditions apply:<list style="symbols">
            <t>The ICMPv6 IOAM Echo Request does not include any Namespace-ID.</t>

            <t>The value of Num of NS-IDs field does not match the contained list of Namespace-IDs.</t>

            <t>The query is otherwise malformed.</t>
          </list>The Code field MUST be set to (2) No Matched Namespace-ID if none
        of the contained list of Namespace-IDs is recognized.</t>

        <t>The Code field MUST be set to (3) Exceed the minimum IPv6 MTU if the formatted 
		ICMPv6 IOAM Echo Reply exceeds the minimum IPv6 MTU (i.e., 1280 octets). In this case, 
		all objects MUST be stripped before forwarding the ICMPv6 Echo Reply to its destination.</t>

        <t>Otherwise, the Code field MUST be set to (0) No Error. </t>
	
    </section> 
  </section> 

  <section title="Updates to RFC 4884"> 
  
  <t> Section 4.6 of <xref target="RFC4884"/> provides a list of extensible ICMP messages 
  (i.e., messages that can carry the ICMP Extension Structure). This document adds the ICMPv6 
  IOAM Echo Request message and the ICMPv6 IOAM Echo Reply message to that list.</t>
  
  </section>

  <section title="IANA Considerations"> 
  <t> This document requests the following IANA actions:
  
          <list style="symbols">

          <t> Add the following to the "ICMPv6 'type' Numbers" registry:
		  
		  <list style="none">
          <t> TBD1 IOAM Echo Request</t>
		  
          <t> As ICMPv6 distinguishes between informational and error
          messages, and this is an informational message, the value must be
          assigned from the range 128-255.</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following to the "Type TBD1 - IOAM Echo Request" sub-registry:
          
		  <list>
          <t> (0) No Error</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">

          <t> Add the following to the "ICMPv6 'type' Numbers" registry:
		  
		  <list style="none">
          <t> TBD2 IOAM Echo Reply</t>
		  
          <t> As ICMPv6 distinguishes between informational and error
          messages, and this is an informational message, the value must be
          assigned from the range 128-255.</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following to the "Type TBD2 - IOAM Echo Reply" sub-registry:
          
		  <list>
          <t> (0) No Error</t>
          <t> (1) Malformed Query</t>
          <t> (2) No Matched Namespace-ID</t>
          <t> (3) Exceed the minimum IPv6 MTU</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list style="none">
          <t> (TBD3) IOAM Tracing Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following C-types to the "Sub-types - Class TBD3 -
      IOAM Tracing Capabilities Object" sub-registry:
          
		  <list>
          <t> (0) Reserved</t>
          <t> (1) Pre-allocated Tracing</t>
          <t> (2) Incremental Tracing</t>
		  
          <t> C-Type values are assigned on a First Come First Serve (FCFS)
      basis with a range of 0-255.</t>
		  </list></t>
		  </list>	

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list style="none">
          <t> (TBD4) IOAM Proof-of-Transit Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following C-types to the "Sub-types - Class TBD4 -
      IOAM Proof-of-Transit Capabilities Object" sub-registry:
          
		  <list>
          <t> (0) Reserved</t>
		  
          <t> C-Type values are assigned on an FCFS basis with a range of 0-255.</t>
		  </list></t>
		  </list>	

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list style="none">
          <t> (TBD5) IOAM Edge-to-Edge Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following C-types to the "Sub-types - Class TBD5 -
      IOAM Edge-to-Edge Capabilities Object" sub-registry:
          
		  <list>
          <t> (0) Reserved</t>
		  
          <t> C-Type values are assigned on an FCFS basis with a range of 0-255.</t>
		  </list></t>
		  </list>	

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list style="none">
          <t> (TBD6) IOAM DEX Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following C-types to the "Sub-types - Class TBD6 -
      IOAM DEX Capabilities Object" sub-registry:
          
		  <list>
          <t> (0) Reserved</t>
		  
          <t> C-Type values are assigned on an FCFS basis with a range of 0-255.</t>
		  </list></t>
		  </list>

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list style="none">
          <t> (TBD7) IOAM End-of-Domain Object</t>
		  </list></t>
		  </list>
		  
          <list style="none">
          <t> Add the following C-types to the "Sub-types - Class TBD7 -
      IOAM End-of-Domain Object" sub-registry:
          
		  <list>
          <t> (0) Reserved</t>
		  
          <t> C-Type values are assigned on an FCFS basis with a range of 0-255.</t>
		  </list></t>
		  </list>
		  
        </t>

      <t>All codes mentioned above are assigned on an FCFS basis with a range of 0-255.</t>
	  
  </section>
  
  <section title="Security Considerations">
  
  <t> Securiy issues discussed in <xref target="I-D.ietf-ippm-ioam-conf-state"/> apply to this document.</t>
  
  <t> This document recommends using IP Authentication Header <xref target="RFC4302"/> or IP Encapsulating 
  Security Payload Header <xref target="RFC4303"/> to provide integrity protection for IOAM Capabilities information.</t>
  
  <t> This document recommends using IP Encapsulating Security Payload Header <xref target="RFC4303"/> to provide 
  privacy protection for IOAM Capabilities information.</t>
  
  <t> This document recommends that the network operators establish policies that restrict access to ICMPv6 IOAM 
  Echo functionality. In order to enforce these policies, nodes that support ICMPv6 IOAM Echo functionality MUST 
  support the following configuration options:</t>

  <t><list style="symbols">
      <t>Enable/disable ICMPv6 IOAM Echo functionality. By default, ICMPv6 IOAM Echo functionality is disabled.</t>

      <t>Define enabled Namespace-IDs. By default, all Namespace-IDs except the default one (i.e., Namespace-ID 
	  0x0000) are disabled.</t>

      <t>For each enabled Namespace-ID, define the prefixes from which ICMPv6 IOAM Echo Request messages are 
	  permitted.</t>
  </list></t>

  <t>When a node receives an ICMPv6 IOAM Echo Request message that it is not configured to support, it MUST 
  silently discard the message. See <xref target="proc"/> for details.</t>

  <t>In order to protect local resources, implementations SHOULD rate-limit incoming ICMPv6 IOAM Echo Request 
  messages.</t>
  
  </section>
  
  <section title="Acknowledgements">
  <t> TBA. </t>
  </section>  
  
</middle>
  
<back>

    <references title="Normative References">
     <?rfc include="reference.RFC.2119"?>
     <?rfc include="reference.RFC.8174"?>
     <?rfc include="reference.RFC.4443"?>
     <?rfc include="reference.RFC.4884"?>
     <?rfc include="reference.I-D.ietf-ippm-ioam-conf-state"?>
    </references>

	<references title="Informative References">
     <?rfc include="reference.RFC.8200"?>
     <?rfc include="reference.RFC.8335"?>
     <?rfc include="reference.RFC.4594"?>
     <?rfc include="reference.RFC.4302"?>
     <?rfc include="reference.RFC.4303"?>
     <?rfc include="reference.I-D.ietf-ippm-ioam-ipv6-options"?>
    </references>
	
</back>
</rfc>

