<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc toc="yes" ?>  
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc rfcedstyle="yes" ?>


<!DOCTYPE rfc
  SYSTEM "rfc2629.dtd" [
          <!ENTITY rfc2119 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
]>
<rfc number="7279" seriesNo="189" category="bcp" submissionType="IETF" consensus="yes"
  ipr="trust200902">

<front>
  <title abbrev='ICMP AUP'>
    An Acceptable Use Policy for New ICMP Types and Codes
  </title>

  <author initials='M.' surname='Shore' fullname='Melinda Shore'>
    <organization>No Mountain Software</organization>
    <address>
      <postal>
        <street>PO Box 16271</street>
        <city>Two Rivers</city>
        <region>AK</region>
        <code>99716</code>
        <country>US</country>
      </postal>
      <phone>+1 907 322 9522</phone>
      <email>melinda.shore@nomountain.net</email>
    </address>
  </author>

  <author initials='C.' surname='Pignataro' fullname='Carlos Pignataro'>
    <organization>Cisco Systems, Inc.</organization>
    <address>
      <postal>
        <street>7200-12 Kit Creek Road</street>
        <city>Research Triangle Park</city>
        <region>NC</region>
        <code>27709</code>
        <country>US</country>
      </postal>
      <email>cpignata@cisco.com</email>
    </address>
  </author>

  <date month="May" year='2014' />

  <area>Operations</area>

<!-- [rfced] Please insert any keywords (beyond those that appear in 
the title) for use on http://www.rfc-editor.org/search.
-->

<keyword>example</keyword>

  <abstract>
    <t>
      In this document we
      provide a basic description of ICMP's role in the IP
      stack and some guidelines for future use.</t>
    <t>
      This document is motivated by concerns about lack of clarity concerning when to add
      new Internet Control Message Protocol (ICMP) types
      and/or codes. These concerns have highlighted a need to describe
      policies for when adding new features to ICMP is
      desirable and when it is not.
    </t>
  </abstract>

</front>

<middle>
  <section title='Introduction'>
    <t>There has been some recent concern expressed about a
      lack of clarity around when new message types
      and codes should be added to ICMP
      (including <xref target='RFC0792'>ICMPv4</xref>
      and <xref target='RFC4443'>ICMPv6</xref>).  We 
      lay out a description of when (and when not) to
      move functionality into ICMP.
<!-- [rfced] For clarity, we suggest updating "description" to "policy".  Please let
us know if this update is acceptable.

Original:
   We lay out a description of
   when (and when not) to move functionality into ICMP.

Suggested:
   We lay out a policy regarding
   when (and when not) to move functionality into ICMP.
-->

</t>

    <t>This document is the result of discussions among ICMP
      experts within the Operations and Management (OPS) area's
      
        IP Diagnostics Technical Interest Group <xref target="DIAGNOSTICS"/> and concerns
      expressed by the OPS area leadership.</t>

    <t>Note that this document does not
      supercede the <xref target='RFC2780'>"IANA Allocation
      Guidelines For Values In the Internet Protocol and
      Related Headers" </xref>, which
      specifies best practices and processes for the
      allocation of values in the IANA registries but does
      not describe the policies to be applied in the
      standards process.

<!-- [rfced] The text indicates that this document does not supercede RFC
2780.  RFC 2780 is BCP 37.  Is this document related?  Should it also be
published as part of BCP 37 (instead of its own BCP number, BCP 189)?

   Note that this document does not supercede the IANA Allocation
   Guidelines for Values in the Internet Protocol and Related Headers,
   RFC 2780 [RFC2780], which specifies best practices and processes for
   the allocation of values in the IANA registries but does not describe
   the policies to be applied in the standards process.
-->

</t>

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119"/>.</t>

  </section>

  <section title='Acceptable Use Policy' anchor='aup'>
    <t>In this document, we describe an acceptable use
      policy for new ICMP message types and codes, and provide
      some background about the policy.</t>

    <t>In summary, any future message
      types added to ICMP should be limited to two broad
      categories:</t>

    <t><list style='numbers'>
        <t>to inform a datagram's originator that a forwarding plane
          anomaly has been encountered downstream.  The datagram originator
          must be able to determine whether or not the datagram was
          discarded by examining the ICMP message.</t>
        <t>to discover and convey dynamic information about a node
        (other than information usually carried in routing protocols), 
        to discover and convey network-specific parameters, 
        and to discover on-link routers and hosts.</t>
    </list></t>
    <t>
  Normally, ICMP SHOULD NOT be used to implement a general-purpose routing
    or network management protocol.
  However, ICMP does have a role to play in conveying dynamic
  information about a network, which would belong in category 2
  above.
    </t>

    <section title='Classification of Existing Message Types'>

      <t>This section provides a rough breakdown of existing message
        types according to the taxonomy described in <xref target='aup' />
        at the time of publication.</t>

<!-- [rfced] Please note that we have capitalized the names to ICMP names to
match what appears on the IANA site.  
-->

      <t>IPv4 forwarding plane anomaly reporting:
      <list>
         <t> <list style='hanging' hangIndent="5">
                  <t hangText='3: '>Destination Unreachable</t>
                  <t hangText='4: '>Source Quench (Deprecated)</t>
                  <t hangText='6: '>Alternate Host Address (Deprecated)</t>
                  <t hangText='11: '>Time Exceeded</t>
                  <t hangText='12: '>Parameter Problem</t>
                  <t hangText='31: '>Datagram Conversion Error (Deprecated)</t>
                  <t hangText='41: '>ICMP messages utilized by experimental
                    mobility protocols such as Seamoby</t>
         </list></t>
      </list></t>

          <t>IPv4 router or host discovery: 
          <list>
              <t> <list style='hanging' hangIndent="5">
                  <t hangText='0:'>Echo Reply</t>
                  <t hangText='5:'>Redirect</t>
                  <t hangText='8:'>Echo</t>
                  <t hangText='9:'>Router Advertisement</t>
                  <t hangText='10:'> Router Solicitation</t>
                  <t hangText='13:'> Timestamp</t>
                  <t hangText='14:'> Timestamp Reply</t>
                  <t hangText='15:'> Information Request (Deprecated)</t>
                  <t hangText='16:'> Information Reply (Deprecated)</t>
                  <t hangText='17:'> Address Mask Request (Deprecated)</t>
                  <t hangText='18:'> Address Mask Reply (Deprecated)</t>
                  <t hangText='30:'> Traceroute (Deprecated)</t>
                  <t hangText='32:'>Mobile Host Redirect (Deprecated)</t>
                  <t hangText='33:'> IPv6 Where-Are-You (Deprecated)</t>
                  <t hangText='34:'> IPv6 I-Am-Here (Deprecated)</t>
                  <t hangText='35:'> Mobile Registration Request (Deprecated)</t>
                  <t hangText='36:'> Mobile Registration Reply (Deprecated)</t>
                  <t hangText='37:'> Domain Name Request (Deprecated)</t>
                  <t hangText='38:'> Domain Name Reply (Deprecated)</t>
                  <t hangText='39:'> SKIP (Deprecated)</t>
                  <t hangText='40:'> Photuris</t>
                  <t hangText='41:'> ICMP messages utilized by experimental
                    mobility protocols such as Seamoby</t>
            </list></t>
<!-- [rfced] Type 41 (ICMP messages utilized by experimental mobility
protocols such as Seamoby) is listed under both IPv4 forwarding plane anomaly
reporting and IPv4 router or host discovery.  Is this correct?

      41:  ICMP messages utilized by experimental mobility protocols,
           such as Seamoby
-->

          </list></t>

          <t>Please note that some ICMP message types were formally deprecated by <xref target="RFC6918" />.</t>

          <t>IPv6 forwarding plane anomaly reporting:
          
          <list>
             <t><list style='hanging' hangIndent="5">
              <t hangText='1:'>Destination Unreachable</t>
              <t hangText='2:'>Packet Too Big</t>
              <t hangText='3:'>Time Exceeded</t>
              <t hangText='4:'>Parameter Problem</t>
              <t hangText='150:'>ICMP messages utilized by experimental
                mobility protocols such as Seamoby</t>
				  </list></t>
          </list></t>


          <t>IPv6 router or host discovery:
			 <list>
            <t><list style='hanging' hangIndent="5">
              <t hangText='128:'>Echo Request</t>
              <t hangText='129:'>Echo Reply</t>
              <t hangText='130:'>Multicast Listener Query</t>
              <t hangText='131:'>Multicast Listener Report</t>
              <t hangText='132:'>Multicast Listener Done</t>
              <t hangText='133:'>Router Solicitation</t>
              <t hangText='134:'>Router Advertisement</t>
              <t hangText='135:'>Neighbor Solicitation</t>
              <t hangText='136:'>Neighbor Advertisement</t>
              <t hangText='137:'>Redirect Message</t>
              <t hangText='138:'>Router Renumbering</t>
              <t hangText='139:'>ICMP Node Information Query</t>
              <t hangText='140:'>ICMP Node Information Response</t>
              <t hangText='141:'>Inverse Neighbor Discovery Solicitation Message</t>
              <t hangText='142:'>Inverse Neighbor Discovery Advertisement Message</t>
              <t hangText='143:'>Version 2 Multicast Listener Report</t>
              <t hangText='144:'>Home Agent Address Discovery Request Message</t>
              <t hangText='145:'>Home Agent Address Discovery Reply Message</t>
              <t hangText='146:'>Mobile Prefix Solicitation</t>
              <t hangText='147:'>Mobile Prefix Advertisement </t>
              <t hangText='148:'>Certification Path Solicitation Message</t>
              <t hangText='149:'>Certification Path Advertisement Message</t>
              <t hangText='150:'>ICMP messages utilized by experimental
                mobility protocols such as Seamoby</t>
              <t hangText='151:'>Multicast Router Advertisement</t>
              <t hangText='152:'>Multicast Router Solicitation</t>
              <t hangText='153:'>Multicast Router Termination</t>
              <t hangText='154:'>FMIPv6 Messages</t>
              <t hangText='155:'>RPL Control Message</t>
          </list></t>
          </list></t>

      <section title="ICMP Use as a Routing Protocol">
<t>
As mentioned in <xref target="aup" />,
using ICMP as a general-purpose routing or
   network management protocol is not advisable
   and SHOULD NOT be used that way.
</t><t>
ICMP has a role in the Internet 
as an integral part of the IP layer; 
it is not as a routing protocol or as a transport
protocol for other layers including
routing information.
From a more pragmatic perspective, some of the key characteristics of ICMP 
make it a less-than-ideal choice for 
a routing protocol. Those include that ICMP is 
frequently filtered, is not authenticated, is easily spoofed, and that
specialist hardware processing of ICMP would disrupt the deployment of an
ICMP-based routing or management protocol.

<!-- [rfced] For clarity and parallelism, we suggest the following update.

Original:
   Those include that ICMP is
   frequently filtered, is not authenticated, is easily spoofed, and
   that specialist hardward processing of ICMP would disrupt the
   deployment of an ICMP-based routing or management protocol.

Suggested:
   The key characteristics include that ICMP is
   frequently filtered, is not authenticated, and is easily spoofed.  In
   addition, specialist hardware processing of ICMP would disrupt the
   deployment of an ICMP-based routing or management protocol.
-->

</t>
      </section>

      <section title="A Few Notes on RPL">
<t>
  RPL, the IPv6 routing protocol for low-power and
  lossy networks (see <xref target='RFC6550' />)
  uses ICMP as a transport.
  In this regard, it is an exception among the ICMP
  message types.  Note that, although RPL is an IP 
  routing protocol, it is not deployed on the general
  Internet; it is limited to specific, contained networks.
</t><t>
  This should be considered anomalous and is not a model for future
  ICMP message types. That is, ICMP is not intended as a transport for
  other protocols and SHOULD NOT be used in that way in future
  specifications. In particular, while it is adequate to use ICMP
  as a discovery protocol, it does not extend to full routing
  capabilities.
</t>

      </section>
    </section> <!-- classification of existing message types -->

    <section title="Applications Using ICMP">
      <t>
Some applications make use of ICMP error notifications, or even deliberately
create anomalous conditions in order to elicit ICMP messages. These
ICMP messages are then used to generate feedback to the higher layer.
Some of these applications include some of the most widespread examples, such as 
PING, TRACEROUTE, and Path MTU Discovery (PMTUD).
   These
   uses are considered acceptable because they use existing ICMP message types
   and do not change ICMP functionality.
      </t>
    </section>

    <section title="Extending ICMP">
      <t>
        ICMP multi-part messages are specified in <xref target="RFC4884" />
        by defining an extension mechanism for selected ICMP messages.
        This mechanism addresses a fundamental problem in ICMP
        extensibility.
        An ICMP multi-part message carries all of the information
        that ICMP messages carried previously, as well as additional
        information that applications may require.</t>
      <t>
        Some currently defined ICMP extensions include ICMP extensions
        for Multiprotocol Label Switching <xref target="RFC4950" /> and
        ICMP extensions for interface and next-hop identification
        <xref target ="RFC5837" />. </t>
      <t>
        Extensions to ICMP SHOULD follow <xref target="RFC4884" />.
<!-- [rfced] To specify what ICMP should be following, we suggest the
following update.

Original:
   Extensions to ICMP SHOULD follow [RFC4884].

Suggested:
   Extensions to ICMP SHOULD follow the requirements provided in [RFC4884].
-->
      </t>
    </section>
    <section title="ICMPv4 vs. ICMPv6">
      <t>
       Because ICMPv6 is used for IPv6 Neighbor Discovery, 
       deployed IPv6 routers, IPv6-capable security gateways,
       and IPv6-capable firewalls normally support administrator 
       configuration of how specific ICMPv6 message types are handled.  
       By contrast, deployed IPv4 routers, IPv4-capable security gateways, 
       and IPv4-capable firewalls are less likely to allow an administrator 
       to configure how specific ICMPv4 message types are handled.
       So, at present, ICMPv6 messages usually have a higher 
       probability of travelling end-to-end than ICMPv4 messages.
      </t>
    </section>

  </section> <!-- acceptable use policy -->

  <section title="ICMP's Role in the Internet">
    <t>ICMP was originally intended to be a mechanism for gateways
      or destination hosts
      to report error conditions back to source 
      hosts in <xref target='RFC0792' >ICMPv4</xref>;
      <xref target="RFC4443" >ICMPv6</xref> is modeled after it.
ICMP is also used to perform IP-layer functions, such as diagnostics
(e.g., PING).
</t>

<t>
ICMP is defined to be an integral part of IP and
must be implemented by every IP module. This is true for
ICMPv4 as an integral part of IPv4 (see the Introduction
of <xref target='RFC0792' />), and for
ICMPv6 as an integral part of IPv6 (see Section 2
of <xref target='RFC4443' />).
When first defined,
ICMP messages were thought of as IP
messages that didn't carry any higher-layer data.
It could be conjectured that the term "control" was used
because ICMP messages were not "data" messages.
</t>

<t>
      The word "control" in the protocol name did not describe
      ICMP's function (i.e., it did not "control" the Internet); 
      rather, it was used to communicate about the control
      functions in the Internet.  For example, even though ICMP
      included a redirect message type that affects routing behavior in the
      context of a LAN segment, it was not and is not used as a
      generic routing protocol.</t>


  </section>

 <!-- management vs control -->

  <section title='Security Considerations'>
    <t>This document describes a high-level policy
      for adding ICMP types and codes.  While special attention
      must be paid to the security implications of any particular
      new ICMP type or code, this recommendation presents no
      new security considerations.</t>
<t>From a security perspective, ICMP plays a part in the 
<xref target='RFC2521'>Photuris protocol</xref>.

<!-- [rfced] Is RFC 2521 the correct reference for the Photuris protocol?  

Original:
   From a security perspective, ICMP plays a part in the Photuris
   [RFC2521] protocol. 

The only place photuris is mentioned in the document is the following:

   Comments about this document should be discussed on the
   photuris@adk.gr mailing list.

-->

But more generally, ICMP is not a secure protocol and 
does not include features to be used to discover network security
parameters or to report on network security anomalies in the
forwarding plane.</t>
<t>
Additionally, new ICMP functionality (e.g., ICMP extensions, or new ICMP
types or codes) needs to consider potential ways that ICMP can be abused
(e.g., <xref target='CA-1998-01'>Smurf IP DoS</xref>).
</t>
  </section> <!-- security considerations -->

  <section title='Acknowledgments'>
    <t>This document was originally proposed by, and received
      substantial review and suggestions from, Ron Bonica.
      Discussions with Pascal Thubert helped clarify the
      history of RPL's use of ICMP.  We are very grateful for the review,
      feedback, and comments from Ran Atkinson, Tim Chown, 
      Joe Clarke, Adrian Farrel, Ray Hunter, Hilarie Orman, Eric Rosen,
      JINMEI Tatuya, and Wen Zhang, which resulted in a much
      improved document.
    </t>
  </section> <!-- acknowledgements -->

</middle>

<back>
  <references title='Normative references'>
    <?rfc include="reference.RFC.2119.xml"?>
    <?rfc include="reference.RFC.0792.xml"?>
    <?rfc include="reference.RFC.4443.xml"?>
    <?rfc include="reference.RFC.4884.xml"?>
  </references>
  <references title='Informative references'>
    <?rfc include="reference.RFC.2780.xml"?>
    <?rfc include="reference.RFC.6550.xml"?>
    <?rfc include="reference.RFC.6918.xml"?>
    <?rfc include="reference.RFC.4950.xml"?>
    <?rfc include="reference.RFC.5837.xml"?>
    <?rfc include="reference.RFC.2521.xml"?>
<reference anchor="CA-1998-01" target="http://www.cert.org/advisories/CA-1998-01.html">
        <front>
            <title>Smurf IP Denial-of-Service Attacks</title>
            <author initials="" surname="" fullname="">
                <organization >CERT</organization>
            </author>
            <date month="January" year="1998" />
        </front>
        <seriesInfo name="CERT Advisory" value="CA-1998-01" />
</reference>

<reference anchor="DIAGNOSTICS"
   target="https://svn.tools.ietf.org/area/ops/trac/wiki/TIG_DIAGNOSTICS">

<!-- [rfced] Note that we will update this entry to remove the extra comma
at the conclusion of AUTH48, before the document is published.

   [DIAGNOSTICS]
              "IP Diagnostics Technical Interest Group", ,
              <https://svn.tools.ietf.org/area/ops/trac/wiki/
              TIG_DIAGNOSTICS>.
-->
        <front>
            <title>IP Diagnostics Technical Interest Group</title>
            <author initials="" surname="" fullname="">
                <organization></organization>
            </author>
            <date month="" year="" />
        </front>
        <seriesInfo name="" value="" />
</reference>             

  </references>
</back>
</rfc>
