Network Working Group JP Vasseur Internet Draft Carol Iturralde Expiration Date: January 2002 Cisco Systems, Inc Raymond Zhang Nadim Constantine Infonet Services Corporation Xavier Vinet &Equant July 2001 RSVP Path computation request and reply messages draft-vasseur-mpls-computation-rsvp-00.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." The list of current Internet-Drafts can be accessed at http://www.ietf.org/1id-abstracts.html The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. 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 extensions to RSVP-TE to support a new message type called a "Path computation" message. This message is to be used between an LSR and a Path Computation Server, which may be an LSR or an off-line tool. An RSVP Path Computation Request message is used by the head-end LSR to send its request to the Path Computation Server. The Path Computation Server in turn sends an RSVP Path Computation Reply message containing either: - a positive reply, containing one or more paths, if the request can be satisfied. - a negative reply if no path obeying requested constraints can be found. The Path Computation Server may also optionally suggest new constraint values for which one or several paths could be found. There are many situations where a Path Computation Server may be used. A typical example is in the context of Inter-area MPLS TE. A head-end LSR could request that a Path Computation Server compute one or more paths obeying a specified set of constraints for a TE LSP spanning multiple areas. Another example is the use of a Path Computation Server to compute diversely routed paths between two end points. This may be useful in the context of MPLS TE LSP Path protection or GMPLS LSP Path protection. The computation of Multi-constraints paths requires intensive CPU resources, and may be yet another usage example. Contents 1. Introduction 4 2. Terminology 4 3. RSVP Path Computation Request/Reply messages 4 3.1 RSVP Path Computation Request message format 5 3.2 RSVP Path Computation Reply message format 6 3.3 New RSVP objects used in Path computation messages 7 3.3.1 REQUEST_ID Object 7 3.3.2 METRIC_TYPE 8 3.3.3 PATH_COST 10 3.3.4 NO_PATH_AVAILABLE object 11 3.3.5 NB_PATH object 13 3.3.6 EXCLUDE_ELEMENT object 14 3.3.7 OPAQUE object 15 4. Acknowledgment 16 5. Security Considerations 16 6. Authors' Addresses 17 1. Introduction As mentioned in the abstract, there are various situations where a Path Computation Client may need to compute one or more paths obeying a specified set of constraints, and may ask a Path Computation Server to perform this task. This exchange does not allocate any resources, it is simply a mechanism by which a client may send a path computation request to a server and get in return a reply (positive or negative). Note also this is not related to policy. Let's briefly describe a typical sequence of events: 1) the Path Computation Client (an LSR) sends a request to the Path Computation Server (LSR, off-line tool,...). A Path Computation Request message will be sent containing: a. already specified objects defined in [9] characterizing the request, and b. new objects defined in the present draft related to the request. 2) the Path Computation Request message is sent to the Path Computation Server 3) the Path Computation Server processes the request and sends either: a. a positive reply to the client containing one or more computed paths that obey the requested constraints, b. a negative reply to the client, with optionally some additional information suggesting new constraints values for which the request would have been positive. 4) the Path Computation Client can in turn: a. If the reply is positive i. If the client has sent the same request to several servers in parallel 1. Compare the reply with other replies it received from other servers. 2. Select the preferred path. Otherwise, select the returned path. ii. Establish the LSP using RSVP with extensions as defined in [9] b. If the reply is negative i. Send another request to the Path Computation Server with new constraints (potentially taking into account the returned suggested constraints values by the server, if any) ii. Wait for an answer from other servers, if any. iii. Go to 4). 2. Terminology Terminology used in this draft PCS: Path Computation Server (may be any kind of LSR (ABR, ASBR, ...) or an off-line computation server PCC: Path Computation Client (any head-end LSR) requesting a path computation of the Path Computation Server. 3. RSVP Path computation Request/Reply messages As defined in rfc2205, an RSVP message consists of a common header followed by a body consisting of a variable number of variable-length, typed "objects". As a reminder, the common header format is: 0 1 2 3 +-------------+-------------+-------------+-------------+ | Vers | Flags| Msg Type | RSVP Checksum | +-------------+-------------+-------------+-------------+ | Send_TTL | (Reserved) | RSVP Length | +-------------+-------------+-------------+-------------+ See RFC2205 for details. One new RSVP message type is defined in this draft: a Path Computation Message. The message type is [TBD by IANA]. The Flags field is used to identify whether the message is a path computation request or a reply. Each has different contents, defined below. Flags 0x01-0x8 are reserved. A request has its flag set to [TBD by IANA] and a reply has its flag set to [TBD by IANA]. An RSVP Path Computation Request message is sent by an LSR to request one or more path computations of a Path Computation Server obeying a set of specified constraints. The objects carried in this message may include those defined in [8] and [9], new objects defined in this draft, as well as other objects that may be defined in the future characterizing, for instance, the constraints of the LSP for which one or several paths should be computed. The IP source address is the IP address of the requesting LSR and the IP destination address is the IP address of the Path Computation Server. An RSVP Path Computation Reply message is sent by the PCS to the requesting LSR (PCC) to return one or more computed Paths, if any. The object(s) carried will include one or more EROs (Explicit Route Objects), as defined in [9], plus additional objects defined in this draft. If no path can be found, the PCS reply will be negative. An ERROR_SPEC object will be carried in the reply, and optionally additional information as defined in section 3.3.4. The source IP address will be the IP address of the PCS and the destination IP address will be the IP address of the PCC. RSVP Path computation messages are sent without the router alert option. They may use IP in IP. Path computation messages should be sent in reliable mode as defined in RFC2961. This allows an acknowledgment message to be used to acknowledge the receipt of a Path computation message (request and reply). Note that the DSCP field of the IP packet carrying an RSVP Path Computation message may be set appropriately to provide the appropriate quality of service delivery to the packet. The same Path Computation Request may be sent to several PCSs. In this case, the decision process used by the PCC to select from among (possibly) multiple replies is a local decision and is beyond the scope of this document. Sending requests to multiple PCSs may be useful in the context of multi-area TE where a head-end LSR may send the same request to every ABR in its area and could select the best ABR based on the various replies from those ABRs. 3.1 RSVP Path Computation Request Message Format The Path Computation Request message format is as follows: The Flags field of the common header must be set to [TBD] by IANA to identify a request. ::= [ ] [ [ | ] ... ] [ ] [ ] [ ] [] [] [ ] [ ... ] ::= [ ] [ ] One new (mandatory) object is defined: REQUEST_ID to identify the request. This object is also used to indicate the request's priority. See 3.3.1 for details. The SESSION_ATTRIBUTE object (class=207, C-type=1) allows carrying session priority, resource affinities, etc. Other constraints may also be carried in the Path Computation message. Note that any other constraints that could be defined in the future can be expressed as new objects. The ERO object may also be present in the RSVP Path Computation Request. The reason is that the head-end may want to specify some LSR(s) that the LSP must traverse. At least one sub-object in the ERO must have its L flag bit set to 1, referring to a loose hop. The optional METRIC_TYPE object allows the PCC to specify the metric the PCS must use in its CSPF to select the "best" path obeying the requested constraints. See the METRIC_TYPE object definition in 3.3.2 for more details. The optional NB_PATH object (defined in 3.3.5) allows the PCC to specify the number of requested paths to the PCS for the specific set of constraints specified in the RSVP Path Computation Request message. 3.2 RSVP Path Computation Reply message format The Path Computation Reply message format is as follows: The Flags field of the common header must be set to [TBD by IANA] to identify a Path Computation Reply. ::= [ ] [ | ] ... ] [ ] [ ] [ [] ] ... [ ] [ ... ] The REQUEST_ID is the same REQUEST_ID (contains the same value) as the one contained in the Path Computation Request to which the reply corresponds. In case of a negative reply (no path obeying the constraints can be found), the PCS must send a reply containing an ERROR_SPEC object with: - ERROR_CODE [TBD by IANA] and ERROR_VALUE [TBD by IANA] - "Ipv4 Error Node address" ("Ipv6 Error Node address") set to the Ipv4 (Ipv6) address of the PCS. This must be the same IP address as was used in the Path Computation Request message. There are various reasons why the Path Computation Server may not be able to satisfy the request: - the Path Computation Request message was not valid ("unknown object class (error_code=23, "unknown object C-type (error_code=14), "Routing problem" (error_code=24), ...), ... See [8] and [9] for details. In such a situation, the PCS must send the Path Computation Reply message without any ERO objects and without NO_PATH_AVAILABLE object. - No path can be found obeying the set of requested constraints. If no path can be found by the PCS for the specified constraints, and only in this situation, a NO_PATH_AVAILABLE object may be inserted into the RSVP Path Computation Reply message sent by the PCS. This object (defined in section 3.3.4) is optional and may specify the constraint(s) that explain(s) why no path has been found. In addition, the PCS may use the NO_PATH_AVAILABLE object to suggest new constraint values for which a path can be found. In such a situation, the Path Computation Reply message must not contain any ERO objects. Note that a Path Computation Reply message may contain several EROs if and only if several paths have been requested by the LSR in its Path Computation Request message using the new NB_PATH object (see 3.3.5). Moreover, multiple replies may be combined in the same Path Computation Reply message. This is done using a list of EROs, each following its corresponding REQUEST_ID as shown in the example below. A reply should not be delayed in order to bundle several path computation results for requests whose priority REQUEST_ID field (see 3.3.1) has been set to "high". As an example, if a PCC sends several requests: - L low priority requests with REQUEST_ID = R(i) I=1 ... L - P high priority requests with REQUEST_ID = R'(i) I=1 ... P Then the PCS MUST reply to every high priority request as soon as the computation result is completed. On the other hand, the low priority request results could be bundled in the SAME Path Computation Reply message using the following format: ... . If no path can be found for a specific request, an individual negative Path Computation Reply message must be sent for the corresponding request. A PATH_COST object (defined 3.3.3) must be inserted and follow each ERO object if and only if the PCC has requested the PCS to provide the cost of each computed path in its Path Computation Request message (the flag field in the REQUEST_ID object of the Path Computation Request message must be set to 0x1). 3.3 New RSVP objects used in Path Computation messages 3.3.1 REQUEST_ID Object The REQUEST_ID object must be used in every Path Computation Request message and in every Path Computation Reply message. REQUEST_ID Class-Num is [TBD] REQUEST_ID C-Type is [TBD] 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flag |Priority| Epoch | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Request_ID_number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Flags: 4 bits 0x0: the PCC does not require the PCS to indicate the path's computed cost in its reply 0x1: the PCC does require the PCS to indicate the cost of the computed path(s) in its reply. Priority: 4 bits This field may be used for the requesting LSR to specify to the PCS the urgency of this request. The decision of which priority should be used for a specific request is a local matter and must be set to 0 when unused. A possible use of this field is when several computations may be requested, each having different timing requirements: typically a request for a reoptimization would have a lower priority than a re-routing request. 0x0: normal. No timing requirement specified. 0x3: high. Urgent request to be served as soon as possible. Epoch: 24 bits Epoch is as described in RFC2961 and can be the same number. Request_ID_number: 32 bits This value (combined with the IP address of the PCC) uniquely identifies the Path Computation Request the message refers to and is incremented every time a new request is sent to the PCS. If no Path computation reply is received from the PCS, the request may be resent with the same Request_ID_number. The same Request_ID_number may be sent to different PCS's. The Path Computation Reply will be identified by the IP source address of the sender. The presence of the REQUEST_ID object is mandatory in every Path Computation Request and Reply message. 3.3.2 METRIC_TYPE The METRIC_TYPE object may be used in Path Computation Request message. This object is optional. When computing the path(s) obeying a set of specified constraints, the PCS will run a CSPF and will select the "shortest" path from the subset of the topology which meets the constrains. The shortest Path is defined as the path having the lowest cost for a specific metric. This metric can be the IGP metric, the Traffic Engineering metric, or any other metric defined in the future. See also [11] and [12] for a discussion on the use of the metric in the path computation. The METRIC_TYPE object is used by the PCC to indicate the PCS which metric to be used in its CSPF. When the METRIC_TYPE object is not present, the PCS must use the TE metric. METRIC_TYPE object format METRIC_TYPE Class-Num is [TBD] METRIC_TYPE C-Type is [TBD] 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // (Subobjects) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Subobjects The contents of the METRIC_TYPE object are a series of variable-length data items called subobjects. The subobjects are defined in section below. Subobjects 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+ | metric_type | Length | (Subobject contents) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+ metric_type metric_type: identifies the metric type 0x00: IGP metric 0x01: Traffic Engineering metric length The Length contains the total length of the subobject in bytes, including the metric_type and Length fields. The Length MUST be at least 4, and MUST be a multiple of 4. Subject content Both IGP and Traffic Engineering metric have the same form: 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | metric_value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The metric_value will be set to 0 in a path computation request. Note that the PCC may specify multiple metrics is its request (the flag of the REQUEST_ID must always be set to 0x1). In such a case, the PCS must: - compute the shortest path(s) obeying the specified set of constraints for every metric, - provide in its reply the shortest path(s) for each metric since the PCC has required the shortest for more than one metric. This means that the PCS must in this case include a PATH_COST object for every returned ERO to specify the metric (see 3.3.3). 3.3.3 PATH_COST The PATH_COST object may be used in Path Computation Reply message. This object is optional. It may be desirable for the PCC to request that the PCS return not only the computed paths but also their corresponding costs. The cost of the path is defined as the sum of the link metrics along this path. As an example, in the context of inter-area, the PCC may be an LSR and the PCS an ABR. The PCC requires one or more paths to the ABR with associated constraints for an LSP spanning areas. The PCS will in turn return one or more computed paths but the PCC does not have any information about the associated cost of the computed paths: the reply just contains one or more EROs (corresponding to the paths) that satisfy the requested constraints. The PCC may desire to send the same request to various ABRs and compare the replies to select the "best" ABR. Then it may be interesting, when providing ERO(s) to also add the cost of the corresponding path. The PCC could select the "best" ABR based on the ERO's length, path cost, ... As defined in 3.3.1, the PCC will set the Flag field to 0x1 in the REQUEST_ID object of its Path Computation Request message to indicate the path(s) cost must be provided by the PCS in its reply (if the reply is positive). When the PCS returns one or more computed paths to the PCC: - if the REQUEST_ID flag has been set to 0x0 in the Path Computation Request message, the PCS may or not provide the Path(s) cost, - if the REQUEST_ID flag has been set to 0x1 in the Path Computation Request message, the PCS must, for every ERO, include a PATH_COST object specifying the cost of the computed path for the requested metric(s). The requested metric is specified in the METRIC_TYPE Object received in the Path Computation Request. As mentioned in the previous section, there is another situation where the PCS must include a PATH_COST object for every computed ERO: when the request has been received with a METRIC_TYPE object specifying more than one metric. In this case, the PCS will also add one PATH_COST object for every ERO specifying the metric for which the ERO corresponds to the shortest path. The PATH_COST object will be made of subobjects identifying the metric type and the associated value. PATH_COST Class-Num is [TBD by IANA] PATH_COST C-Type is [TBD by 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // (Subobjects) // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The same subobjects as previously defined will be used. The IGP metric of a computed path is defined as the sum of the IGP metrics of each link along the path. The TE metric of a computed path is defined as the sum of the TE metrics of each link along the path. Examples of METRIC_TYPE, PATH_COST Objects In the following examples, not all optional objects are mentioned and we suppose positive answers. Example 1 Request - - =a, flag=0x1 - : TE metric - The PCC sends a request for the computation of one path obeying the set of specified constraints. The returned path must be the shortest path using the TE metric. Reply - REQUEST_ID=a - - : C (sum of the TE metric of the links along the path for ERO 1) Note: if the flag is set to 0x0 in the request, the PCS may (but is not required to) return the computed path(s) with PATH_COST objects. Example 2 Request - - =a, flag=0x1 - : IGP metric & TE metric - The PCC sends a request for the computation of one path obeying the set of specified constraints. The returned path must be the shortest path using the TE metric. Reply - REQUEST_ID=a - - : C1 (sum of the IGP metric of the links along the path for ERO 1) - - : C2 (sum of the TE metric of the links along the path for ERO 1) 3.3.4 NO_PATH_AVAILABLE object The NO_PATH_AVAILABLE object may be used in Path Computation Reply message. This object is optional. When present, it allows the PCS to: - indicate the unsatisfied constraint (the reason why no path can be found) - (optionally) suggest a new value for the constraint (the closest value of the required one) for which a path could be found. This may be used by the requesting LSR to resend a new request with the suggested value. The PCS may not be capable of suggesting a new value. NO_PATH_AVAILABLE Class-Num is [TBD by IANA] - C-Type is [TBD by 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flag | Reserved | Contraint_type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Suggested_value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Flags: 8 bits 0x00: the PCS indicates the constraint for which no path can be found but does not suggest any other value for the constraint for which a path could be found. 0x01: the PCS indicates the constraint for which no path can be found and suggests another value for this constraint (as close as possible to the original requested constraint) for which a path could be found. This value is indicated in the suggested_value field. 0x02: the PCS indicates that no path can be found with the requested constraints but an unconstrained path could be found. In this case both the Contraint_type and Suggested_value fields must be set to 0. Constraint_type: 16 bits Defines the constraint for which no path has been found by the Path Computation Server. 0x0001 = no path can be found with the requested bandwidth 0x0002 = no path can be found with the requested protection 0x0003 = no path can be found with the requested class affinity attribute 0x0004 = the path-correlation requested cannot be satisfied. Suggested_value: 32 bits The PCS may, for each constraint, suggest a value (potentially the closest to the requested constraint in the original Path computation request) for which a path could be found. In this case the flag must be set to 0x00000001. For example, if a bandwidth of X is requested by the head-end LSR and a path may be found but with a bandwidth of Y (with Y - =a - : number_PATH=N, Path_correlation=0x02 (Node diversely routed paths) - sender descriptor: bw=x, ... If just M (M (specifying a negative reply) - : number_PATH=M, Path_correlation=0x02 - : Flags=0x01, Constraint_type=0x0001 (bandwidth), Suggested_value=y Which means: - the reply is negative (the request cannot be satisfied with the specified constraints) - the unsatisfied constraint is "Bandwidth" - Exactly M EROs (M