draft-ietf-mpls-rsvp-lsp-tunnel-03.txt   draft-ietf-mpls-rsvp-lsp-tunnel-04.txt 
skipping to change at page 1, line 24 skipping to change at page 1, line 24
George Swallow George Swallow
Cisco Systems, Inc. Cisco Systems, Inc.
Vijay Srinivasan Vijay Srinivasan
Torrent Networks, Inc. Torrent Networks, Inc.
September 1999 September 1999
Extensions to RSVP for LSP Tunnels Extensions to RSVP for LSP Tunnels
draft-ietf-mpls-rsvp-lsp-tunnel-03.txt draft-ietf-mpls-rsvp-lsp-tunnel-04.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
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
To view the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in an Internet-Drafts Shadow
Directory, see http://www.ietf.org/shadow.html.
Abstract Abstract
This document describes the use of RSVP, including all the necessary This document describes the use of RSVP, including all the necessary
extensions, to establish label-switched paths (LSPs) in MPLS. Since extensions, to establish label-switched paths (LSPs) in MPLS. Since
the flow along an LSP is completely identified by the label applied the flow along an LSP is completely identified by the label applied
at the ingress node of the path, these paths may be treated as at the ingress node of the path, these paths may be treated as
tunnels. A key application of LSP tunnels is traffic engineering tunnels. A key application of LSP tunnels is traffic engineering
with MPLS as specified in [3]. with MPLS as specified in [3].
We propose several additional objects that extend RSVP, allowing the We propose several additional objects that extend RSVP, allowing the
skipping to change at page 3, line 38 skipping to change at page 3, line 38
4.2.2 Non-support of the Label Request Object ................ 21 4.2.2 Non-support of the Label Request Object ................ 21
4.3 Explicit Route Object .................................. 21 4.3 Explicit Route Object .................................. 21
4.3.1 Applicability .......................................... 22 4.3.1 Applicability .......................................... 22
4.3.2 Semantics of the Explicit Route Object ................. 22 4.3.2 Semantics of the Explicit Route Object ................. 22
4.3.3 Subobjects ............................................. 23 4.3.3 Subobjects ............................................. 23
4.3.4 Processing of the Explicit Route Object ................ 27 4.3.4 Processing of the Explicit Route Object ................ 27
4.3.5 Loops .................................................. 29 4.3.5 Loops .................................................. 29
4.3.6 Non-support of the Explicit Route Object ............... 29 4.3.6 Non-support of the Explicit Route Object ............... 29
4.4 Record Route Object .................................... 29 4.4 Record Route Object .................................... 29
4.4.1 Subobjects ............................................. 30 4.4.1 Subobjects ............................................. 30
4.4.2 Applicability .......................................... 32 4.4.2 Applicability .......................................... 33
4.4.3 Handling RRO ........................................... 33 4.4.3 Handling RRO ........................................... 33
4.4.4 Loop Detection ......................................... 34 4.4.4 Loop Detection ......................................... 34
4.4.5 Non-support of RRO ..................................... 35 4.4.5 Non-support of RRO ..................................... 35
4.5 Error Codes for ERO and RRO ............................ 35 4.5 Error Codes for ERO and RRO ............................ 35
4.6 Session, Sender Template, and Filter Spec Objects ...... 36 4.6 Session, Sender Template, and Filter Spec Objects ...... 36
4.6.1 Session Object ......................................... 36 4.6.1 Session Object ......................................... 37
4.6.2 Sender Template Object ................................. 37 4.6.2 Sender Template Object ................................. 37
4.6.3 Filter Specification Object ............................ 37 4.6.3 Filter Specification Object ............................ 38
4.6.4 Reroute Procedure ...................................... 38 4.6.4 Reroute Procedure ...................................... 38
4.7 Session Attribute Object ............................... 39 4.7 Session Attribute Object ............................... 39
4.8 Tspec and Flowspec Object for Class-of-Service Service... 41 4.8 Tspec and Flowspec Object for Class-of-Service Service ....42
5 Security Considerations ................................ 43 5 Hello Extension ........................................ 43
6 Intellectual Property Considerations ................... 43 5.1 Hello Message Format ................................... 44
7 Acknowledgments ........................................ 43 5.2 HELLO Object ........................................... 45
8 References ............................................. 43 5.3 Hello Message Usage .................................... 46
9 Authors' Addresses ..................................... 45 5.4 Multi-Link Considerations .............................. 47
5.5 Compatibility .......................................... 47
6 Security Considerations ................................ 47
7 Intellectual Property Considerations ................... 48
8 Acknowledgments ........................................ 48
9 References ............................................. 48
10 Authors' Addresses ..................................... 49
1. Introduction and Background 1. Introduction and Background
1.1. Introduction 1.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
skipping to change at page 5, line 46 skipping to change at page 5, line 46
optimization of operational networks) is expected to be an important optimization of operational networks) is expected to be an important
application of this specification, the extended RSVP protocol can be application of this specification, the extended RSVP protocol can be
used in a much wider context. used in a much wider context.
The purpose of this document is to describe the use of RSVP to The purpose of this document is to describe the use of RSVP to
establish LSP tunnels. The intent is to fully describe all the establish LSP tunnels. The intent is to fully describe all the
objects, packet formats, and procedures required to realize objects, packet formats, and procedures required to realize
interoperable implementations. A few new objects are also defined interoperable implementations. A few new objects are also defined
that enhance management and diagnostics of LSP tunnels. that enhance management and diagnostics of LSP tunnels.
All objects described in this specification are optional with respect The document also describes a means of rapid node failure detection
to RSVP. This document discusses what happens when an object via a new HELLO message.
described here is not supported by a node.
All objects and messages described in this specification are optional
with respect to RSVP. This document discusses what happens when an
object described here is not supported by a node.
Throughout this document, the discussion will be restricted to Throughout this document, the discussion will be restricted to
unicast label switched paths. Multicast LSPs are left for further unicast label switched paths. Multicast LSPs are left for further
study. study.
1.2. Background 1.2. Background
Hosts and routers that support both RSVP [1] and Multi-Protocol Label Hosts and routers that support both RSVP [1] and Multi-Protocol Label
Switching [2] can associate labels with RSVP flows. When MPLS and Switching [2] can associate labels with RSVP flows. When MPLS and
RSVP are combined, the definition of a flow can be made more RSVP are combined, the definition of a flow can be made more
skipping to change at page 9, line 17 skipping to change at page 9, line 22
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 preemption, priority, and local-protection, are
also included in this object. also included in this object.
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.
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
incapable of providing a label binding, it sends a PathErr message incapable of providing a label binding, it sends a PathErr message
with an "unknown object class" error. If the LABEL_REQUEST object is with an "unknown object class" error. If the LABEL_REQUEST object is
not supported end to end, the sender node will be notified by the not supported end to end, the sender node will be notified by the
first node which does not provide this support. first node which does not provide this support.
The destination node of a label-switched path responds to a The destination node of a label-switched path responds to a
LABEL_REQUEST by including a LABEL object in its response RSVP Resv LABEL_REQUEST by including a LABEL object in its response RSVP Resv
skipping to change at page 13, line 33 skipping to change at page 13, line 33
LABEL_REQUEST Path LABEL_REQUEST Path
LABEL Resv LABEL Resv
EXPLICIT_ROUTE Path EXPLICIT_ROUTE Path
RECORD_ROUTE Path, Resv RECORD_ROUTE Path, Resv
SESSION_ATTRIBUTE Path SESSION_ATTRIBUTE Path
New C-Types are also assigned for the SESSION, SENDER_TEMPLATE, New C-Types are also assigned for the SESSION, SENDER_TEMPLATE,
FILTER_SPEC, FLOWSPEC objects. FILTER_SPEC, FLOWSPEC objects.
Detailed descriptions of the new objects are given in later sections. Detailed descriptions of the new objects are given in later sections.
All new objects are optional with respect to RSVP. An implementation All new objects are OPTIONAL with respect to RSVP. An implementation
can choose to support a subset of objects. However, the can choose to support a subset of objects. However, the
LABEL_REQUEST and LABEL objects are mandatory with respect to this LABEL_REQUEST and LABEL objects are mandatory with respect to this
specification. specification.
The LABEL and RECORD_ROUTE objects, are sender specific. They must The LABEL and RECORD_ROUTE objects, are sender specific. They MUST
immediately follow either the SENDER_TEMPLATE in Path messages, or follow either the SENDER_TEMPLATE in Path messages, or the associated
the FILTER_SPEC in Resv messages. FILTER_SPEC in Resv messages. In Resv messages they MUST appear
prior to any subsequent FILTER_SPEC.
The placement of EXPLICIT_ROUTE, LABEL_REQUEST, and SESSION_ATTRIBUTE The relative placement of EXPLICIT_ROUTE, LABEL_REQUEST, and
objects is simply a recommendation. The ordering of these objects is SESSION_ATTRIBUTE objects is simply a recommendation. The ordering
not important, so an implementation must be prepared to accept of these objects is not important, so an implementation MUST be
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>
skipping to change at page 15, line 19 skipping to change at page 15, line 19
<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.
4. LSP Tunnel related Objects 4. LSP Tunnel related Objects
4.1. Label Object 4.1. Label Object
Labels may be carried in Resv messages. For the FF and SE styles, a Labels MAY be carried in Resv messages. For the FF and SE styles, a
label is associated with each sender. The label for a sender must label is associated with each sender. The label for a sender MUST
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 15, line 49 skipping to change at page 15, line 49
label is encoded right aligned in 4 octets. The top of the stack is label is encoded right aligned in 4 octets. The top of the stack is
in the right 4 octets of the object contents. A LABEL object that in the right 4 octets of the object contents. A LABEL object that
contains no labels is illegal. contains no labels is illegal.
Each label is an unsigned integer in the range 0 through 1048575. Each label is an unsigned integer in the range 0 through 1048575.
The decision concerning whether to create a label stack with more 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 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 stack is not addressed in this document. For implementations that do
not support a label stack, only the top label is examined. The rest not support a label stack, only the top label is examined. The rest
of the label stack should be passed through unchanged. Such of the label stack SHOULD be passed through unchanged. Such
implementations are required to generate a label stack of depth 1 implementations are REQUIRED to generate a label stack of depth 1
when initiating the first LABEL. 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 A router uses the top label carried in the LABEL object as the
outgoing label associated with the sender. The router allocates a outgoing label associated with the sender. The router allocates a
new label and binds it to the incoming interface of this new label and binds it to the incoming interface of this
session/sender. This is the same interface that the router uses to session/sender. This is the same interface that the router uses to
forward Resv messages to the previous hops. 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.
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 Labels received in Resv messages on different interfaces are always
considered to be different even if the label value is the same. considered to be different even if the label value is the same.
To construct a new LABEL object, the router replaces the top label To construct a new LABEL object, the router replaces the top label
(from the received Resv message) with the locally allocated new (from the received Resv message) with the locally allocated new
label. The router then sends the new LABEL object as part of the label. The router then sends the new LABEL object as part of the
Resv message to the previous hop. The LABEL object should be kept in Resv message to the previous hop. The LABEL object SHOULD be kept in
the Reservation State Block. It is then used in the next Resv the Reservation State Block. It is then used in the next Resv
refresh event for 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 router 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.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
skipping to change at page 17, line 25 skipping to change at page 17, line 25
the IANA) the IANA)
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 Label Request with ATM Label Range
class = 19, C_Type = 2 (need to get an official class num from class = 19, C_Type = 2 (need to get an official class num from
the IANA) the IANA)
skipping to change at page 18, line 4 skipping to change at page 18, line 4
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 | | 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.
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 should be right switch. If the VPI is less than 12-bits it MUST be right
justified in this field and preceding bits should be set to justified in this field and preceding bits MUST be set to zero.
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
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 should be ginating switch. If the VCI is less than 16-bits it MUST be
right justified in this field and preceding bits should be set right justified in this field and preceding bits MUST be set to
to zero. zero.
Maximum VPI (12 bits) Maximum VPI (12 bits)
This 12 bit field specifies the upper bound of a block of This 12 bit field specifies the upper 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 should be right switch. If the VPI is less than 12-bits it MUST be right
justified in this field and preceding bits should be set to justified in this field and preceding bits MUST be set to zero.
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 should be ginating switch. If the VCI is less than 16-bits it MUST be
right justified in this field and preceding bits should be set right justified in this field and preceding bits MUST be set to
to zero. zero.
Label Request with Frame Relay Label Range Label Request with Frame Relay Label Range
class = 19, C_Type = 3 (need to get an official class num from class = 19, C_Type = 3 (need to get an official class num from
the IANA) the IANA)
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Maximum DLCI | | Reserved | Maximum DLCI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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 ignored on receipt. sion and 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.
DLI DLI
DLCI Length Indicator. The number of bits in the DLCI. DLCI Length Indicator. The number of bits in the DLCI.
skipping to change at page 19, line 45 skipping to change at page 19, line 45
Len DLCI bits Len DLCI bits
0 10 0 10
1 17 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 should be right justified in this originating switch. The DLCI MUST be right justified in this
field and unused bits should 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 should be right justified in this originating switch. The DLCI MUST be right justified in this
field and unused bits should be set to 0. field and unused bits MUST be set to 0.
4.2.1. Handling of LABEL_REQUEST 4.2.1. 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
Path refresh messages will also contain the LABEL_REQUEST object. Path refresh messages will also contain the LABEL_REQUEST object.
When the Path message reaches the receiver, the presence of the When the Path message reaches the receiver, the presence of the
LABEL_REQUEST object triggers the receiver to allocate a label and to LABEL_REQUEST object triggers the receiver to allocate a label and to
place the label in the LABEL object for the corresponding Resv place the label in the LABEL object for the corresponding Resv
message. If a label range was specified, the label must be allocated message. If a label range was specified, the label MUST be allocated
from that range. A receiver that accepts a LABEL_REQUEST object MUST from that range. A receiver that accepts a LABEL_REQUEST object MUST
include a LABEL object in Resv messages pertaining to that Path include a LABEL object in Resv messages pertaining to that Path
message. If a LABEL_REQUEST object was not present in the Path message. If a LABEL_REQUEST object was not present in the Path
message, a node MUST NOT include a LABEL object in a Resv message for message, a node MUST NOT include a LABEL object in a Resv message for
that Path message's session and PHOP. that Path message's session and PHOP.
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.
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.2. 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 send 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.
RSVP is designed to cope gracefully with non-RSVP routers anywhere RSVP is designed to cope gracefully with non-RSVP routers anywhere
between senders and receivers. However, obviously, non-RSVP routers between senders and receivers. However, obviously, non-RSVP routers
cannot convey labels via RSVP. This means that if a router has a cannot convey labels via RSVP. This means that if a router has a
neighbor that is known to not be RSVP capable, the router must not neighbor that is known to not be RSVP capable, the router MUST NOT
advertise the LABEL_REQUEST object when sending messages that pass advertise the LABEL_REQUEST object when sending messages that pass
through the non-RSVP routers. The router should send a PathErr back through the non-RSVP routers. The router SHOULD send a PathErr back
to the sender, with the error code "Routing problem" and the error to the sender, with the error code "Routing problem" and the error
value "MPLS being negotiated, but a non-RSVP capable router stands in value "MPLS being negotiated, but a non-RSVP capable router stands in
the path." This same message should be sent, if a router receives a the path." This same message SHOULD be sent, if a router receives a
LABEL_REQUEST object in a message from a non-RSVP See [1] for a LABEL_REQUEST object in a message from a non-RSVP capable router. See
description of how a downstream router can determine the presence of [1] for a description of how a downstream router can determine the
non-RSVP routers. presence of non-RSVP routers.
4.3. Explicit Route Object 4.3. Explicit Route Object
As stated earlier, explicit routes are to be specified through a new As stated earlier, explicit routes are to be specified through a new
EXPLICIT_ROUTE object (ERO) in RSVP Path messages. The EXPLICIT_ROUTE object (ERO) in RSVP Path messages. The
EXPLICIT_ROUTE object has the following format: EXPLICIT_ROUTE object has the following format:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 22, line 10 skipping to change at page 22, line 10
The Class-Num for an EXPLICIT_ROUTE object is 20 (need to get The Class-Num for an EXPLICIT_ROUTE object is 20 (need to get
an official one from the IANA with the form 0bbbbbbb to ensure an official one from the IANA with the form 0bbbbbbb to ensure
that non-supporting implementations reject the message.) that non-supporting implementations reject the message.)
C-Type C-Type
The C-Type for an EXPLICIT_ROUTE object is 1 (need to get an The C-Type for an EXPLICIT_ROUTE object is 1 (need to get an
official one from the IANA) official one from the IANA)
If a Path message contains multiple EXPLICIT_ROUTE objects, only the If a Path message contains multiple EXPLICIT_ROUTE objects, only the
first object is meaningful. Subsequent EXPLICIT_ROUTE objects may be first object is meaningful. Subsequent EXPLICIT_ROUTE objects MAY be
ignored and should not be propagated. ignored and SHOULD NOT be propagated.
4.3.1. Applicability 4.3.1. Applicability
The EXPLICIT_ROUTE object is intended to be used only for unicast The EXPLICIT_ROUTE object is intended to be used only for unicast
situations. Applications of explicit routing to multicast are a situations. Applications of explicit routing to multicast are a
topic for further research. topic for further research.
The EXPLICIT_ROUTE object is to be used only when all routers along The EXPLICIT_ROUTE object is to be used only when all routers along
the explicit route support RSVP and the EXPLICIT_ROUTE object. The the explicit route support RSVP and the EXPLICIT_ROUTE object. The
EXPLICIT_ROUTE object is assigned a class value of the form 0bbbbbbb. EXPLICIT_ROUTE object is assigned a class value of the form 0bbbbbbb.
RSVP routers that do not support the object will therefore response 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. Certain operations to be performed along the path
skipping to change at page 24, line 7 skipping to change at page 24, line 7
Currently defined values are: Currently defined values are:
0 Reserved 0 Reserved
1 IPv4 prefix 1 IPv4 prefix
2 IPv6 prefix 2 IPv6 prefix
32 Autonomous system number 32 Autonomous system number
64 MPLS label switched path termination 64 MPLS label switched path termination
Length Length
The Length contains the total length of the subobject in bytes, The Length contains the total length of the subobject in bytes,
including the L, Type and Length fields. The Length must be at including the L, Type and Length fields. The Length MUST be at
least 4, and must be a multiple of 4. least 4, and MUST be a multiple of 4.
4.3.3.1. Strict and Loose Subobjects 4.3.3.1. Strict and Loose Subobjects
The L bit in the subobject is a one-bit attribute. If the L bit is The L bit in the subobject is a one-bit attribute. If the L bit is
set, then the value of the attribute is 'loose.' Otherwise, the set, then the value of the attribute is 'loose.' Otherwise, the
value of the attribute is 'strict.' For brevity, we say that if the value of the attribute is 'strict.' For brevity, we say that if the
value of the subobject attribute is 'loose' then it is a 'loose value of the subobject attribute is 'loose' then it is a 'loose
subobject.' Otherwise, it's a 'strict subobject.' Further, we say subobject.' Otherwise, it's a 'strict subobject.' Further, we say
that the abstract node of a strict or loose subobject is a strict or that the abstract node of a strict or loose subobject is a strict or
a loose node, respectively. Loose and strict nodes are always a loose node, respectively. Loose and strict nodes are always
skipping to change at page 25, line 19 skipping to change at page 25, line 19
Length Length
The Length contains the total length of the subobject in The Length contains the total length of the subobject in
bytes, including the Type and Length fields. The Length bytes, including the Type and Length fields. The Length
is always 8. is always 8.
IPv4 address IPv4 address
An IPv4 address. This address is treated as a prefix based on An IPv4 address. This address is treated as a prefix based on
the prefix length value below. Bits beyond the prefix are the prefix length value below. Bits beyond the prefix are
ignored on receipt and should be set to zero on transmission. ignored on receipt and SHOULD be set to zero on transmission.
Prefix length Prefix length
Length in bits of the IPv4 prefix Length in bits of the IPv4 prefix
Padding Padding
Zero on transmission. Ignored on receipt. Zero on transmission. Ignored on receipt.
The contents of an IPv4 prefix subobject are a 4-octet IPv4 address, The contents of an IPv4 prefix subobject are a 4-octet IPv4 address,
skipping to change at page 26, line 25 skipping to change at page 26, line 25
Length Length
The Length contains the total length of the subobject in The Length contains the total length of the subobject in
bytes, including the Type and Length fields. The Length bytes, including the Type and Length fields. The Length
is always 20. is always 20.
IPv6 address IPv6 address
An IPv6 address. This address is treated as a prefix based on An IPv6 address. This address is treated as a prefix based on
the prefix length value below. Bits beyond the prefix are the prefix length value below. Bits beyond the prefix are
ignored on receipt and should be set to zero on transmission. ignored on receipt and SHOULD be set to zero on transmission.
Prefix Length Prefix Length
Length in bits of the IPv6 prefix. Length in bits of the IPv6 prefix.
Padding Padding
Zero on transmission. Ignored on receipt. Zero on transmission. Ignored on receipt.
The contents of an IPv6 prefix subobject are a 16-octet IPv6 address, The contents of an IPv6 prefix subobject are a 16-octet IPv6 address,
skipping to change at page 27, line 14 skipping to change at page 27, line 14
4.3.3.5. Subobject 64: MPLS Label Switched Path Termination 4.3.3.5. Subobject 64: MPLS Label Switched Path Termination
The contents of an MPLS label switched path termination subobject are The contents of an MPLS label switched path termination subobject are
2 octets of padding. This subobject is an operation subobject. This 2 octets of padding. This subobject is an operation subobject. This
object is only meaningful if there is a LABEL_REQUEST object in the object is only meaningful if there is a LABEL_REQUEST object in the
Path message. Path message.
If a LABEL_REQUEST object is present in the Path message, this Path If a LABEL_REQUEST object is present in the Path message, this Path
message is being used to establish a label-switched path. In this message is being used to establish a label-switched path. In this
case, this subobject indicates that the prior abstract node should case, this subobject indicates that the prior abstract node SHOULD
remove one level of label from all packets following this label- remove one level of label from all packets following this label-
switched path. switched path.
The length of the MPLS label termination subobject is 4 octets. The length of the MPLS label termination subobject is 4 octets.
4.3.4. Processing of the Explicit Route Object 4.3.4. Processing of the Explicit Route Object
4.3.4.1. Selection of the Next Hop 4.3.4.1. Selection of the Next Hop
A node receiving a Path message containing an EXPLICIT_ROUTE object A node receiving a Path message containing an EXPLICIT_ROUTE object
skipping to change at page 27, line 38 skipping to change at page 27, line 38
involve a decision from a set of feasible alternatives. The criteria involve a decision from a set of feasible alternatives. The criteria
used to make a selection from feasible alternatives is implementation used to make a selection from feasible alternatives is implementation
dependent and can also be impacted by local policy, and is beyond the dependent and can also be impacted by local policy, and is beyond the
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 the first subobject is an
operation subobject, the message is in error and the system should operation subobject, the message is in error and the system SHOULD
return a "Bad EXPLICIT_ROUTE object" error. If there is no first 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 subobject
is an operation subobject, the node pops the subobject from the is an operation subobject, the node pops the subobject from the
EXPLICIT ROUTE object , records the subobject, and continues EXPLICIT ROUTE object , records the subobject, and continues
processing with step 2, above. Note that this changes the third processing with step 2, above. Note that this changes the third
subobject into the second subobject (hence "pop") in subsequent subobject into the second subobject (hence "pop") in subsequent
processing. The precise operations to be performed by this node must processing. The precise operations to be performed by this node must
be defined by the operation subobject. be defined by the operation subobject.
4) If the node is also a part of the abstract node described by the 4) If the node is also a part of the abstract node described by the
skipping to change at page 28, line 33 skipping to change at page 28, line 33
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 6) 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 6a) 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 6b) Otherwise, if the second subobject is a loose subobject, the node
selects any next hop that is along the path to the next abstract 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 7) 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
EXPLICIT_ROUTE object is removed, the node may add a new EXPLICIT_ROUTE object is removed, the node MAY add a new
EXPLICIT_ROUTE object. EXPLICIT_ROUTE object.
Otherwise, if the node is a member of the abstract node for the first Otherwise, if the node is a member of the abstract node for the first
subobject, a series of subobjects may be inserted before the first subobject, a series of subobjects MAY be inserted before the first
subobject or may replace the first subobject. Each subobject in this subobject or MAY replace the first subobject. Each subobject in this
series must denote an abstract node that is a subset of the current series MUST denote an abstract node that is a subset of the current
abstract node. abstract node.
Alternately, if the first subobject is a loose subobject, an Alternately, if the first subobject is a loose subobject, an
arbitrary series of subobjects may be inserted prior to the first arbitrary series of subobjects MAY be inserted prior to the first
subobject. subobject.
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
skipping to change at page 30, line 16 skipping to change at page 30, line 16
The Class-Num for a RECORD_ROUTE object is 21 (need to get an The Class-Num for a RECORD_ROUTE object is 21 (need to get an
official one from the IANA with the form 0bbbbbbb to ensure official one from the IANA with the form 0bbbbbbb to ensure
that non-supporting implementations reject the message.) that non-supporting implementations reject the message.)
C-Type C-Type
The C-Type for a RECORD_ROUTE object is 1 (need to get an The C-Type for a RECORD_ROUTE object is 1 (need to get an
official one from the IANA) official one from the IANA)
The RRO can be present in both RSVP Path and Resv messages. If a The RRO can be present in both RSVP Path and Resv messages. If a
message contains multiple RROs, only the first RRO is meaningful. Path message contains multiple RROs, only the first RRO is
Subsequent RROs can be ignored and should not be propagated. meaningful. Subsequent RROs SHOULD be ignored and SHOULD NOT be
propagated. Similarly, if in a Resv message multiple RROs are
encountered following a FILTER_SPEC before another FILTER_SPEC is
encountered, only the first RRO is meaningful. Subsequent RROs
SHOULD be ignored and SHOULD NOT be propagated.
4.4.1. Subobjects 4.4.1. Subobjects
The contents of a RECORD_ROUTE object are a series of variable-length The contents of a RECORD_ROUTE object are a series of variable-length
data items called subobjects. Each subobject has its own Length data items called subobjects. Each subobject has its own Length
field. The length contains the total length of the subobject in field. The length contains the total length of the subobject in
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. Two kinds of subobjects are currently defined.
skipping to change at page 31, line 14 skipping to change at page 31, line 29
Length Length
The Length contains the total length of the subobject in The Length contains the total length of the subobject in
bytes, including the Type and Length fields. The Length bytes, including the Type and Length fields. The Length
is always 8. is always 8.
IPv4 address IPv4 address
A 32-bit unicast, host address. Any network-reachable A 32-bit unicast, host address. Any network-reachable
interface address is allowed here. Illegal addresses, interface address is allowed here. Illegal addresses,
such as loopback addresses, should not be used. such as certain loopback addresses, SHOULD NOT be used.
Prefix length Prefix length
32 32
Flags Flags
0x01 Local protection available 0x01 Local protection available
Indicates that the link downstream of this node is Indicates that the link downstream of this node is
skipping to change at page 33, line 21 skipping to change at page 33, line 38
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.
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.
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. The RRO object is included in the error message. If the
receiver receives such a ResvErr, it should send a PathErr message receiver receives such a ResvErr, it SHOULD send a PathErr message
with error code of "Notify" and an error value of "RRO notification". with error code of "Notify" and an error value of "RRO notification".
The RRO object is included in the error message. 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.
skipping to change at page 34, line 18 skipping to change at page 34, line 34
an RRO to Resv messages. The processing mirrors that of the Path an RRO to Resv messages. The processing mirrors that of the Path
messages. The only difference is that the RRO in a Resv message messages. The only difference is that the RRO in a Resv message
records the path information in the reverse direction. records the path information in the reverse direction.
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 Path messages and Resv no longer needs route recording. Subsequent Resv messages SHALL NOT
messages shall not contain an RRO. contain an RRO.
4.4.4. Loop Detection 4.4.4. 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.
skipping to change at page 35, line 10 skipping to change at page 35, line 24
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.4.5. 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 response 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.5. 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 (TBD); the value of the "Notify" error code Problem" error code is 24 (TBD); the value of the "Notify" error code
is 25 (TBD). is 25 (TBD).
The following defines error values for the Routing Problem Error The following defines error values for the Routing Problem Error
Code: Code:
skipping to change at page 36, line 30 skipping to change at page 37, line 14
4.6.1. Session Object 4.6.1. Session Object
Class = SESSION, C-Type = LSP_TUNNEL_IPv4 (7) Class = SESSION, C-Type = LSP_TUNNEL_IPv4 (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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extended Tunnel ID | | Extended Tunnel ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv4 tunnel end point address IPv4 tunnel end point address
IPv4 address of the egress node for the tunnel. IPv4 address of the egress node for the tunnel.
Tunnel ID Tunnel ID
skipping to change at page 37, line 22 skipping to change at page 37, line 45
4.6.2. Sender Template Object 4.6.2. Sender Template Object
Class = SENDER_TEMPLATE, C-Type = LSP_TUNNEL_IPv4 (7) Class = SENDER_TEMPLATE, C-Type = LSP_TUNNEL_IPv4 (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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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.3. Filter Specification Object 4.6.3. Filter Specification Object
Class = FILTER SPECIFICATION, C-Type = LSP_TUNNEL_IPv4 (7) Class = FILTER SPECIFICATION, C-Type = LSP_TUNNEL_IPv4 (7)
skipping to change at page 37, line 44 skipping to change at page 38, line 19
4.6.3. Filter Specification Object 4.6.3. Filter Specification Object
Class = FILTER SPECIFICATION, C-Type = LSP_TUNNEL_IPv4 (7) Class = FILTER SPECIFICATION, C-Type = LSP_TUNNEL_IPv4 (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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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.4. Reroute Procedure 4.6.4. Reroute 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
skipping to change at page 38, line 41 skipping to change at page 39, line 18
The egress node responds with a Resv message with an SE flow The egress node responds with a Resv message with an SE flow
descriptor formatted as: descriptor formatted as:
<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.7. Session Attribute Object
The format of the SESSION_ATTRIBUTE object is as follows: The format of the SESSION_ATTRIBUTE object is as follows:
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 |
skipping to change at page 40, line 27 skipping to change at page 40, line 48
be preempted by another session. be preempted by another session.
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.
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.
When a new reservation is considered for admission, the bandwidth When a new reservation 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. The bandwidth available at a
particular Setup Priority is the unused bandwidth plus the bandwidth particular Setup Priority is the unused bandwidth plus the bandwidth
reserved at all Holding Priorities lower than the Setup Priority. 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
skipping to change at page 41, line 11 skipping to change at page 41, line 33
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
(beginning with the lowest priority) can be pre-empted to free the (beginning with the lowest priority) can be pre-empted to free the
necessary bandwidth. necessary bandwidth.
When pre-emption is supported, each pre-empted reservation triggers a When pre-emption is supported, each pre-empted reservation triggers a
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 support of merging is OPTIONAL. A node may recognize the Merge
Flag but may be unable to perform the requested operation. In this Flag but may be unable to perform the requested operation. In this
case, the node should pass the information downstream unchanged. case, the node SHOULD pass the information downstream unchanged.
If a Path message contains multiple SESSION_ATTRIBUTE objects, only If a Path message contains multiple SESSION_ATTRIBUTE objects, only
the first SESSION_ATTRIBUTE object is meaningful. Subsequent the first SESSION_ATTRIBUTE object is meaningful. Subsequent
SESSION_ATTRIBUTE objects can be ignored and need not be forwarded. 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.
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.8. 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.
The same format is used both for SENDER_TSPEC object and FLOWSPEC The same format is used both for SENDER_TSPEC object and FLOWSPEC
objects. The formats are: objects. The formats are:
Class-of-Service SENDER_TSPEC object: Class = 12, C-Type = 3 (TBA) Class-of-Service SENDER_TSPEC object: Class = 12, C-Type = 3 (TBA)
Class-of-Service FLOWSPEC object: Class = 9, C-Type = 3 (TBA) Class-of-Service FLOWSPEC object: Class = 9, C-Type = 3 (TBA)
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 | CoS | Maximum Packet Size [M] | | Reserved | CoS | Maximum Packet Size [M] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Reserved Reserved
This field is reserved. It must be set to zero on transmission This field is reserved. It MUST be set to zero on transmission
and must be ignored on receipt. and MUST be ignored on receipt.
CoS CoS
Indicates the Class of Service (CoS) of the data traffic Indicates the Class of Service (CoS) of the data traffic
associated with the request. A value of zero (0) indicates associated with the request. A value of zero (0) indicates
that associated traffic is "Best-Effort". Specifically no that associated traffic is "Best-Effort". Specifically no
service assurances are being requested from the network. The service assurances are being requested from the network. The
intent is to enable networks to support the IP ToS Octet as intent is to enable networks to support the IP ToS Octet as
defined in RFC1349 [7]. It is noted that there is ongoing work defined in RFC1349 [7]. It is noted that there is ongoing work
within the IETF to update the use of the IP ToS Octet. In within the IETF to update the use of the IP ToS Octet. In
particular, RFC2474 [8], obsoletes RFC1349. However at this particular, RFC2474 [8], obsoletes RFC1349. However at this
time the new uses of this field (now termed the DS byte) are time the new uses of this field (now termed the DS byte) are
still being defined. Non-zero values have local significance. still being defined. Non-zero values have local significance.
The translation from a specific value to an allocation is a The translation from a specific value to an allocation is a
local administrative decision. local administrative decision.
M M
The maximum packet size parameter [M] should be set to the The maximum packet size parameter [M] SHOULD be set to the
value of the smallest path MTU. This parameter is set in Resv value of the smallest path MTU. This parameter is set in Resv
messages by the reliever based on information in arriving RSVP messages by the reliever based on information in arriving RSVP
ADSPEC objects. This parameter is ignored when the object is ADSPEC objects. This parameter is ignored when the object is
contained in Path messages. contained in Path messages.
There is no Adspec associated with the Class-of-Service SENDER_TSPEC. There is no Adspec associated with the Class-of-Service SENDER_TSPEC.
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. Security Considerations 5. Hello Extension
In principle these extensions to RSVP pose no security exposures over The RSVP Hello extension enables RSVP nodes to detect when a
neighboring node is not reachable. The mechanism provides node to
node failure detection. When such a failure is detected it is
handled much the same as a link layer communication failure. This
mechanism is intended to be used when notification of link layer
failures is not available and unnumber links are not used, or when
the failure detection mechanisms provided by the link layer are not
sufficient for timely node failure detection.
It should be noted that node failure detection is not the same as a
link failure detection mechanism, particularly in the case of
multiple parallel unnumbered links.
The Hello extension is specifically designed so that one side can use
the mechanism while the other side does not. Neighbor failure
detection may be initiated at any time. This includes when neighbors
first learn about each other, or just when neighbors are sharing Resv
or Path state.
The Hello extension is composed of a Hello message, a HELLO REQUEST
object and a HELLO ACK object. Hello processing between two
neighbors supports independent selection of, typically configured,
failure detection intervals. Each neighbor can autonomously issue
HELLO REQUEST objects. Each request is answered by an
acknowledgment. Hello Messages also contain enough information so
that one neighbor can suppress issuing hello requests and still
perform neighbor failure detection. A Hello message may be included
as a sub-message within a bundle message.
Neighbor failure detection is accomplished by collecting and storing
a neighbor's "instance" value. If a change in value is seen or if
the neighbor is not properly reporting the locally advertised value,
then the neighbor is presumed to have reset. When a neighbor's value
is seen to change or when communication is lost with a neighbor, then
the instance value advertised to that neighbor is also changed. The
HELLO objects provide a mechanism for polling for and providing an
instance value. A poll request also includes the sender's instance
value. This allows the receiver of a poll to optionally treat the
poll as an implicit poll response. This optional handling is an
optimization that can reduce the total number of polls and responses
processed by a pair of neighbors. In all cases, when both sides
support the optimization the result will be only one set of polls and
responses per failure detection interval. Depending on selected
intervals, the same benefit can occur even when only one neighbor
supports the optimization.
5.1. Hello Message Format
Hello Messages are always sent between two RSVP neighbors. The IP
source address is the IP address of the sending node. The IP
destination address is the IP address of the neighbor node.
The HELLO mechanism is intended for use between immediate neighbors.
When HELLO messages are being the exchanged between immediate
neighbors, the IP TTL field of all outgoing HELLO messages SHOULD be
set to 1.
The Hello message format is as follows:
<Hello Message> ::= <Common Header> [ <INTEGRITY> ]
<HELLO>
For Hello messages, the Msg Type field of the Common Header MUST be
set to 14 (Value to be assigned by IANA).
5.2. HELLO Object
HELLO Class = 22 (Value to be assigned by IANA of form 0bbbbbbb)
HELLO REQUEST object
Class = HELLO Class, C_Type = 1
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Src_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dst_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
HELLO ACK object
Class = HELLO Class, C_Type = 2
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Src_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dst_Instance |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Src_Instance: 32 bits
a 32 bit value that represents the sender's instance. The
advertiser maintains a per neighbor representation/value. This
value MUST change when the sender is reset, when the node
reboots, or when communication is lost to the neighboring node
and otherwise remains the same. This field MUST NOT be set to
zero (0).
Dst_Instance: 32 bits
The most recently received Src_Instance value received from the
neighbor. This field MUST be be set to zero (0) when no value
has ever been seen from the neighbor.
5.3. Hello Message Usage
A Hello message containing a HELLO REQUEST object MUST be generated
for each neighbor who's status is being tracked. When generating a
message containing a HELLO REQUEST object, the sender fills in the
Src_Instance field with a value representing it's per neighbor
instance. This value MUST NOT change while the agent is exchanging
Hellos with the corresponding neighbor. The sender also fills in the
Dst_Instance field with the Src_Instance value most recently received
from the neighbor. If no value has ever been received from the
neighbor, a value of zero (0) is used. The generation of a message
SHOULD be skipped when a HELLO REQUEST object was received from the
destination node within the failure detection interval.
On receipt of a message containing a HELLO REQUEST object, the
receiver MUST generate a Hello message containing a HELLO ACK object.
The receiver SHOULD also verify that the neighbor has not reset.
This is done by comparing the sender's Src_Instance field value with
the previously received value. If the value differs, than the
neighbor has reset. In this case the receiver SHOULD refresh all
Path and Resv state advertised to the neighbor. The receiver SHOULD
also verify that the neighbor is reflecting back the receiver's
Instance value. This is done by comparing the received Dst_Instance
field with the Src_Instance field value most recently transmitted to
that neighbor. If the neighbor continues to advertise a wrong non-
zero value after a configured number of intervals, then a node MUST
treat the neighbor as if communication has been lost. In this case,
the Src_Instance value advertised in the HELLO ACK object MUST be be
different from the previously advertised value. This new value MUST
continue to be advertised to the corresponding neighbor until a reset
or reboot occurs, or until another communication failure is detected.
On receipt of a message containing a HELLO ACK object, the receiver
MUST verify that the neighbor has not reset. This is done by
comparing the sender's Src_Instance field value with the previously
received value. If the value differs, than the neighbor has reset.
In this case the receiver SHOULD refresh all Path and Resv state
advertised to the neighbor. The receiver MUST also verify that the
neighbor is reflecting back the receiver's Instance value. If the
neighbor advertises a wrong value in the Dst_Instance field, then a
node MUST treat the neighbor as if communication has been lost.
If no Instance values are received, via either REQUEST or ACK
objects, from a neighbor within a configured number of failure
detection intervals, then a node MUST presume that it cannot
communicate with the neighbor. When this occurs, then a new HELLO
message MUST be immediately issued with a Src_Instance value
different then the one advertised in the previous HELLO message.
This new value MUST continue to be advertised to the corresponding
neighbor until a reset or reboot occurs, or until another
communication failure The receiver SHOULD also refresh all Path and
Resv state advertised to the neighbor.
5.4. Multi-Link Considerations
As previously noted, the Hello extension is targeted at detecting
node failures not per link failures. When there is only one link
between neighboring nodes or when all links between a pair of nodes
fail, the distinction between node and link failures is not really
meaningful and handling of such failures has already been covered.
When there are multiple links shared between neighbors, there are
special considerations. When the links between neighbors are
numbered, then Hellos MUST be run on each link and the previously
described mechanisms apply.
When the links are unnumbered, link failure detection MUST be
provided by some means other than Hellos. Each node SHOULD use a
single Hello exchange with the neighbor. When a node removes state
due to a link failure, the node MUST advertise the removal of the
state, via appropriate Tear messages, over a non-failed link. The
case where all links have failed, is the same as the no received
value case mentioned in the previous section.
5.5. Compatibility
The Hello extension is fully backwards compatible. The Hello class
is assigned a class value of the form 0bbbbbbb. Depending on the
implementation, implementations that do not support the extension
will either silently discard Hello messages or will respond with an
"Unknown Object Class" error. In either case the sender will fail to
see an acknowledgment for the issued Hello.
6. Security Considerations
In principle these extentions 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 a RSVP path message with a SESSION object of type LSP_TUNNEL_IPv4
(7). In such a case an implementation MAY generate a Path_Err (7). In such a case an implementation MAY generate a Path_Err
message with an error code of 02, "Policy Control failure". message with an error code of 02, "Policy Control failure".
6. Intellectual Property Considerations 7. Intellectual Property Considerations
The IETF has been notified of intellectual property rights claimed in The IETF has been notified of intellectual property rights claimed in
regard to some or all of the specification contained in this regard to some or all of the specification contained in this
document. For more information consult the online list of claimed document. For more information consult the online list of claimed
rights. rights.
7. Acknowledgments 8. Acknowledgments
This document contains ideas as well as text that have appeared in This document contains ideas as well as text that have appeared in
previous Internet Drafts. The authors of the current draft wish to previous Internet Drafts. The authors of the current draft wish to
thank the authors of those drafts. They are Steven Blake, Bruce thank the authors of those drafts. They are Steven Blake, Bruce
Davie, Roch Guerin, Sanjay Kamat, Yakov Rekhter, Eric Rosen, and Arun Davie, Roch Guerin, Sanjay Kamat, Yakov Rekhter, Eric Rosen, and Arun
Viswanathan. We also wish to thank Bora Akyol, Yoram Bernet and Alex Viswanathan. We also wish to thank Bora Akyol, Yoram Bernet and Alex
Mondrus for their comments on this draft. Mondrus for their comments on this draft.
8. References 9. References
[1] Braden, R. et al., "Resource ReSerVation Protocol (RSVP) -- [1] Braden, R. et al., "Resource ReSerVation Protocol (RSVP) --
Version 1, Functional Specification", RFC 2205, September 1997. Version 1, Functional Specification", RFC 2205, September 1997.
[2] Rosen, E. et al., "Multiprotocol Label Switching Architeture", [2] Rosen, E. et al., "Multiprotocol Label Switching Architeture",
Internet Draft, draft-ietf-mpls-arch-04.txt, February 1999. Internet Draft, draft-ietf-mpls-arch-04.txt, February 1999.
[3] Awduche, D. et al., "Requirements for Traffic Engineering over [3] Awduche, D. et al., "Requirements for Traffic Engineering over
MPLS", MPLS",
Internet Draft, draft-ietf-mpls-traffic-eng-00.txt, October 1998. Internet Draft, draft-ietf-mpls-traffic-eng-00.txt, October 1998.
skipping to change at page 45, line 5 skipping to change at page 49, line 9
[6] Bradner, S., "Key words for use in RFCs to Indicate Requirement [6] Bradner, S., "Key words for use in RFCs to Indicate Requirement
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 Field [8] Nichols, K. et al., "Definition of the Differentiated Services Field
(DS Field) in the IPv4 and IPv6 Headers", RFC 2474, December 1998. (DS Field) in the IPv4 and IPv6 Headers", RFC 2474, December 1998.
9. Authors' Addresses 10. 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
LabN Consulting LabN Consulting
 End of changes. 

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