Network Working Group                                         D. Awduche
Request for Comments: 3209                          Movaz Networks, Inc.
Category: Standards Track                                      L. Berger
                                                                 D. Gan
                                                 Juniper Networks, Inc.
                                                                  T. Li
                                                 Procket Networks, Inc.
                                                          V. Srinivasan
                                            Cosine Communications, Inc.
                                                             G. Swallow
                                                    Cisco Systems, Inc.
                                                          December 2001


             RSVP-TE: Extensions to RSVP for LSP Tunnels

Status of this Memo

  This document specifies an Internet standards track protocol for the
  Internet community, and requests discussion and suggestions for
  improvements.  Please refer to the current edition of the "Internet
  Official Protocol Standards" (STD 1) for the standardization state
  and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

  Copyright (C) The Internet Society (2001).  All Rights Reserved.

Abstract

  This document describes the use of RSVP (Resource Reservation
  Protocol), including all the necessary extensions, to establish
  label-switched paths (LSPs) in MPLS (Multi-Protocol Label Switching).
  Since the flow along an LSP is completely identified by the label
  applied at the ingress node of the path, these paths may be treated
  as tunnels.  A key application of LSP tunnels is traffic engineering
  with MPLS as specified in RFC 2702.

  We propose several additional objects that extend RSVP, allowing the
  establishment of explicitly routed label switched paths using RSVP as
  a signaling protocol.  The result is the instantiation of label-
  switched tunnels which can be automatically routed away from network
  failures, congestion, and bottlenecks.








Awduche, et al.             Standards Track                     [Page 1]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


Contents

  1      Introduction   ..........................................   3
  1.1    Background  .............................................   4
  1.2    Terminology  ............................................   6
  2      Overview   ..............................................   7
  2.1    LSP Tunnels and Traffic Engineered Tunnels  .............   7
  2.2    Operation of LSP Tunnels  ...............................   8
  2.3    Service Classes  ........................................  10
  2.4    Reservation Styles  .....................................  10
  2.4.1  Fixed Filter (FF) Style  ................................  10
  2.4.2  Wildcard Filter (WF) Style  .............................  11
  2.4.3  Shared Explicit (SE) Style  .............................  11
  2.5    Rerouting Traffic Engineered Tunnels  ...................  12
  2.6    Path MTU  ...............................................  13
  3      LSP Tunnel related Message Formats  .....................  15
  3.1    Path Message  ...........................................  15
  3.2    Resv Message  ...........................................  16
  4      LSP Tunnel related Objects  .............................  17
  4.1    Label Object  ...........................................  17
  4.1.1  Handling Label Objects in Resv messages  ................  17
  4.1.2  Non-support of the Label Object  ........................  19
  4.2    Label Request Object  ...................................  19
  4.2.1  Label Request without Label Range  ......................  19
  4.2.2  Label Request with ATM Label Range  .....................  20
  4.2.3  Label Request with Frame Relay Label Range  .............  21
  4.2.4  Handling of LABEL_REQUEST  ..............................  22
  4.2.5  Non-support of the Label Request Object  ................  23
  4.3    Explicit Route Object  ..................................  23
  4.3.1  Applicability  ..........................................  24
  4.3.2  Semantics of the Explicit Route Object  .................  24
  4.3.3  Subobjects  .............................................  25
  4.3.4  Processing of the Explicit Route Object  ................  28
  4.3.5  Loops  ..................................................  30
  4.3.6  Forward Compatibility  ..................................  30
  4.3.7  Non-support of the Explicit Route Object  ...............  31
  4.4    Record Route Object  ....................................  31
  4.4.1  Subobjects  .............................................  31
  4.4.2  Applicability  ..........................................  34
  4.4.3  Processing RRO  .........................................  35
  4.4.4  Loop Detection  .........................................  36
  4.4.5  Forward Compatibility  ..................................  37
  4.4.6  Non-support of RRO  .....................................  37
  4.5    Error Codes for ERO and RRO  ............................  37
  4.6    Session, Sender Template, and Filter Spec Objects  ......  38
  4.6.1  Session Object  .........................................  39
  4.6.2  Sender Template Object  .................................  40
  4.6.3  Filter Specification Object  ............................  42



Awduche, et al.             Standards Track                     [Page 2]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  4.6.4  Reroute and Bandwidth Increase Procedure  ...............  42
  4.7    Session Attribute Object  ...............................  43
  4.7.1  Format without resource affinities  .....................  43
  4.7.2  Format with resource affinities  ........................  45
  4.7.3  Procedures applying to both C-Types  ....................  46
  4.7.4  Resource Affinity Procedures   ..........................  48
  5      Hello Extension  ........................................  49
  5.1    Hello Message Format  ...................................  50
  5.2    HELLO Object formats  ...................................  51
  5.2.1  HELLO REQUEST object  ...................................  51
  5.2.2  HELLO ACK object  .......................................  51
  5.3    Hello Message Usage  ....................................  52
  5.4    Multi-Link Considerations  ..............................  53
  5.5    Compatibility  ..........................................  54
  6      Security Considerations  ................................  54
  7      IANA Considerations  ....................................  54
  7.1    Message Types  ..........................................  55
  7.2    Class Numbers and C-Types  ..............................  55
  7.3    Error Codes and Globally-Defined Error Value Sub-Codes  .  57
  7.4    Subobject Definitions  ..................................  57
  8      Intellectual Property Considerations  ...................  58
  9      Acknowledgments  ........................................  58
  10     References  .............................................  58
  11     Authors' Addresses  .....................................  60
  12     Full Copyright Statement  ...............................  61

1. Introduction

  Section 2.9 of the MPLS architecture [2] defines a label distribution
  protocol as a set of procedures by which one Label Switched Router
  (LSR) informs another of the meaning of labels used to forward
  traffic between and through them.  The MPLS architecture does not
  assume a single label distribution protocol.  This document is a
  specification of extensions to RSVP for establishing label switched
  paths (LSPs) in MPLS networks.

  Several of the new features described in this document were motivated
  by the requirements for traffic engineering over MPLS (see [3]).  In
  particular, the extended RSVP protocol supports the instantiation of
  explicitly routed LSPs, with or without resource reservations.  It
  also supports smooth rerouting of LSPs, preemption, and loop
  detection.

  The LSPs created with RSVP can be used to carry the "Traffic Trunks"
  described in [3].  The LSP which carries a traffic trunk and a
  traffic trunk are distinct though closely related concepts.  For
  example, two LSPs between the same source and destination could be
  load shared to carry a single traffic trunk.  Conversely several



Awduche, et al.             Standards Track                     [Page 3]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  traffic trunks could be carried in the same LSP if, for instance, the
  LSP were capable of carrying several service classes.  The
  applicability of these extensions is discussed further in [10].

  Since the traffic that flows along a label-switched path is defined
  by the label applied at the ingress node of the LSP, these paths can
  be treated as tunnels, tunneling below normal IP routing and
  filtering mechanisms.  When an LSP is used in this way we refer to it
  as an LSP tunnel.

  LSP tunnels allow the implementation of a variety of policies related
  to network performance optimization.  For example, LSP tunnels can be
  automatically or manually routed away from network failures,
  congestion, and bottlenecks.  Furthermore, multiple parallel LSP
  tunnels can be established between two nodes, and traffic between the
  two nodes can be mapped onto the LSP tunnels according to local
  policy.  Although traffic engineering (that is, performance
  optimization of operational networks) is expected to be an important
  application of this specification, the extended RSVP protocol can be
  used in a much wider context.

  The purpose of this document is to describe the use of RSVP to
  establish LSP tunnels.  The intent is to fully describe all the
  objects, packet formats, and procedures required to realize
  interoperable implementations.  A few new objects are also defined
  that enhance management and diagnostics of LSP tunnels.

  The document also describes a means of rapid node failure detection
  via a new HELLO message.

  All objects and messages described in this specification are optional
  with respect to RSVP.  This document discusses what happens when an
  object described here is not supported by a node.

  Throughout this document, the discussion will be restricted to
  unicast label switched paths.  Multicast LSPs are left for further
  study.

1.1. Background

  Hosts and routers that support both RSVP [1] and Multi-Protocol Label
  Switching [2] can associate labels with RSVP flows.  When MPLS and
  RSVP are combined, the definition of a flow can be made more
  flexible.  Once a label switched path (LSP) is established, the
  traffic through the path is defined by the label applied at the
  ingress node of the LSP.  The mapping of label to traffic can be
  accomplished using a number of different criteria.  The set of
  packets that are assigned the same label value by a specific node are



Awduche, et al.             Standards Track                     [Page 4]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  said to belong to the same forwarding equivalence class (FEC) (see
  [2]), and effectively define the "RSVP flow."  When traffic is mapped
  onto a label-switched path in this way, we call the LSP an "LSP
  Tunnel".  When labels are associated with traffic flows, it becomes
  possible for a router to identify the appropriate reservation state
  for a packet based on the packet's label value.

  The signaling protocol model uses downstream-on-demand label
  distribution.  A request to bind labels to a specific LSP tunnel is
  initiated by an ingress node through the RSVP Path message.  For this
  purpose, the RSVP Path message is augmented with a LABEL_REQUEST
  object.  Labels are allocated downstream and distributed (propagated
  upstream) by means of the RSVP Resv message.  For this purpose, the
  RSVP Resv message is extended with a special LABEL object.  The
  procedures for label allocation, distribution, binding, and stacking
  are described in subsequent sections of this document.

  The signaling protocol model also supports explicit routing
  capability.  This is accomplished by incorporating a simple
  EXPLICIT_ROUTE object into RSVP Path messages.  The EXPLICIT_ROUTE
  object encapsulates a concatenation of hops which constitutes the
  explicitly routed path.  Using this object, the paths taken by
  label-switched RSVP-MPLS flows can be pre-determined, independent of
  conventional IP routing.  The explicitly routed path can be
  administratively specified, or automatically computed by a suitable
  entity based on QoS and policy requirements, taking into
  consideration the prevailing network state.  In general, path
  computation can be control-driven or data-driven.  The mechanisms,
  processes, and algorithms used to compute explicitly routed paths are
  beyond the scope of this specification.

  One useful application of explicit routing is traffic engineering.
  Using explicitly routed LSPs, a node at the ingress edge of an MPLS
  domain can control the path through which traffic traverses from
  itself, through the MPLS network, to an egress node.  Explicit
  routing can be used to optimize the utilization of network resources
  and enhance traffic oriented performance characteristics.

  The concept of explicitly routed label switched paths can be
  generalized through the notion of abstract nodes.  An abstract node
  is a group of nodes whose internal topology is opaque to the ingress
  node of the LSP.  An abstract node is said to be simple if it
  contains only one physical node.  Using this concept of abstraction,
  an explicitly routed LSP can be specified as a sequence of IP
  prefixes or a sequence of Autonomous Systems.






Awduche, et al.             Standards Track                     [Page 5]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The signaling protocol model supports the specification of an
  explicit path as a sequence of strict and loose routes.  The
  combination of abstract nodes, and strict and loose routes
  significantly enhances the flexibility of path definitions.

  An advantage of using RSVP to establish LSP tunnels is that it
  enables the allocation of resources along the path.  For example,
  bandwidth can be allocated to an LSP tunnel using standard RSVP
  reservations and Integrated Services service classes [4].

  While resource reservations are useful, they are not mandatory.
  Indeed, an LSP can be instantiated without any resource reservations
  whatsoever.  Such LSPs without resource reservations can be used, for
  example, to carry best effort traffic.  They can also be used in many
  other contexts, including implementation of fall-back and recovery
  policies under fault conditions, and so forth.

1.2. Terminology

  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 RFC2119 [6].

  The reader is assumed to be familiar with the terminology in [1], [2]
  and [3].

  Abstract Node

     A group of nodes whose internal topology is opaque to the ingress
     node of the LSP.  An abstract node is said to be simple if it
     contains only one physical node.

  Explicitly Routed LSP

     An LSP whose path is established by a means other than normal IP
     routing.

  Label Switched Path

     The path created by the concatenation of one or more label
     switched hops, allowing a packet to be forwarded by swapping
     labels from an MPLS node to another MPLS node.  For a more precise
     definition see [2].

  LSP

     A Label Switched Path




Awduche, et al.             Standards Track                     [Page 6]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  LSP Tunnel

     An LSP which is used to tunnel below normal IP routing and/or
     filtering mechanisms.

  Traffic Engineered Tunnel (TE Tunnel)

     A set of one or more LSP Tunnels which carries a traffic trunk.

  Traffic Trunk

     A set of flows aggregated by their service class and then placed
     on an LSP or set of LSPs called a traffic engineered tunnel.  For
     further discussion see [3].

2. Overview

2.1. LSP Tunnels and Traffic Engineered Tunnels

  According to [1], "RSVP defines a 'session' to be a data flow with a
  particular destination and transport-layer protocol." However, when
  RSVP and MPLS are combined, a flow or session can be defined with
  greater flexibility and generality.  The ingress node of an LSP can
  use a variety of means to determine which packets are assigned a
  particular label.  Once a label is assigned to a set of packets, the
  label effectively defines the "flow" through the LSP.  We refer to
  such an LSP as an "LSP tunnel" because the traffic through it is
  opaque to intermediate nodes along the label switched path.

  New RSVP SESSION, SENDER_TEMPLATE, and FILTER_SPEC objects, called
  LSP_TUNNEL_IPv4 and LSP_TUNNEL_IPv6 have been defined to support the
  LSP tunnel feature.  The semantics of these objects, from the
  perspective of a node along the label switched path, is that traffic
  belonging to the LSP tunnel is identified solely on the basis of
  packets arriving from the PHOP or "previous hop" (see [1]) with the
  particular label value(s) assigned by this node to upstream senders
  to the session.  In fact, the IPv4(v6) that appears in the object
  name only denotes that the destination address is an IPv4(v6)
  address.  When we refer to these objects generically, we use the
  qualifier LSP_TUNNEL.

  In some applications it is useful to associate sets of LSP tunnels.
  This can be useful during reroute operations or to spread a traffic
  trunk over multiple paths.  In the traffic engineering application
  such sets are called traffic engineered tunnels (TE tunnels).  To
  enable the identification and association of such LSP tunnels, two
  identifiers are carried.  A tunnel ID is part of the SESSION object.
  The SESSION object uniquely defines a traffic engineered tunnel.  The



Awduche, et al.             Standards Track                     [Page 7]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  SENDER_TEMPLATE and FILTER_SPEC objects carry an LSP ID.  The
  SENDER_TEMPLATE (or FILTER_SPEC) object together with the SESSION
  object uniquely identifies an LSP tunnel

2.2. Operation of LSP Tunnels

  This section summarizes some of the features supported by RSVP as
  extended by this document related to the operation of LSP tunnels.
  These include: (1) the capability to establish LSP tunnels with or
  without QoS requirements, (2) the capability to dynamically reroute
  an established LSP tunnel, (3) the capability to observe the actual
  route traversed by an established LSP tunnel, (4) the capability to
  identify and diagnose LSP tunnels, (5) the capability to preempt an
  established LSP tunnel under administrative policy control, and (6)
  the capability to perform downstream-on-demand label allocation,
  distribution, and binding.  In the following paragraphs, these
  features are briefly described.  More detailed descriptions can be
  found in subsequent sections of this document.

  To create an LSP tunnel, the first MPLS node on the path -- that is,
  the sender node with respect to the path -- creates an RSVP Path
  message with a session type of LSP_TUNNEL_IPv4 or LSP_TUNNEL_IPv6 and
  inserts a LABEL_REQUEST object into the Path message.  The
  LABEL_REQUEST object indicates that a label binding for this path is
  requested and also provides an indication of the network layer
  protocol that is to be carried over this path.  The reason for this
  is that the network layer protocol sent down an LSP cannot be assumed
  to be IP and cannot be deduced from the L2 header, which simply
  identifies the higher layer protocol as MPLS.

  If the sender node has knowledge of a route that has high likelihood
  of meeting the tunnel's QoS requirements, or that makes efficient use
  of network resources, or that satisfies some policy criteria, the
  node can decide to use the route for some or all of its sessions.  To
  do this, the sender node adds an EXPLICIT_ROUTE object to the RSVP
  Path message.  The EXPLICIT_ROUTE object specifies the route as a
  sequence of abstract nodes.

  If, after a session has been successfully established, the sender
  node discovers a better route, the sender can dynamically reroute the
  session by simply changing the EXPLICIT_ROUTE object.  If problems
  are encountered with an EXPLICIT_ROUTE object, either because it
  causes a routing loop or because some intermediate routers do not
  support it, the sender node is notified.

  By adding a RECORD_ROUTE object to the Path message, the sender node
  can receive information about the actual route that the LSP tunnel
  traverses.  The sender node can also use this object to request



Awduche, et al.             Standards Track                     [Page 8]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  notification from the network concerning changes to the routing path.
  The RECORD_ROUTE object is analogous to a path vector, and hence can
  be used for loop detection.

  Finally, a SESSION_ATTRIBUTE object can be added to Path messages to
  aid in session identification and diagnostics.  Additional control
  information, such as setup and hold priorities, resource affinities
  (see [3]), and local-protection, are also included in this object.

  Routers along the path may use the setup and hold priorities along
  with SENDER_TSPEC and any POLICY_DATA objects contained in Path
  messages as input to policy control.  For instance, in the traffic
  engineering application, it is very useful to use the Path message as
  a means of verifying that bandwidth exists at a particular priority
  along an entire path before preempting any lower priority
  reservations.  If a Path message is allowed to progress when there
  are insufficient resources, then there is a danger that lower
  priority reservations downstream of this point will unnecessarily be
  preempted in a futile attempt to service this request.

  When the EXPLICIT_ROUTE object (ERO) is present, the Path message is
  forwarded towards its destination along a path specified by the ERO.
  Each node along the path records the ERO in its path state block.
  Nodes may also modify the ERO before forwarding the Path message.  In
  this case the modified ERO SHOULD be stored in the path state block
  in addition to the received ERO.

  The LABEL_REQUEST object requests intermediate routers and receiver
  nodes to provide a label binding for the session.  If a node is
  incapable of providing a label binding, it sends a PathErr message
  with an "unknown object class" error.  If the LABEL_REQUEST object is
  not supported end to end, the sender node will be notified by the
  first node which does not provide this support.

  The destination node of a label-switched path responds to a
  LABEL_REQUEST by including a LABEL object in its response RSVP Resv
  message.  The LABEL object is inserted in the filter spec list
  immediately following the filter spec to which it pertains.

  The Resv message is sent back upstream towards the sender, following
  the path state created by the Path message, in reverse order.  Note
  that if the path state was created by use of an ERO, then the Resv
  message will follow the reverse path of the ERO.

  Each node that receives a Resv message containing a LABEL object uses
  that label for outgoing traffic associated with this LSP tunnel.  If
  the node is not the sender, it allocates a new label and places that
  label in the corresponding LABEL object of the Resv message which it



Awduche, et al.             Standards Track                     [Page 9]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  sends upstream to the PHOP.  The label sent upstream in the LABEL
  object is the label which this node will use to identify incoming
  traffic associated with this LSP tunnel.  This label also serves as
  shorthand for the Filter Spec.  The node can now update its "Incoming
  Label Map" (ILM), which is used to map incoming labeled packets to a
  "Next Hop Label Forwarding Entry" (NHLFE), see [2].

  When the Resv message propagates upstream to the sender node, a
  label-switched path is effectively established.

2.3. Service Classes

  This document does not restrict the type of Integrated Service
  requests for reservations.  However, an implementation SHOULD support
  the Controlled-Load service [4] and the Null Service [16].

2.4. Reservation Styles

  The receiver node can select from among a set of possible reservation
  styles for each session, and each RSVP session must have a particular
  style.  Senders have no influence on the choice of reservation style.
  The receiver can choose different reservation styles for different
  LSPs.

  An RSVP session can result in one or more LSPs, depending on the
  reservation style chosen.

  Some reservation styles, such as FF, dedicate a particular
  reservation to an individual sender node.  Other reservation styles,
  such as WF and SE, can share a reservation among several sender
  nodes.  The following sections discuss the different reservation
  styles and their advantages and disadvantages.  A more detailed
  discussion of reservation styles can be found in [1].

2.4.1. Fixed Filter (FF) Style

  The Fixed Filter (FF) reservation style creates a distinct
  reservation for traffic from each sender that is not shared by other
  senders.  This style is common for applications in which traffic from
  each sender is likely to be concurrent and independent.  The total
  amount of reserved bandwidth on a link for sessions using FF is the
  sum of the reservations for the individual senders.

  Because each sender has its own reservation, a unique label is
  assigned to each sender.  This can result in a point-to-point LSP
  between every sender/receiver pair.





Awduche, et al.             Standards Track                    [Page 10]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


2.4.2. Wildcard Filter (WF) Style

  With the Wildcard Filter (WF) reservation style, a single shared
  reservation is used for all senders to a session.  The total
  reservation on a link remains the same regardless of the number of
  senders.

  A single multipoint-to-point label-switched-path is created for all
  senders to the session.  On links that senders to the session share,
  a single label value is allocated to the session.  If there is only
  one sender, the LSP looks like a normal point-to-point connection.
  When multiple senders are present, a multipoint-to-point LSP (a
  reversed tree) is created.

  This style is useful for applications in which not all senders send
  traffic at the same time.  A phone conference, for example, is an
  application where not all speakers talk at the same time.  If,
  however, all senders send simultaneously, then there is no means of
  getting the proper reservations made.  Either the reserved bandwidth
  on links close to the destination will be less than what is required
  or then the reserved bandwidth on links close to some senders will be
  greater than what is required.  This restricts the applicability of
  WF for traffic engineering purposes.

  Furthermore, because of the merging rules of WF, EXPLICIT_ROUTE
  objects cannot be used with WF reservations.  As a result of this
  issue and the lack of applicability to traffic engineering, use of WF
  is not considered in this document.

2.4.3. Shared Explicit (SE) Style

  The Shared Explicit (SE) style allows a receiver to explicitly
  specify the senders to be included in a reservation.  There is a
  single reservation on a link for all the senders listed.  Because
  each sender is explicitly listed in the Resv message, different
  labels may be assigned to different senders, thereby creating
  separate LSPs.

  SE style reservations can be provided using multipoint-to-point
  label-switched-path or LSP per sender.  Multipoint-to-point LSPs may
  be used when path messages do not carry the EXPLICIT_ROUTE object, or
  when Path messages have identical EXPLICIT_ROUTE objects.  In either
  of these cases a common label may be assigned.








Awduche, et al.             Standards Track                    [Page 11]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Path messages from different senders can each carry their own ERO,
  and the paths taken by the senders can converge and diverge at any
  point in the network topology.  When Path messages have differing
  EXPLICIT_ROUTE objects, separate LSPs for each EXPLICIT_ROUTE object
  must be established.

2.5. Rerouting Traffic Engineered Tunnels

  One of the requirements for Traffic Engineering is the capability to
  reroute an established TE tunnel under a number of conditions, based
  on administrative policy.  For example, in some contexts, an
  administrative policy may dictate that a given TE tunnel is to be
  rerouted when a more "optimal" route becomes available.  Another
  important context when TE tunnel reroute is usually required is upon
  failure of a resource along the TE tunnel's established path.  Under
  some policies, it may also be necessary to return the TE tunnel to
  its original path when the failed resource becomes re-activated.

  In general, it is highly desirable not to disrupt traffic, or
  adversely impact network operations while TE tunnel rerouting is in
  progress.  This adaptive and smooth rerouting requirement
  necessitates establishing a new LSP tunnel and transferring traffic
  from the old LSP tunnel onto it before tearing down the old LSP
  tunnel.  This concept is called "make-before-break." A problem can
  arise because the old and new LSP tunnels might compete with each
  other for resources on network segments which they have in common.
  Depending on availability of resources, this competition can cause
  Admission Control to prevent the new LSP tunnel from being
  established.  An advantage of using RSVP to establish LSP tunnels is
  that it solves this problem very elegantly.

  To support make-before-break in a smooth fashion, it is necessary
  that on links that are common to the old and new LSPs, resources used
  by the old LSP tunnel should not be released before traffic is
  transitioned to the new LSP tunnel, and reservations should not be
  counted twice because this might cause Admission Control to reject
  the new LSP tunnel.

  A similar situation can arise when one wants to increase the
  bandwidth of a TE tunnel.  The new reservation will be for the full
  amount needed, but the actual allocation needed is only the delta
  between the new and old bandwidth.  If policy is being applied to
  PATH messages by intermediate nodes, then a PATH message requesting
  too much bandwidth will be rejected.  In this situation simply
  increasing the bandwidth request without changing the
  SENDER_TEMPLATE, could result in a tunnel being torn down, depending
  upon local policy.




Awduche, et al.             Standards Track                    [Page 12]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The combination of the LSP_TUNNEL SESSION object and the SE
  reservation style naturally accommodates smooth transitions in
  bandwidth and routing.  The idea is that the old and new LSP tunnels
  share resources along links which they have in common.  The
  LSP_TUNNEL SESSION object is used to narrow the scope of the RSVP
  session to the particular TE tunnel in question.  To uniquely
  identify a TE tunnel, we use the combination of the destination IP
  address (an address of the node which is the egress of the tunnel), a
  Tunnel ID, and the tunnel ingress node's IP address, which is placed
  in the Extended Tunnel ID field.

  During the reroute or bandwidth-increase operation, the tunnel
  ingress needs to appear as two different senders to the RSVP session.
  This is achieved by the inclusion of the "LSP ID", which is carried
  in the SENDER_TEMPLATE and FILTER_SPEC objects.  Since the semantics
  of these objects are changed, a new C-Types are assigned.

  To effect a reroute, the ingress node picks a new LSP ID and forms a
  new SENDER_TEMPLATE.  The ingress node then creates a new ERO to
  define the new path.  Thereafter the node sends a new Path Message
  using the original SESSION object and the new SENDER_TEMPLATE and
  ERO.  It continues to use the old LSP and refresh the old Path
  message.  On links that are not held in common, the new Path message
  is treated as a conventional new LSP tunnel setup.  On links held in
  common, the shared SESSION object and SE style allow the LSP to be
  established sharing resources with the old LSP.  Once the ingress
  node receives a Resv message for the new LSP, it can transition
  traffic to it and tear down the old LSP.

  To effect a bandwidth-increase, a new Path Message with a new LSP_ID
  can be used to attempt a larger bandwidth reservation while the
  current LSP_ID continues to be refreshed to ensure that the
  reservation is not lost if the larger reservation fails.

2.6. Path MTU

  Standard RSVP [1] and Int-Serv [11] provide the RSVP sender with the
  minimum MTU available between the sender and the receiver.  This path
  MTU identification capability is also provided for LSPs established
  via RSVP.

  Path MTU information is carried, depending on which is present, in
  the Integrated Services or Null Service objects.  When using
  Integrated Services objects, path MTU is provided based on the
  procedures defined in [11].  Path MTU identification when using Null
  Service objects is defined in [16].





Awduche, et al.             Standards Track                    [Page 13]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  With standard RSVP, the path MTU information is used by the sender to
  check which IP packets exceed the path MTU.  For packets that exceed
  the path MTU, the sender either fragments the packets or, when the IP
  datagram has the "Don't Fragment" bit set, issues an ICMP destination
  unreachable message.  This path MTU related handling is also required
  for LSPs established via RSVP.

  The following algorithm applies to all unlabeled IP datagrams and to
  any labeled packets which the node knows to be IP datagrams, to which
  labels need to be added before forwarding.  For labeled packets the
  bottom of stack is found, the IP header examined.

  Using the terminology defined in [5], an LSR MUST execute the
  following algorithm:

  1. Let N be the number of bytes in the label stack (i.e, 4 times the
     number of label stack entries) including labels to be added by
     this node.

  2. Let M be the smaller of the "Maximum Initially Labeled IP Datagram
     Size" or of (Path MTU - N).

  When the size of an IPv4 datagram (without labels) exceeds the value
     of M,

     If the DF bit is not set in the IPv4 header, then

        (a) the datagram MUST be broken into fragments, each of whose
            size is no greater than M, and

        (b) each fragment MUST be labeled and then forwarded.

     If the DF bit is set in the IPv4 header, then

        (a) the datagram MUST NOT be forwarded

        (b) Create an ICMP Destination Unreachable Message:

             i. set its Code field [12] to "Fragmentation Required and
                DF Set",
            ii. set its Next-Hop MTU field [13] to M

        (c) If possible, transmit the ICMP Destination Unreachable
            Message to the source of the of the discarded datagram.

     When the size of an IPv6 datagram (without labels) exceeds the
            value of M,




Awduche, et al.             Standards Track                    [Page 14]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


        (a) the datagram MUST NOT be forwarded

        (b) Create an ICMP Packet too Big Message with the Next-Hop
            link MTU field [14] set to M

        (c) If possible, transmit the ICMP Packet too Big Message to
            the source of the of the discarded datagram.

3. LSP Tunnel related Message Formats

  Five new objects are defined in this section:

     Object name          Applicable RSVP messages
     ---------------      ------------------------
     LABEL_REQUEST          Path
     LABEL                  Resv
     EXPLICIT_ROUTE         Path
     RECORD_ROUTE           Path, Resv
     SESSION_ATTRIBUTE      Path

  New C-Types are also assigned for the SESSION, SENDER_TEMPLATE, and
  FILTER_SPEC, objects.

  Detailed descriptions of the new objects are given in later sections.
  All new objects are OPTIONAL with respect to RSVP.  An implementation
  can choose to support a subset of objects.  However, the
  LABEL_REQUEST and LABEL objects are mandatory with respect to this
  specification.

  The LABEL and RECORD_ROUTE objects, are sender specific.  In Resv
  messages they MUST appear after the associated FILTER_SPEC and prior
  to any subsequent FILTER_SPEC.

  The relative placement of EXPLICIT_ROUTE, LABEL_REQUEST, and
  SESSION_ATTRIBUTE objects is simply a recommendation.  The ordering
  of these objects is not important, so an implementation MUST be
  prepared to accept objects in any order.

3.1. Path Message

  The format of the Path message is as follows:

     <Path Message> ::=       <Common Header> [ <INTEGRITY> ]
                              <SESSION> <RSVP_HOP>
                              <TIME_VALUES>
                              [ <EXPLICIT_ROUTE> ]
                              <LABEL_REQUEST>
                              [ <SESSION_ATTRIBUTE> ]



Awduche, et al.             Standards Track                    [Page 15]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


                              [ <POLICY_DATA> ... ]
                              <sender descriptor>

     <sender descriptor> ::=  <SENDER_TEMPLATE> <SENDER_TSPEC>
                              [ <ADSPEC> ]
                              [ <RECORD_ROUTE> ]

3.2. Resv Message

  The format of the Resv message is as follows:

     <Resv Message> ::=       <Common Header> [ <INTEGRITY> ]
                              <SESSION>  <RSVP_HOP>
                              <TIME_VALUES>
                              [ <RESV_CONFIRM> ]  [ <SCOPE> ]
                              [ <POLICY_DATA> ... ]
                              <STYLE> <flow descriptor list>

     <flow descriptor list> ::= <FF flow descriptor list>
                              | <SE flow descriptor>


     <FF flow descriptor list> ::= <FLOWSPEC> <FILTER_SPEC>
                              <LABEL> [ <RECORD_ROUTE> ]
                              | <FF flow descriptor list>
                              <FF flow descriptor>

     <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC> <LABEL>
                              [ <RECORD_ROUTE> ]

     <SE flow descriptor> ::= <FLOWSPEC> <SE filter spec list>

     <SE filter spec list> ::= <SE filter spec>
                              | <SE filter spec list> <SE filter spec>

     <SE filter spec> ::=     <FILTER_SPEC> <LABEL> [ <RECORD_ROUTE> ]

     Note:  LABEL and RECORD_ROUTE (if present), are bound to the
            preceding FILTER_SPEC.  No more than one LABEL and/or
            RECORD_ROUTE may follow each FILTER_SPEC.











Awduche, et al.             Standards Track                    [Page 16]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4. LSP Tunnel related Objects

4.1. Label Object

  Labels MAY be carried in Resv messages.  For the FF and SE styles, a
  label is associated with each sender.  The label for a sender MUST
  immediately follow the FILTER_SPEC for that sender in the Resv
  message.

  The LABEL object has the following format:

  LABEL class = 16, C_Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           (top label)                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  The contents of a LABEL is a single label, encoded in 4 octets.  Each
  generic MPLS label is an unsigned integer in the range 0 through
  1048575.  Generic MPLS labels and FR labels are encoded right aligned
  in 4 octets.  ATM labels are encoded with the VPI right justified in
  bits 0-15 and the VCI right justified in bits 16-31.

4.1.1. Handling Label Objects in Resv messages

  In MPLS a node may support multiple label spaces, perhaps associating
  a unique space with each incoming interface.  For the purposes of the
  following discussion, the term "same label" means the identical label
  value drawn from the identical label space.  Further, the following
  applies only to unicast sessions.

  Labels received in Resv messages on different interfaces are always
  considered to be different even if the label value is the same.

4.1.1.1. Downstream

  The downstream node selects a label to represent the flow.  If a
  label range has been specified in the label request, the label MUST
  be drawn from that range.  If no label is available the node sends a
  PathErr message with an error code of "routing problem" and an error
  value of "label allocation failure".

  If a node receives a Resv message that has assigned the same label
  value to multiple senders, then that node MAY also assign a single
  value to those same senders or to any subset of those senders.  Note




Awduche, et al.             Standards Track                    [Page 17]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  that if a node intends to police individual senders to a session, it
  MUST assign unique labels to those senders.

  In the case of ATM, one further condition applies.  Some ATM nodes
  are not capable of merging streams.  These nodes MAY indicate this by
  setting a bit in the label request to zero.  The M-bit in the
  LABEL_REQUEST object of C-Type 2, label request with ATM label range,
  serves this purpose.  The M-bit SHOULD be set by nodes which are
  merge capable.  If for any senders the M-bit is not set, the
  downstream node MUST assign unique labels to those senders.

  Once a label is allocated, the node formats a new LABEL object.  The
  node then sends the new LABEL object as part of the Resv message to
  the previous hop.  The node SHOULD be prepared to forward packets
  carrying the assigned label prior to sending the Resv message.  The
  LABEL object SHOULD be kept in the Reservation State Block.  It is
  then used in the next Resv refresh event for formatting the Resv
  message.

  A node is expected to send a Resv message before its refresh timers
  expire if the contents of the LABEL object change.

4.1.1.2. Upstream

  A node uses the label carried in the LABEL object as the outgoing
  label associated with the sender.  The router allocates a new label
  and binds it to the incoming interface of this session/sender.  This
  is the same interface that the router uses to forward Resv messages
  to the previous hops.

  Several circumstance can lead to an unacceptable label.

     1. the node is a merge incapable ATM switch but the downstream
        node has assigned the same label to two senders

     2. The implicit null label was assigned, but the node is not
        capable of doing a penultimate pop for the associated L3PID

     3. The assigned label is outside the requested label range

  In any of these events the node send a ResvErr message with an error
  code of "routing problem" and an error value of "unacceptable label
  value".








Awduche, et al.             Standards Track                    [Page 18]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.1.2. Non-support of the Label Object

  Under normal circumstances, a node should never receive a LABEL
  object in a Resv message unless it had included a LABEL_REQUEST
  object in the corresponding Path message.  However, an RSVP router
  that does not recognize the LABEL object sends a ResvErr with the
  error code "Unknown object class" toward the receiver.  This causes
  the reservation to fail.

4.2. Label Request Object

  The Label Request Class is 19.  Currently there are three possible
  C_Types.  Type 1 is a Label Request without label range.  Type 2 is a
  label request with an ATM label range.  Type 3 is a label request
  with a Frame Relay label range.  The LABEL_REQUEST object formats are
  shown below.

4.2.1. Label Request without Label Range

  Class = 19, C_Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Reserved            |             L3PID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Reserved

        This field is reserved.  It MUST be set to zero on transmission
        and MUST be ignored on receipt.

     L3PID

        an identifier of the layer 3 protocol using this path.
        Standard Ethertype values are used.















Awduche, et al.             Standards Track                    [Page 19]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.2.2. Label Request with ATM Label Range

  Class = 19, C_Type = 2

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Reserved            |             L3PID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |M| Res |    Minimum VPI        |      Minimum VCI              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Res  |    Maximum VPI        |      Maximum VCI              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Reserved (Res)

        This field is reserved.  It MUST be set to zero on transmission
        and MUST be ignored on receipt.

     L3PID

        an identifier of the layer 3 protocol using this path.
        Standard Ethertype values are used.

     M

        Setting this bit to one indicates that the node is capable of
        merging in the data plane

     Minimum VPI (12 bits)

        This 12 bit field specifies the lower bound of a block of
        Virtual Path Identifiers that is supported on the originating
        switch.  If the VPI is less than 12-bits it MUST be right
        justified in this field and preceding bits MUST be set to zero.

     Minimum VCI (16 bits)

        This 16 bit field specifies the lower bound of a block of
        Virtual Connection Identifiers that is supported on the
        originating switch.  If the VCI is less than 16-bits it MUST be
        right justified in this field and preceding bits MUST be set to
        zero.








Awduche, et al.             Standards Track                    [Page 20]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Maximum VPI (12 bits)

        This 12 bit field specifies the upper bound of a block of
        Virtual Path Identifiers that is supported on the originating
        switch.  If the VPI is less than 12-bits it MUST be right
        justified in this field and preceding bits MUST be set to zero.

     Maximum VCI (16 bits)

        This 16 bit field specifies the upper bound of a block of
        Virtual Connection Identifiers that is supported on the
        originating switch.  If the VCI is less than 16-bits it MUST be
        right justified in this field and preceding bits MUST be set to
        zero.

4.2.3. Label Request with Frame Relay Label Range

  Class = 19, C_Type = 3

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Reserved            |             L3PID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Reserved    |DLI|                     Minimum DLCI            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Reserved        |                     Maximum DLCI            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Reserved

        This field is reserved.  It MUST be set to zero on transmission
        and ignored on receipt.

     L3PID

        an identifier of the layer 3 protocol using this path.
        Standard Ethertype values are used.

     DLI

        DLCI Length Indicator.  The number of bits in the DLCI.  The
        following values are supported:

                  Len    DLCI bits

                   0        10
                   2        23



Awduche, et al.             Standards Track                    [Page 21]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Minimum DLCI

        This 23-bit field specifies the lower bound of a block of Data
        Link Connection Identifiers (DLCIs) that is supported on the
        originating switch.  The DLCI MUST be right justified in this
        field and unused bits MUST be set to 0.

     Maximum DLCI

        This 23-bit field specifies the upper bound of a block of Data
        Link Connection Identifiers (DLCIs) that is supported on the
        originating switch.  The DLCI MUST be right justified in this
        field and unused bits MUST be set to 0.

4.2.4. Handling of LABEL_REQUEST

  To establish an LSP tunnel the sender creates a Path message with a
  LABEL_REQUEST object.  The LABEL_REQUEST object indicates that a
  label binding for this path is requested and provides an indication
  of the network layer protocol that is to be carried over this path.
  This permits non-IP network layer protocols to be sent down an LSP.
  This information can also be useful in actual label allocation,
  because some reserved labels are protocol specific, see [5].

  The LABEL_REQUEST SHOULD be stored in the Path State Block, so that
  Path refresh messages will also contain the LABEL_REQUEST object.
  When the Path message reaches the receiver, the presence of the
  LABEL_REQUEST object triggers the receiver to allocate a label and to
  place the label in the LABEL object for the corresponding Resv
  message.  If a label range was specified, the label MUST be allocated
  from that range.  A receiver that accepts a LABEL_REQUEST object MUST
  include a LABEL object in Resv messages pertaining to that Path
  message.  If a LABEL_REQUEST object was not present in the Path
  message, a node MUST NOT include a LABEL object in a Resv message for
  that Path message's session and PHOP.

  A node that sends a LABEL_REQUEST object MUST be ready to accept and
  correctly process a LABEL object in the corresponding Resv messages.

  A node that recognizes a LABEL_REQUEST object, but that is unable to
  support it (possibly because of a failure to allocate labels) SHOULD
  send a PathErr with the error code "Routing problem" and the error
  value "MPLS label allocation failure."  This includes the case where
  a label range has been specified and a label cannot be allocated from
  that range.






Awduche, et al.             Standards Track                    [Page 22]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  A node which receives and forwards a Path message each with a
  LABEL_REQUEST object, MUST copy the L3PID from the received
  LABEL_REQUEST object to the forwarded LABEL_REQUEST object.

  If the receiver cannot support the protocol L3PID, it SHOULD send a
  PathErr with the error code "Routing problem" and the error value
  "Unsupported L3PID."  This causes the RSVP session to fail.

4.2.5. Non-support of the Label Request Object

  An RSVP router that does not recognize the LABEL_REQUEST object sends
  a PathErr with the error code "Unknown object class" toward the
  sender.  An RSVP router that recognizes the LABEL_REQUEST object but
  does not recognize the C_Type sends a PathErr with the error code
  "Unknown object C_Type" toward the sender.  This causes the path
  setup to fail.  The sender should notify management that a LSP cannot
  be established and possibly take action to continue the reservation
  without the LABEL_REQUEST.

  RSVP is designed to cope gracefully with non-RSVP routers anywhere
  between senders and receivers.  However, obviously, non-RSVP routers
  cannot convey labels via RSVP.  This means that if a router has a
  neighbor that is known to not be RSVP capable, the router MUST NOT
  advertise the LABEL_REQUEST object when sending messages that pass
  through the non-RSVP routers.  The router SHOULD send a PathErr back
  to the sender, with the error code "Routing problem" and the error
  value "MPLS being negotiated, but a non-RSVP capable router stands in
  the path."  This same message SHOULD be sent, if a router receives a
  LABEL_REQUEST object in a message from a non-RSVP capable router.
  See [1] for a description of how a downstream router can determine
  the presence of non-RSVP routers.

4.3. Explicit Route Object

  Explicit routes are specified via the EXPLICIT_ROUTE object (ERO).
  The Explicit Route Class is 20.  Currently one C_Type is defined,
  Type 1 Explicit Route.  The EXPLICIT_ROUTE object has the following
  format:













Awduche, et al.             Standards Track                    [Page 23]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Class = 20, C_Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  //                        (Subobjects)                          //
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  Subobjects

  The contents of an EXPLICIT_ROUTE object are a series of variable-
  length data items called subobjects.  The subobjects are defined in
  section 4.3.3 below.

  If a Path message contains multiple EXPLICIT_ROUTE objects, only the
  first object is meaningful.  Subsequent EXPLICIT_ROUTE objects MAY be
  ignored and SHOULD NOT be propagated.

4.3.1. Applicability

  The EXPLICIT_ROUTE object is intended to be used only for unicast
  situations.  Applications of explicit routing to multicast are a
  topic for further research.

  The EXPLICIT_ROUTE object is to be used only when all routers along
  the explicit route support RSVP and the EXPLICIT_ROUTE object.  The
  EXPLICIT_ROUTE object is assigned a class value of the form 0bbbbbbb.
  RSVP routers that do not support the object will therefore respond
  with an "Unknown Object Class" error.

4.3.2. Semantics of the Explicit Route Object

  An explicit route is a particular path in the network topology.
  Typically, the explicit route is determined by a node, with the
  intent of directing traffic along that path.

  An explicit route is described as a list of groups of nodes along the
  explicit route.  In addition to the ability to identify specific
  nodes along the path, an explicit route can identify a group of nodes
  that must be traversed along the path.  This capability allows the
  routing system a significant amount of local flexibility in
  fulfilling a request for an explicit route.  This capability allows
  the generator of the explicit route to have imperfect information
  about the details of the path.





Awduche, et al.             Standards Track                    [Page 24]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The explicit route is encoded as a series of subobjects contained in
  an EXPLICIT_ROUTE object.  Each subobject identifies a group of nodes
  in the explicit route.  An explicit route is thus a specification of
  groups of nodes to be traversed.

  To formalize the discussion, we call each group of nodes an abstract
  node.  Thus, we say that an explicit route is a specification of a
  set of abstract nodes to be traversed.  If an abstract node consists
  of only one node, we refer to it as a simple abstract node.

  As an example of the concept of abstract nodes, consider an explicit
  route that consists solely of Autonomous System number subobjects.
  Each subobject corresponds to an Autonomous System in the global
  topology.  In this case, each Autonomous System is an abstract node,
  and the explicit route is a path that includes each of the specified
  Autonomous Systems.  There may be multiple hops within each
  Autonomous System, but these are opaque to the source node for the
  explicit route.

4.3.3. Subobjects

  The contents of an EXPLICIT_ROUTE object are a series of variable-
  length data items called subobjects.  Each subobject has the form:

   0                   1
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
  |L|    Type     |     Length    | (Subobject contents)          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+

     L

        The L bit is an attribute of the subobject.  The L bit is set
        if the subobject represents a loose hop in the explicit route.
        If the bit is not set, the subobject represents a strict hop in
        the explicit route.

     Type

        The Type indicates the type of contents of the subobject.
        Currently defined values are:

                  1   IPv4 prefix
                  2   IPv6 prefix
                 32   Autonomous system number






Awduche, et al.             Standards Track                    [Page 25]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Length

        The Length contains the total length of the subobject in bytes,
        including the L, Type and Length fields.  The Length MUST be at
        least 4, and MUST be a multiple of 4.

4.3.3.1. Strict and Loose Subobjects

  The L bit in the subobject is a one-bit attribute.  If the L bit is
  set, then the value of the attribute is 'loose.'  Otherwise, the
  value of the attribute is 'strict.'  For brevity, we say that if the
  value of the subobject attribute is 'loose' then it is a 'loose
  subobject.'  Otherwise, it's a 'strict subobject.'  Further, we say
  that the abstract node of a strict or loose subobject is a strict or
  a loose node, respectively.  Loose and strict nodes are always
  interpreted relative to their prior abstract nodes.

  The path between a strict node and its preceding node MUST include
  only network nodes from the strict node and its preceding abstract
  node.

  The path between a loose node and its preceding node MAY include
  other network nodes that are not part of the strict node or its
  preceding abstract node.

4.3.3.2. Subobject 1:  IPv4 prefix

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |L|    Type     |     Length    | IPv4 address (4 bytes)        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv4 address (continued)      | Prefix Length |      Resvd    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     L

        The L bit is an attribute of the subobject.  The L bit is set
        if the subobject represents a loose hop in the explicit route.
        If the bit is not set, the subobject represents a strict hop in
        the explicit route.

     Type

        0x01  IPv4 address






Awduche, et al.             Standards Track                    [Page 26]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Length

        The Length contains the total length of the subobject in bytes,
        including the Type and Length fields.  The Length is always 8.

     IPv4 address

        An IPv4 address.  This address is treated as a prefix based on
        the prefix length value below.  Bits beyond the prefix are
        ignored on receipt and SHOULD be set to zero on transmission.

     Prefix length

        Length in bits of the IPv4 prefix

     Padding

        Zero on transmission.  Ignored on receipt.

  The contents of an IPv4 prefix subobject are a 4-octet IPv4 address,
  a 1-octet prefix length, and a 1-octet pad.  The abstract node
  represented by this subobject is the set of nodes that have an IP
  address which lies within this prefix.  Note that a prefix length of
  32 indicates a single IPv4 node.

4.3.3.3. Subobject 2:  IPv6 Prefix

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |L|    Type     |     Length    | IPv6 address (16 bytes)       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)      | Prefix Length |      Resvd    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     L

        The L bit is an attribute of the subobject.  The L bit is set
        if the subobject represents a loose hop in the explicit route.
        If the bit is not set, the subobject represents a strict hop in
        the explicit route.




Awduche, et al.             Standards Track                    [Page 27]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Type

        0x02  IPv6 address

     Length

        The Length contains the total length of the subobject in bytes,
        including the Type and Length fields.  The Length is always 20.

     IPv6 address

        An IPv6 address.  This address is treated as a prefix based on
        the prefix length value below.  Bits beyond the prefix are
        ignored on receipt and SHOULD be set to zero on transmission.

     Prefix Length

        Length in bits of the IPv6 prefix.

     Padding

        Zero on transmission.  Ignored on receipt.

  The contents of an IPv6 prefix subobject are a 16-octet IPv6 address,
  a 1-octet prefix length, and a 1-octet pad.  The abstract node
  represented by this subobject is the set of nodes that have an IP
  address which lies within this prefix.  Note that a prefix length of
  128 indicates a single IPv6 node.

4.3.3.4. Subobject 32:  Autonomous System Number

  The contents of an Autonomous System (AS) number subobject are a 2-
  octet AS number.  The abstract node represented by this subobject is
  the set of nodes belonging to the autonomous system.

  The length of the AS number subobject is 4 octets.

4.3.4. Processing of the Explicit Route Object

4.3.4.1. Selection of the Next Hop

  A node receiving a Path message containing an EXPLICIT_ROUTE object
  must determine the next hop for this path.  This is necessary because
  the next abstract node along the explicit route might be an IP subnet
  or an Autonomous System.  Therefore, selection of this next hop may
  involve a decision from a set of feasible alternatives.  The criteria
  used to make a selection from feasible alternatives is implementation
  dependent and can also be impacted by local policy, and is beyond the



Awduche, et al.             Standards Track                    [Page 28]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  scope of this specification.  However, it is assumed that each node
  will make a best effort attempt to determine a loop-free path.  Note
  that paths so determined can be overridden by local policy.

  To determine the next hop for the path, a node performs the following
  steps:

  1) The node receiving the RSVP message MUST first evaluate the first
     subobject.  If the node is not part of the abstract node described
     by the first subobject, it has received the message in error and
     SHOULD return a "Bad initial subobject" error.  If there is no
     first subobject, the message is also in error and the system
     SHOULD return a "Bad EXPLICIT_ROUTE object" error.

  2) If there is no second subobject, this indicates the end of the
     explicit route.  The EXPLICIT_ROUTE object SHOULD be removed from
     the Path message.  This node may or may not be the end of the
     path.  Processing continues with section 4.3.4.2, where a new
     EXPLICIT_ROUTE object MAY be added to the Path message.

  3) Next, the node evaluates the second subobject.  If the node is
     also a part of the abstract node described by the second
     subobject, then the node deletes the first subobject and continues
     processing with step 2, above.  Note that this makes the second
     subobject into the first subobject of the next iteration and
     allows the node to identify the next abstract node on the path of
     the message after possible repeated application(s) of steps 2 and
     3.

  4) Abstract Node Border Case: The node determines whether it is
     topologically adjacent to the abstract node described by the
     second subobject.  If so, the node selects a particular next hop
     which is a member of the abstract node.  The node then deletes the
     first subobject and continues processing with section 4.3.4.2.

  5) Interior of the Abstract Node Case: Otherwise, the node selects a
     next hop within the abstract node of the first subobject (which
     the node belongs to) that is along the path to the abstract node
     of the second subobject (which is the next abstract node).  If no
     such path exists then there are two cases:

  5a) If the second subobject is a strict subobject, there is an error
      and the node SHOULD return a "Bad strict node" error.

  5b) Otherwise, if the second subobject is a loose subobject, the node
      selects any next hop that is along the path to the next abstract
      node.  If no path exists, there is an error, and the node SHOULD
      return a "Bad loose node" error.



Awduche, et al.             Standards Track                    [Page 29]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  6) Finally, the node replaces the first subobject with any subobject
     that denotes an abstract node containing the next hop.  This is
     necessary so that when the explicit route is received by the next
     hop, it will be accepted.

4.3.4.2. Adding subobjects to the Explicit Route Object

  After selecting a next hop, the node MAY alter the explicit route in
  the following ways.

  If, as part of executing the algorithm in section 4.3.4.1, the

  EXPLICIT_ROUTE object is removed, the node MAY add a new
  EXPLICIT_ROUTE object.

  Otherwise, if the node is a member of the abstract node for the first
  subobject, a series of subobjects MAY be inserted before the first
  subobject or MAY replace the first subobject.  Each subobject in this
  series MUST denote an abstract node that is a subset of the current
  abstract node.

  Alternately, if the first subobject is a loose subobject, an
  arbitrary series of subobjects MAY be inserted prior to the first
  subobject.

4.3.5. Loops

  While the EXPLICIT_ROUTE object is of finite length, the existence of
  loose nodes implies that it is possible to construct forwarding loops
  during transients in the underlying routing protocol.  This can be
  detected by the originator of the explicit route through the use of
  another opaque route object called the RECORD_ROUTE object.  The
  RECORD_ROUTE object is used to collect detailed path information and
  is useful for loop detection and for diagnostics.

4.3.6. Forward Compatibility

  It is anticipated that new subobjects may be defined over time.  A
  node which encounters an unrecognized subobject during its normal ERO
  processing sends a PathErr with the error code "Routing Error" and
  error value of "Bad Explicit Route Object" toward the sender.  The
  EXPLICIT_ROUTE object is included, truncated (on the left) to the
  offending subobject.  The presence of an unrecognized subobject which
  is not encountered in a node's ERO processing SHOULD be ignored.  It
  is passed forward along with the rest of the remaining ERO stack.






Awduche, et al.             Standards Track                    [Page 30]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.3.7. Non-support of the Explicit Route Object

  An RSVP router that does not recognize the EXPLICIT_ROUTE object
  sends a PathErr with the error code "Unknown object class" toward the
  sender.  This causes the path setup to fail.  The sender should
  notify management that a LSP cannot be established and possibly take
  action to continue the reservation without the EXPLICIT_ROUTE or via
  a different explicit route.

4.4. Record Route Object

  Routes can be recorded via the RECORD_ROUTE object (RRO).
  Optionally, labels may also be recorded.  The Record Route Class is
  21.  Currently one C_Type is defined, Type 1 Record Route.  The
  RECORD_ROUTE object has the following format:

  Class = 21, C_Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  //                        (Subobjects)                          //
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Subobjects

        The contents of a RECORD_ROUTE object are a series of
        variable-length data items called subobjects.  The subobjects
        are defined in section 4.4.1 below.

  The RRO can be present in both RSVP Path and Resv messages.  If a
  Path message contains multiple RROs, only the first RRO is
  meaningful.  Subsequent RROs SHOULD be ignored and SHOULD NOT be
  propagated.  Similarly, if in a Resv message multiple RROs are
  encountered following a FILTER_SPEC before another FILTER_SPEC is
  encountered, only the first RRO is meaningful.  Subsequent RROs
  SHOULD be ignored and SHOULD NOT be propagated.

4.4.1. Subobjects

  The contents of a RECORD_ROUTE object are a series of variable-length
  data items called subobjects.  Each subobject has its own Length
  field.  The length contains the total length of the subobject in
  bytes, including the Type and Length fields.  The length MUST always
  be a multiple of 4, and at least 4.




Awduche, et al.             Standards Track                    [Page 31]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Subobjects are organized as a last-in-first-out stack.  The first
  subobject relative to the beginning of RRO is considered the top.
  The last subobject is considered the bottom.  When a new subobject is
  added, it is always added to the top.

  An empty RRO with no subobjects is considered illegal.

  Three kinds of subobjects are currently defined.

4.4.1.1. Subobject 1: IPv4 address

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      Type     |     Length    | IPv4 address (4 bytes)        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv4 address (continued)      | Prefix Length |      Flags    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Type

        0x01  IPv4 address

     Length

        The Length contains the total length of the subobject in bytes,
        including the Type and Length fields.  The Length is always 8.

     IPv4 address

        A 32-bit unicast, host address.  Any network-reachable
        interface address is allowed here.  Illegal addresses, such as
        certain loopback addresses, SHOULD NOT be used.

     Prefix length

        32

     Flags

        0x01  Local protection available

              Indicates that the link downstream of this node is
              protected via a local repair mechanism.  This flag can
              only be set if the Local protection flag was set in the
              SESSION_ATTRIBUTE object of the corresponding Path
              message.




Awduche, et al.             Standards Track                    [Page 32]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


        0x02  Local protection in use

              Indicates that a local repair mechanism is in use to
              maintain this tunnel (usually in the face of an outage
              of the link it was previously routed over).

4.4.1.2. Subobject 2: IPv6 address

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      Type     |     Length    | IPv6 address (16 bytes)       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)                                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | IPv6 address (continued)      | Prefix Length |      Flags    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Type

        0x02  IPv6 address

     Length

        The Length contains the total length of the subobject in bytes,
        including the Type and Length fields.  The Length is always 20.

     IPv6 address

        A 128-bit unicast host address.

     Prefix length

        128

     Flags

        0x01  Local protection available

              Indicates that the link downstream of this node is
              protected via a local repair mechanism.  This flag can
              only be set if the Local protection flag was set in the
              SESSION_ATTRIBUTE object of the corresponding Path
              message.



Awduche, et al.             Standards Track                    [Page 33]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


        0x02  Local protection in use

              Indicates that a local repair mechanism is in use to
              maintain this tunnel (usually in the face of an outage
              of the link it was previously routed over).

4.4.1.3. Subobject 3, Label

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     Type      |     Length    |    Flags      |   C-Type      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |       Contents of Label Object                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Type

        0x03  Label

     Length

        The Length contains the total length of the subobject in bytes,
        including the Type and Length fields.

     Flags

        0x01 = Global label
          This flag indicates that the label will be understood
          if received on any interface.

     C-Type

        The C-Type of the included Label Object.  Copied from the Label
        Object.

     Contents of Label Object

        The contents of the Label Object.  Copied from the Label Object

4.4.2. Applicability

  Only the procedures for use in unicast sessions are defined here.

  There are three possible uses of RRO in RSVP.  First, an RRO can
  function as a loop detection mechanism to discover L3 routing loops,
  or loops inherent in the explicit route.  The exact procedure for
  doing so is described later in this document.



Awduche, et al.             Standards Track                    [Page 34]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Second, an RRO collects up-to-date detailed path information hop-by-
  hop about RSVP sessions, providing valuable information to the sender
  or receiver.  Any path change (due to network topology changes) will
  be reported.

  Third, RRO syntax is designed so that, with minor changes, the whole
  object can be used as input to the EXPLICIT_ROUTE object.  This is
  useful if the sender receives RRO from the receiver in a Resv
  message, applies it to EXPLICIT_ROUTE object in the next Path message
  in order to "pin down session path".

4.4.3. Processing RRO

  Typically, a node initiates an RSVP session by adding the RRO to the
  Path message.  The initial RRO contains only one subobject - the
  sender's IP addresses.  If the node also desires label recording, it
  sets the Label_Recording flag in the SESSION_ATTRIBUTE object.

  When a Path message containing an RRO is received by an intermediate
  router, the router stores a copy of it in the Path State Block.  The
  RRO is then used in the next Path refresh event for formatting Path
  messages.  When a new Path message is to be sent, the router adds a
  new subobject to the RRO and appends the resulting RRO to the Path
  message before transmission.

  The newly added subobject MUST be this router's IP address.  The
  address to be added SHOULD be the interface address of the outgoing
  Path messages.  If there are multiple addresses to choose from, the
  decision is a local matter.  However, it is RECOMMENDED that the same
  address be chosen consistently.

  When the Label_Recording flag is set in the SESSION_ATTRIBUTE object,
  nodes doing route recording SHOULD include a Label Record subobject.
  If the node is using a global label space, then it SHOULD set the
  Global Label flag.

  The Label Record subobject is pushed onto the RECORD_ROUTE object
  prior to pushing on the node's IP address.  A node MUST NOT push on a
  Label Record subobject without also pushing on an IPv4 or IPv6
  subobject.

  Note that on receipt of the initial Path message, a node is unlikely
  to have a label to include.  Once a label is obtained, the node
  SHOULD include the label in the RRO in the next Path refresh event.

  If the newly added subobject causes the RRO to be too big to fit in a
  Path (or Resv) message, the RRO object SHALL be dropped from the
  message and message processing continues as normal.  A PathErr (or



Awduche, et al.             Standards Track                    [Page 35]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  ResvErr) message SHOULD be sent back to the sender (or receiver).  An
  error code of "Notify" and an error value of "RRO too large for MTU"
  is used.  If the receiver receives such a ResvErr, it SHOULD send a
  PathErr message with error code of "Notify" and an error value of
  "RRO notification".

  A sender receiving either of these error values SHOULD remove the RRO
  from the Path message.

  Nodes SHOULD resend the above PathErr or ResvErr message each n
  seconds where n is the greater of 15 and the refresh interval for the
  associated Path or RESV message.  The node MAY apply limits and/or
  back-off timers to limit the number of messages sent.

  An RSVP router can decide to send Path messages before its refresh
  time if the RRO in the next Path message is different from the
  previous one.  This can happen if the contents of the RRO received
  from the previous hop router changes or if this RRO is newly added to
  (or deleted from) the Path message.

  When the destination node of an RSVP session receives a Path message
  with an RRO, this indicates that the sender node needs route
  recording.  The destination node initiates the RRO process by adding
  an RRO to Resv messages.  The processing mirrors that of the Path
  messages.  The only difference is that the RRO in a Resv message
  records the path information in the reverse direction.

  Note that each node along the path will now have the complete route
  from source to destination.  The Path RRO will have the route from
  the source to this node; the Resv RRO will have the route from this
  node to the destination.  This is useful for network management.

  A received Path message without an RRO indicates that the sender node
  no longer needs route recording.  Subsequent Resv messages SHALL NOT
  contain an RRO.

4.4.4. Loop Detection

  As part of processing an incoming RRO, an intermediate router looks
  into all subobjects contained within the RRO.  If the router
  determines that it is already in the list, a forwarding loop exists.

  An RSVP session is loop-free if downstream nodes receive Path
  messages or upstream nodes receive Resv messages with no routing
  loops detected in the contained RRO.






Awduche, et al.             Standards Track                    [Page 36]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  There are two broad classifications of forwarding loops.  The first
  class is the transient loop, which occurs as a normal part of
  operations as L3 routing tries to converge on a consistent forwarding
  path for all destinations.  The second class of forwarding loop is
  the permanent loop, which normally results from network mis-
  configuration.

  The action performed by a node on receipt of an RRO depends on the
  message type in which the RRO is received.

  For Path messages containing a forwarding loop, the router builds and
  sends a "Routing problem" PathErr message, with the error value "loop
  detected," and drops the Path message.  Until the loop is eliminated,
  this session is not suitable for forwarding data packets.  How the
  loop eliminated is beyond the scope of this document.

  For Resv messages containing a forwarding loop, the router simply
  drops the message.  Resv messages should not loop if Path messages do
  not loop.

4.4.5. Forward Compatibility

  New subobjects may be defined for the RRO.  When processing an RRO,
  unrecognized subobjects SHOULD be ignored and passed on.  When
  processing an RRO for loop detection, a node SHOULD parse over any
  unrecognized objects.  Loop detection works by detecting subobjects
  which were inserted by the node itself on an earlier pass of the
  object.  This ensures that the subobjects necessary for loop
  detection are always understood.

4.4.6. Non-support of RRO

  The RRO object is to be used only when all routers along the path
  support RSVP and the RRO object.  The RRO object is assigned a class
  value of the form 0bbbbbbb.  RSVP routers that do not support the
  object will therefore respond with an "Unknown Object Class" error.

4.5. Error Codes for ERO and RRO

  In the processing described above, certain errors must be reported as
  either a "Routing Problem" or "Notify".  The value of the "Routing
  Problem" error code is 24; the value of the "Notify" error code is
  25.








Awduche, et al.             Standards Track                    [Page 37]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The following defines error values for the Routing Problem Error
  Code:

     Value    Error:

        1     Bad EXPLICIT_ROUTE object

        2     Bad strict node

        3     Bad loose node

        4     Bad initial subobject

        5     No route available toward destination

        6     Unacceptable label value

        7     RRO indicated routing loops

        8     MPLS being negotiated, but a non-RSVP-capable router
              stands in the path

        9     MPLS label allocation failure

       10     Unsupported L3PID

  For the Notify Error Code, the 16 bits of the Error Value field are:

        ss00 cccc cccc cccc

  The high order bits are as defined under Error Code 1. (See [1]).

  When ss = 00, the following subcodes are defined:

        1    RRO too large for MTU

        2    RRO notification

        3    Tunnel locally repaired

4.6. Session, Sender Template, and Filter Spec Objects

  New C-Types are defined for the SESSION, SENDER_TEMPLATE and
  FILTER_SPEC objects.

  The LSP_TUNNEL objects have the following format:





Awduche, et al.             Standards Track                    [Page 38]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.6.1. Session Object

4.6.1.1. LSP_TUNNEL_IPv4 Session Object

  Class = SESSION, LSP_TUNNEL_IPv4 C-Type = 7

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   IPv4 tunnel end point address               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  MUST be zero                 |      Tunnel ID                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Extended Tunnel ID                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     IPv4 tunnel end point address

        IPv4 address of the egress node for the tunnel.

     Tunnel ID

        A 16-bit identifier used in the SESSION that remains constant
        over the life of the tunnel.

     Extended Tunnel ID

        A 32-bit identifier used in the SESSION that remains constant
        over the life of the tunnel.  Normally set to all zeros.
        Ingress nodes that wish to narrow the scope of a SESSION to the
        ingress-egress pair may place their IPv4 address here as a
        globally unique identifier.



















Awduche, et al.             Standards Track                    [Page 39]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.6.1.2. LSP_TUNNEL_IPv6 Session Object

  Class = SESSION, LSP_TUNNEL_IPv6 C_Type = 8

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +                                                               +
  |                   IPv6 tunnel end point address               |
  +                                                               +
  |                            (16 bytes)                         |
  +                                                               +
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  MUST be zero                 |      Tunnel ID                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +                                                               +
  |                       Extended Tunnel ID                      |
  +                                                               +
  |                            (16 bytes)                         |
  +                                                               +
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     IPv6 tunnel end point address

        IPv6 address of the egress node for the tunnel.

     Tunnel ID

        A 16-bit identifier used in the SESSION that remains constant
        over the life of the tunnel.

     Extended Tunnel ID

        A 16-byte identifier used in the SESSION that remains constant
        over the life of the tunnel.  Normally set to all zeros.
        Ingress nodes that wish to narrow the scope of a SESSION to the
        ingress-egress pair may place their IPv6 address here as a
        globally unique identifier.

4.6.2. Sender Template Object

4.6.2.1. LSP_TUNNEL_IPv4 Sender Template Object

  Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv4 C-Type = 7



Awduche, et al.             Standards Track                    [Page 40]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   IPv4 tunnel sender address                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  MUST be zero                 |            LSP ID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     IPv4 tunnel sender address

        IPv4 address for a sender node

     LSP ID

        A 16-bit identifier used in the SENDER_TEMPLATE and the
        FILTER_SPEC that can be changed to allow a sender to share
        resources with itself.

4.6.2.2. LSP_TUNNEL_IPv6 Sender Template Object

  Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv6 C_Type = 8

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +                                                               +
  |                   IPv6 tunnel sender address                  |
  +                                                               +
  |                            (16 bytes)                         |
  +                                                               +
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  MUST be zero                 |            LSP ID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     IPv6 tunnel sender address

        IPv6 address for a sender node

     LSP ID

        A 16-bit identifier used in the SENDER_TEMPLATE and the
        FILTER_SPEC that can be changed to allow a sender to share
        resources with itself.






Awduche, et al.             Standards Track                    [Page 41]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.6.3. Filter Specification Object

4.6.3.1. LSP_TUNNEL_IPv4 Filter Specification Object

     Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv4 C-Type = 7

  The format of the LSP_TUNNEL_IPv4 FILTER_SPEC object is identical to
  the LSP_TUNNEL_IPv4 SENDER_TEMPLATE object.

4.6.3.2. LSP_TUNNEL_IPv6 Filter Specification Object

     Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv6 C_Type = 8

  The format of the LSP_TUNNEL_IPv6 FILTER_SPEC object is identical to
  the LSP_TUNNEL_IPv6 SENDER_TEMPLATE object.

4.6.4. Reroute and Bandwidth Increase Procedure

  This section describes how to setup a tunnel that is capable of
  maintaining resource reservations (without double counting) while it
  is being rerouted or while it is attempting to increase its
  bandwidth.  In the initial Path message, the ingress node forms a
  SESSION object, assigns a Tunnel_ID, and places its IPv4 address in
  the Extended_Tunnel_ID.  It also forms a SENDER_TEMPLATE and assigns
  a LSP_ID.  Tunnel setup then proceeds according to the normal
  procedure.

  On receipt of the Path message, the egress node sends a Resv message
  with the STYLE Shared Explicit toward the ingress node.

  When an ingress node with an established path wants to change that
  path, it forms a new Path message as follows.  The existing SESSION
  object is used.  In particular the Tunnel_ID and Extended_Tunnel_ID
  are unchanged.  The ingress node picks a new LSP_ID to form a new
  SENDER_TEMPLATE.  It creates an EXPLICIT_ROUTE object for the new
  route.  The new Path message is sent.  The ingress node refreshes
  both the old and new path messages.

  The egress node responds with a Resv message with an SE flow
  descriptor formatted as:

     <FLOWSPEC><old_FILTER_SPEC><old_LABEL_OBJECT><new_FILTER_SPEC>
     <new_LABEL_OBJECT>

  (Note that if the PHOPs are different, then two messages are sent
  each with the appropriate FILTER_SPEC and LABEL_OBJECT.)





Awduche, et al.             Standards Track                    [Page 42]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  When the ingress node receives the Resv Message(s), it may begin
  using the new route.  It SHOULD send a PathTear message for the old
  route.

4.7. Session Attribute Object

  The Session Attribute Class is 207.  Two C_Types are defined,
  LSP_TUNNEL, C-Type = 7 and LSP_TUNNEL_RA, C-Type = 1.  The
  LSP_TUNNEL_RA C-Type includes all the same fields as the LSP_TUNNEL
  C-Type.  Additionally it carries resource affinity information.  The
  formats are as follows:

4.7.1. Format without resource affinities

  SESSION_ATTRIBUTE class = 207, LSP_TUNNEL C-Type = 7

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Setup Prio  | Holding Prio  |     Flags     |  Name Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  //          Session Name      (NULL padded display string)      //
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Setup Priority

        The priority of the session with respect to taking resources,
        in the range of 0 to 7.  The value 0 is the highest priority.
        The Setup Priority is used in deciding whether this session can
        preempt another session.

     Holding Priority

        The priority of the session with respect to holding resources,
        in the range of 0 to 7.  The value 0 is the highest priority.
        Holding Priority is used in deciding whether this session can
        be preempted by another session.












Awduche, et al.             Standards Track                    [Page 43]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Flags

        0x01  Local protection desired

              This flag permits transit routers to use a local repair
              mechanism which may result in violation of the explicit
              route object.  When a fault is detected on an adjacent
              downstream link or node, a transit router can reroute
              traffic for fast service restoration.

        0x02  Label recording desired

              This flag indicates that label information should be
              included when doing a route record.

        0x04  SE Style desired

              This flag indicates that the tunnel ingress node may
              choose to reroute this tunnel without tearing it down.
              A tunnel egress node SHOULD use the SE Style when
              responding with a Resv message.

     Name Length

        The length of the display string before padding, in bytes.

     Session Name

        A null padded string of characters.






















Awduche, et al.             Standards Track                    [Page 44]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


4.7.2. Format with resource affinities

   SESSION_ATTRIBUTE class = 207, LSP_TUNNEL_RA C-Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Exclude-any                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Include-any                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Include-all                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Setup Prio  | Holding Prio  |     Flags     |  Name Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  //          Session Name      (NULL padded display string)      //
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Exclude-any

        A 32-bit vector representing a set of attribute filters
        associated with a tunnel any of which renders a link
        unacceptable.

     Include-any

        A 32-bit vector representing a set of attribute filters
        associated with a tunnel any of which renders a link acceptable
        (with respect to this test).  A null set (all bits set to zero)
        automatically passes.

     Include-all

        A 32-bit vector representing a set of attribute filters
        associated with a tunnel all of which must be present for a
        link to be acceptable (with respect to this test).  A null set
        (all bits set to zero) automatically passes.

     Setup Priority

        The priority of the session with respect to taking resources,
        in the range of 0 to 7.  The value 0 is the highest priority.
        The Setup Priority is used in deciding whether this session can
        preempt another session.





Awduche, et al.             Standards Track                    [Page 45]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


     Holding Priority

        The priority of the session with respect to holding resources,
        in the range of 0 to 7.  The value 0 is the highest priority.
        Holding Priority is used in deciding whether this session can
        be preempted by another session.

     Flags

        0x01  Local protection desired

              This flag permits transit routers to use a local repair
              mechanism which may result in violation of the explicit
              route object.  When a fault is detected on an adjacent
              downstream link or node, a transit router can reroute
              traffic for fast service restoration.

        0x02  Label recording desired

              This flag indicates that label information should be
              included when doing a route record.

        0x04  SE Style desired

              This flag indicates that the tunnel ingress node may
              choose to reroute this tunnel without tearing it down.
              A tunnel egress node SHOULD use the SE Style when
              responding with a Resv message.

     Name Length

        The length of the display string before padding, in bytes.

     Session Name

        A null padded string of characters.

4.7.3. Procedures applying to both C-Types

  The support of setup and holding priorities is OPTIONAL.  A node can
  recognize this information but be unable to perform the requested
  operation.  The node SHOULD pass the information downstream
  unchanged.

  As noted above, preemption is implemented by two priorities.  The
  Setup Priority is the priority for taking resources.  The Holding
  Priority is the priority for holding a resource.  Specifically, the




Awduche, et al.             Standards Track                    [Page 46]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Holding Priority is the priority at which resources assigned to this
  session will be reserved.  The Setup Priority SHOULD never be higher
  than the Holding Priority for a given session.

  The setup and holding priorities are directly analogous to the
  preemption and defending priorities as defined in [9].  While the
  interaction of these two objects is ultimately a matter of policy,
  the following default interaction is RECOMMENDED.

  When both objects are present, the preemption priority policy element
  is used.  A mapping between the priority spaces is defined as
  follows.  A session attribute priority S is mapped to a preemption
  priority P by the formula P = 2^(14-2S).  The reverse mapping is
  shown in the following table.

        Preemption Priority     Session Attribute Priority

              0 - 3                         7
              4 - 15                        6
             16 - 63                        5
             64 - 255                       4
            256 - 1023                      3
           1024 - 4095                      2
           4096 - 16383                     1
          16384 - 65535                     0

  When a new Path message is considered for admission, the bandwidth
  requested is compared with the bandwidth available at the priority
  specified in the Setup Priority.

  If the requested bandwidth is not available a PathErr message is
  returned with an Error Code of 01, Admission Control Failure, and an
  Error Value of 0x0002.  The first 0 in the Error Value indicates a
  globally defined subcode and is not informational.  The 002 indicates
  "requested bandwidth unavailable".

  If the requested bandwidth is less than the unused bandwidth then
  processing is complete.  If the requested bandwidth is available, but
  is in use by lower priority sessions, then lower priority sessions
  (beginning with the lowest priority) MAY be preempted to free the
  necessary bandwidth.

  When preemption is supported, each preempted reservation triggers a
  TC_Preempt() upcall to local clients, passing a subcode that
  indicates the reason.  A ResvErr and/or PathErr with the code "Policy
  Control failure" SHOULD be sent toward the downstream receivers and
  upstream senders.




Awduche, et al.             Standards Track                    [Page 47]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The support of local-protection is OPTIONAL.  A node may recognize
  the local-protection Flag but may be unable to perform the requested
  operation.  In this case, the node SHOULD pass the information
  downstream unchanged.

  The recording of the Label subobject in the ROUTE_RECORD object is
  controlled by the label-recording-desired flag in the
  SESSION_ATTRIBUTE object.  Since the Label subobject is not needed
  for all applications, it is not automatically recorded.  The flag
  allows applications to request this only when needed.

  The contents of the Session Name field are a string, typically of
  display-able characters.  The Length MUST always be a multiple of 4
  and MUST be at least 8.  For an object length that is not a multiple
  of 4, the object is padded with trailing NULL characters.  The Name
  Length field contains the actual string length.

4.7.4. Resource Affinity Procedures

  Resource classes and resource class affinities are described in [3].
  In this document we use the briefer term resource affinities for the
  latter term.  Resource classes can be associated with links and
  advertised in routing protocols.  Resource class affinities are used
  by RSVP in two ways.  In order to be validated a link MUST pass the
  three tests below.  If the test fails a PathErr with the code "policy
  control failure" SHOULD be sent.

  When a new reservation is considered for admission over a strict node
  in an ERO, a node MAY validate the resource affinities with the
  resource classes of that link.  When a node is choosing links in
  order to extend a loose node of an ERO, the node MUST validate the
  resource classes of those links against the resource affinities.  If
  no acceptable links can be found to extend the ERO, the node SHOULD
  send a PathErr message with an error code of "Routing Problem" and an
  error value of "no route available toward destination".

  In order to be validated a link MUST pass the following three tests.

  To precisely describe the tests use the definitions in the object
  description above.  We also define

     Link-attr      A 32-bit vector representing attributes associated
                    with a link.








Awduche, et al.             Standards Track                    [Page 48]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The three tests are

     1. Exclude-any

        This test excludes a link from consideration if the link
        carries any of the attributes in the set.

        (link-attr & exclude-any) == 0

     2. Include-any

        This test accepts a link if the link carries any of the
        attributes in the set.

        (include-any == 0) | ((link-attr & include-any) != 0)

     3. Include-all

        This test accepts a link only if the link carries all of the
        attributes in the set.

        (include-all == 0) | (((link-attr & include-all) ^ include-
        all) == 0)

  For a link to be acceptable, all three tests MUST pass.  If the test
  fails, the node SHOULD send a PathErr message with an error code of
  "Routing Problem" and an error value of "no route available toward
  destination".

  If a Path message contains multiple SESSION_ATTRIBUTE objects, only
  the first SESSION_ATTRIBUTE object is meaningful.  Subsequent
  SESSION_ATTRIBUTE objects can be ignored and need not be forwarded.

  All RSVP routers, whether they support the SESSION_ATTRIBUTE object
  or not, SHALL forward the object unmodified.  The presence of non-
  RSVP routers anywhere between senders and receivers has no impact on
  this object.

5. Hello Extension

  The RSVP Hello extension enables RSVP nodes to detect when a
  neighboring node is not reachable.  The mechanism provides node to
  node failure detection.  When such a failure is detected it is
  handled much the same as a link layer communication failure.  This
  mechanism is intended to be used when notification of link layer
  failures is not available and unnumbered links are not used, or when
  the failure detection mechanisms provided by the link layer are not
  sufficient for timely node failure detection.



Awduche, et al.             Standards Track                    [Page 49]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  It should be noted that node failure detection is not the same as a
  link failure detection mechanism, particularly in the case of
  multiple parallel unnumbered links.

  The Hello extension is specifically designed so that one side can use
  the mechanism while the other side does not.  Neighbor failure
  detection may be initiated at any time.  This includes when neighbors
  first learn about each other, or just when neighbors are sharing Resv
  or Path state.

  The Hello extension is composed of a Hello message, a HELLO REQUEST
  object and a HELLO ACK object.  Hello processing between two
  neighbors supports independent selection of, typically configured,
  failure detection intervals.  Each neighbor can autonomously issue
  HELLO REQUEST objects.  Each request is answered by an
  acknowledgment.  Hello Messages also contain enough information so
  that one neighbor can suppress issuing hello requests and still
  perform neighbor failure detection.  A Hello message may be included
  as a sub-message within a bundle message.

  Neighbor failure detection is accomplished by collecting and storing
  a neighbor's "instance" value.  If a change in value is seen or if
  the neighbor is not properly reporting the locally advertised value,
  then the neighbor is presumed to have reset.  When a neighbor's value
  is seen to change or when communication is lost with a neighbor, then
  the instance value advertised to that neighbor is also changed.  The
  HELLO objects provide a mechanism for polling for and providing an
  instance value.  A poll request also includes the sender's instance
  value.  This allows the receiver of a poll to optionally treat the
  poll as an implicit poll response.  This optional handling is an
  optimization that can reduce the total number of polls and responses
  processed by a pair of neighbors.  In all cases, when both sides
  support the optimization the result will be only one set of polls and
  responses per failure detection interval.  Depending on selected
  intervals, the same benefit can occur even when only one neighbor
  supports the optimization.

5.1. Hello Message Format

  Hello Messages are always sent between two RSVP neighbors.  The IP
  source address is the IP address of the sending node.  The IP
  destination address is the IP address of the neighbor node.

  The HELLO mechanism is intended for use between immediate neighbors.
  When HELLO messages are being the exchanged between immediate
  neighbors, the IP TTL field of all outgoing HELLO messages SHOULD be
  set to 1.




Awduche, et al.             Standards Track                    [Page 50]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  The Hello message has a Msg Type of 20.  The Hello message format is
  as follows:

     <Hello Message> ::= <Common Header> [ <INTEGRITY> ]
                             <HELLO>

5.2. HELLO Object formats

  The HELLO Class is 22.  There are two C_Types defined.

5.2.1. HELLO REQUEST object

  Class = HELLO Class, C_Type = 1

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Src_Instance                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Dst_Instance                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

5.2.2. HELLO ACK object

  Class = HELLO Class, C_Type = 2

   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Src_Instance                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Dst_Instance                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Src_Instance: 32 bits

     a 32 bit value that represents the sender's instance.  The
     advertiser maintains a per neighbor representation/value.  This
     value MUST change when the sender is reset, when the node reboots,
     or when communication is lost to the neighboring node and
     otherwise remains the same.  This field MUST NOT be set to zero
     (0).

     Dst_Instance: 32 bits

     The most recently received Src_Instance value received from the
     neighbor.  This field MUST be set to zero (0) when no value has
     ever been seen from the neighbor.



Awduche, et al.             Standards Track                    [Page 51]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


5.3. Hello Message Usage

  The Hello Message is completely OPTIONAL.  All messages may be
  ignored by nodes which do not wish to participate in Hello message
  processing.  The balance of this section is written assuming that the
  receiver as well as the sender is participating.  In particular, the
  use of MUST and SHOULD with respect to the receiver applies only to a
  node that supports Hello message processing.

  A node periodically generates a Hello message containing a HELLO
  REQUEST object for each neighbor who's status is being tracked.  The
  periodicity is governed by the hello_interval.  This value MAY be
  configured on a per neighbor basis.  The default value is 5 ms.

  When generating a message containing a HELLO REQUEST object, the
  sender fills in the Src_Instance field with a value representing it's
  per neighbor instance.  This value MUST NOT change while the agent is
  exchanging Hellos with the corresponding neighbor.  The sender also
  fills in the Dst_Instance field with the Src_Instance value most
  recently received from the neighbor.  For reference, call this
  variable Neighbor_Src_Instance.  If no value has ever been received
  from the neighbor or this node considers communication to the
  neighbor to have been lost, the Neighbor_Src_Instance is set to zero
  (0).  The generation of a message SHOULD be suppressed when a HELLO
  REQUEST object was received from the destination node within the
  prior hello_interval interval.

  On receipt of a message containing a HELLO REQUEST object, the
  receiver MUST generate a Hello message containing a HELLO ACK object.
  The receiver SHOULD also verify that the neighbor has not reset.
  This is done by comparing the sender's Src_Instance field value with
  the previously received value.  If the Neighbor_Src_Instance value is
  zero, and the Src_Instance field is non-zero, the
  Neighbor_Src_Instance is updated with the new value.  If the value
  differs or the Src_Instance field is zero, then the node MUST treat
  the neighbor as if communication has been lost.

  The receiver of a HELLO REQUEST object SHOULD also verify that the
  neighbor is reflecting back the receiver's Instance value.  This is
  done by comparing the received Dst_Instance field with the
  Src_Instance field value most recently transmitted to that neighbor.
  If the neighbor continues to advertise a wrong non-zero value after a
  configured number of intervals, then the node MUST treat the neighbor
  as if communication has been lost.

  On receipt of a message containing a HELLO ACK object, the receiver
  MUST verify that the neighbor has not reset.  This is done by
  comparing the sender's Src_Instance field value with the previously



Awduche, et al.             Standards Track                    [Page 52]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  received value.  If the Neighbor_Src_Instance value is zero, and the
  Src_Instance field is non-zero, the Neighbor_Src_Instance is updated
  with the new value.  If the value differs or the Src_Instance field
  is zero, then the node MUST treat the neighbor as if communication
  has been lost.

  The receiver of a HELLO ACK object MUST also verify that the neighbor
  is reflecting back the receiver's Instance value.  If the neighbor
  advertises a wrong value in the Dst_Instance field, then a node MUST
  treat the neighbor as if communication has been lost.

  If no Instance values are received, via either REQUEST or ACK
  objects, from a neighbor within a configured number of
  hello_intervals, then a node MUST presume that it cannot communicate
  with the neighbor.  The default for this number is 3.5.

  When communication is lost or presumed to be lost as described above,
  a node MAY re-initiate HELLOs.  If a node does re-initiate it MUST
  use a Src_Instance value different than the one advertised in the
  previous HELLO message.  This new value MUST continue to be
  advertised to the corresponding neighbor until a reset or reboot
  occurs, or until another communication failure is detected.  If a new
  instance value has not been received from the neighbor, then the node
  MUST advertise zero in the Dst_instance value field.

5.4. Multi-Link Considerations

  As previously noted, the Hello extension is targeted at detecting
  node failures not per link failures.  When there is only one link
  between neighboring nodes or when all links between a pair of nodes
  fail, the distinction between node and link failures is not really
  meaningful and handling of such failures has already been covered.
  When there are multiple links shared between neighbors, there are
  special considerations.  When the links between neighbors are
  numbered, then Hellos MUST be run on each link and the previously
  described mechanisms apply.

  When the links are unnumbered, link failure detection MUST be
  provided by some means other than Hellos.  Each node SHOULD use a
  single Hello exchange with the neighbor.  The case where all links
  have failed, is the same as the no received value case mentioned in
  the previous section.









Awduche, et al.             Standards Track                    [Page 53]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


5.5. Compatibility

  The Hello extension does not affect the processing of any other RSVP
  message.  The only effect is to allow a link (node) down event to be
  declared sooner than it would have been.  RSVP response to that
  condition is unchanged.

  The Hello extension is fully backwards compatible.  The Hello class
  is assigned a class value of the form 0bbbbbbb.  Depending on the
  implementation, implementations that do not support the extension
  will either silently discard Hello messages or will respond with an
  "Unknown Object Class" error.  In either case the sender will fail to
  see an acknowledgment for the issued Hello.

6. Security Considerations

  In principle these extensions to RSVP pose no security exposures over
  and above RFC 2205[1].  However, there is a slight change in the
  trust model.  Traffic sent on a normal RSVP session can be filtered
  according to source and destination addresses as well as port
  numbers.  In this specification, filtering occurs only on the basis
  of an incoming label.  For this reason an administration may wish to
  limit the domain over which LSP tunnels can be established.  This can
  be accomplished by setting filters on various ports to deny action on
  a RSVP path message with a SESSION object of type LSP_TUNNEL_IPv4 (7)
  or LSP_TUNNEL_IPv6 (8).

7. IANA Considerations

  IANA assigns values to RSVP protocol parameters.  Within the current
  document an EXPLICIT_ROUTE object and a ROUTE_RECORD object are
  defined.  Each of these objects contain subobjects.  This section
  defines the rules for the assignment of subobject numbers.  This
  section uses the terminology of BCP 26 "Guidelines for Writing an
  IANA Considerations Section in RFCs" [15].

  EXPLICIT_ROUTE Subobject Type

     EXPLICIT_ROUTE Subobject Type is a 7-bit number that identifies
     the function of the subobject.  There are no range restrictions.
     All possible values are available for assignment.

     Following the policies outlined in [15], subobject types in the
     range 0 - 63 (0x00 - 0x3F) are allocated through an IETF Consensus
     action, codes in the range 64 - 95 (0x40 - 0x5F) are allocated as
     First Come First Served, and codes in the range 96 - 127 (0x60 -
     0x7F) are reserved for Private Use.




Awduche, et al.             Standards Track                    [Page 54]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  ROUTE_RECORD Subobject Type

     ROUTE_RECORD Subobject Type is an 8-bit number that identifies the
     function of the subobject.  There are no range restrictions.  All
     possible values are available for assignment.

     Following the policies outlined in [15], subobject types in the
     range 0 - 127 (0x00 - 0x7F) are allocated through an IETF
     Consensus action, codes in the range 128 - 191 (0x80 - 0xBF) are
     allocated as First Come First Served, and codes in the range 192 -
     255 (0xC0 - 0xFF) are reserved for Private Use.

     The following assignments are made in this document.

7.1. Message Types

  Message Message
  Number  Name

    20    Hello

7.2. Class Numbers and C-Types

  Class   Class
  Number  Name

    1     SESSION

          Class Types or C-Types:

                 7       LSP Tunnel IPv4
                 8       LSP Tunnel IPv6

    10    FILTER_SPEC

          Class Types or C-Types:

                 7       LSP Tunnel IPv4
                 8       LSP Tunnel IPv6

    11    SENDER_TEMPLATE

          Class Types or C-Types:

                 7       LSP Tunnel IPv4
                 8       LSP Tunnel IPv6





Awduche, et al.             Standards Track                    [Page 55]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


    16    RSVP_LABEL

          Class Types or C-Types:

                 1       Type 1 Label

    19    LABEL_REQUEST

          Class Types or C-Types:

                 1       Without Label Range
                 2       With ATM Label Range
                 3       With Frame Relay Label Range

    20    EXPLICIT_ROUTE

          Class Types or C-Types:

                 1       Type 1 Explicit Route

    21    ROUTE_RECORD

          Class Types or C-Types:

                 1       Type 1 Route Record

    22    HELLO

          Class Types or C-Types:

                 1       Request
                 2       Acknowledgment


   207    SESSION_ATTRIBUTE

          Class Types or C-Types:

                 1       LSP_TUNNEL_RA
                 7       LSP Tunnel











Awduche, et al.             Standards Track                    [Page 56]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


7.3. Error Codes and Globally-Defined Error Value Sub-Codes

  The following list extends the basic list of Error Codes and Values
  that are defined in [RFC2205].

  Error Code    Meaning

    24          Routing Problem

                This Error Code has the following globally-defined
                Error Value sub-codes:

                 1       Bad EXPLICIT_ROUTE object
                 2       Bad strict node
                 3       Bad loose node
                 4       Bad initial subobject
                 5       No route available toward
                          destination
                 6       Unacceptable label value
                 7       RRO indicated routing loops
                 8       MPLS being negotiated, but a
                         non-RSVP-capable router stands
                           in the path
                 9       MPLS label allocation failure
                10       Unsupported L3PID

    25          Notify Error

               This Error Code has the following globally-defined
               Error Value sub-codes:

                 1       RRO too large for MTU
                 2       RRO Notification
                 3       Tunnel locally repaired

7.4. Subobject Definitions

  Subobjects of the EXPLICIT_ROUTE object with C-Type 1:

         1       IPv4 prefix
         2       IPv6 prefix
        32       Autonomous system number









Awduche, et al.             Standards Track                    [Page 57]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  Subobjects of the RECORD_ROUTE object with C-Type 1:

         1       IPv4 address
         2       IPv6 address
         3       Label

8. Intellectual Property Considerations

  The IETF has been notified of intellectual property rights claimed in
  regard to some or all of the specification contained in this
  document.  For more information consult the online list of claimed
  rights.

9. Acknowledgments

  This document contains ideas as well as text that have appeared in
  previous Internet Drafts.  The authors of the current document wish
  to thank the authors of those drafts.  They are Steven Blake, Bruce
  Davie, Roch Guerin, Sanjay Kamat, Yakov Rekhter, Eric Rosen, and Arun
  Viswanathan.  We also wish to thank Bora Akyol, Yoram Bernet and Alex
  Mondrus for their comments on this document.

10. References

  [1]  Braden, R., Zhang, L., Berson, S., Herzog, S. and S. Jamin,
       "Resource ReSerVation Protocol (RSVP) -- Version 1, Functional
       Specification", RFC 2205, September 1997.

  [2]  Rosen, E., Viswanathan, A. and R. Callon, "Multiprotocol Label
       Switching Architecture", RFC 3031, January 2001.

  [3]  Awduche, D., Malcolm, J., Agogbua, J., O'Dell and J. McManus,
       "Requirements for Traffic Engineering over MPLS", RFC 2702,
       September 1999.

  [4]  Wroclawski, J., "Specification of the Controlled-Load Network
       Element Service", RFC 2211, September 1997.

  [5]  Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D.,
       Li, T. and A. Conta, "MPLS Label Stack Encoding", RFC 3032,
       January 2001.

  [6]  Bradner, S., "Key words for use in RFCs to Indicate Requirement
       Levels", BCP 14, RFC 2119, March 1997.

  [7]  Almquist, P., "Type of Service in the Internet Protocol Suite",
       RFC 1349, July 1992.




Awduche, et al.             Standards Track                    [Page 58]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


  [8]  Nichols, K., Blake, S., Baker, F. and D. Black, "Definition of
       the Differentiated Services Field (DS Field) in the IPv4 and
       IPv6 Headers", RFC 2474, December 1998.

  [9]  Herzog, S., "Signaled Preemption Priority Policy Element", RFC
       2751, January 2000.

  [10] Awduche, D., Hannan, A. and X. Xiao, "Applicability Statement
       for Extensions to RSVP for LSP-Tunnels", RFC 3210, December
       2001.

  [11] Wroclawski, J., "The Use of RSVP with IETF Integrated Services",
       RFC 2210, September 1997.

  [12] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792,
       September 1981.

  [13] Mogul, J. and S. Deering, "Path MTU Discovery", RFC 1191,
       November 1990.

  [14] Conta, A. and S. Deering, "Internet Control Message Protocol
       (ICMPv6) for the Internet Protocol Version 6 (IPv6)", RFC 2463,
       December 1998.

  [15] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
       Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.

  [16] Bernet, Y., Smiht, A. and B. Davie, "Specification of the Null
       Service Type", RFC 2997, November 2000.






















Awduche, et al.             Standards Track                    [Page 59]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


11. Authors' Addresses

  Daniel O. Awduche
  Movaz Networks, Inc.
  7926 Jones Branch Drive, Suite 615
  McLean, VA 22102
  Voice: +1 703-298-5291
  EMail: [email protected]


  Lou Berger
  Movaz Networks, Inc.
  7926 Jones Branch Drive, Suite 615
  McLean, VA 22102
  Voice: +1 703 847 1801
  EMail: [email protected]


  Der-Hwa Gan
  Juniper Networks, Inc.
  385 Ravendale Drive
  Mountain View, CA 94043
  EMail: [email protected]


  Tony Li
  Procket Networks
  3910 Freedom Circle, Ste. 102A
  Santa Clara CA 95054
  EMail: [email protected]


  Vijay Srinivasan
  Cosine Communications, Inc.
  1200 Bridge Parkway
  Redwood City, CA 94065
  Voice: +1 650 628 4892
  EMail: [email protected]


  George Swallow
  Cisco Systems, Inc.
  250 Apollo Drive
  Chelmsford, MA 01824
  Voice: +1 978 244 8143
  EMail: [email protected]





Awduche, et al.             Standards Track                    [Page 60]

RFC 3209           Extensions to RSVP for LSP Tunnels      December 2001


12.  Full Copyright Statement

  Copyright (C) The Internet Society (2001).  All Rights Reserved.

  This document and translations of it may be copied and furnished to
  others, and derivative works that comment on or otherwise explain it
  or assist in its implementation may be prepared, copied, published
  and distributed, in whole or in part, without restriction of any
  kind, provided that the above copyright notice and this paragraph are
  included on all such copies and derivative works.  However, this
  document itself may not be modified in any way, such as by removing
  the copyright notice or references to the Internet Society or other
  Internet organizations, except as needed for the purpose of
  developing Internet standards in which case the procedures for
  copyrights defined in the Internet Standards process must be
  followed, or as required to translate it into languages other than
  English.

  The limited permissions granted above are perpetual and will not be
  revoked by the Internet Society or its successors or assigns.

  This document and the information contained herein is provided on an
  "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

  Funding for the RFC Editor function is currently provided by the
  Internet Society.



















Awduche, et al.             Standards Track                    [Page 61]