<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->



<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">

<!ENTITY RFC2205 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2205.xml">

<!ENTITY RFC3209 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3209.xml">

<!ENTITY RFC4090 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4090.xml">
<!ENTITY RFC4875 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4875.xml">

]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="no" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-torvi-mpls-rsvp-ingress-protection-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->





  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="RSVP-TE LSP Ingress Protection">Ingress Protection for RSVP-TE p2p and p2mp LSPs</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Alia Atlas" initials="A.K.A." surname="Atlas">
     <organization>Juniper Networks</organization>
     <address>
       <postal>
         <street>10 Technology Park Drive</street>
         <city>Westford</city>
         <region>MA</region>
         <code>01886</code>
         <country>USA</country>
       </postal>
       <email>akatlas@juniper.net</email>
      </address>
    </author>

    <author fullname="Raveendra Torvi" initials="R.T." surname="Torvi">
     <organization>Juniper Networks</organization>
     <address>
       <postal>
         <street>10 Technology Park Drive</street>
         <city>Westford</city>
         <region>MA</region>
         <code>01886</code>
         <country>USA</country>
       </postal>
       <email>rtorvi@juniper.net</email>
      </address>
    </author>

    <author fullname="Markus Jork" initials="M.J." surname="Jork">
     <organization>Juniper Networks</organization>
     <address>
       <postal>
         <street>10 Technology Park Drive</street>
         <city>Westford</city>
         <region>MA</region>
         <code>01886</code>
         <country>USA</country>
       </postal>
       <email>mjork@juniper.net</email>
      </address>
    </author>


    <date year="2012" />

    <!-- If the month and year are both specified and are the current
    ones, xml2rfc will fill in the current day for you. If only the
    current year is specified, xml2rfc will fill in the current day
    and month for you. If the year is not the current one, it is
    necessary to specify at least a month (xml2rfc assumes day="1" if
    not specified for the purpose of calculating the expiry date).
    With drafts it is normally sufficient to specify just the
    year. -->

    <!-- Meta-data Declarations -->

    <area>Routing</area>

    <workgroup>MPLS Working Group</workgroup>

    <abstract>

    <t>Protection against node failure is important for RSVP-TE LSPs,
    whether point-to-point or point-to-multipoint.  While <xref
    target="RFC4090"/> provides a mechanism for node protection, it
    does not specify how to protect against failure of the ingress
    node.  This document specifies the RSVP extensions to support
    ingress node protection and describes the necessary processing
    behavior.</t>

    </abstract>
  </front>

  <middle>
<section title="Introduction">

<t>It is desirable to protect RSVP-TE LSPs, whether p2p or p2mp,
against ingress failure.  To do this, a backup node must be
pre-identified and prepared with the necessary state so that it can
forward traffic when necessary.</t>

<t>Conceptually, a proxy ingress node is created that starts the RSVP
signaling.  The explicit path of the LSP goes from the proxy ingress
node to the backup node and then to the real ingress node.  The
behavior and signaling for the proxy ingress node is done by the real
ingress node.</t>

<t>The backup node must be only one logical hop away from the ingress,
whether that be via a direct link or a tunnel.</t>

<figure anchor="proxy_ingress" align="center"
title="Example Protected LSP with Proxy Ingress Node">
<artwork align="center"><![CDATA[

             [ traffic source ]
              |             |
              |             |
              |             |
      [ proxy ingress ]  [ backup ]
      [ & ingress     ]     |
             |              |
             |----[ MP ]----|

]]></artwork>
</figure>

<t>There are three different scenarios that this document addresses
for ingress protection.  All three can be handled using the same set
of signaling defined in this document.</t>

<t><list style="hanging"> 

<t hangText="A. Traffic Source detects failure">The traffic source(s) can
rapidly determine that the ingress has failed and switch over to
sending traffic to the backup node.  When this mode is specified, the
backup node will forward any appropriately received traffic along its
bypass tunnel to the merge point(s).</t>

<t hangText="B. MP detects failure">The traffic source(s) always send
traffic to both the ingress and backup nodes.  The backup node always
forwards traffic along its bypass tunnel to the merge point(s).  Each
MP determines whether the ingress node has failed and, if so, switches
over to accepting the traffic from the backup node.</t>

<t hangText="C. Backup detects failure">The traffic source(s) always send
traffic to both the ingress and backup nodes.  The backup node does
not forward the received traffic from the traffic source under normal
conditions.  When the backup node determines that the ingress node has
failed, the backup node starts forwarding the traffic alongs its
bypass tunnel(s) to the merge point(s).</t>

</list></t>

<t>For all three scenarios, it is necessary for the backup node to
know the merge point(s) and associated MPLS labels.  This is
accomplished by having the RSVP Path and RESV messages go through the
backup node, although the forwarding path need not go through the
backup node.  There are two cases of interest - on-forwarding-path and
off-forwarding-path.  In the on-forwarding-path case, the backup node
is already the immediate node after the ingress node for the LSP.  In
the off-forwarding-path, the backup node is not the immediate node
after the ingress node for all asociated sub-LSPs.</t>

<t>For ingress protection to be functional, the backup node must have
access and knowledge of the appropriate traffic to send into the
protected LSP.  The ingress node must be capable of describing the
traffic to the backup node.</t>

<t>Once the backup node has the necessary state for the LSP, including
the set of merge points, the backup node can use bypass tunnels as
described in <xref target="RFC4090"/>.  If the LSP is a
point-to-multipoint, then the backup node has the option of choosing
to use a bypass p2mp tunnel for protection.</t>

<t>Finally, an assumption of local protection is that a global repair
mechanism will occur to replace the patched LSP with a new fully
functional one.  To do this, it is necessary that the backup node be
able to enact a global repair that still allows sharing of bandwidth
resources between the old and new LSPs.</t>

</section>

<section title="Failure Detection Issues and Solution">

<t>For each of the different scenarios, the details of detecting an
ingress node failure can vary.  This document does not specify the
details of how to do so, but it is possible using either approriately
routed BFD sessions or direct link information.</t>

<t>For traffic-source detection and fail-over, the traffic source can
merely monitor the state of the direct links over which traffic is
sent to the ingress.</t>

<t>For MP detection, the MP can be configured with the appropriate BFD
discriminators used on the BFD sessions.  It is desirable for the MP
to know that the ingress can't send traffic to the MP or downstream
(for when the ingress is protecting against the MP failure).  The
appropriate BFD discriminators will vary by MP; they are not signaled
in the RSVP extensions described in this draft.</t>

<t>For backup node detection, the backup node can be configured with
the appropriate BFD discriminators used on the BFD sessions.  Again,
they are not signaled in the RSVP extensions described in this
draft.</t>

</section>


<section title="Description of Behavior">

<section title="Ingress Node">

<section title="Required Configuration Information">

<t>The ingress node must be configured with four pieces of
information for these extensions to work.
<list style="hanging">

<t hangText="Backup Node Address">The ingress node must know an IP
address for the backup node that can be included in the ERO.</t>

<t hangText="Protection Scenario">The ingress node must know whether
the traffic source, backup node, or merge point(s) will be responsible
for handling fail-over.</t>

<t hangText="Ingress-Protector-Context-Id">The
Ingress-Protector-Context-Id is used for the Extended Session ID in
ingress-protected LSPs instead of using the ingress node's loopback
address.  The Ingress-Protector-Context-Id should not be the same as
another address associated with a router that may signal TE LSPs.  By
having an Ingress-Protector-Context-Id, the backup node can perform
global repair.</t>

<t hangText="Application Traffic Identifier">The ingress and backup
node must both know what application traffic should be directed into
the LSP.  A commonly understood Application Traffic Identifier is sent
between the ingress and backup nodes in RSVP signaling.  The exact
meaning of the identifier should be configured similarly at both the
ingress and backup nodes.  The Application Traffic Identifier is
understood within the unique context of the
Ingress-Protector-Context-Id.</t>

</list></t>

<t>With this additional information, the ingress node can create and
signal the necessary RSVP extensions to support ingress
protection.</t>

</section>

<section title="Signaling Behavior">

<t>The ingress node is responsible for starting the RSVP signaling for
the proxy-ingress node.  To do this, the following is done for the
RSVP Path message.</t>

<t><list style="numbers">
<t>Compute the EROs for the LSP as normal for the ingress.</t>

<t>If the selected backup node is not the first node on the path (for
all sub-LSPs), then insert at the beginning of the ERO first the
backup node and then the ingress node.</t>

<t>Change the IPv4 tunnel sender address in the Sender Template Object
to be that of the Ingress-Protector-Context-Id.</t>

<t>In the Path RRO, instead of recording the ingress node's address,
replace it with the Ingress-Protector-Context-Id.</t>

<t>Leave the HOP object populated as usual with information for the
ingress-node.</t>

<t>Add the INGRESS-PROTECTION object to the Path message.  Allocate a
second LSP-ID to be used in the INGRESS-PROTECTION object.</t>

<t>The RSVP Path message is sent to the backup node as normal.  Since
the backup node must be only one logical hop away from the ingress,
normal RSVP signaling can be used.</t>

</list></t>

<t>When the backup node is off the forwarding path, there are
additional behaviors for the ingress node to do when it is handling
the associated PATH and RESV messages.</t>

<t>When the ingress node receives an RSVP Path message with an
INGRESS-PROTECTION object and the object specifies that node as the
ingress node and the PHOP as the backup node, the ingress node SHOULD
check the Failure Scenario specified in the INGRESS-PROTECTION object
and, if it is not the "MP detects failure" scenario, then the ingress
node SHOULD remove the INGRESS-PROTECTION object from the PATH message
before sending it out.  Additionally, the ingress node must store that
it will install ingress forwarding state for the LSP rather than
midpoint forwarding.</t>

<t>When an RSVP RESV message is received by the ingress, it uses the
NHOP to determine whether the message is received from the backup node
or from a different node.  The stored associated PATH message contains
an INGRESS-PROTECTION object that identifies the backup node.  If the
RESV message is not from the backup node, then ingress forwarding
state should be set up, and the INGRESS-PROTECTION object MUST be
added to the RESV before it is sent to the NHOP, which should be the
backup node.  If the RESV message is from the backup node, then the
LSP should be considered available for use.</t>

<t>If the backup node is on the forwarding path, then a RESV is
received with an INGRESS-PROTECTION object and an NHOP that matches
the backup node.  In this case, the ingress node's address will not
appear after the backup node in the RRO.  The ingress node should set
up ingress forwarding state, just as is done if the LSP weren't
ingress-node protected.</t>

</section>

</section>

<section title="Backup Node">

<t>An LER determines that the LSP is ingress-protected based upon the
presence of the INGRESS-PROTECTION object in the PATH message.  An LER
can further determine that it is the backup node if one of its
addresses is listed as the backup node in the INGRESS-PROTECTION
object.</t>

<section title="Behavior for On-Forwarding-Path Backup Node">

<t>If the backup node is on the forwarding path, then the backup node
MUST remove the INGRESS-PROTECTION object from the PATH message before
forwarding it.</t>

<t>If the failure scenario is either "MP-detected" or
"Backup-detected", then the backup node is responsible for determining
if the ingress node has failed and forwarding the identified traffic
from the traffic source(s) to the next-hop(s) on the LSP instead of
forwarding the traffic from the ingress node.</t>

<t>When the backup node receives a RESV message, it should add back in
the INGRESS-PROTECTION object before forwarding it.</t>

</section>

<section title="Behavior for Off-Forwarding-Path Backup Node">

<t>When the backup node receives a PATH message with the
INGRESS-PROTECTION object, the backup node examines the
INGRESS-PROTECTION object to learn what traffic associated with the
LSP and what failure scenario is being used.  The backup node forwards
the PATH message to the ingress node with the normal RSVP changes.</t>

<t>When the backup node receives a RESV message with the
INGRESS-PROTECTION object, the backup node records an IMPLICIT-NULL
label in the RRO.  The backup node creates the appropriate forwarding
state for the failure scenario specified.  For the "MP-detected" and
"traffic-source-detected", this means that backup node forwards any
received identified traffic into the bypass tunnel(s) to the merge
point(s).  For the "backup-detected", this means that the backup node
creates state to quickly determine the ingress has failed and switch
to sending any received identified traffic into the bypass tunnel(s)
to the merge point(s).  Then the backup node forwards the RESV message
to the ingress node, which is acting for the proxy ingress.</t>

<t>If the backup node doesn't have a bypass tunnel to a merge point,
then the backup node can wait to send the RESV until such has been
created or it can send a Path Err with an Error Code of "Routing
Problem (24)" and a new Error Value sub-code of "No Bypass Tunnel to
Merge Point (TBD)".</t>

</section>

</section>

<section title="Merge Node">

<t>An LSR that is serving as a Merge Node may need to support the
INGRESS-PROTECTION object and functionality defined in this
specification if the LSP is ingress-protected where the failure
scenario is "MP-detected".  An LSR can determine that it must be a
merge point by examining the INGRESS-PROTECTION object and determining
that it is neither the ingress node nor the backup node and the PHOP
is the ingress node.</t>

<t>In that case, when the LSR receives a PATH message with an
INGRESS-PROTECTION object, the LSR MUST remove the INGRESS-PROTECTION
object before forwarding on the PATH message.</t>

<t>If the failure scenario specified is "MP-detected", the MP must
connect up the fast-failure detection (as configured) to accepting
backup traffic received from the backup node.  There are a number of
different ways that the MP can enforce not forwarding traffic normally
received from the backup node.  For instance, first, any LSPs set up
from the backup node should not be signaled with an IMPLICIT NULL
label and second, the associated label for the ingress-protected LSP
could be set to normally discard inside that context.</t>

<t>When the MP receives a RESV message whose matching PATH state had
an INGRESS-PROTECTION object, the MP SHOULD add the INGRESS-PROTECTION
object to the RESV message before forwarding it.</t>

</section>

<section title="Global Repair">

<t>When the backup node learns the ingress node has failed (e.g. via
the IGP), then the backup node can compute new ERO(s) and signal the
new LSP so that it no longer relies upon local repair.  To do this,
the backup node uses the same Ingress-Protector-Context-Id as the Ipv4
tunnel sender address in the Sender Template Object and uses the
previously allocated second LSP-ID signaled in the INGRESS-PROTECTION
object.  This allows the new LSP to share resources with the old
LSP.</t>

</section>

<section title="Ingress Revival and Administrative Switching">

<t>In a future version, it is intended to describe the behavior when
the ingress node comes back and how to handle management-triggered
switches from ingress to backup node and vice versa.</t>

</section>

</section>

<section title="RSVP Extensions">

<section title="INGRESS-PROTECTION object">

<figure anchor="ingress_protection" align="center"
title="INGRESS-PROTECTION object">
<artwork align="center"><![CDATA[
  Class-Num = TBD
  C-Type = TBD

              0             1              2             3
       +-------------+-------------+-------------+-------------+
       |       Length (bytes)      |  Class-Num  |   C-Type    |
       +-------------+-------------+-------------+-------------+
       |                Backup Node Address                    |
       +-------------+-------------+-------------+-------------+
       |                Ingress Node Address                   |
       +-------------+-------------+-------------+-------------+
       |           Application Traffic Identifier              |
       +-------------+-------------+-------------+-------------+
       |   Secondary LSP ID        | Protection  |  Flags      |
       |                           | Scenario    |             |
       +-------------+-------------+-------------+-------------+


]]></artwork>
</figure>

<t><list style="hanging">
<t hangText="Backup Node Address"> </t>
<t hangText="Ingress Node Address"> </t>
<t hangText="Application Traffic Identifier"> </t>
<t hangText="Ingress-Protector-Context-Id"> </t>
<t hangText="Secondary LSP ID"> </t>
<t hangText="Protection Scenario"> Indicates if (1) traffic source(s),
(2) backup node, (3) or merge point(s) will handle the fail-over.</t>
<t hangText="Control Flags"> Backup sent flags: (0x01)Ingress-Protection
in-use, (0x02)Ingress Detected Down, (0x04)Admin Override caused
Ingress-Protection-in-use.  Ingress sent flags: (0x08)Revert Control to
Ingress, (0x10)Force control to Backup</t> </list></t>
</section>

</section>

  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>


    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the
    citation libraries: 1. define an ENTITY at the top, and use
    "ampersand character"RFC2629; here (as shown) 2. simply use a PI
    "less than character"?rfc include="reference.RFC.2119.xml"?> here
    (for I-Ds:
    include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref
     elements.  If you use the PI option, xml2rfc will, by default,
     try to find included files in the same directory as the including
     file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These
     can be either in the local filing system or remote ones accessed
     by http (http://domain/dir/... ).-->

    <references title="Normative References">
    &RFC2119;
    &RFC2205;
    &RFC3209;
    &RFC4090;
    &RFC4875;
    </references>

<!--    <references title="Informative References">
    </references>
-->

    <!-- Change Log

v00 2012-06-12  AKA   Initial version
    -->

  </back>
</rfc>
