draft-ietf-mpls-rsvp-lsp-tunnel-05.txt   draft-ietf-mpls-rsvp-lsp-tunnel-06.txt 
Network Working Group Daniel O. Awduche Network Working Group Daniel O. Awduche
Internet Draft UUNET (MCI Worldcom), Inc. Internet Draft UUNET (MCI Worldcom), Inc.
Expiration Date: August 2000 Expiration Date: January 2001
Lou Berger Lou Berger
LabN Consulting, LLC LabN Consulting, LLC
Der-Hwa Gan Der-Hwa Gan
Juniper Networks, Inc. Juniper Networks, Inc.
Tony Li Tony Li
Procket Networks, Inc. Procket Networks, Inc.
Vijay Srinivasan
Cosine Communications, Inc.
George Swallow George Swallow
Cisco Systems, Inc. Cisco Systems, Inc.
Vijay Srinivasan July 2000
Torrent Networks, Inc.
February 2000
RSVP-TE: Extensions to RSVP for LSP Tunnels RSVP-TE: Extensions to RSVP for LSP Tunnels
draft-ietf-mpls-rsvp-lsp-tunnel-05.txt draft-ietf-mpls-rsvp-lsp-tunnel-06.txt
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. Internet-Drafts are working all provisions of Section 10 of RFC2026. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas, documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts. working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
skipping to change at page 3, line 10 skipping to change at page 3, line 10
establishment of explicitly routed label switched paths using RSVP as establishment of explicitly routed label switched paths using RSVP as
a signaling protocol. The result is the instantiation of label- a signaling protocol. The result is the instantiation of label-
switched tunnels which can be automatically routed away from network switched tunnels which can be automatically routed away from network
failures, congestion, and bottlenecks. failures, congestion, and bottlenecks.
Contents Contents
1 Introduction .......................................... 5 1 Introduction .......................................... 5
1.1 Background ............................................. 6 1.1 Background ............................................. 6
1.2 Terminology ............................................ 7 1.2 Terminology ............................................ 7
2 Overview .............................................. 8 2 Overview .............................................. 9
2.1 LSP Tunnels ............................................ 8 2.1 LSP Tunnels and Traffic Engineered Tunnels ............. 9
2.2 Operation of LSP Tunnels ............................... 9 2.2 Operation of LSP Tunnels ............................... 9
2.3 Service Classes ........................................ 11 2.3 Service Classes ........................................ 12
2.4 Reservation Styles ..................................... 11 2.4 Reservation Styles ..................................... 12
2.4.1 Fixed Filter (FF) Style ................................ 11 2.4.1 Fixed Filter (FF) Style ................................ 12
2.4.2 Wildcard Filter (WF) Style ............................. 12 2.4.2 Wildcard Filter (WF) Style ............................. 12
2.4.3 Shared Explicit (SE) Style ............................. 12 2.4.3 Shared Explicit (SE) Style ............................. 13
2.5 Rerouting LSP Tunnels .................................. 13 2.5 Rerouting Traffic Engineered Tunnels ................... 14
3 LSP Tunnel related Message Formats ..................... 14 2.6 Path MTU ............................................... 15
3.1 Path Message ........................................... 15 3 LSP Tunnel related Message Formats ..................... 16
3.2 Resv Message ........................................... 15 3.1 Path Message ........................................... 17
4 LSP Tunnel related Objects ............................. 16 3.2 Resv Message ........................................... 17
4.1 Label Object ........................................... 16 4 LSP Tunnel related Objects ............................. 18
4.1.1 Handling Label Objects in Resv messages ................ 17 4.1 Label Object ........................................... 18
4.1.2 Non-support of the Label Object ........................ 17 4.1.1 Handling Label Objects in Resv messages ................ 19
4.2 Label Request Object ................................... 18 4.1.2 Non-support of the Label Object ........................ 20
4.2.1 Handling of LABEL_REQUEST .............................. 21 4.2 Label Request Object ................................... 21
4.2.2 Non-support of the Label Request Object ................ 21 4.2.1 Label Request without Label Range ...................... 21
4.3 Explicit Route Object .................................. 22 4.2.2 Label Request with ATM Label Range ..................... 21
4.3.1 Applicability .......................................... 22 4.2.3 Label Request with Frame Relay Label Range ............. 23
4.3.2 Semantics of the Explicit Route Object ................. 23 4.2.4 Handling of LABEL_REQUEST .............................. 24
4.3.3 Subobjects ............................................. 24 4.2.5 Non-support of the Label Request Object ................ 24
4.3.4 Processing of the Explicit Route Object ................ 27 4.3 Explicit Route Object .................................. 25
4.3.5 Loops .................................................. 29 4.3.1 Applicability .......................................... 26
4.3.6 Non-support of the Explicit Route Object ............... 29 4.3.2 Semantics of the Explicit Route Object ................. 26
4.4 Record Route Object .................................... 30 4.3.3 Subobjects ............................................. 27
4.4.1 Subobjects ............................................. 30 4.3.4 Processing of the Explicit Route Object ................ 30
4.4.2 Applicability .......................................... 33 4.3.5 Loops .................................................. 32
4.4.3 Handling RRO ........................................... 33 4.3.6 Forward Compatibility .................................. 32
4.4.4 Loop Detection ......................................... 35 4.3.7 Non-support of the Explicit Route Object ............... 32
4.4.5 Non-support of RRO ..................................... 35 4.4 Record Route Object .................................... 33
4.5 Error Codes for ERO and RRO ............................ 36 4.4.1 Subobjects ............................................. 33
4.6 Session, Sender Template, and Filter Spec Objects ...... 37 4.4.2 Applicability .......................................... 37
4.6.1 Session Object ......................................... 37 4.4.3 Handling RRO ........................................... 37
4.6.2 Sender Template Object ................................. 39 4.5 Processing RRO ......................................... 38
4.6.3 Filter Specification Object ............................ 40 4.5.1 Loop Detection ......................................... 39
4.6.4 Reroute Procedure ...................................... 40 4.5.2 Forward Compatibility .................................. 39
4.7 Session Attribute Object ............................... 41 4.5.3 Non-support of RRO ..................................... 40
4.8 Tspec and Flowspec Object for Class-of-Service Service... 44 4.6 Error Codes for ERO and RRO ............................ 40
5 Hello Extension ........................................ 46 4.7 Session, Sender Template, and Filter Spec Objects ...... 41
5.1 Hello Message Format ................................... 47 4.7.1 Session Object ......................................... 41
5.2 HELLO Object ........................................... 47 4.7.2 Sender Template Object ................................. 43
5.3 Hello Message Usage .................................... 48 4.7.3 Filter Specification Object ............................ 44
5.4 Multi-Link Considerations .............................. 49 4.7.4 Reroute and Bandwidth Increase Procedure ............... 45
5.5 Compatibility .......................................... 50 4.8 Session Attribute Object ............................... 46
6 Security Considerations ................................ 50 4.8.1 Format without resource affinities ..................... 46
7 IANA Considerations .................................... 50 4.8.2 Format with resource affinities ........................ 48
8 Intellectual Property Considerations ................... 51 4.8.3 Procedures applying to both C-Types .................... 49
9 Acknowledgments ........................................ 51 4.8.4 Resource Affinity Procedures .......................... 51
10 References ............................................. 51 4.9 Tspec and Flowspec Object for Class-of-Service Service... 52
11 Authors' Addresses ..................................... 52 5 Hello Extension ........................................ 54
5.1 Hello Message Format ................................... 55
5.2 HELLO Object formats ................................... 55
5.2.1 HELLO REQUEST object ................................... 55
5.2.2 HELLO ACK object ....................................... 56
5.3 Hello Message Usage .................................... 56
5.4 Multi-Link Considerations .............................. 58
5.5 Compatibility .......................................... 58
6 Security Considerations ................................ 59
7 IANA Considerations .................................... 59
8 Intellectual Property Considerations ................... 59
9 Acknowledgments ........................................ 60
10 References ............................................. 60
11 Authors' Addresses ..................................... 61
1. Introduction 1. Introduction
Section 2.9 of the MPLS architecture [2] defines a label distribution Section 2.9 of the MPLS architecture [2] defines a label distribution
protocol as a set of procedures by which one Label Switched Router protocol as a set of procedures by which one Label Switched Router
(LSR) informs another of the meaning of labels used to forward (LSR) informs another of the meaning of labels used to forward
traffic between and through them. The MPLS architecture does not traffic between and through them. The MPLS architecture does not
assume a single label distribution protocol. This document is a assume a single label distribution protocol. This document is a
specification of extensions to RSVP for establishing label switched specification of extensions to RSVP for establishing label switched
paths (LSPs) in Multi-protocol Label Switching (MPLS) networks. paths (LSPs) in Multi-protocol Label Switching (MPLS) networks.
skipping to change at page 8, line 24 skipping to change at page 8, line 24
IP routing. IP routing.
Label Switched Path Label Switched Path
The path created by the concatenation of one or more label The path created by the concatenation of one or more label
switched hops, allowing a packet to be forwarded by swapping switched hops, allowing a packet to be forwarded by swapping
labels from an MPLS node to another MPLS node. For a more labels from an MPLS node to another MPLS node. For a more
precise definition see [2]. precise definition see [2].
LSP LSP
A Label Switched Path A Label Switched Path
LSP Tunnel LSP Tunnel
An LSP which is used to tunnel below normal IP routing and/or An LSP which is used to tunnel below normal IP routing and/or
filtering mechanisms. filtering mechanisms.
Traffic Engineered Tunnel (TE Tunnel)
An set of one or more LSP Tunnels which carries a traffic
trunk.
Traffic Trunk Traffic Trunk
An set of flows aggregated by their service class and then An set of flows aggregated by their service class and then
placed on an LSP or set of LSPs. For further discussion see placed on an LSP or set of LSPs called a traffic engineered
[3]. tunnel. For further discussion see [3].
2. Overview 2. Overview
2.1. LSP Tunnels 2.1. LSP Tunnels and Traffic Engineered Tunnels
According to [1], "RSVP defines a 'session' to be a data flow with a According to [1], "RSVP defines a 'session' to be a data flow with a
particular destination and transport-layer protocol." However, when particular destination and transport-layer protocol." However, when
RSVP and MPLS are combined, a flow or session can be defined with RSVP and MPLS are combined, a flow or session can be defined with
greater flexibility and generality. The ingress node of an LSP can greater flexibility and generality. The ingress node of an LSP can
use a variety of means to determine which packets are assigned a 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 particular label. Once a label is assigned to a set of packets, the
label effectively defines the "flow" through the LSP. We refer to label effectively defines the "flow" through the LSP. We refer to
such an LSP as an "LSP tunnel" because the traffic through it is such an LSP as an "LSP tunnel" because the traffic through it is
opaque to intermediate nodes along the label switched path. opaque to intermediate nodes along the label switched path.
New RSVP SESSION objects, called LSP_TUNNEL_IPv4 and LSP_TUNNEL_IPv6 New RSVP SESSION, SENDER, and FILTER_SPEC objects, called
have been defined to support the LSP tunnel feature. The semantics LSP_TUNNEL_IPv4 and LSP_TUNNEL_IPv6 have been defined to support the
of these objects, from the perspective of a node along the label LSP tunnel feature. The semantics of these objects, from the
switched path, is that traffic belonging to the LSP tunnel is perspective of a node along the label switched path, is that traffic
identified solely on the basis of packets arriving from the PHOP or belonging to the LSP tunnel is identified solely on the basis of
"previous hop" (see [1]) with the particular label value(s) assigned packets arriving from the PHOP or "previous hop" (see [1]) with the
by this node to upstream senders to the session. In fact, the particular label value(s) assigned by this node to upstream senders
IPv4(v6) that appears in the object name only denotes that the to the session. In fact, the IPv4(v6) that appears in the object
destination address is an IPv4(v6) address. When we refer to these name only denotes that the destination address is an IPv4(v6)
objects generically, we use the term LSP_TUNNEL Session. address. When we refer to these objects generically, we use the
qualifier LSP_TUNNEL.
In some applications it is useful to associate sets of LSP tunnels.
This can be useful during reroute operations or to spread a traffic
trunk over multiple paths. In the traffic engineering application
such sets are called traffic engineered tunnels (TE tunnels). To
enable the identification and association of such LSP tunnels, two
identifiers are carried. A tunnel ID is part of the SESSION object.
The SESSION object uniquely defines a traffic engineered tunnel. The
SENDER and FILTER_SPEC objects carry an LSP ID. The SENDER (or
FILTER_SPEC) object together with the SESSION object uniquely
identifies an LSP tunnel
2.2. Operation of LSP Tunnels 2.2. Operation of LSP Tunnels
This section summarizes some of the features supported by RSVP as This section summarizes some of the features supported by RSVP as
extended by this document related to the operation of LSP tunnels. extended by this document related to the operation of LSP tunnels.
These include: (1) the capability to establish LSP tunnels with or These include: (1) the capability to establish LSP tunnels with or
without QoS requirements, (2) the capability to dynamically reroute without QoS requirements, (2) the capability to dynamically reroute
an established LSP tunnel, (3) the capability to observe the actual an established LSP tunnel, (3) the capability to observe the actual
route traversed by an established LSP tunnel, (4) the capability to route traversed by an established LSP tunnel, (4) the capability to
identify and diagnose LSP tunnels, (5) the capability to preempt an identify and diagnose LSP tunnels, (5) the capability to preempt an
skipping to change at page 10, line 21 skipping to change at page 10, line 45
By adding a RECORD_ROUTE object to the Path message, the sender node By adding a RECORD_ROUTE object to the Path message, the sender node
can receive information about the actual route that the LSP tunnel can receive information about the actual route that the LSP tunnel
traverses. The sender node can also use this object to request traverses. The sender node can also use this object to request
notification from the network concerning changes to the routing path. notification from the network concerning changes to the routing path.
The RECORD_ROUTE object is analogous to a path vector, and hence can The RECORD_ROUTE object is analogous to a path vector, and hence can
be used for loop detection. be used for loop detection.
Finally, a SESSION_ATTRIBUTE object can be added to Path messages to Finally, a SESSION_ATTRIBUTE object can be added to Path messages to
aid in session identification and diagnostics. Additional control aid in session identification and diagnostics. Additional control
information, such as preemption, priority, and local-protection, are information, such as setup and hold priorities, resource affinities
also included in this object. (see [3]), and local-protection, are also included in this object.
The setup and hold priorities may be used along with SENDER_TSPEC and
any POLICY_DATA objects contained in Path messages as input to their
policy control. For instance, in the traffic engineering
application, it is very useful to use the Path message as a means of
verifying that bandwidth exists at a particular priority along an
entire path before pre-empting any lower priority reservations. If a
Path message is allowed to progress when there are insufficient
resources, the there is a danger that lower priority reservations
downstream of this point will unnecessarily be pre-empted in a futile
attempt to service this request.
When the EXPLICIT_ROUTE object (ERO) is present, the Path message is When the EXPLICIT_ROUTE object (ERO) is present, the Path message is
forwarded towards its destination along a path specified by the ERO. forwarded towards its destination along a path specified by the ERO.
Each node along the path records the ERO in its path state block. 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 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 this case the modified ERO SHOULD be stored in the path state block
in addition to the received ERO. in addition to the received ERO.
The LABEL_REQUEST object requests intermediate routers and receiver The LABEL_REQUEST object requests intermediate routers and receiver
nodes to provide a label binding for the session. If a node is nodes to provide a label binding for the session. If a node is
skipping to change at page 13, line 11 skipping to change at page 14, line 5
be used when path messages do not carry the EXPLICIT_ROUTE object, or be used when path messages do not carry the EXPLICIT_ROUTE object, or
when Path messages have identical EXPLICIT_ROUTE objects. In either when Path messages have identical EXPLICIT_ROUTE objects. In either
of these cases a common label may be assigned. of these cases a common label may be assigned.
Path messages from different senders can each carry their own ERO, Path messages from different senders can each carry their own ERO,
and the paths taken by the senders can converge and diverge at any and the paths taken by the senders can converge and diverge at any
point in the network topology. When Path messages have differing point in the network topology. When Path messages have differing
EXPLICIT_ROUTE objects, separate LSPs for each EXPLICIT_ROUTE object EXPLICIT_ROUTE objects, separate LSPs for each EXPLICIT_ROUTE object
must be established. must be established.
2.5. Rerouting LSP Tunnels 2.5. Rerouting Traffic Engineered Tunnels
One of the requirements for Traffic Engineering is the capability to One of the requirements for Traffic Engineering is the capability to
reroute an established LSP tunnel under a number of conditions, based reroute an established TE tunnel under a number of conditions, based
on administrative policy. For example, in some contexts, an on administrative policy. For example, in some contexts, an
administrative policy may dictate that a given LSP tunnel is to be administrative policy may dictate that a given TE tunnel is to be
rerouted when a more "optimal" route becomes available. Another rerouted when a more "optimal" route becomes available. Another
important context when LSP tunnel reroute is usually required is upon important context when TE tunnel reroute is usually required is upon
failure of a resource along the tunnel's established path. Under failure of a resource along the TE tunnel's established path. Under
some policies, it may also be necessary to return the LSP tunnel to some policies, it may also be necessary to return the TE tunnel to
its original path when the failed resource becomes re-activated. its original path when the failed resource becomes re-activated.
In general, it is highly desirable not to disrupt traffic, or In general, it is highly desirable not to disrupt traffic, or
adversely impact network operations while LSP tunnel rerouting is in adversely impact network operations while TE tunnel rerouting is in
progress. This adaptive and smooth rerouting requirement progress. This adaptive and smooth rerouting requirement
necessitates establishing a new LSP tunnel and transferring traffic necessitates establishing a new LSP tunnel and transferring traffic
from the old LSP tunnel onto it before tearing down the old LSP from the old LSP tunnel onto it before tearing down the old LSP
tunnel. This concept is called "make-before-break." A problem can tunnel. This concept is called "make-before-break." A problem can
arise because the old and new LSP tunnels might compete with other arise because the old and new LSP tunnels might compete with other
for resources on network segments which they have in common. for resources on network segments which they have in common.
Depending on availability of resources, this competition can cause Depending on availability of resources, this competition can cause
Admission Control to prevent the new tunnel from being established. Admission Control to prevent the new LSP tunnel from being
An advantage of using RSVP to establish LSP tunnels is that it solves established. An advantage of using RSVP to establish LSP tunnels is
this problem very elegantly. that it solves this problem very elegantly.
To support make-before-break in a smooth fashion, it is necessary To support make-before-break in a smooth fashion, it is necessary
that on links that are common to the old and new LSPs, resources used 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 by the old LSP tunnel should not be released before traffic is
transitioned to the new LSP tunnel, and reservations should not be transitioned to the new LSP tunnel, and reservations should not be
counted twice because this might cause Admission Control to reject counted twice because this might cause Admission Control to reject
the new LSP tunnel. the new LSP tunnel.
A similar situation arises when one wants to increase the bandwidth
of a TE tunnel. The new reservation will be for the full amount
needed, but the actual allocation needed is only the delta between
the new and old bandwidth.
The combination of the LSP_TUNNEL SESSION object and the SE The combination of the LSP_TUNNEL SESSION object and the SE
reservation style naturally achieves smooth transitions. The basic reservation style naturally accommodates smooth transitions in
idea is that the old and new LSP tunnels share resources along links bandwidth and routing. The idea is that the old and new LSP tunnels
which they have in common. The LSP_TUNNEL SESSION object is used to share resources along links which they have in common. The LSP_TUNNEL
narrow the scope of the RSVP session to the particular tunnel in SESSION object is used to narrow the scope of the RSVP session to the
question. To uniquely identify a tunnel, we use the combination of particular TE tunnel in question. To uniquely identify a TE tunnel,
the destination IP address (an address of the node which is the we use the combination of the destination IP address (an address of
egress of the tunnel), a Tunnel ID, and the tunnel ingress node's IP the node which is the egress of the tunnel), a Tunnel ID, and the
address, which is placed in the Extended Tunnel ID field. tunnel ingress node's IP address, which is placed in the Extended
Tunnel ID field.
During the reroute operation, the tunnel ingress needs to appear as During the reroute or bandwidth-increase operation, the tunnel
two different senders to the RSVP session. This is achieved by the ingress needs to appear as two different senders to the RSVP session.
inclusion of an "LSP ID", which is carried in the SENDER_TEMPLATE and This is achieved by the inclusion of the "LSP ID", which is carried
FILTER_SPEC objects. Since the semantics of these objects are in the SENDER_TEMPLATE and FILTER_SPEC objects. Since the semantics
changed, a new C-Type is assigned. of these objects are changed, a new C-Types are assigned.
To effect a reroute, the ingress node picks a new LSP ID and forms a To effect a reroute, the ingress node picks a new LSP ID and forms a
new SENDER_TEMPLATE. The ingress node then creates a new ERO to new SENDER_TEMPLATE. The ingress node then creates a new ERO to
define the new path. Thereafter the node sends a new Path Message define the new path. Thereafter the node sends a new Path Message
using the original SESSION object and the new SENDER_TEMPLATE and using the original SESSION object and the new SENDER_TEMPLATE and
ERO. It continues to use the old LSP and refresh the old Path 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 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 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 common, the shared SESSION object and SE style allow the LSP to be
established sharing resources with the old LSP. Once the ingress established sharing resources with the old LSP. Once the ingress
node receives a Resv message for the new LSP, it can transition node receives a Resv message for the new LSP, it can transition
traffic to it and tear down the old LSP. traffic to it and tear down the old LSP.
To effect a bandwidth-increase, a new Path Message with a new LSP_ID
can be used to attempt a larger bandwidth reservation while the
current LSP_ID continues to be refreshed to ensure that the
reservation is not lost if the larger reservation fails.
2.6. Path MTU
Standard RSVP [1] and Int-Serv [11] provide the RSVP sender with the
minimum MTU available between the sender and the receiver. This path
MTU identification capability is also provided for LSPs established
via RSVP.
Path MTU information is carried, depending on which is present, in
the Integrated Services or Class-of-Service objects. When using
Integrated Services objects, path MTU is provided based on the
procedures defined in [11]. Path MTU identification when using
Class-of-Service objects is defined in Section 4.8.
With standard RSVP, the path MTU information is used by the sender to
check which IP packets exceed the path MTU. For packets that exceed
the path MTU, the sender either fragments the packets or, when the IP
datagram has the "Don't Fragment" bit set, issues an ICMP destination
unreachable message. This path MTU related handling is also required
for LSPs established via RSVP.
The following algorithm applies to all unlabeled IP datagrams and to
any labeled packets which the node knows to be IP datagrams, to which
labels need to be added before forwarding. For labeled packets the
bottom of stack is found, the IP header examined.
Using the terminology defined in [5], an LSR MUST execute the
following algorithm:
1. Let N be the number of bytes in the label stack (i.e, 4 times
the number of label stack entries) including labels to be added
by this node.
2. Let M be the smaller of the "Maximum Initially Labeled IP
Datagram Size" or of (Path MTU - N).
When the size of the datagram (without labels) exceeds the value
of M,
If the DF bit is not set in the IP header, then
(a) the datagram must be broken into fragments, each of whose
size is no greater than the value of the parameter, and
(b) each fragment must be labeled and then forwarded.
If the DF bit is set in the IP header, then
(a) the datagram MUST NOT be forwarded
(b) Create an ICMP Destination Unreachable Message:
i. set its Code field [12] to "Fragmentation Required
and DF Set",
ii. set its Next-Hop MTU field [13] to M
(c) If possible, transmit the ICMP Destination Unreachable
Message to the source of the of the discarded datagram.
3. LSP Tunnel related Message Formats 3. LSP Tunnel related Message Formats
Five new objects are defined in this section: Five new objects are defined in this section:
Object name Applicable RSVP messages Object name Applicable RSVP messages
--------------- ------------------------ --------------- ------------------------
LABEL_REQUEST Path LABEL_REQUEST Path
LABEL Resv LABEL Resv
EXPLICIT_ROUTE Path EXPLICIT_ROUTE Path
RECORD_ROUTE Path, Resv RECORD_ROUTE Path, Resv
skipping to change at page 15, line 12 skipping to change at page 17, line 26
SESSION_ATTRIBUTE objects is simply a recommendation. The ordering SESSION_ATTRIBUTE objects is simply a recommendation. The ordering
of these objects is not important, so an implementation MUST be of these objects is not important, so an implementation MUST be
prepared to accept objects in any order. prepared to accept objects in any order.
3.1. Path Message 3.1. Path Message
The format of the Path message is as follows: The format of the Path message is as follows:
<Path Message> ::= <Common Header> [ <INTEGRITY> ] <Path Message> ::= <Common Header> [ <INTEGRITY> ]
<SESSION> <RSVP_HOP> <SESSION> <RSVP_HOP>
<TIME_VALUES> [ <TIME_VALUES> ]
[ <EXPLICIT_ROUTE> ] [ <EXPLICIT_ROUTE> ]
<LABEL_REQUEST> <LABEL_REQUEST>
[ <SESSION_ATTRIBUTE> ] [ <SESSION_ATTRIBUTE> ]
[ <POLICY_DATA> ... ] [ <POLICY_DATA> ... ]
[ <sender descriptor> ] <sender descriptor>
<sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC> <sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC>
[ <ADSPEC> ] [ <ADSPEC> ]
[ <RECORD_ROUTE> ] [ <RECORD_ROUTE> ]
3.2. Resv Message 3.2. Resv Message
The format of the Resv message is as follows: The format of the Resv message is as follows:
<Resv Message> ::= <Common Header> [ <INTEGRITY> ] <Resv Message> ::= <Common Header> [ <INTEGRITY> ]
<SESSION> <RSVP_HOP> <SESSION> <RSVP_HOP>
<TIME_VALUES> [ <TIME_VALUES> ]
[ <RESV_CONFIRM> ] [ <SCOPE> ] [ <RESV_CONFIRM> ] [ <SCOPE> ]
[ <POLICY_DATA> ... ] [ <POLICY_DATA> ... ]
<STYLE> <flow descriptor list> <STYLE> <flow descriptor list>
<flow descriptor list> ::= <FF flow descriptor list> <flow descriptor list> ::= <FF flow descriptor list>
| <SE flow descriptor> | <SE flow descriptor>
<FF flow descriptor list> ::= <FF flow descriptor> <FF flow descriptor list> ::= <FLOWSPEC> <FF flow descriptor>
| <FF flow descriptor list> <FF flow descriptor> | <FF flow descriptor list> <FF flow descriptor>
<FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC> <LABEL> <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC> <LABEL>
[ <RECORD_ROUTE> ] [ <RECORD_ROUTE> ]
<SE flow descriptor> ::= <FLOWSPEC> <SE filter spec list> <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 list> <SE filter spec> | <SE filter spec list> <SE filter spec>
<SE filter spec> ::= <FILTER_SPEC> <LABEL> [ <RECORD_ROUTE> ] <SE filter spec> ::= <FILTER_SPEC> <LABEL> [ <RECORD_ROUTE> ]
Note: LABEL and RECORD_ROUTE (if present), are bound to the Note: LABEL and RECORD_ROUTE (if present), are bound to the
preceding FILTER_SPEC. No more than one LABEL and/or preceding FILTER_SPEC. No more than one LABEL and/or
RECORD_ROUTE may follow each FILTER_SPEC. RECORD_ROUTE may follow each FILTER_SPEC.
skipping to change at page 16, line 31 skipping to change at page 18, line 40
immediately follow the FILTER_SPEC for that sender in the Resv immediately follow the FILTER_SPEC for that sender in the Resv
message. message.
The LABEL object has the following format: The LABEL object has the following format:
LABEL class = 16, C_Type = 1 LABEL class = 16, C_Type = 1
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
// (lower labels if any) //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| (top label) | | (top label) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The contents of a LABEL object are a stack of labels, where each The contents of a LABEL is a single label, encoded in 4 octets. Each
label is encoded in 4 octets. The top of the stack is in the right 4 generic MPLS label is an unsigned integer in the range 0 through
octets of the object contents. A LABEL object that contains no
labels is illegal.
Each generic MPLS label is an unsigned integer in the range 0 through
1048575. Generic MPLS labels and FR labels are encoded right aligned 1048575. Generic MPLS labels and FR labels are encoded right aligned
in 4 octets. ATM labels are encoded with the VPI right justified in in 4 octets. ATM labels are encoded with the VPI right justified in
bits 0-15 and the VCI right justified in bits 16-31. bits 0-15 and the VCI right justified in bits 16-31.
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 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 In MPLS a node may support multiple label spaces, perhaps associating
a unique space with each incoming interface. For the purposes of the a unique space with each incoming interface. For the purposes of the
following discussion, the term "same label" means the identical label following discussion, the term "same label" means the identical label
value drawn from the identical label space. Further, the following value drawn from the identical label space. Further, the following
applies only to unicast sessions. applies only to unicast sessions.
Labels received in Resv messages on different interfaces are always
considered to be different even if the label value is the same.
4.1.1.1. Downstream
The downstream node selects a label to represent the flow. If a
label range has been specified in the label request, the label must
be drawn from that range. If no label is available the node sends a
PathErr message with an error code of "routing problem" and an error
value of "label allocation failure".
If a node receives a Resv message that has assigned the same label 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 multiple senders, then that node MAY also assign the same
value to those same senders or to any subset of those senders. Note 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 that if a node intends to police individual senders to a session, it
MUST assign unique labels to those senders. MUST assign unique labels to those senders.
Labels received in Resv messages on different interfaces are always In the case of ATM, one further condition applies. Some ATM nodes
considered to be different even if the label value is the same. are not capable of merging streams. These nodes may indicate this by
setting a bit in the label request. The M-bit in the LABEL_REQUEST
object of C-Type 2, label request with ATM label range, serves this
purpose. The M-bit SHOULD be set by nodes which are merge capable.
If for any senders the M-bit is not set, the downstream node MUST
assign unique labels to those senders.
To construct a new LABEL object, the router replaces the top label Once a label is allocated, the node formats a new LABEL object. The
(from the received Resv message) with the locally allocated new node then sends the new LABEL object as part of the Resv message to
label. The router then sends the new LABEL object as part of the the previous hop. The LABEL object SHOULD be kept in the Reservation
Resv message to the previous hop. The LABEL object SHOULD be kept in State Block. It is then used in the next Resv refresh event for
the Reservation State Block. It is then used in the next Resv formatting the Resv message.
refresh event for formatting the Resv message.
A router is expected to send a Resv message before its refresh timers A node is expected to send a Resv message before its refresh timers
expire if the contents of the LABEL object change. expire if the contents of the LABEL object change.
4.1.1.2. Upstream
A node uses the label carried in the LABEL object as the outgoing
label associated with the sender. The router allocates a new label
and binds it to the incoming interface of this session/sender. This
is the same interface that the router uses to forward Resv messages
to the previous hops.
Several circumstance can lead to an unacceptable label.
1. the node is a merge incapable ATM switch but the downstream node
has assigned the same label to two senders
2. The implicit null label was assigned, but the node is not
capable
of doing a penultimate pop for the associated L3PID
3. The assigned label is outside the requested label range
In any of these events the node send a ResvErr message with an error
code of "routing problem" and an error value of "unacceptable label
value".
4.1.2. Non-support of the Label Object 4.1.2. Non-support of the Label Object
Under normal circumstances, a node should never receive a LABEL Under normal circumstances, a node should never receive a LABEL
object in a Resv message unless it had included a LABEL_REQUEST object in a Resv message unless it had included a LABEL_REQUEST
object in the corresponding Path message. However, an RSVP router object in the corresponding Path message. However, an RSVP router
that does not recognize the LABEL object sends a ResvErr with the that does not recognize the LABEL object sends a ResvErr with the
error code "Unknown object class" toward the receiver. This causes error code "Unknown object class" toward the receiver. This causes
the reservation to fail. the reservation to fail.
4.2. Label Request Object 4.2. Label Request Object
The Label Request Class is 19. Currently there three possible The Label Request Class is 19. Currently there three possible
C_Types. Type 1 is a Label Request without label range. Type 2 is a 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 label request with an ATM label range. Type 3 is a label request
with a Frame Relay label range. The LABEL_REQUEST object formats are with a Frame Relay label range. The LABEL_REQUEST object formats are
shown below. shown below.
Label Request without Label Range 4.2.1. Label Request without Label Range
Class = 19, C_Type = 1 Class = 19, C_Type = 1
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | L3PID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Reserved Reserved
This field is reserved. It MUST be set to zero on transmis- This field is reserved. It MUST be set to zero on transmis-
sion and MUST be ignored on receipt. sion and MUST be ignored on receipt.
L3PID L3PID
an identifier of the layer 3 protocol using this path. an identifier of the layer 3 protocol using this path.
Standard Ethertype values are used. Standard Ethertype values are used.
Label Request with ATM Label Range 4.2.2. Label Request with ATM Label Range
Class = 19, C_Type = 2 Class = 19, C_Type = 2
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | L3PID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Res | Minimum VPI | Minimum VCI | |M| Res | Minimum VPI | Minimum VCI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Res | Maximum VPI | Maximum VCI | | Res | Maximum VPI | Maximum VCI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Reserved (Res) Reserved (Res)
This field is reserved. It MUST be set to zero on transmis- This field is reserved. It MUST be set to zero on transmis-
sion and MUST be ignored on receipt. sion and MUST be ignored on receipt.
L3PID L3PID
an identifier of the layer 3 protocol using this path. an identifier of the layer 3 protocol using this path.
Standard Ethertype values are used. Standard Ethertype values are used.
M
Setting this bit to one indicates that the node is not capable
of merging in the data plane
Minimum VPI (12 bits) Minimum VPI (12 bits)
This 12 bit field specifies the lower bound of a block of This 12 bit field specifies the lower bound of a block of
Virtual Path Identifiers that is supported on the originating Virtual Path Identifiers that is supported on the originating
switch. If the VPI is less than 12-bits it MUST be right switch. If the VPI is less than 12-bits it MUST be right
justified in this field and preceding bits MUST be set to zero. justified in this field and preceding bits MUST be set to zero.
Minimum VCI (16 bits) Minimum VCI (16 bits)
This 16 bit field specifies the lower bound of a block of This 16 bit field specifies the lower bound of a block of
skipping to change at page 20, line 5 skipping to change at page 23, line 5
justified in this field and preceding bits MUST be set to zero. justified in this field and preceding bits MUST be set to zero.
Maximum VCI (16 bits) Maximum VCI (16 bits)
This 16 bit field specifies the upper bound of a block of This 16 bit field specifies the upper bound of a block of
Virtual Connection Identifiers that is supported on the ori- Virtual Connection Identifiers that is supported on the ori-
ginating switch. If the VCI is less than 16-bits it MUST be ginating switch. If the VCI is less than 16-bits it MUST be
right justified in this field and preceding bits MUST be set to right justified in this field and preceding bits MUST be set to
zero. zero.
Label Request with Frame Relay Label Range 4.2.3. Label Request with Frame Relay Label Range
Class = 19, C_Type = 3 Class = 19, C_Type = 3
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | L3PID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |DLI| Minimum DLCI | | Reserved |DLI| Minimum DLCI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 20, line 37 skipping to change at page 23, line 37
Standard Ethertype values are used. Standard Ethertype values are used.
DLI DLI
DLCI Length Indicator. The number of bits in the DLCI. DLCI Length Indicator. The number of bits in the DLCI.
The following values are supported: The following values are supported:
Len DLCI bits Len DLCI bits
0 10 0 10
1 17
2 23 2 23
Minimum DLCI Minimum DLCI
This 23-bit field specifies the lower bound of a block of Data This 23-bit field specifies the lower bound of a block of Data
Link Connection Identifiers (DLCIs) that is supported on the Link Connection Identifiers (DLCIs) that is supported on the
originating switch. The DLCI MUST be right justified in this originating switch. The DLCI MUST be right justified in this
field and unused bits MUST be set to 0. field and unused bits MUST be set to 0.
Maximum DLCI Maximum DLCI
This 23-bit field specifies the upper bound of a block of Data This 23-bit field specifies the upper bound of a block of Data
Link Connection Identifiers (DLCIs) that is supported on the Link Connection Identifiers (DLCIs) that is supported on the
originating switch. The DLCI MUST be right justified in this originating switch. The DLCI MUST be right justified in this
field and unused bits MUST be set to 0. field and unused bits MUST be set to 0.
4.2.1. Handling of LABEL_REQUEST 4.2.4. Handling of LABEL_REQUEST
To establish an LSP tunnel the sender creates a Path message with a To establish an LSP tunnel the sender creates a Path message with a
LABEL_REQUEST object. The LABEL_REQUEST object indicates that a LABEL_REQUEST object. The LABEL_REQUEST object indicates that a
label binding for this path is requested and provides an indication label binding for this path is requested and provides an indication
of the network layer protocol that is to be carried over this path. 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 permits non-IP network layer protocols to be sent down an LSP.
This information can also be useful in actual label allocation, This information can also be useful in actual label allocation,
because some reserved labels are protocol specific, see [5]. because some reserved labels are protocol specific, see [5].
The LABEL_REQUEST SHOULD be stored in the Path State Block, so that The LABEL_REQUEST SHOULD be stored in the Path State Block, so that
skipping to change at page 21, line 37 skipping to change at page 24, line 37
A node that sends a LABEL_REQUEST object MUST be ready to accept and A node that sends a LABEL_REQUEST object MUST be ready to accept and
correctly process a LABEL object in the corresponding Resv messages. correctly process a LABEL object in the corresponding Resv messages.
A node that recognizes a LABEL_REQUEST object, but that is unable to A node that recognizes a LABEL_REQUEST object, but that is unable to
support it (possibly because of a failure to allocate labels) SHOULD support it (possibly because of a failure to allocate labels) SHOULD
send a PathErr with the error code "Routing problem" and the error send a PathErr with the error code "Routing problem" and the error
value "MPLS label allocation failure." This includes the case where value "MPLS label allocation failure." This includes the case where
a label range has been specified and a label cannot be allocated from a label range has been specified and a label cannot be allocated from
that range. that range.
A node which receives and forwards a Path message each with a
LABEL_REQUEST object, must copy the L3PID from the received
LABEL_REQUEST object to the forwarded LABEL_REQUEST object.
If the receiver cannot support the protocol L3PID, it SHOULD send a If the receiver cannot support the protocol L3PID, it SHOULD send a
PathErr with the error code "Routing problem" and the error value PathErr with the error code "Routing problem" and the error value
"Unsupported L3PID." This causes the RSVP session to fail. "Unsupported L3PID." This causes the RSVP session to fail.
4.2.2. Non-support of the Label Request Object 4.2.5. Non-support of the Label Request Object
An RSVP router that does not recognize the LABEL_REQUEST object sends An RSVP router that does not recognize the LABEL_REQUEST object sends
a PathErr with the error code "Unknown object class" toward the a PathErr with the error code "Unknown object class" toward the
sender. An RSVP router that recognizes the LABEL_REQUEST object but sender. An RSVP router that recognizes the LABEL_REQUEST object but
does not recognize the C_Type sends a PathErr with the error code does not recognize the C_Type sends a PathErr with the error code
"Unknown object C_Type" toward the sender. This causes the path "Unknown object C_Type" toward the sender. This causes the path
setup to fail. The sender should notify management that a LSP cannot setup to fail. The sender should notify management that a LSP cannot
be established and possibly take action to continue the reservation be established and possibly take action to continue the reservation
without the LABEL_REQUEST. without the LABEL_REQUEST.
skipping to change at page 23, line 18 skipping to change at page 26, line 24
RSVP routers that do not support the object will therefore respond RSVP routers that do not support the object will therefore respond
with an "Unknown Object Class" error. with an "Unknown Object Class" error.
4.3.2. Semantics of the Explicit Route Object 4.3.2. Semantics of the Explicit Route Object
An explicit route is a particular path in the network topology. An explicit route is a particular path in the network topology.
Typically, the explicit route is determined by a node, with the Typically, the explicit route is determined by a node, with the
intent of directing traffic along that path. intent of directing traffic along that path.
An explicit route is described as a list of groups of nodes along the An explicit route is described as a list of groups of nodes along the
explicit route. Certain operations to be performed along the path explicit route. In addition to the ability to identify specific
can also be encoded in the EXPLICIT_ROUTE object. nodes along the path, an explicit route can identify a group of nodes
that must be traversed along the path. This capability allows the
In addition to the ability to identify specific nodes along the path, routing system a significant amount of local flexibility in
an explicit route can identify a group of nodes that must be fulfilling a request for an explicit route. This capability allows
traversed along the path. This capability allows the routing system the generator of the explicit route to have imperfect information
a significant amount of local flexibility in fulfilling a request for about the details of the path.
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 The explicit route is encoded as a series of subobjects contained in
an EXPLICIT_ROUTE object. Each subobject may identify a group of an EXPLICIT_ROUTE object. Each subobject identifies a group of nodes
nodes in the explicit route or may specify an operation to be in the explicit route. An explicit route is thus a specification of
performed along the path. An explicit route then becomes a groups of nodes to be traversed.
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 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 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 set of abstract nodes to be traversed. If an abstract node consists
performed along that path. If an abstract node consists of only one of only one node, we refer to it as a simple abstract node.
node, we refer to it as a simple abstract node.
As an example of the concept of abstract nodes, consider an explicit As an example of the concept of abstract nodes, consider an explicit
route that consists solely of Autonomous System number subobjects. route that consists solely of Autonomous System number subobjects.
Each subobject corresponds to an Autonomous System in the global Each subobject corresponds to an Autonomous System in the global
topology. In this case, each Autonomous System is an abstract node, topology. In this case, each Autonomous System is an abstract node,
and the explicit route is a path that includes each of the specified and the explicit route is a path that includes each of the specified
Autonomous Systems. There may be multiple hops within each Autonomous Systems. There may be multiple hops within each
Autonomous System, but these are opaque to the source node for the Autonomous System, but these are opaque to the source node for the
explicit route. explicit route.
skipping to change at page 25, line 11 skipping to change at page 28, line 11
interpreted relative to their prior abstract nodes. interpreted relative to their prior abstract nodes.
The path between a strict node and its preceding node MUST include The path between a strict node and its preceding node MUST include
only network nodes from the strict node and its preceding abstract only network nodes from the strict node and its preceding abstract
node. node.
The path between a loose node and its preceding node MAY include 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 other network nodes that are not part of the strict node or its
preceding abstract node. preceding abstract node.
The L bit has no meaning in operation subobjects.
4.3.3.2. Subobject 1: IPv4 prefix 4.3.3.2. Subobject 1: IPv4 prefix
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type | Length | IPv4 address (4 bytes) | |L| Type | Length | IPv4 address (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 address (continued) | Prefix Length | Resvd | | IPv4 address (continued) | Prefix Length | Resvd |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 28, line 9 skipping to change at page 30, line 48
scope of this specification. However, it is assumed that each node scope of this specification. However, it is assumed that each node
will make a best effort attempt to determine a loop-free path. Note will make a best effort attempt to determine a loop-free path. Note
that paths so determined can be overridden by local policy. that paths so determined can be overridden by local policy.
To determine the next hop for the path, a node performs the following To determine the next hop for the path, a node performs the following
steps: steps:
1) The node receiving the RSVP message MUST first evaluate the first 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 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 the first subobject, it has received the message in error and SHOULD
return a "Bad initial subobject" error. If the first subobject is an return a "Bad initial subobject" error. If there is no first
operation subobject, the message is in error and the system SHOULD
return a "Bad EXPLICIT_ROUTE object" error. If there is no first
subobject, the message is also in error and the system SHOULD return subobject, the message is also in error and the system SHOULD return
a "Bad EXPLICIT_ROUTE object" error. a "Bad EXPLICIT_ROUTE object" error.
2) If there is no second subobject, this indicates the end of the 2) If there is no second subobject, this indicates the end of the
explicit route. The EXPLICIT_ROUTE object SHOULD be removed from 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. 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 Processing continues with section 4.3.4.2, where a new EXPLICIT_ROUTE
object MAY be added to the Path message. object MAY be added to the Path message.
3) Next, the node evaluates the second subobject. If the subobject 3) Next, the node evaluates the second subobject. If the node is
is an operation subobject, the node pops the subobject from the also a part of the abstract node described by the second subobject,
EXPLICIT ROUTE object , records the subobject, and continues then the node deletes the first subobject and continues processing
processing with step 2, above. Note that this changes the third with step 2, above. Note that this makes the second subobject into
subobject into the second subobject (hence "pop") in subsequent the first subobject of the next iteration and allows the node to
processing. The precise operations to be performed by this node must identify the next abstract node on the path of the message after
be defined by the operation subobject. possible repeated application(s) of steps 2 and 3.
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 4) Abstract Node Border Case: The node determines whether it is
topologically adjacent to the abstract node described by the second topologically adjacent to the abstract node described by the second
subobject. If so, the node selects a particular next hop which is a subobject. If so, the node selects a particular next hop which is a
member of the abstract node. The node then deletes the first member of the abstract node. The node then deletes the first
subobject and continues processing with section 4.3.4.2. subobject and continues processing with section 4.3.4.2.
6) Interior of the Abstract Node Case: Otherwise, the node selects a 5) Interior of the Abstract Node Case: Otherwise, the node selects a
next hop within the abstract node of the first subobject (which the 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 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 second subobject (which is the next abstract node). If no such path
exists then there are two cases: exists then there are two cases:
6a) If the second subobject is a strict subobject, there is an error 5a) If the second subobject is a strict subobject, there is an error
and the node SHOULD return a "Bad strict node" error. and the node SHOULD return a "Bad strict node" error.
6b) Otherwise, if the second subobject is a loose subobject, the node 5b) Otherwise, if the second subobject is a loose subobject, the node
selects any next hop that is along the path to the next abstract 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 node. If no path exists, there is an error, and the node SHOULD
return a "Bad loose node" error. return a "Bad loose node" error.
7) Finally, the node replaces the first subobject with any subobject 6) Finally, the node replaces the first subobject with any subobject
that denotes an abstract node containing the next hop. This is that denotes an abstract node containing the next hop. This is
necessary so that when the explicit route is received by the next necessary so that when the explicit route is received by the next
hop, it will be accepted. hop, it will be accepted.
4.3.4.2. Adding subobjects to the Explicit Route Object 4.3.4.2. Adding subobjects to the Explicit Route Object
After selecting a next hop, the node MAY alter the explicit route in After selecting a next hop, the node MAY alter the explicit route in
the following ways. the following ways.
If, as part of executing the algorithm in section 4.3.4.1, the If, as part of executing the algorithm in section 4.3.4.1, the
skipping to change at page 29, line 42 skipping to change at page 32, line 27
4.3.5. Loops 4.3.5. Loops
While the EXPLICIT_ROUTE object is of finite length, the existence of While the EXPLICIT_ROUTE object is of finite length, the existence of
loose nodes implies that it is possible to construct forwarding loops loose nodes implies that it is possible to construct forwarding loops
during transients in the underlying routing protocol. This can be during transients in the underlying routing protocol. This can be
detected by the originator of the explicit route through the use of detected by the originator of the explicit route through the use of
another opaque route object called the RECORD_ROUTE object. The another opaque route object called the RECORD_ROUTE object. The
RECORD_ROUTE object is used to collect detailed path information and RECORD_ROUTE object is used to collect detailed path information and
is useful for loop detection and for diagnostics. is useful for loop detection and for diagnostics.
4.3.6. Non-support of the Explicit Route Object 4.3.6. Forward Compatibility
It is anticipated that new subobjects may be defined over time. A
node which encounters an unrecognized subobject during its normal ERO
processing sends a PathErr with the error code "Routing Error" and
error value of "Bad Explicit Route Object" toward the sender. The
EXPLICIT_ROUTE object is included, truncated (on the left) to the
offending subobject. The presence of an unrecognized subobject which
is not encountered in a node's ERO processing SHOULD be ignored. It
is passed forward along with the rest of the remaining ERO stack.
4.3.7. Non-support of the Explicit Route Object
An RSVP router that does not recognize 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 sends a PathErr with the error code "Unknown object class" toward the
sender. This causes the path setup to fail. The sender should sender. This causes the path setup to fail. The sender should
notify management that a LSP cannot be established and possibly take notify management that a LSP cannot be established and possibly take
action to continue the reservation without the EXPLICIT_ROUTE or via action to continue the reservation without the EXPLICIT_ROUTE or via
a different explicit route. a different explicit route.
4.4. Record Route Object 4.4. Record Route Object
Routes can be recorded via the RECORD_ROUTE object (RRO). The Record Routes can be recorded via the RECORD_ROUTE object (RRO).
Route Class is 21. Currently one C_Type is defined, Type 1 Record Optionally, labels may also be recorded. The Record Route Class is
Route. The RECORD_ROUTE object has the following format: 21. Currently one C_Type is defined, Type 1 Record Route. The
RECORD_ROUTE object has the following format:
Class = 21, C_Type = 1 Class = 21, C_Type = 1
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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) //
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 31, line 7 skipping to change at page 34, line 7
bytes, including the Type and Length fields. The length MUST always bytes, including the Type and Length fields. The length MUST always
be a multiple of 4, and at least 4. be a multiple of 4, and at least 4.
Subobjects are organized as a last-in-first-out stack. The first Subobjects are organized as a last-in-first-out stack. The first
subobject relative to the beginning of RRO is considered the top. subobject relative to the beginning of RRO is considered the top.
The last subobject is considered the bottom. When a new subobject is The last subobject is considered the bottom. When a new subobject is
added, it is always added to the top. added, it is always added to the top.
An empty RRO with no subobjects is considered illegal. An empty RRO with no subobjects is considered illegal.
Two kinds of subobjects are currently defined. Three kinds of subobjects are currently defined.
4.4.1.1. Subobject 1: IPv4 address 4.4.1.1. Subobject 1: IPv4 address
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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) | | Type | Length | IPv4 address (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 address (continued) | Prefix Length | Flags | | IPv4 address (continued) | Prefix Length | Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 33, line 25 skipping to change at page 36, line 25
only be set if the Local protection flag was set in the only be set if the Local protection flag was set in the
SESSION_ATTRIBUITE object of the cooresponding Path SESSION_ATTRIBUITE object of the cooresponding Path
nessage. nessage.
0x02 Local protection in use 0x02 Local protection in use
Indicates that a local repair mechanism is in use to Indicates that a local repair mechanism is in use to
maintain this tunnel (usually in the face a an outage maintain this tunnel (usually in the face a an outage
of the link it was previously routed over). of the link it was previously routed over).
4.4.1.3. Subobject 0x03, Label
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Flags | C-Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Contents of Label Object |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
0x03 Label
Length
The Length contains the total length of the subobject in
bytes, including the Type and Length fields.
Flags
0x01 = Global label
This flag indicates that the label will be understood
if received on any interface.
C-Type
The C-Type of the included Label Object. Copied from the
Label Object.
Contents of Label Object
The contents of the Label Object. Copied from the Label
Object
4.4.2. Applicability 4.4.2. Applicability
Only the procedures for use in unicast sessions are defined here. Only the procedures for use in unicast sessions are defined here.
There are three possible uses of RRO in RSVP. First, an RRO can There are three possible uses of RRO in RSVP. First, an RRO can
function as a loop detection mechanism to discover L3 routing loops, function as a loop detection mechanism to discover L3 routing loops,
or loops inherent in the explicit route. The exact procedure for or loops inherent in the explicit route. The exact procedure for
doing so is described later in this document. doing so is described later in this document.
Second, an RRO collects up-to-date detailed path information hop-by- Second, an RRO collects up-to-date detailed path information hop-by-
skipping to change at page 33, line 49 skipping to change at page 37, line 39
Third, RRO syntax is designed so that, with minor changes, the whole 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 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 useful if the sender receives RRO from the receiver in a Resv
message, applies it to EXPLICIT_ROUTE object in the next Path message message, applies it to EXPLICIT_ROUTE object in the next Path message
in order to "pin down session path". in order to "pin down session path".
4.4.3. Handling RRO 4.4.3. Handling RRO
Typically, a node initiates an RSVP session by adding the RRO to the Typically, a node initiates an RSVP session by adding the RRO to the
Path message. The initial RRO contains only one subobject - the Path message. The initial RRO contains only one subobject - the
sender's IP addresses. sender's IP addresses. If the node also desires label recording, it
sets the Label_Recording flag in the SESSION_ATTRIBUTE object.
When a Path message containing an RRO is received by an intermediate 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 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 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 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 new subobject to the RRO and appends the resulting RRO to the Path
message before transmission. message before transmission.
The newly added subobject MUST be this router's IP address. The The newly added subobject MUST be this router's IP address. The
address to be added SHOULD be the interface address of the outgoing address to be added SHOULD be the interface address of the outgoing
Path messages. If there are multiple addresses to choose from, the Path messages. If there are multiple addresses to choose from, the
decision is a local matter. However, it is RECOMMENDED that the same decision is a local matter. However, it is RECOMMENDED that the same
address be chosen consistently. address be chosen consistently.
4.5. Processing RRO
When the Label_Recording flag is set in the SESSION_ATTRIBUTE object,
nodes doing route recording SHOULD include a Label Record subobject.
If the node is using a global label space, then it SHOULD set the
Global Label flag.
The Label Record subobject is pushed onto the RECORD_ROUTE object
prior to pushing on the node's IP address. A node MUST NOT push on a
Label Record subobject without also pushing on an IPv4 or IPv6
subobject.
If the newly added subobject causes the RRO to be too big to fit in a If the newly added subobject causes the RRO to be too big to fit in a
Path (or Resv) message, the RRO object SHALL be dropped from the Path (or Resv) message, the RRO object SHALL be dropped from the
message and message processing continues as normal. A PathErr (or message and message processing continues as normal. A PathErr (or
ResvErr) message SHOULD be sent back to the sender (or receiver). An ResvErr) message SHOULD be sent back to the sender (or receiver). An
error code of "Notify" and an error value of "RRO too large for MTU" error code of "Notify" and an error value of "RRO too large for MTU"
is used. The RRO object is included in the error message. If the is used. If the receiver receives such a ResvErr, it SHOULD send a
receiver receives such a ResvErr, it SHOULD send a PathErr message PathErr message with error code of "Notify" and an error value of
with error code of "Notify" and an error value of "RRO notification". "RRO notification".
The RRO object is included in the error message.
A sender receiving either of these error values should remove the RRO A sender receiving either of these error values should remove the RRO
from the Path message. from the Path message.
Nodes should resend the above PathErr or ResvErr message each n Nodes should resend the above PathErr or ResvErr message each n
seconds where n is the greater of 15 and the refresh interval for the seconds where n is the greater of 15 and the refresh interval for the
associated Path or RESV message. The node may apply limits and/or associated Path or RESV message. The node may apply limits and/or
back-off timers to limit the number of messages sent. back-off timers to limit the number of messages sent.
An RSVP router can decide to send Path messages before its refresh An RSVP router can decide to send Path messages before its refresh
skipping to change at page 35, line 9 skipping to change at page 39, line 14
Note that each node along the path will now have the complete route 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 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 the source to this node; the Resv RRO will have the route from this
node to the destination. This is useful for network management. node to the destination. This is useful for network management.
A received Path message without an RRO indicates that the sender node A received Path message without an RRO indicates that the sender node
no longer needs route recording. Subsequent Resv messages SHALL NOT no longer needs route recording. Subsequent Resv messages SHALL NOT
contain an RRO. contain an RRO.
4.4.4. Loop Detection 4.5.1. Loop Detection
As part of processing an incoming RRO, an intermediate router looks As part of processing an incoming RRO, an intermediate router looks
into all subobjects contained within the RRO. If the router into all subobjects contained within the RRO. If the router
determines that it is already in the list, a forwarding loop exists. determines that it is already in the list, a forwarding loop exists.
An RSVP session is loop-free if downstream nodes receive Path An RSVP session is loop-free if downstream nodes receive Path
messages or upstream nodes receive Resv messages with no routing messages or upstream nodes receive Resv messages with no routing
loops detected in the contained RRO. loops detected in the contained RRO.
There are two broad classifications of forwarding loops. The first There are two broad classifications of forwarding loops. The first
skipping to change at page 35, line 39 skipping to change at page 39, line 44
For Path messages containing a forwarding loop, the router builds and For Path messages containing a forwarding loop, the router builds and
sends a "Routing problem" PathErr message, with the error value "loop sends a "Routing problem" PathErr message, with the error value "loop
detected," and drops the Path message. Until the loop is eliminated, detected," and drops the Path message. Until the loop is eliminated,
this session is not suitable for forwarding data packets. How the this session is not suitable for forwarding data packets. How the
loop eliminated is beyond the scope of this document. loop eliminated is beyond the scope of this document.
For Resv messages containing a forwarding loop, the router simply For Resv messages containing a forwarding loop, the router simply
drops the message. Resv messages should not loop if Path messages do drops the message. Resv messages should not loop if Path messages do
not loop. not loop.
4.4.5. Non-support of RRO 4.5.2. Forward Compatibility
New subobjects may be defined for the RRO. When processing an RRO,
unrecognized subobjects should be ignored and passed on. When
processing an RRO for loop detection, a node SHOULD parse over any
unrecognized objects. Loop detection works by detecting subobjects
which were inserted by the node itself on an earlier pass of the
object. This ensures that the subobjects necessary to loop detection
are always understood.
4.5.3. Non-support of RRO
The RRO object is to be used only when all routers along the path 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 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 value of the form 0bbbbbbb. RSVP routers that do not support the
object will therefore respond with an "Unknown Object Class" error. object will therefore respond with an "Unknown Object Class" error.
4.5. Error Codes for ERO and RRO 4.6. Error Codes for ERO and RRO
In the processing described above, certain errors must be reported as In the processing described above, certain errors must be reported as
either a "Routing Problem" or "Notify". The value of the "Routing either a "Routing Problem" or "Notify". The value of the "Routing
Problem" error code is 24; the value of the "Notify" error code is Problem" error code is 24; the value of the "Notify" error code is
25. 25.
The following defines error values for the Routing Problem Error The following defines error values for the Routing Problem Error
Code: Code:
Value Error: Value Error:
skipping to change at page 36, line 27 skipping to change at page 40, line 36
1 Bad EXPLICIT_ROUTE object 1 Bad EXPLICIT_ROUTE object
2 Bad strict node 2 Bad strict node
3 Bad loose node 3 Bad loose node
4 Bad initial subobject 4 Bad initial subobject
5 No route available toward destination 5 No route available toward destination
6 RRO syntax error detected 6 Unacceptable label value
7 RRO indicated routing loops 7 RRO indicated routing loops
8 MPLS being negotiated, but a non-RSVP-capable router 8 MPLS being negotiated, but a non-RSVP-capable router
stands in the path stands in the path
9 MPLS label allocation failure 9 MPLS label allocation failure
10 Unsupported L3PID 10 Unsupported L3PID
For the Notify Error Code, the 16 bits of the Error Value field are: For the Notify Error Code, the 16 bits of the Error Value field are:
ss00 cccc cccc cccc ss00 cccc cccc cccc
The high order bits are as defined under Error Code 1. (See [1]). The high order bits are as defined under Error Code 1. (See [1]).
When ss = 00, the following subcode is defined: When ss = 00, the following subcode is defined:
1 RRO too large for MTU 1 RRO too large for MTU
2 RRO notification 2 RRO notification
skipping to change at page 37, line 5 skipping to change at page 41, line 15
ss00 cccc cccc cccc ss00 cccc cccc cccc
The high order bits are as defined under Error Code 1. (See [1]). The high order bits are as defined under Error Code 1. (See [1]).
When ss = 00, the following subcode is defined: When ss = 00, the following subcode is defined:
1 RRO too large for MTU 1 RRO too large for MTU
2 RRO notification 2 RRO notification
4.6. Session, Sender Template, and Filter Spec Objects 4.7. Session, Sender Template, and Filter Spec Objects
New C-Types are defined for the SESSION, SENDER_TEMPLATE and New C-Types are defined for the SESSION, SENDER_TEMPLATE and
FILTER_SPEC objects. FILTER_SPEC objects.
The LSP_TUNNEL objects have the following format: The LSP_TUNNEL objects have the following format:
4.6.1. Session Object 4.7.1. Session Object
4.6.1.1. LSP_TUNNEL_IPv4 Session Object 4.7.1.1. LSP_TUNNEL_IPv4 Session Object
Class = SESSION, LSP_TUNNEL_IPv4 C-Type = 7 Class = SESSION, LSP_TUNNEL_IPv4 C-Type = 7
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | | IPv4 tunnel end point address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MUST be zero | Tunnel ID | | MUST be zero | Tunnel ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 38, line 5 skipping to change at page 42, line 13
over the life of the tunnel. over the life of the tunnel.
Extended Tunnel ID Extended Tunnel ID
A 32-bit identifier used in the SESSION that remains constant A 32-bit identifier used in the SESSION that remains constant
over the life of the tunnel. Normally set to all zeros. over the life of the tunnel. Normally set to all zeros.
Ingress nodes that wish to narrow the scope of a SESSION to the Ingress nodes that wish to narrow the scope of a SESSION to the
ingress-egress pair may place their IPv4 address here as a ingress-egress pair may place their IPv4 address here as a
globally unique identifier. globally unique identifier.
4.6.1.2. LSP_TUNNEL_IPv6 Session Object 4.7.1.2. LSP_TUNNEL_IPv6 Session Object
Class = SESSION, LSP_TUNNEL_IPv6 C_Type = 8 Class = SESSION, LSP_TUNNEL_IPv6 C_Type = 8
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
+ + + +
| IPv6 tunnel end point address | | IPv6 tunnel end point address |
+ + + +
skipping to change at page 39, line 5 skipping to change at page 43, line 13
over the life of the tunnel. over the life of the tunnel.
Extended Tunnel ID Extended Tunnel ID
A 16-byte identifier used in the SESSION that remains constant A 16-byte identifier used in the SESSION that remains constant
over the life of the tunnel. Normally set to all zeros. over the life of the tunnel. Normally set to all zeros.
Ingress nodes that wish to narrow the scope of a SESSION to the Ingress nodes that wish to narrow the scope of a SESSION to the
ingress-egress pair may place their IPv6 address here as a ingress-egress pair may place their IPv6 address here as a
globally unique identifier. globally unique identifier.
4.6.2. Sender Template Object 4.7.2. Sender Template Object
4.6.2.1. LSP_TUNNEL_IPv4 Sender Template Object 4.7.2.1. LSP_TUNNEL_IPv4 Sender Template Object
Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv4 C-Type = 7 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv4 C-Type = 7
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | | IPv4 tunnel sender address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MUST be zero | LSP ID | | MUST be zero | LSP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 39, line 29 skipping to change at page 44, line 5
IPv4 tunnel sender address IPv4 tunnel sender address
IPv4 address for a sender node IPv4 address for a sender node
LSP ID LSP ID
A 16-bit identifier used in the SENDER_TEMPLATE and the A 16-bit identifier used in the SENDER_TEMPLATE and the
FILTER_SPEC that can be changed to allow a sender to share FILTER_SPEC that can be changed to allow a sender to share
resources with itself. resources with itself.
4.6.2.2. LSP_TUNNEL_IPv6 Sender Template Object 4.7.2.2. LSP_TUNNEL_IPv6 Sender Template Object
Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv6 C_Type = 8 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv6 C_Type = 8
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
+ + + +
| IPv6 tunnel end point address | | IPv6 tunnel sender address |
+ + + +
| (16 bytes) | | (16 bytes) |
+ + + +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MUST be zero | LSP ID | | MUST be zero | LSP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv6 tunnel sender address IPv6 tunnel sender address
skipping to change at page 40, line 4 skipping to change at page 44, line 26
| (16 bytes) | | (16 bytes) |
+ + + +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MUST be zero | LSP ID | | MUST be zero | LSP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv6 tunnel sender address IPv6 tunnel sender address
IPv6 address for a sender node IPv6 address for a sender node
LSP ID LSP ID
A 16-bit identifier used in the SENDER_TEMPLATE and the A 16-bit identifier used in the SENDER_TEMPLATE and the
FILTER_SPEC that can be changed to allow a sender to share FILTER_SPEC that can be changed to allow a sender to share
resources with itself. resources with itself.
4.6.3. Filter Specification Object 4.7.3. Filter Specification Object
4.6.3.1. LSP_TUNNEL_IPv4 Filter Specification Object 4.7.3.1. LSP_TUNNEL_IPv4 Filter Specification Object
Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv4 C-Type = 7 Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv4 C-Type = 7
The format of the LSP_TUNNEL_IPv4 FILTER_SPEC object is identical to The format of the LSP_TUNNEL_IPv4 FILTER_SPEC object is identical to
the LSP_TUNNEL_IPv4 SENDER_TEMPLATE object. the LSP_TUNNEL_IPv4 SENDER_TEMPLATE object.
4.6.3.2. LSP_TUNNEL_IPv6 Filter Specification Object 4.7.3.2. LSP_TUNNEL_IPv6 Filter Specification Object
Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv6 C_Type = 8 Class = FILTER SPECIFICATION, LSP_TUNNEL_IPv6 C_Type = 8
The format of the LSP_TUNNEL_IPv6 FILTER_SPEC object is identical to The format of the LSP_TUNNEL_IPv6 FILTER_SPEC object is identical to
the LSP_TUNNEL_IPv6 SENDER_TEMPLATE object. the LSP_TUNNEL_IPv6 SENDER_TEMPLATE object.
4.6.4. Reroute Procedure 4.7.4. Reroute and Bandwidth Increase Procedure
This section describes how to setup a tunnel that is capable of This section describes how to setup a tunnel that is capable of
maintaining resource reservations (without double counting) while it maintaining resource reservations (without double counting) while it
is being rerouted or while it is attempting to increase its is being rerouted or while it is attempting to increase its
bandwidth. In the initial Path message, the ingress node forms a bandwidth. In the initial Path message, the ingress node forms a
SESSION object, assigns a Tunnel_ID, and places its IPv4 address in SESSION object, assigns a Tunnel_ID, and places its IPv4 address in
the Extended_Tunnel_ID It also forms a SENDER_TEMPLATE and assigns a the Extended_Tunnel_ID It also forms a SENDER_TEMPLATE and assigns a
LSP_ID. Tunnel setup then proceeds according to the normal procedure. LSP_ID. Tunnel setup then proceeds according to the normal procedure.
On receipt of the Path message, the egress node sends a Resv message On receipt of the Path message, the egress node sends a Resv message
skipping to change at page 41, line 16 skipping to change at page 46, line 5
<FLOWSPEC><old_FILTER_SPEC><old_LABEL_OBJECT><new_FILTER_SPEC> <FLOWSPEC><old_FILTER_SPEC><old_LABEL_OBJECT><new_FILTER_SPEC>
<new_LABEL_OBJECT> <new_LABEL_OBJECT>
(Note that if the PHOPs are different, then two messages are sent (Note that if the PHOPs are different, then two messages are sent
each with the appropriate FILTER_SPEC and LABEL_OBJECT.) each with the appropriate FILTER_SPEC and LABEL_OBJECT.)
When the ingress node receives the Resv Message(s), it may begin When the ingress node receives the Resv Message(s), it may begin
using the new route. It SHOULD send a PathTear message for the old using the new route. It SHOULD send a PathTear message for the old
route. route.
4.7. Session Attribute Object 4.8. Session Attribute Object
The Session Attribute Class is 207. One C_Type is defined, The Session Attribute Class is 207. Two C_Types are defined,
LSP_TUNNEL, C-Type = 7. The format of the LSP_TUNNEL Session LSP_TUNNEL, C-Type = 7 and LSP_TUNNEL_RA, C-Type = 1. The
Attribute Object is as follows: LSP_TUNNEL_RA C-Type includes all the same fields as the LSP_TUNNEL
C-Type. Additionally it carries resource affinity information. The
formats are as follows:
4.8.1. Format without resource affinities
SESSION_ATTRIBUTE class = 207, LSP_TUNNEL C-Type = 7
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 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 | | Setup Prio | Holding Prio | Flags | Name Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
// Session Name (NULL padded display string) // // Session Name (NULL padded display string) //
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Setup Priority
The priority of the session with respect to taking resources,
in the range of 0 to 7. The value 0 is the highest priority.
The Setup Priority is used in deciding whether this session can
preempt another session.
Holding Priority
The priority of the session with respect to holding resources,
in the range of 0 to 7. The value 0 is the highest priority.
Holding Priority is used in deciding whether this session can
be preempted by another session.
Flags Flags
0x01 Local protection 0x01 Local protection
This flag permits transit routers to use a local repair This flag permits transit routers to use a local repair
mechanism which may result in violation of the explicit mechanism which may result in violation of the explicit
route object. When a fault is detected on an adjacent route object. When a fault is detected on an adjacent
downstream link or node, a transit router can reroute downstream link or node, a transit router can reroute
traffic for fast service restoration. traffic for fast service restoration.
0x02 Merging permitted 0x02 Label recording desired
This flag permits transit routers to merge this session This flag indicates that label information should be
with other RSVP sessions for the purpose of reducing included when doing a route record.
resource overhead on downstream transit routers, thereby
providing better network scalability.
0x04 Ingress node may reroute 0x04 Ingress node may reroute
This flag indicates that the tunnel ingress node may This flag indicates that the tunnel ingress node may
choose to reroute this tunnel without tearing it down. choose to reroute this tunnel without tearing it down.
A tunnel egress node SHOULD use the SE Style when A tunnel egress node SHOULD use the SE Style when
responding with a Resv message. responding with a Resv message.
Name Length
The length of the display string before padding, in bytes.
Session Name
A null padded string of characters.
4.8.2. Format with resource affinities
SESSION_ATTRIBUTE class = 207, LSP_TUNNEL_RA C-Type = 1
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Exclude-any |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Include-any |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Include-all |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Setup Prio | Holding Prio | Flags | Name Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
// Session Name (NULL padded display string) //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Exclude-any
A 32-bit vector representing a set of attribute filters
associated with a tunnel any of which renders a link
unacceptable.
Include-any
A 32-bit vector representing a set of attribute filters
associated with a tunnel any of which renders a link acceptable
(with respect to this test). A null set (all bits set to zero)
automatically passes.
Include-all
A 32-bit vector representing a set of attribute filters
associated with a tunnel all of which must be present for a
link to be acceptable (with respect to this test). A null set
(all bits set to zero) automatically passes.
Setup Priority Setup Priority
The priority of the session with respect to taking resources, The priority of the session with respect to taking resources,
in the range of 0 to 7. The value 0 is the highest priority. 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 The Setup Priority is used in deciding whether this session can
preempt another session. preempt another session.
Holding Priority Holding Priority
The priority of the session with respect to holding resources, The priority of the session with respect to holding resources,
in the range of 0 to 7. The value 0 is the highest priority. in the range of 0 to 7. The value 0 is the highest priority.
Holding Priority is used in deciding whether this session can Holding Priority is used in deciding whether this session can
be preempted by another session. be preempted by another session.
Flags
0x01 Local protection
This flag permits transit routers to use a local repair
mechanism which may result in violation of the explicit
route object. When a fault is detected on an adjacent
downstream link or node, a transit router can reroute
traffic for fast service restoration.
0x02 Label recording desired
This flag indicates that label information should be
included when doing a route record.
0x04 Ingress node may reroute
This flag indicates that the tunnel ingress node may
choose to reroute this tunnel without tearing it down.
A tunnel egress node SHOULD use the SE Style when
responding with a Resv message.
Name Length Name Length
The length of the display string before padding, in bytes. The length of the display string before padding, in bytes.
Session Name Session Name
A null padded string of characters. A null padded string of characters.
4.8.3. Procedures applying to both C-Types
The support of setup and holding priorities is OPTIONAL. A node can The support of setup and holding priorities is OPTIONAL. A node can
recognize this information but be unable to perform the requested recognize this information but be unable to perform the requested
operation. The node SHOULD pass the information downstream operation. The node SHOULD pass the information downstream
unchanged. unchanged.
As noted above, preemption is implemented by two priorities. The As noted above, preemption is implemented by two priorities. The
Setup Priority is the priority for taking resources. The Holding Setup Priority is the priority for taking resources. The Holding
Priority is the priority for holding a resource. Specifically, the Priority is the priority for holding a resource. Specifically, the
Holding Priority is the priority at which resources assigned to this Holding Priority is the priority at which resources assigned to this
session will be reserved. The Setup Priority SHOULD never be higher session will be reserved. The Setup Priority SHOULD never be higher
than the Holding Priority for a given session. than the Holding Priority for a given session.
The setup and holding priorities are directly analogous to the The setup and holding priorities are directly analogous to the
preemption and defending priorities as defined in [3]. While the preemption and defending priorities as defined in [9]. While the
interaction of these two objects is ultimately a matter of policy, interaction of these two objects is ultimately a matter of policy,
the following default interaction is recommended. the following default interaction is recommended.
When both objects are present, the preemption priority policy element When both objects are present, the preemption priority policy element
is used. A mapping between the priority spaces is defined as is used. A mapping between the priority spaces is defined as
follows. A session attribute priority S is mapped to a preemption follows. A session attribute priority S is mapped to a preemption
priority P by the formula P = 2^(14-2S). The reverse mapping is priority P by the formula P = 2^(14-2S). The reverse mapping is
shown in the following table. shown in the following table.
Preemption Priority Session Attribute Priority Preemption Priority Session Attribute Priority
0 - 3 7 0 - 3 7
4 - 15 6 4 - 15 6
16 - 63 5 16 - 63 5
64 - 255 4 64 - 255 4
256 - 1023 3 256 - 1023 3
1024 - 4095 2 1024 - 4095 2
4096 - 16383 1 4096 - 16383 1
16384 - 65535 0 16384 - 65535 0
When a new reservation is considered for admission, the bandwidth When a new Path message is considered for admission, the bandwidth
requested is compared with the bandwidth available at the priority requested is compared with the bandwidth available at the priority
specified in the Setup Priority. The bandwidth available at a specified in the Setup Priority.
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 If the requested bandwidth is not available a PathErr message is
returned with an Error Code of 01, Admission Control Failure, and an 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 Error Value of 0x0002. The first 0 in the Error Value indicates a
globally defined subcode and is not informational. The 002 indicates globally defined subcode and is not informational. The 002 indicates
"requested bandwidth unavailable". "requested bandwidth unavailable".
If the requested bandwidth is less than the unused bandwidth then If the requested bandwidth is less than the unused bandwidth then
processing is complete. If the requested bandwidth is available, but processing is complete. If the requested bandwidth is available, but
is in use by lower priority sessions, then lower priority sessions is in use by lower priority sessions, then lower priority sessions
skipping to change at page 44, line 18 skipping to change at page 51, line 10
TC_Preempt() upcall to local clients, passing a subcode that TC_Preempt() upcall to local clients, passing a subcode that
indicates the reason. A ResvErr and/or PathErr with the code "Policy indicates the reason. A ResvErr and/or PathErr with the code "Policy
Control failure" SHOULD be sent toward the downstream receivers and Control failure" SHOULD be sent toward the downstream receivers and
upstream senders. upstream senders.
The support of local-protection is OPTIONAL. A node may recognize The support of local-protection is OPTIONAL. A node may recognize
the local-protection Flag but may be unable to perform the requested the local-protection Flag but may be unable to perform the requested
operation. In this case, the node SHOULD pass the information operation. In this case, the node SHOULD pass the information
downstream unchanged. downstream unchanged.
The support of merging is OPTIONAL. A node may recognize the Merge The recording of the Label subobject in the ROUTE_RECORD object is
Flag but may be unable to perform the requested operation. In this controlled by the label-recording-desired flag in the
case, the node SHOULD pass the information downstream unchanged. SESSION_ATTRIBUTE object. Since the Label subobject is not needed
for all applications of the it is not automatically recorded. The
If a Path message contains multiple SESSION_ATTRIBUTE objects, only flag allows applications to request this only when needed.
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 The contents of the Session Name field are a string, typically of
displayable characters. The Length MUST always be a multiple of 4 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 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 of 4, the object is padded with trailing NULL characters. The Name
Length field contains the actual string length. Length field contains the actual string length.
4.8.4. Resource Affinity Procedures
Resource classes and resource class affinities are described in [3].
In this document we use the briefer term resource affinities for the
latter term. Resource classes can be associated with links and
advertised in routing protocols. Resource class affinities are used
by RSVP in two ways. In order to be validated a link must pass the
three tests below. If the test fails a PathErr with the code "policy
control failure" SHOULD be sent.
When a new reservation is considered for admission over a strict node
in an ERO, a node MAY validate the resource affinities with the
resource classes of that link. When a node is choosing links in
order to extend a loose node of an ERO, the node must validate the
resource classes of those links against the resource affinities. If
no acceptable links can be found to extend the ERO, the node SHOULD
send a PathErr message with an error code of "Routing Problem" and an
error value of "no route available toward destination".
In order to be validated a link must pass the following three tests.
To precisely describe the tests use the definitions in the object
description above. We also define
Link-attr A 32-bit vector representing attributes associated
with a link.
The three tests are
1. Exclude-any
This test excludes a link from consideration if the link carries any
of the attributes in the set.
(link-attr & exclude-any) == 0
2. Include-any
This test accepts a link if the link carries any of the
attributes in the set.
(include-any == 0) | ((link-attr & include-any) != 0)
3. Include-all
This test accepts a link only if the link carries all of the
attributes in the set.
(include-all == 0) | (((link-attr & include-all) ^ include-
all) == 0)
For a link to be acceptable, all three tests must pass. If the test
fails a error message
If a Path message contains multiple SESSION_ATTRIBUTE objects, only
the first SESSION_ATTRIBUTE object is meaningful. Subsequent
SESSION_ATTRIBUTE objects can be ignored and need not be forwarded.
All RSVP routers, whether they support the SESSION_ATTRIBUTE object All RSVP routers, whether they support the SESSION_ATTRIBUTE object
or not, SHALL forward the object unmodified. The presence of non- or not, SHALL forward the object unmodified. The presence of non-
RSVP routers anywhere between senders and receivers has no impact on RSVP routers anywhere between senders and receivers has no impact on
this object. this object.
4.8. Tspec and Flowspec Object for Class-of-Service Service 4.9. Tspec and Flowspec Object for Class-of-Service Service
An LSP may not need bandwidth reservations or QoS guarantees. Such 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 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 for setting up LSPs. When resources do not have to be allocated to
the LSP, the Class-of-Service service SHOULD be used. the LSP, the Class-of-Service service SHOULD be used.
The Class-of-Service FLOWSPEC allows indication of a Class of Service The Class-of-Service FLOWSPEC allows indication of a Class of Service
(CoS) value that should be used when handling data packets associated (CoS) value that should be used when handling data packets associated
with the request. with the request.
skipping to change at page 46, line 12 skipping to change at page 54, line 12
Either the Adspec is omitted or an int-serv adspec with only the Either the Adspec is omitted or an int-serv adspec with only the
Default General Characterization Parameters is used. Default General Characterization Parameters is used.
5. Hello Extension 5. Hello Extension
The RSVP Hello extension enables RSVP nodes to detect when a The RSVP Hello extension enables RSVP nodes to detect when a
neighboring node is not reachable. The mechanism provides node to neighboring node is not reachable. The mechanism provides node to
node failure detection. When such a failure is detected it is node failure detection. When such a failure is detected it is
handled much the same as a link layer communication failure. This handled much the same as a link layer communication failure. This
mechanism is intended to be used when notification of link layer mechanism is intended to be used when notification of link layer
failures is not available and unnumber links are not used, or when failures is not available and unnumbered links are not used, or when
the failure detection mechanisms provided by the link layer are not the failure detection mechanisms provided by the link layer are not
sufficient for timely node failure detection. sufficient for timely node failure detection.
It should be noted that node failure detection is not the same as a It should be noted that node failure detection is not the same as a
link failure detection mechanism, particularly in the case of link failure detection mechanism, particularly in the case of
multiple parallel unnumbered links. multiple parallel unnumbered links.
The Hello extension is specifically designed so that one side can use The Hello extension is specifically designed so that one side can use
the mechanism while the other side does not. Neighbor failure the mechanism while the other side does not. Neighbor failure
detection may be initiated at any time. This includes when neighbors detection may be initiated at any time. This includes when neighbors
skipping to change at page 47, line 16 skipping to change at page 55, line 16
Hello Messages are always sent between two RSVP neighbors. The IP Hello Messages are always sent between two RSVP neighbors. The IP
source address is the IP address of the sending node. The IP source address is the IP address of the sending node. The IP
destination address is the IP address of the neighbor node. destination address is the IP address of the neighbor node.
The HELLO mechanism is intended for use between immediate neighbors. The HELLO mechanism is intended for use between immediate neighbors.
When HELLO messages are being the exchanged between immediate When HELLO messages are being the exchanged between immediate
neighbors, the IP TTL field of all outgoing HELLO messages SHOULD be neighbors, the IP TTL field of all outgoing HELLO messages SHOULD be
set to 1. set to 1.
The Hello message format is as follows: The Hello message has a Msg Type of 20. The Hello message format is
as follows:
<Hello Message> ::= <Common Header> [ <INTEGRITY> ] <Hello Message> ::= <Common Header> [ <INTEGRITY> ]
<HELLO> <HELLO>
For Hello messages, the Msg Type field of the Common Header MUST be 5.2. HELLO Object formats
set to 14.
5.2. HELLO Object
HELLO Class = 22 The HELLO Class is 22. There are two C_Types defined.
HELLO REQUEST object 5.2.1. HELLO REQUEST object
Class = HELLO Class, C_Type = 1 Class = HELLO Class, C_Type = 1
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Src_Instance | | Src_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dst_Instance | | Dst_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
HELLO ACK object 5.2.2. HELLO ACK object
Class = HELLO Class, C_Type = 2 Class = HELLO Class, C_Type = 2
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Src_Instance | | Src_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dst_Instance | | Dst_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 48, line 24 skipping to change at page 56, line 39
neighbor. This field MUST be set to zero (0) when no value has neighbor. This field MUST be set to zero (0) when no value has
ever been seen from the neighbor. ever been seen from the neighbor.
5.3. Hello Message Usage 5.3. Hello Message Usage
The Hello Message is completely optional. All messages may be The Hello Message is completely optional. All messages may be
ignored by nodes which do not wish to participate in Hello message ignored by nodes which do not wish to participate in Hello message
processing. The balance of this section is written assuming that the processing. The balance of this section is written assuming that the
receiver as well as the sender is participating. In particular, the receiver as well as the sender is participating. In particular, the
use of MUST and SHOULD with respect to the receiver applies only to a use of MUST and SHOULD with respect to the receiver applies only to a
node that supports Hello message processing.
A node periodically generates a Hello message containing a HELLO A node periodically generates a Hello message containing a HELLO
REQUEST object for each neighbor who's status is being tracked. The REQUEST object for each neighbor who's status is being tracked. The
periodicity is governed by the hello_interval. This value MAY be periodicity is governed by the hello_interval. This value MAY be
configured on a per neighbor basis. The default value is 5 ms. configured on a per neighbor basis. The default value is 5 ms.
When generating a message containing a HELLO REQUEST object, the When generating a message containing a HELLO REQUEST object, the
sender fills in the Src_Instance field with a value representing it's sender fills in the Src_Instance field with a value representing it's
per neighbor instance. This value MUST NOT change while the agent is per neighbor instance. This value MUST NOT change while the agent is
exchanging Hellos with the corresponding neighbor. The sender also exchanging Hellos with the corresponding neighbor. The sender also
fills in the Dst_Instance field with the Src_Instance value most fills in the Dst_Instance field with the Src_Instance value most
recently received from the neighbor. If no value has ever been recently received from the neighbor. For reference, call this
received from the neighbor, a value of zero (0) is used. The variable Neighbor_Src_Instance. If no value has ever been received
generation of a message SHOULD be suppressed when a HELLO REQUEST from the neighbor or this node considers communication to the
object was received from the destination node within the prior neighbor to have been lost, the Neighbor_Src_Instance is set to zero
hello_interval interval. (0). The generation of a message SHOULD be suppressed when a HELLO
REQUEST object was received from the destination node within the
prior hello_interval interval.
On receipt of a message containing a HELLO REQUEST object, the On receipt of a message containing a HELLO REQUEST object, the
receiver MUST generate a Hello message containing a HELLO ACK object. receiver MUST generate a Hello message containing a HELLO ACK object.
The receiver SHOULD also verify that the neighbor has not reset. The receiver SHOULD also verify that the neighbor has not reset.
This is done by comparing the sender's Src_Instance field value with This is done by comparing the sender's Src_Instance field value with
the previously received value. If the value differs, then a node the previously received value. If the Neighbor_Src_Instance value is
MUST treat the neighbor as if communication has been lost. zero, and the Src_Instance field is non-zero, the
Neighbor_Src_Instance is updated with the new value. If the value
differs or the Src_Instance field is zero, then the node MUST treat
the neighbor as if communication has been lost.
The receiver of a HELLO REQUEST object SHOULD also verify that the The receiver of a HELLO REQUEST object SHOULD also verify that the
neighbor is reflecting back the receiver's Instance value. This is neighbor is reflecting back the receiver's Instance value. This is
done by comparing the received Dst_Instance field with the done by comparing the received Dst_Instance field with the
Src_Instance field value most recently transmitted to that neighbor. Src_Instance field value most recently transmitted to that neighbor.
If the neighbor continues to advertise a wrong non-zero value after a If the neighbor continues to advertise a wrong non-zero value after a
configured number of intervals, then the node MUST treat the neighbor configured number of intervals, then the node MUST treat the neighbor
as if communication has been lost. as if communication has been lost.
On receipt of a message containing a HELLO ACK object, the receiver On receipt of a message containing a HELLO ACK object, the receiver
MUST verify that the neighbor has not reset. This is done by MUST verify that the neighbor has not reset. This is done by
comparing the sender's Src_Instance field value with the previously comparing the sender's Src_Instance field value with the previously
received value. If the value differs, then the node MUST treat the received value. If the Neighbor_Src_Instance value is zero, and the
neighbor as if communication has been lost. Src_Instance field is non-zero, the Neighbor_Src_Instance is updated
with the new value. If the value differs or the Src_Instance field
is zero, then the node MUST treat the neighbor as if communication
has been lost.
The receiver of a HELLO ACK object MUST also verify that the neighbor The receiver of a HELLO ACK object MUST also verify that the neighbor
is reflecting back the receiver's Instance value. If the neighbor is reflecting back the receiver's Instance value. If the neighbor
advertises a wrong value in the Dst_Instance field, then a node MUST advertises a wrong value in the Dst_Instance field, then a node MUST
treat the neighbor as if communication has been lost. treat the neighbor as if communication has been lost.
If no Instance values are received, via either REQUEST or ACK If no Instance values are received, via either REQUEST or ACK
objects, from a neighbor within a configured number of objects, from a neighbor within a configured number of
hello_intervals, then a node MUST presume that it cannot communicate hello_intervals, then a node MUST presume that it cannot communicate
with the neighbor. The default for this number is 3.5. with the neighbor. The default for this number is 3.5.
skipping to change at page 50, line 21 skipping to change at page 59, line 7
The Hello extension is fully backwards compatible. The Hello class The Hello extension is fully backwards compatible. The Hello class
is assigned a class value of the form 0bbbbbbb. Depending on the is assigned a class value of the form 0bbbbbbb. Depending on the
implementation, implementations that do not support the extension implementation, implementations that do not support the extension
will either silently discard Hello messages or will respond with an will either silently discard Hello messages or will respond with an
"Unknown Object Class" error. In either case the sender will fail to "Unknown Object Class" error. In either case the sender will fail to
see an acknowledgment for the issued Hello. see an acknowledgment for the issued Hello.
6. Security Considerations 6. Security Considerations
In principle these extentions to RSVP pose no security exposures over In principle these extensions to RSVP pose no security exposures over
and above RFC 2205[1]. However, there is a slight change in the and above RFC 2205[1]. However, there is a slight change in the
trust model. Traffic sent on a normal RSVP session can be filtered trust model. Traffic sent on a normal RSVP session can be filtered
according to source and destination addresses as well as port according to source and destination addresses as well as port
numbers. In this specification, filtering occurs only on the basis numbers. In this specification, filtering occurs only on the basis
of an incoming label. For this reason an administration may which to of an incoming label. For this reason an administration may which to
limit the domain over which LSP tunnels can be established. This can limit the domain over which LSP tunnels can be established. This can
be accomplished by setting filters on various ports to deny action on be accomplished by setting filters on various ports to deny action on
a RSVP path message with a SESSION object of type LSP_TUNNEL_IPv4 (7) a RSVP path message with a SESSION object of type LSP_TUNNEL_IPv4 (7)
or LSP_TUNNEL_IPv4 (8). or LSP_TUNNEL_IPv6 (8).
7. IANA Considerations 7. IANA Considerations
The responsible Internet authority (presently called the IANA) The responsible Internet authority (presently called the IANA)
assigns values to RSVP protocol parameters. With the current assigns values to RSVP protocol parameters. With the current
document an EXPLICIT_ROUTE object and a ROUTE_RECORD object are document an EXPLICIT_ROUTE object and a ROUTE_RECORD object are
defined. Each of these objects contain subobjects. This section defined. Each of these objects contain subobjects. This section
defines the rules for the assignment of subobject numbers. This defines the rules for the assignment of subobject numbers. This
section uses the terminology of BCP 26 "Guidelines for Writing an section uses the terminology of BCP 26 "Guidelines for Writing an
IANA Considerations Section in RFCs". IANA Considerations Section in RFCs".
skipping to change at page 52, line 10 skipping to change at page 60, line 42
Levels", RFC 2119, March 1997. Levels", RFC 2119, March 1997.
[7] Almquist, P., "Type of Service in the Internet Protocol Suite", [7] Almquist, P., "Type of Service in the Internet Protocol Suite",
RFC 1349, July 1992. RFC 1349, July 1992.
[8] Nichols, K. et al., "Definition of the Differentiated Services [8] Nichols, K. et al., "Definition of the Differentiated Services
Field (DS Field) in the IPv4 and IPv6 Headers", RFC 2474, Field (DS Field) in the IPv4 and IPv6 Headers", RFC 2474,
December 1998. December 1998.
[9] Herzog, S., "Signaled Preemption Priority Policy Element", [9] Herzog, S., "Signaled Preemption Priority Policy Element",
draft-ietf-rap-signaled-priority-04.txt, September 1999. RFC 2751, January 2000.
[10] Awduche, D. et al., "Applicability Statement for Extensions to RSVP [10] Awduche, D. et al., "Applicability Statement for Extensions to RSVP
for LSP-Tunnels", draft-ietf-mpls-rsvp-tunnel-applicability-00.txt, for LSP-Tunnels", draft-ietf-mpls-rsvp-tunnel-applicability-00.txt,
September 1999. September 1999.
[11] Wroclawski, J., "The Use of RSVP with IETF Integrated Services",
RFC 2210, September 1997.
[12] Postel, J., "Internet Control Message Protocol", RFC 792,
September 1981.
[13] Mogul, J. & Deering, S., "Path MTU Discovery", RFC 1191,
November 1990.
11. Authors' Addresses 11. Authors' Addresses
Daniel O. Awduche Daniel O. Awduche
UUNET (MCI Worldcom), Inc UUNET (MCI Worldcom), Inc
3060 Williams Drive 3060 Williams Drive
Fairfax, VA 22031 Fairfax, VA 22031
Voice: +1 703 208 5277 Voice: +1 703 208 5277
Email: awduche@uu.net Email: awduche@uu.net
Lou Berger Lou Berger
skipping to change at page 52, line 44 skipping to change at page 61, line 39
Voice: +1 650 526 Voice: +1 650 526
Email: dhg@juniper.net Email: dhg@juniper.net
Tony Li Tony Li
Procket Networks Procket Networks
3910 Freedom Circle, Ste. 102A 3910 Freedom Circle, Ste. 102A
Santa Clara CA 95054 Santa Clara CA 95054
Email: tony1@home.net Email: tony1@home.net
Vijay Srinivasan Vijay Srinivasan
Torrent Networking Technologies Corp. Cosine Communications, Inc.
3000 Aerial Center Parkway, Suite 140 1200 Bridge Parkway
Morrisville, NC 27560 Redwood City, CA 94065
Voice: +1 919 468 8466 ext. 236 Voice: +1 650 628 4892
Email: vijay@torrentnet.com Email: vsriniva@cosinecom.com
George Swallow George Swallow
Cisco Systems, Inc. Cisco Systems, Inc.
250 Apollo Drive 250 Apollo Drive
Chelmsford, MA 01824 Chelmsford, MA 01824
Voice: +1 978 244 8143 Voice: +1 978 244 8143
Email: swallow@cisco.com Email: swallow@cisco.com
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/