Network Working Group Daniel O. Awduche Internet Draft UUNET Worldcom, Inc. Expiration Date: August 1999 Lou Berger FORE Systems, Inc. Der-Hwa Gan Juniper Networks, Inc. Tony Li Juniper Networks, Inc. George Swallow Cisco Systems, Inc. Vijay Srinivasan Torrent Networks, Inc. February 1999 Extensions to RSVP for LSP Tunnels draft-ietf-mpls-rsvp-lsp-tunnel-01.txt Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." To view the current status of any Internet-Draft, please check the "1id-abstracts.txt" listing contained in an Internet-Drafts Shadow Directory, see http://www.ietf.org/shadow.html. Abstract This document describes the use of RSVP, including all the necessary extensions, to establish label-switched paths (LSPs) in MPLS. 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 [3]. 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. Finally, we propose a number of mechanisms to reduce the refresh overhead of RSVP. The extensions can be used to reduce processing requirements of refresh messages, eliminate the state synchronization latency incurred when an RSVP message is lost and, when desired, eliminate the generation of refresh messages. An extension to support detection of when an RSVP neighbor resets its state is also presented. These extension present no backwards compatibility issues. Swallow, et al. [Page 2]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Contents 1 Introduction and Background ............................ 5 1.1 Introduction ........................................... 5 1.2 Background ............................................. 6 2 Overview .............................................. 8 2.1 LSP Tunnels ............................................ 8 2.2 Operation of LSP Tunnels ............................... 8 2.3 Service Classes ........................................ 10 2.4 Reservation Styles ..................................... 10 2.4.1 Fixed Filter (FF) Style ................................ 11 2.4.2 Wildcard Filter (WF) Style ............................. 11 2.4.3 Shared Explicit (SE) Style ............................. 12 2.5 Rerouting LSP Tunnels .................................. 12 3 LSP Tunnel related Message Formats ..................... 13 3.1 Path Message ........................................... 14 3.2 Resv Message ........................................... 14 4 LSP Tunnel related Objects ............................. 15 4.1 Label Object ........................................... 15 4.1.1 Handling Label Objects in Resv messages ................ 16 4.1.2 Non-support of the Label Object ........................ 17 4.2 Label Request Object ................................... 17 4.2.1 Handling of LABEL_REQUEST .............................. 20 4.2.2 Non-support of the Label Request Object ................ 21 4.3 Explicit Route Object .................................. 21 4.3.1 Applicability .......................................... 22 4.3.2 Semantics of the Explicit Route Object ................. 22 4.3.3 Subobjects ............................................. 23 4.3.4 Processing of the Explicit Route Object ................ 27 4.3.5 Loops .................................................. 29 4.3.6 Non-support of the Explicit Route Object ............... 29 4.4 Record Route Object .................................... 30 4.4.1 Subobjects ............................................. 30 4.4.2 Applicability .......................................... 33 4.4.3 Handling RRO ........................................... 33 4.4.4 Loop Detection ......................................... 34 4.4.5 Non-support of RRO ..................................... 35 4.5 Error Subcodes for ERO and RRO ......................... 35 4.6 Session, Sender Template, and Filter Spec Objects ...... 36 4.6.1 Session Object ......................................... 36 4.6.2 Sender Template Object ................................. 37 4.6.3 Filter Specification Object ............................ 37 4.6.4 Reroute Procedure ...................................... 38 4.7 Session Attribute Object ............................... 39 4.8 Flowspec Object for Class-of-Service Service .......... 41 5 Refresh Related Extensions ............................. 42 Swallow, et al. [Page 3]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 5.1 RSVP Aggregate Message ................................. 43 5.1.1 Aggregate Header ....................................... 43 5.1.2 Message Formats ........................................ 44 5.1.3 Sending RSVP Aggregate Messages ........................ 45 5.1.4 Receiving RSVP Aggregate Messages ...................... 46 5.1.5 Forwarding RSVP Aggregate Messages ..................... 46 5.1.6 Aggregate-Capable Bit .................................. 47 5.2 MESSAGE_ID Extension ................................... 47 5.2.1 MESSAGE_ID Object ...................................... 48 5.2.2 Ack Message Format ..................................... 49 5.2.3 MESSAGE_ID Object Usage ................................ 50 5.2.4 MESSAGE_ID ACK Object Usage ............................ 51 5.2.5 Multicast Considerations ............................... 52 5.2.6 Compatibility .......................................... 53 5.3 Hello Extension ........................................ 53 5.3.1 Hello Message Format ................................... 54 5.3.2 HELLO Object ........................................... 55 5.3.3 Hello Message Usage .................................... 55 5.3.4 Compatibility .......................................... 56 6 Acknowledgments ........................................ 56 7 References ............................................. 57 8 Authors' Addresses ..................................... 58 Swallow, et al. [Page 4]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 1. Introduction and Background 1.1. Introduction This document is a specification of extensions to RSVP for establishing label switched paths (LSPs) in Multi-protocol Label Switching (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, loop detection, and a fast reroute option to allow expedited service restoration under fault conditions. 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. 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. All objects 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. Resilience and scalability are very important considerations in this specification. When an LSP tunnel fails, a significant amount of data can be lost. As a result, failure notification and service restoration should be fast and reliable. Accordingly, a number of features are provided to facilitate smooth reroute of LSP tunnels, fast reroute of LSP tunnels through intermediate detour paths under faults, and fast and reliable LSP tunnel teardown. A few new objects are also defined that enhance management and diagnostics of LSP tunnels. Swallow, et al. [Page 5]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Several new RSVP objects and messages are used to reduced processing requirements related to RSVP refresh messages and address the latency and reliability of RSVP Signaling. First, an aggregate message is proposed to reduce the message handing load. Second tokens are added as a short hand method of identifying state. Third, procedures to suppress refreshes are defined. Last a Hello protocol is defined to detect loss of a neighbor's state. These extensions may be used in part in combination. They may be useful in other RSVP environments and may be supported independent of other MPLS related RSVP extensions. Throughout this document, the discussion will be restricted to unicast label switched paths. Multicast LSPs are left for further study. 1.2. 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 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. Label stacking is also supported. 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 Swallow, et al. [Page 6]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 trivial if it is a singleton, that is 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 with subnet masks or a sequence of Autonomous Systems. 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. Swallow, et al. [Page 7]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 2. Overview 2.1. LSP 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. A new RSVP SESSION object, called LSP_TUNNEL_IPv4, has been defined to support the LSP tunnel feature. The semantics of this object, 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 that appears in the object name only denotes that the destination address is an IPv4 address. 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 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 IPv4 and cannot be deduced from the L2 header, which simply identifies the higher layer Swallow, et al. [Page 8]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 and 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 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 preemption, priority, and fast-reroute, are also included in this object. 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. 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, in a Swallow, et al. [Page 9]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 direction opposite to that followed by the Path message. 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 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 Class-of-Service service, see Section 4.8. 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]. Swallow, et al. [Page 10]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 and a separate label-switched-path can be assigned to each sender. This can result in a point-to-point LSP between every sender/receiver pair. 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, the reservation requested is greater than a single sender's requirements, then the reserved bandwidth on links close to the some senders may 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. Swallow, et al. [Page 11]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. 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 LSP Tunnels One of the requirements for Traffic Engineering is the capability to reroute an established LSP tunnel under a number of conditions, based on administrative policy. For example, in some contexts, an administrative policy may dictate that a given LSP tunnel is to be rerouted when a more "optimal" route becomes available. Another important context when LSP tunnel reroute is usually required is upon failure of a resource along the tunnel's established path. Under some policies, it may also be necessary to return the LSP 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 LSP 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 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 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 Swallow, et al. [Page 12]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. The combination of the LSP_TUNNEL_IPv4 SESSION object and the SE reservation style naturally achieves smooth transitions. The basic idea is that the old and new LSP tunnels share resources along links which they have in common. The LSP_TUNNEL_IPv4 SESSION object is used to narrow the scope of the RSVP session to the particular tunnel in question. To uniquely identify a tunnel, we use the combination of the destination IP address, a Tunnel ID, and the sender's IP address, which is placed in the Extended Tunnel ID field. During the reroute operation, the source needs to appear as two different sources to RSVP. This is achieved by the inclusion of an "LSP ID", which is carried in the SENDER_TEMPLATE and FILTER_SPEC objects. Since the semantics of these objects are changed, a new C- Type is assigned. To effect a reroute, the source node picks a new LSP ID and forms a new SENDER_TEMPLATE. The source 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 sender receives a Resv message for the new LSP, it can transition traffic to it and tear down the old LSP. 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, Swallow, et al. [Page 13]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 FILTER_SPEC, FLOWSPEC 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. They must immediately follow either the SENDER_TEMPLATE in Path messages, or the FILTER_SPEC in Resv messages. The 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> ] [ <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> Swallow, et al. [Page 14]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 <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. 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // (Object contents) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | (top label) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The contents of a LABEL object are a stack of labels, where each label is encoded right aligned in 4 octets. The top of the stack is in the right 4 octets of the object contents. A LABEL object that contains no labels is illegal. Swallow, et al. [Page 15]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Each label is an unsigned integer in the range 0 through 1048575. The decision concerning whether to create a label stack with more than one label, when to push a new label, and when to pop the label stack is not addressed in this document. For implementations that do not support a label stack, only the top label is examined. The rest of the label stack should be passed through unchanged. Such implementations are required to generate a label stack of depth 1 when initiating the first LABEL. 4.1.1. Handling Label Objects in Resv messages A router uses the top 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. 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. If a node receives a Resv message that has assigned the same label value to multiple senders, then that node may also assign the same value to those same senders or to any subset of those senders. Note that if a node intends to police individual senders to a session, it must assign unique labels to those senders. Labels received in Resv messages on different interfaces are always considered to be different even if the label value is the same. To construct a new LABEL object, the router replaces the top label (from the received Resv message) with the locally allocated new label. The router then sends the new LABEL object as part of the Resv message to the previous hop. 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 router is expected to send a Resv message before its refresh timers expire if the contents of the LABEL object change. Swallow, et al. [Page 16]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. 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 not RSVP capable, the router must not advertise the LABEL object when sending messages that pass through the non-RSVP router. The RSVP specification [1] describes how routers can determine the presence of non-RSVP routers. 4.2. Label Request Object The LABEL_REQUEST object formats are shown below. Currently there 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. Label Request without Label Range class = 19, C_Type = 1 (need to get an official class num from the IANA) 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 transmis- sion and must be ignored on receipt. L3PID an identifier of the layer 3 protocol using this path. Standard Ethertype values are used. Swallow, et al. [Page 17]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Label Request with ATM Label Range class = 19, C_Type = 2 (need to get an official class num from the IANA) 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Res | Minimum VPI | Minimum VCI | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Res | Maximum VPI | Maximum VCI | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Reserved (Res) This field is reserved. It must be set to zero on transmis- sion and must be ignored on receipt. L3PID an identifier of the layer 3 protocol using this path. Standard Ethertype values are used. 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 should be right justified in this field and preceding bits should 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 ori- ginating switch. If the VCI is less than 16-bits it should be right justified in this field and preceding bits should be set to zero. 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 Swallow, et al. [Page 18]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 switch. If the VPI is less than 12-bits it should be right justified in this field and preceding bits should 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 ori- ginating switch. If the VCI is less than 16-bits it should be right justified in this field and preceding bits should be set to zero. Label Request with Frame Relay Label Range class = 19, C_Type = 3 (need to get an official class num from the IANA) 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 transmis- sion 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 1 17 Swallow, et al. [Page 19]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 2 23 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 should be right justified in this field and unused bits should 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 should be right justified in this field and unused bits should be set to 0. 4.2.1. 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 subcode "MPLS label allocation failure." This includes the case where a Swallow, et al. [Page 20]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 label range has been specified and a label cannot be allocated from that range. If the receiver cannot support the protocol L3PID, it should send a PathErr with the error code "Routing problem" and the subcode "Unsupported L3PID." This causes the RSVP session to fail. 4.2.2. 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 send 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 not 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 subcode "MPLS being negotiated, but a non-RSVP capable router stands in the path." See [1] for a description of how routers can determine the presence of non-RSVP routers. 4.3. Explicit Route Object As stated earlier, explicit routes are to be specified through a new EXPLICIT_ROUTE object (ERO) in RSVP Path messages. The EXPLICIT_ROUTE object has the following format: 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // (Object contents) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Swallow, et al. [Page 21]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Class-Num The Class-Num for an EXPLICIT_ROUTE object is 20 (need to get an official one from the IANA with the form 0bbbbbbb to ensure that non-supporting implementations reject the message.) C-Type The C-Type for an EXPLICIT_ROUTE object is 1 (need to get an official one from the IANA) 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 therefor response 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. Certain operations to be performed along the path can also be encoded in the EXPLICIT_ROUTE object. 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. The explicit route is encoded as a series of subobjects contained in Swallow, et al. [Page 22]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 an EXPLICIT_ROUTE object. Each subobject may identify a group of nodes in the explicit route or may specify an operation to be performed along the path. An explicit route then becomes a specification of groups of nodes to be traversed and a set of operations to be performed along the path. 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 and a set operations to be performed along that path. 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. Swallow, et al. [Page 23]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Type The Type indicates the type of contents of the subobject. Currently defined values are: 0 Reserved 1 IPv4 prefix 2 IPv6 prefix 32 Autonomous system number 64 MPLS label switched path termination 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. The L bit has no meaning in operation subobjects. Swallow, et al. [Page 24]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | IPv4 address (4 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IPv4 address (continued) | Mask | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 0x81 IPv4 address IPv4 address An IPv4 address. This address is treated as a prefix based on the mask value below. Bits beyond the mask are ignored and should be set to zero. Length The Length contains the total length of the subobject in bytes, including the Type and Length fields. The Length is always 8. Mask 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. Swallow, et al. [Page 25]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | IPv6 address (16 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IPv6 address (continued) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IPv6 address (continued) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IPv6 address (continued) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IPv6 address (continued) | Mask | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 0x82 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 mask value below. Bits beyond the mask are ignored and should be set to zero. Mask 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. Swallow, et al. [Page 26]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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.3.5. Subobject 64: MPLS Label Switched Path Termination The contents of an MPLS label switched path termination subobject are 2 octets of padding. This subobject is an operation subobject. This object is only meaningful if there is a LABEL_REQUEST object in the Path message. If a LABEL_REQUEST object is present in the Path message, this Path message is being used to establish a label-switched path. In this case, this subobject indicates that the prior abstract node should remove one level of label from all packets following this label- switched path. The length of the MPLS label termination 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 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 the first subobject is an operation subobject, the message is in error and the system should Swallow, et al. [Page 27]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 return a "Bad EXPLICIT_ROUTE object" 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 subobject is an operation subobject, the node pops the subobject from the EXPLICIT ROUTE object , records the subobject, and continues processing with step 2, above. Note that this changes the third subobject into the second subobject (hence "pop") in subsequent processing. The precise operations to be performed by this node must be defined by the operation subobject. 4) 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-4. 5) 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. 6) 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: 6a) If the second subobject is a strict subobject, there is an error and the node should return a "Bad strict node" error. 6b) 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. 7) 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 Swallow, et al. [Page 28]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. 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. Swallow, et al. [Page 29]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 4.4. Record Route Object The format of the RECORD_ROUTE object (RRO) is as follows: 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) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Class-Num The Class-Num for a RECORD_ROUTE object is 21 (need to get an official one from the IANA with the form 0bbbbbbb to ensure that non-supporting implementations reject the message.) C-Type The C-Type for a RECORD_ROUTE object is 1 (need to get an offi- cial one from the IANA) The RRO can be present in both RSVP Path and Resv messages. If a message contains multiple RROs, only the first RRO is meaningful. Subsequent RROs can 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. 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. Two kinds of subobjects are currently defined. Swallow, et al. [Page 30]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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) | Mask | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 0x81 IPv4 address IPv4 address A 32-bit unicast, host address. Any network-reachable interface address is allowed here. Illegal addresses, such as loopback addresses, should not be used. Length The Length contains the total length of the subobject in bytes, including the Type and Length fields. The Length is always 8. Mask 32 Flags 0x01 Fast Re-Route Tunnel in place Indicates that the link downstream of this node is protected via a fast reroute tunnel 0x02 Fast Re-Route Tunnel in use Indicates that a fast reroute tunnel is in use to maintain this tunnel (usually in the face a an outage of the link it was previously routed over Swallow, et al. [Page 31]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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) | Mask | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 0x82 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. Mask 128 Flags 0x01 Fast Re-Route Tunnel in place Indicates that the link downstream of this node is protected via a fast reroute tunnel 0x02 Fast Re-Route Tunnel in use Indicates that a fast reroute tunnel is in use to maintain this tunnel (usually in the face a an outage of the link it was previously routed over Swallow, et al. [Page 32]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. 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) is quickly 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. Handling 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. 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. If the newly added subobject causes the RRO to be too big to fit in a Path message, the Path message shall be dropped and a PathErr message should be sent back to the sender. 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. Swallow, et al. [Page 33]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 Path messages and 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. 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 subcode "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. Swallow, et al. [Page 34]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 4.4.5. 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 therefor response with an "Unknown Object Class" error. 4.5. Error Subcodes for ERO and RRO In the processing described above, certain errors must be reported as part of a "Routing Problem" PathErr message. The value of the "Routing Problem" error code is 24 (TBD). The following defines the subcodes for the routing problem PathErr message: 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 RRO syntax error detected 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 Swallow, et al. [Page 35]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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_IPv4 objects have the following format: 4.6.1. Session Object Class = SESSION, C-Type = LSP_TUNNEL_IPv4 (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 destination 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. Source nodes that wish to narrow the scope of a SESSION to the source-destination pair may place their IPv4 address here as a globally unique identifier. Swallow, et al. [Page 36]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 4.6.2. Sender Template Object Class = SENDER_TEMPLATE, C-Type = LSP_TUNNEL_IPv4 (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 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.3. Filter Specification Object Class = FILTER SPECIFICATION, C-Type = LSP_TUNNEL_IPv4 (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 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. Swallow, et al. [Page 37]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 4.6.4. Reroute 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 source node forms a SESSION object, assigns a Tunnel_ID, and places its IPv4 address in the LSP_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 destination node sends a Resv message with the STYLE Shared Explicit to the source. [Note: I think we should add a flag to the SESSION_ATTRIBUTE for the source to indicate that it wishes the SE style.] When a source 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 source 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 source node refreshes both the old and new path messages The destination 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.) When the Source node receives the Resv Message(s), it may begin using the new route. It should send a PathTear message for the old route. Swallow, et al. [Page 38]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 4.7. Session Attribute Object The format of the SESSION_ATTRIBUTE object is as follows: 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) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Class-Num The Class-Num indicates that the object is 207. (TBD) C-Type The C-Type is 7. Flags 0x01 = Fast-reroute This flag permits transit routers to pre-compute and pre-establish detour paths for this session. When a fault is detected on an adjacent downstream link or node, a transit router can reroute traffic onto the detour path for fast service restoration. 0x02 = Merging permitted This flag permits transit routers to merge this session with other RSVP sessions for the purpose of reducing resource overhead on downstream transit routers, thereby providing better network scalability. 0x04 = Tunnel head may reroute This flag indicates that the head end of the tunnel may choose to reroute this tunnel without tearing it down. A tunnel tail SHOULD use the SE Style when responding with a Resv message. Swallow, et al. [Page 39]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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. Name Length The length of the display string before padding, in bytes. Session Name A null padded string of characters. 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 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. When a new reservation is considered for admission, the bandwidth requested is compared with the bandwidth available at the priority specified in the Setup Priority. The bandwidth available at a particular Setup Priority is the unused bandwidth plus the bandwidth reserved at all Holding Priorities lower than 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 Swallow, et al. [Page 40]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 is in use by lower priority sessions, then lower priority sessions (beginning with the lowest priority) can be pre-empted to free the necessary bandwidth. When pre-emption is supported, each pre-empted 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. The support of fast-reroute is optional. A node may recognize the fast-reroute Flag but may be unable to perform the requested operation. In this case, the node should pass the information downstream unchanged. The support of merging is optional. A node may recognize the Merge Flag but may be unable to perform the requested operation. In this case, the node should pass the information downstream unchanged. 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. The contents of the Session Name field are a string, typically of displayable 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. 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. 4.8. Flowspec Object for Class-of-Service Service An LSP may not need bandwidth reservations or QoS guarantees. Such LSPs can be used to deliver best-effort traffic, even if RSVP is used for setting up LSPs. When resources do not have to be allocated to the LSP, the Class-of-Service service should be used. The Class-of-Service FLOWSPEC allows indication of a Class of Service (CoS) value that should be used when handling data packets associated with the request. The format of the Class-of-Service FLOWSPEC object is: Swallow, et al. [Page 41]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Class-of-Service flowspec object: Class = 9, C-Type = 3 (TBA) 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 | CoS | Maximum Packet Size [M] | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Reserved This field is reserved. It must be set to zero on transmission and must be ignored on receipt. CoS Indicates the Class of Service (CoS) of the data traffic asso- ciated with the request. A value of zero (0) indicates that associated traffic is "Best-Effort". Specifically no service assurances are being requested from the network. The intent is to enable networks to support the IP ToS Octet as defined in RFC1349 [7]. It is noted that there is ongoing work within the IETF to update the use of the IP ToS Octet. M The maximum packet size parameter [M] should be set to the value of the smallest path MTU. This parameter is set in Resv messages by the reliever based on information in arriving RSVP ADSPEC objects. This parameter is ignored when the object is contained in Path messages. 5. Refresh Related Extensions The resource requirement (in terms of cpu processing and memory) for running RSVP on a router increases proportionally with the number of sessions. Supporting a large number of sessions can present scaling problems. This section describes an approach to help alleviate one of the scaling issues. RSVP Path and Resv messages must be periodically refreshed to maintain state. The approach described here simply reduces the volume of messages which must be periodically sent and received. One way to address the refresh volume problem is to increase the refresh timer R. Increasing the value of R provides linear improvement on transmission overhead, but at the cost of increasing refresh timeout. Swallow, et al. [Page 42]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 An aggregate message is proposed which can reduce R for faster detection of connectivity problems and still reduce overhead by an order of magnitude. A Message_ID object is defined to reduce refresh message processing by allowing the receiver to immediately identify an unchanged message. A Message_ACK object is defined which used in combination with the Message_ID object may suppress refreshes altogether. The described approach also addresses issues of latency and reliability of RSVP Signaling. The latency and reliability problem occurs when a non-refresh RSVP message is lost in transmission. Standard RSVP [RFC2205] maintains state via the generation of RSVP refresh messages. In the face of transmission loss of RSVP messages, the end-to-end latency of RSVP signaling is tied to the refresh interval of the node(s) experiencing the loss. When end-to-end signaling is limited by the refresh interval, the establishment or change of a reservation may be beyond the range of what is acceptable for some some applications. Finally, a hello protocol is defined to allow detection of the loss of a neighbor node or it's RSVP state information. 5.1. RSVP Aggregate Message An RSVP aggregate message consists of an aggregate header followed by a body consisting of a variable number of standard RSVP messages. The following subsections define the formats of the aggregate header and the rules for including standard RSVP messages as part of the message. 5.1.1. Aggregate Header 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vers | Flags | Msg type | RSVP checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Send_TTL | (Reserved) | RSVP length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The format of the aggregate header is identical to the format of the RSVP common header [1]. The fields in the header are as follows: Swallow, et al. [Page 43]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 Vers: 4 bits Protocol version number. This is version 1. Flags: 4 bits 0x01: Aggregate capable If set, indicates to RSVP neighbors that this node is willing and capable of receiving aggregate messages. This bit is meaningful only between adjacent RSVP neighbors. 0x02-0x08: Reserved Msg type: 8 bits 12 = Aggregate RSVP checksum: 16 bits The one's complement of the one's complement sum of the entire message, with the checksum field replaced by zero for the pur- pose of computing the checksum. An all-zero value means that no checksum was transmitted. Because individual submessages carry their own checksum as well as the INTEGRITY object for authentication, this field MAY be set to zero. Send_TTL: 8 bits The IP TTL value with which the message was sent. This is used by RSVP to detect a non-RSVP hop by comparing the IP TTL that an Aggregate message sent to the TTL in the received message. RSVP length: 16 bits The total length of this RSVP aggregate message in bytes, in- cluding the aggregate header and the submessages that follow. 5.1.2. Message Formats An RSVP aggregate message must contain at least one submessage. A submessage is one of the RSVP Path, PathTear, PathErr, Resv, ResvTear, ResvErr, or ResvConf messages. Empty RSVP aggregate messages should not be sent. It is illegal to include another RSVP aggregate message as a submessage. Swallow, et al. [Page 44]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vers | Flags | 12 | RSVP checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Send_TTL | (Reserved) | RSVP length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // First submessage // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // More submessage... // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5.1.3. Sending RSVP Aggregate Messages RSVP Aggregate messages are sent hop by hop between RSVP-capable neighbors as "raw" IP datagrams with protocol number 46. Raw IP datagrams are also intended to be used between an end system and the first/last hop router, although it is also possible to encapsulate RSVP messages as UDP datagrams for end-system communication that cannot perform raw network I/O. RSVP Aggregate messages should not be used if the next-hop RSVP neighbor does not support RSVP Aggregate messages. Methods for discovering such information include: (1) manual configuration and (2) observing the Aggregate-capable bit (see the description that follows) in the received RSVP messages. Support for RSVP Aggregate messages is optional. While message aggregation might help in scaling RSVP, and in reducing processing overhead and bandwidth consumption, a node is not required to transmit every standard RSVP message in an Aggregate message. A node must always be ready to receive standard RSVP messages. The IP source address is local to the system that originated the Aggregate message. The IP destination address is the next-hop node for which the submessages are intended. These addresses need not be identical to those used if the submessages were sent as standard RSVP messages. For example, the IP source address of Path and PathTear messages is the address of the sender it describes, while the IP destination address is the DestAddress for the session. These end-to-end addresses are overridden by hop-by-hop addresses while encapsulated Swallow, et al. [Page 45]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 in an Aggregate message. These addresses can easily be restored from the SENDER_TEMPLATE and SESSION objects within Path and PathTear messages. For Path and PathTear messages, the next-hop node can be learned by looking up DestAddress in the forwarding table. RSVP Aggregate messages do not require the Router Alert IP option [RFC 2113] in their IP headers. This is because Aggregate messages are addressed directly to RSVP neighbors. Each RSVP Aggregate message must occupy exactly one IP datagram. If it exceeds the MTU, the datagram is fragmented by IP and reassembled at the recipient node. A single RSVP Aggregate message cannot exceed the maximum IP datagram size, which is approximately 64K bytes. 5.1.4. Receiving RSVP Aggregate Messages If the local system does not recognize or does not wish to accept an Aggregate message, the received messages shall be discarded without further analysis. The receiver next compares the IP TTL with which an Aggregate message is sent to the TTL with which it is received. If a non-RSVP hop is detected, the number of non-RSVP hops is recorded. It is used later in processing of sub-messages. Next, the receiver verifies the version number and checksum of the RSVP aggregate message and discards the message if any mismatch is found. The receiver then starts decapsulating individual sub-messages. Each sub-message has its own complete message length and authentication information. Each sub-message is processed according to procedures specified in RFC 2209. 5.1.5. Forwarding RSVP Aggregate Messages When an RSVP router receives an Aggregate messages which is not addressed to one of it's IP addresses, it SHALL forward the message. Non-RSVP routers should treat RSVP Aggregate messages as any other IP datagram. When individual submessages are being forwarded, they can be encapsulated in another aggregate message before sending to the next-hop neighbor. The Send_TTL field in the submessages should be decremented properly before transmission. Swallow, et al. [Page 46]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 5.1.6. Aggregate-Capable Bit To support message aggregation, an additional capability bit is added to the common RSVP header, which is defined in RFC2205 [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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vers | Flags | Msg Type | RSVP Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Send_TTL | (Reserved) | RSVP Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Flags: 4 bits 0x01: Aggregate capable If set, indicates to RSVP neighbors that this node is willing and capable of receiving aggregate messages. This bit is meaningful only between adjacent RSVP neighbors. 5.2. MESSAGE_ID Extension Within the MESSAGE_ID Class there are two object types defined. The two object types are the MESSAGE_ID object and the MESSAGE_ID ACK object. The MESSAGE_ID Class is used to support acknowledgments and, when used in conjunction with the Hello Extension described in Section 5.3, to indicate when refresh messages are not needed after an acknowledgment. When refreshes are normally generated, the MESSAGE_ID object can also be used to simply provide a shorthand indication of when a message represents new state. Such information can be used on the receiving node to reduce refresh processing requirements. Message identification and acknowledgment is done on a hop-by-hop basis. Acknowledgment is handled independent of SESSION or message type. Both types of MESSAGE_ID objects contain a message identifier. The identifier MUST be unique on a per source IP address basis across messages sent by an RSVP node and received by a particular node. No more than one MESSAGE_ID object may be included in an RSVP message. Each message containing an MESSAGE_ID object may be acknowledged via a MESSAGE_ID ACK object. MESSAGE_ID ACK objects may be sent piggybacked in unrelated RSVP messages or in RSVP ACK messages Either type of MESSAGE_ID object may be included in an aggregate sub-message. When included, the object is treated as if it were Swallow, et al. [Page 47]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 contained in a standard, unaggregated, RSVP message. Only one MESSAGE_ID object MAY be included in a (sub)message and it MUST follow any present MESSAGE_ID ACK objects. When no MESSAGE_ID ACK objects are present, the MESSAGE_ID object MUST immediately follow the INTEGRITY object. When no INTEGRITY object is present, the MESSAGE_ID object MUST immediately follow the (sub)message header. When present, one or more MESSAGE_ID ACK objects MUST immediately follow the INTEGRITY object. When no INTEGRITY object is present, the MESSAGE_ID ACK objects MUST immediately follow the the (sub)message header. An MESSAGE_ID ACK object may only be included in a message when the message's IP destination address matches the unicast address of the node that generated the message(s) being acknowledged. 5.2.1. MESSAGE_ID Object MESSAGE_ID Class = 166 (Value to be assigned by IANA of form 10bbbbbb) MESSAGE_ID object Class = MESSAGE_ID 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | Message ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Flags: 8 bits 0x80 = ACK_Desired flag Indicates that the sender is willing to accept a message acknowledgment. Acknowledgments MUST be silently ignored when they are sent in response to messages whose ACK_Desired flag is not set. This flag MUST be set when the Last_Refresh flag is set. 0x40 = Last_Refresh flag Used in Resv and Path refresh messages to indicate that the sender will not be sending further refreshes. When set, the ACK_Desired flag MUST also be set. This flag MUST NOT be set when the HELLO messages are not being exchanged with Swallow, et al. [Page 48]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 the neighboring RSVP node. Message ID: 24 bits a 24-bit identifier. When combined with the message generator's IP address, uniquely identifies a message. MESSAGE_ID ACK object Class = MESSAGE_ID 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | Message ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Reserved This field is reserved. It must be set to zero on transmis- sion and must be ignored on receipt. Message ID: 24 bits a 24-bit identifier. When combined with the message generator's IP address, uniquely identifies a message. 5.2.2. Ack Message Format Ack messages carry one or more MESSAGE_ID ACK objects. They MUST NOT contain any MESSAGE_ID objects. Ack messages are sent hop-by-hop between RSVP nodes. The IP destination address of an Ack message is the unicast address of the node, that generated the message(s) being acknowledged. For Path, PathTear, Resv, and RervErr messages this is taken from the RSVP_HOP Object. For PathErr and ResvErr messages this is taken from the message's source address. The IP source address is an address of the node that sends the Ack message. The Ack message format is as follows: <ACK Message> ::= <Common Header> [ <INTEGRITY> ] <MESSAGE_ID ACK> [ <MESSAGE_ID ACK> ... ] Swallow, et al. [Page 49]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 For Ack messages, the Msg Type field of the Common Header MUST be set to 13 <TO_BE_ASSIGNED>. 5.2.3. MESSAGE_ID Object Usage The MESSAGE_ID object may be included in any RSVP message other than the Ack message. The MESSAGE_ID object is always generated and processed hop-by-hop. The IP address of the object generator is represented in a per RSVP message type specific fashion. For Path and PathTear messages the generator's IP address is contained in the RSVP_HOP. For Resv, ResvTear, PathErr, ResvErr, ResvConf and Aggregate messages the generator's IP address is the source address in the IP header. The Message ID field contains a generator selected value. This value, when combined with the generator's IP address, identifies a particular RSVP message and the specific state information it represents. When a node is sending a refresh message with a MESSAGE_ID object, it SHOULD use the same Message ID value that was used in the RSVP message that first advertised the state being refreshed. When a node is sending a message that represents new or changed state, the Message ID value MUST have a value that is not otherwise in use. A value is considered to be in use when it has been used in the most recent advertisement or refresh of any state using the associated IP address. Care must also be taken to avoid reuse of a previously used value during times of network loss. At such times, the use of new values may not be noticed by receivers. There is no requirement for Message ID values to be increasing or ordered. The ACK_Desired flag is set when the MESSAGE_ID object generator is capable of accepting MESSAGE_ID ACK objects. Such information can be used to ensure reliable delivery of error and confirm messages and to support fast refreshes in the face of network loss. Nodes setting the ACK_Desired flag SHOULD retransmit unacknowledged messages at a faster interval than the standard refresh time until the message is acknowledged or a "fast" retry limit is reached. The Last_Refresh flag is set in Path and Resv messages when the MESSAGE_ID object generator is exchanging Hello messages, described in Section 5.3, with the next hop RSVP node. Note that the next hop node may not be known for some Path messages. When a refresh message with the Last_Refresh flag set is generated, normal refresh generation MUST continue until the message containing the Last_Refresh flag is acknowledged. Although messages removing state advertised in such messages MUST be retransmit until acknowledged to cover certain packet loss conditions. Messages removing state include Swallow, et al. [Page 50]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 PathTear and ResvTear. Nodes receiving messages containing MESSAGE_ID objects SHOULD use the information in the objects to aid in determining if an message represents new state or a state refresh. Note that state is only refreshed in Path and Resv messages. If a Path or Resv message contains the same Message ID value that was used in the most recently received message for the same session and, for path messages, SENDER_TEMPLATE then the receiver SHOULD treat the message as a state refresh. If the Message ID value differs from the most recently received value, the receiver MUST fully processes the message. Nodes receiving a message containing a MESSAGE_ID object with the ACK_Desired flag set, SHOULD respond with a MESSAGE_ID ACK object. If a node supports the Hello extension it MUST also check the Last_Refresh flag of received Resv and Path messages. If the flag is set, the receiver MUST NOT timeout state associated with associated message. The receiver MUST also be prepared to properly process refresh messages. 5.2.4. MESSAGE_ID ACK Object Usage The MESSAGE_ID ACK object is used to acknowledge receipt of messages containing MESSAGE_ID objects that were sent with the ACK_Desired flag set. The Message ID field of a MESSAGE_ID ACK object MUST have the same value as was received. A MESSAGE_ID ACK object MUST NOT be generated in response to a received MESSAGE_ID object when the ACK_Desired flag is not set. A MESSAGE_ID ACK object may be sent in any RSVP message that has an IP destination address matching the generator of the associated MESSAGE_ID object. The MESSAGE_ID ACK object will not typically be included in the non hop-by-hop Path, PathTear and ResvConf messages. When no appropriate message is available, one or more MESSAGE_ID ACK objects SHOULD be sent in an Ack message. Implementations SHOULD include MESSAGE_ID ACK objects in standard RSVP messages when possible. Upon receiving a MESSAGE_ID ACK object for a message generated with the No_Refresh flag set, normal refresh generation SHOULD be disabled for the associated state. When normal refresh generation is suppressed for Path and Resv state, special care must be taken to remove such state. Particularly in the case of possible packet loss. To ensure such state is removed, once a node generates a Path or Resv refresh message containing a MESSAGE_ID object with the No_Refresh flag set, the node MUST retransmit until acknowledged all messages Swallow, et al. [Page 51]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 removing such state. Messages removing state include PathTear and ResvTear. 5.2.5. Multicast Considerations Path and PathTear messages may be sent to IP multicast destination addresses. When the destination is multicast, it is possible that a single message containing a single MESSAGE_ID object will be received by multiple RSVP next-hops. When the ACK_Desired flag is set in this case, acknowledgment processing is more complex. There are a number of issues including ACK implosion, number acknowledgments to be expected and handling new receivers. ACK implosion occurs when each receiver responds to the MESSAGE_ID object at approximately the same time. This can lead to a potentially large number of MESSAGE_ID ACK objects simultaneously delivered to the message generator. To address this case, the receiver MUST wait a random interval prior to acknowledging a MESSAGE_ID object received in a message destined to a multicast address. The random interval SHOULD be between zero (0) and a configured maximum time. The configured maximum SHOULD be set in proportion to the refresh and "fast" retransmission interval. A more fundamental issue is the number of acknowledgments that the upstream node, the message generator, should expect. The number of acknowledgments that should be expected is the same as the number of RSVP next-hops. In the router-to-router case, the number of next- hops can usually be obtained from routing. When hosts are either the upstream node or the next-hops, the number of next-hops will typically not be readily available. When the number of next-hops is not known, the message generator SHOULD only expect a single response and MUST ignore the No_Refresh flag of MESSAGE_ID Ack objects. The result of this behavior will be special retransmission handling until the message is delivered to at least one next-hop, then followed by standard RSVP refreshes. Standard refresh messages will synchronize state with any next-hops that don't receive the original message. Another issue is handling new (host or router) receivers. It is possible that after sending a Path message and handling of expected number of acknowledgments that a new receiver joins the group. In this case a new Path message must be sent to the new receiver. When normal refresh processing is occurring, there is no issue. When normal refresh processing is suppressed, a path message must still be generated. In the router-to-router case, the identification of new next-hops can usually be obtained from routing. When hosts are either the upstream node or the next-hops, the identification of new next-hops will typically not be possible. When identification of new Swallow, et al. [Page 52]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 next-hops is not possible, the message generator SHOULD only expect a single response and MUST ignore the No_Refresh flag of MESSAGE_ID Ack objects. The result of this behavior will be special retransmission handling until the message is delivered to at least one next-hop, then followed by standard RSVP refreshes. Standard refresh messages will synchronize state with any next-hops that don't receive the original message. There is one additional minor issue with multiple next-hops. The issue is handling a combination of standard-refresh and non-refresh next-hops, i.e. Hello messages are being exchanged with some neighboring nodes but not with others. When this case occurs, refreshes MUST be generated per standard RSVP and the Last_Refresh flag MUST NOT be set. 5.2.6. Compatibility There are no backward compatibility issues raised by the MESSAGE_ID Class. The MESSAGE_ID Class has an assigned value whose form is 10bbbbbb. Per RSVP [1], classes with values of this form must be ignored and not forwarded by nodes not supporting the class. When the receiver of a MESSAGE_ID object does not support the class, the object will be silently ignored. The generator of the MESSAGE_ID object will not see any acknowledgments and therefore refresh messages per standard RSVP. Lastly, since the MESSAGE_ID ACK object can only be issued in response to the MESSAGE_ID object, there are no possible issues with this object or Ack messages. Implementations supporting the MESSAGE_ID extension MUST also support the Hello extension. 5.3. Hello Extension The RSVP Hello extension enables RSVP nodes to detect a loss of a neighboring node's state information. In standard RSVP, such detection occurs as a consequence of RSVP's soft state model. When refresh message generation is disabled via the previously discussed No_Refresh flag processing, the Hello extension is needed to address this failure case. The Hello extensions is not intended to provide 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 RSVP state tracking may be initiated at any time. This includes when neighbors first learn about each other, or just when neighbors are sharing Resv Swallow, et al. [Page 53]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 or Path state. All implementations supporting the MESSAGE_ID ACK object MUST also support the Hello Extension. Such implementations SHOULD initiate Hello processing and MUST be able to respond to Hello messages. 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. Hellos also contain enough information so that one neighbor can suppress issuing hello requests and still perform neighbor failure detection. Neighbor state tracking is accomplished by collecting and storing a neighbor's state "instance" value. If a change in value is seen, then the neighbor is presumed to have reset it's RSVP state. The HELLO objects provide a mechanism for polling for and providing an RSVP state 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.3.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 message format is as follows: <Hello Message> ::= <Common Header> [ <INTEGRITY> ] <HELLO> For Hello messages, the Msg Type field of the Common Header MUST be set to 14 <TO_BE_ASSIGNED>. Swallow, et al. [Page 54]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 5.3.2. HELLO Object HELLO Class = 22 (Value to be assigned by IANA of form 0bbbbbbb) 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Instance | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Instance | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Instance: 32 bits a 32 bit value that represents the sender's RSVP agent's state. This value must change when the agent is reset or the node reboots and otherwise remains the same. This field MUST NOT be set to zero (0). 5.3.3. Hello Message Usage A Hello message containing a HELLO REQUEST object MUST be generated for each neighbor who's state is being tracked. When generating a message containing a HELLO REQUEST object, the sender fills in the Instance field with a value representing it's RSVP agent state. This value MUST NOT change while the agent is maintaining any RSVP state. The generation of a message SHOULD be skipped when a HELLO REQUEST object was received from the destination node within the failure detection 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. Swallow, et al. [Page 55]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 This is done by comparing the sender's Instance field value with the previously received value. If the value differs, than the neighbor has reset and all state associated with the neighbor MUST be "expired" and cleaned up per standard RSVP processing. 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 Instance field value with the previously received value. If the value differs, than the neighbor has reset and all state associated with the neighbor MUST be "expired" and cleaned up per standard RSVP processing. 5.3.4. Compatibility 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 don't 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. When a Hello sender does not receive an acknowledgment, it MUST NOT send MESSAGE_ID ACK objects with the No_Refresh flag set to the corresponding RSVP neighbor. This restriction will preclude neighbors from getting out of RSVP state synchronization. Implementations supporting the Hello extension MUST also support the MESSAGE_ID extension. 6. Acknowledgments This document contains ideas as well as text that have appeared in previous Internet Drafts. The authors of the current draft 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 draft. Swallow, et al. [Page 56]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 7. References [1] Braden, R. et al., "Resource ReSerVation Protocol (RSVP) -- Version 1, Functional Specification", RFC 2205, September 1997. [2] Rosen, E. et al., "A Proposed Architecture for MPLS", Internet Draft, draft-ietf-mpls-arch-02.txt, July 1998. [3] Awduche, D. et al. "Requirements for Traffic Engineering over MPLS", Internet Draft, draft-ietf-mpls-traffic-eng-00.txt, October 1998. [4] Wroclawski, J., "Specification of the Controlled-Load Network Element Service", RFC 2211, September 1997. [5] Rosen, E., "MPLS Label Stack Encoding", Internet Draft, draft-ietf-mpls-label-encaps-03.txt, September 1998. [6] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", RFC 2119, March 1997. [7] Almquist, P., "Type of Service in the Internet Protocol Suite", RFC 1349, July 1992. Swallow, et al. [Page 57]
Internet Draft draft-ietf-mpls-rsvp-lsp-tunnel-01.txt February 1999 8. Authors' Addresses Daniel O. Awduche UUNET Worldcom 3060 Williams Drive Fairfax, VA 22031 Voice: +1 703 208 5277 Email: awduche@uu.net Lou Berger FORE Systems 1595 Spring Hill Road, Suite 500 Vienna, VA 22182 Voice: +1 703 245 4527 Email: lberger@fore.com Der-Hwa Gan Juniper Networks, Inc. 385 Ravendale Drive Mountain View, CA 94043 Voice: +1 650 526 Email: dhg@juniper.net Tony Li Juniper Networks, Inc. 385 Ravendale Drive Mountain View, CA 94043 Voice: +1 650 526 8006 Email: tli@juniper.net Vijay Srinivasan Torrent Networking Technologies Corp. 3000 Aerial Center Parkway, Suite 140 Morrisville, NC 27560 Voice: +1 919 468 8466 ext. 236 Email: vijay@torrentnet.com George Swallow Cisco Systems, Inc. 250 Apollo Drive Chelmsford, MA 01824 Voice: +1 978 244 8143 Email: swallow@cisco.com Swallow, et al. [Page 58]