<?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.23 (Ruby 3.2.3) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bonica-intarea-icmp-exten-hdr-len-03" category="std" consensus="true" updates="RFC 4884" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="icmp-eh-len">ICMP Extension Header Length Field</title>
    <seriesInfo name="Internet-Draft" value="draft-bonica-intarea-icmp-exten-hdr-len-03"/>
    <author initials="R." surname="Bonica" fullname="Ron Bonica">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>rbonica@juniper.net</email>
      </address>
    </author>
    <author initials="X." surname="He" fullname="Xiaoming He">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>hexm4@chinatelecom.cn</email>
      </address>
    </author>
    <author initials="X." surname="Min" fullname="Xiao Min">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>xiao.min2@zte.com.cn</email>
      </address>
    </author>
    <author initials="T." surname="Mizrahi" fullname="Tal Mizrahi">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>Israel</country>
        </postal>
        <email>tal.mizrahi.phd@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="23"/>
    <area>Internet</area>
    <workgroup>INTAREA Group</workgroup>
    <keyword>ICMP</keyword>
    <abstract>
      <?line 47?>

<t>The ICMP Extension Structure does not have a length field. Therefore, unless the length of the Extension Structure can be inferred from other data in the ICMP message, the Extension Structure must be the last item in the ICMP message.</t>
      <t>This document defines a length field for the ICMP Extension Structure. When length information is provided, receivers can use it to parse ICMP messages. Specifically, receivers can use length information to determine the offset at which the item after the ICMP Extension Structure begins.</t>
    </abstract>
  </front>
  <middle>
    <?line 54?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The ICMP Extension Structure <xref target="RFC4884"/> does not have a length field. Therefore, unless the length of the Extension Structure can be inferred from other data in the ICMP message, the Extension Structure must be the last item in the ICMP message.</t>
      <t>This document defines a length field for the ICMP Extension Structure. When length information is provided, receivers can use it to parse ICMP messages. Specifically, receivers can use length information to determine the offset at which the item after the ICMP Extension Structure begins.</t>
      <t>New implementations <bcp14>SHOULD</bcp14> aways include the length field, even though it is not needed when the ICMP message ends with an ICMP Extension Structure.</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 BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="the-icmp-extension-structure">
      <name>The ICMP Extension Structure</name>
      <t><xref target="box-fig"/>  depicts the ICMP Extension Header.</t>
      <figure anchor="box-fig">
        <name>ICMP Extension Header</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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |Version|  Rsvd |     Length    |           Checksum            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>Version: 4 bits</t>
      <ul spacing="normal">
        <li>
          <t>Defined in <xref target="RFC4884"/></t>
        </li>
      </ul>
      <t>Reserved (Rsvd): 4 bits</t>
      <ul spacing="normal">
        <li>
          <t>Defined in <xref target="RFC4884"/></t>
        </li>
      </ul>
      <t>Length: 8 bits</t>
      <ul spacing="normal">
        <li>
          <t>This field represents the length of the ICMP Extension Structure, including all options and optional padding, but excluding the ICMP Extension Header. The length is measured in 4-byte words. Legacy implementations set this field to 0.</t>
        </li>
      </ul>
      <t>Checksum: 16 bits</t>
      <ul spacing="normal">
        <li>
          <t>Defined in <xref target="RFC4884"/></t>
        </li>
      </ul>
      <t>The ICMP Extension Structure <bcp14>MUST</bcp14> be zero-padded so that it ends on a 4-byte boundary.</t>
    </section>
    <section anchor="backwards-compatibility">
      <name>Backwards Compatibility</name>
      <t>Legacy implementations set the length field to 0. When the length field is set to 0, it conveys no information and cannot be used to parse the ICMP packet.</t>
      <t>In these cases, one of the following statements <bcp14>MUST</bcp14> be true:</t>
      <ul spacing="normal">
        <li>
          <t>The ICMP Extension Structure is the final item in the ICMP packet.</t>
        </li>
        <li>
          <t>The length of the ICMP Extension Structure can be inferred from other fields in the packet.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requires no IANA actions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document introduces no security vulnerabilities.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Tom Herbert and Michael Welzl for their review and helpful suggestion.</t>
    </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="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>
  </back>
  <!-- ##markdown-source:
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
edmvcjDVgHY2Z12T/Qn5akKvlxAAAA==

-->

</rfc>
