Internet Draft                                            R. Braden, Ed.
Expiration: September 1995                                           ISI
File: draft-ietf-rsvp-spec-05.txt                                L.Zhang
                                                                    PARC
                                                               D. Estrin
                                                                     ISI
                                                               S. Herzog
                                                                     ISI
                                                                S. Jamin
                                                                     USC



                Resource ReSerVation Protocol (RSVP) --
                   Version 1 Functional Specification

                           March 24, 1995


Status of Memo

   This document is an Internet-Draft.  Internet-Drafts are working
   documents of the Internet Engineering Task Force (IETF), its areas,
   and its working groups.  Note that other groups may also distribute
   working documents as Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   To learn the current status of any Internet-Draft, please check the
   linebreak "1id-abstracts.txt" listing contained in the Internet-
   Drafts Shadow Directories on ds.internic.net (US East Coast),
   nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au
   (Pacific Rim).

Abstract

   This memo describes version 1 of RSVP, a resource reservation setup
   protocol designed for an integrated services Internet.  RSVP provides
   receiver-initiated setup of resource reservations for multicast or
   unicast data flows, with good scaling and robustness properties.






Braden, Zhang, et al.  Expiration: September 1995               [Page 1]


Internet Draft             RSVP Specification                 March 1995


What's Changed Since Toronto IETF

This version of the document incorporates many of the protocol changes
agreed to at the December 1994 IETF meeting in San Jose.  The most major
changes are:


   o    The RSVP packet format has been reorganized to carry most data
        as typed variable-length objects.

   o    This generality includes provision for 16-byte IP6 addresses.

   o    Filter specs have been simplified.

   o    DF style has been moved to an Appendix, as experimental.

   o    UDP encapsulation has been included.

   o    OPWA has been included.

   o    The Drop flag has been eliminated.

   o    Session groups have been added.

   o    The routing of RERR messages has been changed.


1. Introduction

   This document defines RSVP, a resource reservation setup protocol
   designed for an integrated services Internet [RSVP93,ISInt93].

   A host uses the RSVP protocol to request a specific quality of
   service (QoS) from the network, on behalf of an application data
   stream.  RSVP is also used to deliver QoS requests to routers along
   the path(s) of the data stream and to maintain router and host state
   to provide the requested service.  This will generally (but not
   necessarily) require reserving resources along the data path.

   RSVP reserves resources for simplex data streams, i.e., it reserves
   resources in only one direction on a link, so that a sender is
   logically distinct from a receiver.  However, the same application
   may act as both sender and receiver.  RSVP operates on top of IP,
   occupying the place of a transport protocol in the protocol stack.
   However, like ICMP, IGMP, and routing protocols, RSVP does not
   transport application data but is rather an Internet control
   protocol.  As shown in Figure 1, an implementation of RSVP, like the
   implementations of routing and management protocols, will typically



Braden, Zhang, et al.  Expiration: September 1995               [Page 2]


Internet Draft             RSVP Specification                 March 1995


   execute in the background, not in the data forwarding path.

   RSVP is not itself a routing protocol; the RSVP daemon consults the
   local routing protocol(s) to obtain routes.  Thus, a host sends IGMP
   messages to join a multicast group, and it sends RSVP messages to
   reserve resources along the delivery path(s) from that group.  RSVP
   is designed to operate with existing and future unicast and multicast
   routing protocols.


               HOST                             ROUTER

    _________________________    RSVP   ______________________
   |                         |    .---------------.           |
   |  _______       ______   |   .     | ________  .   ______ |
   | |       |     |      |  |  .      ||        |  . |      ||  RSVP
   | |Applic-|     | RSVP <-----       ||Routing |   -> RSVP <------>
   | |  App  <----->daemon|  |         ||Protocol|    |daemon||
   | |       |     |      |  |         || daemon <---->      ||
   | |_______|     |___.__|  |         ||_ ._____|    |__.___||
   |===|===============v=====|         |===v=============v====|
   | data     ..........     |         |   .  ............    |
   |   |  ____v_   ____v____ |         |  _v__v_    _____v___ |
   |   | |Class-| |         ||   data  | |Class-|  |         ||  data
   |   |=> ifier|=> Packet  =============> ifier|==> Packet  |======>
   |     |______| |Scheduler||         | |______|  |Scheduler||
   |              |_________||         |           |_________||
   |_________________________|         |______________________|

                   Figure 1: RSVP in Hosts and Routers


   Each router that is capable of resource reservation passes incoming
   data packets to a packet classifier and then queues them as necessary
   in a packet scheduler.  The packet classifier determines the route
   and the QoS class for each packet.  The scheduler allocates a
   particular outgoing link for packet transmission, and it may also
   allocate other system resources such as CPU time or buffers.

   In order to efficiently accommodate heterogeneous receivers and
   dynamic group membership and to be consistent with IP multicast, RSVP
   makes receivers responsible for requesting resource reservations
   [RSVP93].  A QoS request, typically originating in a receiver host
   application, will be passed to the local RSVP implementation, shown
   as a user daemon in Figure 1.  The RSVP protocol is then used to pass
   the request to all the nodes (routers and hosts) along the reverse
   data path(s) to the data source(s).




Braden, Zhang, et al.  Expiration: September 1995               [Page 3]


Internet Draft             RSVP Specification                 March 1995


   At each node, the RSVP program applies a local decision procedure,
   called "admission control", to determine if it can supply the
   requested QoS.  If admission control succeeds, the RSVP program sets
   parameters to the packet classifier and scheduler to obtain the
   desired QoS.  If admission control fails at any node, the RSVP
   program returns an error indication to the application that
   originated the request.  We refer to the packet classifier, packet
   scheduler, and admission control components as "traffic control".

   RSVP is designed to scale well for very large multicast groups.
   Since the membership of a large group will be constantly changing,
   the RSVP design assumes that router state for traffic control will be
   built and destroyed incrementally.  For this purpose, RSVP uses "soft
   state" in the routers, in addition to receiver-initiation.

   RSVP protocol mechanisms provide a general facility for creating and
   maintaining distributed reservation state across a mesh of multicast
   or unicast delivery paths.  RSVP transfers reservation parameters as
   opaque data (except for certain well-defined operations on the data),
   which it simply passes to traffic control for interpretation.
   Although the RSVP protocol mechanisms are largely independent of the
   encoding of these parameters, the encodings must be defined in the
   reservation model that is presented to an application (see Appendix
   A).

   In summary, RSVP has the following attributes:

   o    RSVP supports multicast or unicast data delivery and adapts to
        changing group membership as well as changing routes.

   o    RSVP is simplex.

   o    RSVP is receiver-oriented, i.e., the receiver of a data flow is
        responsible for the initiation and maintenance of the resource
        reservation used for that flow.

   o    RSVP maintains "soft state" in the routers, enabling it to
        gracefully support dynamic membership changes and automatically
        adapt to routing changes.

   o    RSVP provides several reservation models or "styles" (defined
        below) to fit a variety of applications.

   o    RSVP provides transparent operation through routers that do not
        support it.

   Further discussion on the objectives and general justification for
   RSVP design are presented in [RSVP93,ISInt93].



Braden, Zhang, et al.  Expiration: September 1995               [Page 4]


Internet Draft             RSVP Specification                 March 1995


   The remainder of this section describes the RSVP reservation
   services.  Section 2 presents an overview of the RSVP protocol
   mechanisms, while Section 3 gives examples of the services and
   mechanism.  Section 4 contains the functional specification of RSVP.
   Section 5 presents explicit message processing rules.

   1.1 Data Flows

      The set of data flows with the same unicast or multicast
      destination constitute a session. RSVP treats each session
      independently.  All data packets in a particular session are
      directed to the same IP destination address DestAddress, and
      perhaps to some further demultiplexing point defined in a higher
      layer (transport or application).  We refer to the latter as a
      "generalized destination port".

      DestAddress is the group address for multicast delivery, or the
      unicast address of a single receiver.  A generalized destination
      port could be defined by a UDP/TCP destination port field, by an
      equivalent field in another transport protocol, or by some
      application-specific information.  Although the RSVP protocol is
      designed to be easily extendible for greater generality, the
      present version uses only UDP/TCP ports as generalized ports.

      Figure 2 illustrates the flow of data packets in a single RSVP
      session, assuming multicast data distribution.  The arrows
      indicate data flowing from senders S1 and S2 to receivers R1, R2,
      and R3, and the cloud represents the distribution mesh created by
      the multicast routing protocol.  Multicast distribution forwards a
      copy of each data packet from a sender Si to every receiver Rj; a
      unicast distribution session has a single receiver R.  Each sender
      Si and each receiver Rj may correspond to a unique Internet host,
      or a single host may contain multiple logical senders and/or
      receivers, distinguished by generalized ports.

















Braden, Zhang, et al.  Expiration: September 1995               [Page 5]


Internet Draft             RSVP Specification                 March 1995



              Senders                              Receivers
                          _____________________
                         (                     ) ===> R1
                 S1 ===> (    Multicast        )
                         (                     ) ===> R2
                         (    distribution     )
                 S2 ===> (                     )
                         (    by Internet      ) ===> R3
                         (_____________________)

                 Figure 2: Multicast Distribution Session



   1.2 Reservation Model

      An elementary RSVP reservation request consists of a "flowspec"
      together with a "filter spec"; this pair is called a "flow
      descriptor".  The flowspec specifies a desired QoS.  The filter
      spec (together with the DestAddress and the generalized
      destination port defining the session) defines the set of data
      packets -- the "flow" -- to receive the QoS defined by the
      flowspec.  The flowspec is used to set parameters to the packet
      scheduler in the node (assuming that admission control succeeds),
      while the filter spec is used to set parameters in the packet
      classifier.

      The flowspec in a reservation request will generally include a
      service type and two sets of numeric parameters: (1) an " Rspec"
      (R for `reserve'), which defines the desired per-hop reservation,
      and (2) a "Tspec" (T for `traffic'), which defines the parameters
      that may be used to police the data flow, i.e., to ensure it does
      not exceed its promised traffic level.

      The general RSVP reservation model allows filter specs to select
      arbitrary subsets of the packets in a given session.  Such subsets
      might be defined in terms of senders (i.e., sender IP address and
      generalized source port), in terms of a higher-level protocol, or
      generally in terms of any fields in any protocol headers in the
      packet.  For example, filter specs might be used to select
      different subflows in a hierarchically-encoded signal, by
      selecting on fields in an application-layer header.  However,
      considerations of both architectural purity and practical
      requirements have led to the decision that RSVP should use
      separate sessions for distinct subflows of hierarchically-encoded
      signals.  For multicast sessions, subflows can be distinguished by
      multicast destination address; for unicast sessions, they must be



Braden, Zhang, et al.  Expiration: September 1995               [Page 6]


Internet Draft             RSVP Specification                 March 1995


      distinguished by destination port.  As a result of these
      considerations, the present RSVP version includes a quite
      restricted definition of filter specs, selecting only on sender IP
      address and UDP/TCP port number, and on protocol id.  However, the
      design of the protocol would easily handle a more general
      definition in future versions.

      Any packets that are addressed to a particular session but do not
      match any of the filter specs for that session will be sent as
      best-effort traffic.  Under congested conditions, such packets are
      likely to experience long delays and may be dropped.  A receiver
      may wish to conserve network resources by explicitly asking the
      network to drop those data packets for which there is no
      reservation; however, such dropping should be performed by
      routing, not by RSVP.  Determining where packets get delivered
      should be a routing function; RSVP is concerned only with the QoS
      of those packets that are delivered by routing.

      RSVP reservation request messages originate at receivers and are
      passed upstream towards the sender(s).  (Note that this document
      always uses the directional terms "upstream" vs. "downstream",
      "previous hop" vs.  "next hop", and "incoming interface" vs
      "outgoing interface" with respect to the data flow direction).
      When an elementary reservation request is received at a node, the
      RSVP daemon takes two primary actions.

      1.   Make a reservation

           The flowspec and the filter spec are passed to traffic
           control.  Admission Control determines the admissibility of
           the request (if it's new); if it fails this test, the
           reservation is rejected and RSVP sends back an error message
           towards the responsible receiver(s).  If it passes, the
           flowspec is used to set up the packet scheduler for the
           desired QoS and the filter spec is used to set the packet
           classifier to select the appropriate data packets.

      2.   Forward reservation upstream.

           The reservation request is propagated upstream towards the
           appropriate senders.  The set of senders to which a given
           reservation request is propagated is called the "scope" of
           that request.

      The reservation request that a node forwards upstream may differ
      from the request that it received, for two reasons.  First, it is
      possible (at least in theory) for the kernel to modify the
      flowspec hop-by-hop (although currently no realtime services do



Braden, Zhang, et al.  Expiration: September 1995               [Page 7]


Internet Draft             RSVP Specification                 March 1995


      this).  Second, reservations from different downstream branches of
      the multicast distribution tree(s) must be "merged" as
      reservations travel upstream.  Merging reservations is a necessary
      consequence of multicast distribution, which creates a single
      stream of data packets in a particular router from any Si,
      regardless of the set of receivers downstream.  The reservation
      for Si on a particular outgoing link L should be the "maximum" of
      the individual flowspecs from the receivers Rj that are downstream
      via link L.  Merging is discussed further in Section 2.3.

      For both of these primary actions, there are options controlled by
      the receiver making the reservation. These options are combined
      into a control variable called the reservation "style", which is
      discussed in section 1.3.  One option concerns the treatment of
      reservations for different senders within the same session:
      establish a "distinct" reservation for each upstream sender, or
      else "mix" all senders' packets into a single reservation.
      Another option controls the scope of the request: "unitary" (i.e.,
      a single specified sender), an explicit sender list, or a
      "wildcard" that implicitly selects all senders upstream of the
      given node.

      The basic RSVP reservation model is "one pass": a receiver sends a
      reservation request upstream, and each node in the path can only
      accept or reject the request.  This scheme provides no way to make
      end-to-end service guarantees; the QoS request is applied
      independently at each hop.  RSVP also supports an optional
      reservation model, known as " One Pass With Advertising" (OPWA)
      [Shenker94].  In OPWA, RSVP control packets sent downstream,
      following the data paths, are used to gather information on the
      end-to-end service that would result from a variety of possible
      reservation requests.  The results ("advertisements") are
      delivered by RSVP to the receiver host, and perhaps to the
      receiver application.  The information may then be used by the
      receiver to construct an appropriate reservation request.

   1.3 Reservation Styles

      Each RSVP reservation request specifies a "reservation style".
      The following reservation styles are defined in this version of
      the protocol.

      1.   Wildcard-Filter (WF) Style

           The WF style specifies the options: "mixing" reservation and
           " wildcard" reservation scope.  Thus, a WF-style reservation
           creates a single reservation into which flows from all
           upstream senders are mixed.  This reservation may be thought



Braden, Zhang, et al.  Expiration: September 1995               [Page 8]


Internet Draft             RSVP Specification                 March 1995


           of a shared "pipe", whose "size" is the largest of the
           resource requests for that link from all receivers,
           independent of the number of senders using it.  A WF-style
           reservation has wildcard scope, i.e., the reservation is
           propagated upstream towards all senders.  A WF-style
           reservation automatically extends to new senders to the
           session as they appear.

      2.   Fixed-Filter (FF) Style

           The FF style specifies the options: "distinct" reservation
           and a "unitary" reservation scope.  Thus, an elementary FF-
           style reservation request creates a distinct reservation for
           data packets from a particular sender, not mixing them with
           other senders' packets for the same session.

           The total reservation on a link for a given session is the
           total of the FF reservations for all requested senders.  On
           the other hand, FF reservations requested by different
           receivers Rj but selecting the same sender Si must
           necessarily be merged to share a single reservation in a
           given node.

      WF reservations are appropriate for those multicast applications
      whose application-specific constraints make it unlikely that
      multiple data sources will transmit simultaneously. One example is
      audio conferencing, where a limited number of people talk at once;
      each receiver might issue a WF reservation request for twice one
      audio channel (to allow some over-speaking).  On the other hand,
      the FF style, which creates independent reservations for the flows
      from different senders, is appropriate for video signals.

      The WF and FF styles are incompatible and cannot be combined
      within a session.  Other reservation styles may be defined in the
      future (see Appendix C).

2. RSVP Protocol Mechanisms

   2.1 RSVP Messages

      There are two fundamental RSVP message types, RESV messages and
      PATH messages.

      Each receiver host sends RSVP reservation request (RESV) messages
      towards the senders.  These reservation messages must follow in
      reverse the routes the data packets will use, all the way upstream
      to the senders within the scope.  RESV messages are delivered to
      the sender hosts, so that the hosts can set up appropriate traffic



Braden, Zhang, et al.  Expiration: September 1995               [Page 9]


Internet Draft             RSVP Specification                 March 1995


      control parameters for the first hop.  If a reservation request
      fails at any node, an RSVP error message is returned to the
      receiver; however, RSVP sends no positive acknowledgment messages
      to indicate success.


            Sender                                       Receiver
                          _____________________
               Path -->  (                     )
             Si =======> (    Multicast        ) Path -->
               <-- Resv  (                     ) =========> Rj
                         (    distribution     ) <-- Resv
                         (_____________________)

                           Figure 3: RSVP Messages


      Each sender transmits RSVP PATH messages forward along the uni-
      /multicast routes provided by the routing protocol(s); see Figure
      3.  These "Path" messages store path state in each node.  Path
      state is used by RSVP to route the RESV messages hop-by-hop in the
      reverse direction.  (In the future, some routing protocols may
      supply reverse path forwarding information directly, without path
      state).

      PATH messages may also carry the following information:

      o    Sender Template

           The Sender Template describes the format of data packets that
           the sender will originate.  This template is in the form of a
           filter spec that could be used to select this sender's
           packets from others in the same session on the same link.

      o    Tspec

           The PATH message may optionally carry a flowspec containing
           only a Tspec, defining an upper bound on the traffic level
           that the sender will generate.  This Tspec can be used by
           RSVP to prevent over-reservation (and perhaps unnecessary
           Admission Control failure) on the non-shared links starting
           at the sender.

      o    Adspec

           The PATH message may carry a package of OPWA advertising
           information, known as an "Adspec".




Braden, Zhang, et al.  Expiration: September 1995              [Page 10]


Internet Draft             RSVP Specification                 March 1995



       Previous       Incoming           Outgoing             Next
       Hops           Interfaces         Interfaces           Hops

       _____             _____________________                _____
      |     | data -->  |                     |  data -->    |     |
      |  A  |-----------| a                 c |--------------|  C  |
      |_____|  <-- Resv |                     |   <-- Resv   |_____|
              Path -->  |                     |  Path -->     _____
       _____            |       ROUTER        |           |  |     |
      |     |  |        |                     |           |--|  D  |
      |  B  |--| data-->|                     |  data --> |  |_____|
      |_____|  |--------| b                 d |-----------|
               |<-- Resv|                     |  <-- Resv |   _____
       _____   | Path-->|_____________________|  Path --> |  |     |
      |     |  |                                          |--|  D' |
      |  B' |--|                                          |  |_____|
      |_____|  |                                          |

                         Figure 4: Router Using RSVP



      Figure 4 illustrates RSVP's model of a router node.  Each data
      stream arrives from a previous hop through a corresponding
      incoming interface and departs through one or more outgoing
      interface(s).  The same physical interface may act in both the
      incoming and outgoing roles (for different data flows but the same
      session).

      As illustrated in Figure 4, there may be multiple previous hops
      and/or next hops through a given physical interface.  This may
      result from the connected network being a shared medium or from
      the existence of non-RSVP routers in the path to the next RSVP hop
      (see Section 2.6).  An RSVP daemon must preserve the next and
      previous hop addresses in its reservation and path state,
      respectively.  A RESV message is sent with a unicast destination
      address, the address of a previous hop.   PATH messages, on the
      other hand, are sent with the session destination address, unicast
      or multicast.

      Although multiple next hops may send reservation requests through
      the same physical interface, the final effect should be to install
      a reservation on that interface, which is defined by an effective
      flowspec.  This effective flowspec will be the "maximum" of the
      flowspecs requested by the different next hops.  In turn, a RESV
      message forwarded to a particular previous hop carries a flowspec
      that is the "maximum" over the effective reservations on the



Braden, Zhang, et al.  Expiration: September 1995              [Page 11]


Internet Draft             RSVP Specification                 March 1995


      corresponding outgoing interfaces.  Both cases represent merging,
      which is discussed further below.

      There are a number of ways for a new reservation request to fail
      in a given node.

      1.   There may be no matching path state (i.e., the scope may
           empty), which would prevent the reservation being propagated
           upstream.

      2.   Its style may be incompatible with the style(s) of existing
           reservations for the same session on the same outgoing
           interface, so an effective flowspec cannot be computed.

      3.   Its style may be incompatible with the style(s) of
           reservations that exist on other outgoing interfaces but will
           be merged with this reservation when a refresh message to
           create a refresh message for the previous hop.

      4.   The effective flowspec may fail admission control.

      In any of these cases, an error message is returned to the
      receiver(s) responsible for the message, but any existing
      reservation is left in place.  This prevents a new, very large,
      reservation from disrupting the existing QoS by merging with an
      existing reservation and then failing admission control.

   2.2 Soft State

      To maintain reservation state, RSVP keeps "soft state" in router
      and host nodes.  RSVP soft state is created and periodically
      refreshed by PATH and RESV messages.  The state is deleted if no
      refreshes arrive before the expiration of a "cleanup timeout"
      interval; it may also be deleted as the result of an explicit
      "Teardown" message.  It is not necessary (although it may be
      desirable, since the resources being consumed may be "valuable"),
      to explicitly tear down an old reservation.

      When a route changes, the next PATH message will initialize the
      path state on the new route, and future RESV messages will
      establish reservation state, while the state on the now-unused
      segment of the route will time out.  Thus, whether a message is
      "new" or a "refresh" is determined separately at each node,
      depending upon the existence of state at that node.  (This
      document uses the term "refresh message" in this effective sense,
      to indicate an RSVP message that does not modify the existing
      state at the node in question.)




Braden, Zhang, et al.  Expiration: September 1995              [Page 12]


Internet Draft             RSVP Specification                 March 1995


      In addition to the cleanup timeout, there is a "refresh timeout"
      period.  As messages arrive, the RSVP daemon checks them against
      the existing state; if it matches, the cleanup timeout timer on
      the state is reset and the message is dropped.  At the expiration
      of each refresh timeout period, RSVP scans its state to build and
      forward PATH and RESV refresh messages to succeeding hops.

      RSVP sends its messages as IP datagrams without reliability
      enhancement.  Periodic transmission of refresh messages by hosts
      and routers is expected to replace any lost RSVP messages.  To
      tolerate K successive packet losses, the effective cleanup timeout
      must be at least K times the refresh timeout.  In addition, the
      traffic control mechanism in the network should be statically
      configured to grant high-reliability service to RSVP messages, to
      protect RSVP messages from congestion losses.

      In steady state, refreshing is performed hop-by-hop, which allows
      merging and packing as described in the next section.  However, if
      the received state differs from the stored state, the stored state
      is updated.  Furthermore, if the result will be to modify the
      refresh messages to be generated, these refresh messages must be
      generated and forwarded immediately.  This will result in changes
      propagating end-to-end without delay.  However, propagation of a
      change stops when and if it reaches a point where merging causes
      no resulting state change; this minimizes RSVP control traffic due
      to changes, and is essential for scaling to large multicast
      groups.

      The "soft" router state maintained by RSVP is dynamic; to change
      the set of senders Si or receivers Rj or to change any QoS
      request, a host simply starts sending revised PATH and/or RESV
      messages.  The result should be the appropriate adjustment in the
      distributed RSVP state, and immediate propagation to the
      succeeding nodes.

      The RSVP state associated with a session in a particular node is
      divided into atomic elements that are created, refreshed, and
      timed out independently.  The atomicity is determined by the
      requirement that any sender or receiver may enter or leave the
      session at any time, and its state should be created and timed out
      independently.  Management of RSVP state is complex because there
      may not be a one-to-one correspondence between state carried in
      RSVP control messages and the resulting state in nodes.  Due to
      merging, a single message contain state referring to multiple
      stored elements.  Conversely, due to reservation sharing, a single
      stored state element may depend upon (typically, the maximum of)
      state values received in multiple control messages.




Braden, Zhang, et al.  Expiration: September 1995              [Page 13]


Internet Draft             RSVP Specification                 March 1995


   2.3 Merging and Packing

      A previous section explained that reservation requests in RESV
      messages are necessarily merged, to match the multicast
      distribution tree.  As a result, only the essential (i.e., the
      "largest") reservation requests are forwarded, once per refresh
      period.  A successful reservation request will propagate as far as
      the closest point(s) along the sink tree to the sender(s) where a
      reservation level equal or greater than that being requested has
      been made.  At that point, the merging process will drop it in
      favor of another, equal or larger, reservation request.


      Although flowspecs are opaque to RSVP, an RSVP daemon must be able
      to calculate the "largest" of a set of flowspecs.  This is
      required both to calculate the effective flowspec to install on a
      given physical interface (see the discussion in connection with
      Figure 4), and to merge flowspecs when sending a refresh message
      upstream.  Since flowspecs are generally multi-dimensional vectors
      (they contain both Tspec and Rspec components, each of which may
      itself be multi-dimensional), they are not strictly ordered.  When
      it cannot take the larger of two flowspecs, RSVP must compute and
      use a third flowspec that is at least as large as each, i.e., a
      "least upper bound" (LUB).  It is also possible for two flowspecs
      to be incomparable, which is treated as an error.  The definition
      and implementation of the rules for comparing flowspecs are
      outside RSVP proper, but they are defined as part of the service
      templates.

      For protocol efficiency, RSVP also allows multiple sets of path
      (or reservation) information for the same session to be "packed"
      into a single PATH (or RESV) message, respectively.  (For
      simplicity, the protocol prohibits packing different sessions into
      the same RSVP message).

   2.4 Teardown

      RSVP teardown messages remove path and reservation state without
      waiting for the cleanup timeout period, as an optimization to
      release resources quickly.  Although teardown messages (like other
      RSVP messages) are not delivered reliably, the state will time out
      even if it is not explicitly deleted.

      A teardown request may be initiated either by an application in an
      end system (sender or receiver), or by a router as the result of
      state timeout.  A router may also initiate a teardown message as
      the result of router or link failures detected by the routing
      protocol.  Once initiated, a teardown request should be forwarded



Braden, Zhang, et al.  Expiration: September 1995              [Page 14]


Internet Draft             RSVP Specification                 March 1995


      hop-by-hop without delay.

      To increase the reliability of teardown, Q copies of any given
      teardown message can be sent.  Note that a node cannot actually
      delete the state being torn down until it has sent Q Teardown
      messages; it must place the state in a "moribund" status
      meanwhile.  The appropriate value of Q is an engineering issue.  Q
      = 1 would be the simplest and may be adequate, since unrefreshed
      state will time out anyway; teardown is an optimization.  If one
      or more Teardown message hops are lost, the router that failed to
      receive a Teardown message will time out its state and initiate a
      new Teardown message beyond the loss point.  Assuming that RSVP
      message loss probability is small, the longest time to delete
      state will seldom exceed one refresh timeout period.

      There are two types of RSVP Teardown message, PTEAR and RTEAR.  A
      PTEAR message travels towards all receivers downstream from its
      point of initiation and tears down path state along the way.  A
      RTEAR message tears down reservation state and travels towards all
      senders upstream from its point of initiation.  A PTEAR (RTEAR)
      message may be conceptualized as a reversed-sense Path message
      (Resv message, respectively).

      A teardown message deletes the specified state in the node where
      it is received.  Like any other state change, this will be
      propagated immediately to the next node, but only if it represents
      a change.  As a result, an RTEAR message will prune the
      reservation state back (only) as far as possible.  Note that the
      RTEAR message will cease to be forwarded at the same node where
      merging suppresses forwarding of the corresponding RESV messages.
      The change will be propagated as a new teardown message if the
      result has been to remove all state for this session at this node.
      However, the result may simply be to change the propagated
      information; thus, the receipt of a RTEAR message may result in
      the immediate forwarding of a modified RESV refresh message.

      Deletion of path state, whether as the result of a teardown
      message or because of timeout, may force adjustments in order in
      related reservation state to maintain consistency in the local
      node.  For example, when a PTEAR deletes the path state for a
      sender S, the adjustment in reservation depends upon the style: if
      the style is WF and S is the only sender to the session, delete
      the reservation; if the style is FF, delete only reservations for
      sender S.  These reservation changes should not trigger an
      immediate RESV refresh message, since the teardown message will
      have already made the required changes upstream.  However, at the
      node in which an RTEAR message stops, the change of reservation
      state may trigger a RESV refresh starting at that node.



Braden, Zhang, et al.  Expiration: September 1995              [Page 15]


Internet Draft             RSVP Specification                 March 1995


   2.5 Security

      There are two distinct types of security concerns in RSVP.

      1.   Protecting RSVP Message Integrity

           It may be necessary to ensure the integrity of RSVP messages
           against corruption or spoofing, hop by hop.  RSVP messages
           have an optional integrity field that can be created and
           verified by neighboring RSVP nodes.

      2.   Authenticating Reservation Requests

           RSVP-mediated resource reservations may reserve network
           resources, providing special treatment for a particular set
           of users.  Administrative mechanisms will be necessary to
           control who gets privileged service and to collect billing
           information.  These mechanisms may require secure
           authentication of senders and/or receivers responsible for
           the reservation.  RSVP messages may contain credential
           information to verify user identity.

      The RSVP packet formats provide for both; see Section 4.

   2.6 Automatic RSVP Tunneling

      It is impossible to deploy RSVP (or any new protocol) at the same
      moment throughout the entire Internet.  Furthermore, RSVP may
      never be deployed everywhere.  RSVP must therefore provide correct
      protocol operation even when two RSVP-capable routers are joined
      by an arbitrary "cloud" of non-RSVP routers.  Of course, an
      intermediate cloud that does not support RSVP is unable to perform
      resource reservation, so service guarantees cannot be made.
      However, if there is sufficient excess capacity through such a
      cloud, acceptable and useful realtime service may still be
      possible.

      RSVP will automatically tunnel through such a non-RSVP cloud.
      Both RSVP and non-RSVP routers forward PATH messages towards the
      destination address using their local uni-/multicast routing
      table.  Therefore, the routing of  Path messages will be
      unaffected by non-RSVP routers in the path.  When a PATH message
      traverses a non-RSVP cloud, the copies that emerge will carry as a
      Previous Hop address the IP address of the last RSVP-capable
      router before entering the cloud.  This will effectively construct
      a tunnel through the cloud for RESV messages, which will be
      forwarded directly to the next RSVP-capable router on the path(s)
      back towards the source.



Braden, Zhang, et al.  Expiration: September 1995              [Page 16]


Internet Draft             RSVP Specification                 March 1995


      Automatic tunneling is not perfect; in some circumstances it may
      distribute path information to RSVP-capable routers not included
      in the data distribution paths, which may create unused
      reservations at these routers.  This is because PATH messages
      carry the IP source address of the previous hop, not of the
      original sender, and multicast routing may depend upon the source
      as well as the destination address.  This can be overcome by
      manual configuration of the neighboring RSVP programs, when
      necessary.

   2.7 Session Groups

      Section 1.2 explained that a distinct destination address, and
      therefore a distinct session, will be used for each of the
      subflows in a hierarchically encoded flow.  However, these
      separate sessions are logically related.  For example it may be
      necessary to pass reservations for all subflows to Admission
      Control at the same time (since it would be nonsense to admit high
      frequency components but reject the baseband component of the
      session data).  Such a logical grouping is indicated in RSVP by
      defining a "session group", an ordered set of sessions.

      To declare that a set of sessions form a session group, a receiver
      includes a data structure we call a SESSION_GROUP object in the
      RESV message for each of the sessions.  A SESSION_GROUP object
      contains four fields: a reference address, a session group ID, a
      count, and a rank.

      o    The reference address is an agreed-upon choice from among the
           DestAddress values of the sessions in the group, for example
           the smallest numerically.

      o    The session group ID is used to distinguish different groups
           with the same reference address.

      o    The count is the number of members in the group.

      o    The rank, an integer between 1 and count, is different in
           each session of the session group.

      The SESSION_GROUP objects for all sessions in the group will
      contain the same values of the reference address, the session
      group ID, and the count value.  The rank values establishes the
      desired order among them.

      If RSVP at a given node receives a RESV message containing a
      SESSION_GROUP object, it should wait until RESV messages for all
      `count' sessions have appeared (or until the end of the refresh



Braden, Zhang, et al.  Expiration: September 1995              [Page 17]


Internet Draft             RSVP Specification                 March 1995


      cycle) and then pass the RESV requests to Admission Control as a
      group.  It is normally expected that all sessions in the group
      will be routed through the same nodes.  However, if not, only a
      subset of the session group reservations may appear at a given
      node; in this case, the RSVP should wait until the end of the
      refresh cycle and then perform Admission Control on the subset of
      the session group that it has received.  The rank values will
      identify which are missing.

      Note that routing different sessions of the session group
      differently will generally result in delays in establishing or
      rejecting the desired QoS.  A "bundling" facility could be added
      to multicast routing, to force all sessions in a session group to
      be routed along the same path.

   2.8 Host Model

      Before a session can be created, the session identification,
      comprised of DestAddress and perhaps the generalized destination
      port, must be assigned and communicated to all the senders and
      receivers by some out-of-band mechanism.  In order to join an RSVP
      session, the following events happen at the end systems.

      H1   A receiver joins the multicast group specified by
           DestAddress, using IGMP.

      H2   A potential sender starts sending RSVP PATH messages to the
           DestAddress, using RSVP.

      H3   A receiver listens for PATH messages.

      H4   A receiver starts sending appropriate RESV messages,
           specifying the desired flow descriptors, using RSVP.

      H5   A sender starts sending data packets.

      There are several synchronization considerations.

      o    Suppose that a new sender starts sending data (H5) but no
           receivers have joined the group (H1).  Then there will be no
           multicast routes beyond the host (or beyond the first RSVP-
           capable router) along the path; the data will be dropped at
           the first hop until receivers(s) do appear (assuming a
           multicast routing protocol that "prunes off" or otherwise
           avoids unnecessary paths).

      o    Suppose that a new sender starts sending PATH messages (H2)
           and immediately starts sending data (H5), and there are



Braden, Zhang, et al.  Expiration: September 1995              [Page 18]


Internet Draft             RSVP Specification                 March 1995


           receivers but no RESV messages have reached the sender yet
           (e.g., because its PATH messages have not yet propagated to
           the receiver(s)).  Then the initial data may arrive at
           receivers without the desired QoS.

      o    If a receiver starts sending RESV messages (H4) before any
           PATH messages have reached it (H5) (and if path state is
           being used to route RESV messages), RSVP will return error
           messages to the receiver.  The receiver may simply choose to
           ignore such error messages, or it may avoid them by waiting
           for PATH messages before sending RESV messages.

      A specific application program interface (API) for RSVP is not
      defined in this protocol spec, as it may be host system dependent.
      However, Section 4.6.1 discusses the general requirements and
      presents a generic API.

3. Examples

   We use the following notation for a RESV message:

   1.   Wildcard-Filter

        WF( *{Q})

        Here "*{Q}" represents a Flow Descriptor with a "wildcard" scope
        (choosing all senders) and a flowspec of quantity Q.

   2.   Fixed-Filter

        FF( S1{Q1}, S2{Q2}, ...)

        A list of (sender, flowspec) pairs, i.e., flow descriptors,
        packed into a single RESV message.

   For simplicity we assume here that flowspecs are one-dimensional,
   defining for example the average throughput, and state them as a
   multiple of some unspecified base resource quantity B.

   Figure 5 shows schematically a router with two previous hops labeled
   (a) and (b) and two outgoing interfaces labeled (c) and (d).  This
   topology will be assumed in the examples that follow.  There are
   three upstream senders; packets from sender S1 (S2 and S3) arrive
   through previous hop (a) ((b), respectively).  There are also three
   downstream receivers; packets bound for R1 and R2 (R3) are routed via
   outgoing interface (c) ((d) respectively).

   In addition to the connectivity shown in 5, we must also specify the



Braden, Zhang, et al.  Expiration: September 1995              [Page 19]


Internet Draft             RSVP Specification                 March 1995


   multicast routing within this node.  Assume first that data packets
   (hence, PATH messages) from each Si shown in Figure 5 is routed to
   both outgoing interfaces.  Under this assumption, Figures 6 and 7
   illustrate Wildcard-Filter reservations and Fixed-Filter
   reservations, respectively.

                      ________________
                  (a)|                | (c)
   ( S1 ) ---------->|                |----------> ( R1, R2)
                     |     Router     |
                  (b)|                | (d)
   ( S2,S3 ) ------->|                |----------> ( R3 )
                     |________________|

                      Figure 5: Router Configuration


   In Figure 6, the "Receive" column shows the RESV messages received
   over outgoing interfaces (c) and () and the "Reserve" column shows
   the resulting reservation state for each interface.   The "Send"
   column shows the RESV messages forwarded to previous hops (a) and
   (b).  In the "Reserve" column, each box represents one reservation
   "channel", with the corresponding filter.  As a result of merging,
   only the largest flowspec is forwarded upstream to each previous hop.


                          |
            Send          |       Reserve              Receive
                          |
                          |       _______
      WF( *{3B} ) <- (a)  |  (c) | * {B} |    (c) <- WF( *{B} )
                          |      |_______|
                          |
   -----------------------|----------------------------------------
                          |       _______
      WF( *{3B} ) <- (b)  |  (d) | * {3B}|    (d) <- WF( *{3B} )
                          |      |_______|

              Figure 6: Wildcard-Filter Reservation Example 1



   Figure 7 shows Fixed-Filter style reservations.  The flow descriptors
   for senders S2 and S3, received from outgoing interfaces (c) and (d),
   are packed into the message forwarded to previous hop b.  On the
   other hand, the two different flow descriptors for sender S1 are
   merged into the single message FF( S1{3B} ), which is sent to
   previous hop (a), For each outgoing interface, there is a private



Braden, Zhang, et al.  Expiration: September 1995              [Page 20]


Internet Draft             RSVP Specification                 March 1995


   reservation for each source that has been requested, but this private
   reservation is shared among the receivers that made the request.


                       |
         Send          |       Reserve              Receive
                       |
                       |       ________
  FF( S1{3B} ) <- (a)  |  (c) | S1{B}  |   (c) <- FF( S1{B}, S2{5B} )
                       |      |________|
                       |      | S2{5B} |
                       |      |________|
  ---------------------|---------------------------------------------
                       |       ________
               <- (b)  |  (d) | S1{3B} |   (d) <- FF( S1{3B}, S3{B} )
  FF( S2{5B}, S3{B} )  |      |________|
                       |      | S3{B}  |
                       |      |________|

               Figure 7: Fixed-Filter Reservation Example



   The two examples just shown assume full routing, i.e., data packets
   from S1, S2, and S3 are routed to both outgoing interfaces.  Assume
   the routing shown in Figure 8, in which data packets from S1 are not
   forwarded to interface (d) (because the mesh topology provides a
   shorter path for S1 -> R3 that does not traverse this node).

                      _______________
                  (a)|               | (c)
   ( S1 ) ---------->| --------->--> |----------> ( R1, R2)
                     |        /      |
                     |      /        |
                  (b)|    /          | (d)
   ( S2,S3 ) ------->| ->----------> |----------> ( R3 )
                     |_______________|

                      Figure 8: Router Configuration



   Under this assumption, Figure 9 shows Wildcard-Filter reservations.
   Since there is no route from (a) to (d), the reservation forwarded
   out interface (a) considers only the reservation on interface (c), so
   no merging takes place in this case.





Braden, Zhang, et al.  Expiration: September 1995              [Page 21]


Internet Draft             RSVP Specification                 March 1995



                          |
            Send          |       Reserve              Receive
                          |
                          |       _______
       WF( *{B} ) <- (a)  |  (c) | * {B} |    (c) <- WF( *{B} )
                          |      |_______|
                          |
   -----------------------|----------------------------------------
                          |       _______
      WF( *{3B} ) <- (b)  |  (d) | * {3B}|    (d) <- WF( * {3B} )
                          |      |_______|

     Figure 9: Wildcard-Filter Reservation Example -- Partial Routing





































Braden, Zhang, et al.  Expiration: September 1995              [Page 22]


Internet Draft             RSVP Specification                 March 1995


4. RSVP Functional Specification

   4.1 RSVP Message Formats

      All RSVP messages consist of a common header followed by a
      variable number of variable-length typed "objects" using a common
      structure.  The subsections that follow define the formats of the
      common header, the object structures, and each of the RSVP message
      types.  For each RSVP message type, there is a set of rules for
      the permissible ordering and choice of object types.  These rules
      are specified using Backus-Naur Form (BNF) augmented with square
      brackets surrounding optional sub-sequences.

      4.1.1 Common Header

                0             1              2             3
         +-------------+-------------+-------------+-------------+
         | Vers | Type |    Flags    |       Message Length      |
         +-------------+-------------+-------------+-------------+
         |       RSVP Checksum       |        Object Count       |
         +-------------+-------------+-------------+-------------+



         The common header fields are as follows:

         Vers

              Protocol version number.  This is version 2.

         Type

              1 = PATH

              2 = RESV

              3 = PERR

              4 = RERR

              5 = PTEAR

              6 = RTEAR

         Flags

              0x01 = Entry-Police




Braden, Zhang, et al.  Expiration: September 1995              [Page 23]


Internet Draft             RSVP Specification                 March 1995


                   This flag should be on in a PATH message sent by an
                   RSVP daemon in a sender host.  The first RSVP node
                   that finds the flag on in a PATH message (i.e., the
                   first-[RSVP-]hop router) should institute policing
                   for the flow(s) described in this message.  This flag
                   should never be forwarded in PATH refresh messages.

              0x02 = LUB-Used

                   This flag is described below in the section on Error
                   Messages.

         Message Length

              The total length of this RSVP message, including this
              common header and the objects included in Object Count.

         RSVP Checksum

              A standard TCP/UDP checksum over the contents of the RSVP
              message, with the checksum field replaced by zero.

         Object Count

              Count of variable-length objects that follow.

      4.1.2 Object Formats

         An object consists of one or more 32-bit words with a one-word
         header, in the following format:

                0             1              2             3
         +-------------+-------------+-------------+-------------+
         |       Length (bytes)      |    Class    |    C-Type   |
         +-------------+-------------+-------------+-------------+
         |                                                       |
         //                  (Object contents)                   //
         |                                                       |
         +-------------+-------------+-------------+-------------+


         An object header has the following fields:

         Length

              Total length in bytes.  Must always be a multiple of 4,
              and at least 4.




Braden, Zhang, et al.  Expiration: September 1995              [Page 24]


Internet Draft             RSVP Specification                 March 1995


         Class

              Object class.  In this document, the names of object
              classes are capitalized.

              0 = NULL

                   A NULL object has a Class of zero; its C-Type is
                   ignored.  Its length must be at least 4, but can be
                   any multiple of 4.  A NULL object may appear anywhere
                   in a sequence of objects, and its contents will be
                   ignored by the receiver.

              1 = SESSION

                   Contains the IP destination address (DestAddress) and
                   possibly a generalized source port, to define a
                   specific session for the other objects that follow.
                   Required in every RSVP message.

              2 = SESSION_GROUP

                   When present, defines a session group, a set of
                   related sessions whose reservation requests should be
                   passed collectively to Admission Control.

              3 = RSVP_HOP

                   Carries the IP address of the RSVP-capable node that
                   sent this message.  This document refers to a
                   RSVP_HOP object as a PHOP ("previous hop") object for
                   downstream messages or as a NHOP ("next hop") object
                   for upstream messages.

              4 = STYLE

                   Defines the reservation style plus style-specific
                   information that is not a FLOWSPEC or FILTER_SPEC
                   object, in a RESV message.

              5 = FLOWSPEC

                   Defines a desired QoS, in a RESV message.

              6 = FILTER_SPEC

                   Defines a subset of session data packets that should
                   receive the desired QoS (specified by an FLOWSPEC



Braden, Zhang, et al.  Expiration: September 1995              [Page 25]


Internet Draft             RSVP Specification                 March 1995


                   object), in a RESV message.

              7 = SENDER_TEMPLATE

                   Contains a sender IP address and perhaps some
                   additional demultiplexing information to identify a
                   sender, in a PATH message.

              8 = SENDER_TSPEC

                   Defines the traffic characteristics of a sender's
                   data stream, in a PATH message.

              9 = ADVERT

                   Carries an Adspec containing OPWA data, in a PATH
                   message.

              10 = TIME_VALUES

                   If present, contains values for the refresh period R
                   and the state time-to-live T (see section 4.5), to
                   override the default values of R and T.

              11 = ERROR_SPEC

                   Specifies an error, in a PERR or RERR message.

              12 = CREDENTIAL

                   Contains user credential and/or information for
                   policy control and/or accounting.

              13 = INTEGRITY

                   Contains a cryptographic data to authenticate the
                   originating node, and perhaps verify the contents, of
                   this RSVP message.

         C-Type

              Object type; unique within Class.  Values defined in
              Appendix A.

         The Class and C-Type fields may be used together as a 16-bit
         number to define a unique type for each object.

         The formats of specific object types are defined in Appendix A.



Braden, Zhang, et al.  Expiration: September 1995              [Page 26]


Internet Draft             RSVP Specification                 March 1995


      4.1.3 Path Message

         PATH messages carry information from senders to receivers along
         the same paths, and using the same uni-/multicast routes, as
         the data packets.  The IP destination address of a PATH message
         is the DestAddress for the session, and the source address is
         an address of the node that sent the message (if possible, the
         address of the particular interface through which it was sent).

         The format of a PATH message is as follows:

             <Path Message> ::= <Common Header> <SESSION> <RSVP_HOP>

                                     [ <INTEGRITY> ]  [ <TIME_VALUES> ]

                                     <sender descriptor list>

             <sender descriptor list> ::= <empty > |

                               <sender descriptor list> <sender descriptor>

             <sender descriptor> ::= [ <CREDENTIAL> ]  <SENDER_TEMPLATE>

                                     [ <SENDER_TSPEC> ]  [ <ADVERT> ]


         Each sender descriptor defines a sender, and the sender
         descriptor list allows multiple sender descriptors to be packed
         into a PATH message.  For each sender in the list, the
         SENDER_TEMPLATE object defines the format of data packets, the
         SENDER_TSPEC object may specify the traffic flow, and the
         CREDENTIAL object may specify the user credentials.  There may
         also be an ADVERT object carrying advertising (OPWA) data.

         Each sender host must periodically send a PATH message
         containing the sender descriptor(s) describing its own data
         stream(s), for a given session.  Each sender descriptor is
         forwarded and replicated as necessary to follow the delivery
         path(s) for a data packet from the same sender, finally
         reaching the applications on all receivers (except not a
         receiver included in the sender process).

         At each node, a route must be computed independently for each
         sender descriptors being forwarded.  These routes, obtained
         from the uni/multicast routing table, generally depend upon the
         (sender host address, DestAddress) pairs, and consist of a list
         of outgoing interfaces.  Then the descriptors being forwarded
         through the same outgoing interface can be packed into as few



Braden, Zhang, et al.  Expiration: September 1995              [Page 27]


Internet Draft             RSVP Specification                 March 1995


         PATH messages as possible.  Note that multicast routing of path
         information is based on the sender address(es) from the sender
         descriptors, not the IP source address; this is necessary to
         prevent routing loops; see Section 4.3.  PHOP (i.e., the
         RSVP_HOP object) of each PATH message should contain the IP
         source address, the interface address through which the message
         is sent.

         PATH messages are processed at each node they reach to create
         path state, which includes SENDER_TEMPLATE object and possibly
         CREDENTIAL, SENDER_TSPEC, and ADVERT objects.  If an error is
         encountered while processing a PATH message, a PERR message is
         sent to all senders implied by the SENDER_TEMPLATEs in the
         sender descriptor list.

      4.1.4 Resv Messages

         RESV messages carry reservation requests hop-by-hop from
         receivers to senders, along the reverse paths of data flow for
         the session.  The IP destination address of a RESV message is
         the unicast address of a previous-hop node, obtained from the
         path state.  The Next Hop address (in the RSVP_HOP object)
         should be the IP address of the (incoming) interface through
         which the RESV message is sent. The IP source address is an
         address of the node that sent the message (if possible, the
         address of the particular interface through which it was sent).

         The permissible sequence of objects in a RESV message depends
         upon the reservation style specified in the STYLE object.
         Currently, object types Style-WF and Style-FF of class STYLE
         are defined (see Appendix A).

         The RESV message format is as follows:

             <Resv Message> ::= <Common Header> <SESSION>

                                     [ <SESSION_GROUP> ]  <RSVP_HOP>

                                     [ <INTEGRITY> ] [ <TIME_VALUES> ]

                                     [ <CREDENTIAL> ]

                                     <style-specific tail>

             <style-specific-tail> ::=

                         <Style-WF> [ <FILTER_SPEC> ]  <FLOWSPEC> |




Braden, Zhang, et al.  Expiration: September 1995              [Page 28]


Internet Draft             RSVP Specification                 March 1995


                         <Style-FF> <flow descriptor list>

             <flow descriptor list> ::= <empty> |

                         <flow descriptor list> <FILTER_SPEC> <FLOWSPEC>


         The reservation scope, i.e., the set of senders towards which a
         particular reservation is to be forwarded, is determined by
         matching FILTER_SPEC objects against the path state created
         from SENDER_TEMPLATE objects, considering any wildcards that
         may be present.

      4.1.5 Error Messages

         There are two types of RSVP error messages:

         o    PERR messages result from PATH messages and travel towards
              senders.  PERR messages are routed hop-by-hop like RESV
              messages; at each hop, the IP destination address is the
              unicast address of a previous hop.

         o    RERR messages result from RESV messages and travel hop-
              by-hop towards the appropriate receivers, routed by the
              reservation state.  At each hop, the IP destination
              address is the unicast address of a next-hop node.
              Routing is discussed below.

         RSVP error messages are triggered only by processing of PATH
         and RESV messages; errors encountered while processing error or
         teardown messages must not create error messages.


             <PathErr message> ::= <Common Header> <SESSION> <RSVP_HOP>

                                       [ <INTEGRITY> ]  <ERROR_SPEC>

                                       <sender descriptor>

             <sender descriptor list> ::= (see earlier definition)


             <ResvErr Message> ::= <Common Header> <SESSION> <RSVP_HOP>

                                       [ <INTEGRITY> ]  <ERROR_SPEC>

                                       [ <CREDENTIAL> ] <style-specific tail>




Braden, Zhang, et al.  Expiration: September 1995              [Page 29]


Internet Draft             RSVP Specification                 March 1995


             <style-specific tail> ::= (see earlier definition)



         The ERROR_SPEC specifies the error.  It includes the IP address
         of the node that detected the error, called the Error Node
         Address.

         When a PATH or RESV message has been "packed" with multiple
         sets of elementary parameters, the RSVP implementation should
         process each set independently and return a separate error
         message for each that is in error.

         An error message may be duplicated and forwarded unchanged.  In
         general, error messages should be delivered to the applications
         on all the session nodes that (may have) contributed to this
         error.

         o    A PERR message is forwarded to all previous hops for all
              senders listed in the Sender Descriptor List.

         o    The node that creates a RERR message as the result of
              processing a RESV message should send the RERR message out
              the interface through which the RESV arrived.

              In succeeding hops, the routing of a RERR message depends
              upon its style and upon routing.  In general, a RERR
              message is sent out some subset of the outgoing interfaces
              specified for multicast routing, using Error Node Address
              as the source address and DestAddress as the destination.
              (This rule is necessary to prevent packet loops; see
              Section 4.3 below).  Within this set of outgoing
              interfaces, a RERR message is sent only to next hop(s)
              whose RESV message(s) created the error; this in turn
              depends upon the merging of flowspecs.  Assume that a
              reservation whose error is being reported was formed by
              merging two flowspecs Q1 and Q2 from different next hops.

              -    If Q1 = Q2, the error message should be forwarded to
                   both next hops.

              -    If Q1 < Q2, the error message should be forwarded
                   only to the next hop for Q2.

              -    If Q1 and Q2 are incomparable, the error message
                   should be forwarded to both next hops, and the LUB
                   flag should be turned on.




Braden, Zhang, et al.  Expiration: September 1995              [Page 30]


Internet Draft             RSVP Specification                 March 1995


              The ERROR_SPEC and the LUB-flag should be delivered to the
              receiver application.  In the case of an Admission Control
              error, the style-specific tail will contain the FLOWSPEC
              object that failed.  If the LUB-flag is off, this should
              be the same as a FLOWSPEC in a RESV message sent by this
              application; otherwise, they may differ.

              An error in a FILTER_SPEC object in a RESV message will
              normally be detected at the first RSVP hop from the
              receiver application, i.e., within the receiver host.
              However, an admission control failure caused by a FLOWSPEC
              or a CREDENTIAL object may be detected anywhere along the
              path(s) to the sender(s).

      4.1.6 Teardown Messages

         There are two types of RSVP Teardown message, PTEAR and RTEAR.

         o    PTEAR messages delete path state (which in turn may delete
              reservations state) and travel towards all receivers that
              are downstream from the point of initiation.  PTEAR
              messages are routed like PATH messages, and their IP
              destination address is DestAddress for the session.

         o    RTEAR messages delete reservation state and travel towards
              all matching senders upstream from the point of teardown
              initiation.  RTEAR message are routed like RESV messages,
              and their IP destination address is the unicast address of
              a previous hop.

             <PathTear Message> ::= <Common Header> <SESSION> <RSVP HOP>

                                         [ <INTEGRITY> ]

                                         <sender descriptor list>

             <sender descriptor list> ::= (see earlier definition)

             <ResvTear Message> ::= <Common Header> <SESSION> <RSVP HOP>

                                         [ <INTEGRITY> ]  [ <CREDENTIAL> ]

                                         <style-specific tail>

             <style-specific tail> ::= (see earlier definition)


         Flowspec objects in the style-specific tail of a RTEAR message



Braden, Zhang, et al.  Expiration: September 1995              [Page 31]


Internet Draft             RSVP Specification                 March 1995


         will be ignored and may be omitted.

         If the state being deleted was created with user credentials
         from a CREDENTIAL field, then the matching PTEAR or RTEAR
         message must include matching CREDENTIAL field(s).

         [There is a problem here: tearing down path state may
         implicitly delete reservation state.  But a PTEAR message does
         not have credentials for the reservation state, only for the
         path state.  Some argue that a CREDENTIAL may not be needed in
         teardown messages, on the assumption that false teardown
         messages can be injected only with the collusion of routers
         along the data path, and in that case, the colluding router can
         just as well stop delivering the RESV messages, which will have
         the same effect.]

   4.2 Sending RSVP Messages

      RSVP messages are sent hop-by-hop between RSVP-capable routers as
      "raw" IP datagrams, protocol number 46.  Raw IP datagrams are
      similarly intended to be used between an end system and the
      first/last hop router; however, it is also possible to encapsulate
      RSVP messages as UDP datagrams for end-system communication, as
      described in Appendix C.  UDP encapsulation will simplify
      installation of RSVP on current end systems, particularly when
      firewalls are in use.

      Under overload conditions, lost RSVP control messages could cause
      the loss of resource reservations.  Routers should be configured
      to give a preferred class of service to RSVP packets.  RSVP should
      not use significant bandwidth, but the queueing delay for RSVP
      messages needs to be controlled.

      An RSVP PATH or RESV message consists of a small root segment
      followed by a variable-length list of objects, which may overflow
      the capacity of one datagram.  IP fragmentation is inadvisable,
      since it has bad error characteristics; RSVP-level fragmentation
      should be used.  That is, a message with a long list of
      descriptors will be divided into segments that will fit into
      individual datagrams, each carrying the same root fields.  Each of
      these messages will be processed at the receiving node, with a
      cumulative effect on the local state.  No explicit reassembly is
      needed.

      Since RSVP messages are normally expected to be generated and sent
      hop-by-hop, their MTU should be determined by the MTU of each
      interface.




Braden, Zhang, et al.  Expiration: September 1995              [Page 32]


Internet Draft             RSVP Specification                 March 1995


      [There may be rare instances in which this does not work very
      well, and in which manual configuration would not help.  The
      problem case is an interface connected to a non-RSVP cloud in
      which some particular link far away has a smaller MTU.  This would
      affect only those sessions that happened to use that link.
      Proper solution to this case would require MTU discovery
      separately for each interface and each session, which is a very
      large amount of machinery and some overhead for a rare (?) case.
      Best approach seems to be to rely on IP fragmentation and
      reassembly for this case.]

   4.3 Avoiding RSVP Message Loops

      We must ensure that the rules for forwarding RSVP control messages
      avoid looping.  In steady state, PATH and RESV messages are
      forwarded on each hop only once per refresh period.  This avoids
      directly looping packets, but there is still the possibility of an
      " auto-refresh" loop, clocked by the refresh period.  The effect
      of such a loop is to keep state active "forever", even if the end
      nodes have ceased refreshing it (but the state will be deleted
      when the receivers leave the multicast group and/or the senders
      stop sending PATH messages).

      In addition, error and teardown messages are forwarded immediately
      and are therefore subject to direct looping.

      PATH messages are forwarded using routes determined by the
      appropriate routing protocol.  For routing that is source-
      dependent (e.g., some multicast routing algorithms), the RSVP
      daemon must route each sender descriptor separately using the
      source addresses found in the SENDER_TEMPLATE objects.  This
      should ensure that there will be no auto-refresh loops of PATH
      information, even in a topology with cycles.

      Since PATH messages don't loop, they create path state defining a
      loop-free reverse path to each sender.  As a result, RESV and
      RTEAR messages directed to particular senders cannot loop.  PERR
      messages are always directed to particular senders and therefore
      cannot loop.  However, there is a potential auto-refresh problem
      for RESV, RTEAR, and RERR messages with wildcard scope, as we now
      discuss.

      If the topology has no loops, then auto-refresh can be avoided,
      even for wildcard scope, with the following rule:


         A reservation request received from next hop N must not be
         forwarded to N.



Braden, Zhang, et al.  Expiration: September 1995              [Page 33]


Internet Draft             RSVP Specification                 March 1995


      This rule is illustrated in Figure 10, which shows a transit
      router with one sender and one receiver on each interface (and
      assumes one next/previous hop per interface).  Interfaces a and c
      are both outgoing and incoming interfaces for this session.  Both
      receivers are making wildcard-scope reservations, in which the
      RESV messages are forwarded to all previous hops for senders in
      the group, with the exception of the next hop from which they
      came.  These result in independent reservation requests in the two
      directions, without an auto-refresh loop.

                         ________________
                      a |                | c
      ( R1, S1 ) <----->|     Router     |<-----> ( R2, S2 )
                        |________________|

        Send & Receive on (a)    |     Send & Receive on (c)
                                 |
        WF( *{3B}) <-- (a)       |      (c) <-- WF( *{3B})
                                 |
        WF( *{4B}) --> (a)       |      (c) --> WF( *{4B})
                                 |
                                 |
            Reserve on (a)       |      Reserve on (c)
              __________         |        __________
             |  * {4B}  |        |       |   * {3B} |
             |__________|        |       |__________|
                                 |

           Figure 10: Avoiding Auto-Refresh in Non-Looping Topology


      However, further effort is needed to prevent auto-refresh loops
      from wildcard-scope reservations in the presence of cycles in the
      topology.  [TBD!!].

      We treat routing of RERR messages as a special case.  They are
      sent with unicast addresses of next hops, but the multicast
      routing is used to prevent loops.  As explained above, RERR
      messages are forwarded to a subset of the multicast tree to
      DestAddress, rooted at the node on which the error was discovered.
      Since multicast routing cannot create loops, this will prevent
      loops for RERR messages.

      [Open question about Figure 10: should it be possible to have
      incompatible reservation styles on the two interfaces?  For
      example, if R1 requests a WF reservation and R2 requests a FF
      reservation, it is logically possible to make the corresponding
      reservations on the two different interfaces.  The current



Braden, Zhang, et al.  Expiration: September 1995              [Page 34]


Internet Draft             RSVP Specification                 March 1995


      implementation does NOT allow this; instead, it prevents mixing of
      incompatible styles in the same session on a node, even if they
      are on different interfaces.]

   4.4 Local Repair

      Each RSVP daemon periodically sends refreshes to its next/previous
      hops.  An important optimization would allow the local routing
      protocol module to notify the RSVP daemon of route changes for
      particular destinations.  The RSVP daemon should use this
      information to trigger an immediate refresh of state for these
      destinations, using the new route.  This allows fast adaptation to
      routing changes without the overhead of a short refresh period.

   4.5 Time Parameters

      For each element of state, there are two time parameters: the
      refresh period R and the time-to-live value T.  R specifies the
      period between sending successive refreshes of this data.  T
      controls how long state will be retained after refreshes stop
      appearing, and depends upon period between receiving successive
      refreshes.  Specifically, R <= T, and the "cleanout time" is K *
      T.  Here K is a small integer; K-1 successive messages may be lost
      before state is deleted.  Currently K = 3 is suggested.

      Clearly, a smaller T means increased RSVP overhead.  If the router
      does not implement local repair, a smaller T improves the speed of
      adapting to routing changes.  With local repair, a router can be
      more relaxed about T, since the periodic refresh becomes only a
      backstop robustness mechanism.

      There are three possible ways for a router to determine R and T.

      o    Default values are configured in the router.  Current
           defaults are 30 seconds for T and R.

      o    A router may adjust the value of T dynamically to keep a
           constant total overhead due to refresh traffic; as more
           sessions appear, the period would be lengthened.  In this
           case, R = T could be used.

      o    R and T can be specified by the end systems.  For this
           purpose, PATH and RESV messages may contain the optional
           TIM_VALUES object.  When messages are merged and forwarded to
           the next hop, R should be the minimum R that has been
           received, and T should be the maximum T that has been
           received.   Thus, the largest T determines how long state is
           retained, and the smallest R determines the responsiveness of



Braden, Zhang, et al.  Expiration: September 1995              [Page 35]


Internet Draft             RSVP Specification                 March 1995


           RSVP to route changes.  In the first hop, they are expected
           to be equal.  The RSVP API might allow an application to
           override the default value for a particular session.
















































Braden, Zhang, et al.  Expiration: September 1995              [Page 36]


Internet Draft             RSVP Specification                 March 1995


   4.6 RSVP Interfaces

      RSVP on a router has interfaces to routing and to traffic control
      in the kernel.  RSVP on a host has an interface to applications
      (i.e, an API) and also an interface to traffic control (if it
      exists on the host).

      4.6.1 Application/RSVP Interface

         This section describes a generic interface between an
         application and an RSVP control process.  The details of a real
         interface may be operating-system dependent; the following can
         only suggest the basic functions to be performed.  Some of
         these calls cause information to be returned asynchronously.

         o    Register

              Call: REGISTER( DestAddress , DestPort

                         [ , SESSION_object ]  , SND_flag , RCV_flag

                         [ , Source_Address ]  [ , Source_Port ]

                         [ , Sender_Template ]  [ , Sender_Tspec ]

                         [ , Data_TTL ]  [ , UserCredential ]

                         [ , Upcall_Proc_addr ] )  -> Session-id


              This call initiates RSVP processing for a session, defined
              by DestAddress together with the TCP/UDP port number
              DestPort.  If successful, the REGISTER call returns
              immediately with a local session identifier Session-id,
              which may be used in subsequent calls.

              The SESSION_object parameter is included as an escape
              mechanism to support some more general definition of the
              session ("generalized destination port"), should that be
              necessary in the future.  Normally SESSION_object will be
              omitted; if it is supplied, it should be an
              appropriately-formatted representation of a SESSION
              object.

              SND_flag should be set true if the host will send data,
              and RCV_flag should be set true if the host will receive
              data.  Setting neither true is an error.  The optional
              parameters Source_Address, Source_Port, Sender_Template,



Braden, Zhang, et al.  Expiration: September 1995              [Page 37]


Internet Draft             RSVP Specification                 March 1995


              Sender_Tspec, and Data_TTL are all concerned with a data
              source, and they will be ignored unless SND_flag is true.

              If SND_FLAG is true, a successful REGISTER call will cause
              RSVP to begin sending PATH messages for this session using
              these parameters, which are interpreted as follows:

              -    Source_Address

                   This is the address of the interface from which the
                   data will be sent.  If it is omitted, a default
                   interface will be used.

              -    Source_Port

                   This is the UDP/TCP port from which the data will be
                   sent.  If it is omitted or zero, the port is "wild"
                   and can match any port in a FILTERSPEC.

              -    Sender_Template

                   This parameter is included as an escape mechanism to
                   support a more general definition of the sender
                   ("generalized source port").  Normally this parameter
                   may be omitted; if it is supplied, it should be an
                   appropriately formatted representation of a
                   SENDER_TEMPLATE object.

              -    Sender_Tspec

                   This parameter is a Tspec describing the traffic flow
                   to be sent.  It may be included to prevent over-
                   reservation on the initial hops.

              -    Data_TTL

                   This is the (non-default) IP Time-To-Live parameter
                   that is being supplied on the data packets.  It is
                   needed to ensure that Path messages do not have a
                   scope larger than multicast data packets.

              Finally, Upcall_Proc_addr is the address of an upcall
              procedure to receive asynchronous error or event
              notification; see below.

         o    Reserve

              Call: RESERVE( session-id, style, style-dependent-parms )



Braden, Zhang, et al.  Expiration: September 1995              [Page 38]


Internet Draft             RSVP Specification                 March 1995


              A receiver uses this call to make a resource reservation
              for the session registered as `session-id'.  The style
              parameter indicates the reservation style.  The rest of
              the parameters depend upon the style, but generally these
              will include appropriate flowspecs and filter specs.

              The first RESERVE call will initiate the periodic
              transmission of RESV messages.  A later RESERVE call may
              be given to modify the parameters of the earlier call (but
              note that changing the reservations may result in
              admission control failure, depending upon the style).

              The RESERVE call returns immediately.  Following a RESERVE
              call, an asynchronous ERROR/EVENT upcall may occur at any
              time.

         o    Release

              Call: RELEASE( session-id )

              This call will terminate RSVP state for the session
              specified by session-id.  It may send appropriate teardown
              messages and will cease sending refreshes for this
              session-id.

         o    Error/Event Upcalls

              Call: <Upcall_Proc> (session-id, Info_type, List_count

                            [ ,Error_code ,Error_value ,LUB-flag ]

                            [ ,Filter_spec_list ]  [ ,Flowspec_list ]

                            [ ,Advert_list ] )


              Here "Upcall_Proc" represents the upcall procedure whose
              address was supplied in the REGISTER call.

              This upcall may occur asynchronously at any time after a
              REGISTER call and before a RELEASE call, to indicate an
              error or an event.  Currently there are three upcall
              types, distinguished by the Info_type parameter:

              1.   Info_type = Path Event

                   A Path Event upcall indicates the receipt of a PATH
                   message, indicating to the application that there is



Braden, Zhang, et al.  Expiration: September 1995              [Page 39]


Internet Draft             RSVP Specification                 March 1995


                   at least one active sender.  This upcall provides
                   synchronizing information to the receiver
                   application, and it may also provide parallel lists
                   of senders (in Filter_spec_list), traffic
                   descriptions (in Flowspec_list), and service
                   advertisements (in Advert_list).  'List_count' is the
                   number in each list;  where these objects are
                   missing, corresponding null objects must appear.

                   Error_code and Error_value, and LUB-flag should be
                   ignored in a Path Event upcall.

              2.   Info_type = Path Error

                   An Path Error event indicates an error in processing
                   a sender descriptor originated by this sender.  The
                   Error_code parameter will define the error, and
                   Error_value may supply some additional (perhaps
                   system-specific) data about the error.  `List_count'
                   will be 1, and Filter_spec_list and Flowspec_list
                   will contain the Sender_Template and the Sender_Tspec
                   supplied in the REGISTER call; Advert_list will
                   contain one NULL object.

              3.   Info_type = Resv Error

                   An Resv Error event indicates an error in processing
                   a RESV message to which this application contributed.
                   The Error_code parameter will define the error, and
                   Error_value may supply some additional (perhaps
                   system-specific) data on the error.

                   `List_count' will be 1, and Filter_spec_list and
                   Flowspec_list will contain one FILTER_SPEC and one
                   FLOWSPEC object.  These objects are taken from the
                   RESV message that caused the error (unless the LUB-
                   flag is on, in which case FLOWSPEC may differ).

              Although RSVP messages indicating path events or errors
              may be received periodically, the API should make the
              corresponding asynchronous upcall to the application only
              on the first occurrence, or when the information to be
              reported changes.

      4.6.2 RSVP/Traffic Control Interface

         In each router and host, enhanced QoS is achieved by a group of
         inter-related traffic control functions:  a packet classifier,



Braden, Zhang, et al.  Expiration: September 1995              [Page 40]


Internet Draft             RSVP Specification                 March 1995


         an admission control module, and a packet scheduler.  This
         section describes a generic RSVP interface to traffic control.

         1.   Make a Reservation

              Call: Rhandle =  TC_AddFlowspec( Flowspec, Police_Flag

                                     [ , Sender_Tspec]

                                     [ , SD_rank , SD_end_flag ] )


              This call passes a Flowspec defining a desired QoS to
              admission control.  It may also pass Sender_Tspec, the
              maximum traffic characteristics computed over the
              SENDER_TSPECs of senders that will contribute data packets
              to this reservation.  Police_Flag is a Boolean parameter
              that indicates whether traffic policing should be applied
              at this point.

              The SD_rank and SD_end_flag fields are used for a member
              of a session group.  SD_rank is the rank value from the
              SESSION_GROUP object.  The call is made with each of the
              sessions in the group, and SD_end_flag is set true for the
              last one.

              This call returns an error code if Flowspec is malformed
              or if the requested resources are unavailable.  Otherwise,
              it establishes a new reservation channel corresponding to
              Rhandle.  It returns the opaque number Rhandle for
              subsequent references to this reservation.

         2.   Add Filter

              Call: TC_AddFilter( Rhandle, Session, Filterspec )


              This call is used to define a filter corresponding to the
              given handle, following a successful TC_AddFlowspec call.

         3.   Modify or Delete Filter

              Call: TC_ModFilter( Rhandle, Session,

                                             [ new_Filterspec] )


              This call can modify an existing filter or replace an



Braden, Zhang, et al.  Expiration: September 1995              [Page 41]


Internet Draft             RSVP Specification                 March 1995


              existing filter with no filter (i.e., delete the filter).

         4.   Modify or Delete Flowspec

              Call: TC_ModFlowspec( Rhandle

                             [, new_Flowspec [ ,Sender_Tspec]] )


              This call can modify an existing reservation or delete the
              reservation.  If new_Flowspec is included, it is passed to
              Admission Control; if it is rejected, the current flowspec
              is left in force.  If new_Flowspec is omitted, the
              reservation is deleted and Rhandle is invalidated.

         5.   OPWA Update

              Call: TC_Advertise( interface, Adspec

                              [ ,Sender_TSpec ] ) -> New_Adspec


              This call is used for OPWA to compute the outgoing
              advertisement New_Adspec for a specified interface.

         6.   Initialize Traffic Control

              Call: TC_Initialize(interface )


              This call is used when RSVP initializes its state, to
              clear out all existing classifier and/or packet scheduler
              state for a specified interface.

      4.6.3 RSVP/Routing Interface

         An RSVP implementation needs the following support from the
         packet forwarding and routing mechanism of the node.

         o    Promiscuous receive mode for RSVP messages

              Any datagram received for IP protocol 46 is to be diverted
              to the RSVP program for processing, without being
              forwarded.  The identity of the interface on which it is
              received should also be available to the RSVP daemon.

         o    Route discovery




Braden, Zhang, et al.  Expiration: September 1995              [Page 42]


Internet Draft             RSVP Specification                 March 1995


              RSVP must be able to discover the route(s) that the
              routing algorithm would have used for forwarding a
              specific datagram.

                 GetUcastRoute( DestAddress ) -> OutInterface

                 GetMcastRoute( SrcAddress, DestAddress )

                                              -> OutInterface_list


         o    Route Change Notification

              Routing may provide an asynchronous notification to RSVP
              that a specified route has changed.

                 New_Ucast_Route( DestAddress ) -> new_OutInterface

                 New_Mcast_Route( SrcAddress, DestAddress )

                                                -> new_OutInterface_list


         o    Outgoing Link Specification

              RSVP must be able to force a (multicast) datagram to be
              sent on a specific outgoing virtual link, bypassing the
              normal routing mechanism.  A virtual link may be a real
              outgoing link or a multicast tunnel.  Outgoing link
              specification is necessary because RSVP may send different
              versions of outgoing PATH messages on different
              interfaces, for the same source and destination addresses,
              and to avoid loops.

         o    Discover Interface List

              RSVP must be able to learn what real and virtual
              interfaces exist.













Braden, Zhang, et al.  Expiration: September 1995              [Page 43]


Internet Draft             RSVP Specification                 March 1995


5. Message Processing Rules

   This generic description of RSVP operation assumes the following data
   structures.  An actual implementation may use additional or different
   structures to optimize processing.

   o    PSB -- Path State Block

        Each PSB holds path state for a particular (session, sender)
        pair, defined by SESSION and SENDER_TEMPLATE objects,
        respectively.  PSB contents include a PHOP object and possibly
        SENDER_TSPEC, CREDENTIAL, and/or ADVERT objects from PATH
        messages.

   o    RSB -- Reservation State Block

        RSB's are used to hold reservation state.  Each RSB holds
        reservation state for the 4-tuple: (session, next hop, style,
        filterspec), defined in SESSION, NHOP (i.e., RSVP_HOP), STYLE,
        and FILTER_SPEC objects, respectively.  We assume that RSB
        contents include the outgoing interface OI that is implied by
        NHOP.  RSB contents also include a FLOWSPEC object and may
        include a CERTIFICATE object.

   MESSAGE ARRIVES

   Verify version number, checksum, and length fields of common header,
   and discard message if it fails.

   Further processing depends upon message type.

   PATH MESSAGE ARRIVES

        Start with the Refresh_Needed flag off.

        Each sender descriptor object sequence in the message defines a
        sender.  Process each sender as follows.

        1.   If there is a CREDENTIAL object, verify it; if it is
             unacceptable, build and send a PERR message, drop the PATH
             message, and return.

        2.   If there is no path state block (PSB) for the (session,
             sender) pair then:

             o    Create a new PSB.

             o    Set a cleanup timer for the PSB.  If this is the first



Braden, Zhang, et al.  Expiration: September 1995              [Page 44]


Internet Draft             RSVP Specification                 March 1995


                  PSB for the session, set a refresh timer for the
                  session.

             o    Copy PHOP into the PSB.  Copy into the PSB any of the
                  following objects that are present in the message:
                  CREDENTIAL, SENDER_TSPEC, and/or ADVERT.  Copy the
                  EntryPolice flag from the common header into the PSB.

             o    Call the appropriate route discovery routine, using
                  DestAddress from SESSION and (for multicast routing)
                  SrcAddress from SENDER_TEMPLATE.  Store the resulting
                  routing bit mask ROUTE_MASK in the PSB.

        3.   Otherwise (there is a matching PSB):

             o    If CREDENTIAL differs between message and PSB, verify
                  new CREDENTIAL.  If it is acceptable, copy it into
                  PSB.  Otherwise, build and send a PERR message for
                  "Bad Credential", drop the PATH message, and return.

             o    Restart cleanup timer.

             o    Update the PSB with values from the message, as
                  follows.  Copy the ADVERT object, if any, into the
                  PSB.  Copy the EntryPolice flag into the PSB.

                  If the values of PHOP or SEND_TSPEC differ between the
                  message and the PSB, copy the new values into the PSB
                  and turn on the Refresh_Needed flag.  If SEND_TSPEC
                  has changed, reservations matching S may also change;
                  this may be deferred until a RESV refresh arrives.

             o    Call the appropriate route discovery routine and
                  compare the route mask with the ROUTE_MASK value
                  already in the PSB; if a new bit (interface) has been
                  added, turn on the Refresh_Needed flag.  Store new
                  ROUTE_MASK in the PSB.

        4.   If the Refresh_Needed flag is now set, execute the PATH
             REFRESH event sequence (below).


   PATH TEAR MESSAGE ARRIVES

        o    If there is no path state for this destination, drop the
             message and return.

        o    Forward a copy of the PTEAR message using the same rules as



Braden, Zhang, et al.  Expiration: September 1995              [Page 45]


Internet Draft             RSVP Specification                 March 1995


             for a PATH message (see PATH REFRESH).

        o    Each sender descriptor in the PTEAR message contains a
             SENDER_TEMPLATE object defines a sender S; process it as
             follows.

             1.   Locate the PSB for the pair: (session, S).  If none
                  exists, continue with next sender descriptor.

             2.   Examine the RSB's for this session and delete any
                  reservation state associated with sender S, depending
                  upon the reservation style.  For example:


                  Delete a WF reservation for which S is the only
                       sender.


                  Delete an FF reservation for S.

             3.   Delete the PSB.


   PATH ERROR MESSAGE ARRIVES

        o    If there are no existing PSB's for SESSION then drop the
             PERR message and return.

        o    Look up the PSB for (session, sender); sender is defined by
             SENDER_TEMPLATE.  If no PSB is found, drop PERR message and
             return.

        o    If PHOP in PSB is local API, deliver error to application
             via an upcall:

                 Call: <Upcall_Proc>( session-id, Path Error, 1,
                               Error_code, Error_value, 0,
                               SENDER_TEMPLATE, NULL, NULL)


             Note that CREDENTIAL, SENDER_TSPEC, and ADVERT objects in
             the message is ignored.

             Otherwise (PHOP is not local API), forward a copy of the
             PERR message to the PHOP node.


   RESV MESSAGE ARRIVES



Braden, Zhang, et al.  Expiration: September 1995              [Page 46]


Internet Draft             RSVP Specification                 March 1995


        A RESV message arrives through outgoing interface OI.

        o    Check the SESSION object.

             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.
             However, do not send the RERR message if the style has
             wildcard reservation scope and this is not the receiver
             host itself.

        o    Check the STYLE object.

             If style in the message conflicts with the style of any
             reservation for this session in place on any interface,
             reject the RESV message by building and sending a RERR
             message specifying "Bad Style", drop the RESV message, and
             return.

        o    Check the CREDENTIAL object.

             Verify the CREDENTIAL field (if any) to check permission to
             create a reservation.  [This check may also involve the
             CREDENTIAL fields from the PSB's in the scope of this
             reservation; in that case, it would better fit below in
             processing the individual flow descriptors.]

        o    Check for path state

             If there are no PSB's matching the scope of this
             reservation, build and send a RERR message specifying "No
             Sender Information", drop the RESV message, and return.

        o    Make reservations

             Process the style-specific tail sequence.

             For FF style, execute the following steps for each b flow
             descriptor, i.e., each (FLOWSPEC, FILTERSPEC) pair.  For WF
             style execute the following once, using some internal
             placeholder "WILD_FILTER" for FILTERSPEC to indicate
             wildcard scope.

             1.   Find or create a reservation state block (RSB) for the
                  4-tuple:  (SESSION, NHOP, style, FILTERSPEC).

             2.   Start or restart the cleanout timer on the RSB.




Braden, Zhang, et al.  Expiration: September 1995              [Page 47]


Internet Draft             RSVP Specification                 March 1995


             3.   Start a refresh timer for this session if none was
                  started.

             4.   If the RSB existed and if FLOWSPEC and the
                  SENDER_TSPEC objects are unchanged, drop the RESV
                  message and return.

             5.   Compute Sender_Tspec as the maximum over the
                  SENDER_TSPEC objects of the PSB's within the scope of
                  the reservation.

             6.   Set Police_flag on if any PSB's in the scope have the
                  EntryPolice flag on, or if the style is WF and there
                  is more than one PSB in the scope, otherwise off.

             7.   Computer K_Flowspec, the effective kernel flowspec, as
                  the maximum of the FLOWSPEC values in all RSB's for
                  the same (SESSION, OI, FILTERSPEC) triple.  Similarly,
                  the kernel filter spec K_filter is either the
                  FILTER_SPEC object under consideration (unitary
                  scope), or it is WILD_FILTER (wildcard scope).

                  If there was no previous kernel reservation in place
                  for (SESSION, OI, FILTERSPEC), call the kernel
                  interface module:

                     TC_AddFlowspec( Sender_Tspec, K_flowspec, Police_Flag )

                  If this call fails, build and send a RERR message
                  specifying "Admission control failed", drop the RESV
                  message, and return.  Otherwise, record the kernel
                  handle K_handle returned by the call in the RSB(s).
                  Then call:

                     TC_AddFilter( K_handle, K_Filter)

                  to set the filter, drop the RESV message and return.

                  /item However, if there was a previous kernel
                  reservation with handle K_handle, call the kernel
                  interface module:

                     TC_ModFlowspec( K_handle, K_Flowspec, Sender_Tspec)

                  If this call fails, build and send a RERR message
                  specifying "Admission control failed".  In any case,
                  drop the RESV message and return.




Braden, Zhang, et al.  Expiration: September 1995              [Page 48]


Internet Draft             RSVP Specification                 March 1995


        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 (see Appendix A) is set to
        the IP address of OI, and the message is sent unicast to NHOP.

        created

   RESV TEAR MESSAGE ARRIVES

        A RTEAR message arrives on outgoing interface OI.

        o    If there are no existing PSB's for SESSION then drop the
             RTEAR message and return.

        o    Process the style-specific tail sequence to tear down
             reservations.

             For FF style, execute the following steps for each b flow
             descriptor, i.e., each (FLOWSPEC, FILTERSPEC) pair.  For WF
             style execute the following once, using some internal
             placeholder "WILD_FILTER" for FILTERSPEC to indicate
             wildcard scope.

             1.   Find matching RSB(s) for the 4-tuple: (SESSION, NHOP,
                  style, FILTERSPEC).  If no RSB is found, continue with
                  next flow descriptor, if any.

             2.   Delete the RSB(s).

             3.   If there are no more RSBs for the same (SESSION, OI,
                  FILTERSPEC/) triple, call the kernel interface module:

                     TC_ModFlowspec( K_handle )

                  to delete the reservation.  Then build and forward a
                  new RERR message.

                  -    WF style: send a copy to each PHOP among all
                       matching senders.

                  -    FF style: Send to PHOP of matching PSB.

             4.   Otherwise (there are other RSB's for the same
                  reservation), recompute K_Flowspec and call the kernel
                  interface module:

                     TC_ModFlowspec( K_handle, K_Flowspec, Sender_Tspec)




Braden, Zhang, et al.  Expiration: September 1995              [Page 49]


Internet Draft             RSVP Specification                 March 1995


                  to update the reservation, and then execute the RESV
                  REFRESH sequence (below).  If this kernel call fails,
                  return; the prior reservation will remain in place.


   RESV ERROR MESSAGE ARRIVES

        o    Call the appropriate route discovery routine, using
             DestAddress from SESSION and (for multicast routing)
             SrcAddress from the Error Node field in the ERRORS object.
             Let the resulting routing bit mask be M.

        o    Determine the set of RSBs matching the triple: (SESSION,
             style, FILTERSPEC).  If no RSB is found, drop RERR message
             and return.

             Recompute the maximum over the FLOWSPEC objects of this set
             of RSB's.  If the LUB was used in this computation, turn on
             the LUB-flag in the received RESV message.

        o    Delete from the set of RSVs any whose OI does not appear in
             the bit mask M and whose NHOP is not the local API.  If
             none remain, drop RERR message and return.

             For each PSB in the resulting set, do the following step.

        o    If NHOP in PSB is local API, deliver error to application
             via an upcall:

                 Call: <Upcall_Proc>( session-id, Resv Error, 1,
                               Error_code, Error_value, LUB-flag,
                               FILTER_SPEC, FLOWSPEC, NULL)


             Here LUB-flag is taken from the received packet, as
             possibly modified above.

             Otherwise (NHOP is not local API), forward a copy of the
             RERR message to the PHOP node.


   PATH REFRESH

   This sequence may be entered by either the expiration of the path
   refresh timer for a particular session, or immediately as the result
   of processing a PATH message turning on the Refresh_Needed flag.

   For each virtual outgoing interface ("vif") V, build a PATH message



Braden, Zhang, et al.  Expiration: September 1995              [Page 50]


Internet Draft             RSVP Specification                 March 1995


   and send it to V.  To build the message, consider each PSB whose
   ROUTE_MASK includes V, and do the following:

   o    Pass the ADVERT and SENDER_TSPEC objects present in the PSB to
        the kernel call TC_Advertise, and get back a modified ADVERT
        object.  Pack this modified object into the PATH message being
        built.

   o    Create a sender descriptor sequence containing the
        SENDER_TEMPLATE, CREDENTIAL, and SENDER_TSPEC objects, if
        present in the PSB.  Pack the sender descriptor into the PATH
        message being built.

   o    If the PSB has the EntryPolice flag on and if interface V is not
        capable of policing, turn the EntryPolice flag on in the PATH
        message being built.

   o    If the maximum size of the PATH message is reached, send the
        packet out interface V and start packing a new one.

   RESV REFRESH

   This sequence may be entered by either the expiration of the
   reservation refresh timer for a particular session, or immediately as
   the result of processing a RESV message.

   Each PSB for this session is considered in turn, to compute a style-
   dependent tail sequence.  These sequences for a given PHOP are then
   packed into the same message(s) and sent to that PHOP.  The logic is
   somewhat different depending upon whether the scope of the
   reservations is wildcard or not (they may not be mixed).

   For each PSB that does not correspond to the API, do the following.

   o    Compute (FLOWSPEC, FILTER_SPEC) Pair

        Select each RSB in whose reservation scope the PSB falls, and
        compute the maximum over the FLOWSPEC objects of this set of
        RSB's.  Also, select an appropriate FILTER_SPEC.  The scope
        depends upon the style and the filter spec of the RSB:

        1.   WF: Select every RSB whose OI matches a bit in the
             ROUTE_MASK of the PSB.

             In this case, FILTER_SPEC is the standard WILD_FILTER.

        2.   FF: Select every RSB whose FILTER_SPEC matches
             SENDER_TEMPLATE in the RSB.  This matching process should



Braden, Zhang, et al.  Expiration: September 1995              [Page 51]


Internet Draft             RSVP Specification                 March 1995


             consider wildcards.

             In this case, FILTER_SPEC is taken from any of the matching
             RSB's. [?? Need to either 'merge' filter specs, which
             probably means to remove gratuitous wildcards??]

        This computation also yields a style (since style must be
        consistent across RSB's for given session).  [??Again, need
        merging rules]]

   o    Build RESV packets

        Append this (FLOWSPEC, FILTER_SPEC pair) to the RESV message
        being built for destination PHOP (from the PSB).  When the
        packet fills, or upon completion of all PSB's with the same
        PHOP, set the NHOP address in the message to the interface
        address and send the packet out that interface to the PHOP
        address.

































Braden, Zhang, et al.  Expiration: September 1995              [Page 52]


Internet Draft             RSVP Specification                 March 1995


   appendix
6. Object Type Definitions

   C-types are defined for the two Internet address families IPv4 and
   IP6.  To accomodate other address families, additional C-types could
   easily be defined.  These definitions are contained as an Appendix to
   ease updating.

   6.1 SESSION Class

      Currently, SESSION objects contain the pair: (DestAddress,
      DestPort), where DestAddress is the data destination address and
      DestPort is the UDP/TCP destination port.  Other SESSION C-Types
      could be defined in the future to support other demultiplexing
      conventions in the transport-layer or application layer.

      o    IPv4/UDP SESSION object: Class = 1, C-Type = 1

           +-------------+-------------+-------------+-------------+
           |             IPv4 DestAddress (4 bytes)                |
           +-------------+-------------+-------------+-------------+
           |        ////////////       |         DestPort          |
           +-------------+-------------+-------------+-------------+


      o    IP6/UDP SESSION object: Class = 1, C-Type = 129

           +-------------+-------------+-------------+-------------+
           |                                                       |
           +                                                       +
           |                                                       |
           +               IP6 DestAddress (16 bytes)              +
           |                                                       |
           +                                                       +
           |                                                       |
           +-------------+-------------+-------------+-------------+
           |        ////////////       |         DestPort          |
           +-------------+-------------+-------------+-------------+













Braden, Zhang, et al.  Expiration: September 1995              [Page 53]


Internet Draft             RSVP Specification                 March 1995


   6.2 SESSION_GROUP Class

      o    IPv4 SESSION_GROUP Object: Class = 2, C-Type = 1:


           +-------------+-------------+-------------+-------------+
           |               IPv4 Reference DestAddress              |
           +-------------+-------------+-------------+-------------+
           |      Session_Group ID     |    Count    |     Rank    |
           +-------------+-------------+-------------+-------------+


      o    IP6 SESSION_GROUP Object: Class = 2, C-Type = 129:


           +-------------+-------------+-------------+-------------+
           |                                                       |
           +                                                       +
           |                                                       |
           +               IP6 Reference DestAddress               +
           |                                                       |
           +                                                       +
           |                                                       |
           +-------------+-------------+-------------+-------------+
           |      Session-Group ID     |    Count    |     Rank    |
           +-------------+-------------+-------------+-------------+

























Braden, Zhang, et al.  Expiration: September 1995              [Page 54]


Internet Draft             RSVP Specification                 March 1995


   6.3 RSVP_HOP Class

      o    IPv4 RSVP_HOP object: Class = 3, C-Type = 1

           +-------------+-------------+-------------+-------------+
           |             IPv4 Next/Previous Hop Address            |
           +-------------+-------------+-------------+-------------+












































Braden, Zhang, et al.  Expiration: September 1995              [Page 55]


Internet Draft             RSVP Specification                 March 1995


      o    IP6 RSVP_HOP object: Class = 3, C-Type = 129

           +-------------+-------------+-------------+-------------+
           |                                                       |
           +                                                       +
           |                                                       |
           +             IP6 Next/Previous Hop Address             +
           |                                                       |
           +                                                       +
           |                                                       |
           +-------------+-------------+-------------+-------------+


      This object provides the IP address of the interface through which
      the last RSVP-knowledgeable hop forwarded this message.




































Braden, Zhang, et al.  Expiration: September 1995              [Page 56]


Internet Draft             RSVP Specification                 March 1995


   6.4 STYLE Class

      o    STYLE-WF object: Class = 4, C-Type = 1

           +-------------+-------------+-------------+-------------+
           |   Style=1   |   ////////  |   ////////  |  /////////  |
           +-------------+-------------+-------------+-------------+


      o    STYLE-FF object: Class = 4, C-Type = 2

           +-------------+-------------+-------------+-------------+
           |   Style=2   |   ////////  |   ////////  |  FD Count   |
           +-------------+-------------+-------------+-------------+

           FD Count

                The count of elements in the variable-length object list
                that follows.  See the RESV message format definition
                earlier.































Braden, Zhang, et al.  Expiration: September 1995              [Page 57]


Internet Draft             RSVP Specification                 March 1995


   6.5 Flowspec Class

      o    CSZ FLOWSPEC object: Class = 5, C-Type = 1


            +-----------+-----------+-----------+-----------+
            |                QoS Service Code               |
            +-----------+-----------+-----------+-----------+
            |        b: Token Bucket Depth (bits)           |
            +-----------+-----------+-----------+-----------+
            |        r: Average data rate (bits/sec)        |
            +-----------+-----------+-----------+-----------+
            |        d: Max end-to-end delay (ms)           |
            +-----------+-----------+-----------+-----------+
            |              (For Future Use)                 |
            +-----------+-----------+-----------+-----------+


           QoS Service Code

                Integer value defining what service is being requested.
                The values currently defined for this code are:

                1 = Guaranteed Service

                     The Tspec is (b, r), while the Rspec is (r).  (d)
                     is ignored.

                2 = Bounded-Delay Predictive Service

                     The Tspec is (b, r), while the Rspec is (d).




















Braden, Zhang, et al.  Expiration: September 1995              [Page 58]


Internet Draft             RSVP Specification                 March 1995


   6.6 FILTER_SPEC Class

      o    IPv4/UDP FILTER_SPEC object: Class = 6, C-Type = 1

           +-------------+-------------+-------------+-------------+
           |               IPv4 SrcAddress (4 bytes)               |
           +-------------+-------------+-------------+-------------+
           | Protocol Id |    //////   |          SrcPort          |
           +-------------+-------------+-------------+-------------+


      o    IP6/UDP FILTER_SPEC object: Class = 6, C-Type = 129

           +-------------+-------------+-------------+-------------+
           |                                                       |
           +                                                       +
           |                                                       |
           +               IP6 SrcAddress (16 bytes)               +
           |                                                       |
           +                                                       +
           |                                                       |
           +-------------+-------------+-------------+-------------+
           | Protocol Id |    //////   |          SrcPort          |
           +-------------+-------------+-------------+-------------+


      SrcAddress is an IP address for a host, and SrcPort is a UDP/TCP
      source port, defining a sender.























Braden, Zhang, et al.  Expiration: September 1995              [Page 59]


Internet Draft             RSVP Specification                 March 1995


   6.7 SENDER_TEMPLATE Class

      o    IPv4/UDP SENDER_TEMPLATE object: Class = 7, C-Type = 1

           Definition same as IPv4/UDP FILTER_SPEC object.

      o    IP6/UDP SENDER_TEMPLATE object: Class = 7, C-Type = 129

           Definition same as IP6/UDP FILTER_SPEC object.

   6.8 SENDER_TSPEC Class

      The most common form of Tspec is a token bucket.

      o    Token Bucket SENDER_TSPEC object: Class = 8, C-Type = 1


            +-----------+-----------+-----------+-----------+
            |        b: Token Bucket Depth (bits)           |
            +-----------+-----------+-----------+-----------+
            |        r: Average data rate (bits/sec)        |
            +-----------+-----------+-----------+-----------+





























Braden, Zhang, et al.  Expiration: September 1995              [Page 60]


Internet Draft             RSVP Specification                 March 1995


   6.9 ADVERT Class

      [TBD]

   6.10 TIME_VALUES Class

      o    TIME_VALUES Object: Class = 10, C-Type = 1


           +-------------+-------------+-------------+-------------+
           |                    Refresh Period                     |
           +-------------+-------------+-------------+-------------+
           |                    State TTL Time                     |
           +-------------+-------------+-------------+-------------+





































Braden, Zhang, et al.  Expiration: September 1995              [Page 61]


Internet Draft             RSVP Specification                 March 1995


   6.11 ERROR_SPEC Class

      o    IPv4 ERROR_SPEC object: Class = 11, C-Type = 1


           +-------------+-------------+-------------+-------------+
           |            IP4 Error Node Address (4 bytes)           |
           +-------------+-------------+-------------+-------------+
           |  Error Code |  ////////// |        Error Value        |
           +-------------+-------------+-------------+-------------+


      o    IP6 ERROR_SPEC object: Class = 11, C-Type = 129


           +-------------+-------------+-------------+-------------+
           |                                                       |
           +                                                       +
           |                                                       |
           +           IP6 Error Node Address (16 bytes)           +
           |                                                       |
           +                                                       +
           |                                                       |
           +-------------+-------------+-------------+-------------+
           |  Error Code |  ////////// |        Error Value        |
           +-------------+-------------+-------------+-------------+



      Errnor Node

           The IP address

      Error Code

           A one-octet error description.

                01 = Insufficient memory

                02 = Count Wrong

                     The FD Count field does not match length of
                     message.

                03 = No path information for this Resv

                04 = No Sender information for this Resv




Braden, Zhang, et al.  Expiration: September 1995              [Page 62]


Internet Draft             RSVP Specification                 March 1995


                     There is path information, but it does not include
                     the sender specified in any of the Filterspecs
                     listed in the Resv messager.

                05 = Incorrect Dynamic Reservation Count

                     Dynamic Reservation Count is zero or less than FD
                     Count.

                06 = Filterspec error

                07 = Flowspec syntax error

                08 = Flowspec value error

                     Internal inconsistency of values.

                     [What should be done with Flowspec Feature Not
                     Supported?]

                09 = Resources unavailable [Sub-reasons?  Depend upon
                     traffic control and admission control algorithms?]

                10 = Illegal style

      Error Value

           Specific cause of the error described by the Error Code.























Braden, Zhang, et al.  Expiration: September 1995              [Page 63]


Internet Draft             RSVP Specification                 March 1995


   6.12 CREDENTIAL Class

      [TBD]

   6.13 INTEGRITY Class

      [TBD]












































Braden, Zhang, et al.  Expiration: September 1995              [Page 64]


Internet Draft             RSVP Specification                 March 1995


7. UDP Encapsulation

   As described earlier, RSVP control messages are intended to be
   carried as "raw packets", directly within IP datagrams.  Implementing
   RSVP in a node will typically require an intercept in the packet
   forwarding path for protocol 46, which means a kernel change.
   However, for ease of installing RSVP on host systems in the short
   term, it may be desirable to avoid host kernel changes by supporting
   UDP encapsulation of RSVP messages.  This encapsulation would be used
   between hosts and the last- (or first-) hop router(s).  This scheme
   will also support the case of an intermediate RSVP router whose
   kernel supports multicast but does not have the RSVP intercept, by
   allowing UDP encapsulation on each interface.

   The UDP encapsulation approach must support a domain that contains a
   mix of "UDP-only" hosts, which require UDP encapsulation, and "raw-
   capable" host, which can use raw RSVP packets.  Raw-capable hosts and
   first-hop router(s) must send each RSVP message twice in the local
   domain, once as a raw packet and once with UDP encapsulation; these
   nodes will also receive some local RSVP packets in both formats.  We
   assume that the only negative impact of this duplication will be
   (negligible) additional packet processing overhead in the raw-capable
   hosts and first-hop routers.

   [REST TBD]

8. DF Style (Experimental)

   In addition to the WF and FF styles defined in this specification, a
   Dynamic Filter (DF) style has also been proposed.  The following
   describes this style and gives examples of its usage.  At this time,
   DF style is experimental.

   8.1 Reservation Styles

      A Dynamic-Filter (DF) style reservation decouples reservations
      from filters.

      Each DF reservation request specifies a number D of distinct
      reservations to be made using the same specified flowspec, and
      these reservations have a wildcard reservation scope, so they go
      everywhere.  The number of reservations that are actually made in
      a particular node is D' = min(D,Ns), where Ns is the total number
      of senders upstream of the node.  Like a FF style request, a DF
      style request causes distinct reservations for different senders.

      In addition to D and the flowspec, a DF style reservation may also
      specify a list of K filterspecs, for some K in the range: 0 <= K



Braden, Zhang, et al.  Expiration: September 1995              [Page 65]


Internet Draft             RSVP Specification                 March 1995


      <= D'.  These filterspecs define particular senders to use the D'
      reservations, and this list establishes the scope for the filter
      specs.

      Once a DF reservation has been established, the receiver may
      change the set of filterspecs to specify a different selection of
      senders, without a new admission control check (assuming D' and
      the common flowspec remain unchanged).  This is known as "channel
      switching", in analogy with a television set.

      In order to provide assured channel switching, each node along the
      path must reserve enough bandwidth for all D' channels, even
      though some of this bandwidth may be unused at any one time.  If
      D' changes (because the receiver changed D or because the number
      Ns of upstream sources changed), or if the common flowspec
      changes, the refresh message is treated as a new reservation that
      is subject to admission control and may fail.

      The essential difference between the FF and DF styles is that the
      DF style allows a receiver to switch channels without danger of an
      admission denial due to limited resources (unless a topology
      change reroutes traffic along a lower-capacity path or new senders
      appear), once the initial reservations have been made.  This in
      turn implies that the DF style creates reservations that may not
      be in use at any given time.

      The DF style is compatible with the FF style but not the WF style.

   8.2 Examples

      To give an example of the DF style, we use the following notation:

      o    DF Style

           DF( n, {r} ; ) or DF( n, {r} ; S1, S2, ...)

      This message carries the count n of channels to be reserved, each
      using common flowspec r.  It also carries a list, perhaps empty,
      of filterspecs defining senders.

      Figure 11 shows an example of Dynamic-Filter reservations.  The
      receivers downstream from interface (d) have requested two
      reserved channels, but selected only one sender, S1.  The node
      reserves min(2,3) = 2 channels of size B on interface (d), and it
      then applies any specified filters to these channels.  Since only
      one sender was specified, one channel has no corresponding filter,
      as shown by `?'.




Braden, Zhang, et al.  Expiration: September 1995              [Page 66]


Internet Draft             RSVP Specification                 March 1995


      Similarly, the receivers downstream of interface (c) have
      requested two channels and selected senders S1 and S2.  The two
      channels might have been one channel each from R1 and R2, or two
      channels requested by one of them, for example.

                        |
         Send           |      Reserve              Receive
                        |
                        |       ________
 DF( 1,{B}; S1) <- (a)  |  (c) |  S1{B} |  (c) <- DF( 2,{B}; S1, S2)
                        |      |________|
                        |      |  S2{B} |
                        |      |________|
                        |
------------------------|-------------------------------------------
                        |       ________
 DF( 2,{B}; S2) <- (b)  |  (d) |  S1{B} |   (d) <- DF( 2,{B}; S1)
                        |      |________|
                        |      |   ?{B} |
                        |      |________|


             Figure 11: Dynamic-Filter Reservation Example


      A router should not reserve more Dynamic-Filter channels than the
      number of upstream sources (three, in the router of Figure 11).
      Since there is only one source upstream from previous hop (a), the
      first parameter of the DF message (the count of channels to be
      reserved) was decreased to 1 in the forwarded reservations.
      However, this is unnecessary, because the routers upstream will
      reserve only one channel, regardless.

      When a DF reservation is received, it is labeled with the IP
      address of the next hop (RSVP-capable) router, downstream from the
      current node.  Since the outgoing interface may be directly
      connected to a shared medium network or to a non-RSVP-capable
      router, there may be more than one next-hop node downstream; if
      so, each sends independent DF RESV messages for a given session.
      The number N' of DF channels reserved on an outgoing interface is
      given by the formula:

      N' = min( D1+D2+...Dn, Ns),

      where Di is the D value (channel reservation count) in a RESV from
      the ith next-hop node.

      For a DF reservation request with a Dynamic Reservation Count = C,



Braden, Zhang, et al.  Expiration: September 1995              [Page 67]


Internet Draft             RSVP Specification                 March 1995


      RSVP should call TC_AddFlowspec C times.

   8.3 Resv Messages

      Add the following sequence:

          <style-specific-tail> ::=

                      <Style-DF> <FLOWSPEC> <filter spec list>

          <filter spec list> ::=  <empty>  |  <filter spec list> <FILTER_SPEC>


   8.4 STYLE Class

      o    STYLE-DF object: Class = 4, C-Type = 3

           +-------------+-------------+-------------+-------------+
           |   Style=3   |   ////////  | Dyn Resv Cnt|  FD Count   |
           +-------------+-------------+-------------+-------------+

           Style

                3 = Dynamic-Filter

           Dyn Resv Count

                The number of channels to be reserved for a Dynamic
                Filter style reservation.  This integer value must not
                less than FD Count.


REFERENCES

[CSZ92]  Clark, D., Shenker, S., and L. Zhang, "Supporting Real-Time
    Applications in an Integrated Services Packet Network: Architecture
    and Mechanisms", Proc. SIGCOMM '92, Baltimore, MD, August 1992.

[ISInt93]  Braden, R., Clark, D., and S. Shenker, "Integrated Services
    in the Internet Architecture: an Overview", RFC 1633, ISI, MIT, and
    PARC, June 1994.

[IServ93]  Shenker, S., Clark, D., and L. Zhang, "A Service Model for an
    Integrated Services Internet", Work in Progress, October 1993.

[Partridge92]  Partridge, C., "A Proposed Flow Specification", RFC 1363,
    BBN, September 1992.




Braden, Zhang, et al.  Expiration: September 1995              [Page 68]


Internet Draft             RSVP Specification                 March 1995


[Shenker94]  Shenker, S., "Two-Pass or Not Two-Pass", Current Meeting
    Report, RSVP Working Group, Proceedings of the Thirtieth Internet
    Engineering Task Force, Toronto, Canada, July 1994.

[RSVP93]  Zhang, L., Deering, S., Estrin, D., Shenker, S., and D.
    Zappala, "RSVP: A New Resource ReSerVation Protocol", IEEE Network,
    September 1993.



Security Considerations

   See Section 2.5.

Authors' Addresses

   Lixia Zhang
   Xerox Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, CA 94304

   Phone: (415) 812-4415
   EMail: Lixia@PARC.XEROX.COM


   Bob Braden
   USC Information Sciences Institute
   4676 Admiralty Way
   Marina del Rey, CA 90292

   Phone: (310) 822-1511
   EMail: Braden@ISI.EDU


   Deborah Estrin
   Computer Science Department
   University of Southern California
   Los Angeles, CA 90089-0871

   Phone: (213) 740-4524
   EMail: estrin@USC.EDU










Braden, Zhang, et al.  Expiration: September 1995              [Page 69]


Internet Draft             RSVP Specification                 March 1995


   Shai Herzog

   USC Information Sciences Institute
   4676 Admiralty Way
   Marina del Rey, CA 90292
   Palo Alto, CA 94304

   Phone: (310) 822 1511
   EMail: Herzog@ISI.EDU


   Sugih Jamin
   Computer Science Department
   University of Southern California
   Los Angeles, CA 90089-0871

   Phone: (213) 740-6578
   EMail: jamin@catarina.usc.edu

































Braden, Zhang, et al.  Expiration: September 1995              [Page 70]