<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc  SYSTEM "rfc3667.dtd">
<!ENTITY rfc2119 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc0792 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0792.xml'>
<!ENTITY rfc3032 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3032.xml'>
<!ENTITY rfc3034 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3034.xml'>
<!ENTITY rfc3035 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3035.xml'>
<!ENTITY rfc3443 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3443.xml'>
<!ENTITY rfc4443 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4443.xml'>
<!ENTITY rfc2434 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2434.xml'>
<!ENTITY rfc4884  PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4884.xml'>

<rfc number="4950" category="std">

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

<front>
        <title abbrev="ICMP MPLS"> ICMP Extensions for Multiprotocol
Label Switching
        </title>
        <author initials="R" surname="Bonica" fullname="Ronald
P. Bonica">
                <organization>Juniper Networks</organization>
                <address>
                        <postal>
                                <street>2251 Corporate Park
Drive</street>
                                <city>Herndon</city> 
                                <region>VA</region>
                                <code>20171</code>
                                <country>US</country>
                        </postal>
                        <email>rbonica@juniper.net</email>
                </address>
        </author>
        <author initials="D" surname="Gan" fullname="Der-Hwa Gan">
                <organization>Consultant</organization>
                <address>
                        <postal>
                        </postal>
                        <email>derhwagan@yahoo.com</email>
                </address>
        </author>

        <author initials="D" surname="Tappan" fullname="Daniel
C. Tappan">
                <organization>Consultant</organization>
                <address>
		        <postal>
                        </postal>
                        <email>Dan.Tappan@gmail.com</email>
                </address>
        </author>

        <author initials="C" surname="Pignataro" fullname="Carlos
Pignataro">
                <organization>Cisco Systems, Inc.</organization>
                <address>
                        <postal>
                                <street>7025 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="July" year="2007" />
        <area>Internet</area>
        <workgroup>MPLS Working Group</workgroup>

<!-- [rfced] Please insert any additional keywords for use on
http://www.rfc-editor.org/search.html. -->

        <keyword>ICMP MPLS</keyword>
        <keyword>MPLS ICMP traceroute</keyword>

        <abstract>
<t>
      This memo defines an extension object that can be appended
      to selected multi-part ICMP messages. This extension
      permits Label Switching Routers to append MPLS information
      to ICMP messages, and has already been widely deployed.
</t>
        </abstract>
</front>


<middle>


<section anchor="Introduction" title="Introduction"> 
<t>
   IP routers use the Internet Control Message Protocol, 
   <xref target="RFC0792"> ICMPv4</xref> and <xref target="RFC4443">
ICMPv6</xref>,
   to convey control information to source 
   hosts. Network operators use this information to diagnose routing 
   problems. 
</t>
<t>
   When a router receives an undeliverable IP datagram, it can send an

   ICMP message to the host that originated the datagram. The ICMP 
   message indicates why the datagram could not be delivered. It also 
   contains the IP header and leading payload octets of the "original 
   datagram" to which the ICMP message is a response. 
</t>

<t>   
   MPLS Label Switching Routers (LSR) also use ICMP to convey control 
   information to source hosts. Section 2.3 of <xref
target="RFC3032"></xref> 
   describes the interaction between MPLS
   and ICMP, and Sections 2.4 and 3 of <xref target="RFC3032"></xref> 
    provide
        applications of that interaction.
</t>
<t>   
   When an LSR receives an undeliverable MPLS-encapsulated datagram,
it 
   removes the entire MPLS label stack, exposing the previously 
   encapsulated IP datagram. The LSR then submits the IP datagram to
an 
   error processing module. Error processing can 
   include ICMP message generation.  
</t>
<t>   
   The ICMP message indicates why the original datagram could not be 
   delivered. It also contains the IP header and leading octets of the

   original datagram.  
</t>
<t>    
   The ICMP message, however, contains no information regarding the 
   MPLS label stack that encapsulated the original datagram when it 
   arrived at the LSR. This omission is significant because the LSR 
   would have forwarded the original datagram based upon information 
   contained by the MPLS label stack. 
</t>
<t> 
   This memo defines an ICMP extension object that permits an LSR to 
   append MPLS information to ICMP messages. Selected ICMP 
   messages SHOULD include the MPLS label 
   stack, as it arrived at the router that is sending the ICMP
message. 
   The ICMP message MUST also include the IP header and leading
payload 
   octets of the original datagram.  

</t>
<t>
   The ICMP extensions defined in this document must be preceded 
   by an ICMP Extension Structure Header and an ICMP Object
   Header. Both are defined in <xref
target="RFC4884"></xref>.
</t>
<t>
The ICMP extension defined in this document is equally
applicable to 
<xref target="RFC0792">ICMPv4</xref> 
and 
<xref target="RFC4443">ICMPv6</xref>. 
Throughout this
document, unless otherwise specified, the acronym ICMP
refers to multi-part ICMP messages, encompassing both ICMPv4
and ICMPv6.

</t>
</section>

<section anchor="Conventions" title=" Conventions Used In This
Document">
<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">RFC2119</xref>.</t>
</section>

<section anchor="traceroute" title="Application to TRACEROUTE"> 
<t>
   The ICMP extension defined in this memo supports enhancements to 
   TRACEROUTE. Enhanced TRACEROUTE applications, like older
implementations, 
   indicate which nodes the original datagram visited en route to its 
   destination. They differ from older implementations in that 
   they also reflect the original datagram's MPLS encapsulation status

   as it arrived at each node. 
</t>
<t>   
   Figure 1 contains sample output from an enhanced TRACEROUTE 
   implementation. 
</t>
<figure anchor="Enhanced" title="Enhanced TRACEROUTE Sample Output">
<artwork>


&gt; traceroute 192.0.2.1 

  traceroute to 192.0.2.1 (192.0.2.1), 30 hops max, 40 byte packets

   1  192.0.2.13 (192.0.2.13)  0.661 ms  0.618 ms  0.579 ms

   2  192.0.2.9 (192.0.2.9)  0.861 ms  0.718 ms  0.679 ms

     MPLS Label=100048 Exp=0 TTL=1 S=1

   3  192.0.2.5 (192.0.2.5)  0.822 ms  0.731 ms  0.708 ms

     MPLS Label=100016 Exp=0 TTL=1 S=1

   4  192.0.2.1 (192.0.2.1)  0.961 ms  8.676 ms  0.875 ms

</artwork>
</figure>
</section>
<section anchor="Disclaimer" title="Disclaimer"> 
<t>
   This memo does not define the general relationship between 
   ICMP and MPLS. Section 2.3 of <xref target="RFC3032"></xref>
defines this 
   relationship. 
</t>
<t>  
   The current memo does not define encapsulation-specific TTL (Time
   to Live)
   manipulation procedures. It defers to Section 5.4 of <xref
target="RFC3034">RFC 3034</xref>
   and Section 10 of <xref target="RFC3035"></xref> in this matter. 
</t>
<t>    
   When encapsulation-specific TTL manipulation procedures defeat the 
   basic TRACEROUTE mechanism, they will also defeat enhanced 
   TRACEROUTE implementations. 
</t>
</section>
<section anchor="MPLSStackEntryObjectClass" title="MPLS Label Stack
Object"> 
<t>
   The MPLS Label Stack Object can be appended to the
   ICMP Time Exceeded and Destination Unreachable messages.  
   A single instance of the MPLS Label Stack Object represents the 
   entire MPLS label stack, formatted exactly as it was when it
arrived 
   at the LSR that sends the ICMP message. 
</t>
<t>
   <xref target="MP"></xref> depicts the MPLS Label Stack Object.
   It must be preceded by an ICMP Extension Structure Header and an
ICMP Object
   Header. Both are defined in <xref
target="RFC4884"></xref>.
</t>
<t>     
   In the object payload, octets 0-3 depict the first member of the 
   MPLS label stack. Each remaining member of the MPLS label stack is 
   represented by another 4 octets that share the same format.  
</t>
 <figure anchor="MP" title="MPLS Label Stack Object">
                <artwork>


                Class-Num = 1, MPLS Label Stack Class
                C-Type = 1, Incoming MPLS Label Stack
                Length = 4 + 4 * (number of MPLS LSEs)   

           0             1             2            3 
   +-------------+-------------+-------------+-------------+  
   |              Label               |EXP |S|     TTL     | 
   +-------------+-------------+-------------+-------------+  
   |                                                       | 
   |       // Remaining MPLS Label Stack Entries //        |  
   |                                                       | 
   +-------------+-------------+-------------+-------------+  
</artwork>
</figure>


<t>    
   Label: 20 bits 
</t>
<t>      
   Exp: Experimental Use, 3 bits 
 </t>
<t>     
   S: Bottom of Stack, 1 bit 
</t>
<t>      
   TTL: Time to Live, 8 bits 
 </t>   


</section>


<section anchor="Security Considerations" title="Security
Considerations"> 
<t>
      This memo does not specify the conditions  that trigger the
generation of ICMP Messages for
      Labeled IP Packets. It does not define the interaction
      between MPLS and ICMP. However, this document defines an
      extension that allows an MPLS router to append MPLS
      information to multi-part ICMP messages, and therefore can
      provide the user of the TRACEROUTE application with
     additional information. Consequently, a network operator may
      wish to provide this information selectively based on some
      policy; for example, only include the MPLS extensions in
      ICMP messages destined to addresses within the network
      management blocks with administrative control over the
      router.  An implementation could determine whether to
      include the MPLS Label Stack extensions based upon the
      destination address of the ICMP message, or based on a
      global configuration option in the router.  Alternatively,
      an implementation may determine whether to include these
      MPLS extensions when TTL expires based on the number of
      label stack entries (depth of the label stack) of the
      incoming packet. Finally, an operator can make use of the
      TTL treatment on MPLS Pipe Model LSPs defined in <xref
target="RFC3443"></xref>
      for a TTL-transparent mode of operation that would prevent
      ICMP Time Exceeded altogether when tunneled over the MPLS
      LSP.
</t>
</section>
<section anchor="IANAConsiderations" title="IANA Considerations"> 
<t>
      IANA has assigned the following object Class-num
      in the ICMP Extension Object registry:
</t>
<artwork>

          Class-Num   Description
                  1   MPLS Label Stack Class
</artwork>
<t>
      IANA has established a registry for the
      corresponding class sub-type (C-Type) space, as follows:
</t>
<artwork>

          MPLS Label Stack Class Sub-types:

             C-Type  Description
                  0  Reserved                     
                  1  Incoming MPLS Label Stack
          0x02-0xF6  Available for assignment
          0xF7-0xFF  Reserved for private use
</artwork>
<t>
       C-Type values are assignable on a first-come-first-serve
       (FCFS) basis <xref target="RFC2434"></xref>.
</t>

</section>
</middle>

<vspace blankLines="100"/>

<back>
        <references title="Normative References">
                &rfc2119;
                &rfc0792;
                &rfc3032;
                &rfc4884;
                &rfc4443;
                &rfc2434;
</references>
        <references title="Informative References">
                &rfc3034;
                &rfc3035;
                &rfc3443;
</references>

<vspace blankLines="100"/>

</back>
</rfc>
