<?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.29 (Ruby 3.2.3) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-intarea-icmp-exten-hdr-len-01" category="std" consensus="true" updates="RFC 4884" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="icmp-eh-len">ICMP Extension Header Length Field</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-icmp-exten-hdr-len-01"/>
    <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="June" day="18"/>
    <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> always 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>
      <t>Legacy implementation that do not recognize the ICMP Extension Header length field <bcp14>MUST NOT</bcp14>
process ICMP messages in which the ICMP Extension structure may be followed by something else.
This is because they will not be able to parse the message correctly.</t>
    </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. However, it does inherit
security considerations from <xref target="RFC4884"/>.</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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
AAA=

-->

</rfc>
