summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc2209.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc2209.txt')
-rw-r--r--doc/rfc/rfc2209.txt1403
1 files changed, 1403 insertions, 0 deletions
diff --git a/doc/rfc/rfc2209.txt b/doc/rfc/rfc2209.txt
new file mode 100644
index 0000000..20d495c
--- /dev/null
+++ b/doc/rfc/rfc2209.txt
@@ -0,0 +1,1403 @@
+
+
+
+
+
+
+Network Working Group R. Braden
+Request For Comments: 2209 ISI
+Category: Informational L. Zhang
+ UCLA
+ September 1997
+
+ Resource ReSerVation Protocol (RSVP) --
+ Version 1 Message Processing Rules
+
+Status of this Memo
+
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Abstract
+
+ This memo contains an algorithmic description of the rules used by an
+ RSVP implementation for processing messages. It is intended to
+ clarify the version 1 RSVP protocol specification.
+
+ This memo provides a generic description of the rules for the
+ operation of Version 1 of RSVP [RFC 2205]. It is intended to outline
+ a set of algorithms that will accomplish the needed function,
+ omitting many details.
+
+1. GENERIC DATA STRUCTURES
+
+ This memo assumes the generic interface calls defined in [RFC 2005]
+ and the following data structures. An actual implementation may use
+ additional or different data structures and interfaces. The data
+ structure fields that are shown are required unless they are
+ explicitly labelled as optional.
+
+ o PSB -- Path State Block
+
+ Each PSB holds path state for a particular (session, sender)
+ pair, defined by SESSION and SENDER_TEMPLATE objects,
+ respectively, received in a PATH message.
+
+
+
+
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 1]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ PSB contents include the following values from a PATH message:
+
+ - Session
+
+ - Sender_Template
+
+ - Sender_Tspec
+
+ - The previous hop IP address and the Logical Interface
+ Handle (LIH) from a PHOP object
+
+ - The remaining IP TTL
+
+ - POLICY_DATA and/or ADSPEC objects (optional)
+
+ - Non_RSVP flag
+
+ - E_Police flag
+
+ - Local_Only flag
+
+ In addition, the PSB contains the following information provided
+ by routing: OutInterface_list, which is the list of outgoing
+ interfaces for this (sender, destination), and IncInterface,
+ which is the expected incoming interface. For a unicast
+ destination, OutInterface_list contains one entry and
+ IncInterface is undefined.
+
+ Note that there may be more than one PSB for the same (session,
+ sender) pair but different incoming interfaces. At most one of
+ these, which will have the Local_Only flag off, will be the PSB
+ used for forwarding PATH messages downstream; we will refer to
+ it as the "forwarding PSB" in the following. The other PSB's
+ will have the Local_Only flag on and an empty
+ OutInterface_list.h The Local_Only flag is needed to correctly
+ match PSB's against RSB's, by the rules of [RFC 2205].
+
+ o RSB -- Reservation State Block
+
+ Each RSB holds a reservation request that arrived in a
+ particular RESV message, corresponding to the triple: (session,
+ next hop, Filter_spec_list). Here "Filter_spec_list" may be a
+ list of FILTER_SPECs (for SE style), a single FILTER_SPEC (FF
+ style), or empty (WF style). We define the virtual object type
+ "FILTER_SPEC*" for such a data structure.
+
+
+
+
+
+
+Braden & Zhang Informational [Page 2]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ RSB contents include:
+
+ - Session specification
+
+ - Next hop IP address
+
+ - Filter_spec_list
+
+ - The outgoing (logical) interface OI on which the
+ reservation is to be made or has been made.
+
+ - Style
+
+ - Flowspec
+
+ - A SCOPE object (optional, depending upon style)
+
+ - RESV_CONFIRM object that was received (optional)
+
+ o TCSB -- Traffic Control State Block
+
+ Each TCSB holds the reservation specification that has been
+ handed to traffic control for a specific outgoing interface. In
+ general, TCSB information is derived from RSB's for the same
+ outgoing interface. Each TCSB defines a single reservation for
+ a particular triple: (session, OI, Filter_spec_list). TCSB
+ contents include:
+
+ - Session
+
+ - OI (Outgoing Interface)
+
+ - Filter_spec_list
+
+ - TC_Flowspec, the effective flowspec, i.e., the LUB over the
+ corresponding FLOWSPEC values from matching RSB's.
+ TC_Flowspec is passed to traffic control to make the actual
+ reservation.
+
+ - Fwd_Flowspec, the updated object to be forwarded
+ after merging.
+
+ - TC_Tspec, equal to Path_Te, the effective sender Tspec.
+
+ - Police Flags
+
+ The flags are E_Police_Flag, M_Police_Flag, and
+ B_Police_Flag.
+
+
+
+Braden & Zhang Informational [Page 3]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ - Rhandle, F_Handle_list
+
+ Handles returned by the traffic control interface,
+ corresponding to a flowspec and perhaps a list of filter
+ specs.
+
+ - A RESV_CONFIRM object to be forwarded.
+
+ o BSB -- Blockade State Block
+
+ Each BSB contains an element of blockade state. Depending upon
+ the reservation style in use, the BSB's may be per (session,
+ sender_template) pair or per (session, PHOP) pair. In practice,
+ an implementation might embed a BSB within a PSB; however, for
+ clarity we describe BSB's independently.
+
+ The contents of a BSB include:
+
+ - Session
+
+ - Sender_Template (which is also a filter spec)
+
+ - PHOP
+
+ - FLOWSPEC Qb
+
+ - Blockade timer Tb
+
+ The following Boolean Flag variables are used in this section:
+ Path_Refresh_Needed, Resv_Refresh_Needed, Tear_Needed,
+ Need_Scope, B_Merge, and NeworMod. Refresh_PHOP_list is a
+ variable-length list of PHOPs to be refreshed.
+
+2. PROCESSING RULES
+
+ MESSAGE ARRIVES
+
+ Verify version number and RSVP checksum, and discard message if any
+ mismatch is found.
+
+ If the message type is not PATH or PTEAR or RACK and if the IP
+ destination address does not match any of the addresses of the local
+ interfaces, then forward the message to IP destination address and
+ return.
+
+ Parse the sequence of objects in the message. If any required
+ objects are missing or the length field of the common header does not
+ match an object boundary, discard the message and return.
+
+
+
+Braden & Zhang Informational [Page 4]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ Verify the INTEGRITY object, if any. If the check fails, discard the
+ message and return.
+
+ Verify the consistent use of port fields. If the DstPort in the
+ SESSION object is zero but the SrcPort in a SENDER_TEMPLATE or
+ FILTER_SPEC object is non-zero, then the message has a "conflicting
+ source port" error; silently discard the message and return.
+
+ Processing of POLICY_DATA objects will be specified in the future.
+
+ Further processing depends upon message type.
+
+ PATH MESSAGE ARRIVES
+
+ Assume the PATH message arrives on interface InIf.
+
+ Process the sender descriptor object sequence in the message as
+ follows. The Path_Refresh_Needed and Resv_Refresh_Needed flags are
+ initially off.
+
+ o Search for a path state block (PSB) whose (session,
+ sender_template) pair matches the corresponding objects in the
+ message, and whose IncInterface matches InIf.
+
+ During this search:
+
+ 1. If a PSB is found whose session matches the
+ DestAddress and Protocol Id fields of the received
+ SESSION object, but the DstPorts differ and one is
+ zero, then build and send a "Conflicting Dst Port"
+ PERR message, drop the PATH message, and return.
+
+ 2. If a PSB is found with a matching sender host but the
+ Src Ports differ and one of the SrcPorts is zero, then
+ build and send an "Ambiguous Path" PERR message, drop
+ the PATH message, and return.
+
+ 3. If a forwarding PSB is found, i.e., a PSB that matches
+ the (session, sender_template) pair and whose
+ Local_Only flag is off, save a pointer to it in the
+ variable fPSB. If none is found, set fPSB to NULL.
+
+ o If there was no matching PSB, then:
+
+ 1. Create a new PSB.
+
+ 2. Copy contents of the SESSION, SENDER_TEMPLATE,
+ SENDER_TSPEC, and PHOP (IP address and LIH) objects
+
+
+
+Braden & Zhang Informational [Page 5]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ into the PSB.
+
+ 3. If the sender is from the local API, set
+ OutInterface_List to the single interface whose
+ address matches the sender address, and make
+ IncInterface undefined. Otherwise, turn on the
+ Local_Only flag.
+
+ 4. Turn on the Path_Refresh_Needed flag.
+
+ o Otherwise (there is a matching PSB):
+
+ - If the PHOP IP address, the LIH, or Sender_Tspec
+ differs between the message and the PSB, copy the new
+ value into the PSB and turn on the Path_Refresh_Needed
+ flag. If the PHOP IP address or the LIH differ, also
+ turn on the Resv_Refresh_Needed flag.
+
+ o Call the resulting PSB the "current PSB" (cPSB). Update
+ the cPSB, as follows:
+
+ - Start or Restart the cleanup timer for the PSB.
+
+ - If the message contains an ADSPEC object, copy it into
+ the PSB.
+
+ - Copy E_Police flag from SESSION object into PSB.
+
+ - Store the received TTL into the PSB.
+ If the received TTL differs from Send_TTL in the RSVP
+ common header, set the Non_RSVP flag on in the PSB.
+
+ o If the PSB is new or if there is no route change
+ notification in place, then perform the following routing
+ manipulations, but not if the cPSB is from the local API.
+
+ 1. Invoke the appropriate Route_Query routine using
+ DestAddress from SESSION and (for multicast routing)
+ SrcAddress from Sender_Template.
+
+ Call the results (Rt_OutL, Rt_InIf).
+
+ 2. If the destination is multicast and Rt_InIf differs
+ from IncInterface in the cPSB, but fPSB points to the
+ cPSB, then do the following.
+
+ - Turn on the Local_Only flag and clear the
+ OutInterface_list of the fPSB. Set the fPSB
+
+
+
+Braden & Zhang Informational [Page 6]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ pointer to NULL.
+
+ - Search for a PSB for the same (session,
+ sender_template) pair whose IncInterface matches
+ Rt_InIf. If one is found, set fPSB to point to
+ it.
+
+ 3. If the destination is multicast and Rt_InIf is the
+ same as IncInterface in the cPSB, but fPSB does not
+ point to the cPSB, then do the following.
+
+ - Copy into the cPSB the OutInterface_list from the
+ PSB, if any, pointed to by fPSB. Clear
+ OutInterface_list and turn on the Local_Only flag
+ in the PSB pointed to by fPSB, if any.
+
+ - Turn off the Local_Only flag in the cPSB and set
+ fPSB to point to cPSB.
+
+ 4. If Rt_OutL differs from OutInterface_list of the PSB
+ pointed to by fPSB, then:
+
+ - Update the OutInterface_list of the PSB from
+ Rt_OutL, and then execute the PATH LOCAL REPAIR
+ event sequence below.
+
+ o If the Path_Refresh_Needed flag is now off, drop the PATH
+ message and return.
+
+ Otherwise (the path state is new or modified), do
+ refreshes, upcalls, and state updates as follows.
+
+ 1. If this PATH message came from a network interface and
+ not from a local application, make a Path Event upcall
+ for each local application for this session:
+
+ Call: <Upcall_Proc>( session-id, PATH_EVENT,
+ flags, sender_tspec, sender_template
+ [ , ADSPEC] [ , POLICY_DATA] )
+
+ 2. If OutInterface_list is not empty, execute the PATH
+ REFRESH event sequence (below) for the sender defined
+ by the PSB.
+
+ 3. Search for any matching reservation state, i.e., an
+ RSB whose Filter_spec_list includes a FILTER_SPEC
+ matching the SENDER_TEMPLATE and whose OI appears in
+ the OutInterface_list, and make this the `active RSB'.
+
+
+
+Braden & Zhang Informational [Page 7]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ If none is found, drop the PATH message and return.
+
+ 4. Execute the RESV REFRESH sequence (below) for the PHOP
+ in the PSB.
+
+ 5. Execute the event sequence UPDATE TRAFFIC CONTROL to
+ update the local traffic control state if necessary.
+ This sequence will turn on the Resv_Refresh_Needed
+ flag if the traffic control state has been modified in
+ a manner that should trigger a reservation refresh.
+ If so, execute the RESV REFRESH sequence for the PHOP
+ in the PSB.
+
+ o Drop the PATH message and return.
+
+ PTEAR MESSAGE ARRIVES
+
+ o Search for a PSB whose (Session, Sender_Template) pair
+ matches the corresponding objects in the message. If no
+ matching PSB is found, drop the PTEAR message and return.
+
+ o Forward a copy of the PTEAR message to each outgoing
+ interface listed in OutInterface_list of the PSB.
+
+ o Find each RSB that matches this PSB, i.e., whose
+ Filter_spec_list matches Sender_Template in the PSB and
+ whose OI is included in OutInterface_list.
+
+ 1. If the RSB style is explicit, then:
+ - Delete from Filter_spec_list the FILTER_SPEC that
+ matches the PSB.
+
+ - if Filter_spec_list is now empty, delete the RSB.
+
+ 2. Otherwise (RSB style is wildcard) then:
+
+ - If this RSB matches no other PSB, then delete the
+ RSB.
+
+ 3. If an RSB was found, execute the event sequence UPDATE
+ TRAFFIC CONTROL (below) to update the traffic control
+ state to be consistent with the current reservation
+ and path state.
+
+ o Delete the PSB.
+
+ o Drop the PTEAR message and return.
+
+
+
+
+Braden & Zhang Informational [Page 8]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ PERR MESSAGE ARRIVES
+
+ o Search for a PSB whose (SESSION, SENDER_TEMPLATE) pair
+ matches the corresponding objects in the message. If no
+ matching PSB is found, drop the PERR message and return.
+
+ o If the previous hop address in the PSB is the local API,
+ make an error upcall to the application:
+
+ Call: <Upcall_Proc>( session-id, PATH_ERROR,
+ Error_code, Error_value, Node_Addr,
+ Sender_Template [ , Policy_Data] )
+
+ Any SENDER_TSPEC or ADSPEC object in the message is
+ ignored.
+
+ Otherwise, send a copy of the PERR message to the PHOP IP
+ address.
+
+ o Drop the PERR message and return.
+
+ RESV MESSAGE ARRIVES
+
+ Initially, Refresh_PHOP_list is empty and the
+ Resv_Refresh_Needed and NeworMod flags are off. These variables
+ are used to control immediate reservation refreshes.
+
+ o Determine the Outgoing Interface OI
+
+ The logical outgoing interface OI is taken from the LIH in
+ the NHOP object. (If the physical interface is not implied
+ by the LIH, it can be learned from the interface matching
+ the IP destination address).
+
+ o Check the path state
+
+ 1. If there are no existing PSB's for SESSION then build
+ and send a RERR message (as described later)
+ specifying "No path information", drop the RESV
+ message, and return.
+
+ 2. If a PSB is found with a matching sender host but the
+ SrcPorts differ and one of the SrcPorts is zero, then
+ build and send an "Ambiguous Path" PERR message, drop
+ the RESV message, and return.
+
+
+
+
+
+
+Braden & Zhang Informational [Page 9]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ o Check for incompatible styles.
+
+ If any existing RSB for the session has a style that is
+ incompatible with the style of the message, build and send
+ a RERR message specifying "Conflicting Style", drop the
+ RESV message, and return.
+
+ Process the flow descriptor list to make reservations, as
+ follows, depending upon the style. The following uses a filter
+ spec list struct Filtss of type FILTER_SPEC* (defined earlier).
+
+ For FF style: execute the following steps independently for each
+ flow descriptor in the message, i.e., for each (FLOWSPEC,
+ Filtss) pair. Here the structure Filtss consists of the
+ FILTER_SPEC from the flow descriptor.
+
+ For SE style, execute the following steps once for (FLOWSPEC,
+ Filtss), with Filtss consisting of the list of FILTER_SPEC
+ objects from the flow descriptor.
+
+ For WF style, execute the following steps once for (FLOWSPEC,
+ Filtss), with Filtss an empty list.
+
+ o Check the path state, as follows.
+
+ 1. Locate the set of PSBs (senders) that route to OI and
+ whose SENDER_TEMPLATEs match a FILTER_SPEC in Filtss.
+
+ If this set is empty, build and send an error message
+ specifying "No sender information", and continue with
+ the next flow descriptor in the RESV message.
+
+ 2. If the style has explicit sender selection (e.g., FF
+ or SE) and if any FILTER_SPEC included in Filtss
+ matches more than one PSB, build and send a RERR
+ message specifying "Ambiguous filter spec" and
+ continue with the next flow descriptor in the RESV
+ message.
+
+ 3. If the style is SE and if some FILTER_SPEC included in
+ Filtss matches no PSB, delete that FILTER_SPEC from
+ Filtss.
+
+ 4. Add the PHOP from the PSB to Refresh_PHOP_list, if the
+ PHOP is not already on the list.
+
+
+
+
+
+
+Braden & Zhang Informational [Page 10]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ o Find or create a reservation state block (RSB) for
+ (SESSION, NHOP). If the style is distinct, Filtss is also
+ used in the selection. Call this the "active RSB".
+
+ o If the active RSB is new:
+
+ 1. Set the session, NHOP, OI and style of the RSB from
+ the message.
+
+ 2. Copy Filtss into the Filter_spec_list of the RSB.
+
+ 3. Copy the FLOWSPEC and any SCOPE object from the
+ message into the RSB.
+
+ 4. Set NeworMod flag on.
+
+ o If the active RSB is not new, check whether Filtss from the
+ message contains FILTER_SPECs that are not in the RSB; if
+ so, add the new FILTER_SPECs and turn on the NeworMod flag.
+
+ o Start or restart the cleanup timer on the active RSB, or,
+ in the case of SE style, on each FILTER_SPEC of the RSB
+ that also appears in Filtss.
+
+ o If the active RSB is not new, check whether STYLE, FLOWSPEC
+ or SCOPE objects have changed; if so, copy changed object
+ into RSB and turn on the NeworMod flag.
+
+ o If the message contained a RESV_CONFIRM object, copy it
+ into the RSB and turn on NeworMod flag.
+
+ o If the NeworMod flag is off, continue with the next flow
+ descriptor in the RESV message, if any.
+
+ o Otherwise (the NeworMod flag is on, i.e., the active RSB is
+ new or modified), execute the UPDATE TRAFFIC CONTROL event
+ sequence (below). If the result is to modify the traffic
+ control state, this sequence will turn on the
+ Resv_Refresh_Needed flag and make a RESV_EVENT upcall to
+ any local application.
+
+ If the UPDATE TRAFFIC CONTROL sequence fails with an error,
+ then delete a new RSB but restore the original reservation
+ in an old RSB.
+
+ o Continue with the next flow descriptor.
+
+
+
+
+
+Braden & Zhang Informational [Page 11]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ o When all flow descriptors have been processed, check the
+ Resv_Refresh_Needed flag. If it is now on, execute the
+ RESV REFRESH sequence (below) for each PHOP in
+ Refresh_PHOP_list.
+
+ o Drop the RESV message and return.
+
+ If processing a RESV message finds an error, a RERR message
+ is created containing flow descriptor and an ERRORS object.
+ The Error Node field of the ERRORS object is set to the IP
+ address of OI, and the message is sent unicast to NHOP.
+
+ RTEAR MESSAGE ARRIVES
+
+ Processing of a RTEAR message roughly parallels the processing
+ of the corresponding RESV message
+
+ A RTEAR message arrives with an IP destination address matching
+ outgoing interface OI. Flag Resv_Refresh_Needed is initially
+ off and Refresh_PHOP_list is empty.
+
+ o Determine the Outgoing Interface OI
+
+ The logical outgoing interface OI is taken from the LIH in
+ the NHOP object. (If the physical interface is not implied
+ by the LIH, it can be learned from the interface matching
+ the IP destination address).
+
+ o Process the flow descriptor list in the RTEAR message to
+ tear down local reservation state, as follows, depending
+ upon the style. The following uses a filter spec list
+ struct Filtss of type FILTER_SPEC* (defined earlier).
+
+ For FF style: execute the following steps independently for
+ each flow descriptor in the message, i.e., for each
+ (FLOWSPEC, Filtss) pair. Here the structure Filtss
+ consists of the FILTER_SPEC from the flow descriptor.
+
+ For SE style, execute the following steps once for
+ (FLOWSPEC, Filtss), with Filtss consisting of the list of
+ FILTER_SPEC objects from the flow descriptor.
+
+ For WF style, execute the following steps once for
+ (FLOWSPEC, Filtss), with Filtss an empty list.
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 12]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 1. Find an RSB matching (SESSION, NHOP). If the style is
+ distinct, Filtss is also used in the selection. Call
+ this the "active RSB". If no active RSB is found,
+ continue with next flow descriptor.
+
+ 2. Check the style
+
+ If the active RSB has a style that is incompatible
+ with the style of the message, drop the RTEAR message
+ and return.
+
+ 3. Delete from the active RSB each FILTER_SPEC that
+ matches a FILTER_SPEC in Filtss.
+
+ 4. If all FILTER_SPECs have now been deleted from the
+ active RSB, delete the active RSB.
+
+ 5. Execute the UPDATE TRAFFIC CONTROL event sequence
+ (below) to update the traffic control state to be
+ consistent with the reservation state. If the result
+ is to modify the traffic control state, the
+ Resv_Refresh_Needed flag will be turned on and a
+ RESV_EVENT upcall will be made to any local
+ application.
+
+ 6. Continue with the next flow descriptor.
+
+ o All flow descriptors have been processed.
+
+ Build and send any RTEAR messages to be forwarded, in the
+ following manner.
+
+ 1. Select each PSB that routes to the outgoing interface
+ OI, and, for distinct style, that has a
+ SENDER_TEMPLATE matching Filtss.
+
+ 2. Select a flow descriptor (Qj,Fj) (where Fj may be a
+ list) in the RTEAR message whose FILTER_SPEC matches
+ the SENDER_TEMPLATE in the PSB. If not match is
+ found, return for next PSB.
+
+ - Search for an RSB (for any outgoing interface) to
+ which the PSB routes and whose Filter_spec_list
+ includes the SENDER_TEMPLATE from the PSB.
+
+ - If an RSB is found, add the PHOP of the PSB to
+ the Refresh_PHOP_list.
+
+
+
+
+Braden & Zhang Informational [Page 13]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ - Otherwise (no RSB is found), add the flow
+ descriptor (Qj,Fj) to the new RTEAR message being
+ built, in a manner appropriate to the style.
+
+ - Continue with the next PSB.
+
+ 3. If the next PSB is for a different PHOP or the last
+ PSB has been processed, forward any RTEAR message that
+ has been built.
+
+ o If any PSB's were found in the preceding step, and if the
+ Resv_Refresh_Needed flag is now on, execute the RESV
+ REFRESH sequence (below) for each PHOP in
+ Refresh_PHOP_list.
+
+ o Drop the RTEAR message and return.
+
+ RERR MESSAGE ARRIVES
+
+ A RERR message arrives through the (real) incoming interface
+ In_If.
+
+ o If there is no path state for SESSION, drop the RERR
+ message and return.
+
+ o If the Error Code = 01 (Admission Control failure), do
+ special processing as follows:
+
+ 1. Find or create a Blockade State Block (BSB), in the
+ following style-dependent manner.
+
+ For WF (wildcard) style, there will be one BSB per
+ (session, PHOP) pair.
+
+ For FF style, there will be one BSB per (session,
+ filter_spec) pair. Note that an FF style RERR message
+ carries only one flow descriptor.
+
+ For SE style, there will be one BSB per (session,
+ filter_spec), for each filter_spec contained in the
+ filter spec list of the flow descriptor.
+
+ 2. For each BSB in the preceding step, set (or replace)
+ its FLOWSPEC Qb with FLOWSPEC from the message, and
+ set (or reset) its timer Tb to Kb*R seconds. If the
+ BSB is new, set its PHOP value, and set its
+ Sender_Template equal to the appropriate filter_spec
+ from the message.
+
+
+
+Braden & Zhang Informational [Page 14]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 3. Execute the RESV REFRESH event sequence (shown below)
+ for the previous hop PHOP, but only with the B_Merge
+ flag off. That is, if processing in the RESV REFRESH
+ sequence reaches the point of turning the B_Merge flag
+ on (because all matching reservations are blockaded),
+ do not turn it on but instead exit the REFRESH
+ sequence and return here.
+
+ o Execute the following for each RSB for this session whose
+ OI differs from In_If and whose Filter_spec_list has at
+ least one filter spec in common with the FILTER_SPEC* in
+ the RERR message. For WF style, empty FILTER_SPEC*
+ structures are assumed to match.
+
+ 1. If Error_Code = 01 and the InPlace flag in the
+ ERROR_SPEC is 1 and one or more of the BSB's
+ found/created above has a Qb that is strictly greater
+ than Flowspec in the RSB, then continue with the next
+ matching RSB, if any.
+
+ 2. If NHOP in the RSB is the local API, then:
+
+ - If the FLOWSPEC in the RERR message is strictly
+ greater than the RSB Flowspec, then turn on the
+ NotGuilty flag in the ERROR_SPEC.
+
+ - Deliver an error upcall to application:
+
+ Call: <Upcall_Proc>( session-id, RESV_ERROR,
+ Error_code, Error_value,
+ Node_Addr, Error_flags,
+ Flowspec, Filter_Spec_List
+ [ , Policy_data] )
+
+ and continue with the next RSB.
+
+ 3. If the style has wildcard sender selection, use the
+ SCOPE object SC.In from the RERR message to construct
+ a SCOPE object SC.Out to be forwarded. SC.Out should
+ contain those sender addresses that appeared in SC.In
+ and that route to OI, as determined by scanning the
+ PSB's. If SC.Out is empty, continue with the next
+ RSB.
+
+ 4. Create a new RERR message containing the error flow
+ descriptor and send to the NHOP address specified by
+ the RSB. Include SC.Out if the style has wildcard
+ sender selection.
+
+
+
+Braden & Zhang Informational [Page 15]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 5. Continue with the next RSB.
+
+ o Drop the RERR message and return.
+
+ RESV CONFIRM ARRIVES
+
+ o If the (unicast) IP address found in the RESV_CONFIRM
+ object in the RACK message matches an interface of the
+ node, a confirmation upcall is made to the matching
+ application:
+
+ Call: <Upcall_Proc>( session-id, RESV_CONFIRM,
+ Error_code, Error_value, Node_Addr,
+ LUB-Used, nlist, Flowspec,
+ Filter_Spec_List, NULL, NULL )
+
+ o Otherwise, forward the RACK message to the IP address in
+ its RESV_CONFIRM object.
+
+ Drop the RACK message and return.
+
+ UPDATE TRAFFIC CONTROL
+
+ The sequence is invoked by many of the message arrival sequences
+ to set or adjust the local traffic control state in accordance
+ with the current reservation and path state. An implicit
+ parameter of this sequence is the `active' RSB.
+
+ If the result is to modify the traffic control state, this
+ sequence notifies any matching local applications with a
+ RESV_EVENT upcall. If the state change is such that it should
+ trigger immediate RESV refresh messages, it also turns on the
+ Resv_Refresh_Needed flag.
+
+ o Compute the traffic control parameters using the following
+ steps.
+
+ 1. Initially the local flag Is_Biggest is off.
+
+ 2. Consider the set of RSB's matching SESSION and OI from
+ the active RSB. If the style of the active RSB is
+ distinct, then the Filter_spec_list must also be
+ matched.
+
+ - Compute the effective kernel flowspec,
+ TC_Flowspec, as the LUB of the FLOWSPEC values in
+ these RSB's.
+
+
+
+
+Braden & Zhang Informational [Page 16]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ - Compute the effective traffic control filter spec
+ (list) TC_Filter_Spec* as the union of the
+ Filter_spec_lists from these RSB's.
+
+ - If the active RSB has a FLOWSPEC larger than all
+ the others, turn on the Is_Biggest flag.
+
+ 3. Scan all RSB's matching session and Filtss, for all
+ OI. Set TC_B_Police_flag on if TC_Flowspec is smaller
+ than, or incomparable to, any FLOWSPEC in those RSB's.
+
+ 4. Locate the set of PSBs (senders) whose
+ SENDER_TEMPLATEs match Filter_spec_list in the active
+ RSB and whose OutInterface_list includes OI.
+
+ 5. Set TC_E_Police_flag on if any of these PSBs have
+ their E_Police flag on. Set TC_M_Police_flag on if it
+ is a shared style and there is more than one PSB in
+ the set.
+
+ 6. Compute Path_Te as the sum of the SENDER_TSPEC objects
+ in this set of PSBs.
+
+ o Search for a TCSB matching SESSION and OI; for distinct
+ style (FF), it must also match Filter_spec_list.
+
+ If none is found, create a new TCSB.
+
+ o If TCSB is new:
+
+ 1. Store TC_Flowspec, TC_Filter_Spec*, Path_Te, and the
+ police flags into TCSB.
+
+ 2. Turn the Resv_Refresh_Needed flag on and make the
+ traffic control call:
+
+ TC_AddFlowspec( OI, TC_Flowspec,
+ Path_Te, police_flags)
+ -> Rhandle, Fwd_Flowspec
+
+ 3. If this call fails, build and send a RERR message
+ specifying "Admission control failed" and with the
+ InPlace flag off. Delete the TCSB, delete any
+ RESV_CONFIRM object from the active RSB, and return.
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 17]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 4. Otherwise (call succeeds), record Rhandle and
+ Fwd_Flowspec in the TCSB. For each filter_spec F in
+ TC_Filter_Spec*, call:
+
+ TC_AddFilter( OI, Rhandle, Session, F)
+ -> Fhandle
+
+ and record the returned Fhandle in the TCSB.
+
+ o Otherwise, if TCSB is not new but no effective kernel
+ flowspec TC_Flowspec was computed earlier, then:
+
+ 1. Turn on the Resv_Refresh_Needed flag.
+
+ 2. Call traffic control to delete the reservation:
+
+ TC_DelFlowspec( OI, Rhandle )
+
+ 3. Delete the TCSB and return.
+
+ o Otherwise, if TCSB is not new but the TC_Flowspec, Path_Te,
+ and/or police flags just computed differ from corresponding
+ values in the TCSB, then:
+
+ 1. If the TC_Flowspec and/or Path_Te values differ, turn
+ the Resv_Refresh_Needed flag on.
+
+ 2. Call traffic control to modify the reservation:
+
+ TC_ModFlowspec( OI, Rhandle, TC_Flowspec,
+ Path_Te, police_flags )
+ -> Fwd_Flowspec
+
+ 3. If this call fails, build and send a RERR message
+ specifying "Admission control failed" and with the
+ InPlace bit on. Delete any RESV_CONFIRM object from
+ the active RSB and return.
+
+ 4. Otherwise (the call succeeds), update the TCSB with
+ the new values and save Fwd_Flowspec in the TCSB.
+
+ o If the TCSB is not new but the TC_Filter_Spec* just
+ computed differs from the FILTER_SPEC* in the TCSB, then:
+
+ 1. Make an appropriate set of TC_DelFilter and
+ TC_AddFilter calls to transform the Filter_spec_list
+ in the TCSB into the new TC_Filter_Spec*.
+
+
+
+
+Braden & Zhang Informational [Page 18]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 2. Turn on the Resv_Refresh_Needed flag.
+
+ o If the active RSB contains a RESV_CONFIRM object, then:
+
+ 1. If the Is_Biggest flag is on, move the RESV_CONFIRM
+ object into the TCSB and turn on the
+ Resv_Refresh_Needed flag. (This will later cause the
+ RESV REFRESH sequence to be invoked, which will either
+ forward or return the RESV_CONFIRM object, deleting it
+ from the TCSB in either case).
+
+ 2. Otherwise, create and send a RACK message to the
+ address in the RESV_CONFIRM object. Include the
+ RESV_CONFIRM object in the RACK message. The RACK
+ message should also include an ERROR_SPEC object whose
+ Error_Node parameter is IP address of OI from the TCSB
+ and that specifies "No Error".
+
+ o If the Resv_Refresh_Needed flag is on and the RSB is not
+ from the API, make a RESV_EVENT upcall to any matching
+ application:
+
+ Call: <Upcall_Proc>( session-id, RESV_EVENT,
+ style, Flowspec, Filter_spec_list [ ,
+ POLICY_DATA] )
+
+ where Flowspec and Filter_spec_list come from the TCSB and
+ the style comes from the active RSB.
+
+ o Return to the event sequence that invoked this one.
+
+ PATH REFRESH
+
+ This sequence sends a path refresh for a particular sender,
+ i.e., a PSB. This sequence may be entered by either the
+ expiration of a refresh timer or directly as the result of the
+ Path_Refresh_Needed flag being turned on during the processing
+ of a received PATH message.
+
+ o Insert TIME_VALUES object into the PATH message being
+ built. Compute the IP TTL for the PATH message as one less
+ than the TTL value received in the message. However, if
+ the result is zero, return without sending the PATH
+ message.
+
+ o Create a sender descriptor containing the SENDER_TEMPLATE,
+ SENDER_TSPEC, and POLICY_DATA objects, if present in the
+ PSB, and pack it into the PATH message being built.
+
+
+
+Braden & Zhang Informational [Page 19]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ o Send a copy of the PATH message to each interface OI in
+ OutInterface_list. Before sending each copy:
+
+ 1. If the PSB has the E_Police flag on and if interface
+ OI is not capable of policing, turn the E_Police flag
+ on in the PATH message being built.
+
+ 2. Pass the ADSPEC object and Non_RSVP flag present in
+ the PSB to the traffic control call TC_Advertise.
+ Insert the modified ADSPEC object that is returned
+ into the PATH message being built.
+
+ 3. Insert into its PHOP object the interface address and
+ the LIH for the interface.
+
+ RESV REFRESH
+
+ This sequence sends a reservation refresh towards a particular
+ previous hop with IP address PH. This sequence may be entered
+ by the expiration of a refresh timer, or invoked from the PATH
+ MESSAGE ARRIVES, RESV MESSAGE ARRIVES, RTEAR MESSAGE ARRIVES, or
+ RERR MESSAGE ARRIVES sequence.
+
+ In general, this sequence considers each of the PSB's with PHOP
+ address PH. For a given PSB, it scans the TCSBs for matching
+ reservations and merges the styles, FLOWSPECs and
+ Filter_spec_list's appropriately. It then builds a RESV message
+ and sends it to PH. The details depend upon the attributes of
+ the style(s) included in the reservations.
+
+ Initially the Need_Scope flag is off and the new_SCOPE object is
+ empty.
+
+ o Create an output message containing INTEGRITY (if
+ configured), SESSION, RSVP_HOP, and TIME_VALUES objects.
+
+ o Determine the style for these reservations from the first
+ RSB for the session, and move the STYLE object into the
+ proto-message. (Note that the present set of styles are
+ never themselves merged; if future styles can be merged,
+ these rules will become more complex).
+
+ o If style is wildcard and if there are PSB's from more than
+ one PHOP and if the multicast routing protocol does not use
+ shared trees, set the Need_Scope flag on.
+
+
+
+
+
+
+Braden & Zhang Informational [Page 20]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ o Select each sender PSB whose PHOP has address PH. Set the
+ local flag B_Merge off and execute the following steps.
+
+ 1. Select all TCSB's whose Filter_spec_list's match the
+ SENDER_TEMPLATE object in the PSB and whose OI appears
+ in the OutInterface_list of the PSB.
+
+ 2. If the PSB is from the API, then:
+
+ - If TCSB contains a CONFIRM object, then create
+ and send a RACK message containing the object and
+ delete the CONFIRM object from the TCSB.
+
+ - Continue with next PSB.
+
+ 3. If B_Merge flag is off then ignore a blockaded TCSB,
+ as follows.
+
+ - Select BSB's that match this TCSB. If a selected
+ BSB is expired, delete it. If any of the
+ unexpired BSB's has a Qb that is not strictly
+ larger than TC_Flowspec, then continue processing
+ with the next TCSB.
+
+ However, if steps 1 and 2 result in finding that all
+ TCSB's matching this PSB are blockaded, then:
+
+ - If this RESV REFRESH sequence was invoked from
+ RESV ERROR RECEIVED, then return to the latter.
+
+ - Otherwise, turn on the B_Merge flag and restart
+ at step 1, immediately above.
+
+ 4. Merge the flowspecs from this set of TCSB's, as
+ follows:
+
+ - If B_Merge flag is off, compute the LUB over the
+ flowspec objects. From each TCSB, use the
+ Fwd_Flowspec object if present, else use the
+ normal Flowspec object.
+
+
+
+
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 21]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ While computing the LUB, check for a RESV_CONFIRM
+ object in each TCSB. If a RESV_CONFIRM object is
+ found:
+
+ - If the flowspec (Fwd_Flowspec or Flowspec)
+ in that TCSB is larger than all other (non-
+ blockaded) flowspecs being compared, then
+ save this RESV_CONFIRM object for forwarding
+ and delete from the TCSB.
+
+ - Otherwise (the corresponding flowspec is not
+ the largest), create and send a RACK message
+ to the address in the RESV_CONFIRM object.
+ Include the RESV_CONFIRM object in the RACK
+ message. The RACK message should also
+ include an ERROR_SPEC object whose
+ Error_Node parameter is IP address of OI
+ from the TCSB and specifying "No Error".
+
+ - Delete the RESV_CONFIRM object from the
+ TCSB.
+
+ - Otherwise (B_Merge flag is on), compute the GLB
+ over the Flowspec objects of this set of TCSB's.
+
+ While computing the GLB, delete any RESV_CONFIRM
+ object object in any of these TCSB's.
+
+ 5. (All matching TCSB's have been processed). The next
+ step depends upon the style attributes.
+
+ Distinct reservation (FF) style
+
+ Use the Sender_Template as the merged
+ FILTER_SPEC. Pack the merged (FLOWSPEC,
+ FILTER_SPEC, F_POLICY_DATA) triplet into the
+ message as a flow descriptor.
+
+ Shared wildcard reservation (WF) style
+
+ There is no merged FILTER_SPEC. Merge (compute
+ the LUB of) the merged FLOWSPECS from the TCSB's,
+ across all PSB's for PH.
+
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 22]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ Shared distinct reservation (SE) style
+
+ Using the Sender_Template as the merged
+ FILTER_SPEC, form the union of the FILTER_SPECS
+ obtained from the TCSB's. Merge (compute the LUB
+ of) the merged FLOWSPECS from the TCSB's, across
+ all PSB's for PH.
+
+ 6. If the Need_Scope flag is on and the sender specified
+ by the PSB is not the local API:
+
+ - Find each RSB that matches this PSB, i.e., whose
+ Filter_spec_list matches Sender_Template in the
+ PSB and whose OI is included in
+ OutInterface_list.
+
+ - If the RSB either has no SCOPE list or its SCOPE
+ list includes the sender IP address from the PSB,
+ insert the sender IP address into new_SCOPE.
+
+ o (All PSB's for PH have been processed). Finish the RESV
+ message.
+
+ 1. If Need_Scope flag is on but new_SCOPE is empty, no
+ RESV message should be sent; return. Otherwise, if
+ Need_Scope is on, move new_SCOPE into the message.
+
+ 2. If a shared reservation style is being built, move the
+ final merged FLOWSPEC object and filter spec list into
+ the message.
+
+ 3. If a RESV_CONFIRM object was saved earlier, move it
+ into the new RESV message.
+
+ 4. Set the RSVP_HOP object in the message to contain the
+ IncInterface address through which it will be sent and
+ the LIH from (one of) the PSB's.
+
+ o Send the message to the address PH.
+
+ ROUTE CHANGE NOTIFICATION
+
+ This sequence is triggered when routing sends a route change
+ notification to RSVP.
+
+ o Each PSB is located whose SESSION matches the destination
+ address and whose SENDER_TEMPLATE matches the source
+ address (for multicast).
+
+
+
+Braden & Zhang Informational [Page 23]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+ 1. If the OutInterface_list from the notification differs
+ from that in the PSB, execute the PATH LOCAL REPAIR
+ sequence.
+
+ 2. If the IncInterface from the notification differs from
+ that in the PSB, update the PSB.
+
+ PATH LOCAL REPAIR
+
+ The sequence is entered to effect local repair after a route
+ change for a given PSB.
+
+ o Wait for a delay time of W seconds.
+
+ o Execute the PATH REFRESH event sequence (above) for the
+ PSB.
+
+References
+
+ [Baker96] Baker, F., "RSVP Cryptographic Authentication", Work in
+ Progress.
+
+
+ [RFC 2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and
+ S. Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1
+ FunctionalSpecification", RFC 2205, September 1997.
+
+ [RFC 2207] Berger, L. and T. O'Malley, "RSVP Extensions for IPSEC
+ IPv4 Data Flows", RFC 2207, September 1997.
+
+ [RSVP93] Zhang, L., Deering, S., Estrin, D., Shenker, S., and D.
+ Zappala, "RSVP: A New Resource ReSerVation Protocol", IEEE
+ Network, September 1993.
+
+Security Considerations
+
+ Processing the RSVP INTEGRITY object [Baker96] is only mentioned in
+ this memo, because the processing rules are described here only in
+ general terms. The RSVP support for IPSEC [RFC 2207] will imply
+ modifications that have not yet been incorporated into these
+ processing rules.
+
+
+
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 24]
+
+RFC 2209 RSVP-Message Processing September 1997
+
+
+Authors' Addresses
+
+ Bob Braden
+ USC Information Sciences Institute
+ 4676 Admiralty Way
+ Marina del Rey, CA 90292
+
+ Phone: (310) 822-1511
+ EMail: Braden@ISI.EDU
+
+
+ Lixia Zhang
+ UCLA Computer Science Department
+ 4531G Boelter Hall
+ Los Angeles, CA 90095-1596 USA
+
+ Phone: 310-825-2695
+ EMail: lixia@cs.ucla.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Braden & Zhang Informational [Page 25]
+