<?xml version="1.0" encoding="iso-8859-1"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<rfc category="std" ipr="trust200902" docName="draft-ietf-6man-icmpv6-ioam-conf-state-10" consensus="true" submissionType="IETF">

<front>
  <title abbrev="IPv6 Query for IOAM Capabilities"> IPv6 Query 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 18061680168</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>

  <author fullname="Ron Bonica" initials="R" surname="Bonica">
      <organization>HPE</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>ronald.bonica@hpe.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
	
    <date year="2026"/>
	
    <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 application of the mechanism of discovering In-situ OAM (IOAM) capabilities, described in RFC 9359 
  "Echo Request/Reply for Enabled In Situ OAM (IOAM) Capabilities", in IPv6 networks. IPv6 Node IOAM Query functionality uses the ICMPv6 
  Query messages, allowing the IOAM encapsulating node to discover the enabled IOAM capabilities of each IOAM transit and IOAM 
  decapsulating node.</t>
  
  </abstract>
    
</front>
  
<middle>

  <section title="Introduction">

  <t> IPv6 encapsulation for In-situ OAM (IOAM) data is defined in <xref target="RFC9486"/>, which uses the IPv6 hop-by-hop and 
  destination options to carry IOAM data fields (<xref target="RFC9197"/>, <xref target="RFC9326"/>).</t>
  
  <t> As specified in <xref target="RFC9359"/>, the echo request/reply can be used by the IOAM encapsulating node to discover the 
  enabled IOAM capabilities at the 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. ICMPv6 messages include error messages and informational messages. <xref target="RFC4884"/> defines ICMP Extension Structure 
  by which multi-part ICMPv6 error messages are supported. <xref target="I-D.xbm-intarea-icmp-query"/> updates <xref target="RFC4884"/> 
  by adding two ICMPv6 informational messages, ICMPv6 Query Request message and ICMPv6 Query Response message, to the supporting list 
  of ICMP Extension Structure. The two added ICMPv6 messages are used for a Querying node to query information of a Queried node.</t>
  
  <t> This document describes the IPv6 Node IOAM Query functionality, which uses the ICMPv6 Query messages, allowing the IOAM encapsulating 
  node to discover the enabled IOAM capabilities of each IOAM transit and IOAM decapsulating node.</t>
  
  <t> The IOAM encapsulating node sends an IOAM Query Request to each IOAM transit and decapsulating node. Upon receiving the query, 
  each node executes access control procedures. If access is granted, the node returns an IOAM Query Response indicating its enabled IOAM 
  capabilities. The IOAM Query Request contains an ICMP Extension Structure including one IOAM Query Object, and the IOAM Query Response 
  contains an ICMP Extension Structure including one or more IOAM Capabilities Objects.</t>
  
  <t> Before the IOAM encapsulating node sends the IOAM Query Request, it must know the IPv6 address of each node along the transport 
  path of the data packet to which IOAM data will be added. This can be achieved by executing an ICMPv6/UDP traceroute or by provisioning 
  an explicit path at the IOAM encapsulating node. In an Equal-Cost Multipath (ECMP) scenario, the same values in any ECMP-affecting 
  fields (e.g., the 3-tuple of the Flow Label, Source Address, and Destination Address fields as per <xref target="RFC6437"/>) of the 
  IOAM data packets MUST be populated in the IOAM Query Request, ensuring fate sharing between the IOAM Query Request and the IOAM data 
  packets.</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="IOAM Query Request">

	<t> The IOAM Query Request message is encapsulated in an IPv6 header <xref target="RFC8200"/>, 
	like any ICMPv6 message.</t>
	
	<t> The IOAM Query Request message has the following format:</t>
	 
     <figure anchor="Figure_1" title="IOAM Query 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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                       IOAM Query Object                       ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                          Pad Object                           ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></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>ICMPv6 header: The values of Type, Code, Checksum, Identifier, and Sequence 
		  Number are the same as specified in <xref target="I-D.xbm-intarea-icmp-query"/>.</t>

          <t>Following the ICMPv6 header, it's an ICMP Extension Structure (<xref target="RFC4884"/>) 
		  containing an IOAM Query Object and an Pad Object (<xref target="I-D.xbm-intarea-icmp-query"/>). 
		  The IOAM Query Object is also known as Query Request Object in <xref target="I-D.xbm-intarea-icmp-query"/>.</t>
        </list></t>		
		
	<section anchor="ioam query object" title="IOAM Query Object">
	
	<t> The IOAM Query Object has the following format:</t>
	 
     <figure anchor="Figure_2" title="IOAM Query 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      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                  List of IOAM Namespace-IDs                   ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></artwork>
     </figure>
	 
      <t>Object fields:<list style="symbols">
          <t>Class-Num: IOAM Query Object. The value is TBD1.</t>

          <t>C-Type: MUST be set to 0 and MUST be ignored upon receipt.</t>

          <t>Length: Length of the object, measured in octets, including the Object Header and payload.</t>

          <t>Object payload: Following the IOAM Query Object Header is the IOAM Query Object Payload, which 
		  is defined in Section 3.1 of <xref target="RFC9359"/>..</t>
        </list></t>
	
    </section> 
	 
	<section title="Examples of the IOAM Query Request">
        
     <t> The format of an IOAM Query Request can vary from deployment to deployment.</t> 
	 
     <t> In a deployment where only the default Namespace-ID is used, the IOAM Query Request 
	 is depicted as the following:</t> 
	 
     <figure anchor="Figure_3" title="IOAM Query Request of the Default IOAM Namespace">
     <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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |          Zero-padded          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                         Extra Padding                         ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></artwork>
     </figure>
	 
     <t> In a deployment where two Namespace-IDs (Namespace-ID1 and Namespace-ID2) are used, the IOAM 
	 Query Request is depicted as the following:</t> 
	 
     <figure anchor="Figure_4" title="IOAM Query Request of the Two IOAM Namespaces">
     <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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID1         |         Namespace-ID2         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                         Extra Padding                         ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></artwork>
     </figure>
        
     <t> When an IOAM Query Request message is received, the length of the message is determined by the 
	 Payload Length field in the IPv6 Header, as specified in <xref target="RFC8200"/>.</t> 
	
    </section> 	 
  </section> 
   
  <section title="IOAM Query Response">

	<t> The IOAM Query Response message is encapsulated in an IPv6 header <xref target="RFC8200"/>, 
	like any ICMPv6 message.</t>
	
	<t> The IOAM Query Response message has the following format:</t>
	 
     <figure anchor="Figure_5" title="IOAM Query Response 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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~               List of IOAM Capabilities Objects               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></artwork>
     </figure>

      <t>IPv6 Header fields:</t>

      <t><list style="symbols">
          <t>Source Address: Copied from the Destination Address field of the
          invoking IOAM Query Request packet.</t>

          <t>Destination Address: Copied from the Source Address field of the
          invoking IOAM Query Request packet.</t>
        </list></t>

      <t>ICMPv6 fields:</t>
	  
      <t><list style="symbols">
          <t>ICMPv6 header: The values of Type, Code, Checksum, Identifier, and Sequence 
		  Number are the same as specified in <xref target="I-D.xbm-intarea-icmp-query"/>. Besides, two more values 
		  (4) No Matched Namespace-ID and (5) Exceed the minimum IPv6 MTU are defined for Code field. 
		  See <xref target="code"/> for details.</t>

          <t>Following the ICMPv6 header, it's an ICMP Extension Structure (<xref target="RFC4884"/>) 
		  containing one or more IOAM Capabilities Objects. The IOAM Capabilities Object is also 
		  known as Query Response Object in <xref target="I-D.xbm-intarea-icmp-query"/>.</t>
        </list></t>
	 
	<section  anchor="objects" title="IOAM Capabilities Objects">
	
	<t> The IOAM Capabilities Object has the following format:</t>
	 
     <figure anchor="Figure_6" 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               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></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
   -----         -----------
   TBD2          IOAM Tracing Capabilities Object
   TBD3          IOAM Proof of Transit Capabilities Object
   TBD4          IOAM Edge-to-Edge Capabilities Object
   TBD5          IOAM DEX Capabilities Object
   TBD6          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          
   ---------     ------     -----------          
   TBD2          0          Reserved             
                 1          Pre-allocated Tracing
   TBD3          0          Reserved             
   TBD4          0          Reserved             
   TBD5          0          Reserved             
   TBD6          0          Reserved             
        ]]></artwork>
        </figure>
		
        <t><list style="symbols">		
          <t>Length: Length of the object, measured in octets, including the Object Header and payload.</t>

          <t>Object payload: Following the IOAM Capabilities Object Header is the IOAM Capabilities Object payload, 
		  which is defined in Sections 3.2.1, 3.2.3, 3.2.4, 3.2.5, and 3.2.6 of <xref target="RFC9359"/>.</t>
        </list></t>
	
    </section> 
	 
	<section title="Examples of the IOAM Query Response">
        
     <t> The format of an IOAM Query Response 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 the IOAM Proof of Transit Capabilities are enabled at the IOAM transit node that received 
	 an IOAM Query Request, the IOAM Query Response is depicted as the following:</t> 
	 
     <figure anchor="Figure_7" title="Example 1 of the IOAM Query Response">
     <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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             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 the IOAM Proof of Transit 
	 Capabilities are enabled at the IOAM transit node that received an IOAM Query Request, the 
	 IOAM Query Response is depicted as the following:</t> 
	 
     <figure anchor="Figure_8" title="Example 2 of the IOAM Query Response">
     <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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             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, 
	 the IOAM Proof of Transit Capabilities, and the IOAM Edge-to-Edge Capabilities are enabled at the IOAM decapsulating 
	 node that received an IOAM Query Request, the IOAM Query Response is depicted as the following:</t> 
	 
     <figure anchor="Figure_9" title="Example 3 of the IOAM Query Response">
     <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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|       Reserved        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             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  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Length            |   Class-Num   |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |         IOAM-E2E-Type         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|TSF|         Reserved          |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ]]></artwork>
     </figure>
        
     <t> When an IOAM Query Response message is received, the length of the message is determined by the Payload Length 
	 field in the IPv6 Header, as specified in <xref target="RFC8200"/>.</t> 
	
    </section> 
  </section> 
   
  <section anchor="code" title="Code Field Processing">

     <t>The Code field in the IOAM Query Response MUST be set to (4) No Matched Namespace-ID if any of the
     following conditions apply:<list style="symbols">
         <t>The IOAM Query Request does not include any Namespace-ID.</t>

         <t>None of the contained list of IOAM Namespace-IDs is recognized.</t>

         <t>None of the contained list of IOAM Namespace-IDs is enabled.</t>
       </list></t>

     <t>The Code field in the IOAM Query Response MUST be set to (5) Exceed the minimum IPv6 MTU if the formatted IOAM 
	 Query Response packet exceeds the minimum IPv6 MTU (i.e., 1280 octets). In this case, all objects MUST be stripped 
	 before forwarding the IOAM Query Response to its destination.</t>

  </section> 

  <section title="IANA Considerations"> 
  <t> This document requests the following actions from IANA:
		  
          <list style="symbols">
          <t> Add the following Codes to the "Type TBD - Query Response" subregistry:
          
		  <list>
          <t> (4) No Matched Namespace-ID</t>
          <t> (5) 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>
          <t> (TBD1) IOAM Query Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD1 -
      IOAM Query Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
		  </list></t>
		  </list>	
		  
          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list>
          <t> (TBD2) IOAM Tracing Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD2 -
      IOAM Tracing Capabilities Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
          <t> (1) Pre-allocated Tracing</t>
		  </list></t>
		  </list>	

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list>
          <t> (TBD3) IOAM Proof of Transit Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD3 -
      IOAM Proof of Transit Capabilities Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
		  </list></t>
		  </list>	

          <list style="symbols">

          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list>
          <t> (TBD4) IOAM Edge-to-Edge Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD4 -
      IOAM Edge-to-Edge Capabilities Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
		  </list></t>
		  </list>	

          <list style="symbols">
          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list>
          <t> (TBD5) IOAM DEX Capabilities Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD5 -
      IOAM DEX Capabilities Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
		  </list></t>
		  </list>

          <list style="symbols">
          <t> Add the following to the "ICMP Extension Object Classes and Class
          Sub-types" registry:
		  
		  <list>
          <t> (TBD6) IOAM End-of-Domain Object</t>
		  </list></t>
		  </list>
		  
          <list style="symbols">
          <t> Add the following C-types to the "Sub-types - Class TBD6 -
      IOAM End-of-Domain Object" subregistry:
          
		  <list>
          <t> (0) Reserved</t>
		  </list></t>
		  </list>
		  
        </t>

      <t>All codes mentioned above are assigned on a First Come First Serve (FCFS) basis with a range of 0-255.</t>
	  
  </section>
  
  <section title="Security Considerations">
  
  <t> Security issues discussed in <xref target="I-D.xbm-intarea-icmp-query"/> and <xref target="RFC9359"/> 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 IPv6 Node IOAM 
  Query functionality. In order to enforce these policies, nodes that support IPv6 Node IOAM Query functionality MUST 
  support the following configuration options:</t>

  <t><list style="symbols">
      <t>Enable/disable IPv6 Node IOAM Query functionality. By default, IPv6 Node IOAM Query 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 the IOAM Query Request messages are permitted.</t>
  </list></t>

  <t>In order to protect local resources, implementations SHOULD rate-limit incoming IOAM Query Request messages.</t>
  
  </section>
  
  <section title="Acknowledgements">
  
  <t> The authors would like to acknowledge Eric Vyncke, Erik Kline, and Bob Hinden for their valuable suggestions.</t>
  <t> The authors would like to acknowledge Chongfeng Xie, Zhenqiang Li, David Lamparter, and Daniel King for their 
  review and helpful comments.</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.9359"?>
     <?rfc include="reference.RFC.9486"?>
     <?rfc include="reference.RFC.4884"?>
     <?rfc include="reference.I-D.xbm-intarea-icmp-query"?>
    </references>

	<references title="Informative References">
     <?rfc include="reference.RFC.9197"?>
     <?rfc include="reference.RFC.9326"?>
     <?rfc include="reference.RFC.8200"?>
     <?rfc include="reference.RFC.6437"?>
     <?rfc include="reference.RFC.4302"?>
     <?rfc include="reference.RFC.4303"?>
    </references>
	
</back>
</rfc>

