Selected Books:


Buy this book!




Buy this book!




Buy this book!




Buy this book!




Buy this book!



The Online Requests For Comments - RFCs

Home | Books | Bookmark! | Link to Us | Help

RFC 1819 


Network Working Group                                  ST2 Working Group
Request for Comments: 1819           L. Delgrossi and L. Berger, Editors
Obsoletes: 1190, IEN 119                                     August 1995
Category: Experimental


                Internet Stream Protocol Version 2 (ST2)
                 Protocol Specification - Version ST2+

Status of this Memo

   This memo defines an Experimental Protocol for the Internet
   community.  This memo does not specify an Internet standard of any
   kind.  Discussion and suggestions for improvement are requested.
   Distribution of this memo is unlimited.

IESG NOTE

   This document is a revision of RFC1190. The charter of this effort
   was clarifying, simplifying and removing errors from RFC1190 to
   ensure interoperability of implementations.

   NOTE WELL: Neither the version of the protocol described in this
   document nor the previous version is an Internet Standard or under
   consideration for that status.

   Since the publication of the original version of the protocol, there
   have been significant developments in the state of the art.  Readers
   should note that standards and technology addressing alternative
   approaches to the resource reservation problem are currently under
   development within the IETF.

Abstract

   This memo contains a revised specification of the Internet STream
   Protocol Version 2 (ST2). ST2 is an experimental resource reservation
   protocol intended to provide end-to-end real-time guarantees over an
   internet. It allows applications to build multi-destination simplex
   data streams with a desired quality of service. The revised version
   of ST2 specified in this memo is called ST2+.

   This specification is a product of the STream Protocol Working Group
   of the Internet Engineering Task Force.








Delgrossi & Berger, Editors   Experimental                      [Page 1]

RFC 1819              ST2+ Protocol Specification            August 1995


Table of Contents

     1  Introduction                                                   6
             1.1  What is ST2?                                         6
             1.2  ST2 and IP                                           8
             1.3  Protocol History                                     8
             1.3.1  RFC1190 ST and ST2+ Major Differences              9
             1.4  Supporting Modules for ST2                          10
             1.4.1  Data Transfer Protocol                            11
             1.4.2  Setup Protocol                                    11
             1.4.3  Flow Specification                                11
             1.4.4  Routing Function                                  12
             1.4.5  Local Resource Manager                            12
             1.5  ST2 Basic Concepts                                  15
             1.5.1  Streams                                           16
             1.5.2  Data Transmission                                 16
             1.5.3  Flow Specification                                17
             1.6  Outline of This Document                            19

     2  ST2 User Service Description                                  19
             2.1  Stream Operations and Primitive Functions           19
             2.2  State Diagrams                                      21
             2.3  State Transition Tables                             25

     3  The ST2 Data Transfer Protocol                                26
             3.1  Data Transfer with ST                               26
             3.2  ST Protocol Functions                               27
             3.2.1  Stream Identification                             27
             3.2.2  Packet Discarding based on Data Priority          27

     4  SCMP Functional Description                                   28
             4.1  Types of Streams                                    29
             4.1.1  Stream Building                                   30
             4.1.2  Knowledge of Receivers                            30
             4.2  Control PDUs                                        31
             4.3  SCMP Reliability                                    32
             4.4  Stream Options                                      33
             4.4.1  No Recovery                                       33
             4.4.2  Join Authorization Level                          34
             4.4.3  Record Route                                      34
             4.4.4  User Data                                         35
             4.5  Stream Setup                                        35
             4.5.1  Information from the Application                  35
             4.5.2  Initial Setup at the Origin                       35
             4.5.2.1  Invoking the Routing Function                   36
             4.5.2.2  Reserving Resources                             36
             4.5.3  Sending CONNECT Messages                          37
             4.5.3.1  Empty Target List                               37



Delgrossi & Berger, Editors   Experimental                      [Page 2]

RFC 1819              ST2+ Protocol Specification            August 1995


             4.5.4  CONNECT Processing by an Intermediate ST agent    37
             4.5.5  CONNECT Processing at the Targets                 38
             4.5.6  ACCEPT Processing by an Intermediate ST agent     38
             4.5.7  ACCEPT Processing by the Origin                   39
             4.5.8  REFUSE Processing by the Intermediate ST agent    39
             4.5.9  REFUSE Processing by the Origin                   39
             4.5.10  Other Functions during Stream Setup              40
             4.6  Modifying an Existing Stream                        40
             4.6.1  The Origin Adding New Targets                     41
             4.6.2  The Origin Removing a Target                      41
             4.6.3  A Target Joining a Stream                         42
             4.6.3.1  Intermediate Agent (Router) as Origin           43
             4.6.4  A Target Deleting Itself                          43
             4.6.5  Changing a Stream's FlowSpec                      44
             4.7  Stream Tear Down                                    45

     5  Exceptional Cases                                             45
             5.1  Long ST Messages                                    45
             5.1.1  Handling of Long Data Packets                     45
             5.1.2  Handling of Long Control Packets                  46
             5.2  Timeout Failures                                    47
             5.2.1  Failure due to ACCEPT Acknowledgment Timeout      47
             5.2.2  Failure due to CHANGE Acknowledgment Timeout      47
             5.2.3  Failure due to CHANGE Response Timeout            48
             5.2.4  Failure due to CONNECT Acknowledgment Timeout     48
             5.2.5  Failure due to CONNECT Response Timeout           48
             5.2.6  Failure due to DISCONNECT Acknowledgment Timeout  48
             5.2.7  Failure due to JOIN Acknowledgment Timeout        48
             5.2.8  Failure due to JOIN Response Timeout              49
             5.2.9  Failure due to JOIN-REJECT Acknowledgment Timeout 49
             5.2.10  Failure due to NOTIFY Acknowledgment Timeout     49
             5.2.11  Failure due to REFUSE Acknowledgment Timeout     49
             5.2.12  Failure due to STATUS Response Timeout           49
             5.3  Setup Failures due to Routing Failures              50
             5.3.1  Path Convergence                                  50
             5.3.2  Other Cases                                       51
             5.4  Problems due to Routing Inconsistency               52
             5.5  Problems in Reserving Resources                     53
             5.5.1  Mismatched FlowSpecs                              53
             5.5.2  Unknown FlowSpec Version                          53
             5.5.3  LRM Unable to Process FlowSpec                    53
             5.5.4  Insufficient Resources                            53
             5.6  Problems Caused by CHANGE Messages                  54
             5.7  Unknown Targets in DISCONNECT and CHANGE            55







Delgrossi & Berger, Editors   Experimental                      [Page 3]

RFC 1819              ST2+ Protocol Specification            August 1995


     6  Failure Detection and Recovery                                55
             6.1  Failure Detection                                   55
             6.1.1  Network Failures                                  56
             6.1.2  Detecting ST Agents Failures                      56
             6.2  Failure Recovery                                    58
             6.2.1  Problems in Stream Recovery                       60
             6.3  Stream Preemption                                   62

     7  A Group of Streams                                            63
             7.1  Basic Group Relationships                           63
             7.1.1  Bandwidth Sharing                                 63
             7.1.2  Fate Sharing                                      64
             7.1.3  Route Sharing                                     65
             7.1.4  Subnet Resources Sharing                          65
             7.2  Relationships Orthogonality                         65

     8  Ancillary Functions                                           66
             8.1  Stream ID Generation                                66
             8.2  Group Name Generator                                66
             8.3  Checksum Computation                                67
             8.4  Neighbor ST Agent Identification and
                     Information Collection                           67
             8.5  Round Trip Time Estimation                          68
             8.6  Network MTU Discovery                               68
             8.7  IP Encapsulation of ST                              69
             8.8  IP Multicasting                                     70

     9  The ST2+ Flow Specification                                   71
             9.1  FlowSpec Version #0 - (Null FlowSpec)               72
             9.2  FlowSpec Version #7 - ST2+ FlowSpec                 72
             9.2.1  QoS Classes                                       73
             9.2.2  Precedence                                        74
             9.2.3  Maximum Data Size                                 74
             9.2.4  Message Rate                                      74
             9.2.5  Delay and Delay Jitter                            74
             9.2.6  ST2+ FlowSpec Format                              75

     10  ST2 Protocol Data Units Specification                        77
             10.1  Data PDU                                           77
             10.1.1  ST Data Packets                                  78
             10.2  Control PDUs                                       78
             10.3  Common SCMP Elements                               80
             10.3.1  FlowSpec                                         80
             10.3.2  Group                                            81
             10.3.3  MulticastAddress                                 82
             10.3.4  Origin                                           82
             10.3.5  RecordRoute                                      83
             10.3.6  Target and TargetList                            84



Delgrossi & Berger, Editors   Experimental                      [Page 4]

RFC 1819              ST2+ Protocol Specification            August 1995


             10.3.7  UserData                                         85
             10.3.8  Handling of Undefined Parameters                 86
             10.4  ST Control Message PDUs                            86
             10.4.1  ACCEPT                                           86
             10.4.2  ACK                                              88
             10.4.3  CHANGE                                           89
             10.4.4  CONNECT                                          89
             10.4.5  DISCONNECT                                       92
             10.4.6  ERROR                                            93
             10.4.7  HELLO                                            94
             10.4.8  JOIN                                             95
             10.4.9  JOIN-REJECT                                      96
             10.4.10  NOTIFY                                          97
             10.4.11  REFUSE                                          98
             10.4.12  STATUS                                         100
             10.4.13  STATUS-RESPONSE                                100
             10.5  Suggested Protocol Constants                      101
             10.5.1  SCMP Messages                                   102
             10.5.2  SCMP Parameters                                 102
             10.5.3  ReasonCode                                      102
             10.5.4  Timeouts and Other Constants                    104
             10.6  Data Notations                                    105
     11  References                                                  106
     12  Security Considerations                                     108
     13  Acknowledgments and Authors' Addresses                      108


























Delgrossi & Berger, Editors   Experimental                      [Page 5]

RFC 1819              ST2+ Protocol Specification            August 1995


1.  Introduction

1.1  What is ST2?

   The Internet Stream Protocol, Version 2 (ST2) is an experimental
   connection-oriented internetworking protocol that operates at the
   same layer as connectionless IP. It has been developed to support the
   efficient delivery of data streams to single or multiple destinations
   in applications that require guaranteed quality of service. ST2 is
   part of the IP protocol family and serves as an adjunct to, not a
   replacement for, IP. The main application areas of the protocol are
   the real-time transport of multimedia data, e.g., digital audio and
   video packet streams, and distributed simulation/gaming, across
   internets.

   ST2 can be used to reserve bandwidth for real-time streams across
   network routes. This reservation, together with appropriate network
   access and packet scheduling mechanisms in all nodes running the
   protocol, guarantees a well-defined Quality of Service (QoS) to ST2
   applications. It ensures that real-time packets are delivered within
   their deadlines, that is, at the time where they need to be
   presented.  This facilitates a smooth delivery of data that is
   essential for time- critical applications, but can typically not be
   provided by best- effort IP communication.

                      DATA PATH                         CONTROL PATH
                      =========                         ============
       Upper     +------------------+                     +---------+
       Layer     | Application data |                     | Control |
                 +------------------+                     +---------+
                          |                                    |
                          |                                    V
                          |                     +-------------------+
       SCMP               |                     |   SCMP  |         |
                          |                     +-------------------+
                          |                             |
                          V                             V
            +-----------------------+      +------------------------+
       ST   | ST |                  |      | ST |         |         |
            +-----------------------+      +------------------------+
            D-bit=1                       D-bit=0

                   Figure 1: ST2 Data and Control Path

   Just like IP, ST2 actually consists of two protocols: ST for the data
   transport and SCMP, the Stream Control Message Protocol, for all
   control functions. ST is simple and contains only a single PDU format
   that is designed for fast and efficient data forwarding in order to



Delgrossi & Berger, Editors   Experimental                      [Page 6]

RFC 1819              ST2+ Protocol Specification            August 1995


   achieve low communication delays. SCMP, however, is more complex than
   IP's ICMP. As with ICMP and IP, SCMP packets are transferred within
   ST packets as shown in Figure 1.

    +--------------------+
    | Conference Control |
    +--------------------+
   +-------+ +-------+ |
   | Video | | Voice | | +-----+ +------+ +-----+     +-----+ Application
   | Appl  | | Appl  | | | SNMP| |Telnet| | FTP | ... |     |    Layer
   +-------+ +-------+ | +-----+ +------+ +-----+     +-----+
       |        |      |     |        |     |            |
       V        V      |     |        |     |            |   ------------
    +-----+  +-----+   |     |        |     |            |
    | PVP |  | NVP |   |     |        |     |            |
    +-----+  +-----+   +     |        |     |            |
     |   \      | \     \    |        |     |            |
     |    +-----|--+-----+   |        |     |            |
     |     Appl.|control  V  V        V     V            V
     | ST  data |         +-----+    +-------+        +-----+
     | & control|         | UDP |    |  TCP  |    ... | RTP | Transport
     |          |         +-----+    +-------+        +-----+   Layer
     |         /|          / | \       / / |          / /|
     |\       / |  +------+--|--\-----+-/--|--- ... -+ / |
     | \     /  |  |         |   \     /   |          /  |
     |  \   /   |  |         |    \   +----|--- ... -+   |   -----------
     |   \ /    |  |         |     \ /     |             |
     |    V     |  |         |      V      |             |
     | +------+ |  |         |   +------+  |   +------+  |
     | | SCMP | |  |         |   | ICMP |  |   | IGMP |  |    Internet
     | +------+ |  |         |   +------+  |   +------+  |     Layer
     |    |     |  |         |      |      |      |      |
     V    V     V  V         V      V      V      V      V
   +-----------------+  +-----------------------------------+
   | STream protocol |->|      Internet     Protocol        |
   +-----------------+  +-----------------------------------+
                  | \   / |
                  |  \ /  |
                  |   X   |                                  ------------
                  |  / \  |
                  | /   \ |
                  VV     VV
   +----------------+   +----------------+
   | (Sub-) Network |...| (Sub-) Network |                  (Sub-)Network
   |    Protocol    |   |    Protocol    |                     Layer
   +----------------+   +----------------+

                   Figure 2.  Protocol Relationships



Delgrossi & Berger, Editors   Experimental                      [Page 7]

RFC 1819              ST2+ Protocol Specification            August 1995


1.2  ST2 and IP

   ST2 is designed to coexist with IP on each node. A typical
   distributed multimedia application would use both protocols: IP for
   the transfer of traditional data and control information, and ST2 for
   the transfer of real-time data. Whereas IP typically will be accessed
   from TCP or UDP, ST2 will be accessed via new end-to-end real-time
   protocols. The position of ST2 with respect to the other protocols of
   the Internet family is represented in Figure 2.

   Both ST2 and IP apply the same addressing schemes to identify
   different hosts. ST2 and IP packets differ in the first four bits,
   which contain the internetwork protocol version number: number 5 is
   reserved for ST2 (IP itself has version number 4). As a network layer
   protocol, like IP, ST2 operates independently of its underlying
   subnets. Existing implementations use ARP for address resolution, and
   use the same Layer 2 SAPs as IP.

   As a special function, ST2 messages can be encapsulated in IP
   packets.  This is represented in Figure 2 as a link between ST2 and
   IP. This link allows ST2 messages to pass through routers which do
   not run ST2.  Resource management is typically not available for
   these IP route segments. IP encapsulation is, therefore, suggested
   only for portions of the network which do not constitute a system
   bottleneck.

   In Figure 2, the RTP protocol is shown as an example of transport
   layer on top of ST2. Others include the Packet Video Protocol (PVP)
   [Cole81], the Network Voice Protocol (NVP) [Cohe81], and others such
   as the Heidelberg Transport Protocol (HeiTP) [DHHS92].

1.3  Protocol History

   The first version of ST was published in the late 1970's and was used
   throughout the 1980's for experimental transmission of voice, video,
   and distributed simulation. The experience gained in these
   applications led to the development of the revised protocol version
   ST2. The revision extends the original protocol to make it more
   complete and more applicable to emerging multimedia environments. The
   specification of this protocol version is contained in Internet RFC
   1190 which was published in October 1990 [RFC1190].

   With more and more developments of commercial distributed multimedia
   applications underway and with a growing dissatisfaction at the
   transmission quality for audio and video over IP in the MBONE,
   interest in ST2 has grown over the last years. Companies have
   products available incorporating the protocol. The BERKOM MMTS
   project of the German PTT [DeAl92] uses ST2 as its core protocol for



Delgrossi & Berger, Editors   Experimental                      [Page 8]

RFC 1819              ST2+ Protocol Specification            August 1995


   the provision of multimedia teleservices such as conferencing and
   mailing. In addition, implementations of ST2 for Digital Equipment,
   IBM, NeXT, Macintosh, PC, Silicon Graphics, and Sun platforms are
   available.

   In 1993, the IETF started a new working group on ST2 as part of
   ongoing efforts to develop protocols that address resource
   reservation issues.  The group's mission was to clean up the existing
   protocol specification to ensure better interoperability between the
   existing and emerging implementations. It was also the goal to
   produce an updated experimental protocol specification that reflected
   the experiences gained with the existing ST2 implementations and
   applications. Which led to the specification of the ST2+ protocol
   contained in this document.

1.3.1  RFC1190 ST and ST2+ Major Differences

   The protocol changes from RFC1190 were motivated by protocol
   simplification and clarification, and codification of extensions in
   existing implementations. This section provides a list of major
   differences, and is probably of interest only to those who have
   knowledge of RFC1190. The major differences between the versions are:

o   Elimination of "Hop IDentifiers" or HIDs. HIDs added much complexity
    to the protocol and was found to be a major impediment to
    interoperability. HIDs have been replaced by globally unique
    identifiers called "Stream IDentifiers" or SIDs.

o   Elimination of a number of stream options. A number of options were
    found to not be used by any implementation, or were thought to add
    more complexity than value. These options were removed. Removed
    options include: point-to-point, full-duplex, reverse charge, and
    source route.

o   Elimination of the concept of "subset" implementations. RFC1190
    permitted subset implementations, to allow for easy implementation
    and experimentation. This led to interoperability problems. Agents
    implementing the protocol specified in this document, MUST implement
    the full protocol. A number of the protocol functions are best-
    effort. It is expected that some implementations will make more
    effort than others in satisfying particular protocol requests.

o   Clarification of the capability of targets to request to join a
    steam. RFC1190 can be interpreted to support target requests, but
    most implementors did not understand this and did not add support
    for this capability. The lack of this capability was found to be a
    significant limitation in the ability to scale the number of
    participants in a single ST stream. This clarification is based on



Delgrossi & Berger, Editors   Experimental                      [Page 9]

RFC 1819              ST2+ Protocol Specification            August 1995


    work done by IBM Heidelberg.

o   Separation of functions between ST and supporting modules. An effort
    was made to improve the separation of functions provided by ST and
    those provided by other modules. This is reflected in reorganization
    of some text and some PDU formats. ST was also made FlowSpec
    independent, although it does define a FlowSpec for testing and
    interoperability purposes.

o   General reorganization and re-write of the specification. This
    document has been organized with the goal of improved readability
    and clarity. Some sections have been added, and an effort was made
    to improve the introduction of concepts.

1.4  Supporting Modules for ST2

   ST2 is one piece of a larger mosaic. This section presents the
   overall communication architecture and clarifies the role of ST2 with
   respect to its supporting modules.

   ST2 proposes a two-step communication model. In the first step, the
   real-time channels for the subsequent data transfer are built. This
   is called stream setup. It includes selecting the routes to the
   destinations and reserving the correspondent resources. In the second
   step, the data is transmitted over the previously established
   streams.  This is called data transfer. While stream setup does not
   have to be completed in real-time, data transfer has stringent real-
   time requirements. The architecture used to describe the ST2
   communication model includes:

o   a data transfer protocol for the transmission of real-time data
    over the established streams,

o   a setup protocol to establish real-time streams based on the flow
    specification,

o   a flow specification to express user real-time requirements,

o   a routing function to select routes in the Internet,

o   a local resource manager to appropriately handle resources involved
    in the communication.

   This document defines a data protocol (ST), a setup protocol (SCMP),
   and a flow specification (ST2+ FlowSpec). It does not define a
   routing function and a local resource manager. However, ST2 assumes
   their existence.




Delgrossi & Berger, Editors   Experimental                     [Page 10]

RFC 1819              ST2+ Protocol Specification            August 1995


   Alternative architectures are possible, see [RFC1633] for an example
   alternative architecture that could be used when implementing ST2.

1.4.1  Data Transfer Protocol

   The data transfer protocol defines the format of the data packets
   belonging to the stream. Data packets are delivered to the targets
   along the stream paths previously established by the setup protocol.
   Data packets are delivered with the quality of service associated
   with the stream.

   Data packets contain a globally unique stream identifier that
   indicates which stream they belong to. The stream identifier is also
   known by the setup protocol, which uses it during stream
   establishment. The data transfer protocol for ST2, known simply as
   ST, is completely defined by this document.

1.4.2  Setup Protocol

   The setup protocol is responsible for establishing, maintaining, and
   releasing real-time streams. It relies on the routing function to
   select the paths from the source to the destinations. At each
   host/router on these paths, it presents the flow specification
   associated with the stream to the local resource manager. This causes
   the resource managers to reserve appropriate resources for the
   stream.  The setup protocol for ST2 is called Stream Control Message
   Protocol, or SCMP, and is completely defined by this document.

1.4.3  Flow Specification

   The flow specification is a data structure including the ST2
   applications' QoS requirements. At each host/router, it is used by
   the local resource manager to appropriately handle resources so that
   such requirements are met. Distributing the flow specification to all
   resource managers along the communication paths is the task of the
   setup protocol. However, the contents of the flow specification are
   transparent to the setup protocol, which simply carries the flow
   specification. Any operations on the flow specification, including
   updating internal fields and comparing flow specifications are
   performed by the resource managers.

   This document defines a specific flow specification format that
   allows for interoperability among ST2 implementations. This flow
   specification is intended to support a flow with a single
   transmission rate for all destinations in the stream. Implementations
   may support more than one flow specification format and the means are
   provided to add new formats as they are defined in the future.
   However, the flow specification format has to be consistent



Delgrossi & Berger, Editors   Experimental                     [Page 11]

RFC 1819              ST2+ Protocol Specification            August 1995


   throughout the stream, i.e., it is not possible to use different flow
   specification formats for different parts of the same stream.

1.4.4  Routing Function

   The routing function is an external unicast route generation
   capability. It provides the setup protocol with the path to reach
   each of the desired destinations. The routing function is called on a
   hop-by-hop basis and provides next-hop information. Once a route is
   selected by the routing function, it persists for the whole stream
   lifetime. The routing function may try to optimize based on the
   number of targets, the requested resources, or use of local network
   multicast or bandwidth capabilities. Alternatively, the routing
   function may even be based on simple connectivity information.

   The setup protocol is not necessarily aware of the criteria used by
   the routing function to select routes. It works with any routing
   function algorithm. The algorithm adopted is a local matter at each
   host/router and different hosts/routers may use different algorithms.
   The interface between setup protocol and routing function is also a
   local matter and therefore it is not specified by this document.

   This version of ST does not support source routing. It does support
   route recording. It does include provisions that allow identification
   of ST capable neighbors. Identification of remote ST hosts/routers is
   not specifically addressed.

1.4.5  Local Resource Manager

   At each host/router traversed by a stream, the Local Resource Manager
   (LRM) is responsible for handling local resources. The LRM knows
   which resources are on the system and what capacity they can provide.
   Resources include:

o   CPUs on end systems and routers to execute the application and
    protocol software,

o   main memory space for this software (as in all real-time systems,
    code should be pinned in main memory, as swapping it out would have
    detrimental effects on system performance),

o   buffer space to store the data, e.g., communication packets, passing
    through the nodes,

o   network adapters, and






Delgrossi & Berger, Editors   Experimental                     [Page 12]

RFC 1819              ST2+ Protocol Specification            August 1995


o   transmission networks between the nodes. Networks may be as simple
    as point-to-point links or as complex as switched networks such as
    Frame Relay and ATM networks.

   During stream setup and modification, the LRM is presented by the
   setup protocol with the flow specification associated to the stream.
   For each resource it handles, the LRM is expected to perform the
   following functions:

o   Stream Admission Control: it checks whether, given the flow
    specification, there are sufficient resources left to handle the new
    data stream. If the available resources are insufficient, the new
    data stream must be rejected.

o   QoS Computation: it calculates the best possible performance the
    resource can provide for the new data stream under the current
    traffic conditions, e.g., throughput and delay values are computed.

o   Resource Reservation: it reserves the resource capacities required
    to meet the desired QoS.

   During data transfer, the LRM is responsible for:

o   QoS Enforcement: it enforces the QoS requirements by appropriate
    scheduling of resource access. For example, data packets from an
    application with a short guaranteed delay must be served prior to
    data from an application with a less strict delay bound.

   The LRM may also provide the following additional functions:

o   Data Regulation: to smooth a stream's data traffic, e.g., as with the
    leaky bucket algorithm.

o   Policing: to prevent applications exceed their negotiated QoS, e.g.,
    to send data at a higher rate than indicated in the flow
    specification.

o   Stream Preemption: to free up resources for other streams with
    higher priority or importance.

   The strategies adopted by the LRMs to handle resources are resource-
   dependent and may vary at every host/router. However, it is necessary
   that all LRMs have the same understanding of the flow specification.
   The interface between setup protocol and LRM is a local matter at
   every host and therefore it is not specified by this document. An
   example of LRM is the Heidelberg Resource Administration Technique
   (HeiRAT) [VoHN93].




Delgrossi & Berger, Editors   Experimental                     [Page 13]

RFC 1819              ST2+ Protocol Specification            August 1995


   It is also assumed that the LRM provides functions to compare flow
   specifications, i.e., to decide whether a flow specification requires
   a greater, equal, or smaller amount of resource capacities to be
   reserved.















































Delgrossi & Berger, Editors   Experimental                     [Page 14]

RFC 1819              ST2+ Protocol Specification            August 1995


1.5  ST2 Basic Concepts

   The following sections present at an introductory level some of the
   fundamental ST2 concepts including streams, data transfer, and flow
   specification.

            Hosts Connections...                :      ...and Streams
            ====================                :      ==============
        data       Origin                       :          Origin
       packets +-----------+                    :          +----+
          +----|Application|                    :          |    |
          |    |-----------|                    :          +----+
          +--->| ST Agent  |                    :           |  |
               +-----------+                    :           |  |
                     |                          :           |  |
                     V                          :           |  |
              +-------------+                   :           |  |
              |             |                   :           |  |
+-------------|  Network A  |                   :   +-------+  +--+
|             |             |                   :   |             |
|             +-------------+                   :   |     Target 2|
|                    |     Target 2             :   |     & Router|
|     Target 1       |    and Router            :   |             |
|  +-----------+     |  +-----------+           :   V             V
|  |Application|<-+  |  |Application|<-+        : +----+        +----+
|  |-----------|  |  |  |-----------|  |        : |    |        |    |
+->| ST Agent  |--+  +->| ST Agent  |--+        : +----+        +----+
   +-----------+        +-----------+           :Target 1         |  |
                              |                 :                 |  |
                              V                 :                 |  |
                    +-------------+             :                 |  |
                    |             |             :                 |  |
      +-------------|  Network B  |             :           +-----+  |
      |             |             |             :           |        |
      |             +-------------+             :           |        |
      |    Target 3        |    Target 4        :           |        |
      |  +-----------+     |  +-----------+     :           V        V
      |  |Application|<-+  |  |Application|<-+  :         +----+ +----+
      |  |-----------|  |  |  |-----------|  |  :         |    | |    |
      +->| ST Agent  |--+  +->| ST Agent  |--+  :         +----+ +----+
         +-----------+        +-----------+     :      Target 3 Target 4
                                                :

                         Figure 3: The Stream Concept







Delgrossi & Berger, Editors   Experimental                     [Page 15]

RFC 1819              ST2+ Protocol Specification            August 1995


1.5.1  Streams

   Streams form the core concepts of ST2. They are established between a
   sending origin and one or more receiving targets in the form of a
   routing tree. Streams are uni-directional from the origin to the
   targets. Nodes in the tree represent so-called ST agents, entities
   executing the ST2 protocol; links in the tree are called hops. Any
   node in the middle of the tree is called an intermediate agent, or
   router. An agent may have any combination of origin, target, or
   intermediate capabilities.

   Figure 3 illustrates a stream from an origin to four targets, where
   the ST agent on Target 2 also functions as an intermediate agent. Let
   us use this Target 2/Router node to explain some basic ST2
   terminology: the direction of the stream from this node to Target 3
   and 4 is called downstream, the direction towards the Origin node
   upstream. ST agents that are one hop away from a given node are
   called previous-hops in the upstream, and next-hops in the downstream
   direction.

   Streams are maintained using SCMP messages. Typical SCMP messages are
   CONNECT and ACCEPT to build a stream, DISCONNECT and REFUSE to close
   a stream, CHANGE to modify the quality of service associated with a
   stream, and JOIN to request to be added to a stream.

   Each ST agent maintains state information describing the streams
   flowing through it. It can actively gather and distribute such
   information. It can recognize failed neighbor ST agents through the
   use of periodic HELLO message exchanges. It can ask other ST agents
   about a particular stream via a STATUS message. These ST agents then
   send back a STATUS-RESPONSE message. NOTIFY messages can be used to
   inform other ST agents of significant events.

   ST2 offers a wealth of functionalities for stream management. Streams
   can be grouped together to minimize allocated resources or to process
   them in the same way in case of failures. During audio conferences,
   for example, only a limited set of participants may talk at once.
   Using the group mechanism, resources for only a portion of the audio
   streams of the group need to be reserved. Using the same concept, an
   entire group of related audio and video streams can be dropped if one
   of them is preempted.

1.5.2  Data Transmission

   Data transfer in ST2 is simplex in the downstream direction. Data
   transport through streams is very simple. ST2 puts only a small
   header in front of the user data. The header contains a protocol
   identification that distinguishes ST2 from IP packets, an ST2 version



Delgrossi & Berger, Editors   Experimental                     [Page 16]

RFC 1819              ST2+ Protocol Specification            August 1995


   number, a priority field (specifying a relative importance of streams
   in cases of conflict), a length counter, a stream identification, and
   a checksum. These elements form a 12-byte header.

   Efficiency is also achieved by avoiding fragmentation and reassembly
   on all agents. Stream establishment yields a maximum message size for
   data packets on a stream. This maximum message size is communicated
   to the upper layers, so that they provide data packets of suitable
   size to ST2.

   Communication with multiple next-hops can be made even more efficient
   using MAC Layer multicast when it is available. If a subnet supports
   multicast, a single multicast packet is sufficient to reach all
   next-hops connected to this subnet. This leads to a significant
   reduction of the bandwidth requirements of a stream. If multicast is
   not provided, separate packets need to be sent to each next-hop.

   As ST2 relies on reservation, it does not contain error correction
   mechanisms features for data exchange such as those found in TCP. It
   is assumed that real-time data, such as digital audio and video,
   require partially correct delivery only. In many cases, retransmitted
   packets would arrive too late to meet their real-time delivery
   requirements. Also, depending on the data encoding and the particular
   application, a small number of errors in stream data are acceptable.
   In any case, reliability can be provided by layers on top of ST2 when
   needed.

1.5.3  Flow Specification

   As part of establishing a connection, SCMP handles the negotiation of
   quality-of-service parameters for a stream. In ST2 terminology, these
   parameters form a flow specification (FlowSpec) which is associated
   with the stream. Different versions of FlowSpecs exist, see
   [RFC1190], [DHHS92] and [RFC1363], and can be distinguished by a
   version number.  Typically, they contain parameters such as average
   and maximum throughput, end-to-end delay, and delay variance of a
   stream. SCMP itself only provides the mechanism for relaying the
   quality-of-service parameters.

   Three kinds of entities participate in the quality-of-service
   negotiation: application entities on the origin and target sites as
   the service users, ST agents, and local resource managers (LRM). The
   origin application supplies the initial FlowSpec requesting a
   particular service quality. Each ST agent which obtains the FlowSpec
   as part of a connection establishment message, it presents the local
   resource manager with it. ST2 does not determine how resource
   managers make reservations and how resources are scheduled according
   to these reservations; ST2, however, assumes these mechanisms as its



Delgrossi & Berger, Editors   Experimental                     [Page 17]

RFC 1819              ST2+ Protocol Specification            August 1995


   basis.

   An example of the FlowSpec negotiation procedure is illustrated in
   Figure 4. Depending on the success of its local reservations, the LRM
   updates the FlowSpec fields and returns the FlowSpec to the ST agent,
   which passes it downstream as part of the connection message.
   Eventually, the FlowSpec is communicated to the application at the
   target which may base its accept/reject decision for establishing the
   connection on it and may finally also modify the FlowSpec. If a
   target accepts the connection, the (possibly modified) FlowSpec is
   propagated back to the origin which can then calculate an overall
   service quality for all targets. The application entity at the origin
   may later request a CHANGE to adjust reservations.

                 Origin                 Router               Target 1
                +------+      1a       +------+      1b      +------+
                |      |-------------->|      |------------->|      |
                +------+               +------+              +------+
                 ^  | ^                                          |
                 |  | |                    2                     |
                 |  | +------------------------------------------+
                 +  +
 +-------------+  \  \             +-------------+       +-------------+
 |Max Delay: 12|   \  \            |Max Delay: 12|       |Max Delay: 12|
 |-------------|    \  \           |-------------|       |-------------|
 |Min Delay:  2|     \  \          |Min Delay:  5|       |Min Delay:  9|
 |-------------|      \  \         |-------------|       |-------------|
 |Max Size:4096|       +  +        |Max Size:2048|       |Max Size:2048|
 +-------------+       |  |        +-------------+       +-------------+
    FlowSpec           |  | 1
                       |  +---------------+
                       |                  |
                       |                  V
                     2 |               +------+
                       +---------------|      |
                                       +------+
                                       Target 2
                                   +-------------+
                                   |Max Delay: 12|
                                   |-------------|
                                   |Min Delay:  4|
                                   |-------------|
                                   |Max Size:4096|
                                   +-------------+

        Figure 4:  Quality-of-Service Negotiation with FlowSpecs





Delgrossi & Berger, Editors   Experimental                     [Page 18]

RFC 1819              ST2+ Protocol Specification            August 1995


1.6  Outline of This Document

   This document contains the specification of the ST2+ version of the
   ST2 protocol. In the rest of the document, whenever the terms "ST" or
   "ST2" are used, they refer to the ST2+ version of ST2.

   The document is organized as follows:

o   Section 2 describes the ST2 user service from an application point
    of view.

o   Section 3 illustrates the ST2 data transfer protocol, ST.

o   Section 4 through Section 8 specify the ST2 setup protocol, SCMP.

o   the ST2 flow specification is presented in Section 9.

o   the formats of protocol elements and PDUs are defined in Section 10.

2.  ST2 User Service Description

   This section describes the ST user service from the high-level point
   of view of an application. It defines the ST stream operations and
   primitive functions. It specifies which operations on streams can be
   invoked by the applications built on top of ST and when the ST
   primitive functions can be legally executed. Note that the presented
   ST primitives do not specify an API. They are used here with the only
   purpose of illustrating the service model for ST.

2.1  Stream Operations and Primitive Functions

   An ST application at the origin may create, expand, reduce, change,
   send data to, and delete a stream. When a stream is expanded, new
   targets are added to the stream; when a stream is reduced, some of
   the current targets are dropped from it. When a stream is changed,
   the associated quality of service is modified.

   An ST application at the target may join, receive data from, and
   leave a stream. This translates into the following stream operations:

o   OPEN: create new stream [origin], CLOSE: delete stream [origin],

o   ADD: expand stream, i.e., add new targets to it [origin],

o   DROP: reduce stream, i.e., drop targets from it [origin],

o   JOIN: join a stream [target], LEAVE: leave a stream [target],




Delgrossi & Berger, Editors   Experimental                     [Page 19]

RFC 1819              ST2+ Protocol Specification            August 1995


o   DATA: send data through stream [origin],

o   CHG: change a stream's QoS [origin],

   Each stream operation may require the execution of several primitive
   functions to be completed. For instance, to open a new stream, a
   request is first issued by the sender and an indication is generated
   at one or more receivers; then, the receivers may each accept or
   refuse the request and the correspondent indications are generated at
   the sender. A single receiver case is shown in Figure 5 below.

                Sender             Network             Receiver
                  |                   |                   |
     OPEN.req     |                   |                   |
                  |-----------------> |                   |
                  |                   |-----------------> |
                  |                   |                   | OPEN.ind
                  |                   |                   | OPEN.accept
                  |                   |<----------------- |
                  |<----------------- |                   |
  OPEN.accept-ind |                   |                   |
                  |                   |                   |

           Figure 5: Primitives for the OPEN Stream Operation



























Delgrossi & Berger, Editors   Experimental                     [Page 20]

RFC 1819              ST2+ Protocol Specification            August 1995


   Table 1 defines the ST service primitive functions associated to each
   stream operation. The column labelled "O/T" indicates whether the
   primitive is executed at the origin or at the target.

           +===================================================+
           |Primitive      | Descriptive                   |O/T|
           |===================================================|
           |OPEN.req       | open a stream                 | O |
           |OPEN.ind       | connection request indication | T |
           |OPEN.accept    | accept stream                 | T |
           |OPEN.refuse    | refuse stream                 | T |
           |OPEN.accept-ind| connection accept indication  | O |
           |OPEN.refuse-ind| connection refuse indication  | O |
           |ADD.req        | add targets to stream         | O |
           |ADD.ind        | add request indication        | T |
           |ADD.accept     | accept stream                 | T |
           |ADD.refuse     | refuse stream                 | T |
           |ADD.accept-ind | add accept indication         | O |
           |ADD.refuse-ind | add refuse indication         | O |
           |JOIN.req       | join a stream                 | T |
           |JOIN.ind       | join request indication       | O |
           |JOIN.reject    | reject a join                 | O |
           |JOIN.reject-ind| join reject indication        | T |
           |DATA.req       | send data                     | O |
           |DATA.ind       | receive data indication       | T |
           |CHG.req        | change stream QoS             | O |
           |CHG.ind        | change request indication     | T |
           |CHG.accept     | accept change                 | T |
           |CHG.refuse     | refuse change                 | T |
           |CHG.accept-ind | change accept indication      | O |
           |CHG.refuse-ind | change refuse indication      | O |
           |DROP.req       | drop targets                  | O |
           |DROP.ind       | disconnect indication         | T |
           |LEAVE.req      | leave stream                  | T |
           |LEAVE.ind      | leave stream indication       | O |
           |CLOSE.req      | close stream                  | O |
           |CLOSE.ind      | close stream indication       | T |
           +---------------------------------------------------+

                              Table 1: ST Primitives

2.2  State Diagrams

   It is not sufficient to define the set of ST stream operations. It is
   also necessary to specify when the operations can be legally
   executed.  For this reason, a set of states is now introduced and the
   transitions from one state to the others are specified. States are
   defined with respect to a single stream. The previously defined



Delgrossi & Berger, Editors   Experimental                     [Page 21]

RFC 1819              ST2+ Protocol Specification            August 1995


   stream operations can be legally executed only from an appropriate
   state.

   An ST agent may, with respect to an ST stream, be in one of the
   following states:

o   IDLE: the stream has not been created yet.

o   PENDING: the stream is in the process of being established.

o   ACTIVE: the stream is established and active.

o   ADDING: the stream is established. A stream expansion is underway.

o   CHGING: the stream is established. A stream change is underway.

   Previous experience with ST has lead to limits on stream operations
   that can be executed simultaneously. These restrictions are:


   1.  A single ADD or CHG operation can be processed at one time. If
       an ADD or CHG is already underway, further requests are queued
       by the ST agent and handled only after the previous operation
       has been completed. This also applies to two subsequent
       requests of the same kind, e.g., two ADD or two CHG operations.
       The second operation is not executed until the first one has
       been completed.

   2.  Deleting a stream, leaving a stream, or dropping targets from a
       stream is possible only after stream establishment has been
       completed. A stream is considered to be established when all
       the next-hops of the origin have either accepted or refused the
       stream.  Note that stream refuse is automatically forced after
       timeout if no reply comes from a next-hop.

   3.  An ST agent forwards data only along already established paths
       to the targets, see also Section 3.1. A path is considered to
       be established when the next-hop on the path has explicitly
       accepted the stream. This implies that the target and all other
       intermediate ST agents are ready to handle the incoming data
       packets. In no cases an ST agent will forward data to a
       next-hop ST agent that has not explicitly accepted the stream.
       To be sure that all targets receive the data, an application
       should send the data only after all paths have been
       established, i.e., the stream is established.






Delgrossi & Berger, Editors   Experimental                     [Page 22]

RFC 1819              ST2+ Protocol Specification            August 1995


   4.  It is allowed to send data from the CHGING and ADDING states.
       While sending data from the CHGING state, the quality of
       service to the targets affected by the change should be assumed
       to be the more restrictive quality of service. When sending
       data from the ADDING state, the targets that receive the data
       include at least all the targets that were already part of the
       stream at the time the ADD operation was invoked.

   The rules introduced above require ST agents to queue incoming
   requests when the current state does not allow to process them
   immediately. In order to preserve the semantics, ST agents have to
   maintain the order of the requests, i.e., implement FIFO queuing.
   Exceptionally, the CLOSE request at the origin and the LEAVE request
   at the target may be immediately processed: in these cases, the queue
   is deleted and it is possible that requests in the queue are not
   processed.

   The following state diagrams define the ST service. Separate diagrams
   are presented for the origin and the targets.

   The symbol (a/r)* indicates that all targets in the target list have
   explicitly accepted or refused the stream, or refuse has been forced
   after timeout. If the target list is empty, i.e., it contains no
   targets, the (a/r)* condition is immediately satisfied, so the empty
   stream is created and state ESTBL is entered.

   The separate OPEN and ADD primitives at the target are for conceptual
   purposes only. The target is actually unable to distinguish between
   an OPEN and an ADD. This is reflected in Figure 7 and Table 3 through
   the notation OPEN/ADD.





















Delgrossi & Berger, Editors   Experimental                     [Page 23]

RFC 1819              ST2+ Protocol Specification            August 1995


                        +------------+
                        |            |<-------------------+
            +---------->|    IDLE    |-------------+      |
            |           |            |    OPEN.req |      |
            |           +------------+             |      |
 CLOSE.req  |      CLOSE.req ^   ^ CLOSE.req       V      | CLOSE.req
            |                |   |            +---------+ |
            |                |   |            | PENDING |-|-+ JOIN.reject
            |                |   -------------|         |<|-+
            |    JOIN.reject |                +---------+ |
            |    DROP.req +----------+             |      |
            |       +-----|          |             |      |
            |       |     |  ESTDL   | OPEN.(a/r)* |      |
            |       +---->|          |<------------+      |
            |             +----------+                    |
            |              |  ^  |  ^                     |
            |              |  |  |  |                     |
       +----------+ CHG.req|  |  |  | Add.(a/r)*    +----------+
       |          |<-------+  |  |  +-------------- |          |
       |  CHGING  |           |  |                  |  ADDING  |
       |          |-----------+  +----------------->|          |
       +----------+ CHG.(a/r)*         JOIN.ind     +----------+
           |   ^                         ADD.req        |   ^
           |   |                                        |   |
           +---+                                        +---+
           DROP.req                                    DROP.req
           JOIN.reject                                 JOIN.reject

                  Figure 6: ST Service at the Origin

                 +--------+
                 |        |-----------------------+
                 |  IDLE  |                       |
                 |        |<---+                  | OPEN/ADD.ind
                 +--------+    | CLOSE.ind        | JOIN.req
                     ^         | OPEN/ADD.refuse  |
                     |         | JOIN.refect-ind  |
         CLOSE.ind   |         |                  V
         DROP.ind    |         |             +---------+
         LEAVE.req   |         +-------------|         |
                     |                       | PENDING |
                 +-------+                   |         |
                 |       |                   +---------+
                 | ESTBL |    OPEN/ADD.accept     |
                 |       |<-----------------------+
                 +-------+

                     Figure 7: ST Service at the Target



Delgrossi & Berger, Editors   Experimental                     [Page 24]

RFC 1819              ST2+ Protocol Specification            August 1995


2.3  State Transition Tables

   Table 2 and Table 3 define which primitives can be processed from
   which states and the possible state transitions.

+======================================================================+
|Primitive      |IDLE|    PENDING    |  ESTBL |    CHGING  |    ADDING |
|======================================================================|
|OPEN.req       | ok | -             | -      | -          | -         |
|OPEN.accept-ind| -  |if(a,r)*->ESTBL| -      | -          | -         |
|OPEN.refuse-ind| -  |if(a,r)*->ESTBL| -      | -          | -         |
|ADD.req        | -  | queued        |->ADDING| queued     | queued    |
|ADD.accept-ind | -  | -             | -      | -          |if(a,r)*   |
|               | -  | -             | -      | -          |->ESTBL    |
|ADD.refuse-ind | -  | -             | -      | -          |if(a,r)*   |
|               | -  | -             | -      | -          |->ESTBL    |
|JOIN.ind       | -  | queued        |->ADDING| queued     |queued     |
|JOIN.reject    | -  | OK            | ok     | ok         | ok        |
|DATA.req       | -  | -             | ok     | ok         | ok        |
|CHG.req        | -  | queued        |->CHGING| queued     |queued     |
|CHG.accept-ind | -  | -             | -      |if(a,r)*    | -         |
|               | -  | -             | -      |->ESTBL     | -         |
|CHG.refuse.ind | -  | -             | -      |if(a,r)*    | -         |
|               | -  | -             | -      |->ESTBL     | -         |
|DROP.req       | -  | -             | ok     | ok         | ok        |
|LEAVE.ind      | -  | OK            | ok     | ok         | ok        |
|CLOSE.req      | -  | OK            | ok     | ok         | ok        |
+----------------------------------------------------------------------+
                Table 2: Primitives and States at the Origin

             +======================================================+
             | Primitive       |   IDLE    |  PENDING   |   ESTBL   |
             |======================================================|
             | OPEN/ADD.ind    | ->PENDING | -          | -         |
             | OPEN/ADD.accept | -         | ->ESTBL    | -         |
             | OPEN/ADD.refuse | -         | ->IDLE     | -         |
             | JOIN.req        | ->PENDING | -          | -         |
             | JOIN.reject-ind |-          | ->IDLE     | -         |
             | DATA.ind        | -         | -          | ok        |
             | CHG.ind         | -         | -          | ok        |
             | CHG.accept      | -         | -          | ok        |
             | DROP.ind        | -         | ok         | ok        |
             | LEAVE.req       | -         | ok         | ok        |
             | CLOSE.ind       | -         | ok         | ok        |
             | CHG.ind         | -         | -          | ok        |
             +------------------------------------------------------+
                Table 3: Primitives and States at the Target




Delgrossi & Berger, Editors   Experimental                     [Page 25]

RFC 1819              ST2+ Protocol Specification            August 1995


3.  The ST2 Data Transfer Protocol

   This section presents the ST2 data transfer protocol, ST. First, data
   transfer is described in Section 3.1, then, the data transfer
   protocol functions are illustrated in Section 3.2.

3.1  Data Transfer with ST

   Data transmission with ST is unreliable. An application is not
   guaranteed that the data reaches its destinations and ST makes no
   attempts to recover from packet loss, e.g., due to the underlying
   network. However, if the data reaches its destination, it should do
   so according to the quality of service associated with the stream.

   Additionally, ST may deliver data corrupted in transmission. Many
   types of real-time data, such as digital audio and video, require
   partially correct delivery only. In many cases, retransmitted packets
   would arrive too late to meet their real-time delivery requirements.
   On the other hand, depending on the data encoding and the particular
   application, a small number of errors in stream data are acceptable.
   In any case, reliability can be provided by layers on top of ST2 if
   needed.

   Also, no data fragmentation is supported during the data transfer
   phase. The application is expected to segment its data PDUs according
   to the minimum MTU over all paths in the stream. The application
   receives information on the MTUs relative to the paths to the targets
   as part of the ACCEPT message, see Section 8.6. The minimum MTU over
   all paths can be calculated from the MTUs relative to the single
   paths. ST agents silently discard too long data packets, see also
   Section 5.1.1.

   An ST agent forwards the data only along already established paths to
   targets. A path is considered to be established once the next-hop ST
   agent on the path sends an ACCEPT message, see Section 2.2. This
   implies that the target and all other intermediate ST agents on the
   path to the target are ready to handle the incoming data packets. In
   no cases will an ST agent forward data to a next-hop ST agent that
   has not explicitly accepted the stream.

   To be reasonably sure that all targets receive the data with the
   desired quality of service, an application should send the data only
   after the whole stream has been established. Depending on the local
   API, an application may not be prevented from sending data before the
   completion of stream setup, but it should be aware that the data
   could be lost or not reach all intended targets. This behavior may
   actually be desirable to applications, such as those application that
   have multiple targets which can each process data as soon as it is



Delgrossi & Berger, Editors   Experimental                     [Page 26]

RFC 1819              ST2+ Protocol Specification            August 1995


   available (e.g., a lecture or distributed gaming).

   It is desirable for implementations to take advantage of networks
   that support multicast. If a network does not support multicast, or
   for the case where the next-hops are on different networks, multiple
   copies of the data packet must be sent.

3.2  ST Protocol Functions

   The ST protocol provides two functions:

   o   stream identification

   o   data priority

3.2.1  Stream Identification

   ST data packets are encapsulated by an ST header containing the
   Stream IDentifier (SID). This SID is selected at the origin so that
   it is globally unique over the Internet. The SID must be known by the
   setup protocol as well. At stream establishment time, the setup
   protocol builds, at each agent traversed by the stream, an entry into
   its local database containing stream information. The SID can be used
   as a reference into this database, to obtain quickly the necessary
   replication and forwarding information.

   Stream IDentifiers are intended to be used to make the packet
   forwarding task most efficient. The time-critical operation is an
   intermediate ST agent receiving a packet from the previous-hop ST
   agent and forwarding it to the next-hop ST agents.

   The format of data PDUs including the SID is defined in Section 10.1.
   Stream IDentifier generation is discussed in Section 8.1.

3.2.2  Packet Discarding based on Data Priority

   ST provides a well defined quality of service to its applications.
   However, there may be cases where the network is temporarily
   congested and the ST agents have to discard certain packets to
   minimize the overall impact to other streams. The ST protocol
   provides a mechanism to discard data packets based on the Priority
   field in the data PDU, see Section 10.1. The application assigns each
   data packet with a discard-priority level, carried into the Priority
   field. ST agents will attempt to discard lower priority packets first
   during periods of network congestion. Applications may choose to send
   data at multiple priority levels so that less important data may be
   discarded first.




Delgrossi & Berger, Editors   Experimental                     [Page 27]

RFC 1819              ST2+ Protocol Specification            August 1995


4.  SCMP Functional Description

   ST agents create and manage streams using the ST Control Message
   Protocol (SCMP). Conceptually, SCMP resides immediately above ST (as
   does ICMP above IP). SCMP follows a request-response model. SCMP
   messages are made reliable through the use of retransmission after
   timeout.

   This section contains a functional description of stream management
   with SCMP. To help clarify the SCMP exchanges used to setup and
   maintain ST streams, we include an example of a simple network
   topology, represented in Figure 8. Using the SCMP messages described
   in this section it will be possible for an ST application to:

   o   Create a stream from A to the peers at B, C and D,

   o   Add a peer at E,

   o   Drop peers B and C, and

   o   Let F join the stream

   o   Delete the stream.




























Delgrossi & Berger, Editors   Experimental                     [Page 28]

RFC 1819              ST2+ Protocol Specification            August 1995


                                               +---------+    +---+
                                               |         |----| B |
               +---------+      +----------+   |         |    +---+
               |         |------| Router 1 |---| Subnet2 |
               |         |      +----------+   |         |
               |         |                     |         |
               |         |                     +---------+
               |         |                         |
               | Subnet1 |                         |
               |         |                     +----------+
               |         |                     | Router 3 |
       +---+   |         |                     +----------+
       | A |---|         |    +----------+           |
       +---+   |         |----| Router 2 |           |
               |         |    +----------+           |
               +---------+         |                 |
                                   |                 |
                                   |          +----------+    +---+
                                   +----------|          |----| C |
                                              |          |    +---+
                         +---------+          |  Subnet3 |
                 +---+   |         |   +---+  |          |    +---+
                 | F |---| Subnet4 |---| E |--|          |----| D |
                 +---+   |         |   +---+  +----------+    +---+
                         +---------+

                Figure 8:  Sample Topology for an ST Stream

   We first describe the possible types of stream in Section 4.1;
   Section 4.2 introduces SCMP control message types; SCMP reliability
   is discussed in Section 4.3; stream options are covered in Section
   4.4; stream setup is presented in Section 4.5; Section 4.6
   illustrates stream modification including stream expansion,
   reduction, changes of the quality of service associated to a stream.
   Finally, stream deletion is handled in Section 4.7.

4.1  Types of Streams

   SCMP allows for the setup and management of different types of
   streams. Streams differ in the way they are built and the information
   maintained on connected targets.










Delgrossi & Berger, Editors   Experimental                     [Page 29]

RFC 1819              ST2+ Protocol Specification            August 1995


4.1.1  Stream Building

   Streams may be built in a sender-oriented fashion, receiver-oriented
   fashion, or with a mixed approach:

o   in the sender-oriented fashion, the application at the origin
    provides the ST agent with the list of receivers for the stream. New
    targets, if any, are also added from the origin.

o   in the receiver-oriented approach, the application at the origin
    creates an empty stream that contains no targets. Each target then
    joins the stream autonomously.

o   in the mixed approach, the application at the origin creates a
    stream that contains some targets and other targets join the stream
    autonomously.

   ST2 provides stream options to support sender-oriented and mixed
   approach steams. Receiver-oriented streams can be emulated through
   the use of mixed streams. The fashion by which targets may be added
   to a particular stream is controlled via join authorization levels.
   Join authorization levels are described in Section 4.4.2.

4.1.2  Knowledge of Receivers

   When streams are built in the sender-oriented fashion, all ST agents
   will have full information on all targets down stream of a particular
   agent. In this case, target information is relayed down stream from
   agent-to-agent during stream set-up.

   When targets add themselves to mixed approach streams, upstream ST
   agents may or may not be informed. Propagation of information on
   targets that "join" a stream is also controlled via join
   authorization levels. As previously mentioned, join authorization
   levels are described in Section 4.4.2.

   This leads to two types of streams:

o   full target information is propagated in a full-state stream. For
    such streams, all agents are aware of all downstream targets
    connected to the stream. This results in target information being
    maintained at the origin and at intermediate agents. Operations on
    single targets are always possible, i.e., change a certain target,
    or, drop that target from the stream. It is also always possible for
    any ST agent to attempt recovery of all downstream targets.






Delgrossi & Berger, Editors   Experimental                     [Page 30]

RFC 1819              ST2+ Protocol Specification            August 1995


o   in light-weight streams, it is possible that the origin and other
    upstream agents have no knowledge about some targets. This results
    in less maintained state and easier stream management, but it limits
    operations on specific targets. Special actions may be required to
    support change and drop operations on unknown targets, see Section
    5.7. Also, stream recovery may not be possible. Of course, generic
    functions such as deleting the whole stream, are still possible. It
    is expected that applications that will have a large number of
    targets will use light-weight streams in order to limit state in
    agents and the number of targets per control message.

   Full-state streams serve well applications as video conferencing or
   distributed gaming, where it is important to have knowledge on the
   connected receivers, e.g., to limit who participates. Light-weight
   streams may be exploited by applications such as remote lecturing or
   playback applications of radio and TV broadcast where the receivers
   do not need to be known by the sender. Section 4.4.2 defines join
   authorization levels, which support two types of full-state streams
   and one type of light-weight stream.

4.2  Control PDUs

   SCMP defines the following PDUs (the main purpose of each PDU is also
   indicated):

1.      ACCEPT          to accept a new stream
2.      ACK             to acknowledge an incoming message
3.      CHANGE          to change the quality of service associated with
                                a stream
4.      CONNECT         to establish a new stream or add new targets to
                                an existing stream
5.      DISCONNECT      to remove some or all of the stream's targets
6.      ERROR           to indicate an error contained in an incoming
                                message
7.      HELLO           to detect failures of neighbor ST agents
8.      JOIN            to request stream joining from a target
9.      JOIN-REJECT     to reject a stream joining request from a target
10.     NOTIFY          to inform an ST agent of a significant event
11.     REFUSE          to refuse the establishment of a new stream
12.     STATUS          to query an ST agent on a specific stream
13.     STATUS-RESPONSE to reply queries on a specific stream

   SCMP follows a request-response model with all requests expecting
   responses. Retransmission after timeout is used to allow for lost or
   ignored messages. Control messages do not extend across packet
   boundaries; if a control message is too large for the MTU of a hop,
   its information is partitioned and a control message per partition is
   sent, as described in Section 5.1.2.



Delgrossi & Berger, Editors   Experimental                     [Page 31]

RFC 1819              ST2+ Protocol Specification            August 1995


   CONNECT and CHANGE request messages are answered with ACCEPT messages
   which indicate success, and with REFUSE messages which indicate
   failure. JOIN messages are answered with either a CONNECT message
   indicating success, or with a JOIN-REJECT message indicating failure.
   Targets may be removed from a stream by either the origin or the
   target via the DISCONNECT and REFUSE messages.

   The ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY
   and REFUSE messages must always be explicitly acknowledged:

o   with an ACK message, if the message was received correctly and it
    was possible to parse and correctly extract and interpret its
    header, fields and parameters,

o   with an ERROR message, if a syntax error was detected in the header,
    fields, or parameters included in the message. The errored PDU may
    be optionally returned as part of the ERROR message. An ERROR
    message indicates a syntax error only. If any other errors are
    detected, it is necessary to first acknowledge with ACK and then
    take appropriate actions. For instance, suppose a CHANGE message
    contains an unknown SID: first, an ACK message has to be sent, then
    a REFUSE message with ReasonCode (SIDUnknown) follows.

   If no ACK or ERROR message are received before the correspondent
   timer expires, a timeout failure occurs. The way an ST agent should
   handle timeout failures is described in Section 5.2.

   ACK, ERROR, and STATUS-RESPONSE messages are never acknowledged.

   HELLO messages are a special case. If they contain a syntax error, an
   ERROR message should be generated in response. Otherwise, no
   acknowledgment or response should be generated. Use of HELLO messages
   is discussed in Section 6.1.2.

   STATUS messages containing a syntax error should be answered with an
   ERROR message. Otherwise, a STATUS-RESPONSE message should be sent
   back in response. Use of STATUS and STATUS-RESPONSE are discussed in
   Section 8.4.

4.3  SCMP Reliability

   SCMP is made reliable through the use of retransmission when a
   response is not received in a timely manner. The ACCEPT, CHANGE,
   CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and REFUSE messages
   all must be answered with an ACK message, see Section 4.2. In
   general, when sending a SCMP message which requires an ACK response,
   the sending ST agent needs to set the Toxxxx timer (where xxxx is the
   SCMP message type, e.g., ToConnect). If it does not receive an ACK



Delgrossi & Berger, Editors   Experimental                     [Page 32]

RFC 1819              ST2+ Protocol Specification            August 1995


   before the Toxxxx timer expires, the ST agent should retransmit the
   SCMP message. If no ACK has been received within Nxxxx
   retransmissions, then a SCMP timeout condition occurs and the ST
   agent enters its SCMP timeout recovery state. The actions performed
   by the ST agent as the result of the SCMP timeout condition differ
   for different SCMP messages and are described in Section 5.2.

   For some SCMP messages (CONNECT, CHANGE, JOIN, and STATUS) the
   sending ST agent also expects a response back (ACCEPT/REFUSE,
   CONNECT/JOIN- REJECT) after ACK has been received. For these cases,
   the ST agent needs to set the ToxxxxResp timer after it receives the
   ACK. (As before, xxxx is the initiating SCMP message type, e.g.,
   ToConnectResp).  If it does not receive the appropriate response back
   when ToxxxxResp expires, the ST agent updates its state and performs
   appropriate recovery action as described in Section 5.2. Suggested
   constants are given in Section 10.5.4.

   The timeout and retransmission algorithm is implementation dependent
   and it is outside the scope of this document. Most existing
   algorithms are based on an estimation of the Round Trip Time (RTT)
   between two agents. Therefore, SCMP contains a mechanism, see Section
   8.5, to estimate this RTT. Note that the timeout related variable
   names described above are for reference purposes only, implementors
   may choose to combine certain variables.

4.4  Stream Options

   An application may select among some stream options. The desired
   options are indicated to the ST agent at the origin when a new stream
   is created. Options apply to single streams and are valid during the
   whole stream's lifetime. The options chosen by the application at the
   origin are included into the initial CONNECT message, see Section
   4.5.3. When a CONNECT message reaches a target, the application at
   the target is notified of the stream options that have been selected,
   see Section 4.5.5.

4.4.1  No Recovery

   When a stream failure is detected, an ST agent would normally attempt
   stream recovery, as described in Section 6.2. The NoRecovery option
   is used to indicate that ST agents should not attempt recovery for
   the stream. The protocol behavior in the case that the NoRecovery
   option has been selected is illustrated in Section 6.2. The
   NoRecovery option is specified by setting the S-bit in the CONNECT
   message, see Section 10.4.4. The S-bit can be set only by the origin
   and it is never modified by intermediate and target ST agents.





Delgrossi & Berger, Editors   Experimental                     [Page 33]

RFC 1819              ST2+ Protocol Specification            August 1995


4.4.2  Join Authorization Level

   When a new stream is created, it is necessary to define the join
   authorization level associated with the stream. This level determines
   the protocol behavior in case of stream joining, see Section 4.1 and
   Section 4.6.3. The join authorization level for a stream is defined
   by the J-bit and N-bit in the CONNECT message header, see Section
   10.4.4.  One of the following authorization levels has to be
   selected:

   o   Level 0 - Refuse Join (JN = 00): No targets are allowed to join this
       stream.

   o   Level 1 - OK, Notify Origin (JN = 01): Targets are allowed to join
       the stream. The origin is notified that the target has joined.

   o   Level 2 - OK (JN = 10): Targets are allowed to join the stream. No
       notification is sent to the stream origin.

   Some applications may choose to maintain tight control on their
   streams and will not permit any connections without the origin's
   permission. For such streams, target applications may request to be
   added by sending an out-of-band, i.e., via regular IP, request to the
   origin. The origin, if it so chooses, can then add the target
   following the process described in Section 4.6.1.

   The selected authorization level impacts stream handling and the
   state that is maintained for the stream, as described in Section 4.1.

4.4.3  Record Route

   The RecordRoute option can be used to request the route between the
   origin and a target be recorded and delivered to the application.
   This option may be used while connecting, accepting, changing, or
   refusing a stream. The results of a RecordRoute option requested by
   the origin, i.e., as part of the CONNECT or CHANGE messages, are
   delivered to the target. The results of a RecordRoute option
   requested by the target, i.e., as part of the ACCEPT or REFUSE
   messages, are delivered to the origin.

   The RecordRoute option is specified by adding the RecordRoute
   parameter to the mentioned SCMP messages. The format of the
   RecordRoute parameter is shown in Section 10.3.5. When adding this
   parameter, the ST agent at the origin must determine the number of
   entries that may be recorded as explained in Section 10.3.5.






Delgrossi & Berger, Editors   Experimental                     [Page 34]

RFC 1819              ST2+ Protocol Specification            August 1995


4.4.4  User Data

   The UserData option can be used by applications to transport
   application specific data along with some SCMP control messages. This
   option can be included with ACCEPT, CHANGE, CONNECT, DISCONNECT, and
   REFUSE messages. The format of the UserData parameter is shown in
   Section 10.3.7. This option may be included by the origin, or the
   target, by adding the UserData parameter to the mentioned SCMP
   messages. This option may only be included once per SCMP message.

4.5  Stream Setup

   This section presents a description of stream setup. For simplicity,
   we assume that everything succeeds, e.g., any required resources are
   available, messages are properly delivered, and the routing is
   correct. Possible failures in the setup phase are handled in Section
   5.2.

4.5.1  Information from the Application

   Before stream setup can be started, the application has to collect
   the necessary information to determine the characteristics for the
   connection. This includes identifying the participants and selecting
   the QoS parameters of the data flow. Information passed to the ST
   agent by the application includes:

o   the list of the stream's targets (Section 10.3.6). The list may be
    empty (Section 4.5.3.1),

o   the flow specification containing the desired quality of service for
    the stream (Section 9),

o   information on the groups in which the stream is a member, if any
    (Section 7),

o   information on the options selected for the stream (Section 4.4).

4.5.2  Initial Setup at the Origin

   The ST agent at the origin then performs the following operations:

o   allocates a stream ID (SID) for the stream (Section 8.1),

o   invokes the routing function to determine the set of next-hops for
    the stream (Section 4.5.2.1),

o   invokes the Local Resource Manager (LRM) to reserve resources
    (Section 4.5.2.2),



Delgrossi & Berger, Editors   Experimental                     [Page 35]

RFC 1819              ST2+ Protocol Specification            August 1995


o   creates local database entries to store information on the new
    stream,

o   propagates the stream creation request to the next-hops determined
    by the routing function (Section 4.5.3).

4.5.2.1  Invoking the Routing Function

   An ST agent that is setting up a stream invokes the routing function
   to find the next-hop to reach each of the targets specified by the
   target list provided by the application. This is similar to the
   routing decision in IP. However, in this case the route is to a
   multitude of targets with QoS requirements rather than to a single
   destination.

   The result of the routing function is a set of next-hop ST agents.
   The set of next-hops selected by the routing function is not
   necessarily the same as the set of next-hops that IP would select
   given a number of independent IP datagrams to the same destinations.
   The routing algorithm may attempt to optimize parameters other than
   the number of hops that the packets will take, such as delay, local
   network bandwidth consumption, or total internet bandwidth
   consumption.  Alternatively, the routing algorithm may use a simple
   route lookup for each target.

   Once a next-hop is selected by the routing function, it persists for
   the whole stream lifetime, unless a network failure occurs.

4.5.2.2  Reserving Resources

   The ST agent invokes the Local Resource Manager (LRM) to perform the
   appropriate reservations. The ST agent presents the LRM with
   information including:

o   the flow specification with the desired quality of service for the
    stream (Section 9),

o   the version number associated with the flow specification
    (Section 9).

o   information on the groups the stream is member in, if any
    (Section 7),

   The flow specification contains information needed by the LRM to
   allocate resources. The LRM updates the flow specification contents
   information before returning it to the ST agent. Section 9.2.3
   defines the fields of the flow specification to be updated by the
   LRM.



Delgrossi & Berger, Editors   Experimental                     [Page 36]

RFC 1819              ST2+ Protocol Specification            August 1995


   The membership of a stream in a group may affect the amount of
   resources that have to be allocated by the LRM, see Section 7.

4.5.3  Sending CONNECT Messages

   The ST agent sends a CONNECT message to each of the next-hop ST
   agents identified by the routing function. Each CONNECT message
   contains the SID, the selected stream options, the FlowSpec, and a
   TargetList. The format of the CONNECT message is defined by Section
   10.4.4. In general, the FlowSpec and TargetList depend on both the
   next-hop and the intervening network. Each TargetList is a subset of
   the original TargetList, identifying the targets that are to be
   reached through the next-hop to which the CONNECT message is being
   sent.

   The TargetList may be empty, see Section 4.5.3.1; if the TargetList
   causes a too long CONNECT message to be generated, the CONNECT
   message is partitioned as explained in Section 5.1.2. If multiple
   next-hops are to be reached through a network that supports network
   level multicast, a different CONNECT message must nevertheless be
   sent to each next-hop since each will have a different TargetList.

4.5.3.1  Empty Target List

   An application at the origin may request the local ST agent to create
   an empty stream. It does so by passing an empty TargetList to the
   local ST agent during the initial stream setup. When the local ST
   agent receives a request to create an empty stream, it allocates the
   stream ID (SID), updates its local database entries to store
   information on the new stream and notifies the application that
   stream setup is complete. The local ST agent does not generate any
   CONNECT message for streams with an empty TargetList. Targets may be
   later added by the origin, see Section 4.6.1, or they may
   autonomously join the stream, see Section 4.6.3.

4.5.4  CONNECT Processing by an Intermediate ST agent

   An ST agent receiving a CONNECT message, assuming no errors, responds
   to the previous-hop with an ACK. The ACK message must identify the
   CONNECT message to which it corresponds by including the reference
   number indicated by the Reference field of the CONNECT message. The
   intermediate ST agent calls the routing function, invokes the LRM to
   reserve resources, and then propagates the CONNECT messages to its
   next-hops, as described in the previous sections.







Delgrossi & Berger, Editors   Experimental                     [Page 37]

RFC 1819              ST2+ Protocol Specification            August 1995


4.5.5  CONNECT Processing at the Targets

   An ST agent that is the target of a CONNECT message, assuming no
   errors, responds to the previous-hop with an ACK. The ST agent
   invokes the LRM to reserve local resources and then queries the
   specified application process whether or not it is willing to accept
   the connection.

   The application is presented with parameters from the CONNECT message
   including the SID, the selected stream options, Origin, FlowSpec,
   TargetList, and Group, if any, to be used as a basis for its
   decision.  The application is identified by a combination of the
   NextPcol field, from the Origin parameter, and the service access
   point, or SAP, field included in the correspondent (usually single
   remaining) Target of the TargetList. The contents of the SAP field
   may specify the port or other local identifier for use by the
   protocol layer above the host ST layer. Subsequently received data
   packets will carry the SID, that can be mapped into this information
   and be used for their delivery.

   Finally, based on the application's decision, the ST agent sends to
   the previous-hop from which the CONNECT message was received either
   an ACCEPT or REFUSE message. Since the ACCEPT (or REFUSE) message has
   to be acknowledged by the previous-hop, it is assigned a new
   Reference number that will be returned in the ACK. The CONNECT
   message to which ACCEPT (or REFUSE) is a reply is identified by
   placing the CONNECT's Reference number in the LnkReference field of
   ACCEPT (or REFUSE). The ACCEPT message contains the FlowSpec as
   accepted by the application at the target.

4.5.6  ACCEPT Processing by an Intermediate ST agent

   When an intermediate ST agent receives an ACCEPT, it first verifies
   that the message is a response to an earlier CONNECT. If not, it
   responds to the next-hop ST agent with an ERROR message, with
   ReasonCode (LnkRefUnknown). Otherwise, it responds to the next-hop ST
   agent with an ACK, and propagates the individual ACCEPT message to
   the previous-hop along the same path traced by the CONNECT but in the
   reverse direction toward the origin.

   The FlowSpec is included in the ACCEPT message so that the origin and
   intermediate ST agents can gain access to the information that was
   accumulated as the CONNECT traversed the internet. Note that the
   resources, as specified in the FlowSpec in the ACCEPT message, may
   differ from the resources that were reserved when the CONNECT was
   originally processed. Therefore, the ST agent presents the LRM with
   the FlowSpec included in the ACCEPT message. It is expected that each
   LRM adjusts local reservations releasing any excess resources. The



Delgrossi & Berger, Editors   Experimental                     [Page 38]

RFC 1819              ST2+ Protocol Specification            August 1995


   LRM may choose not to adjust local reservations when that adjustment
   may result in the loss of needed resources. It may also choose to
   wait to adjust allocated resources until all targets in transition
   have been accepted or refused.

   In the case where the intermediate ST agent is acting as the origin
   with respect to this target, see Section 4.6.3.1, the ACCEPT message
   is not propagated upstream.

4.5.7  ACCEPT Processing by the Origin

   The origin will eventually receive an ACCEPT (or REFUSE) message from
   each of the targets. As each ACCEPT is received, the application is
   notified of the target and the resources that were successfully
   allocated along the path to it, as specified in the FlowSpec
   contained in the ACCEPT message. The application may then use the
   information to either adopt or terminate the portion of the stream to
   each target.

   When an ACCEPT is received by the origin, the path to the target is
   considered to be established and the ST agent is allowed to forward
   the data along this path as explained in Section 2 and in Section
   3.1.

4.5.8  REFUSE Processing by the Intermediate ST agent

   If an application at a target does not wish to participate in the
   stream, it sends a REFUSE message back to the origin with ReasonCode
   (ApplDisconnect). An intermediate ST agent that receives a REFUSE
   message with ReasonCode (ApplDisconnect) acknowledges it by sending
   an ACK to the next-hop, invokes the LRM to adjusts reservations as
   appropriate, deletes the target entry from the internal database, and
   propagates the REFUSE message back to the previous-hop ST agent.

   In the case where the intermediate ST agent is acting as the origin
   with respect to this target, see Section 4.6.3.1, the REFUSE message
   is only propagated upstream when there are no more downstream agents
   participating in the stream. In this case, the agent indicates that
   the agent is to be removed from the stream propagating the REFUSE
   message with the G-bit set (1).

4.5.9  REFUSE Processing by the Origin

   When the REFUSE message reaches the origin, the ST agent at the
   origin sends an ACK and notifies the application that the target is
   no longer part of the stream and also if the stream has no remaining
   targets. If there are no remaining targets, the application may wish
   to terminate the stream, or keep the stream active to allow addition



Delgrossi & Berger, Editors   Experimental                     [Page 39]

RFC 1819              ST2+ Protocol Specification            August 1995


   of targets or stream joining as described in Section 4.6.3.

4.5.10  Other Functions during Stream Setup

   Some other functions have to be accomplished by an ST agent as
   CONNECT messages travel downstream and ACCEPT (or REFUSE) messages
   travel upstream during the stream setup phase. They were not
   mentioned in the previous sections to keep the discussion as simple
   as possible. These functions include:

   o   computing the smallest Maximum Transmission Unit size over the path
       to the targets, as part of the MTU discovery mechanism presented in
       Section 8.6. This is done by updating the MaxMsgSize field of the
       CONNECT message, see Section 10.4.4. This value is carried back to
       origin in the MaxMsgSize field of the ACCEPT message, see Section
       10.4.1.

   o   counting the number of IP clouds to be traversed to reach the
       targets, if any. IP clouds are traversed when the IP encapsulation
       mechanism is used. This mechanism described in Section 8.7.
       Encapsulating agents update the IPHops field of the CONNECT message,
       see Section 10.4.4. The resulting value is carried back to origin in
       the IPHops field of the ACCEPT message, see Section 10.4.1.

   o   updating the RecoveryTimeout value for the stream based on what can
       the agent can support. This is part of the stream recovery
       mechanism, in Section 6.2. This is done by updating the
       RecoveryTimeout field of the CONNECT message, see Section 10.4.4.
       This value is carried back to origin in the RecoveryTimeout field of
       the ACCEPT message, see Section 10.4.1.

4.6  Modifying an Existing Stream

   Some applications may wish to modify a stream after it has been
   created. Possible changes include expanding a stream, reducing it,
   and changing its FlowSpec. The origin may add or remove targets as
   described in Section 4.6.1 and Section 4.6.2. Targets may request to
   join the stream as described in Section 4.6.3 or, they may decide to
   leave a stream as described in Section 4.6.4. Section 4.6.5 explains
   how to change a stream's FlowSpec.

   As defined by Section 2, an ST agent can handle only one stream
   modification at a time. If a stream modification operation is already
   underway, further requests are queued and handled when the previous
   operation has been completed. This also applies to two subsequent
   requests of the same kind, e.g., two subsequent changes to the
   FlowSpec.




Delgrossi & Berger, Editors   Experimental                     [Page 40]

RFC 1819              ST2+ Protocol Specification            August 1995


4.6.1  The Origin Adding New Targets

   It is possible for an application at the origin to add new targets to
   an existing stream any time after the stream has been established.
   Before new targets are added, the application has to collect the
   necessary information on the new targets. Such information is passed
   to the ST agent at the origin.

   The ST agent at the origin issues a CONNECT message that contains the
   SID, the FlowSpec, and the TargetList specifying the new targets.
   This is similar to sending a CONNECT message during stream
   establishment, with the following exceptions: the origin checks that
   a) the SID is valid, b) the targets are not already members of the
   stream, c) that the LRM evaluates the FlowSpec of the new target to
   be the same as the FlowSpec of the existing stream, i.e., it requires
   an equal or smaller amount of resources to be allocated. If the
   FlowSpec of the new target does not match the FlowSpec of the
   existing stream, an error is generated with ReasonCode
   (FlowSpecMismatch). Functions to compare flow specifications are
   provided by the LRM, see Section 1.4.5.

   An intermediate ST agent that is already a participant in the stream
   looks at the SID and StreamCreationTime, and verifies that the stream
   is the same. It then checks if the intersection of the TargetList and
   the targets of the established stream is empty. If this is not the
   case, it responds with a REFUSE message with ReasonCode
   (TargetExists) that contains a TargetList of those targets that were
   duplicates. To indicate that the stream exists, and includes the
   listed targets, the ST agent sets to one (1) the E-bit of the REFUSE
   message, see Section 10.4.11.  The agent then proceeds processing
   each new target in the TargetList.

   For each new target in the TargetList, processing is much the same as
   for the original CONNECT. The CONNECT is acknowledged, propagated,
   and network resources are reserved. Intermediate or target ST agents
   that are not already participants in the stream behave as in the case
   of stream setup (see Section 4.5.4 and Section 4.5.5).

4.6.2  The Origin Removing a Target

   It is possible for an application at the origin to remove existing
   targets of a stream any time after the targets have accepted the
   stream. The application at the origin specifies the set of targets
   that are to be removed and informs the local ST agent. Based on this
   information, the ST agent sends DISCONNECT messages with the
   ReasonCode (ApplDisconnect) to the next-hops relative to the targets.





Delgrossi & Berger, Editors   Experimental                     [Page 41]

RFC 1819              ST2+ Protocol Specification            August 1995


   An ST agent that receives a DISCONNECT message must acknowledge it by
   sending an ACK to the previous-hop. The ST agent updates its state
   and notifies the LRM of the target deletion so that the LRM can
   modify reservations as appropriate. When the DISCONNECT message
   reaches the target, the ST agent also notifies the application that
   the target is no longer part of the stream. When there are no
   remaining targets that can be reached through a particular next-hop,
   the ST agent informs the LRM and it deletes the next-hop from its
   next-hops set.

   SCMP also provides a flooding mechanism to delete targets that joined
   the stream without notifying the origin. The special case of target
   deletion via flooding is described in Section 5.7.

4.6.3  A Target Joining a Stream

   An application may request to join an existing stream. It has to
   collect information on the stream including the stream ID (SID) and
   the IP address of the stream's origin. This can be done out-of-band,
   e.g., via regular IP. The information is then passed to the local ST
   agent. The ST agent generates a JOIN message containing the
   application's request to join the stream and sends it toward the
   stream origin.

   An ST agent receiving a JOIN message, assuming no errors, responds
   with an ACK. The ACK message must identify the JOIN message to which
   it corresponds by including the Reference number indicated by the
   Reference field of the JOIN message. If the ST agent is not traversed
   by the stream that has to be joined, it propagates the JOIN message
   toward the stream's origin. Once a JOIN message has been
   acknowledged, ST agents do not retain any state information related
   to the JOIN message.

   Eventually, an ST agent traversed by the stream or the stream's
   origin itself is reached. This agent must respond to a received JOIN
   first with an ACK to the ST agent from which the message was
   received, then, it issues either a CONNECT or a JOIN-REJECT message
   and sends it toward the target. The response to the join request is
   based on the join authorization level associated with the stream, see
   Section 4.4.2:

o   If the stream has authorization level #0 (refuse join):
    The ST agent sends a JOIN-REJECT message toward the target with
    ReasonCode (JoinAuthFailure).

o   If the stream has authorization level #1 (ok, notify origin):
    The ST agent sends a CONNECT message toward the target with a
    TargetList including the target that requested to join the stream.



Delgrossi & Berger, Editors   Experimental                     [Page 42]

RFC 1819              ST2+ Protocol Specification            August 1995


    This eventually results in adding the target to the stream. When
    the ST agent receives the ACCEPT message indicating that the new
    target has been added, it does not propagate the ACCEPT message
    backwards (Section 4.5.6). Instead, it issues a NOTIFY message
    with ReasonCode (TargetJoined) so that upstream agents, including
    the origin, may add the new target to maintained state
    information. The NOTIFY message includes all target specific
    information.

o   If the stream has authorization level #2 (ok):
    The ST agent sends a CONNECT message toward the target with a
    TargetList including the target that requested to join the stream.
    This eventually results in adding the target to the stream. When
    the ST agent receives the ACCEPT message indicating that the new
    target has been added, it does not propagate the ACCEPT message
    backwards (Section 4.5.6), nor does it notify the origin. A NOTIFY
    message is generated with ReasonCode (TargetJoined) if the target
    specific information needs to be propagated back to the origin. An
    example of such information is change in MTU, see Section 8.6.

4.6.3.1  Intermediate Agent (Router) as Origin

   When a stream has join authorization level #2, see Section 4.4.2, it
   is possible that the stream origin is unaware of some targets
   participating in the stream. In this case, the ST intermediate agent
   that first sent a CONNECT message to this target has to act as the
   stream origin for the given target. This includes:

o   if the whole stream is deleted, the intermediate agent must
    disconnect the target.

o   if the stream FlowSpec is changed, the intermediate agent must
    change the FlowSpec for the target as appropriate.

o   proper handling of ACCEPT and REFUSE messages, without propagation
    to upstream ST agents.

o   generation of NOTIFY messages when needed. (As described above.)

   The intermediate agent behaves normally for all other targets added
   to the stream as a consequence of a CONNECT message issued by the
   origin.

4.6.4  A Target Deleting Itself

   The application at the target may inform the local ST agent that it
   wants to be removed from the stream. The ST agent then forms a REFUSE
   message with the target itself as the only entry in the TargetList



Delgrossi & Berger, Editors   Experimental                     [Page 43]

RFC 1819              ST2+ Protocol Specification            August 1995


   and with ReasonCode (ApplDisconnect). The REFUSE message is sent back
   to the origin via the previous-hop. If a stream has multiple targets
   and one target leaves the stream using this REFUSE mechanism, the
   stream to the other targets is not affected; the stream continues to
   exist.

   An ST agent that receives a REFUSE message acknowledges it by sending
   an ACK to the next-hop. The target is deleted and the LRM is notified
   so that it adjusts reservations as appropriate. The REFUSE message is
   also propagated back to the previous-hop ST agent except in the case
   where the agent is acting as the origin. In this case a NOTIFY may be
   propagated instead, see Section 4.6.3.

   When the REFUSE reaches the origin, the origin sends an ACK and
   notifies the application that the target is no longer part of the
   stream.

4.6.5  Changing a Stream's FlowSpec

   The application at the origin may wish to change the FlowSpec of an
   established stream. Changing the FlowSpec is a critical operation and
   it may even lead in some cases to the deletion of the affected
   targets. Possible problems with FlowSpec changes are discussed in
   Section 5.6.

   To change the stream's FlowSpec, the application informs the ST agent
   at the origin of the new FlowSpec and of the list of targets relative
   to the change. The ST agent at the origin then issues one CHANGE
   message per next-hop including the new FlowSpec and sends it to the
   relevant next-hop ST agents. If the G-bit field of the CHANGE message
   is set (1), the change affects all targets in the stream.

   The CHANGE message contains a bit called I-bit, see Section 10.4.3.
   By default, the I-bit is set to zero (0) to indicate that the LRM is
   expected to try and perform the requested FlowSpec change without
   risking to tear down the stream. Applications that desire a higher
   probability of success and are willing to take the risk of breaking
   the stream can indicate this by setting the I-bit to one (1).
   Applications that require the requested modification in order to
   continue operating are expected to set this bit.

   An intermediate ST agent that receives a CHANGE message first sends
   an ACK to the previous-hop and then provides the FlowSpec to the LRM.
   If the LRM can perform the change, the ST agent propagates the CHANGE
   messages along the established paths.






Delgrossi & Berger, Editors   Experimental                     [Page 44]

RFC 1819              ST2+ Protocol Specification            August 1995


   If the whole process succeeds, the CHANGE messages will eventually
   reach the targets. Targets respond with an ACCEPT (or REFUSE) message
   that is propagated back to the origin. In processing the ACCEPT
   message on the way back to the origin, excess resources may be
   released by the LRM as described in Section 4.5.6. The REFUSE message
   must have the ReasonCode (ApplRefused).

   SCMP also provides a flooding mechanism to change targets that joined
   the stream without notifying the origin. The special case of target
   change via flooding is described in Section 5.7.

4.7  Stream Tear Down

   A stream is usually terminated by the origin when it has no further
   data to send. A stream is also torn down if the application should
   terminate abnormally or if certain network failures are encountered.
   Processing in this case is identical to the previous descriptions
   except that the ReasonCode (ApplAbort, NetworkFailure, etc.) is
   different.

   When all targets have left a stream, the origin notifies the
   application of that fact, and the application is then responsible for
   terminating the stream. Note, however, that the application may
   decide to add targets to the stream instead of terminating it, or may
   just leave the stream open with no targets in order to permit stream
   joins.

5.  Exceptional Cases

   The previous descriptions covered the simple cases where everything
   worked. We now discuss what happens when things do not succeed.
   Included are situations where messages exceed a network MTU, are
   lost, the requested resources are not available, the routing fails or
   is inconsistent.

5.1  Long ST Messages

   It is possible that an ST agent, or an application, will need to send
   a message that exceeds a network's Maximum Transmission Unit (MTU).
   This case must be handled but not via generic fragmentation, since
   ST2 does not support generic fragmentation of either data or control
   messages.

5.1.1  Handling of Long Data Packets

   ST agents discard data packets that exceed the MTU of the next-hop
   network. No error message is generated. Applications should avoid
   sending data packets larger than the minimum MTU supported by a given



Delgrossi & Berger, Editors   Experimental                     [Page 45]

RFC 1819              ST2+ Protocol Specification            August 1995


   stream. The application, both at the origin and targets, can learn
   the stream minimum MTU through the MTU discovery mechanism described
   in Section 8.6.

5.1.2  Handling of Long Control Packets

   Each ST agent knows the MTU of the networks to which it is connected,
   and those MTUs restrict the size of the SCMP message it can send. An
   SCMP message size can exceed the MTU of a given network for a number
   of reasons:

o   the TargetList parameter (Section 10.3.6) may be too long;

o   the RecordRoute parameter (Section 10.3.5) may be too long.

o   the UserData parameter (Section 10.3.7) may be too long;

o   the PDUInError field of the ERROR message (Section 10.4.6) may be
    too long;

   An ST agent receiving or generating a too long SCMP message should:

o   break the message into multiple messages, each carrying part of the
    TargetList. Any RecordRoute and UserData parameters are replicated
    in each message for delivery to all targets. Applications that
    support a large number of targets may avoid using long TargetList
    parameters, and are expected to do so, by exploiting the stream
    joining functions, see Section 4.6.3. One exception to this rule
    exists. In the case of a long TargetList parameter to be included in
    a STATUS-RESPONSE message, the TargetList parameter is just
    truncated to the point where the list can fit in a single message,
    see Section 8.4.

o   for down stream agents: if the TargetList parameter contains a
    single Target element and the message size is still too long, the ST
    agent should issue a REFUSE message with ReasonCode
    (RecordRouteSize) if the size of the RecordRoute parameter causes
    the SCMP message size to exceed the network MTU, or with ReasonCode
    (UserDataSize) if the size of the UserData parameter causes the SCMP
    message size to exceed the network MTU. If both RecordRoute and
    UserData parameters are present the ReasonCode (UserDataSize) should
    be sent. For messages generated at the target: the target ST agent
    must check for SCMP messages that may exceed the MTU on the complete
    target-to-origin path, and inform the application that a too long
    SCMP messages has been generated. The format for the error reporting
    is a local implementation issue. The error codes are the same as
    previously stated.




Delgrossi & Berger, Editors   Experimental                     [Page 46]

RFC 1819              ST2+ Protocol Specification            August 1995


   ST agents generating too long ERROR messages, simply truncate the
   PDUInError field to the point where the message is smaller than the
   network MTU.

5.2  Timeout Failures

   As described in Section 4.3, SCMP message delivery is made reliable
   through the use of acknowledgments, timeouts, and retransmission. The
   ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and
   REFUSE messages must always be acknowledged, see Section 4.2. In
   addition, for some SCMP messages (CHANGE, CONNECT, JOIN) the sending
   ST agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN-
   REJECT) after an ACK has been received. Also, the STATUS message must
   be answered with a STATUS-RESPONSE message.

   The following sections describe the handling of each of the possible
   failure cases due to timeout situations while waiting for an
   acknowledgment or a response. The timeout related variables, and
   their names, used in the next sections are for reference purposes
   only. They may be implementation specific. Different implementations
   are not required to share variable names, or even the mechanism by
   which the timeout and retransmission behavior is implemented.

5.2.1  Failure due to ACCEPT Acknowledgment Timeout

   An ST agent that sends an ACCEPT message upstream expects an ACK from
   the previous-hop ST agent. If no ACK is received before the ToAccept
   timeout expires, the ST agent should retry and send the ACCEPT
   message again. After NAccept unsuccessful retries, the ST agent sends
   a REFUSE message toward the origin, and a DISCONNECT message toward
   the targets. Both REFUSE and DISCONNECT must identify the affected
   targets and specify the ReasonCode (RetransTimeout).

5.2.2  Failure due to CHANGE Acknowledgment Timeout

   An ST agent that sends a CHANGE message downstream expects an ACK
   from the next-hop ST agent. If no ACK is received before the ToChange
   timeout expires, the ST agent should retry and send the CHANGE
   message again. After NChange unsuccessful retries, the ST agent
   aborts the change attempt by sending a REFUSE message toward the
   origin, and a DISCONNECT message toward the targets. Both REFUSE and
   DISCONNECT must identify the affected targets and specify the
   ReasonCode (RetransTimeout).








Delgrossi & Berger, Editors   Experimental                     [Page 47]

RFC 1819              ST2+ Protocol Specification            August 1995


5.2.3  Failure due to CHANGE Response Timeout

   Only the origin ST agent implements this timeout. After correctly
   receiving the ACK to a CHANGE message, an ST agent expects to receive
   an ACCEPT, or REFUSE message in response. If one of these messages is
   not received before the ToChangeResp timer expires, the ST agent at
   the origin aborts the change attempt, and behaves as if a REFUSE
   message with the E-bit set and with ReasonCode (ResponseTimeout) is
   received.

5.2.4  Failure due to CONNECT Acknowledgment Timeout

   An ST agent that sends a CONNECT message downstream expects an ACK
   from the next-hop ST agent. If no ACK is received before the
   ToConnect timeout expires, the ST agent should retry and send the
   CONNECT message again. After NConnect unsuccessful retries, the ST
   agent sends a REFUSE message toward the origin, and a DISCONNECT
   message toward the targets. Both REFUSE and DISCONNECT must identify
   the affected targets and specify the ReasonCode (RetransTimeout).

5.2.5  Failure due to CONNECT Response Timeout

   Only the origin ST agent implements this timeout. After correctly
   receiving the ACK to a CONNECT message, an ST agent expects to
   receive an ACCEPT or REFUSE message in response. If one of these
   messages is not received before the ToConnectResp timer expires, the
   origin ST agent aborts the connection setup attempt, acts as if a
   REFUSE message is received, and it sends a DISCONNECT message toward
   the targets.  Both REFUSE and DISCONNECT must identify the affected
   targets and specify the ReasonCode (ResponseTimeout).

5.2.6  Failure due to DISCONNECT Acknowledgment Timeout

   An ST agent that sends a DISCONNECT message downstream expects an ACK
   from the next-hop ST agent. If no ACK is received before the
   ToDisconnect timeout expires, the ST agent should retry and send the
   DISCONNECT message again. After NDisconnect unsuccessful retries, the
   ST agent simply gives up and it assumes the next-hop ST agent is not
   part in the stream any more.

5.2.7  Failure due to JOIN Acknowledgment Timeout

   An ST agent that sends a JOIN message toward the origin expects an
   ACK from a neighbor ST agent. If no ACK is received before the ToJoin
   timeout expires, the ST agent should retry and send the JOIN message
   again. After NJoin unsuccessful retries, the ST agent sends a JOIN-
   REJECT message back in the direction of the target with ReasonCode
   (RetransTimeout).



Delgrossi & Berger, Editors   Experimental                     [Page 48]

RFC 1819              ST2+ Protocol Specification            August 1995


5.2.8  Failure due to JOIN Response Timeout

   Only the target agent implements this timeout. After correctly
   receiving the ACK to a JOIN message, the ST agent at the target
   expects to receive a CONNECT or JOIN-REJECT message in response. If
   one of these message is not received before the ToJoinResp timer
   expires, the ST agent aborts the stream join attempt and returns an
   error corresponding with ReasonCode (RetransTimeout) to the
   application.

   Note that, after correctly receiving the ACK to a JOIN message,
   intermediate ST agents do not maintain any state on the stream
   joining attempt. As a consequence, they do not set the ToJoinResp
   timer and do not wait for a CONNECT or JOIN-REJECT message. This is
   described in Section 4.6.3.

5.2.9  Failure due to JOIN-REJECT Acknowledgment Timeout

   An ST agent that sends a JOIN-REJECT message toward the target
   expects an ACK from a neighbor ST agent. If no ACK is received before
   the ToJoinReject timeout expires, the ST agent should retry and send
   the JOIN-REJECT message again. After NJoinReject unsuccessful
   retries, the ST agent simply gives up.

5.2.10  Failure due to NOTIFY Acknowledgment Timeout

   An ST agent that sends a NOTIFY message to a neighbor ST agent
   expects an ACK from that neighbor ST agent. If no ACK is received
   before the ToNotify timeout expires, the ST agent should retry and
   send the NOTIFY message again. After NNotify unsuccessful retries,
   the ST agent simply gives up and behaves as if the ACK message was
   received.

5.2.11  Failure due to REFUSE Acknowledgment Timeout

   An ST agent that sends a REFUSE message upstream expects an ACK from
   the previous-hop ST agent. If no ACK is received before the ToRefuse
   timeout expires, the ST agent should retry and send the REFUSE
   message again. After NRefuse unsuccessful retries, the ST agent gives
   up and it assumes it is not part in the stream any more.

5.2.12  Failure due to STATUS Response Timeout

   After sending a STATUS message to a neighbor ST agent, an ST agent
   expects to receive a STATUS-RESPONSE message in response. If this
   message is not received before the ToStatusResp timer expires, the ST
   agent sends the STATUS message again. After NStatus unsuccessful
   retries, the ST agent gives up and assumes that the neighbor ST agent



Delgrossi & Berger, Editors   Experimental                     [Page 49]

RFC 1819              ST2+ Protocol Specification            August 1995


   is not active.

5.3  Setup Failures due to Routing Failures

   It is possible for an ST agent to receive a CONNECT message that
   contains a known SID, but from an ST agent other than the previous-
   hop ST agent of the stream with that SID. This may be:

   1.  that two branches of the tree forming the stream have joined
       back together,

   2.  the result of an attempted recovery of a partially failed
       stream, or

   3.  a routing loop.

   The TargetList contained in the CONNECT is used to distinguish the
   different cases by comparing each newly received target with those of
   the previously existing stream:

o   if the IP address of the target(s) differ, it is case #1;

o   if the target matches a target in the existing stream, it may be
    case #2 or #3.

   Case #1 is handled in Section 5.3.1, while the other cases are
   handled in Section 5.3.2.

5.3.1  Path Convergence

   It is possible for an ST agent to receive a CONNECT message that
   contains a known SID, but from an ST agent other than the previous-
   hop ST agent of the stream with that SID. This might be the result of
   two branches of the tree forming the stream have joined back
   together.  Detection of this case and other possible sources was
   discussed in Section 5.2.

   SCMP does not allow for streams which have converged paths, i.e.,
   streams are always tree-shaped and not graph-like. At the point of
   convergence, the ST agent which detects the condition generates a
   REFUSE message with ReasonCode (PathConvergence). Also, as a help to
   the upstream ST agent, the detecting agent places the IP address of
   one of the stream's connected targets in the ValidTargetIPAddress
   field of the REFUSE message. This IP address will be used by upstream
   ST agents to avoid splitting the stream.

   An upstream ST agent that receives the REFUSE with ReasonCode
   (PathConvergence) will check to see if the listed IP address is one



Delgrossi & Berger, Editors   Experimental                     [Page 50]

RFC 1819              ST2+ Protocol Specification            August 1995


   of the known stream targets. If it is not, the REFUSE is propagated
   to the previous-hop agent. If the listed IP address is known by the
   upstream ST agent, this ST agent is the ST agent that caused the
   split in the stream. (This agent may even be the origin.) This agent
   then avoids splitting the stream by using the next-hop of that known
   target as the next-hop for the refused targets. It sends a CONNECT
   with the affected targets to the existing valid next-hop.

   The above process will proceed, hop by hop, until the
   ValidTargetIPAddress matches the IP address of a known target. The
   only case where this process will fail is when the known target is
   deleted prior to the REFUSE propagating to the origin. In this case
   the origin can just reissue the CONNECT and start the whole process
   over again.

5.3.2  Other Cases

   The remaining cases including a partially failed stream and a routing
   loop, are not easily distinguishable. In attempting recovery of a
   failed stream, an ST agent may issue new CONNECT messages to the
   affected targets. Such a CONNECT may reach an ST agent downstream of
   the failure before that ST agent has received a DISCONNECT from the
   neighborhood of the failure. Until that ST agent receives the
   DISCONNECT, it cannot distinguish between a failure recovery and an
   erroneous routing loop. That ST agent must therefore respond to the
   CONNECT with a REFUSE message with the affected targets specified in
   the TargetList and an appropriate ReasonCode (StreamExists).

   The ST agent immediately preceding that point, i.e., the latest ST
   agent to send the CONNECT message, will receive the REFUSE message.
   It must release any resources reserved exclusively for traffic to the
   listed targets. If this ST agent was not the one attempting the
   stream recovery, then it cannot distinguish between a failure
   recovery and an erroneous routing loop. It should repeat the CONNECT
   after a ToConnect timeout, see Section 5.2.4. If after NConnect
   retransmissions it continues to receive REFUSE messages, it should
   propagate the REFUSE message toward the origin, with the TargetList
   that specifies the affected targets, but with a different ReasonCode
   (RouteLoop).

   The REFUSE message with this ReasonCode (RouteLoop) is propagated by
   each ST agent without retransmitting any CONNECT messages. At each ST
   agent, it causes any resources reserved exclusively for the listed
   targets to be released. The REFUSE will be pr