<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jags-intarea-icmp-ext-underlay-info-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.2 -->
  <front>
    <title abbrev="ICMP extension to include underlay information">ICMP extension to include underlay information</title>
    <seriesInfo name="Internet-Draft" value="draft-jags-intarea-icmp-ext-underlay-info-01"/>
    <author initials="J." surname="Rajamanickam" fullname="Jaganbabu Rajamanickam" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>jrajaman@cisco.com</email>
      </address>
    </author>


    <author initials="D." surname="Dukes" fullname="Darren Dukes">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>ddukes@cisco.com</email>
      </address>
    </author>

    <author initials="M." surname="Sankaranarayanan" fullname="Madhan Sankaranarayanan">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>madsanka@cisco.com</email>
      </address>
    </author>


    <date year="2025"/>
    <area>Internet</area>
    <workgroup>Internet Area Working Group</workgroup>
    <keyword>ICMP</keyword>
    <keyword>Underlay Information</keyword>
    <abstract>
      <?line 45?>

<t> Network operators operating overlay networks require the ability to identify hops in an underlay network when traceroute in the overlay. This document defines an ICMP Error extension message to carry the underlay error information to the overlay network endpoint. 
</t>


    </abstract>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>

      <t> The mechanism allowing ICMP messages to carry additional information is <xref target="RFC4884"/>. ICMP message extensions, describing the mechanisms for extending ICMP messages to carry additional information about the system where the error occurred are defined in <xref target="RFC5837"/>, <xref target="RFC8335"/> and <xref target="RFC8883"/>. These messages are transmitted to the source node to provide deeper insight into the error in relation to the node where it occurred.
      </t>
      <t> Network operators who administer and overlay and underlay network, such as those with VPN segmentation within their network and an SRv6 core connecting them, find it particularly useful to have ICMP underlay information transmitted to source nodes for the purpose of using traceroute.  This ICMP underlay information provides details about errors and failures in the underlay network.
      </t>
      <t> The underlay error information described in this document satisfy the need of these network operators.
      </t>


    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="uio-obj">
      <name>Underlay Information Object</name>
      <t> This section defines a new ICMP extension object called Underlay Information Object (UIO) that is encoded as part of ICMP extension message. A new Class-Num value TBA (To Be Assigned) is assigned to identify the UIO. As per <xref target="RFC4884"/>, this object MAY be appended to one of the following ICMP messages: </t>
      <ul empty="true" spacing="normal">
        <li>
          <t>ICMPv4 Time Exceeded</t>
        </li>
        <li>
          <t>ICMPv4 Destination Unreachable</t>
        </li>
        <li>
          <t>ICMPv4 Parameter Problem</t>
        </li>
        <li>
          <t>ICMPv6 Time Exceeded</t>
        </li>
        <li>
          <t>ICMPv6 Destination Unreachable</t>
        </li>
      </ul>


      <section anchor="uio-obj-format">
        <name>UIO Object Format</name>
          <t> This section described the UIO object format. </t>

        <figure anchor="uio-format-fig">
          <name>Underlay Information Object Format</name>
          <artwork><![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=TBA |   C-Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~        Object-Payload (Other ICMP Extension Objects...)       ~
~                                                               ~ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
]]></artwork>
        </figure>

        <t>UIO ICMP extension object contains the following fields:</t>

        <t> Length: 16 bits </t>
        <ul empty="true" spacing="normal">
          <li>
            <t>Length of the object, measured in octets, including UIO ICMP extension object header and object payload</t>
          </li>
        </ul>

        <t> Class-Num: 8 bits </t>
        <ul empty="true" spacing="normal">
          <li>
            <t>Identifies object class. In the case of UIO, a new value TBA will be assigned from IANA "ICMP Extension Object Classes and Class Sub-types" registry. This object could co-exist with the other ICMP extension objects</t>
          </li>
        </ul>

        <t> C-Type: 8 bits </t>
        <ul empty="true" spacing="normal">
          <li>
            <t>Identifies object sub-type. This value MUST be transmitted as zeros and ignored upon receipt.</t>
          </li>
        </ul>

        <t> Object-Payload: Variable Length </t>
        <ul empty="true" spacing="normal">
          <li>
            <t>UIO Object payload contains one or more other ICMP Extension Objects that are related to the underlay nodes. </t>
          </li>
        </ul>

        <t> This ICMP extension object acts as an envelope to carry other ICMP extension objects related to the underlay. Primarily, the UIO ICMP extension object is encoded in the ICMP extension message by the underlay head-end when it receives an ICMP error message from one of its intermediate nodes. </t>

        <t> This UIO ICMP extension object can encapsulate one or more relevant ICMP extension objects that are related to the underlay node. When the underlay head-end encodes its ICMP extension object, the first object MUST contain the ICMP extension object that carries IP address or the hostname of the node where the initial ICMP error was generated. The ICMP extension objects encoded within the UIO ICMP extension objects can belong to any address family, irrespective of the address family of the source node that decapsulates the UIO ICMP extension objects, as opposed to what is stated in <xref target="RFC5837"/> Section 4.2. </t>

        <t> When the UIO is encoded, the total length of the ICMP message, including extensions, MUST NOT exceed the minimum reassembly buffer size. </t>

        <t> If the node decoding the ICMP extension header does not recognize the UIO ICMP extension message, it SHOULD ignore this message and continue processing the other messages.</t>



      </section>

      <section anchor="uio-encode-procedure">
      <name>Underlay Information Object Encoding Process</name>

         <t> An underlay head-end node generates an ICMP error directed to a host in the overlay network. The specifics of the ICMP error content are beyond the scope of this document. The error is triggered by the receipt of an underlay error message from an IPv4/IPv6 interface. The encoding and processing of the underlay error are also outside the scope of this document. </t>

         <t> The underlay head-end appends a UIO ICMP extension object to the ICMP error it generates to the overlay host. </t>

      </section>
    </section>








    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>In most of the cases the overlay and underlay networks are owned by different operators, so it may not be advisable to permit the transmission of the underlay information to an arbitrary recipient. The inclusion of this information should be configurable and must default to being disabled. An implementation should decide which objects can be appended as part of the UIO ICMP extension message.</t>

      <t>The extensions defined in this document are intended for use in administrative debugging and troubleshooting. They provide additional information in ICMP responses. These mechanisms are not designed for use in non-debugging applications.</t>
     
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests that IANA allocate a value (TBA - To Be Assigned) for the UIO ICMP extension object class value from the "ICMP Extension Object Classes and Class Sub-types" registry to indicate the presence of the UIO ICMP extension class, referred to as TBA above.</t>
    </section>


    <section anchor="Appendix">
      <name>Appendix</name>

      <section anchor="uio-examples">
       <name>UIO ICMP Extension Message Examples</name>
       <t> This section lists the UIO example encoding format </t>

        <section anchor="uio-carrying-ipv6-data">
         <name>UIO carrying IPv6 information to the IPv4 source</name>

         <t> In this example, a host receives an IPv4 ICMPv4 Time Exceeded error message in response to an ICMP Echo Request as part of the traceroute application. It also contains an UIO ICMP extension object with IPv6 interface address information as follows. </t>


        <figure anchor="uio-ipv6-info-fig">
          <name> ICMPv4 packet carrying UIO ICMP extension </name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                       IPv4 Header                             ~
~                                                               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type=11    |    Code=0     |           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Unused     |  Length=32    |            Unused             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                 Part of Original Datagram (128 bytes)         ~
~                                                               ~ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
| Ver=2 |         Unused         |         Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Length=28           | Class-Num=TBA |   C-Type=0    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Length=24           | Class-Num=2   |   C-Type=4    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI=2               |            Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                 IPv6 Address (Original Error Device)          ~
~                                                               ~ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
]]></artwork>
        </figure>

       
       <t> The traceroute application displays the IPv6 Address in the UIO to allow an administrator to trace the underlay path of the route being traced.</t>

       </section>

      <section anchor="uio-carrying-ipv4-data">
        <name>UIO carrying IPv4 information to the IPv6 source</name>
        <t> In this example, a host receives an IPv6 ICMPv6 Time Exceeded error message in response to an ICMP Echo Request as part of the traceroute application. It contains a UIO ICMP extension object with IPv4 interface address information as follows. </t>

        <figure anchor="uio-ipv4-info-fig">
          <name>UIO carrying IPv4 information to the IPv6 source</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                       IPv6 Header                             ~
~                                                               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type=3     |    Code=0     |           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Length=32    |                    Unused                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                 Part of Original Datagram (128 bytes)         ~
~                                                               ~ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
| Ver=2 |         Unused         |         Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Length=16           | Class-Num=TBA |   C-Type=0    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Length=12           | Class-Num=2   |   C-Type=4    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI=1               |            Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 IPv4 Address (Original Error Device)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
]]></artwork>
        </figure>


       <t> The traceroute application displays the IPv4 Address in the UIO to allow an administrator to trace the underlay path of the route being traced.</t>

       </section>
      </section>
    </section>



  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC4884">
        <front>
          <title>Extended ICMP to Support Multi-Part Messages</title>
          <author fullname="R. Bonica" initials="R." surname="Bonica"/>
          <author fullname="D. Gan" initials="D." surname="Gan"/>
          <author fullname="D. Tappan" initials="D." surname="Tappan"/>
          <author fullname="C. Pignataro" initials="C." surname="Pignataro"/>
          <date month="April" year="2007"/>
          <abstract>
            <t>This document redefines selected ICMP messages to support multi-part operation. A multi-part ICMP message carries all of the information that ICMP messages carried previously, as well as additional information that applications may require.</t>
            <t>Multi-part messages are supported by an ICMP extension structure. The extension structure is situated at the end of the ICMP message. It includes an extension header followed by one or more extension objects. Each extension object contains an object header and object payload. All object headers share a common format.</t>
            <t>This document further redefines the above mentioned ICMP messages by specifying a length attribute. All of the currently defined ICMP messages to which an extension structure can be appended include an "original datagram" field. The "original datagram" field contains the initial octets of the datagram that elicited the ICMP error message. Although the original datagram field is of variable length, the ICMP message does not include a field that specifies its length. Therefore, in order to facilitate message parsing, this document allocates eight previously reserved bits to reflect the length of the "original datagram" field.</t>
            <t>The proposed modifications change the requirements for ICMP compliance. The impact of these changes on compliant implementations is discussed, and new requirements for future implementations are presented.</t>
            <t>This memo updates RFC 792 and RFC 4443. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4884"/>
        <seriesInfo name="DOI" value="10.17487/RFC4884"/>
      </reference>

      <reference anchor="RFC5837">
        <front>
          <title>Extending ICMP for Interface and Next-Hop Identification</title>
          <author fullname="A. Atlas" initials="A." role="editor" surname="Atlas"/>
          <author fullname="R. Bonica" initials="R." role="editor" surname="Bonica"/>
          <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
          <author fullname="N. Shen" initials="N." surname="Shen"/>
          <author fullname="JR. Rivers" initials="JR." surname="Rivers"/>
          <date month="April" year="2010"/>
          <abstract>
            <t>This memo defines a data structure that can be appended to selected ICMP messages. The ICMP extension defined herein can be used to identify any combination of the following: the IP interface upon which a datagram arrived, the sub-IP component of an IP interface upon which a datagram arrived, the IP interface through which the datagram would have been forwarded had it been forwardable, and the IP next hop to which the datagram would have been forwarded.</t>
            <t>Devices can use this ICMP extension to identify interfaces and their components by any combination of the following: ifIndex, IPv4 address, IPv6 address, name, and MTU. ICMP-aware devices can use these extensions to identify both numbered and unnumbered interfaces. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5837"/>
        <seriesInfo name="DOI" value="10.17487/RFC5837"/>
      </reference>

      <reference anchor="RFC8335">
        <front>
          <title>PROBE: A Utility for Probing Interfaces</title>
          <author fullname="Ron Bonica" initials="R." surname="Bonica"/>
          <author fullname="Reji Thomas" initials="R." surname="Thomas"/>
          <author fullname="Jen Linkova" initials="J." surname="Linkova"/>
          <author fullname="Chris Lenart" initials="C." surname="Lenart"/>
          <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"/>
          <date month="February" year="2018"/>
          <abstract>
            <t>This document describes a network diagnostic tool called PROBE.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8335"/>
        <seriesInfo name="DOI" value="10.17487/RFC8335"/>
      </reference>


      <reference anchor="RFC8883">
        <front>
          <title>ICMPv6 Errors for Discarding Packets Due to Processing Limits</title>
          <author fullname="Tom Herbert" initials="T." surname="Herbert"/>
          <date month="September" year="2020"/>
          <abstract>
            <t>This document specification defines several new ICMPv6 errors that can be sent by a node that discards packets because it is unable to process the protocol headers.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8883"/>
        <seriesInfo name="DOI" value="10.17487/RFC8883"/>
      </reference>


      <reference anchor="IANA.address-family-numbers" target="http://www.iana.org/assignments/address-family-numbers">
        <front>
          <title>Address Family Numbers</title>
          <author>
            <organization>IANA</organization>
          </author>
        </front>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 191?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document derives text heavily from <xref target="RFC4884"/> and <xref target="RFC5837"/>.</t>
    </section>

    <section numbered="false" anchor="contributors" toc="default">
      <name>Contributors</name>
      <t>The following people have substantially contributed to this document:</t>

          <figure anchor="contrib">
     <artwork name="" type="" align="left" alt=""><![CDATA[

Tamilselvan Murugan
Cisco Systems, Inc.
Email: tammurug@cisco.com


Dhilip Sekar
Cisco Systems, Inc.
Email: dhsekar@cisco.com


    ]]></artwork>
      </figure>

    </section>

  </back>
</rfc>
