<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     docName="draft-jags-intarea-icmp-ext-underlay-info-04"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     version="3">

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="ICMP Underlay Info Extension">
      ICMP extension to include underlay information
    </title>

    <seriesInfo name="Internet-Draft"
                value="draft-jags-intarea-icmp-ext-underlay-info-04"/>

    <author fullname="Jaganbabu Rajamanickam" initials="J."
            surname="Rajamanickam" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>jrajaman@cisco.com</email>
      </address>
    </author>

    <author fullname="Darren Dukes" initials="D."
            surname="Dukes">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>ddukes@cisco.com</email>
      </address>
    </author>

    <author fullname="Madhan Sankaranarayanan" initials="M."
            surname="Sankaranarayanan" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>madsanka@cisco.com</email>
      </address>
    </author>

    <author initials="R." surname="Bonica" fullname="Ron Bonica">
      <organization>HPE</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>ronald.bonica@hpe.com</email>
      </address>
    </author>

    <date year="2026" month="February" day="24"/>

    <area>Internet</area>
    <workgroup>Internet Area Working Group</workgroup>

    <keyword>ICMP</keyword>
    <keyword>underlay</keyword>
    <keyword>overlay</keyword>
    <keyword>traceroute</keyword>
    <keyword>extension</keyword>

    <abstract>
      <t>
        Network operators managing overlay networks require visibility into
        underlay network hops during traceroute operations from overlay
        endpoints. This document defines an ICMP extension object, the
        Underlay Information Object (UIO), which allows underlay head-end
        nodes to encapsulate underlay error information within ICMP error
        messages. This mechanism provides overlay operators with crucial
        visibility into underlay network paths for troubleshooting.
      </t>
    </abstract>
  </front>

  <!-- ***** MIDDLE MATTER ***** -->

  <middle>

    <!-- Section 1: Introduction -->
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
        The mechanism for ICMP messages to carry additional information is
        defined in <xref target="RFC4884"/>. ICMP message extensions that
        enable ICMP messages to carry additional information about the
        system where an error occurred are defined in
        <xref target="RFC5837"/>, <xref target="RFC8335"/>, and
        <xref target="RFC8883"/>. These extensions transmit enhanced
        diagnostic information to the source node.
      </t>
      <t>
        Network operators who manage both overlay and underlay networks,
        such as those operating VPN segments connected through an SRv6 core
        network, require the ability to trace paths through the underlay
        infrastructure. Currently, when performing traceroute operations
        from an overlay endpoint, operators lack visibility into the
        underlay path and cannot identify the specific underlay node where
        a failure occurred. For instance, imagine a VPN service (overlay)
        running over an SRv6 network (underlay). If a packet gets dropped
        within the SRv6 network, the VPN operator currently has no direct
        way to pinpoint the exact underlay node causing the issue.
      </t>
      <t>
        The Underlay Information Object (UIO) defined in this document
        addresses this operational requirement by enabling underlay head-end
        nodes to include underlay-specific diagnostic information in ICMP
        error messages sent to overlay endpoints, thereby providing crucial
        visibility for troubleshooting.
      </t>

      <!-- Section 1.1: ICMP Error Message Origination and UIO -->
      <section anchor="icmp-error-origination" numbered="true" toc="default">
        <name>ICMP Error Message Origination and UIO</name>
        <t>
          The mechanism described in this document, where an underlay head-end
          node encapsulates underlay error information into a new ICMP error
          message destined for an overlay endpoint, deviates from existing ICMP
          error message origination rules.  Specifically, <xref target="RFC4443"/>,
          Section 2.4, Rule (e.1) states that "An ICMPv6 error message MUST NOT
          be originated as a result of receiving the following: (e.1) An ICMPv6
          error message."  A similar restriction exists for ICMPv4 in <xref target="RFC792"/>.
        </t>
        <t>
          This document defines a specific exception to this rule for the
          purpose of the Underlay Information Object (UIO).  The UIO mechanism
          is designed to provide critical diagnostic visibility into underlay
          network failures for overlay operators, a function not adequately
          served by existing ICMP mechanisms.  The underlay head-end node acts
          as an intermediary, translating an underlay error into a new error
          message containing encapsulated UIO information for the overlay,
          rather than simply forwarding the original error message.  This
          controlled origination of a new ICMP error message, triggered by an
          underlay ICMP error message, is essential for the UIO's intended
          troubleshooting workflow.  Therefore, this document updates
          <xref target="RFC4443"/> to accommodate this specific behavior.
        </t>
        <t>
          However, permitting this exception introduces new challenges that
          must be carefully addressed.  Because UIO creates an intentional
          pathway for underlay diagnostic information to cross into the
          overlay domain, it raises the following concerns:
        </t>
        <ul>
          <li>
            Information Leakage: Unrestricted encapsulation could expose
            underlay topology, routing state, or configuration details
            beyond what is necessary for troubleshooting.
          </li>
          <li>
            Amplification and Abuse: Without constraints, a small probe
            could trigger disproportionately large ICMP responses containing
            UIO, enabling amplification attacks or reconnaissance of
            underlay infrastructure.
          </li>
          <li>
            Recursive Error Loops: An underlay head-end node generating a
            new ICMP error in response to a received ICMP error that itself
            contains a UIO could create infinite error loops.
          </li>
          <li>
            Content Integrity: Aggregating information from multiple
            underlay sources into a single UIO could produce misleading
            diagnostic data.
          </li>
        </ul>
        <t>
          To mitigate these risks, this document defines strict content
          restrictions (<xref target="content-restrictions"/>) that
          constrain which ICMP message types and extension objects may be
          encapsulated within a UIO, enforce message size limits, prevent
          loops and recursion, and ensure each UIO originates from a single
          underlay source.  These restrictions are essential to making the
          error origination exception safe for deployment.
        </t>
      </section>
    </section>

    <!-- Section 2: Conventions and Definitions -->
    <section anchor="conventions" numbered="true" toc="default">
      <name>Conventions and Definitions</name>
      <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>
      <t>This document uses the following terms:</t>
      <dl>
        <dt>Overlay Network:</dt>
        <dd>
          A virtual network built on top of an existing underlying network
          infrastructure, often providing services like VPNs or tunnels.
        </dd>
        <dt>Underlay Network:</dt>
        <dd>
          The physical or logical network infrastructure over which an
          overlay network operates, responsible for forwarding packets
          between overlay endpoints.
        </dd>
        <dt>Overlay Endpoint:</dt>
        <dd>
          A device or system that terminates an overlay network segment and
          originates or receives traffic for the overlay.
        </dd>
        <dt>Underlay Head-End Node:</dt>
        <dd>
          The node in the underlay network responsible for encapsulating
          overlay traffic and often the first point of contact for an
          overlay packet entering the underlay.
        </dd>
      </dl>
    </section>

    <!-- Section 3: Underlay Information Object -->
    <section anchor="uio" numbered="true" toc="default">
      <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>
        <li>ICMPv4 Time Exceeded</li>
        <li>ICMPv4 Destination Unreachable</li>
        <li>ICMPv4 Parameter Problem</li>
        <li>ICMPv6 Time Exceeded</li>
        <li>ICMPv6 Destination Unreachable</li>
      </ul>

      <!-- Section 3.1: UIO Object Format -->
      <section anchor="uio-format" numbered="true" toc="default">
        <name>UIO Object Format</name>
        <t>
          The UIO ICMP extension object has the following format:
        </t>
        <figure anchor="fig-uio-format">
          <name>Underlay Information Object Format</name>
          <artwork type="ascii-art"><![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>

        <dl>
          <dt>Length (16 bits):</dt>
          <dd>
            The length of this object, measured in octets, including the
            object header and object payload. The length MUST be a multiple
            of 4 octets and MUST be at least 8 octets.
          </dd>
          <dt>Class-Num (8 bits):</dt>
          <dd>
            The ICMP extension object class number that identifies this as
            a UIO object. IANA is requested to assign a value from the
            "ICMP Extension Object Classes and Class Sub-types" registry
            (see <xref target="iana-considerations"/>).
          </dd>
          <dt>C-Type (8 bits):</dt>
          <dd>
            The object sub-type. This document defines C-Type value 0.
            Additional C-Type values may be defined in future documents.
            Implementations MUST set this field to 0 and SHOULD ignore the
            value upon receipt.
          </dd>
          <dt>Object-Payload (variable length):</dt>
          <dd>
            Contains one or more ICMP Extension Objects that provide
            information about underlay nodes. The payload MUST contain at
            least one ICMP extension object. Each encapsulated ICMP
            extension object MUST be formatted according to
            <xref target="RFC4884"/> and the specifications for that
            particular object class.
          </dd>
        </dl>

        <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>
          If the node decoding the ICMP extension header does not recognize
          the UIO ICMP extension object, it SHOULD ignore this object and
          continue processing the other objects.
        </t>
      </section>

      <!-- Section 3.2: UIO Encoding Process -->
      <section anchor="uio-encoding" numbered="true" toc="default">
        <name>Underlay Information Object Encoding Process</name>
        <t>
          When an underlay head-end node receives an ICMP error message from
          an underlay node and needs to forward information about this error
          to an overlay endpoint, it follows this process:
        </t>
        <ol>
          <li>
            The underlay head-end node constructs an ICMP error message
            destined for the overlay endpoint.
          </li>
          <li>
            The node appends a UIO ICMP extension object to this ICMP error
            message according to the procedures defined in
            <xref target="RFC4884"/>.
          </li>
          <li>
            Within the UIO object payload, the node includes one or more
            ICMP extension objects that carry information about the underlay
            node where the original error occurred.
          </li>
          <li>
            The first ICMP extension object within the UIO payload MUST
            contain addressing information (e.g., using the Interface
            Information Object defined in <xref target="RFC5837"/>) that
            identifies the underlay node that generated the original error.
            This ensures that the most critical diagnostic information for
            pinpointing the failure source is immediately available.
          </li>
          <li>
            Additional ICMP extension objects MAY be included to provide
            supplementary diagnostic information about the underlay path.
          </li>
          <li>
            The encapsulated ICMP extension objects within the UIO may
            belong to any address family, regardless of the address family
            used between the underlay head-end and the overlay endpoint.
          </li>
          <li>
            The total length of the ICMP message, including all extensions,
            MUST NOT exceed 576 octets for IPv4 or 1280 octets for IPv6
            (the minimum reassembly buffer sizes defined in
            <xref target="RFC791"/> and <xref target="RFC8200"/>,
            respectively).
          </li>
        </ol>
        <t>
          Implementations SHOULD provide configuration options to control
          which underlay information is included in UIO objects, considering
          security and privacy implications discussed in
          <xref target="security-considerations"/>.
        </t>
      </section>

      <!-- Section 3.3: Content Restrictions and Filtering -->
      <section anchor="content-restrictions" numbered="true" toc="default">
        <name>Content Restrictions and Filtering</name>
        <t>
          The Underlay Information Object crosses administrative domain
          boundaries between overlay and underlay networks. To prevent
          confusion, information leakage, and potential abuse, strict
          restrictions apply to the content that can be encapsulated
          within a UIO.
        </t>

        <!-- Section 3.3.1: Permitted ICMP Message Types -->
        <section anchor="permitted-icmp-types" numbered="true" toc="default">
          <name>Permitted ICMP Message Types</name>
          <t>
            An underlay head-end node MUST only encapsulate ICMP error
            messages that indicate packet forwarding failures in the
            underlay network.
          </t>
          <t>
            The following ICMP message types MAY be encapsulated:
          </t>
          <ul>
            <li>ICMPv4 Type 11 (Time Exceeded)</li>
            <li>ICMPv4 Type 3 (Destination Unreachable)</li>
            <li>ICMPv6 Type 1 (Destination Unreachable)</li>
            <li>ICMPv6 Type 2 (Packet Too Big)</li>
            <li>ICMPv6 Type 3 (Time Exceeded)</li>
          </ul>
          <t>
            Other ICMP messages MUST NOT be included under UIO envelope.
            The overlay host that receives the UIO messages other than the
            listed above MUST be dropped.
          </t>
        </section>

        <!-- Section 3.3.2: Permitted Extension Objects -->
        <section anchor="permitted-ext-objects" numbered="true" toc="default">
          <name>Permitted Extension Objects</name>
          <t>
            The UIO object payload SHOULD contain only ICMP extension
            objects that provide diagnostic information about the underlay
            node that generated the original ICMP error message.
          </t>
          <t>
            The following extension object classes are RECOMMENDED for
            inclusion:
          </t>
          <ul>
            <li>Interface Information Object (Class-Num 2)
              <xref target="RFC5837"/></li>
            <li>Node Identification Object (Class-Num 5)
              <xref target="I-D.ietf-intarea-extended-icmp-nodeid"/></li>
            <li>MPLS Label Stack Object (Class-Num 1)
              <xref target="RFC4950"/></li>
          </ul>
          <t>
            Future IETF standards-track ICMP extension objects with
            diagnostic purpose MAY be included, subject to the
            restrictions below.
          </t>
          <t>
            Other ICMP extension objects MUST NOT be included under UIO
            envelope. The overlay host that receives the UIO messages other
            than the listed above MUST be dropped.
          </t>
        </section>

        <!-- Section 3.3.3: Size Constraints -->
        <section anchor="size-constraints" numbered="true" toc="default">
          <name>Size Constraints</name>
          <t>
            The total size of an ICMP message containing a UIO object MUST
            NOT exceed the minimum reassembly buffer size for the IP
            version being used:
          </t>
          <ul>
            <li>576 octets for IPv4 <xref target="RFC791"/></li>
            <li>1280 octets for IPv6 <xref target="RFC8200"/></li>
          </ul>
          <t>
            To ensure sufficient space for the ICMP header, original packet
            excerpt (128 octets as per <xref target="RFC4884"/>), and
            potential additional extension objects outside the UIO,
            implementations SHOULD limit the UIO object payload to a
            maximum of 512 octets.
          </t>
          <t>
            If the underlay ICMP error message contains extension objects
            that would cause the UIO payload to exceed this limit, the
            underlay head-end node SHOULD:
          </t>
          <ol>
            <li>
              Include the most critical diagnostic information first (per
              <xref target="uio-encoding"/>, the Node Identification
              Object SHOULD be first)
            </li>
            <li>
              Truncate or omit less critical extension objects
            </li>
            <li>
              NOT fragment the ICMP message
            </li>
          </ol>
        </section>

        <!-- Section 3.3.4: Loop and Recursion Prevention -->
        <section anchor="loop-prevention" numbered="true" toc="default">
          <name>Loop and Recursion Prevention</name>
          <t>
            An underlay head-end node MUST NOT generate an ICMP error
            message in response to receiving an ICMP error message that
            contains a UIO object in its extension structure.
          </t>
          <t>
            This applies regardless of whether the underlay head-end node
            would normally generate an error (e.g., due to TTL expiration,
            routing failure, etc.). The packet MUST be silently discarded.
          </t>
          <t>
            Additionally, as specified in
            <xref target="permitted-ext-objects"/>, nested UIO objects
            (a UIO containing another UIO in its payload) MUST NOT be
            created.
          </t>
        </section>

        <!-- Section 3.3.5: Single Source Principle -->
        <section anchor="single-source" numbered="true" toc="default">
          <name>Single Source Principle</name>
          <t>
            Each UIO object MUST contain ICMP extension objects from
            exactly one underlay node (the node that generated the original
            ICMP error message received by the underlay head-end).
          </t>
          <t>
            An underlay head-end node MUST NOT aggregate ICMP extension
            objects from multiple underlay nodes into a single UIO object,
            even if multiple errors were encountered for related packets.
          </t>
          <t>
            If the underlay head-end needs to communicate errors from
            multiple underlay nodes, it MUST generate separate ICMP
            messages, each with its own UIO object.
          </t>
        </section>
      </section>
    </section>

    <!-- Section 4: Security Considerations -->
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        The UIO extension introduces several security considerations that
        implementations and operators must address:
      </t>

      <section anchor="info-disclosure" numbered="true" toc="default">
        <name>Information Disclosure</name>
        <t>
          The UIO extension reveals information about the underlay network
          topology and addressing to overlay endpoints. In many deployments,
          the overlay and underlay networks are operated by different
          administrative entities, and underlay topology information may be
          considered sensitive.
        </t>
        <t>
          Implementations MUST provide configuration options to control the
          generation of UIO extensions. The default configuration MUST
          disable UIO generation. Operators SHOULD enable UIO only for
          authenticated and authorized overlay endpoints or networks. The
          specific mechanisms for such authentication and authorization are
          outside the scope of this document but are crucial for secure
          deployment.
        </t>
      </section>

      <section anchor="privacy" numbered="true" toc="default">
        <name>Privacy Considerations</name>
        <t>
          Underlay information may reveal details about network architecture,
          capacity, and routing that could be exploited for reconnaissance
          or targeted attacks. Operators SHOULD carefully consider which
          underlay information to expose through UIO extensions.
        </t>
      </section>

      <section anchor="msg-size" numbered="true" toc="default">
        <name>Message Size and Amplification</name>
        <t>
          Including UIO extensions increases ICMP message size.
          Implementations MUST enforce the message size limits specified in
          <xref target="uio-encoding"/> to prevent fragmentation issues and
          potential amplification attacks.
        </t>
      </section>

      <section anchor="spoofing" numbered="true" toc="default">
        <name>Spoofing and Forgery</name>
        <t>
          As with all ICMP messages, UIO extensions are subject to spoofing
          attacks. The authenticity and integrity of UIO information cannot
          be guaranteed without additional security mechanisms.
          Implementations and operators SHOULD NOT use UIO information for
          security-critical decisions.
        </t>
      </section>

      <section anchor="intended-use" numbered="true" toc="default">
        <name>Intended Use</name>
        <t>
          The extensions defined in this document are intended exclusively
          for administrative debugging and troubleshooting purposes. They
          provide diagnostic information in ICMP responses and are not
          designed for use in production protocols, automation systems, or
          non-debugging applications.
        </t>
      </section>

      <section anchor="rate-limiting" numbered="true" toc="default">
        <name>Rate Limiting</name>
        <t>
          Implementations SHOULD apply rate limiting to the generation of
          ICMP messages containing UIO extensions to prevent resource
          exhaustion and potential denial-of-service conditions.
        </t>
      </section>

      <!-- Section 4.7: Content Filtering and Sanitization -->
      <section anchor="content-filtering" numbered="true" toc="default">
        <name>Content Filtering and Sanitization</name>
        <t>
          The UIO mechanism crosses administrative domain boundaries between
          overlay and underlay networks. This "crossing of streams" creates
          potential security and operational risks if content is not
          carefully filtered.
        </t>

        <!-- Section 4.7.1: Information Disclosure Risks -->
        <section anchor="info-disclosure-risks" numbered="true" toc="default">
          <name>Information Disclosure Risks</name>
          <t>
            Including inappropriate ICMP message types or extension objects
            in UIO could disclose:
          </t>
          <ul>
            <li>Underlay network topology beyond what is necessary for
              troubleshooting</li>
            <li>Underlay routing information (e.g., via redirect
              messages)</li>
            <li>Underlay control plane state (e.g., via router
              discovery)</li>
            <li>Proprietary or sensitive configuration details</li>
          </ul>
          <t>
            The content restrictions in <xref target="content-restrictions"/>
            are designed to limit information disclosure to what is
            necessary for diagnosing forwarding failures. Implementations
            MUST enforce these restrictions as security boundaries.
          </t>
          <t>
            Operators SHOULD NOT enable UIO for destinations outside their
            administrative control without careful consideration of what
            information will be disclosed.
          </t>
        </section>

        <!-- Section 4.7.2: Amplification and Abuse Risks -->
        <section anchor="amplification-abuse" numbered="true" toc="default">
          <name>Amplification and Abuse Risks</name>
          <t>
            Without content and rate restrictions, UIO could be abused for:
          </t>
          <ul>
            <li>Amplification attacks (small query triggers large UIO
              response)</li>
            <li>Reconnaissance of underlay infrastructure</li>
            <li>Resource exhaustion at underlay head-end nodes</li>
            <li>Information gathering about overlay-underlay
              relationships</li>
          </ul>
          <t>
            The following mechanisms mitigate these risks:
          </t>
          <ul>
            <li>Size limits (<xref target="size-constraints"/>) prevent
              excessive amplification</li>
            <li>Content restrictions (<xref target="permitted-icmp-types"/>,
              <xref target="permitted-ext-objects"/>) limit reconnaissance
              value</li>
            <li>Loop prevention (<xref target="loop-prevention"/>) prevents
              recursive amplification</li>
            <li>Rate limiting (<xref target="rate-limiting"/>) prevents
              resource exhaustion</li>
          </ul>
          <t>
            Implementations MUST enforce these protections and MUST NOT
            provide configuration options that bypass them (e.g., removing
            size limits or allowing nested UIO).
          </t>
        </section>
      </section>

      <!-- Section 4.8: Operational Security -->
      <section anchor="operational-security" numbered="true" toc="default">
        <name>Operational Security</name>
        <t>
          Network operators deploying UIO should:
        </t>
        <ul>
          <li>Start with UIO disabled and enable only for specific,
            authorized overlay destinations</li>
          <li>Monitor UIO generation rates and investigate anomalies</li>
          <li>Regularly review what information is being disclosed via
            UIO</li>
          <li>Coordinate with overlay operators to understand their
            diagnostic needs and security requirements</li>
          <li>Document the security implications of UIO in their deployment
            (e.g., what underlay information is visible to overlay
            operators)</li>
        </ul>
        <t>
          In multi-tenant environments, operators should carefully consider
          whether underlay diagnostic information should be visible to all
          tenants or restricted based on tenant relationships and SLAs.
        </t>
      </section>
    </section>

    <!-- Section 5: IANA Considerations -->
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>

      <section anchor="iana-class" numbered="true" toc="default">
        <name>ICMP Extension Object Class</name>
        <t>
          IANA is requested to assign a new value from the "ICMP Extension
          Object Classes and Class Sub-types" registry
          (https://www.iana.org/assignments/icmp-parameters/) for the
          Underlay Information Object (UIO) as follows:
        </t>
        <table>
          <thead>
            <tr>
              <th>Class Value</th>
              <th>Class Name</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>TBA</td>
              <td>Underlay Information Object</td>
              <td>[This RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="iana-ctype" numbered="true" toc="default">
        <name>C-Type Values</name>
        <t>
          IANA is requested to establish a new sub-registry titled "Underlay
          Information Object C-Types" under the "ICMP Extension Object
          Classes and Class Sub-types" registry.
        </t>
        <t>Initial values for this registry are as follows:</t>
        <table>
          <thead>
            <tr>
              <th>C-Type Value</th>
              <th>Description</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>0</td>
              <td>Reserved/Unspecified</td>
              <td>[This RFC]</td>
            </tr>
            <tr>
              <td>1-246</td>
              <td>Unassigned</td>
              <td></td>
            </tr>
            <tr>
              <td>247-255</td>
              <td>Reserved for Private or Experimental Use</td>
              <td>[This RFC]</td>
            </tr>
          </tbody>
        </table>
        <t>
          The registration procedure for values 1-246 is Standards Action or
          IESG Approval as defined in <xref target="RFC8126"/>.
        </t>
      </section>
    </section>

    <!-- Section 6: Operational Considerations -->
    <section anchor="operational" numbered="true" toc="default">
      <name>Operational Considerations</name>

      <section anchor="op-config" numbered="true" toc="default">
        <name>Configuration</name>
        <t>
          Operators SHOULD carefully configure which overlay endpoints or
          networks are authorized to receive UIO information. To effectively
          manage the security and operational aspects of UIO,
          implementations SHOULD provide configuration options, including
          but not limited to:
        </t>
        <ul>
          <li>Enable/disable UIO generation (default: disabled)</li>
          <li>Whitelist of authorized overlay prefixes</li>
          <li>Maximum UIO object payload size</li>
          <li>Rate limiting parameters</li>
        </ul>
      </section>

      <section anchor="op-troubleshooting" numbered="true" toc="default">
        <name>Troubleshooting Workflow</name>
        <t>The intended use case for UIO is as follows:</t>
        <ol>
          <li>
            An overlay operator performs traceroute from an overlay endpoint.
          </li>
          <li>
            The traceroute reveals a failure point in the path.
          </li>
          <li>
            ICMP error messages include UIO extensions with underlay details.
          </li>
          <li>
            The overlay operator uses this information to coordinate with
            the underlay operator for problem resolution.
          </li>
        </ol>
      </section>

      <section anchor="op-interop" numbered="true" toc="default">
        <name>Multi-Vendor Interoperability</name>
        <t>
          Implementations SHOULD be tested for interoperability, particularly
          when overlay and underlay equipment are from different vendors.
        </t>
      </section>
    </section>
  </middle>

  <!-- ***** BACK MATTER ***** -->

  <back>

    <!-- Normative References -->
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC792" target="https://www.rfc-editor.org/info/rfc792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date year="1981" month="September"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC792"/>
        </reference>

        <reference anchor="RFC791" target="https://www.rfc-editor.org/info/rfc791">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date year="1981" month="September"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." surname="Gupta" role="editor"/>
            <date year="2006" month="March"/>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>

        <reference anchor="RFC4950" target="https://www.rfc-editor.org/info/rfc4950">
          <front>
            <title>ICMP Extensions for Multiprotocol Label Switching</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 year="2007" month="August"/>
          </front>
          <seriesInfo name="RFC" value="4950"/>
          <seriesInfo name="DOI" value="10.17487/RFC4950"/>
        </reference>

        <reference anchor="RFC4884" target="https://www.rfc-editor.org/info/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 year="2007" month="April"/>
          </front>
          <seriesInfo name="RFC" value="4884"/>
          <seriesInfo name="DOI" value="10.17487/RFC4884"/>
        </reference>

        <reference anchor="RFC5837" target="https://www.rfc-editor.org/info/rfc5837">
          <front>
            <title>Extending ICMP for Interface and Next-Hop Identification</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas" role="editor"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica" role="editor"/>
            <author fullname="C. Pignataro" initials="C." surname="Pignataro" role="editor"/>
            <author fullname="N. Shen" initials="N." surname="Shen"/>
            <author fullname="JR. Rivers" initials="JR." surname="Rivers"/>
            <date year="2010" month="April"/>
          </front>
          <seriesInfo name="RFC" value="5837"/>
          <seriesInfo name="DOI" value="10.17487/RFC5837"/>
        </reference>

        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date year="2017" month="June"/>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>

        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC8200" target="https://www.rfc-editor.org/info/rfc8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date year="2017" month="July"/>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>

        <reference anchor="RFC8335" target="https://www.rfc-editor.org/info/rfc8335">
          <front>
            <title>PROBE: A Utility for Probing Interfaces</title>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="R. Thomas" initials="R." surname="Thomas"/>
            <author fullname="J. Linkova" initials="J." surname="Linkova"/>
            <author fullname="C. Lenart" initials="C." surname="Lenart"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <date year="2018" month="February"/>
          </front>
          <seriesInfo name="RFC" value="8335"/>
          <seriesInfo name="DOI" value="10.17487/RFC8335"/>
        </reference>

        <reference anchor="RFC8883" target="https://www.rfc-editor.org/info/rfc8883">
          <front>
            <title>ICMPv6 Errors for Discarding Packets Due to Processing Limits</title>
            <author fullname="T. Herbert" initials="T." surname="Herbert"/>
            <date year="2020" month="September"/>
          </front>
          <seriesInfo name="RFC" value="8883"/>
          <seriesInfo name="DOI" value="10.17487/RFC8883"/>
        </reference>

      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="I-D.ietf-intarea-extended-icmp-nodeid"
                   target="https://datatracker.ietf.org/doc/draft-ietf-intarea-extended-icmp-nodeid/">
          <front>
            <title>Extending ICMP for Node Identification</title>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="R. Thomas" initials="R." surname="Thomas"/>
            <author fullname="J. Linkova" initials="J." surname="Linkova"/>
            <author fullname="C. Lenart" initials="C." surname="Lenart"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <date year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-extended-icmp-nodeid"/>
        </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>
            <date/>
          </front>
        </reference>

      </references>
    </references>

    <!-- Appendix -->
    <section anchor="appendix" numbered="true" toc="default">
      <name>Appendix</name>

      <section anchor="uio-examples" numbered="true" toc="default">
        <name>UIO ICMP Extension Message Examples</name>
        <t>This section lists examples of UIO encoding.</t>

        <section anchor="example-ipv6-to-ipv4" numbered="true" toc="default">
          <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 a UIO ICMP
            extension object with IPv6 interface address information as
            follows.
          </t>
          <figure anchor="fig-icmpv4-uio">
            <name>ICMPv4 packet carrying UIO ICMP extension</name>
            <artwork type="ascii-art"><![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="example-ipv4-to-ipv6" numbered="true" toc="default">
          <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="fig-icmpv6-uio">
            <name>UIO carrying IPv4 information to the IPv6 source</name>
            <artwork type="ascii-art"><![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>

    <!-- Acknowledgments -->
    <section anchor="acknowledgments" numbered="false" toc="default">
      <name>Acknowledgments</name>
      <t>
        The authors thank the contributors listed below for their
        substantial input and review.
      </t>
    </section>

    <!-- Contributors -->
    <section anchor="contributors" numbered="false" toc="default">
      <name>Contributors</name>
      <t>
        The following individuals contributed to this document:
      </t>
      <author fullname="Tamilselvan Murugan">
        <organization>Cisco Systems, Inc.</organization>
        <address>
          <email>tammurug@cisco.com</email>
        </address>
      </author>
      <author fullname="Dhilip Sekar">
        <address>
          <email>dhilipsekar1998@gmail.com</email>
        </address>
      </author>
    </section>

  </back>
</rfc>