ST Working Group                              L. Delgrossi and L. Berger
                Internet Stream Protocol Version 2 (ST2)

                 Protocol Specification - Version ST2+

Status of this Memo

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

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

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

   Abstract:

   This memo 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 its 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+.

   Editor's Note:

   This memo is available both in ASCII format (file: draft-ietf-st2-
   spec-00.txt)
   spec-02.txt) and in PostScript (file: draft-ietf-st2-spec-00.ps). The
   PostScript version contains some additional pictures that help to
   clarify the text, and it is therefore recommended. draft-ietf-st2-spec-02.ps).
   This draft is not complete. It considered to be complete, and will serve be used as the
   basis for
   discussions at the December IETF ST2 sessions. The work remaining
   is largely nontechnical. No major technical details are expected to
   change, some minor details do need to be updated or an RFC once comments are not yet
   documented. integrated.

   1 Introduction                                                         6
           1.1 What is ST2?                                               6
           1.2 ST2 and IP                                                 8
           1.3 Protocol History    7

           1.3 Streams     7                                           8
           1.4 Supporting Modules for ST2                                 9
           1.4.1 Data Transmission   8 Transfer Protocol                                   9
           1.4.2 Setup Protocol                                          10
           1.4.3 Flow Specification                                      10
           1.4.4 Routing Function                                        10
           1.4.5 Local Resource Manager                                  11
           1.5 ST2 Basic Concepts                                        12
           1.5.1 Streams                                                 12
           1.5.2 Data Transmission                                       14
           1.5.3 Flow Specifications 9 Specification                                      15
           1.6 ST2 and IP  9

           1.7 Outline of This Document    10                                  16

   2 ST ST2 User Service Description   11                                        17
           2.1 Stream Operations and Primitive Functions   11                 17
           2.2 State Diagrams      12                                            19
           2.3 State Transition Tables     15                                   22

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

   4  SCMP Functional Description   16

           3.1                                        24
           4.1 Types of Streams                                          26
           4.1.1 Stream Building                                         26
           4.1.2 Knowledge of Receivers                                  26
           4.2 Control PDUs                                              27
           4.3 SCMP Reliability                                          28
           4.4 Stream Options                                            29
           4.4.1 No Recovery                                             29
           4.4.2 Join Authorization Level                                29
           4.4.3 Record Route                                            30
           4.4.4 User Data                                               30
           4.5 Stream Setup        17

           3.1.1                                              30
           4.5.1 Information from the Application                        31
           4.5.2 Initial Setup at the Origin       17

           3.1.1.1                             31
           4.5.2.1 Invoking the Routing Function   17

           3.1.1.2                         31
           4.5.2.2 Reserving Resources     17

           3.1.2                                   32
           4.5.3 Sending CONNECT Messages  18

           3.1.2.1                                32
           4.5.3.1 Empty Target List       18

           3.1.2.2 Long Target Lists       19

           3.1.3 Processing CONNECT Messages       19

           3.1.3.1                                     33
           4.5.4 CONNECT Processing by an Intermediate ST agent  19

           3.1.3.2 Setup          33
           4.5.5 CONNECT Processing at the Targets    19

           3.1.4 Processing ACCEPT Messages        20
           3.1.4.1                       33
           4.5.6 ACCEPT Processing by an Intermediate ST agent   20

           3.1.4.2           34
           4.5.7 ACCEPT Processing by the Origin 20

           3.1.5 Processing REFUSE Messages        20

           3.1.5.1                         34
           4.5.8 REFUSE Processing by the Intermediate ST agent  20

           3.1.5.2          34
           4.5.9 REFUSE Processing by the Origin 21

           3.2                         35
           4.5.10 Other Functions during Stream Options      21

           3.2.1 No Recovery       21

           3.2.2 Join Authorization Level  21

           3.3 Data Transfer       22

           3.4 Setup                    35
           4.6 Modifying an Existing Stream        22

           3.4.1                              36
           4.6.1 The Origin Adding New Targets     23

           3.4.2                           36
           4.5.4 and Section 4.5.5).                                     36
           4.6.2 The Origin Removing a Target                            36
           4.6.3 A Target Joining a Stream 23

           3.4.2.1 ST FlowSpec     24

           3.4.2.2                               37
           4.6.3.1 Router as Origin        25

           3.4.3 The Origin Removing Targets       25

           3.4.4                                      38
           4.6.4 A Target Deleting Itself  26

           3.4.5                                38
           4.6.5 Changing a Stream's FlowSpec      26

           3.5                            39
           4.7 Stream Tear Down    26

   4                                          39

   5 Exceptional Cases     28

           4.1 Setup                                                   40
           5.1 Long ST Messages                                          40
           5.1.1 Handling of Long Data Packets                           40
           5.1.2 Handling of Long Control Packets                        40
           5.2 Timeout Failures      28

           4.1.1 Setup                                          41
           5.2.1 Failure due to ACCEPT Acknowledgment Timeout            42
           5.2.2 Failure due to CHANGE Acknowledgment Timeout            42
           5.2.3 Failure due to CHANGE Response Timeout                  42
           5.2.4 Failure due to CONNECT Acknowledgment Timeout      28

           4.1.2 Setup           42
           5.2.5 Failure due to ACCEPT CONNECT Response Timeout       28

           4.1.3 Setup                 42
           5.2.6 Failure due to DISCONNECT Acknowledgment Timeout        43
           5.2.7 Failure due to JOIN Acknowledgment Timeout              43
           5.2.8 Failure due to JOIN Response Timeout                    43
           5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout       43
           5.2.10 Failure due to NOTIFY Acknowledgment Timeout           43
           5.2.11 Failure due to REFUSE Acknowledgment Timeout           43
           5.2.12 Failure due to STATUS Response Timeout                 44
           5.3 Setup Failures due to Routing Failures     28

           4.2 Further Issues      29
           4.2.1                    44
           5.3.1 Path Convergence                                        44
           5.3.2 Other Cases                                             45
           5.4 Problems due to Routing Inconsistency     29

           4.2.2 Path Convergence  30

           4.2.3                     46
           5.5 Problems in Reserving Resources   30

           4.2.4                           47
           5.5.1 Mismatched FlowSpecs                                    47
           5.5.2 Unknown FlowSpec Version                                47
           5.5.3 LRM Unable to Process FlowSpec                          47
           5.5.4 Insufficient Resources                                  47
           5.6 Problems Caused by CHANGE Messages        31

   5                        48
           5.7 Unknown Targets in DISCONNECT and CHANGE                  49

   6 Failure Detection and Recovery        32

           5.1                                      49
           6.1 Failure Detection   32

           5.1.1                                         49
           6.1.1 Network Failures  32

           5.1.2                                        50
           6.1.2 Detecting ST Agents Failures      32

           5.2                            50
           6.2 Failure Recovery    34

           5.2.1                                          51
           6.2.1 Problems in Stream Recovery       35

           5.3                             53
           6.3 Stream Preemption   36

   6                                         55

   7 A Group of Streams    37

           6.1 Group Name Generator        37

           6.2                                                  56
           7.1 Basic ST Group Relationships      38

           6.2.1                                 56
           7.1.1 Bandwidth Sharing 38

           6.2.2                                       56
           7.1.2 Fate Sharing      38

           6.2.3                                            57
           7.1.3 Route Sharing     39

           6.2.4                                           58
           7.1.4 Subnet Resources Sharing  39

           6.3                                58
           7.2 Relationships Orthogonality 39

   7                               58

   8 Ancillary Functions   40

           7.1                                                 58
           8.1 Stream IDs ID Generation       40

           7.2                                      58
           8.2 Group Name Generator                                      59
           8.3 Checksum Computation        40

           7.3 SCMP Reliability    40

           7.4                                      59
           8.4 Collecting Information From Neighbour ST Agent            60
           8.5 Round Trip Time Estimation                                61
           8.6 Network MTU Discovery       40
           7.5 Packet Discarding on Network Congestion     41

           7.6                                     61
           8.7 IP Encapsulation of ST      41

           7.7                                    61
           8.8 IP Multicasting     42

           7.8 Routing     42

   8 FlowSpec      42

           8.1 FlowSpec Versions   43

           8.2                                           62

   9 The Null FlowSpec (#0)      43

           8.3 The ST Current ST2 Flow Specification                                          63
           9.1 FlowSpec (#7)        43

           8.3.1 Qos Version #0 - (Null FlowSpec)                     64
           9.2 FlowSpec Version #7 - ST2+ FlowSpec                       64
           9.2.1 QoS Classes       44

           8.3.2                                             65
           9.2.2 Precedence                                              65
           9.2.3 Maximum Message Data Size      44

           8.3.3                                       66
           9.2.4 Message Rate or Throughput        44

           8.3.4 Maximum                                            66
           9.2.5 Delay and Delay Jitter    44

   9 ST State Machines     45                                  66
           9.2.6 ST2+ FlowSpec Format                                    66

   10 ST  ST2 Protocol Data Units       46 Specification                             68
           10.1  Data PDU                                                68
           10.1.1 ST Data Packets    47

           10.1.1 Stream ID        47                                        69
           10.2 ST Control Messages        47 PDUs                                             70
           10.3 Common SCMP Elements       48                                     71
           10.3.1 ErroredPDU       49

           10.3.2 FlowSpec 49

           10.3.3                                               71
           10.3.2 Group    50

           10.3.4                                                  72
           10.3.3 MulticastAddress 50                                       73
           10.3.4 Origin                                                 73
           10.3.5 NextHopIPAddress 51 RecordRoute                                            74
           10.3.6 Origin   51
           10.3.7 ReasonCode       51

           10.3.8 Target and TargetList    53

           10.3.9                                  75
           10.3.7 UserData 54

   11                                               76
           10.3.8 Handling of Undefined Parameters                       77
           10.4 ST Control Message PDUs      55

           11.1                                  77
           10.4.1 ACCEPT     55

           11.2                                                 77
           10.4.2 ACK        56

           11.3                                                    79
           10.4.3 CHANGE     56

           11.4                                                 80
           10.4.4 CONNECT    57

           11.5                                                80
           10.4.5 DISCONNECT 58

           11.6                                             83
           10.4.6 ERROR      59

           11.7                                                  83
           10.4.7 HELLO      59

           11.8 JOIN-REQUEST       60

           11.9                                                  84
           10.4.8 JOIN                                                   85
           10.4.9 JOIN-REJECT                                            85
           10.4.10 NOTIFY     60

           11.10                                                86
           10.5.3; NOTIFY must be acknowledged with an ACK.              86
           10.4.11 REFUSE    61

           11.11                                                87
           10.4.12 STATUS    62

           11.12                                                89
           10.4.13 STATUS-RESPONSE   63

   12                                       89
           10.5 Suggested Protocol Constants 64

           12.1                             90
           10.5.1 SCMP Messages      64

           12.2                                          90
           10.5.2 SCMP Parameters    64

   13 Notation     64

   14 Further Study        64

   15                                        91
           10.5.3 ReasonCode                                             91
           10.5.4 Timeouts and Other Constants                           93
           10.6 Data Notations                                           94

   11 Acknowledgments and Author's Addresses                             95

   12  References   65                                                        96
   1 Introduction

   1.1 What is ST2?

   The Internet Stream Protocol, Version 2 (ST2) is a connection-
   oriented 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 data throughput quality of service. ST2 is part of the IP protocol
   family and controlled
   delay characteristics. serves as an adjunct to, not a replacement for, IP. The main
   application area areas of the protocol is are the real-time transport of multimedia
   data, e.g.  digital audio and video packet streams streams, and distributed
   simulation/gaming, across internets.

   ST2 can be used to reserve bandwidth for multimedia 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 Quality of service Service (QoS) to ST2 applications. It ensures that each multimedia packet is
   real-time packets are delivered within its deadline, their deadlines, that is, at the time
   where it needs they need to be presented.  This facilitates a smooth playout delivery of digital audio and
   video data
   that is essential for this time-critical data, applications, but can typically not be
   provided by best-effort IP communication.

   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, mainly those for resource reservation.
   functions. ST is simple and contains only one a single PDU format that is
   designed for fast and efficient data forwarding in order to achieve low
   communication delays. SCMP, however, is quite more complex. As with ICMP and IP,
   SCMP packets are transferred within ST packets as shown in Figure 1.

   1.2  Protocol History

   The first version of ST was published in the late 1970's and was used
   throughout the 1980's for experimental voice

                      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 video transmission.
   The experience gained in these applications led to the development of
   the revised Control Path
        +--------------------+
        | 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 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     Protocol        |
       +-----------------+  +-----------------------------------+
                      | \   / |
                      |  \ /  |
                      |   X   |                                  ------------
                      |  / \  |
                      | /   \ |
                      VV     VV
       +----------------+   +----------------+
       | (Sub-) Network |...| (Sub-) Network |                  (Sub-)Network
       |    Protocol    |   |    Protocol    |                     Layer
       +----------------+   +----------------+

                       Figure 2.  Protocol Relationships
   1.2 ST2 and more developments of commercial IP

   ST2 is designed to coexist with IP on each node. A typical distributed
   multimedia
   applications underway and with a growing dissatisfaction at the
   transmission quality for audio and video over application would use both protocols: IP in the MBONE,
   interest in ST2 has grown over the last years. Companies such as BBN
   have products available incorporating the protocol. The BERKOM
   project of the German PTT uses ST2 as its core protocol for the
   provision transfer of multimedia teleservices such as conferencing
   traditional data and
   mailing. Among others, Digital, HP, IBM, control information, and Siemens-Nixdorf
   participate in this project. In addition, implementations of ST2 for
   Sun, Silicon Graphics, Macintosh, NeXT, and PC platforms are
   available.

   In 1993, the IETF has started a transfer of
   real-time data. Whereas IP typically will be accessed from TCP or UDP, ST2
   will be accessed via new working group on ST2. Its mission
   is end-to-end real-time protocols. The position of ST2
   with respect to clean up the current protocol specification to ensure better
   interoperability between other protocols of the existing Internet family is represented in
   Figure 2.

   Both ST2 and emerging implementations.
   It shall also reflect the experiences gained with IP apply the current same addressing schemes to identify different
   hosts.  ST2
   implementations and applications. This has led to IP packets differ in the specification
   of first four bits, containing the ST2+
   internetwork protocol version contained in this document.

   1.3  Streams

   Streams form the core concepts of ST2. They are established between number: number 5 is reserved for ST2 (IP
   itself has version number 4). As a
   sending origin network layer protocol, like IP, ST2
   operates independently of its underlying subnets. Existing implementations
   use ARP for address resolution, and one or more receiving targets in use the form of same Layer 2 SAPs as IP.

   As a
   routing tree. Nodes in the tree represent so-called ST agents,
   entities executing the special function, ST2 protocol; links messages can be encapsulated in IP packets.  This
   is represented in the tree are called
   hops. Figure 2 illustrates as a stream from an origin link between ST2 and IP. This link allows
   ST2 messages to four targets, where 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 ST agent on Target 2 also functions as network
   which do not constitute a router. Let us use this
   Target 2/Router node to explain some basic ST2 terminology: system bottleneck.

   In Figure 2, the
   direction RTP protocol is shown as an example of transport layer on
   top of ST2.  Alternatives include the stream from this node to Target 3 and 4 is called
   downstream, Packet Video Protocol (PVP) [Cole81],
   the direction towards Network Voice Protocol (NVP) [Cohe81], and others such as the Origin node upstream. Heidelberg
   Transport Protocol (HeiTP) [DHHS92].

   1.3 Protocol History

   The first version of ST agents
   that are one hop away from a given node are called previous-hops was published in the upstream, late 1970's and next-hops was used
   throughout the 1980's for experimental transmission of voice, video, and
   distributed simulation. The experience gained in these applications led to
   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, or CHANGE to modify the quality development of service associated with
   a stream.

   Each ST agent maintains state information describing the streams
   flowing through it. It can actively gather and distribute such
   information. If, for example, an intermediate ST agent fails, revised protocol version ST2. The revision extends
   the
   neighboring ST agents can recognize this via HELLO messages that are
   periodically exchanged between ST agents that share streams. STATUS
   packets can be used original protocol to ask other ST agents about a particular stream.
   These ST agents then send back a STATUS-RESPONSE message. NOTIFY
   messages serve make it more complete and more applicable to inform ST agents of changes such as a route change.

   ST2 offers a wealth
   emerging multimedia environments. The specification of functionalities for stream management. Streams
   can be grouped together to minimize allocated resources or to process
   them this protocol version
   is contained in the same way Internet RFC 1190 which was published in case October 1990
   [RFC1190].

   With more and more developments of failures. During audio conferences,
   for example, only one person should speak at commercial distributed multimedia
   applications underway and with a time. Using growing dissatisfaction at the group
   mechanism, resources transmission
   quality for only one audio stream 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 fails.

   1.4  Data Transmission

   Data transfer over IP in ST2 is simplex the MBONE, interest in ST2 has grown
   over the downstream direction. Data
   transport through streams is very efficient. last years. Companies have products available incorporating the
   protocol. The BERKOM MMTS project of the German PTT [DeAl92] uses ST2 puts only a small
   header in front as its
   core protocol for 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 user data. The header contains IETF started a protocol
   identification that distinguishes new working group on ST2 from IP packets, 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. This has led to the
   specification of the version
   number, a priority field (specifying a relative importance of streams ST2, called ST2+, contained in cases this
   document.

   1.4 Supporting Modules for ST2

   ST2 is one piece of conflict), a length counter, a stream identification, and a checksum. These elements form an 8-byte header which can be
   extended by an optional 8-byte timestamp.

   Efficiency is also achieved by avoiding fragmentation larger mosaic. This section presents the overall
   communication architecture and reassembly
   on router nodes. Negotiations at stream establishment time yield clarifies the role of ST2 with respect to its
   supporting modules.

   ST2 proposes a
   maximum transmission unit (MTU) two-step communication model. In the first step, the
   real-time channels for the subsequent data packets on a stream. transfer are built. This
   MTU is communicated
   called stream setup. It includes selecting the routes to the upper layers, so that they provide destinations
   and reserving the correspondent resources. In the second step, the data
   packets of suitable size to ST2.

   Communication with multiple next-hops can be made even more efficient
   using MAC Layer multicast. 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
   transmitted over the bandwidth
   requirements of a stream. If multicast previously established streams.  This is called data
   transfer. While stream setup does not provided, separate
   packets need have to be sent to each next-hop.

   As ST2 relies on reservation, it does not contain error correction
   mechanisms features for completed in real-time,
   data exchange such as retransmission known
   from TCP. It is assumed that digital audio and video require
   partially correct delivery only. In many cases, retransmitted packets
   would arrive too late to meet their transfer has stringent real-time delivery requirements.
   On The architecture used to
   describe the other hand, depending on ST2 communication model includes:

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

   o       a small number of errors in audio and video setup protocol to establish real-time streams are
   acceptable. In any case, reliability can be provided by layers based on top
   of ST2 if needed.

   1.5  Flow Specifications

   As part of establishing a connection, SCMP negotiates quality-of-
   service parameters for a stream. In ST2 terminology, these parameters
   form the flow
           specification,

   o       a flow specification (FlowSpec, for short) which is associated
   with to express user real-time requirements,

   o       a routing function to select routes in the stream. Different versions of FlowSpecs exist 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 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
   flow specification (ST2+ FlowSpec). It does not define a stream.

   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, routing function
   and a local resource managers (LRM). manager. However, ST2 assumes their existence.

   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
   origin application supplies the initial FlowSpec requesting a
   particular service quality. Each ST agent which obtains data transfer protocol defines the
   specification as part format of a connection establishment message initiates the reservation of local resources data packets belonging
   to the stream. Data packets are delivered to the targets along the stream
   paths previously established by the corresponding resource
   manager. These resource managers control setup protocol.  Data packets are
   delivered with the usage quality of CPU capacity
   for 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 processing, buffer space for storing messages, and
   bandwidth in the outgoing network. ST2 does not determine how
   resource managers make reservations and how resources are scheduled
   according to these reservations; ST2, however, assumes these
   mechanisms known simply as its basis. ST, is completely defined by this
   document.

   1.4.2 Setup Protocol

   The FlowSpec negotiation procedure setup protocol is illustrated in Figure 3.
   Depending responsible for establishing, maintaining, and
   releasing real-time streams.  It relies on the success of its local reservations, an ST agent
   updates routing function to select
   the FlowSpec while paths from the connection establishment message
   passes downstream (for example, keeping track of accumulated delay).
   The final FlowSpec is communicated source to the target application which
   may base its accept/reject decision for establishing the connection destinations. At each host on these paths,
   it and may finally also modify the FlowSpec. If a target accepts
   the connection, presents the (possibly modified) FlowSpec is propagated back
   to flow specification associated with the origin which can then calculate an overall service quality for
   all targets. If all targets in a particular ST2 connection need to
   adhere stream to the same FlowSpec, local
   resource manager.  This causes the origin may - during a second phase
   of connection establishment - issue a CHANGE request resource managers to adjust
   reservations.

   1.6 reserve appropriate
   resources for the stream. The setup protocol for ST2 is called Stream
   Control Message Protocol, or SCMP, 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 completely defined by this
   document.

   1.4.3 Flow Specification

   The flow specification is a data and control information, and ST2 for structure including the transfer of digital audio and video. Whereas IP typically will be
   accessed from TCP or UDP, ST2 will have new multimedia end-to-end
   protocols on top of it.

   Both ST2 and IP apply applications'
   QoS requirements. At each node, it is used by the same addressing schemes local resource manager to identify
   different hosts and use ARP for address resolution. ST2 can easily be
   modified
   appropriately handle resources so that such requirements are met.
   Distributing the flow specification to include all resource managers along the longer host addresses
   communication paths is the task of the next generation
   IP. ST2 uses setup protocol. However, the same Layer 2 SAPs as IP. ST2 and IP packets differ
   in contents
   of the first four bits, containing flow specification are transparent to the internetwork protocol version
   number: number 5 is reserved for ST2 (IP itself has version number
   4). An ST agent receives a packet over setup protocol, which
   simply carries the IP SAP using flow specification.  Any operations on the first 4
   bits of flow
   specification, including updating internal fields and comparing flow
   specifications are performed by the frame to select ST2 packets.

   As resource managers.

   This document defines a special function, specific flow specification format that allows for
   interoperability among existing ST2 messages can be encapsulated implementations.  Implementations may
   support more than one flow specification format and the means are provided
   to add new formats as they are defined in IP
   packets. This allows them the future. However, the flow
   specification format has to pass through routers which do not run
   ST2. Resource management be consistent throughout the stream, i.e. it is typically
   not available possible to use different flow specification formats for these IP the same
   stream.

   1.4.4 Routing Function

   The routing function is an external unicast route segments. IP encapsulation is, therefore, suggested only for
   portions generation capability. It
   provides the setup protocol with the path to reach each of the network which do not constitute desired
   destinations. Once a system bottleneck.

   1.7  Outline of This Document

   This document contains route is selected by the specification routing function, it persists
   for the ST2+ version of the
   ST2 protocol. In whole stream lifetime. The routing function may try to optimize
   based on the rest number of targets, the document, whenever the terms "ST" requested resources, or
   "ST2" are used, they refer to ST2+.

   The document is organized as follows: Section 2 describes the ST user
   service; Section 3.1 through Section 3.5 describe stream setup,
   modification, and tear down; exceptional cases are handled in Section
   4; failure detection and groups use of streams respectively in Section 5
   and Section 6; local
   network multicast or bandwidth capabilities. Alternatively, the FlowSpec routing
   function may even be based on simple connectivity information.

   The setup protocol is presented in Section ; finally, the
   formats not necessarily aware of the criteria used by the
   routing function to select routes. It works well with any reasonable routing
   function algorithm. The algorithm adopted is a local matter at each host and
   different hosts may use different algorithms. The interface between setup
   protocol elements and PDUs are defined by
   Section 10 through Section 15.  Figure 1: ST2 Data routing function is also a local matter and Control Path
   Figure 2: The Stream Concept Figure 3: Quality-of-Service Negotiation
   with FlowSpecs Figure 6: ST Service at therefore it is not
   specified by this document.

   1.4.5 Local Resource Manager

   At each host traversed by a stream, the Target Figure 4:
   Primitives Local Resource Manager (LRM) is
   responsible for the OPEN Stream Operation Figure 5: ST Service at the
   Origin 2  ST 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 handling local resources. The LRM knows which operations resources are
   on streams can be
   invoked by the applications built system and what capacity they can provide.  Resources include:

   o       CPUs on top of ST end systems and when routers to execute the ST
   primitive functions can application and
           protocol software,

   o       main memory space for this software (as in all real-time systems,
           code should be legally executed. Note that the ST
   primitives do not form an API. They are used here with pinned in main memory, as swapping it out would have
           detrimental effects on system performance),

   o       buffer space to store the only
   purpose of illustrating data, e.g., communication packets, passing
           through the service model for ST.

   2.1  Stream Operations nodes,

   o       network adapters, and Primitive Functions

   An ST application at

   o       transmission networks between the origin nodes. Networks may create, expand, reduce, change,
   send data to, be as simple
           as point-to-point links or as complex as switched networks such as
           Frame Relay and delete a stream. When a ATM networks.

   During stream setup and modification, the LRM is expanded, new
   targets are added presented by the setup
   protocol with the flow specification associated to the stream; when a stream is reduced, some of stream.  For each
   resource it handles, the current targets are dropped from it. When a stream LRM is changed, expected to perform the associated quality of service following functions:

   o       Stream Admission Control: it checks whether, given the flow
           specification, there is modified.

   An ST application at sufficient capacity left to handle the target may join, receive new
           data from, and
   leave a stream.

   This translates into If the following available capacity is insufficient, the new
           data stream operations: must be rejected.

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

   o       ADD: expand stream, i.e. add new targets to       Resource Reservation: it [origin], reserves the resource capacities required
           to meet the desired QoS.

   During data transfer, the LRM is responsible for:

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

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

   o       DATA: send data through stream [origin],

   o       CHG: change a stream's qos [origin],
   Each stream operation may require enforces the execution QoS requirements by appropriate
           scheduling of several primitive
   functions to be completed. resource access. For instance, an application with a
           short guaranteed delay must be served prior to open an application with
           a new stream, less strict delay bound.

   The LRM may also provide the following additional functions:

   o       Data Regulation: to smooth a
   request is first issued by stream's data traffic, e.g. as with the sender and an indication is generated
           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 receiver; then, the receiver may accept flow
           specification.

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

   The strategies adopted by the request LRMs to handle resources are
   resource-dependent and the correspondent indication is generated may vary at the sender. This every host. However, it is
   shown in Figure 4 below.

   Table 1 defines necessary that
   all LRMs have the ST service primitive functions associated to each
   stream operation. The column labelled "O/T" indicates whether same understanding of the
   primitive flow specification. The
   interface between setup protocol and LRM is executed at the origin or a local matter at the target.

   2.2  State Diagrams

   It every host and
   therefore it is not sufficient to define the set specified by this document. An example of ST stream operations. It LRM is
   also necessary to specify when the operations can be legally
   executed. For this reason, a set of states
   Heidelberg Resource Administration Technique (HeiRAT) [VoHN93].

   It is now introduced and also assumed that the
   transitions from one state LRM provides functions to the others are specified. States are
   defined with respect compare flow
   specifications, i.e. to decide whether a single stream. The previously defined
   stream operations can be legally executed only from an appropriate
   state.

   An ST agent may, with respect flow specification requires a
   greater, equal, or smaller amount of resource capacities to an ST stream, be in one of the reserved.

   1.5 ST2 Basic Concepts

   The following states:

   o       IDLE: sections present at an introductory level some of the stream has not been created yet.

   o       PENDING:
   fundamental ST2 concepts including streams, data transfer, and flow
   specification.

   1.5.1 Streams

   Streams form the stream is core concepts of ST2. They are established between a
   sending origin and one or more receiving targets in the process form of being established.

   o       ACTIVE: a routing
   tree.  Streams are uni-directional from the stream is established and active.

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

   o       CHGING: targets. Nodes in
   the stream is established. A stream change is
   underway.

   Previous experience with tree represent so-called ST suggested to impose limits on agents, entities executing the stream
   operations that can be executed at ST2 protocol;
   links in the same time. These restrictions
   are:

   1.      A single ADD or CHG operation can be processed at one time.
   If another ADD or CHG is already underway, further requests tree are
   queued by called hops.

   Figure 3 illustrates a stream from an origin to four targets, where the ST
   agent and handled only after the previous operation
   has been completed. It on Target 2 also applies functions as a router. Let us use this Target
   2/Router node to two subsequent requests explain some basic ST2 terminology: the direction of the
   same kind, e.g. two ADD or two CHG operations. The second operation
   stream from this node to Target 3 and 4 is not executed until called downstream, the first direction
   towards the Origin node upstream. ST agents that are one has been completed.

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

   3.      An ST agent forwards
   downstream direction.

            Hosts Connections...                :        ...and Streams
            ====================                :        ==============
        data only along already established
   paths to the targets.       Origin                       :            Origin
       packets +-----------+                    :            +----+
          +----|Application|                    :            |    |
          |    |-----------|                    :            +----+
          +--->| ST Agent  |                    :             |  |
               +-----------+                    :             |  |
                     |                          :             |  |
                     V                          :             |  |
              +-------------+                   :             |  |
              |             |                   :             |  |
+-------------|  Network A path is con- sidered  |                   :     +-------+  +--------+
|             |             |                   :     |                   |
|             +-------------+                   :     |                   |
|                    |     Target 2             :     |                   |
|     Target 1       |    and Router            :     |                   |
|  +-----------+     |  +-----------+           :     V                   V
|  |Application|<-+  |  |Application|<-+        :   +----+              +----+
|  |-----------|  |  |  |-----------|  |        :   |    |     Target 2 |    |
+->| ST Agent  |--+  +->| ST Agent  |--+        :   +----+     & Router +----+
   +-----------+        +-----------+           :  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

   Streams are maintained using SCMP messages. Typical SCMP messages are
   CONNECT and ACCEPT to be established when
   the next-hop on the path has explicitly accepted build a stream, DISCONNECT and REFUSE to close a
   stream, and CHANGE to modify the quality of service associated with a
   stream. This
   implies that

   Each ST agent maintains state information describing the target streams flowing
   through it. It can actively gather and all other distribute such information. If, for
   example, an intermediate ST agent fails, the neighbouring ST agents can
   recognize this via HELLO messages that are
   ready to handle the incoming data packets. In no cases an periodically exchanged between ST agent
   will forward data
   agents that share streams. STATUS packets can be used to a next-hop ask other ST agent that has not explicitly
   accepted the agents
   about a particular stream. To be sure that all targets receive the data, an
   applica- tion should  These ST agents then send the data only after all paths have been
   established, i.e. the stream is estab- lished.

   4.      It is allowed back a STATUS-RESPONSE
   message. NOTIFY messages serve to send data from the CHGING and ADDING states.
   When sending data from the CHGING state the quality inform ST agents of service to the
   targets affected by the change is undefined. When sending data from
   the ADDING state the targets that receive the data include at least
   all the targets that were already part significant events.

   ST2 offers a wealth of the functionalities for stream at the time the
   ADD operation was invoked.

   The rules introduced above require ST agents management. Streams can be
   grouped together to queue incoming
   requests when the current state does not allow minimize allocated resources or to process them
   immediately. In order to preserve in the semantics, ST agents have to
   maintain
   same way in case of failures. During audio conferences, for example, only a
   limited set of participants may talk at once.  Using the order group mechanism,
   resources for only a portion of the requests, i.e. implement FIFO queuing.
   Exceptionally, audio streams of the CLOSE request at group need to be
   reserved. Using the origin same concept, an entire group of related audio and the LEAVE request
   at the target may video
   streams can be immediately processed: dropped if one of them is preempted.

   1.5.2 Data Transmission

   Data transfer in this cases, the queue ST2 is deleted and it simplex in the downstream direction. Data transport
   through streams is possible that requests very simple. ST2 puts only a small header in front of the queue are not
   processed.

   The following state diagrams define the ST service. Separate diagrams
   are presented for the origin and the targets. To keep the figure
   simple, only the primitives that cause state transitions are
   represented.
   user data. 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 header contains no
   targets, the (a/r)* condition is immediately satisfied, so the empty
   stream is created and state ESTBL is entered.

   2.3  State Transition Tables

   Table 2 and Table 3 define which primitives can be processed a protocol identification that distinguishes
   ST2 from
   which states and the possible state transitions. Figure 7: Sample
   Topology for IP packets, an ST Stream 3  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 ST2 version number, a request-response model. SCMP
   messages are made reliable through the use of retransmission after
   timeout, cf. Section 7.3.

   This section contains priority field (specifying a functional description of SCMP. To help
   clarify the SCMP exchanges used to setup and maintain ST streams, we
   include an example
   relative importance of a simple network topology, represented streams in
   Figure 7. The topology is used to illustrate the protocol
   interactions during the execution cases of stream operations. For instance,
   an ST application may:

   o       Create conflict), a length counter, a
   stream from A to the peers at B, C identification, 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.

   We begin with checksum. These elements form an 12-byte
   header.

   Efficiency is also achieved by avoiding fragmentation and reassembly on
   router nodes. Stream establishment yields a description of stream setup, see Section 3.1; stream
   option are presented in Section 3.2; maximum message size for data transfer in Section 3.3;
   Section 3.4 illustrates stream modification including stream
   expansion, reduction, changes of the quality of service associated to
   packets on a stream. Finally, stream deletion is handled in Section 3.5.

   3.1  Stream Setup This section presents a description of stream setup. For simplicity,
   we assume that everything succeeds, e.g. any required resources are
   available, and the routing maximum message size is correct. Possible failures in the setup
   phase are handled in Section 4.1.

   3.1.1  Initial Setup at communicated to the Origin

   Before stream setup upper
   layers, so that they provide data packets of suitable size to ST2.

   Communication with multiple next-hops can be started, the application has made even more efficient using
   MAC Layer multicast. If a subnet supports multicast, a single multicast
   packet is sufficient to collect
   the necessary information reach all next-hops connected to determine the structure of the
   communication. this subnet. This includes identifying the participants and
   selecting the characteristics
   leads to a significant reduction of the data flow. Such information bandwidth requirements of a stream.
   If multicast is
   passed not provided, separate packets need to the ST agent at the stream's origin. The ST agent performs
   the following operations:

   o       allocates a stream ID (SID) for the stream, cf. Section 7.1,

   o       invokes the routing function be sent to determine the set of next-
   hops for the stream, cf. Section 3.1.1.1,

   o       invokes the Local Resource Manager (LRM), cf. Section
   3.1.1.2, to reserve local and net- work resources

   o       creates local database entries to store information each
   next-hop.

   As ST2 relies on the
   new stream,

   o       propagates the stream creation request reservation, it does not contain error correction
   mechanisms features for data exchange such as retransmission known from 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. On the next-hops
   determined by the routing function, see Section 3.1.2.

   3.1.1.1  Invoking other
   hand, depending on the Routing Function

   An ST agent that is setting up a stream invokes data encoding and the routing function
   to find particular application, a path to reach each small
   number of the targets specified by the target
   list errors in stream data are acceptable. In any case, reliability can
   be provided by the application. This is similar to the routing
   decision in IP. However, in this case the route is to a multitude layers on top of
   targets rather than to a single destination. The routing function is
   not ST2 if needed.

   1.5.3 Flow Specification

   As part of establishing a connection, SCMP handles the ST protocol and therefore it is not specified by this
   document.

   The result negotiation of the routing function is
   quality-of-service parameters for a set of next-hop ST agents.
   The set of next-hops selected by the routing function stream. In ST2 terminology, these
   parameters form a flow specification (FlowSpec) which is not
   necessarily the same as associated with the set
   stream. Different versions of next-hops that IP would select
   given FlowSpecs exist and can be distinguished by a number of independent IP datagrams to the same destinations.
   The routing algorithm may attempt to optimize
   version number. Typically, they contain parameters other than
   the number of hops that the packets will take, such as delay, local
   network bandwidth consumption, or total internet bandwidth
   consumption.

   3.1.1.2  Reserving Resources

   An ST agent helps reserving both local average and network resources. Local
   resources may include CPU processing time
   maximum throughput, end-to-end delay, and buffer space at delay variance of a stream. SCMP
   itself only provides the
   local host. Network resources may comprise bandwidth over mechanism for relaying the
   outgoing links to quality-of-service
   parameters.

   Three kinds of entities participate in the next-hops determined by quality-of-service negotiation:
   application entities on the routing function.
   Resource reservation is not part of origin and target sites as the service users, ST protocol
   agents, and therefore it
   is not specified by this document. ST invokes at every host local resource managers (LRM).  The origin application supplies
   the Local
   Resource Manager (LRM) to perform initial FlowSpec requesting a particular service quality. Each ST agent
   which obtains the appropriate reservations.
   Functions FlowSpec as resource scheduling and reservation enforcement are part of a connection establishment message, it
   presents the LRM's tasks and local resource manager with it. ST2 does not of an ST agent's.

   The ST FlowSpec contains all the information needed determine how
   resource managers make reservations and how resources are scheduled
   according to allocate the
   necessary resources. The information contained in these reservations; ST2, however, assumes these mechanisms as
   its basis.

   An example of the FlowSpec negotiation procedure is
   passed to illustrated in Figure 4.
   Depending on the LRM as parameter success of its local reservations, the reservation functions. The LRM updates the
   FlowSpec information before it passes it back to fields and returns the ST
   agent. Further information on the ST FlowSpec can be found in Section
   .

   Note that if the data has to be sent across a network to a single
   next-hop, then only the point-to- point bandwidth needs to be
   reserved. If the data has to be sent to multiple next-hop ST agents
   across a single network and network layer multicasting is not
   available, agent, which passes it
   downstream as part of the ST agent replicates connection message.  Eventually, the data to each next-hop ST agent
   and therefore bandwidth has FlowSpec is
   communicated to be reserved by the LRM application at the target which may base its
   accept/reject decision for all establishing the
   next-hops. connection on it and may finally
   also modify the FlowSpec. If network layer multicast is supported, its use reduces a target accepts the bandwidth required since one single copy of connection, the data (possibly
   modified) FlowSpec is received
   by propagated back to the origin which can then calculate
   an overall service quality for all next-hop ST agents. targets. The membership of a stream in a Group origin may
   also affect the amount of resources that have later issue a
   CHANGE request to be allocated by adjust reservations.

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

           Figure 4:  Quality-of-Service Negotiation with FlowSpecs

   1.6 Outline of This Document

   This document contains the
   LRM, cf. Section 6.

   Effects similar to reservation specification of the necessary resources may be
   obtained even when ST2+ version of the network cannot provide direct support for ST2
   protocol. In the
   reservation. Certainly if total reservations are a small fraction rest of the overall resources, such as packet switch processing bandwidth,
   buffer space, document, whenever the terms "ST" or network bandwidth, then "ST2" are
   used, they refer to the desired performance can
   be honoured if ST2+ version of ST2.

   The document is organized as follows:

   o       Section 2 describes the degree ST2 user service from an application point
           of confidence 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 consistent with presented in Section 9.

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

   2 ST2 User Service Description

   This section describes the FlowSpec. Other solutions can be
   designed for specific networks.

   3.1.2  Sending CONNECT Messages

   The ST agent sends a CONNECT message to each user service from the high-level point of view
   of an application. It defines the next-hop ST
   agents identified stream operations and primitive
   functions. It specifies which operations on streams can be invoked by the routing function. Each CONNECT message
   contains
   applications built on top of ST and when the SID, ST primitive functions can be
   legally executed. Note that the ST primitives do not form an updated FlowSpec, and a TargetList. In general, API. They are
   used here with the FlowSpec and TargetList depend on both only purpose of illustrating the next-hop service model for ST.

   2.1 Stream Operations and Primitive Functions

   An ST application at the
   intervening network. Each TargetList 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 subset stream is reduced, some of the original
   TargetList, identifying the current targets that
   are to be reached through
   the next-hop to which dropped from it. When a stream is changed, the CONNECT message associated quality of
   service is being sent.

   The TargetList may be empty, see Section 3.1.2.1.; if modified.

   An ST application at the TargetList
   causes target may join, receive data from, and leave a too long CONNECT message to be generated,
   stream. This translates into the CONNECT
   message is partitioned as explained in Section 3.1.2.2. If multiple
   next-hops are following stream operations:

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

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

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

   o       JOIN: join a network that supports network
   level multicast, stream [target], LEAVE: leave a different CONNECT message must nevertheless stream [target],

   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
   sent completed. For instance, to each next-hop since each will have open a different TargetList.

   Let us consider the network topology in Figure 7 on page 16. Suppose
   that the original TargetList contains targets B, C, and D. The
   routing function invoked at A returns that B is reachable via Router
   1 and C and D are reachable via Router 2. Thus, A generates two
   CONNECT messages, one for Router 1 and one for Router 2. The CONNECT
   message for Router 1 contains new stream, a TargetList including target B only; request is
   first issued by the CONNECT message for Router 2 contains a TargetList including
   targets C sender and D.

   3.1.2.1  Empty Target List
   An application an indication is generated at the origin receiver;
   then, the receiver may accept or refuse the request and the local ST agent to create
   empty streams. It does so by passing an empty TargetList to correspondent
   indication is generated at the local
   ST agent during sender. This is shown in Figure 5 below.

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

              Figure 5: Primitives for the initial stream setup. When OPEN Stream Operation

   Table 1 defines the local ST agent
   receives request service primitive functions associated to create an empty stream, it allocates 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
   ID (SID), updates its local database entries                 | 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 store information on
   the new stream and notifies the application that         | O |
           |ADD.ind        | add request indication        | T |
           |ADD.accept     | accept stream setup is
   complete. The local                 | 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 agent does Primitives

   2.2 State Diagrams

   It is not generate any CONNECT message
   for streams with an empty TargetList.

   3.1.2.2  Long Target Lists

   Each ST agent knows the MTU of the networks sufficient to which it is connected,
   and those MTUs restrict define the size set of ST stream operations. It is also
   necessary to specify when the SCMP message it can send.
   SCMP messages with long TargetList operations can cause the size be legally executed.  For this
   reason, a set of states is now introduced and the SCMP
   message transitions from one state
   to exceed the network MTU. The ST agent which receives an
   SCMP message bigger than its MTU must break the original message into
   multiple fragments, each carrying part of the TargetList. The effect
   of this partition is to compromise the performance but still carry
   out the function of the SCMP message. If the original SCMP message
   contains any Userdata parameters, these parameters others are replicated in
   each fragment for delivery specified. States are defined with respect to all targets. Applications that support a large number of receivers may avoid using long target lists by
   exploiting the single
   stream. The previously defined stream joining functions, cf. Section 3.4.2.

   3.1.3  Processing CONNECT Messages

   3.1.3.1  CONNECT Processing by operations can be legally executed
   only from an Intermediate ST agent appropriate state.

   An ST agent receiving a CONNECT message, assuming no errors, responds
   to the previous-hop may, with an ACK. The ACK message must identify the
   CONNECT respect to which it corresponds by including the reference number
   indicated by the Reference field of the CONNECT message. The
   intermediate an ST agent invokes stream, be in one of the routing function, reserves
   resources via following
   states:

   o       IDLE: the LRM, and then propagates stream has not been created yet.

   o       PENDING: the CONNECT messages to
   its next-hops, as described stream is in the previous section.

   3.1.3.2  Setup at process of being established.

   o       ACTIVE: the Targets

   An ST agent that stream is established and active.

   o       ADDING: the target of a CONNECT message, assuming no
   errors, responds to stream is established. A stream expansion is underway.

   o       CHGING: the previous-hop stream is established. A stream change is underway.

   Previous experience with an ACK. The ST agent
   reserves local resources and inquires from suggested to impose limits on the specified application
   process whether or not it is willing to accept the connection.

   In particular, the application must stream
   operations that can be presented with parameters from
   the CONNECT, such as executed at the SID, FlowSpec, Options, and Group, to same time. These restrictions are:

   1.      A single ADD or CHG operation can be
   used as a basis for its decision. The application processed at one time. If
   another ADD or CHG is identified already underway, further requests are queued by a
   combination of the NextPcol field
   ST agent and handled only after the SAP field included in the
   correspondent (usually single remaining) Target previous operation has been completed.
   It also applies to two subsequent requests of the TargetList. same kind, e.g. two ADD or
   two CHG operations. The contents of the SAP field may specify second operation is not executed until the port first one
   has been completed.

   2.      Deleting a stream, leaving a stream, or other local
   identifier for use by dropping targets from a
   stream is possible only after stream establishment has been completed. A
   stream is considered to be established when all the protocol layer above next-hops of the host ST layer.
   Subsequently received data packets will carry origin
   have either accepted or refused the SID, stream.  Note that can be
   mapped into this information and be used for their delivery.

   Finally, based on the application's decision, the stream refuse is
   automatically forced after timeout if no reply comes from a next-hop.

   3.      An ST agent sends forwards data only along already established paths to
   the previous-hop from which targets, see also Section 3.1. A path is considered to be established
   when the CONNECT was received an ACCEPT or
   REFUSE message. Since next-hop on the ACCEPT (or REFUSE) message path has to be
   acknowledged by explicitly accepted the previous-hop, it is assigned a new Reference
   number stream. This
   implies that will be returned in the ACK. The CONNECT target and all other intermediate ST agents are ready to which the
   ACCEPT (or REFUSE) is a reply is identified by placing the CONNECT's
   Reference number in the LnkReference field of the ACCEPT (or REFUSE).
   The ACCEPT message contains the FlowSpec as accepted by the
   application at
   handle the target.

   3.1.4  Processing ACCEPT Messages

   3.1.4.1  ACCEPT Processing by incoming data packets. In no cases an Intermediate ST agent

   When an intermediate will forward data
   to a next-hop ST agent receives an ACCEPT, it first verifies that has not explicitly accepted the message is a response to an earlier CONNECT. If not, it
   responds to stream. To be
   sure that all targets receive the next-hop ST agent with data, an ERROR message, with
   ReasonCode (LnkRefUnknown). Otherwise, it responds application should send the data
   only after all paths have been established, i.e. the stream is
   established.

   4.      It is allowed to send data from the next-hop ST
   agent with an ACK, CHGING and propagates ADDING states.  While
   sending data from the ACCEPT message to CHGING state, the
   previous-hop along quality of service to the same path traced targets
   affected by the CONNECT but in change should be assumed to be the
   reverse direction toward more restrictive quality
   of service. When sending data from the origin.

   The FlowSpec is included in ADDING state the ACCEPT message so targets that receive
   the origin and
   intermediate ST agents can gain access to data include at least all the information targets that was
   accumulated as the CONNECT traversed the internet. Note that the
   resources, as specified in the FlowSpec in were already part of the ACCEPT message, may
   differ from
   stream at the resources that were reserved by time the ADD operation was invoked.

   The rules introduced above require ST agent agents to queue incoming requests when
   the
   CONNECT was originally processed. However, the ST agent current state does not
   adjust the reservation in response allow to process them immediately. In order to
   preserve the ACCEPT. It is expected that
   any excess resource allocation will be released for use by other
   stream or datagram traffic through an explicit CHANGE message
   initiated by the application at the origin if it does not wish semantics, ST agents have to be
   charged for any excess resource allocations.

   3.1.4.2  ACCEPT Processing by maintain the Origin

   The origin will eventually receive an ACCEPT (or REFUSE) message from
   each order of the targets. As each ACCEPT is received,
   requests, i.e. implement FIFO queuing.  Exceptionally, the application is
   notified of CLOSE request at
   the target origin and the resources that were successfully
   allocated along LEAVE request at the path to it, as specified target may be immediately processed:
   in this cases, the FlowSpec
   contained queue is deleted and it is possible that requests in the ACCEPT message.
   queue are not processed.

   The application may then use following state diagrams define the
   information to either adopt or terminate ST service. Separate diagrams are
   presented for the portion of origin and the stream to
   each target. When ACCEPT (or REFUSE) from targets. To keep the figure simple, only
   the primitives that cause state transitions are represented.

   The symbol (a/r)* indicates that all targets have been
   received at in the origin, target list have
   explicitly accepted or refused the application is notified that stream setup
   is complete. For problems due to CONNECT timeout, please refer to
   Section 4.1.1.

   When an ACCEPT is received by the origin, the path to stream, or refuse has been forced after
   timeout. If the target list is
   considered to be established and empty, i.e. it contains no targets, the ST agent
   (a/r)* condition is allowed to forward immediately satisfied, so the data along this path as explained in Section 3.3 empty stream is created
   and in the ST
   user service description in Section 2.

   3.1.5  Processing REFUSE Messages

   3.1.5.1  REFUSE Processing by the Intermediate state ESTBL is entered.

                              +------------+
                              |            |<-------------------+
                  +---------->|    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 agent

   If an application Service 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 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 agent that receives a REFUSE
   message with ReasonCode (ApplDisconnect) acknowledges it by sending
   an ACK to Service at the next-hop, considers which resources are to Target
   It should be released,
   deletes the target entry from noted that the internal database, separate OPEN and propagates
   the REFUSE message back to the previous-hop ST agent.

   If, after deleting the specified target, ADD primitives at the next-hop has no
   remaining targets, then those resources associated with that next-hop
   ST agent may be released. Note that network resources may not
   actually be released if network multicasting is being used since they
   may still be required target
   are for traffic conceptual purposes only. The target is actually unable to other next-hops in the multicast
   group.

   3.1.5.2  REFUSE Processing by the Origin

   When the REFUSE reaches the origin, the origin sends
   distinguish between an ACK OPEN and
   notifies the application that the target an ADD. This is no longer part of reflected in Figure 7 and
   Table 3 through the
   stream notation OPEN/ADD.

   2.3 State Transition Tables

   Table 2 and Table 3 define which primitives can be processed from which
   states and also if the stream has no remaining targets. If there are
   no remaining targets, 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 application may wish to terminate 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
   stream or keep Target
   3 The ST2 Data Transfer Protocol

   This section presents the stream active to allow stream joining as ST2 data transfer protocol, ST. First, data
   transfer is described in Section 3.4.2.

   3.2  Stream Options 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 may select among some stream options. The desired
   options is not guaranteed
   that the data reaches its destinations and no attempts are indicated made to recover
   from packet loss, e.g. due to the ST agent at underlying network.  However, if the origin when a new stream
   is created. Options apply data
   reaches its destination, it does it accordingly 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(s). When a
   CONNECT message reaches a target, the application at the target is
   notified quality of service
   associated with the stream options that have been selected.

   3.2.1  No Recovery
   The NoRecovery option is used to indicate that stream.

   Additionally, ST agents should not
   attempt recovery may deliver data corrupted in case of network or component failure. If a
   failure occurs, transmission. 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.  On the origin will be notified via a REFUSE message other hand,
   depending on the data encoding and the targets via particular application, a DISCONNECT, with an appropriate ReasonCode
   indicating the reason 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 failure. data transfer phase. The
   application at the origin
   may decide whether is expected to segment its data PDUs according to rebuild the deleted portion of minimum
   MTU over all paths in the stream by
   sending a CONNECT message. stream.  The NoRecovery option is specified by
   setting the S-bit in application receives information on
   the CONNECT message, see Section 11.4.

   3.2.2  Join Authorization Level

   When a new stream is created, it is necessary MTUs relative to define the join
   authorization level associated with the stream. This level determines paths to the protocol behavior in case targets as part of stream joining, the ACCEPT message,
   see Section 3.4.2. 8.6. The join authorization level for a stream is defined by the J-bit and
   N-bit in the CONNECT message header, see Section 11.4. One of the
   following authorization levels has to minimum MTU over all paths can be selected:

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

   o       Level 1 - Ask Origin (JN = 01): The application at the stream
   origin is asked whether the new target is allowed to join the stream.

   o       Level 2 - OK, Notify Origin (JN = 10): The targets joins the
   stream. The origin is notified that the target has joined.

   o       Level 3 - OK (JN = 11): The targets joins calculated from the stream. No
   notifications are sent
   MTUs relative to the stream origin.

   3.3  Data Transfer

   An application is not guaranteed that the data reaches its
   destinations: single paths. ST is unreliable and it does not make any attempt to
   recover from packet loss, e.g. due to the underlying network. In case
   the agents silently discard too long data reaches its destination, it does it accordingly to the
   negotiated quality of service.
   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 when once the next-hop ST agent
   on the path sends an ACCEPT message. 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 will
   forward data to a next-hop ST agent that has not explicitly accepted the
   stream.

   To be fairly 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 to send data before the completion of stream setup, but it
   should be aware that the data could be lost or not reach all the intended
   targets.

   At the end of the connection setup phase, the origin, each target,
   and each intermediate ST agent has a database entry that allows it to
   forward the data packets from the origin  This behavior may actually be desirable to the applications, such as
   those application that have multiple targets and to
   recover from failures of the intermediate ST agents which can each process data as
   soon as it is available (e.g. a lecture or networks. The
   database should distributed gaming).

   Implementations must be optimized able to make the packet forwarding task most
   efficient. The time critical operation is an intermediate ST agent
   receiving handle networks that support multicast. If a packet from the previous-hop ST agent and forwarding it
   to the next-hop ST agents. The database entry must also contain the
   FlowSpec, utilization information, the address of
   network does not support multicast, or for the origin and
   previous-hop, and case where the addresses next-hops are
   on different networks, multiple copies of the targets and next-hops, so it
   can perform enforcement and recover from failures.

   An data packet must be sent.

   3.2 ST agent receives Protocol Functions

   The ST protocol provides two functions:

   o       stream identification

   o       data packets encapsulated by an priority

   3.2.1 Stream Identification

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

   The forwarding information will

   Stream IDentifiers are intended to be network and implementation
   specific, but must identify used to make the next-hop ST agents. It packet forwarding
   task most efficient.  The time-critical operation is suggested
   that the cached information for an intermediate ST
   agent receiving a next-hop packet from the previous-hop ST agent include and forwarding it
   to the local
   network address next-hop ST agents.

   The format of the next- hop. If the data packet must be
   forwarded to multiple next- hops across a single network that
   supports multicast, the database may specify PDUs including the next-hops by a
   (local network) multicast address. If the network does not support
   multicast, or the next-hops are SID is defined in Section 10.1.
   Stream IDentifier generation is discussed in Section 8.1.

   3.2.2 Packet Discarding based on different networks, multiple
   copies Data Priority

   ST provides a well defined quality of the data packet must service to its applications.  However,
   there may be sent.

   No data fragmentation is supported during cases where the data transfer phase.
   The application network is expected temporarily congested and the ST
   agents have to segment its PDUs according discard certain packets to minimize the
   minimum MTU over all paths in the stream. The application receives
   information on the MTUs relative overall impact to the paths
   other streams. The ST protocol provides a mechanism to discard data packets
   based on the targets as part
   of Priority field in the ACCEPT message, data PDU, see also Section . 10.1. The minimum MTU over all
   paths has to be calculated from the MTUs relative to the single
   paths. If the
   application at the origin sends a too large assigns each data
   packet, packet with a discard-priority level, carried
   into the Priority field. ST agent at the origin generates an error agents will attempt to discard lower priority
   packets first during periods of network congestion.

   4  SCMP Functional Description

   ST agents create and it does not
   forward manage streams using the data.

   3.4  Modifying an Existing Stream

   Some applications may wish to modify ST Control Message Protocol
   (SCMP).  Conceptually, SCMP resides immediately above ST (as does ICMP above
   IP). SCMP follows a stream request-response model. SCMP messages are made reliable
   through the use of retransmission after it has been
   created. Possible changes include expanding a stream, reducing it,
   and changing its FlowSpec. In ST, changes to timeout.

   This section contains a functional description of stream may be
   initiated both by management with
   SCMP. To help clarify the origin SCMP exchanges used to setup and maintain ST
   streams, we include an example of a simple network topology, represented in
   Figure 8. Using the targets. Targets may be added by
   the origin as SCMP messages described in Section 3.4.1 or they may request 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 as described

   o       Delete the stream.

                                               +---------+    +---+
                                               |         |----| 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 3.4.2. The origin can reduce a
   stream by dropping some or all of its targets. This 4.1; Section 4.2
   introduces SCMP control message types; SCMP reliability is described discussed in
   Section 3.4.3. Targets may spontaneously decide to leave a 4.3; stream as
   described options are covered in Section 3.4.4. 4.4; stream setup is
   presented in Section 3.4.5 explains how to change a
   stream's FlowSpec.

   As defined by the ST service model, see 4.5; Section 2, an ST agent can
   handle only one 4.6 illustrates stream modification at a time. If
   including stream expansion, reduction, changes of the quality of service
   associated to a stream. Finally, stream
   modification operation deletion is already underway, further requests are
   queued and handled when in Section 4.7.

   4.1 Types of Streams

   SCMP allows for the previous operation has been completed.
   This also applies to two subsequent requests setup and management of different types of streams.
   Streams differ in the same kind, e.g.
   two subsequent changes to way they are built and the FlowSpec.

   3.4.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 maintained on the new
   connected targets. Such information is passed
   to

   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 ST agent at sender-oriented fashion, the origin.

   The ST agent application at the origin issues a CONNECT message that contains the
   SID, the FlowSpec, and the TargetList specifying
           provides the new targets.
   This is similar to sending a CONNECT message during stream
   establishment, ST agent with the following exceptions: the origin checks that
   a) the SID is valid, b) the targets are not already members of the
   stream, c) the FlowSpec list of receivers for the new target, stream.
           New targets, if present, matches any, are also added from the
   FlowSpec of origin.

   o       in the existing stream, i.e it requires an equal or smaller
   amount of resources to be allocated. If receiver-oriented approach, the FlowSpec of application at the new origin
           creates an empty stream that contains no targets. Each target does not match the FlowSpec of
           joins then the existing stream, it is
   simply ignored.

   An intermediate ST agent that is already a node stream autonomously.

   o       in the stream looks
   at mixed approach, the SID and verifies that application at the origin creates a
           stream is the same. It that contains some targets and other targets join then checks
   if the intersection of
           the TargetList stream autonomously.

   ST2 provides stream options to support sender-oriented and mixed steams.
   Receiver-oriented streams can be emulated through the targets use of the
   established mixed streams.
   The fashion by which targets may be added to a particular stream is empty. If this is not the case, it responds
   with an ERROR message with the appropriate ReasonCode (RouteLoop)
   that contains a TargetList of those targets that were duplicates.

   For each new target
   controlled via join authorization levels. Join authorization levels are
   described in the TargetList, processing is much the same as
   for the original CONNECT. The CONNECT is acknowledged, propagated,
   and network resources Section 4.4.2.

   4.1.2 Knowledge of Receivers

   When streams are reserved. However, it may be possible to
   route to built in the new sender-oriented fashion, all ST agents will
   have full information on all targets using previously allocated paths or an
   existing multicast group. down stream of a particular agent. In that
   this case, additional resources do not
   need to be reserved but more next-hops might have to be added to an
   existing multicast group.

   Intermediate or target information is relayed down stream from agent-to-agent
   during stream set-up.

   When targets add themselves to mixed streams, up-stream ST agents that are may or may
   not already nodes in the
   stream behave as in case be informed. Propagation of stream setup (see Section 3.1.3.1 and
   Section 3.1.3.2).

   3.4.2  A Target Joining information on targets that "join" a Stream

   An application may request to stream
   is also controlled via join an existing stream. It has authorization levels. As previously mentioned,
   join authorization levels are described in Section 4.4.2.

   This leads to
   collect two types of streams:

   o       full target information on the stream including the stream ID (SID) and
   the IP address is propagated in a controlled stream. For
           such streams, all agents are aware of all down-stream targets
           connected to the stream's origin. stream. This can be done out-of- band,
   e.g. via regular IP. The results in target information is then passed to
           being maintained at the local ST
   agent together with origin and routers. Operations on single
           targets are always possible, i.e.  charge a certain target, or,
           drop that target from the FlowSpec. The stream. It is also always possible for
           any ST agent generates a JOIN
   message containing the application's request to join attempt recovery of all down-steam targets.

   o       in light-weight streams, it is possible that the stream origin and
   sends other
           up-stream agents have no knowledge about some targets. This
           results in less maintained state and easier stream management,
           but it toward the 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 origin.

   An ST agent receiving a JOIN message, assuming no errors, responds
   with an ACK. The ACK message must identify recovery may not
           be possible. Of course, generic functions such as deleting the JOIN message
           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 which
   it corresponds by including limit state in agents and the Reference
           number indicated by the
   Reference field of the Join targets per control message. If the ST agent

   Controlled streams serve well applications as video conferencing or
   distributed gaming, where it is not traversed
   by important to have knowledge on the stream that has connected
   receivers, e.g. to limit who participates.  Light-weight streams may be joined, it propagates the JOIN message
   toward the stream's origin. Eventually, an ST agent traversed
   exploited by the
   stream applications such as remote lecturing or playback applications
   of radio and TV broadcast where the stream's origin itself is reached. This ST agent
   responds receivers do not need to be known by the join request based on the
   sender. Section 4.4.2 defines join authorization level
   associated with the stream, cf. Section 3.2.2.:

   o       level 0 (refuse join)

   It is not allowed to join the stream. No further actions are taken.

   o       level 1 (ask origin)

   The JOIN message is propagated back until the origin is reached. At
   the origin, levels, which support two
   types of controlled streams and one type of light-weight streams.

   4.2 Control PDUs

   SCMP defines the appli- cation following PDUs (the main purpose of each PDU is requested to either grant or deny
   the permission also
   indicated):

   1.      ACCEPT          to join the stream. If the permis- sion is denied, no
   further actions are taken. Otherwise, the origin issues accept a CONNECT new stream
   2.      ACK             to acknowledge an incoming message with a TargetList including the target that requested
   3.      CHANGE          to join change the stream. The target is then added as in normal stream setup.

   o       level 2 (ok, notify origin)

   The ST agent sends quality of service associated with
                           a stream
   4.      CONNECT message with         to establish a TargetList including the
   target that requested new stream or add new targets to join the stream. This results in adding the
   target
                           an existing stream
   5.      DISCONNECT      to remove some or all of the stream. When the stream's targets
   6.      ERROR           to indicate an error contained into an incoming
                           message
   7.      HELLO           to detect failures of neighbour ST agent which is already part in the agents
   8.      JOIN            to request stream receives the ACCEPT message indicating that the new joining from a target has
   been added, it does not propagate the ACCEPT message backwards.
   Instead, it issues
   9.      JOIN-REJECT     to reject a stream joining request from a target
   10.     NOTIFY message with ReasonCode(TargetJoined)          to inform the origin an ST agent of a significant event
   11.     REFUSE          to refuse the establishment of a new target.

   o       level 3 (ok)
   The stream
   12.     STATUS          to query an ST agent sends a CONNECT message with on a TargetList including the
   target that requested to join the stream. This results in adding the
   target specific stream
   13.     STATUS-RESPONSE to the stream. When the ST agent which is already part in the reply queries on a specific stream receives the ACCEPT message indicating that the new target has
   been added, it does

   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 propagate the ACCEPT extend across packet boundaries; if a control
   message backwards, nor
   it notifies the origin.

   3.4.2.1  ST FlowSpec

   Some rules on the FlowSpec are defined is too large for targets that join an
   existing stream. Targets are allowed to express their wishes in terms the MTU of FlowSpec a hop, its information is partitioned
   and a control message per partition is sent, as part of the JOIN-REQUEST message, see described in Section 11.8.
   Let us call this FlowSpec FT 5.1.2.

   The ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY and the current FlowSpec for the stream
   F. There are three cases:

   o       F > FT, i.e., F requires a larger amount of resources to
   REFUSE must always be
   allocated than FT. If authorized to join the stream, explicitly acknowledged:

   o       with an ACK message, if the target will
   receive a CONNECT message including FlowSpec FT. was received correctly and it
           was possible to parse and correctly extract and interpret its
           header, fields and parameters,

   o       F = FT, i.e., F requires       with an ERROR message, if a syntax error was detected in the same amount of resources to header,
           fields, or parameters included in the message. The errored PDU
           may be
   allocated optionally returned as FT. If authorized to join the stream, part of the target will
   receive a CONNECT ERROR message. An
           ERROR message including FlowSpec FT = F.

   o       F < FT, i.e., F requires indicates a smaller amount of resources to be
   allocated than FT. syntax error only. If authorized to join the stream, the target will
   receive a CONNECT message including FlowSpec F. The tar- get may
   always REFUSE the stream if FlowSpec F any other errors
           are detected, it is believed necessary to be
   insufficient, or, it may join the stream first acknowledge with ACK and perhaps later request
   the stream origin to modify the whole stream's FlowSpec. This request
           then take appropriate actions. For instance, suppose a CHANGE
           message contains an unknown SID: first, an ACK message has to be sent out-of-band.
           sent, then a REFUSE message with ReasonCode (SIDUnknown)
           follows.

   If the target does not specify any FlowSpec, i.e., no FlowSpec
   parameter 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 included described in the JOIN-REQUEST message, see Section 11.8,
   it will receive FlowSpec F as part 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 the CONNECT message.

   3.4.2.2  Router as Origin

   When join authorization level 3 HELLO messages is chosen, see discussed in Section 3.2.2
   6.1.2.

   STATUS messages containing a syntax error should be replied 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 3.4.2, it 8.4.

   4.3 SCMP Reliability

   SCMP is possible that made reliable through the stream origin use of retransmission when response is unaware that
   a target participates not
   received in the stream. In this case, the router that
   first sent a CONNECT 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 to this target has to act as the stream
   origin for which
   requires an ACK response, the given target. This includes:

   o       if sending ST agent needs to set the whole stream Toxxxx timer
   (where xxxx is deleted, the router must disconnect SCMP message type, e.g. ToConnect). If it does not
   receive an ACK before the target.

   o       if Toxxxx timer expires, the stream FlowSpec is changed, ST agent should
   retransmit the router must change SCMP message. If no ACK has been received within Nxxxx
   retransmissions, then a SCMP timeout condition occurs and the
   FlowSpec for ST agent
   enters its SCMP timeout recovery state. The actions performed by the target ST
   agent as appropriate.

   Of course, the router behaves normally for all other targets added to the stream as a consequence result of a CONNECT message issued by the
   origin. Note that, SCMP timeout condition differ for targets that joined a stream without notifying
   the origin, some operations different SCMP
   messages and are not possible. described in Section 5.2.

   For instance, some SCMP messages (CONNECT, CHANGE, JOIN, and STATUS) the
   origin cannot explicitly drop sending ST
   agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN-REJECT)
   after ACK has been received. For these targets from the stream.

   3.4.3  The Origin Removing Targets

   The application at cases, the origin specifies a set of targets that are ST agent needs to
   be removed from set the stream and an appropriate ReasonCode
   (ApplDisconnect). The targets are partitioned into multiple
   DISCONNECT messages based on
   ToxxxxResp timer after it receives the next-hop to ACK. (As before, xxxx is the individual targets.
   initiating SCMP message type, e.g. ToConnectResp). If the TargetList is too long to fit into one DISCONNECT message, it
   is partitioned 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 3.1.2.2.

   An ST agent that receives a DISCONNECT message acknowledges it by
   sending an ACK back to the previous-hop.
   5.2.

   The DISCONNECT timeout and retransmission algorithm is also
   propagated to the relevant next-hop ST agents. Before propagating the
   message, the TargetList implementation dependent and it
   is partitioned outside the scope of this document. Most existing algorithms are based on next-hop ST agents.

   If, after deleting
   an estimation of the specified targets, any next-hop has no
   remaining targets, then those resources associated with that next-hop
   ST agent may be released. Round Trip Time (RTT) between two hosts. Therefore,
   SCMP contains a mechanism to estimate this RTT, see Section 8.5. Note that network resources
   the timeout related variable names described above are for reference
   purposes only, implementors may not
   actually be released if network multicasting is being used since they choose to combine certain variables.

   4.4 Stream Options

   An application may still be required for traffic select among some stream options. The desired options are
   indicated to other next-hops in the multicast
   group.

   When ST agent at the DISCONNECT 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 target sends an ACK and
   notifies the application that it at the target is no longer part notified of the stream and
   for which reason. The ST agent at the target deletes the stream from
   its database after performing any necessary management and accounting
   functions. Note
   options that the have been selected, see Section 4.5.5.

   4.4.1 No Recovery

   When a stream failure is not deleted if the detected, an ST agent is
   also a router for the would normally attempt stream and there are remaining downstream
   targets.

   3.4.4  A Target Deleting Itself
   recovery, as described in Section 6.2. The application at the target may inform ST that it wants NoRecovery option is used to be
   removed from
   indicate that ST agents should not attempt recovery for the stream and stream. The
   protocol behaviour in case the appropriate ReasonCode
   (ApplDisconnect). NoRecovery option has been selected is
   illustrated in Section 6.2. The ST agent then forms a REFUSE message with
   itself as NoRecovery option is specified by setting
   the only entry S-bit in the TargetList. CONNECT message, see Section 10.4.4. The REFUSE is sent back
   to S-bit can be set
   only by the origin via the previous-hop. If a stream has multiple targets and one it is never modified by intermediate and target leaves the stream using this REFUSE mechanism, the ST
   agents.

   4.4.2 Join Authorization Level

   When a new stream is created, it is necessary to define the other targets is not affected; join
   authorization level associated with the stream. This level determines the
   protocol behavior in case of stream continues to
   exist.

   An ST agent that receives such joining, see Section 4.1 and Section
   4.6.3. The join authorization level for a REFUSE message acknowledges it stream is defined by
   sending an ACK to the next-hop. The target is deleted and, if J-bit and
   N-bit in the
   next-hop has no remaining targets, then CONNECT message header, see Section 10.4.4. One of the resources associated with
   that next-hop ST agent may be released. Note that network resources
   may not actually be released if network multicasting is being used
   since they may still
   following authorization levels has to be required for traffic selected:

   o       Level 0 - Refuse Join (JN = 00): No targets are allowed to other next-hops in
   the multicast group. The REFUSE is also propagated back join this
           stream.

   o       Level 1 - OK, Notify Origin (JN = 01): Targets are allowed to join
           the
   previous-hop ST agent.

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

   o       Level 2 - OK (JN = 10): Targets are allowed to join the stream.

   3.4.5  Changing a Stream's FlowSpec

   The application at No
           notification is sent to the sender stream origin.

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

   The selected authorization level impacts stream handling and of the list of targets relative to state that
   is maintained for the
   change. stream, as described in Section 4.1.

   4.4.3 Record Route

   The origin then issues one CHANGE message with RecordRoute option can be used to request the new
   FlowSpec per next-hop route between the origin
   and sends it a target be recorded and delivered to the relevant next-hop ST
   agents. CHANGE messages are structured and processed similarly to
   CONNECT messages.

   A next-hop ST agent that is an intermediate ST agent and receives application. This option may
   be used while connecting, accepting, changing, or refusing a
   CHANGE message similarly determines if it can implement the new
   FlowSpec along steam. The
   results of a RecordRoute option requested by the hop to each origin, i.e.  as part of its next-hop ST agents, and if so,
   it propagates
   the CONNECT or CHANGE messages along messages, are delivered to the established paths. If
   this process succeeds, target. The results of
   a RecordRoute option requested by the CHANGE messages will eventually reach target, i.e. as part of the
   targets, which will each respond with an ACCEPT (or REFUSE) message
   that is propagated back or
   REFUSE messages, are delivered to the origin.

   If the change to the FlowSpec

   The RecordRoute option is in a direction that makes fewer
   demands of specified by adding the involved networks, then RecordRoute parameter to
   the change has a high
   probability mentioned SCMP messages. The format of success along the path of RecordRoute parameter is
   shown in Section 10.3.5. When adding this parameter, the established stream. Each ST agent receiving the CHANGE message makes the necessary requested
   changes to the network resource allocations, and if successful,
   propagates the CHANGE message along at the established paths. If
   origin must determine the
   change cannot number of entries that may be made then the ST agent must recover using DISCONNECT
   and REFUSE messages recorded as
   explained in the case of a network failure, see Section
   5.2. Note that a failure 10.3.5.

   4.4.4 User Data

   The UserData option can be used by applications to change the resources requested for transport application
   specific targets should not cause other targets in the stream to data along with some SCMP control messages. This option can be
   deleted.

   3.5  Stream Tear Down

   A stream is usually terminated by
   included with ACCEPT, CHANGE, CONNECT, DISCONNECT, and REFUSE messages. The
   format of the origin when it has no further
   data to send, but UserData parameter is shown in Section 10.3.7. This option may also
   be partially torn down included by the individual
   targets. These cases will not be further discussed since they have
   already been described above.

   A stream is also torn down if origin, or the application should terminate
   abnormally. Processing in this case is identical to target, by adding the previous
   descriptions except that UserData parameter
   to the ReasonCode (ApplAbort) is different.

   When all targets have left mentioned SCMP messages.

   4.5 Stream Setup
   This section presents a stream, the origin notifies the
   application description of stream setup. For simplicity, we
   assume that fact, everything succeeds, e.g. any required resources are available,
   messages are properly delivered, and the application then routing is responsible for
   terminating correct. Possible
   failures in the stream. Note, however, that setup phase are handled in Section 5.2.

   4.5.1 Information from the Application

   Before stream setup can be started, the application may
   decide has to add targets collect the
   necessary information to determine the stream instead of terminating it.  4
   Exceptional Cases

   The previous descriptions covered characteristics for the simple cases where everything
   worked. We now discuss what happens when things do not succeed.
   Included are situations where messages are lost, connection.
   This includes identifying the requested
   resources are not available, participants and selecting the routing fails or is inconsistent.

   4.1  Setup Failures

   4.1.1  Setup Failure due QoS parameters
   of the data flow. Information passed to CONNECT Timeout

   When sending a CONNECT message, an the ST agent expects an ACK from by the
   next hop ST agent. If application
   includes:

   o       the CONNECT fails due to timeout (see Section
   7.3), list of the ST agent sends a REFUSE message back in stream's targets (Section 10.3.6). The list may be
           empty (Section 4.5.3.1),

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

   o       information on the appropriate ReasonCode (ConnectTimeout).

   4.1.2 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 Failure due to ACCEPT Timeout

   An at the Origin

   The ST agent that propagates an ACCEPT message backward toward at the origin expects an ACK from then performs the previous hop ST agent. If following operations:

   o       allocates a stream ID (SID) for the ACCEPT
   fails due to timeout (see Section 7.3), stream (Section 8.1),

   o       invokes the ST agent replaces routing function to determine the
   ACCEPT with a REFUSE and sends a DISCONNECT in set of next-hops for
           the direction toward stream (Section 4.5.2.1),

   o       invokes the target. Both REFUSE and DISCONNECT must identify Local Resource Manager (LRM) to reserve resources
           (Section 4.5.2.2),

   o       creates local database entries to store information on the affected
   targets and specify new
           stream,

   o       propagates the appropriate ReasonCode (AcceptTimeout).

   4.1.3  Setup Failure due stream creation request to the next-hops determined
           by the routing function (Section 4.5.3).

   4.5.2.1 Invoking the Routing Failures

   It is possible for an Function

   An ST agent to receive a CONNECT message that
   contains is setting up 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 invokes the routing function to find
   a path to reach each of the tree forming targets specified by the stream have joined
   back together,

   2. target list provided by
   the application. This is similar to the result of an attempted recovery of a partially failed
   stream, or

   3.      an erroneous routing loop.

   The TargetList contained decision in IP. However, in
   this case the CONNECT route is used to distinguish the
   different cases by comparing each newly received target a multitude of targets with those QoS requirements
   rather than to a single destination.

   The result of the previously existing stream:

   o       if the IP address routing function is a set of next-hop ST agents. The set
   of next-hops selected by the targets differ, it routing function is case #1;

   o       if not necessarily the target matches same as
   the set of next-hops that IP would select given a target in number of independent IP
   datagrams to the existing stream, it may
   be case #2 or #3.

   Case #1 is handled in Section 4.2.2 on path convergence. same destinations. The
   remaining cases requiring recovery, a partially failed stream and an
   erroneous routing loop, are not easily distinguishable. In attempting
   recovery of a failed stream, an ST agent algorithm may issue new CONNECT
   messages attempt to
   optimize parameters other than the affected targets. Such a CONNECT may reach an ST
   agent downstream number of the failure before hops that ST agent has received a
   DISCONNECT from the neighbourhood of packets will
   take, such as delay, local network bandwidth consumption, or total internet
   bandwidth consumption.  Alternatively, the failure. Until that ST agent
   receives routing algorithm may use a
   simple route lookup for each target.

   Once a route is selected by the DISCONNECT, routing function, it cannot distinguish between persists for the whole
   stream lifetime, unless a network failure
   recovery and an erroneous routing loop. That occurs.

   4.5.2.2 Reserving Resources

   The ST agent must therefore
   respond to invokes the CONNECT with a REFUSE message with the affected
   targets specified in Local Resource Manager (LRM) to perform the TargetList and an
   appropriate ReasonCode
   (StreamExists). reservations. The ST agent immediately preceding that point, i.e., presents the latest ST
   agent to send LRM with information
   including:

   o       the CONNECT message, will receive flow specification with the REFUSE message.
   It must release any resources reserved exclusively desired quality of service 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, cf. Section 7.3 and Section 4.1.1. If
   after NConnect retransmissions it continues to receive REFUSE
   messages, it should propagate the REFUSE message toward (Section 9),

   o       the origin, version number associated with the TargetList that specifies flow specification (Section
           9).

   o       information on the affected targets, but with a
   different error code (RouteLoop).

   The REFUSE message with this error code (RouteLoop) groups the stream is propagated by
   each ST agent without retransmitting any CONNECT messages. At each ST
   agent, it causes member in, if any resources reserved exclusively for (Section
           7),

   The flow specification contains information needed by the listed
   targets LRM to be released. allocate
   resources. The REFUSE will be propagated to the origin
   in the case of an erroneous routing loop. In LRM updates the case of stream
   recovery, flow specification contents information
   before returning it will be propagated to the ST agent that is attempting agent. Section 9.2.3 defines the recovery, which may be an intermediate ST agent or fields of the origin
   itself. In
   flow specification to be updated by the case LRM.

   The membership of a stream recovery, the ST agent attempting the
   recovery in a group may issue new CONNECT messages to affect the same or amount of resources
   that have to different
   next-hops.

   If an be allocated by the LRM, see Section 7.

   4.5.3 Sending CONNECT Messages

   The ST agent receives both a REFUSE message and a DISCONNECT
   message with a target in common then it can release the relevant
   resources and propagate neither the REFUSE nor the DISCONNECT.

   If the origin receives such a REFUSE message, it should attempt to
   send sends a new CONNECT message to all each of the next-hop ST agents
   identified by the affected targets. Since routing errors
   in an internet are assumed to be temporary, function. Each CONNECT message contains the new CONNECTs will
   eventually find acceptable routes to SID,
   the targets, if one exists. If
   no further routes exist after NRetryRoute tries, selected stream options, the application
   should be informed so that it may take whatever action it seems
   necessary.

   4.2  Further Issues

   4.2.1  Problems due to Routing Inconsistency

   When an intermediate ST agent receives FlowSpec, and a CONNECT, it invokes TargetList. The format of
   the
   routing algorithm to select CONNECT message is defined by Section 10.4.4. In general, the next-hop ST agents based FlowSpec
   and TargetList depend on both the
   TargetList next-hop and the networks to which it intervening network. Each
   TargetList is connected. If the
   resulting next-hop to any a subset of the original TargetList, identifying the targets is across
   that are to be reached through the same network
   from next-hop to which it received the CONNECT (but not the previous-hop itself),
   there message is
   being sent.

   The TargetList may be a routing problem. However, the routing algorithm at empty, see Section 4.5.3.1; if the
   previous-hop may TargetList causes a
   too long CONNECT message to be optimizing differently than generated, the local algorithm
   would 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 same situation. Since origin may request the local ST agent cannot
   distinguish the two cases, it should permit the setup but send back to create an
   empty stream. It does so by passing an empty TargetList to the previous-hop local ST
   agent an informative NOTIFY message with the
   appropriate ReasonCode(RouteBack), pertinent TargetList, and in the
   NextHopIPAddress element during the address of initial stream setup. When the next-hop local ST agent
   returned by receives
   request to create an empty stream, it allocates the stream ID (SID), updates
   its routing algorithm. local database entries to store information on the new stream and
   notifies the application that stream setup is complete. The local ST agent that receives such a NOTIFY should ACK it. If
   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 is using an algorithm that would produce such behaviour, no
   further action is taken; if not, the

   An ST agent should send receiving a
   DISCONNECT CONNECT message, assuming no errors, responds to the next-hop ST agent to correct
   previous-hop with an ACK. The ACK message must identify the problem.

   Alternatively, if CONNECT message
   to which it corresponds by including the next-hop returned reference number indicated by the routing function is in
   fact
   Reference field of the previous-hop, a routing inconsistency has been detected. In
   this case, a REFUSE is sent back to the previous- hop CONNECT message. The intermediate ST agent
   containing an appropriate ReasonCode (RouteInconsist), pertinent
   TargetList, and in the NextHopIPAddress element the address of the
   previous-hop. When the previous-hop receives the REFUSE, it will
   recompute the next-hop for the affected targets. If there is a
   difference in calls the
   routing databases in function, invokes the two ST agents, they may
   exchange CONNECT LRM to reserve resources, and REFUSE then propagates
   the CONNECT messages again. Since such routing errors to its next-hops, as described in the internet are assumed to be temporary, previous
   sections.

   4.5.5 CONNECT Processing at the situation should
   eventually stabilize.

   4.2.2  Path Convergence

   It is possible for an Targets

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

   The application is presented with that SID. This might be parameters from the result of
   two branches of CONNECT message
   including the tree forming SID, the selected stream have joined back
   together. Other cases are discussed in Section 4.1.3.

   This version of ST does not allow streams which have converged path,
   i.e streams are always tree-shaped options, FlowSpec, Group, and not graph-like. The ST agent
   which detects this condition informs the previous hop ST agent (the
   latest ST agent
   UserData, if any, to send the CONNECT message) be used as a basis for its decision. The application is
   identified by sending a NOTIFY
   message with ReasonCode(PathConverge). Upon receipt combination of the NOTIFY
   message, NextPcol field and the previous hop ST agent will find alternate route to SAP field included
   in the
   listed targets with a different next hop ST agent. If there is no
   next hop ST agent correspondent (usually single remaining) Target of the TargetList.
   The contents of the SAP field may specify the port or other than local identifier
   for use by the one it receives protocol layer above the NOTIFY message
   from, 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 must release any resources reserved for sends to the listed
   targets and send a
   previous-hop from which the CONNECT message was received either an ACCEPT or
   REFUSE message. Since the ACCEPT (or REFUSE) message with ReasonCode(PathConverge) has to
   its previous hop ST agent. In be acknowledged
   by the same way, previous-hop, it is assigned a new Reference number that will be
   returned in the REFUSE ACK. The CONNECT message to which ACCEPT (or REFUSE) is
   possibly propagated back a
   reply is identified by each ST agent. At each ST agent, it
   causes any resources reserved exclusively for placing the listed targets to
   be released. When CONNECT's Reference number in the REFUSE reaches
   LnkReference field of ACCEPT (or REFUSE). The ACCEPT message contains the origin,
   FlowSpec as accepted by the application at the target.

   4.5.6 ACCEPT Processing by an Intermediate ST agent at

   When an intermediate ST agent receives an ACCEPT, it first verifies that the
   origin should attempt to send
   message is a CONNECT with the listed targets response to a
   different route. If no route exists, or after NRetryRoute tries, the
   application should be informed so that it may take whatever actions
   it seems necessary.

   4.2.3  Problems in Reserving Resources an earlier CONNECT. If not, it responds to the local or network resources are not available, an
   next-hop ST agent may:

   o       try alternative paths with an ERROR message, with ReasonCode (LnkRefUnknown).
   Otherwise, it responds to the targets: the next-hop ST agent calls with an ACK, and propagates
   the
   routing function to find a different path ACCEPT message to the targets. If an
   alternative previous-hop along the same path is found, stream connection setup continues in traced by the
   usual way, as described
   CONNECT but in Section 3.1.

   o       preempt one or more of the already established streams: this
   way, the ST agent attempts to free enough resources to allow for reverse direction toward the
   new stream to be established. Stream preemption origin.

   The FlowSpec is discussed included in
   Section 5.3.

   o       refuse to establish the stream along this path: ACCEPT message so that the origin and
   intermediate ST
   agent informs agents can gain access to the application of information that was
   accumulated as the stream setup failure; an ST
   agent at a router or target issues a REFUSE message (as described CONNECT traversed the internet. Note that the resources,
   as specified in
   Section 3.1.5) with ReasonCode (CantGetResrc).

   It depends on the local implementations whether an ST agent tries
   alternative paths or preempts other streams. Also, FlowSpec in the order of ACCEPT message, may differ from the
   actions taken is not defined here. In any case, if enough
   resources
   cannot be found over different paths or as a consequence of stream
   preemption, that were reserved when the CONNECT was originally processed.
   Therefore, the ST agent has to explicitly refuse to establish presents the
   stream.

   4.2.4  Problems Caused by CHANGE Messages

   A CHANGE might fail for several reasons, including:

   o LRM with the request FlowSpec included in the
   ACCEPT message. It is expected that each LRM adjusts local reservations
   releasing any excess resources.  The LRM may be for a larger amount of network resources
   when those resources are choose not available;

   o       it might be required to adjust local
   reservations when that all adjustment may result in the former loss of needed
   resources. It may also choose to wait to adjust allocated resources are
   released before until
   all targets in transition have been accepted or refused.

   In the new ones are requested and, due case where the intermediate ST agent is acting as the origin with
   respect to unlucky
   timing, 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 unrelated request for network resources might be processed
   between ACCEPT (or REFUSE) message from each
   of the time targets.  As each ACCEPT is received, the resources are released and application is notified of
   the time target and the new resources are requested, so that were successfully allocated along the former resources are no longer
   available.

   If the attempt path
   to change it, as specified in the FlowSpec fails then contained in the ST agent where ACCEPT message. The
   application may then use the failure occurs must intentionally break information to either adopt or terminate the affected
   portion of the stream. This stream to each target. When ACCEPT (or REFUSE) from all
   targets have been received at the origin, the application is done notified that
   stream setup is complete.

   When an ACCEPT is received by sending REFUSE and DISCONNECT messages
   with ReasonCode (ChgFailed).  5  Failure Detection and Recovery

   5.1  Failure Detection

   The ST failure detection mechanism the origin, the path to the target is based on two assumptions:

   1.      If a neighbor of an
   considered to be established and the ST agent is up, and has been up without a
   disruption, allowed to forward the data
   along this path as explained in Section 2 and has not notified in Section 3.1.

   4.5.8 REFUSE Processing by the Intermediate ST agent of
   If an application at a problem with
   streams that pass through both, then 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 can assume that
   there has not been any problem receives a REFUSE message with those streams.

   2.      A network through which 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 has routed a stream will
   notify agent.

   In the case where the intermediate ST agent if there is a problem that affects the stream
   data packets but does not affect the control packets.

   The purpose of acting as the robustness protocol defined here is for ST agents origin with
   respect to determine that this target, see Section 4.6.3.1, the streams through a neighbor have been broken REFUSE message is not
   propagated upstream.

   4.5.9 REFUSE Processing by the failure of Origin

   When the neighbor or REFUSE message reaches the intervening network. This protocol
   should detect origin, the overwhelming majority of failures ST agent at the origin sends
   an ACK and notifies the application that can occur.
   Once a failure is detected, the recovery procedures described in
   Section 5.2 target is no longer part of the
   stream and also if the stream has no remaining targets. If there are initiated by no
   remaining targets, the ST agents.

   5.1.1  Network Failures

   An ST agent can detect network failures by two mechanisms:

   o application may wish to terminate the network can report a failure, stream or

   o       the ST agent can discover a failure by itself.

   They differ in keep
   the amount of information that an ST agent has
   available stream active to it allow stream joining as described in order Section 4.6.3.

   4.5.10 Other Functions during Stream Setup

   Some other functions have to make a recovery decision. For example, a
   network may be able to report that reserved bandwidth has been lost accomplished an by ST agent as CONNECT
   messages travel downstream and ACCEPT (or REFUSE) messages travel upstream
   during the reason for stream setup phase. They were not mentioned in the loss and may also report that connectivity previous
   sections to keep the neighboring ST agent remains intact. In this case, discussion as simple as possible. These functions
   include:

   o       computing the ST agent
   may request smallest Maximum Transmission Unit size over the network path
           to allocate bandwidth anew. On the other
   hand, an ST agent may discover that communication with a neighboring
   ST agent has ceased because it has not received any traffic from that
   neighbor targets, as part of the MTU discovery mechanism presented
           in some time period. If an ST agent detects a failure, it
   may not be able to determine if Section 8.6. This is done by updating the failure was MaxMsgSize field of
           the CONNECT message, see Section 10.4.4. This value is carried
           back to origin in the network while MaxMsgSize field of the neighbor remains available, or the neighbor has failed while the
   network remains intact.

   5.1.2  Detecting ST Agents Failures

   Each ST agent periodically sends each neighbour with which it shares
   one or more streams a HELLO message. This message exchange is between
   ST agents, not entities representing streams or applications. That
   is, an ST agent need only send a single HELLO message to a neighbour
   regardless of ACCEPT message,
           see Section 10.4.1.

   o       counting the number of streams that flow between them. All ST
   agents (host as well as intermediate) must participate in this
   exchange. However, only ST agents IP clouds that share active streams need to
   participate in this exchange and it is an error to send a HELLO
   message to a neighbour ST agent with no streams in common, e.g. have to
   check whether it is active. Note that STATUS messages can be used traversed to
   poll neighbour ST agents.

   A HELLO message is ACKed if reach
           the Reference field is non-zero. As well targets, as identifying part of the sender, IP encapsulation mechanism described
           in Section 8.7. This is done by updating the HELLO message has two fields:

   o       a HelloTimer IPHops field that of the
           CONNECT message, see Section 10.4.4. This value is carried back
           to origin in units the IPHops field of milliseconds modulo the maximum ACCEPT message, see Section
           10.4.1.

   o       updating the RecoveryTimeout value for the stream, as part of the
           stream recovery mechanism presented in Section 6.2. This is
           done by updating the RecoveryTimeout field size, and

   o       a Restarted-bit specifying that of the ST agent has been
   restarted recently.

   The HelloTimer must appear to be incremented every millisecond
   whether a HELLO message CONNECT
           message, see Section 10.4.4. This value is sent or not, but it is allowable for carried back to
           origin in the RecoveryTimeout field of the ACCEPT message, see
           Section 10.4.1.

   4.6 Modifying an ST
   agent Existing Stream

   Some applications may wish to create modify a new HelloTimer only when stream after it sends has been created.
   Possible changes include expanding a HELLO message. stream, reducing it, and changing its
   FlowSpec. The HelloTimer wraps around to zero after reaching the maximum value.
   Whenever an ST agent suffers a catastrophic event that origin may result add or remove targets as described in
   it losing ST state information, it must reset its HelloTimer to zero Section 4.6.1
   and must set the Restarted-bit for Section 4.6.2. Targets may request to join the following HelloTimerHoldDown
   seconds.

   Each ST stream has as described in
   Section 4.6.3 or, they may decide to leave a RecoveryTimeout value associated with it. This
   value is assigned stream as described in Section
   4.6.4. Section 4.6.5 explains how to change a stream's FlowSpec.

   As defined by the origin and carried into the CONNECT message,
   see Section 11.4.

   An 2, an ST agent must send HELLO messages to its neighbour with can handle only one stream modification
   at a period
   shorter than time. If a stream modification operation is already underway, further
   requests are queued and handled when the smallest RecoveryTimeout previous operation has been
   completed. This also applies to two subsequent requests of all the active streams
   that pass between the same kind,
   e.g. two ST agents, regardless of direction. This
   period must be smaller by a factor, called HelloLossFactor, which subsequent changes to the FlowSpec.

   4.6.1 The Origin Adding New Targets

   It is possible for an application at least as large as the greatest number of consecutive HELLO
   messages that could credibly be lost while origin to add new targets to an
   existing stream any time after the communication between stream has been established. Before new
   targets are added, the two ST agents is still viable.

   An ST agent may send simultaneous HELLO messages application has to all its neighbors
   at collect the rate necessary to support information
   on the smallest RecoveryTimeout of any
   active stream. Alternately, it may send HELLO messages new targets. Such information is passed to different
   neighbors independently the ST agent at different rates corresponding to
   RecoveryTimeouts of individual streams. the
   origin.

   The ST agent that receives at the origin issues a HELLO CONNECT message expects to receive at
   least one that contains the SID,
   the FlowSpec, and the TargetList specifying the new HELLO message from targets. This is similar
   to sending a neighbor CONNECT message during the
   RecoveryTimeout of every active stream through that neighbor. It can
   detect duplicate or delayed HELLO messages by saving establishment, with the HelloTimer
   field of following
   exceptions: the most recent valid HELLO message from origin checks that neighbor and
   comparing it with a) the HelloTimer field of incoming HELLO messages. It
   will only accept an incoming HELLO message from that neighbor if it
   has a HelloTimer field that SID is greater than valid, b) the most recent valid
   HELLO message by targets are
   not already members of the time elapsed since that message was received
   plus twice stream, c) the maximum likely delay variance from that neighbor. If FlowSpec of the ST agent does not receive a valid HELLO message within new target, if
   present, matches the
   RecoveryTimeout FlowSpec of a the existing stream, i.e it must assume that the neighboring ST
   agent requires an
   equal or smaller amount of resources to be allocated. If the communication link between the two has failed and it
   must initiate stream recovery activity.

   Furthermore, if 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 receives a HELLO message that contains is already a node in the Restarted-bit set, it must assume that stream looks at the sending ST agent has
   lost its ST state. If it shares streams with
   SID and verifies that neighbor, it must
   initiate the stream recovery activity. If it does not share streams with
   that neighbor, it should not attempt to create one until that bit is
   no longer set. the same. It then checks if the
   intersection of the TargetList and the targets of the established stream is
   empty. If an ST agent receives a CONNECT message from a
   neighbor whose Restarted-bit this is still set, it must respond with ERROR
   with not the appropriate ReasonCode (RemoteRestart). If case, it receives responds with a
   CONNECT REFUSE message while its own Restarted-bit is set, it must respond
   with ERROR with the appropriate
   ReasonCode (RestartLocal).

   5.2  Failure Recovery

   If an intermediate ST agent fails or (RouteLoop) that contains a network or part TargetList of a network
   fails, the previous-hop ST agent and those targets that were
   duplicates.

   For each new target in the various next-hop ST agents
   will discover TargetList, processing is much the fact by same as for
   the failure detection mechanism described
   in Section 5.1. original CONNECT. The recovery of an ST stream CONNECT is a relatively complex acknowledged, propagated, and time
   consuming effort because it is designed network
   resources are reserved.  Intermediate or target ST agents that are not
   already nodes in a general manner to
   operate across a large number the stream behave as in case of networks with diverse
   characteristics. Therefore, it may require information to be
   distributed widely, stream setup (see Section
   4.5.4 and may require relatively long timers. On the
   other hand, since Section 4.5.5).

   4.6.2 The Origin Removing a network Target
   It is a homogeneous system, failure recovery
   in the network may be a relatively faster and simpler operation.
   Therefore possible for an ST agent that detects a failure should attempt to fix application at the network failure before attempting recovery origin to remove existing targets
   of a stream any time after the targets have accepted the ST stream. If The
   application at the stream that existed between two ST agents before origin specifies the failure
   cannot set of targets that are to be reconstructed by network recovery mechanisms alone, then
   removed and informs the local ST stream recovery mechanism must be invoked.

   If stream recovery is necessary, agent. Based on this information, the different ST agents may need
   agent sends DISCONNECT messages with the ReasonCode (ApplDisconnect) to
   perform different functions, depending on their relation the
   next-hops relative to the
   failure:

   o targets.

   An ST agent that is a next-hop of a failure should first
   verify that there was a failure. It can do this using STATUS messages
   to query its upstream neighbor. If it cannot communicate with that
   neighbor, then it should first send receives a REFUSE DISCONNECT message with the
   appropriate Reason- Code ("failure") to the neighbor must acknowledge it by
   sending an ACK to speed up the
   failure recovery in case previous-hop. The ST agent updates its state and
   notifies the hop is unidirec- tional, i.e., the
   neighbor can hear the ST agent but LRM of the ST agent cannot hear target deletion so that the
   neighbor. The ST agent detecting LRM can modify
   reservations as appropriate. When the failure must then send DISCONNECT messages with message reaches the same Rea- sonCode toward target,
   the targets.

   The intermediate ST agents process this DISCONNECT message just like agent also notifies the DISCON- NECT application that tears down the stream. However, a target ST
   agent is no longer part
   of the stream. When there are no remaining targets that receives can be reached
   through a DISCONNECT message with particular next-hop, the appropriate
   ReasonCode ("failure") will maintain ST agent informs the stream state LRM and notify the
   next higher protocol of the failure. In effect, these DISCONNECT
   messages tear down it deletes
   the stream next-hop from the point of the failure its next-hops set.

   SCMP also provides a flooding mechanism to the
   targets, but inform the delete targets that joined the
   stream may be fixed shortly.

   o       An ST agent that 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 previous-hop before stream including the failed
   component first verifies that there was a failure by querying stream ID (SID) and the
   downstream neighbor using STATUS messages. If IP address
   of the neighbor has lost
   its state but stream's origin. This can be done out-of-band, e.g. via regular IP.
   The information is available, then passed to the local ST agent. The ST agent may reconstruct generates
   a JOIN message containing the
   stream if application's request to join the NoRe- covery option is not selected. If stream and
   sends it cannot
   communicate with toward the next-hop, then 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 detecting is not traversed by the
   failure releases any resources stream that are dedicated exclusively has to
   sending data on be
   joined, it propagates the broken branch and sends a DISCONNECT JOIN message with
   the appropriate ReasonCode ("failure") toward the affected targets.
   It does so stream's origin.  Once a
   JOIN message has been acknowledged, ST agents do not retain any state
   information related to speed up failure recovery in case the communication may
   be unidirectional and this message might be delivered successfully.

   The JOIN message.

   Eventually, an ST agent that is traversed by the previous-hop before stream or the failed component can
   attempt stream's origin
   itself is reached. This agent must respond to a received JOIN first with an
   ACK to recover the streams for ST agent from which the NoRecovery option 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 not
   selected: based on the join authorization level
   associated with the stream, see Section 4.4.2:

   o       If the NoRecovery option is selected, then the stream has authorization level #0 (refuse join):
           The ST agent sends a REFUSE JOIN-REJECT message with toward the appropriate target with
           ReasonCode ("failure") to (JoinAuthFailure).

   o       If the
   previous-hop. stream has authorization level #1 (ok, notify origin):
           The ST agent sends a CONNECT message toward the target with a
           TargetList in these messages contains all including the
   targets target that were reached through the broken branch. Multiple REFUSE
   mes- sages may be required if requested to join the PDU is too long for stream.
           This eventually results in adding the MTU of target to the
   intervening network. The REFUSE message is propagated all stream. When the way to
           ST agent receives the origin, which can attempt recovery of ACCEPT message indicating that the stream by sending a new
   CONNECT tar-
           get has been added, it does not propagate the ACCEPT message
           backwards (Section 4.5.6). Instead, it issues a NOTIFY message with
           ReasonCode (TargetJoined) and with TargetList including the target
           to inform the affected targets. The new CONNECT will be treated by
   intermediate ST agents as an addition origin of new targets into the
   established stream. new target.

   o       If the NoRecovery option is not selected, the stream has authorization level #2 (ok):
           The ST agent can
   attempt recovery of the stream. It does so by issuing sends a new CONNECT message toward the target with a
           TargetList including the target that requested to join the affected targets. If stream.
           This eventually results in adding the target to the stream. When the
           ST agent can- not find new
   routes to some targets, or if receives the only route to some targets is
   through ACCEPT message indicating that the previ- ous-hop, then new tar-
           get has been added, it sends one or more REFUSE messages
   to does not propagate the previous-hop with ACCEPT message
           backwards (Section 4.5.6), nor does it notify the appropriate ReasonCode ("failure")
   specifying origin.

   4.6.3.1 Router as Origin

   When a stream has join authorization level #2, see Section 4.4.2, it is
   possible that the affected stream origin is unaware of some targets participating in
   the TargetList. The pre- vious-hop
   can then attempt recovery of stream. In this case, the stream by issuing router ST agent that first sent a CONNECT to those
   targets. If it cannot find an appropriate route, it will propagate
   the REFUSE
   message toward the ori- gin.

   Regardless of which ST agent attempts recovery of a damaged stream,
   it will issue one or more CONNECT messages to the affected targets.
   These CONNECT messages are treated by intermediate ST agents this target has to act as
   additions of new targets into the established stream. The FlowSpecs
   of stream origin for the new CONNECT messages are given target.
   This includes:

   o       if the same as whole stream is deleted, the ones contained in router must disconnect the
   most recent CONNECT or CHANGE messages that
           target.

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

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

   Of course, the affected router behaves normally for all other targets when added to the
   stream was operational.

   5.2.1  Problems in Stream Recovery

   The reconstruction as a consequence of a broken stream may not proceed smoothly. Since
   there may be some delay while CONNECT message issued by the information concerning origin.

   4.6.4 A Target Deleting Itself

   The application at the failure
   is propagated throughout an internet, routing errors target may occur for
   some time after a failure. As a result, inform the local ST agent attempting the
   recovery may receive ERROR messages for the new CONNECTs that are
   caused by internet routing errors. it wants to
   be removed from the stream. The ST agent attempting then forms a REFUSE message with
   the
   recovery should be prepared to resend CONNECTs before it succeeds target itself as the only entry in
   reconstructing the stream. If TargetList and with ReasonCode
   (ApplDisconnect). The REFUSE message is sent back to the failure partitions origin via the internet and
   a new set of routes cannot be found
   previous-hop. If a stream has multiple targets and one target leaves the
   stream using this REFUSE mechanism, the stream to the targets, other targets is not
   affected; the stream continues to exist.

   An ST agent that receives a REFUSE
   messages will eventually be propagated message acknowledges it by sending an ACK
   to the origin, which can then
   inform next-hop. The target is deleted and the application LRM is notified so that it can decide whether to terminate or to
   continue
   adjusts reservations as appropriate.  The REFUSE message is also propagated
   back to attempt recovery of the stream.

   The new CONNECT may at some point reach an previous-hop ST agent downstream of the
   failure before except in the DISCONNECT does. In this case, case where the ST agent that
   receives the CONNECT is not yet aware that the stream has suffered a
   failure, and will interpret the new CONNECT
   acting as resulting from a
   routing failure. It will respond with an ERROR message with the
   appropriate ReasonCode (StreamExists). Since origin, see Section 4.6.3.1.

   When the timeout that REFUSE reaches the ST
   agents immediately preceding origin, the failure origin sends an ACK and immediately following
   the failure are approximately notifies the same, it is very likely
   application that the
   remnants target is no longer part of the broken stream will soon be torn down by stream.

   4.6.5 Changing a DISCONNECT
   message with Stream's FlowSpec

   The application at the appropriate ReasonCode ("failure"). Therefore, origin may wish to change the
   ST agent that receives FlowSpec of an
   established stream.  Changing the ERROR message with ReasonCode
   (StreamExists) should retransmit FlowSpec is a critical operation and it
   may even lead in some cases to the CONNECT message after deletion of the
   ToConnect timeout expires. If this fails again, stream. Possible problems
   with FlowSpec changes are discussed in Section 5.6.

   To change the request will be
   retried for NConnect times. Only if it still fails will stream's FlowSpec, the application informs the ST agent
   send a REFUSE message with at the appropriate ReasonCode (RouteLoop) to
   its previous-hop. This message will be propagated back to
   origin of the ST
   agent that is attempting recovery new FlowSpec and of the damaged stream. That list of targets relative to the
   change. The ST agent can issue a new CONNECT at the origin then issues one CHANGE message if per
   next-hop including the new FlowSpec and sends it so chooses. The REFUSE is
   matched to a CONNECT message created by a recovery operation through the LnkReference relevant next-hop ST
   agents. If the G-bit field in of the CONNECT.

   ST agents that have propagated a CONNECT message and have received a
   REFUSE CHANGE message should maintain this information for some period of
   time. If an ST agent receives a second CONNECT is set (1), the change
   affects all targets in the stream.

   The CHANGE message for contains a target bit called I-bit, see Section 10.4.3. By
   default, the I-bit is set to zero (0) to indicate that recently resulted in a REFUSE, the LRM is expected
   to try and perform the requested FlowSpec change without risking to tear
   down the stream. Applications that ST agent may respond with desire a
   REFUSE immediately rather than attempting higher probability of success
   and are willing to propagate the CONNECT.
   This has take the effect risk of pruning breaking the tree that is formed stream can indicate this by
   setting the
   propagation of CONNECT messages I-bit to a target one (1). Applications that is not reachable by require the routes that are selected first. The tree will pass through any
   given requested
   modification in order to continue operating are expected to set this bit.

   An intermediate ST agent only once, and the stream setup phase will be
   completed faster.

   If that receives a CONNECT CHANGE message reaches a target, first sends an ACK
   to the target should as
   efficiently as possible use previous-hop and then provides the state that it has saved from before FlowSpec to the stream failed during recovery of LRM. If the stream. It will then issue
   an ACCEPT message toward LRM
   can perform the origin. The ACCEPT message will be
   intercepted by change, the ST agent that is attempting recovery of propagates the
   damaged stream, if not CHANGE messages along
   the origin. established paths.

   If the FlowSpec contained in the
   ACCEPT specifies the same selection of parameters as were in effect
   before whole process succeeds, the failure, then CHANGE messages will eventually reach the ST agent
   targets. Targets respond with an ACCEPT (or REFUSE) message that is attempting recovery
   will not propagate
   propagated back to the ACCEPT. If origin. In processing the selections of ACCEPT message on the parameters
   are different, then way
   back to the ST agent that is attempting recovery will
   send origin, excess resources may be released by the origin a NOTIFY LRM as described
   in Section 4.5.6. The REFUSE message with must have the appropriate ReasonCode
   (FailureRecovery) that contains (ApplRefused).

   SCMP also provides a FlowSpec that specifies the new
   parameter values. The origin may then have flooding mechanism to change its data
   generation characteristics and targets that joined the stream's parameters with a CHANGE
   message to use
   stream without notifying the newly recovered subtree.

   5.3 origin. The special case of target change via
   flooding is described in Section 5.7.

   4.7 Stream Preemption
   An intermediate ST agent may decide to break a Tear Down
   A stream intentionally.
   This is called stream preemption. Usually streams are preempted in
   order to free resources for a new stream which has a higher priority.
   ST does not define usually terminated by the origin when stream preemption should be used but it
   provides the means has no further data to implement it.

   If an ST agent decides that it
   send. A stream is necessary to preempt one also torn down if the application should terminate
   abnormally or more of if certain network failures are encountered. Processing in
   this case is identical to the stream traversing it, previous descriptions except that the decision on which streams have to be
   preempted has to be made. ST provides two ways of optimizing such
   decision:

   1.      Streams can be assigned an StreamImportance value from 0
   (most important) to 7 (least important). This value
   ReasonCode (ApplAbort, NetworkFailure, etc.) is carried in different.

   When all targets have left a stream, the
   CONNECT message when origin notifies the stream is setup, see Section 11.4.

   2.      An application may specify that a set of streams are related
   to each other and
   that they are all candidate fact, and the application is then responsible for preemption if one
   of them gets preempted. It can be done by using terminating the
   stream. Note, however, that the fate- sharing
   relationship defined in Section 6. This helps making a good choice
   when more than one stream have to be preempted, because it leads to
   breaking a single application as oppo- site may decide to add targets to as many applications
   as the number
   stream instead of preempted streams.

   Stream preemption requires the following actions from the ST agents:

   o       An intermediate ST agent that breaks terminating it, or may just leave the stream intentionally
   sends DISCONNECT messages open with no
   targets in order to permit stream joins.

   5 Exceptional Cases

   The previous descriptions covered the appropriate ReasonCode
   (StreamPreempted) toward the affected targets. It sends simple cases where everything worked.
   We now discuss what happens when things do not succeed. Included are
   situations where messages exceed a REFUSE
   message with network MTU, are lost, the appropriate ReasonCode (StreamPreempted) to requested
   resources are not available, the
   previous-hop.

   o       A previous-hop routing fails or is inconsistent.

   5.1 Long ST agent 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 fragmentation, since ST2 does not support
   fragmentation of either data or control messages.

   5.1.1 Handling of Long Data Packets

   ST agents discard data packets that exceed the preempted stream acts as in
   case MTU of failure recovery, cf. Section 5.2. If the NoRecovery option
   is set, next-hop network.
   No error message is propagates generated. Applications should avoid sending data
   packets larger than the REFUSE message back to minimum MTU supported by a given stream. The
   application, both at the origin. If origin and targets, can learn the
   NoRecovery option is not set, it attempts to rebuild stream minimum
   MTU through the deleted
   paths and, MTU discovery mechanism described in case this does not work, it propagates the REFUSE
   message to the previous-hop.

   o       A target or next-hop Section 8.6.

   5.1.2 Handling of Long Control Packets

   Each ST agent of knows the preempted stream acts as
   in case MTU of failure recovery, cf. Section 5.2. It releases resources
   that are allocated to the stream, but networks to which it maintains is connected, and
   those MTUs restrict the inter- nal
   state information describing size of the stream for some time in case SCMP message it can send. An SCMP
   message size can exceed the
   stream is quickly fixed.

   Note that, as opposite to failure recovery, there is no need to
   verify that MTU of a given network for a number of reasons:

   o       the failure actually occurred, because this is explicitly
   indicated by TargetList parameter (Section 10.3.6) may be too long;

   o       the ReasonCode (StreamPreempted).

   6  A Group of Streams

   There RecordRoute parameter (Section 10.3.5) may be need to associate related streams. The group mechanism
   is simply an association technique that allows ST agents to identify too long.

   o       the different streams that are to UserData parameter (Section 10.3.7) may be associated.

   A group consists 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 set too long SCMP message should:

   o       break the message into multiple messages, each carrying part of streams the
           TargetList. Any RecordRoute and UserData parameters are
           replicated in each message for delivery to all targets.
           Applications that support a relationship. The set large number of
   streams targets may be empty. The relationship applies avoid
           using long TargetList parameters, and are expected to all group members.
   Each group is identified do so, by a group name. The group name is unique
   across
           exploiting the Internet.

   Streams belong stream joining functions, see Section 4.6.3. One
           exception to this rule exists. In the same group if they have the same GroupName in
   the GroupName field case of a long TargetList
           parameter to be included in a STATUS-RESPONSE message, the Group parameter. The relationship
           TargetList parameter is
   defined by just truncated to the Relationship field. Group membership must be specified
   at stream creation time and persists for point where the whole stream lifetime. A
           list can fit in a single message, see Section 8.4.

   o       for down stream may belong to multiple groups.

   The ST agent that creates agents: if the TargetList parameter contains a new group
           single Target element and the message size is called group initiator. Any still too long,
           the ST agent can be should issue a group initiator. The initiator allocates REFUSE message with ReasonCode
           (RecordRouteSize) if the
   GroupName and size of the Relationship among group members. The initiator may RecordRoute parameter
           causes the SCMP message size to exceed the network MTU, or may not be
           with ReasonCode (UserDataSize) if the origin size of a stream belonging to the group. The
   group name has 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 as described in Section 6.1.
   Relationships defined by this version of at the protocol are listed in
   Section 6.2.

   6.1  Group Name Generator

   The GroupName includes a 16-bit unique identifier, a 32-bit IP
   address, and a 32-bit creation timestamp. It is defined in Section
   6.3. An target: the target ST implementation has to provide a group name generator
   facility, so agent must check for SCMP
           messages that an may exceed the MTU on the complete
           target-to-origin path, and inform the application or higher layer protocol can obtain that a unique GroupName from too
           long SCMP messages has been generated. The format for the ST layer. This error
           reporting is a mechanism for local implementation issue. The error codes are
           the
   application same as previously stated.

   ST agents generating too long ERROR messages, simply truncate the PDUInError
   field to request the allocation of a GroupName that is
   independent of point where the request to create a stream. The GroupName message is used
   by the application or higher layer protocol when creating the streams
   that are to be part of the group.

   For instance, smaller than the following two functions could be made available:

   o       AllocateGroupName() -> result, GroupName

   o       ReleaseGroupName() -> result

   6.2  Basic ST Relationships

   This version of ST defines four basic relationships. An ST2+
   implementation must support all four basic relationships. The basic
   relationships are network MTU.

   5.2 Timeout Failures

   As described in detail below in Section 6.2.1 - Section 6.2.4.

   ST provides the means to define new relationships as 4.3, SCMP message delivery is made reliable through
   the need 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
   them becomes clear in some SCMP
   messages (CHANGE, CONNECT, JOIN) the future. This can sending ST agent also expects a
   response back (ACCEPT/REFUSE, CONNECT/ JOIN-REJECT) after ACK has been
   received. Also, the STATUS message must be done by assigning one
   of replied with a STATUS-RESPONSE
   message.

   The following sections describe the unused bits handling of the Relationship field each of the Group parameter. 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 describe the four basic relationships.

   6.2.1  Bandwidth Sharing

   Streams belonging are for reference purposes only. They may be implementation
   specific. Different implementations are not required to this group share variable
   names, or even the same network bandwidth.
   This mechanism by which the timeout and retransmission
   behavior is intended implemented.

   5.2.1 Failure due to support applications as audio conferences where,
   of all participants, only some at a time are allowed to speak. In
   such a scenario, global bandwidth utilization can be optimized, e.g.
   it is sufficient to reserve bandwidth for a small set of audio
   streams.

   The N parameter indicates for how many streams at the same time
   bandwidth should be allocated. ACCEPT Acknowledgment Timeout

   An ST agent allocates N times the
   bandwidth required by the most demanding stream in that sends an ACCEPT message upstream expects an ACK from the group, say
   Bmax.
   previous-hop ST agent. If no ACK is received before the application intends for instance to allow three
   participants to speak at ToAccept timeout
   expires, the same time, N has a value of three ST agent should retry and send the ACCEPT message again. After
   NAccept unsuccessful retries, the ST agent will allocate for the group an amount of bandwidth equal
   to 3*Bmax.

   This mechanism does not always allocate an optimal amount of
   bandwidth (as when sends a stream requires 4 Mbits/s and all the other
   streams in REFUSE message toward the same group require 1 Mbits/s only: N=3 causes
   origin, and a DISCONNECT message toward the
   allocation of 12 Mbits/s). However, it is simple to implement targets. Both REFUSE and it
   works well with streams that have homogeneous requirements. An
   alternative would be to keep track of
   DISCONNECT must identify the single streams requirements affected targets and allocate specify the exact amount of bandwidth. ReasonCode
   (RetransTimeout).

   5.2.2 Failure due to CHANGE Acknowledgment Timeout

   An ST agent always attempts to reserve N*Bmax bandwidth. that sends a CHANGE message downstream expects an ACK from the
   next-hop ST agent. If less
   bandwidth than N*Bmax no ACK is available, received before the new stream is not built. If
   bandwidth for ToChange timeout
   expires, the group has already been allocated ST agent should retry and a new stream
   with a bandwidth demand inferior to Bmax is being established, send the ST
   agent, depending on CHANGE message again. After
   NChange unsuccessful retries, the local implementation, may not need to contact ST agent aborts the local resource manager change attempt and it can proceed directly with the
   stream setup.

   Note that ST agents become aware of
   sends a group's requirements only when REFUSE message toward the streams belonging origin with ReasonCode (RetransTimeout).

   5.2.3 Failure due to CHANGE Response Timeout

   After correctly receiving the group are created. In case of the
   bandwidth sharing relationship, an application should attempt ACK to
   establish the most demanding streams first a CHANGE message, an ST agent expects
   to minimize stream setup
   efforts. receive an ACCEPT, or REFUSE message in response. If on one of these
   messages is not received before the contrary ToChangeResp timer expires, the less demanding streams are built
   first, ST agent
   aborts the change attempt and it will be always necessary to allocate additional bandwidth
   in consecutive steps as sends a REFUSE message toward the most demanding streams are built.

   6.2.2  Fate Sharing

   Streams belonging origin
   with ReasonCode (ResponseTimeout).

   5.2.4 Failure due to this group share CONNECT Acknowledgment Timeout

   An ST agent that sends a CONNECT message downstream expects an ACK from the same fate.
   next-hop ST agent. If a stream no ACK is
   deleted, received before the other members of ToConnect timeout
   expires, the group are also deleted. This is
   intended to support stream preemption by indicating which streams are
   mutually related. If preemption of multiple streams is necessary,
   this information can be used to delete a set of related streams, e.g.
   with impact on ST agent should retry and send the CONNECT message again. After
   NConnect unsuccessful retries, the ST agent sends a single application, instead of making REFUSE message toward
   the origin, and a random
   choice with DISCONNECT message toward the possible effect of interrupting several different
   applications.

   This relationship provides a hint on which streams should be
   preempted. Still, the entity responsible for targets. Both REFUSE and
   DISCONNECT must identify the preemption is not
   forced to behave accordingly, affected targets and other streams could be preempted
   first based on different criteria.

   6.2.3  Route Sharing

   Streams belonging to this group share specify the same paths. This can be
   desirable for several reasons, e.g. ReasonCode
   (RetransTimeout).

   5.2.5 Failure due to exploit CONNECT Response Timeout

   After correctly receiving the same allocated
   resources ACK to a CONNECT message, an ST agent expects
   to receive an ACCEPT or REFUSE message in response. If one of these message
   is not received before the attempt to maintain ToConnectResp timer expires, the transmission order. An ST agent attempts to select aborts
   the same path although connection setup attempt and it sends a REFUSE message toward the way this is
   implemented depends heavily on origin
   and a DISCONNECT message toward the routing algorithm which is used.

   If targets. Both REFUSE and DISCONNECT must
   identify the routing algorithm is sophisticated enough, an affected targets and specify the ReasonCode (ResponseTimeout).

   5.2.6 Failure due to DISCONNECT Acknowledgment Timeout

   An ST agent can
   suggest that sends a stream is routed over DISCONNECT message downstream expects an already established path.
   Otherwise, it can ask ACK from
   the routing algorithm for a set of legal routes
   to next-hop ST agent. If no ACK is received before the destination ToDisconnect
   timeout expires, the ST agent should retry and check whether send the desired path DISCONNECT message
   again. After NDisconnect unsuccessful retries, the ST agent simply gives up
   and it assumes the next-hop ST agent is included not part in
   those feasible.

   Route sharing is a hint to the routing algorithm used by ST. Failing
   to route a stream through the shared path does not normally cause the
   deletion of the stream: the stream is built over an alternative path
   whenever possible.

   6.2.4  Subnet Resources Sharing

   Streams belonging any more.

   5.2.7 Failure due to this group share JOIN Acknowledgment Timeout

   An ST agent that sends a JOIN message toward the same MAC layer subnetwork
   addresses. As origin expects an example, ACK from
   a neighbour ST agent. If no ACK is received before the same MAC layer multicast address can be
   used for all ToJoin timeout
   expires, the streams in a given group. This mechanism allows for
   a better utilization of MAC layer multicast addresses ST agent should retry and it is
   especially useful when used with network adapters that offer a very
   small number of MAC layer multicast addresses.

   This relationship provides send the JOIN message again. After
   NJoin unsuccessful retries, the ST agent sends a hint to JOIN-REJECT message back
   in the data link layer functions.

   6.3  Relationships Orthogonality
   The four basic relationships, as they have been defined, are
   orthogonal. This means, any combinations direction of the basic relationships
   are allowed. For instance, let's consider an application that
   requires full-duplex service for a stream target with multiple targets.
   Also, let's suppose that only N targets are allowed ReasonCode (RetransTimeout).

   5.2.8 Failure due to send data back JOIN Response Timeout

   After correctly receiving the ACK to a JOIN message, the origin ST agent at the same time. In this scenario, all the reverse
   streams could belong
   target expects to receive a CONNECT or JOIN-REJECT message in response. If
   one of these message is not received before the same group. They could be sharing both ToJoinResp timer expires,
   the paths ST agent aborts the stream join attempt and it returns an error
   correspondent to ReasonCode (RetransTimeout) to the bandwidth. The Path&Bandwidth sharing relationship
   is obtained from application.

   Note that, after correctly receiving the basic set of relationships. This example is
   important because it shows how full-duplex service can be obtained in
   ST. ACK to a JOIN message, intermediate
   ST agents do not maintain any state on the stream joining attempt. As new relationships are defined, it should be indicated whether a
   consequence, they
   are or do not orthogonal with respect to the previously defined ones.
   This will be reflected by illegal values for the Relationship field
   of the Group parameter (see Section 10.3.3).

   7  Ancillary Functions

   7.1  Stream IDs Generation

   To Be Written

   7.2  Checksum Computation

   The standard Internet checksum algorithm is used for ST: "The
   checksum field is the 16-bit one's complement of the one's complement
   sum of all 16-bit words in the header. For purposes of computing the
   checksum, the value of set the checksum field is zero (0)." See
   [RFC1071], [RFC1141], ToJoinResp timer and [RFC791] for suggestions do not wait for efficient
   checksum algorithms.

   7.3  SCMP Reliability

   The ST Control Message Protocol is made reliable through the use of
   retransmission when response a
   CONNECT or JOIN-REJECT message. This is not received described in Section 4.6.3.

   5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout

   An ST agent that sends a timely manner. In
   general, when sending a SCMP messages which requires JOIN-REJECT message toward the target expects an
   ACK back, the
   sending from a neighbour ST agent needs to set the Toxxxx timer (where xxxx is the
   SCMP message type, e.g. ToConnect). agent. If it does not receive an no ACK
   back is received before the Toxxxx timer ToJoinReject
   timeout expires, the ST agent should retransmit
   the SCMP message. If no ACK has been received within Nxxxx
   retransmissions, then a SCMP timeout condition occurs retry and send the JOIN-REJECT message
   again. After NJoinReject unsuccessful retries, the ST agent enters its SCMP timeout recovery state. The actions performed
   by the simply gives up.

   5.2.10 Failure due to NOTIFY Acknowledgment Timeout

   An ST agent as the result of that sends a NOTIFY message to a neighbour ST agent expects an
   ACK from that neighbour ST agent. If no ACK is received before the SCMP ToNotify
   timeout condition differ
   for different SCMP message. In some cases (CONNECT,ACCEPT) expires, the ST agent handles should retry and send the timeout by sending additional SCMP NOTIFY message
   (REFUSE/DISCONNECT) to its neighbour
   again. After NNotify unsuccessful retries, the ST agents (see Section 4.1.1 &
   Section 4.1.2), while in other cases (REFUSE, DISCONNECT) it agent simply gives up sine there is nothing else it can do.

   For some SCMP messages (CONNECT,CHANGE) and
   behaves as if the sending ACK message was received.

   5.2.11 Failure due to REFUSE Acknowledgment Timeout

   An ST agent also
   expects that sends a response back (ACCEPT/REFUSE) after REFUSE message upstream expects an ACK has been received.
   For these cases, from the
   previous-hop ST agent needs to set the Rtoxxxx timer after it
   receives the ACK. agent. If it does not receive no ACK is received before the appropriate response
   back when Rtoxxxx ToRefuse timeout
   expires, the ST agent updates its state data and
   perform appropriate recovery action as described in other sections.

   Timeout should retry and retransmission algorithm is implementation dependent send the REFUSE message again. After
   NRefuse unsuccessful retries, the ST agent gives up and it is outside the scope of this document. However, assumes it must be
   reasonable enough is not to cause excessive retransmission of SCMP
   message while maintain the robustness of the protocol. Algorithms on
   this subject are described
   part in [WoHD95], [Jaco88], [KaPa87].

   7.4  Network MTU Discovery

   At connection setup, the application at the origin asks the local stream any more.

   5.2.12 Failure due to STATUS Response Timeout

   After sending a STATUS message to a neighbour ST agent, an ST agent expects
   to create streams with certain QoS requirements. The local receive a STATUS-RESPONSE message in response. If this message is not
   received before the ToStatusResp timer expires, the ST agent fills out its network MTU value as part of the parameter in sends the
   CONNECT
   STATUS message and forwards it to again. After NStatus unsuccessful retries, the next hop ST agents. Each ST agent in gives
   up and assumes that the path checks neighbor ST agent is not active.

   5.3 Setup Failures due to see if its network MTU Routing Failures

   It is smaller than
   the one specified in the CONNECT message and, if it is, the possible for an ST agent
   updates the MTU in the to receive a CONNECT message accordingly. If the target
   application decides to accept the stream, the that contains a
   known SID, but from an ST agent at other than the target
   copies previous-hop ST agent of the MTU value in
   stream with that SID. This may be:

   1.      that two branches of the CONNECT message to appropriate field in tree forming the ACCEPT message and sends it stream have joined back to the application at
           together,

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

   3.      an erroneous routing loop.

   The MTU TargetList contained in the ACCEPT message CONNECT is used to distinguish the minimum MTU different
   cases by comparing each newly received target with those of network
   to that target. If the application has multiple targets then previously
   existing stream:

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

   o       if the smallest MTU received from all target matches a target in the
   ACCEPT messages. It existing stream, it may be
           case #2 or #3.

   Case #1 is handled in Section 5.3.1, while the responsibility of the application to
   segment its PDUs according 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 minimum MTU previous-hop ST agent of the
   stream since no
   data fragmentation is supported during with that SID. This might be the data transfer phase.

   7.5  Packet Discarding on Network Congestion

   TBD

   7.6  IP Encapsulation result of ST

   ST packets may be encapsulated two branches of the tree
   forming the stream have joined back together. Detection of this case and
   other possible sources was discussed in IP to Section 5.2.

   SCMP does not allow them to pass through
   routers that don't support the ST Protocol. Of course, ST resource
   management is precluded over such a for streams which have converged path, i.e streams are
   always tree-shaped and packet overhead is
   increased by encapsulation, but if the performance is reasonably
   predictable this may be better than not communicating at all.

   IP-encapsulated graph-like. At the point of convergence, the ST packets begin
   agent which detects the condition generates a REFUSE message with ReasonCode
   (PathConvergence). Also, as a normal help to the upstream ST agent, the detecting
   agent places the IP header. Most fields address of one of the stream's connected targets in the
   ValidTargetIPAddress field of the REFUSE message. This IP header should address will be filled in according
   used by upstream ST agents to avoid splitting the same rules stream.

   An upstream ST agent that
   apply receives the REFUSE with ReasonCode
   (PathConvergence) will check to any other see if the listed IP packet. Three fields address is one of special interest are:

   o       Protocol the
   known stream targets. If it is 5 to indicate an ST packet not, the REFUSE is enclosed, as
   opposed to TCP or UDP, for example. The assignment of protocol 5 propagated to
   ST is an arranged coincidence with the assignment of
   previous-hop agent. If the listed IP Version 5 to address is known by the upstream ST [RFC1190].

   o       Destination Address
   agent, this ST agent is that of the next-hop ST agent. This
   may or may not be agent that caused the target of split in the ST stream. There
   (This agent may even be an
   intermediate ST the origin). This agent to which then avoids splitting the packet should be routed to take
   advantage of service guarantees on
   stream by using the path past next-hop of that agent. Such an
   intermediate agent would not be on a directly-connected network (or
   else IP encapsulation wouldn't be needed), so it would probably not
   be listed in known target as the normal routing table. Additional routing mechanisms,
   not defined here, will be required to learn about such agents.

   o       Type-of-Service may be set to an appropriate value next-hop for the
   service being requested (usually low delay, high throughput, normal
   reliability). This feature is not implemented uniformly in the
   Internet, so its use can't be precisely defined here.

   IP encapsulation adds little difficulty for
   refused targets. It sends a CONNECT with the ST agent that
   receives affected targets to the packet. However, when IP encapsulation is performed it
   must be done in both directions. To
   existing valid next-hop.

   The above process will proceed, hop by hop, until the encapsulated IP
   message, the ST agents simply remove ValidTargetIPAddress
   matches the IP header and proceed with
   ST header as usual. address of a known target. The more difficult part is during setup, when 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 an erroneous
   routing loop, are not easily distinguishable. In attempting recovery of a
   failed stream, an ST agent must
   decide whether or not may issue new CONNECT messages to encapsulate. If the next-hop affected
   targets. Such a CONNECT may reach an ST agent is on
   a remote network and downstream of the route to failure
   before that network is through ST agent has received a router DISCONNECT from the neighbourhood of the
   failure. Until that supports IP but not ST, then encapsulation is required. The ST
   agents make encapsulation decision based on information provided by agent receives the DISCONNECT, it cannot distinguish
   between a failure recovery and an erroneous routing function loop. That ST agent must
   therefore respond to indicate whether the routers in CONNECT with a REFUSE message with the path support
   ST. It is outside affected
   targets specified in the scope of this document to address routing
   function TargetList and therefore neither its algorithm nor implementation is
   specified here. an appropriate ReasonCode
   (StreamExists).

   The ST assumes agent immediately preceding that appropriate routing algorithm exists
   to which point, i.e., the latest ST has access.

   On forwarding, agent to
   send the (mostly constant) IP Header CONNECT message, will receive the REFUSE message. It must be inserted and release
   any resources reserved exclusively for traffic to the IP checksum appropriately updated.

   7.7  IP Multicasting listed targets. If an
   this ST agent must use IP encapsulation to reach multiple next-hops
   toward different targets, was not the one attempting the stream recovery, then either it cannot
   distinguish between a failure recovery and an erroneous routing loop. It
   should repeat the packet must be replicated
   for transmission CONNECT after a ToConnect timeout, see Section 5.2.4. If
   after NConnect retransmissions it continues to each next-hop, or IP multicasting may be used if receive REFUSE messages, it is implemented in the next-hop ST agents and in
   should propagate the intervening IP
   routers.

   When REFUSE message toward the stream is established, origin, with the collection of next-hop ST agents
   must be set up as an IP multicast group. The ST agent must allocate
   appropriate IP multicast address (see Section 10.3.4) and fill TargetList
   that
   address in the IPMulticastAddress field of specifies the CONNECT message. affected targets, but with a different ReasonCode
   (RouteLoop).

   The
   IP multicast address in the CONNECT REFUSE message with this ReasonCode (RouteLoop) is used to inform the
   next hop propagated by each ST agents that they should join
   agent without retransmitting any CONNECT messages. At each ST agent, it
   causes any resources reserved exclusively for the multicast group listed targets to
   receive subsequent PDUs. Obviously, the CONNECT message itself must be sent using unicast.
   released. The next hop ST agents must REFUSE will be able to receive
   on the specified multicast address in order propagated to accept the connection.

   The following permanent IP multicast addresses have been assigned to
   ST:

   224.0.0.7 All ST routers

   224.0.0.8 All ST hosts

   In addition, a block of transient IP multicast addresses, 224.1.0.0 -
   224.1.255.255, has been allocated for ST multicast groups. Note that origin in the case of Ethernet, an ST multicast address
   erroneous routing loop. In the case of "224.1.cc.dd"
   maps to an Ethernet multicast address of "01:00:5E:01:cc:dd", see
   [RFC1112].

   7.8  Routing

   ST requires access to routing information in order to select a path
   from an origin stream recovery, it will be
   propagated to the destination(s). However, routing ST agent that is considered
   to be a separate issue and neither attempting the routing algorithm nor its
   implementation is specified here. ST should operate equally well with
   any reasonable routing algorithm.

   While ST recovery, which may be capable of using several types of information that
   are not currently available, an
   intermediate ST agent or the minimal information required is that
   provided by IP, namely origin itself. In the ability to find an interface and next hop
   router for a specified IP destination address and Type case of Service.
   Methods to make more information available and to use it are left for
   further study. For initial ST implementations, any routing
   information that is required but not automatically provided will be
   assumed to be manually configured into a stream
   recovery, the ST agents.

   8  FlowSpec

   The FlowSpec is used to convey stream service requirements end-to-
   end. The contents of agent attempting the FlowSpec are transparent recovery may issue new CONNECT
   messages to the ST agents.
   An same or to different next-hops.

   If an ST agent extracts the FlowSpec from the correspondent incoming
   SCMP receives both a REFUSE message and passes a DISCONNECT message with
   a target in common then it to can release the LRM as required. The LRM updates relevant resources and propagate
   neither the FlowSpec values based on REFUSE nor the amount of resources that it has
   allocated to DISCONNECT.

   If the stream.

   8.1  FlowSpec Versions

   ST is not dependent on origin receives such a particular FlowSpec format and REFUSE message, it is
   expected that other versions of the FlowSpec than those introduced
   below should attempt to send a
   new CONNECT to all the affected targets. Since routing errors in this section will an internet
   are assumed to be needed in temporary, the future. Different
   FlowSpec formats are distinguished by new CONNECTs will eventually find
   acceptable routes to the value of targets, if one exists. If no further routes exist
   after NRetryRoute tries, the Version field.
   The following values are reserved:

   0 - Null FlowSpec /* mandatory */

   1 - ST Version 1

   2 - ST Version 1.5

   3 - RFC 1190 FlowSpec

   4 - HeiTS FlowSpec

   5 - BerKom FlowSpec

   6 - RFC 1363 FlowSpec

   7 - ST2+ FlowSpec /* mandatory */

   A single stream is always associated application should be informed so that it may
   take whatever action it seems necessary.

   5.4 Problems due to Routing Inconsistency

   When an intermediate ST agent receives a single FlowSpec format.
   Changes CONNECT, it invokes the routing
   algorithm to select the FlowSpec are also relative next-hop ST agents based on the TargetList and the
   networks to which it is connected. If the resulting next-hop to any of the
   targets is across the same FlowSpec
   format, i.e. network from which it received the value of CONNECT (but
   not the Version field cannot previous-hop itself), there may be changed during a routing problem. However, the lifetime of
   routing algorithm at the stream.

   8.2  The Null FlowSpec (#0)

   The FlowSpec identified by a value of 0 for its Version field is
   called previous-hop may be optimizing differently than the "Null FlowSpec". An
   local algorithm would in the same situation. Since the local ST agent that receives cannot
   distinguish the Null
   FlowSpec always assumes that sufficient resources for two cases, it should permit the stream are
   available. The Null FlowSpec fields values are never updated. Stream setup takes place in the usual way, but no resources are actually
   reserved.

   The main purpose of the Null FlowSpec is that of facilitating
   interoperability tests by allowing streams send back to be built without
   actually allocating the correspondent amount of resources. The Null
   FlowSpec may also be used for testing
   previous-hop ST agent an informative NOTIFY message with the appropriate
   ReasonCode (RouteBack), pertinent TargetList, and debugging purposes.

   The complete format is specified in Section 10.3.2.

   8.3 the NextHopIPAddress
   element the address of the next-hop ST agent returned by its routing
   algorithm.

   The ST Current FlowSpec (#7)

   FlowSpec #7 agent that receives such a NOTIFY should ACK it. If the ST agent is
   using an algorithm that would produce such behaviour, no further action is
   taken; if not, the FlowSpec ST agent should send a DISCONNECT to be used the next-hop ST
   agent to correct the problem.

   Alternatively, if the next-hop returned by the current version of ST.

   It contains values for 3 basic QoS parameters: message size,
   throughput, and delay. Also, it routing function is possible to specify in fact
   the previous-hop, a QoS class,
   e.g. guaranteed. Each parameter routing inconsistency has to be expressed via been detected. In this case, a set of
   values:

   o       the "desired" values are assigned by
   REFUSE is sent back to the application previous-hop ST agent containing an appropriate
   ReasonCode (RouteInconsist), pertinent TargetList, and
   never changed by in the LRM

   o
   NextHopIPAddress element the "limit" values are assigned by address of the application and never
   changed by previous-hop. When the LRM

   o
   previous-hop receives the "actual" values indicate REFUSE, it will recompute the guarantees that next-hop for the system
   is able to provide. They are updated by
   affected targets. If there is a difference in the LRM at each node. The
   "actual" values are always bounded by routing databases in the "limit" values.

   8.3.1  Qos Classes

   We also define
   two QoS classes:

   1.      QOS_GUARANTEED

   2.      QOS_PREDICTIVE

   o       The QOS_GUARANTEED service class implies that the negotiated
   QoS for the stream is never violated during ST agents, they may exchange CONNECT and REFUSE messages again. Since
   such routing errors in the data transfer. For
   instance, internet are assumed to be temporary, the desired rate
   situation should eventually stabilize.

   5.5 Problems in Reserving Resources

   As mentioned in Section 1.4.5, resource reservation is handled by the peak rate for the transmission.
   This LRM.
   The LRM may sometimes lead not be able to overbooking satisfy a particular request during stream setup
   or modification for a number of resources, but it provides
   strict real-time guarantees.

   o       The QOS_PREDICTIVE service class implies that reasons, including a mismatched FlowSpec, an
   unknown FlowSpec version, an error in processing a FlowSpec, and an
   inability to allocate the negotiated
   QoS may requested resource. This section discusses these
   cases and specifies the ReasonCodes that should be violated for short time intervals. Reservations used when these error
   cases are done
   for encountered.

   5.5.1 Mismatched FlowSpecs

   In some cases the average case as opposite LRM may require a requested FlowSpec to the peak match an existing
   FlowSpec, e.g.  when adding new targets to an existing stream, see Section
   4.6.1. In case required by of FlowSpec mismatch the
   QOS_GUARANTEED service class.

   If a LRM that doesn't support class QOS_PREDICTIVE (QOS_GUARANTEED)
   receives a FlowSpec containing a QOS_PREDICTIVE (QOS_GUARANTEED)
   class, it informs notifies the local ST agent. The processing ST agent may try different
   paths or delete the correspondent portion of the stream
   which should respond with ReasonCode (QoSClassUnknown).

   8.3.2  Maximum Message Size

   This parameter is expressed in bytes. It represents the maximum size
   allowed for messages sent as part of (FlowSpecMismatch).

   5.5.2 Unknown FlowSpec Version

   When the stream. The LRM first checks
   whether is invoked, it is possible to get passed information including the value desired by version of
   the application
   (DesMaxSize). FlowSpec, see Section 4.5.2.2. If not, it updates the actual value (ActMaxSize) with
   the available size unless this value version is inferior to the minimum
   allowed not know by the application (LimitMaxSize), in which case it informs LRM,
   the local LRM notifies the ST agent. The ST agent that it is not possible should respond with a REFUSE
   message with ReasonCode (FlowVerUnknown).

   5.5.3 LRM Unable to build the stream along
   this path.

   8.3.3  Rate Process FlowSpec

   The LRM may encounter an LRM or Throughput

   This parameter FlowSpec specific error while attempting to
   satisfy a request. An example of such an error is expressed given in bytes/seconds. It represents the
   transmission rate for the stream. The Section 9.2.1.
   These error are implementation specific and will not be enumerated with ST
   ReasonCodes. They are covered by a single, generic ReasonCode. When an LRM first checks whether
   encounters such an error, it is
   possible to get should notify the value desired by ST agent which should respond
   with the application (DesRate). generic ReasonCode (FlowSpecError).

   5.5.4 Insufficient Resources

   If
   not, it updates the actual value (ActRate) with LRM cannot make the available rate
   unless this value is inferior necessary reservations because sufficient
   resources are not available, an ST agent may:

   o       try alternative paths to the minimum allowed by the
   application (LimitRate), in which case it informs targets: the local ST agent
   that it is not possible calls the routing
           function to find a different path to build the targets. If an alternative
           path is found, stream along this path.

   8.3.4  Maximum Delay and Delay Jitter

   This parameter is expressed connection setup continues in milliseconds. It represents the
   maximum end-to-end for the stream. The LRM first checks whether it is
   possible usual way,
           as described in Section 4.5.

   o       refuse to get the value desired by the application (DesMaxDelay).
   If not, it updates the actual value (ActMaxDelay) with establish the available
   rate unless stream along this value is greater than path: the maximum delay allowed by origin ST agent
           informs the application (LimitMaxDelay), of the stream setup failure; an ST agent at
           a router or target issues a REFUSE message (as described in which case it informs
           Section 4.5.8) with ReasonCode (CantGetResrc).

   It depends on the local implementations whether an ST agent that it is not possible tries
   alternative paths or refuses to build the stream along this path.

   The LRM also updates establish the MinDelay field by adding stream. In any case, if enough
   resources cannot be found over different paths, the minimum
   possible delay ST agent has to
   explicitly refuse to establish the next- hop. Information on stream.

   5.6 Problems Caused by CHANGE Messages

   A CHANGE might fail for several reasons, including:

   o       insufficient resources: the minimum possible
   delay allows request may be for a larger amount of
           network resources when those resources are not available, ReasonCode
           (CantGetResrc);

   o       a target application not agreeing to calculate another important QoS parameter, the delay
   jitter. change, ReasonCode
           (ApplRefused);

   The complete format is specified in Section 10.3.2.

   9  ST State Machines

   To affected stream can be separately published.

   10  ST Protocol Data Units

   All ST packets arrive at left in one of two states as a result of change
   failures: a) the same Network Service Access Point (NSAP)
   that IP uses stream can revert back to receive IP datagrams, e.g., ST would use the same
   ethertype (0x800) as does IP. The two types of packets are
   distinguished by state it was in prior to the IP Version Number field, i.e.
   CHANGE message being processed, or b) the first four (4)
   bits stream may be torn down.

   The expected common case of failure will be when the packet; IP currently uses a value of 4, while ST has been
   assigned requested change cannot
   be satisfied, but the value 5 (see [RFC791]). There is no requirement for
   compatibility between IP pre-change resources remain allocated and ST packet headers beyond available
   for use by the stream. In this case, the first four
   bits.

   The ST PDUs sent between agent at the point where the
   failure occurred must inform upstream ST agents consist of an the failure.  (In the
   case where this ST Header
   encapsulating either agent is the target, there may not actually be a higher layer PDU or an ST Control Message.
   Data packets are distinguished from control messages via failure,
   the D-bit
   (bit 8) in application may merely have not agreed to the ST header. change). The ST Header also includes an agent
   informs upstream ST Version Number, a total length
   field, a header checksum, agents by sending a unique id, and REFUSE message with ReasonCode
   (CantGetResrc or ApplRefused). To indicate that the stream origin 32-bit
   IP address. The unique id pre-change FlowSpec is
   still available and that the stream origin 32-bit IP address
   form still exists, the stream id (SID). This is shown in Figure 8. Please refer ST agent sets to
   Section 13 for an explanation one
   (1) the E-bit of the notation.

   Figure 8: ST Header

   o REFUSE message, see Section 10.4.11. Upstream ST is agents
   receiving the IP Version Number assigned to identify ST packets.
   The value for ST is 5.

   o       Ver is REFUSE message inform the ST Version Number. The value for the current ST2+
   version is 3.

   o       D (bit 8) is set LRM so that it can attempt to 1 in all ST data packets and revert
   back to 0 in all
   SCMP control messages.

   o       Pri (bits 9-11) the pre-change FlowSpec. It is permissible, but not desirable, for
   excess resources to remain allocated.

   For the packet-drop priority field, case when the attempt to be used
   as described in Section 7.5.

   o       TotalBytes is change the length, stream results in bytes, the loss of
   previously reserved resources, the entire ST packet,
   it includes stream is torn down. This can happen, for
   instance, when the ST Header but does not include any local network
   headers or trailers. In general, all length fields in I-bit is set (Section 4.6.5) and the ST Proto-
   col LRM releases
   pre-change stream resources before the new ones are in units of bytes.

   o       HeaderChecksum covers only reserved, and neither
   new nor former resources are available. In this case, the ST Header (12 bytes). The ST
   Protocol uses 16-bit checksums here in agent where the
   failure occurs must inform other ST Header and agents of the break in each
   Control Message. For checksum computation, see Section 7.2.

   o       UniqueID is the first element affected
   portion of the stream id (SID). It stream. This is
   locally unique at done by the ST agent by sending a REFUSE
   message upstream and a DISCONNECT message downstream, both with the
   ReasonCode (CantGetResrc). To indicate that pre-change stream origin, see Section 7.1.

   o       OriginIPAddress is resources have
   been lost, the second element E-bit of the SID. It REFUSE message is the
   32-bit IP address of the stream origin, see Section 7.1.

   Bits 12-15 must be set to zero (0) in the current ST version. In the
   future, it is possible (0).

   Note that this 4-bit field will be used for
   substream filtering, e.g., as described in [WoHD95].

   10.1  ST Data Packets

   ST packets whose D-bit is non-zero are data packets. Their
   interpretation is a matter failure to change the resources requested for specific targets
   should not cause other targets in the higher layer protocols stream to be deleted.

   5.7 Unknown Targets in DISCONNECT and
   consequently is not specified here. CHANGE

   The data packets are not
   protected by an ST checksum and will be delivered to the higher layer
   protocol even with errors. ST agents will not pass data packets over handling of unknown targets listed in a new hop whose setup DISCONNECT or CHANGE message is not complete.

   10.1.1  Stream ID

   The UniqueID
   dependent on a stream's join authorization level, see Section 4.4.2. For
   streams with join authorization levels #0 and OriginIPAddress fields form the Stream ID (SID),
   which is used by the ST agents to identify which stream the data
   packets belong to. Within the same stream, #1, see Section 4.4.2, the same SID is used in
   data packets and control messages.

   NOTE: all
   targets must be known. In some exceptional situations, e.g. usually due to this case, when processing a crash and
   subsequent reboot, CHANGE message, the
   agent should generate a refuse with ReasonCode (TargetUnknown).  When
   processing a DISCONNECT message, it is possible that an ST agent receives a data
   packet belonging to the DISCONNECT is a stream
   duplicate of which an old request so the ST agent should respond as if it has lost state
   information. In this case,
   successfully disconnected the ST agent target. That is, it should respond with an ACK
   message.

   For streams with join authorization level #2, it is possible that the origin
   is not able to forward aware of some targets that participate in the
   packet and has to discard it. Since SIDs include the 32-bit IP
   address of the stream origin, it is possible for stream. The origin may
   delete or change these targets via the following flooding mechanism.

   If no next-hop ST agent to
   disconnect from the stream.

   10.2  ST Control Messages

   SCMP control messages are exchanged between neighbor ST agents using
   a D-bit of zero (0). The control protocol follows a request-response
   model can be associated with all requests expecting responses. Retransmission after
   timeout (see Section 7.3) is used to allow for lost or ignored
   messages. Control messages do not extend across packet boundaries; if a control message target, the
   CHANGE/DISCONNECT/message including the target is too large for replicated to all known
   next-hop ST agents. This has the MTU effect of a hop, its information
   is partitioned and a control propagating the CHANGE/DISCONNECT
   message per partition is sent (see
   Section 3.1.2.2). All control messages have to all downstream ST agents. Eventually, the following format:

   Figure 9: ST Control Message Format

   o       OpCode identifies agent that acts as
   the type of control message.

   o       Options is used to convey OpCode-specific variations origin for a
   control message.

   o       TotalBytes is the length of the control message, in bytes,
   including all OpCode specific fields target (Section 4.6.3.1) is reached and optional parameters. The
   value the target is always divisible by four (4).

   o       Reference
   deleted.

   Target deletion/change via flooding is a transaction number. Each sender of a request
   control message assigns a Refer- ence number not expected to be the message that normal case.
   It is
   unique with respect included to present the stream. The Reference number is used by
   the receiver applications with uniform capabilities for all
   stream types. Flooding only applies to detect streams with join authorization level
   #2.

   6 Failure Detection and discard duplicates. Each acknowledgment
   carries the Reference number Recovery

   6.1 Failure Detection

   The SCMP failure detection mechanism is based on two assumptions:

   1.      If a neighbor of the request being acknowledged.
   Reference zero (0) an ST agent is never used, up, and Reference numbers are assumed
   to be monotonically increasing with wraparound so that the older-than has been up without a
   disruption, and more-recent-than relations are well defined.

   o       LnkReference contains has not notified the Reference field ST agent of the request
   control message that caused this request control message to be
   created. It is used in situations where a single request leads to
   multiple responses from the same ST agent. Examples are CONNECT and
   CHANGE mes- sages problem with streams that are first acknowledged hop-by-hop and
   pass through both, then
   lead to an ACCEPT or REFUSE response from each target.

   o       SenderIPAddress is the 32-bit IP address of the network
   interface ST agent can assume that there has not been any
   problem with those streams.

   2.      A network through which an ST agent has routed a stream will notify
   the ST agent used to send if there is a problem that affects the stream data packets but
   does not affect the control message. This
   value changes each time packets.

   The purpose of the packet robustness protocol defined here is forwarded by an for ST agent (hop-
   by-hop).

   o       Checksum is agents to
   determine that the checksum streams through a neighbor have been broken by the
   failure of the control message. Because neighbor or the
   control messages are sent in packets intervening network. This protocol should
   detect the overwhelming majority of failures that may be delivered with bits
   in error, each control message must be checked before it is acted
   upon.

   o       ReasonCode is set to zero (0 = NoError) in most SCMP
   messages. Otherwise, it can be set to an appropriate value to
   indicate an error situation as defined in Section 10.3.7.

   o       OpCodeSpecificData contains any additional information that
   is associated with the control message. It depends on the specific
   control message and occur.  Once a failure
   is explained further below. In some response
   control messages, fields of zero (0) are included to allow the format
   to match that of the corresponding request message. The
   OpCodeSpecificData may also contain any of detected, the optional parameters
   defined recovery procedures described in Section 10.3.

   10.3  Common SCMP Elements

   Several fields and parameters (referred to generically as elements) 6.2 are common to initiated
   by the ST agents.

   6.1.1 Network Failures

   An ST agent can detect network failures by two mechanisms:

   o       the network can report a failure, or more PDUs.

   o       the ST agent can discover a failure by itself.

   They are described differ in detail here
   instead of repeating their description several times. In many cases, the presence amount of a parameter is optional. To permit the parameters information that an ST agent has available to
   be easily defined and parsed, each is identified with
   it in order to make a PCode byte
   that is followed by recovery decision. For example, a PBytes byte indicating the length of network may be able
   to report that reserved bandwidth has been lost and the
   parameter in bytes (including reason for the PCode, PByte, loss
   and any padding
   bytes). If may also report that connectivity to the length of neighboring ST agent remains
   intact. On the information is not a multiple of four
   (4) bytes, the parameter is padded other hand, an ST agent may discover that communication with one to three zero (0) bytes.
   PBytes is thus always a multiple of four (4). Parameters can be
   present in any order.

   10.3.1  ErroredPDU

   The ErroredPDU parameter (PCode = 1) is used for diagnostic purposes
   to encapsulate
   a received neighboring ST PDU agent has ceased because it has not received any traffic
   from that contained neighbor in some time period. If an error. It ST agent detects a failure, it
   may not be
   optionally included able to determine if the failure was in the ERROR message. Its use is primarily
   diagnostic.

   Figure 10: ErroredPDU

   o       PDUBytes indicates how many bytes of network while the PDUInError are
   actually present.

   o       PDUInError is
   neighbor remains available, or the PDU in error, beginning with neighbor has failed while the network
   remains intact.

   6.1.2 Detecting ST Header.

   10.3.2  FlowSpec

   The FlowSpec parameter (PCode = 2) Agents Failures

   Each ST agent periodically sends each neighbour with which it shares one or
   more streams a HELLO message. This message exchange is used in several messages between ST agents,
   not entities representing streams or applications. That is, an ST agent need
   only send a single HELLO message to
   convey the FlowSpec. The format a neighbour regardless of the FlowSpec field depends on the
   Version field. Two FlowSpec versions number of
   streams that flow between them. All ST agents (host as well as intermediate)
   must be implemented participate in the
   current this exchange. However, only ST version, FlowSpec #0 agents that share active
   streams can participate in this exchange and FlowSpec #7, see Section 8. Their
   format is described below.

   Figure 11: FlowSpec #0

   Figure 12: FlowSpec #7

   10.3.3  Group

   The Group parameter (PCode = 3) it is an optional argument used error to
   indicate that the stream is send a member HELLO
   message to a neighbour ST agent with no streams in the specified group.

   Figure 13: Group Parameter

   o       GroupUniqueID, GroupInitiatorIPAddress, and GroupCreationTime
   together form the GroupName field. They are allocated by the group
   name generator function, see Section 6.1.

   o       Relationship has the following format:

   Figure 14: Relationship Field

   The B, F, P, S bits correspond common, e.g. to Bandwidth, Fate, Path, and Subnet
   resources sharing, check
   whether it is active. STATUS messages can be used to poll status of
   neighbour ST agents, see Section 6.2. A value of 1 indicates 8.4.

   The HELLO message has two fields:

   o       a HelloTimer field that the
   relationship exists for this group. All combinations is in units of milliseconds modulo the four bits
   are allowed. Bits 0-11 of
           maximum for the Relationship field are reserved for
   future use size, and must be set to 0.

   o       N contains       a legal value only if the B-bit is set. It is the
   value of Restarted-bit specifying that the N parameter ST agent has been restarted
           recently.

   The HelloTimer must appear to be used as explained in Section 6.2.1.

   10.3.4  MulticastAddress

   The MulticastAddress parameter (PCode = 4) is an optional parameter
   that is used when setting up incremented every millisecond whether a network level multicast group, to
   communicate an IP and/or local network multicast address
   HELLO message is sent or not. The HelloTimer wraps around to zero after
   reaching the
   next-hop maximum value. Whenever an ST agents agent suffers a catastrophic
   event that should become members of the group, see
   Section 7.7.

   Figure 15:  MulticastAddress

   o       IPMulticastAddress is the 32-bit IP multicast address to be
   used to receive subsequent data packets for the stream.

   10.3.5  NextHopIPAddress

   The NextHopIPAddress parameter (PCode = 5) is an optional parameter
   of NOTIFY and contains the 32-bit IP address of a suggested next-hop
   ST agent.

   Figure 16:  NextHopIPAddress

   o        NextHopIPAddress is the 32-bit IP address of the suggested
   next-hop may result in it losing ST agent.

   10.3.6  Origin

   The Origin parameter (PCode = 6) is used state information, it must reset its
   HelloTimer to identify the next higher
   protocol, zero and must set the SAP being used in conjunction with that protocol.

   Figure 17: Origin

   o       NextPcol is an 8-bit field used in demultiplexing operations
   to identify the protocol to be used above ST. The values of NextPcol
   are Restarted-bit in the same number space as the IP header's Pro- tocol field and
   are consequently defined all HELLO messages sent
   in the Assigned Numbers RFC [RFC791].

   o       OriginSAPBytes specifies the length of following HelloTimerHoldDown seconds.

   If an ST agent receives a HELLO message that contains the OriginSAP,
   exclusive of any padding required to maintain 32-bit alignment.

   o       OriginSAP identifies Restarted-bit set,
   it must assume that the origin's SAP associated sending ST agent has lost its state. If it shares
   streams with the
   NextPcol protocol.

   Note that the 32-bit IP address of the neighbor, it must initiate stream origin is recovery activity, see
   Section 6.2. If it does not included
   in this parameter because share streams with that neighbor, it should not
   attempt to create one until that bit is always available as part of the no longer set. If an ST
   header.

   10.3.7  ReasonCode

   TBD: review ReasonCodes

   Several errors may occur during protocol processing. All ST error
   codes are taken agent
   receives a CONNECT message from a single number space. The currently defined
   values and their meaning neighbor whose Restarted-bit is presented in still set,
   it must respond with ERROR with the list below. Note that
   new error codes may be defined from time to time. All implementations
   are expected to handle new codes in a graceful manner. If an unknown appropriate ReasonCode (RestartRemote).
   If it receives a CONNECT message while its own Restarted-bit is encountered, set, it should be assumed to be fatal. The must
   respond with ERROR with the appropriate ReasonCode is an 8-bit field. Following values are defined:

   NoError 0       No error has occurred.

   ErrorUnknown    1       An error not contained in this list has been
   detected

   AcceptTimeout   2       An Accept (RestartLocal).

   Each ST stream has not been acknowledged.

   AccessDenied    3       Access denied.

   AckUnexpected   4       An unexpected ACK was received.

   ApplAbort       5       The application aborted a RecoveryTimeout value associated with it. This value is
   assigned by the stream
   abnormally.

   ApplDisconnect  6       The application closed origin and carried into the stream normally.

   AuthentFailed   7       The authentication function failed.

   CantGetResrc    8       Unable to acquire (additional) resources.

   CantRelResrc    9       Unable CONNECT message, see Section
   4.5.10.

   An ST agent must send HELLO messages to release excess resources.

   CksumBadCtl     10      Control PDU has a bad message checksum.

   CksumBadST      11      PDU has its neighbour with a bad period shorter
   than the smallest RecoveryTimeout of all the active streams that pass
   between the two ST Header checksum.

   DuplicateIgn    22      Control PDU is agents, regardless of direction. This period must be
   smaller by a duplicate and is being
   acknowledged.

   DuplicateTarget 23      Control PDU contains factor, called HelloLossFactor, which is at least as large as
   the greatest number of consecutive HELLO messages that could credibly be
   lost while the communication between the two ST agents is still viable.

   An ST agent may send simultaneous HELLO messages to all its neighbors at the
   rate necessary to support the smallest RecoveryTimeout of any active stream.
   Alternately, it may send HELLO messages to different neighbors independently
   at different rates corresponding to RecoveryTimeouts of individual streams.

   The ST agent that receives a HELLO message expects to receive at least one
   new HELLO message from a neighbor during the RecoveryTimeout of every active
   stream through that neighbor. It can detect duplicate target, or delayed HELLO
   messages by saving the HelloTimer field of the most recent valid HELLO
   message from that neighbor and comparing it with the HelloTimer field of
   incoming HELLO messages. It will only accept an attempt to add an existing target.

   FailureRecovery 24      A notification incoming HELLO message from
   that recovery is being
   attempted.

   FlowVerBad      25      Control PDU neighbor if it has a FlowSpec Version Number HelloTimer field that is greater than the most
   recent valid HELLO message by the time elapsed since that message was
   received plus twice the maximum likely delay variance from that neighbor.

   If the ST agent does not supported.

   GroupUnknown    26      Control PDU contains an unknown Group Name.

   SIDUnknown      29      Control PDU contains an unknown SID.

   InconsistGroup  31      An inconsistency has been detected with receive a valid HELLO message within the
   streams forming
   RecoveryTimeout of a group.

   IntfcFailure    32      A network interface failure has been
   detected.

   InvalidSender   34      Control PDU has an invalid SenderIPAddress
   field.

   InvalidTotByt   35      Control PDU stream, it must assume that the neighboring ST agent or
   the communication link between the two has an invalid TotalBytes field.

   LnkRefUnknown   36      Control PDU contains an unknown LnkReference.

   NameUnknown     37      Control PDU contains an unknown failed and it must initiate
   stream Name.

   NetworkFailure  38      A recovery activity, as described below in Section 6.2.

   6.2 Failure Recovery

   If an intermediate ST agent fails or a network failure has been detected.

   NoRouteToAgent  39      Cannot find or part of a route to network fails,
   the previous-hop ST agent and the various next-hop ST agents will discover
   the fact by the failure detection mechanism described in Section 6.1.

   The recovery of an ST agent.

   NoRouteToDest   40      Cannot find stream is a route relatively complex and time consuming
   effort because it is designed in a general manner to the destination.

   NoRouteToHost   41      Cannot find operate across a route large
   number of networks with diverse characteristics.  Therefore, it may require
   information to be distributed widely, and may require relatively long
   timers. On the other hand, since a host.

   NoRouteToNet    42      Cannot find network is a route to homogeneous system, failure
   recovery in the network may be a network.

   OpCodeUnknown   43      Control PDU has relatively faster and simpler operation.
   Therefore an invalid OpCode field.

   PCodeUnknown    44      Control PDU has ST agent that detects a parameter with an invalid
   PCode.

   ParmValueBad    45      Control PDU contains an invalid parameter
   value.

   ProtocolUnknown 46      Control PDU contains an unknown next-higher
   layer protocol identifier.

   ProtocolError   47      A protocol error was detected.

   RefUnknown      49 failure should attempt to fix the
   network failure before attempting recovery of the ST stream. If the stream
   that existed between two ST agents before the failure cannot be
   reconstructed by network recovery mechanisms alone, then the ST stream
   recovery mechanism must be invoked.

   If stream recovery is necessary, the different ST agents may need to perform
   different functions, depending on their relation to the failure:

   o       An ST agent that is a next-hop of a failure should first verify that
           there was a failure. It can do this using STATUS messages to
           query its upstream neighbor. If it cannot communicate with that
           neighbor, then it should first send a REFUSE message upstream
           with the appropriate ReasonCode (STAgentFailure) to the
           neighbor to speed up the failure recovery in case the hop is
           unidirectional, i.e., the neighbor can hear the ST agent but the
           ST agent cannot hear the neighbor. The ST agent detecting the
           failure must then send DISCONNECT messages with the same
           ReasonCode toward the targets. All downstream ST agents process
           this DISCONNECT message just like the DISCONNECT that tears
           down the stream. If recovery is successful, targets will receive
           new CONNECT messages.

   o       An ST agent that is the previous-hop before the failed component
           first verifies that there was a failure by querying the
           downstream neighbor using STATUS messages. If the neighbor has
           lost its state but is available, then the ST agent may try and
           reconstruct the stream, unless the NoRecovery option was
           selected, as explained below. If it cannot communicate with the
           next-hop, then the ST agent detecting the failure sends a
           DISCONNECT message with the appropriate ReasonCode
           (STAgentFailure) toward the affected targets. It does so to speed
           up failure recovery in case the communication may be
           unidirectional and this message might be delivered successfully.

   Based on the NoRecovery option, the ST agent that is the previous-hop before
   the failed component takes the following actions:

   o       If the NoRecovery option is selected, then the ST agent sends a
           REFUSE message with the appropriate ReasonCode (STAgentFailure)
           to the previous-hop. The TargetList in these messages contains
           all the targets that were reached through the broken branch. As
           discussed in Section 5.1.2, multiple REFUSE messages may be
           required if the PDU is too long for the MTU of the intervening
           network. The REFUSE message is propagated all the way to the ori-
           gin. The application at the origin can attempt recovery of the
           stream by sending a new CONNECT to the affected targets. For
           established streams, the new CONNECT will be treated by
           intermediate ST agents as an addition of new targets into the
           established stream.

   o       If the NoRecovery option is not selected, the ST agent can attempt
           recovery of the stream. It does so by issuing a new CONNECT
           message to the affected targets. If the ST agent cannot find new
           routes to some targets, or if the only route to some targets is
           through the previous-hop, then it sends one or more REFUSE
           messages to the previous-hop with the appropriate ReasonCode
           (CantRecover) specifying the affected targets in the TargetList.
           The previous-hop can then attempt recovery of the stream by
           issuing a CONNECT to those targets. If it cannot find an
           appropriate route, it will propagate the REFUSE message toward
           the origin.

   Regardless of which ST agent attempts recovery of a damaged stream, it will
   issue one or more CONNECT messages to the affected targets. These CONNECT
   messages are treated by intermediate ST agents as additions of new targets
   into the established stream. The FlowSpecs of the new CONNECT messages are
   the same as the ones contained in the most recent CONNECT or CHANGE messages
   that the ST agent had sent toward the affected targets when the stream was
   operational.

   Upon receiving an ACCEPT during the a stream recovery, the agent
   reconstructing the stream must ensure that the FlowSpec and other stream
   attributes (e.g. MaxMsgSize and RecoveryTimeout) of the re-established
   stream are equal to, or are less restrictive, than the pre-failure stream.
   If they are more restrictive, the recovery attempt must be aborted. If they
   are equal, or are less restrictive, then the recovery attempt is successful.
   When the attempt is a success, failure recovery related ACCEPTs are not
   forwarded upstream by the recovering agent.

   Any ST agent that decides that enough recovery attempts have been made, or
   that recovery attempts have no chance of succeeding, may indicate that no
   further attempts at recovery should be made. This is done by setting the
   N-bit in the REFUSE message, see Section 10.4.11.  This bit must be set by
   agents, including the target, that know that there is no chance of recovery
   succeeding. An ST agent that receives a REFUSE message with the N-bit set
   (1) will not attempt recovery, regardless of the NoRecovery option, and it
   will set the N-bit when propagating the REFUSE message upstream.

   6.2.1 Problems in Stream Recovery
   The reconstruction of a broken stream may not proceed smoothly. Since there
   may be some delay while the information concerning the failure is propagated
   throughout an internet, routing errors may occur for some time after a
   failure. As a result, the ST agent attempting the recovery may receive ERROR
   messages for the new CONNECTs that are caused by internet routing errors.
   The ST agent attempting the recovery should be prepared to resend CONNECTs
   before it succeeds in reconstructing the stream. If the failure partitions
   the internet and a new set of routes cannot be found to the targets, the
   REFUSE messages will eventually be propagated to the origin, which can then
   inform the application so it can decide whether to terminate or to continue
   to attempt recovery of the stream.

   The new CONNECT may at some point reach an ST agent downstream of the
   failure before the DISCONNECT does. In this case, the ST agent that receives
   the CONNECT is not yet aware that the stream has suffered a failure, and
   will interpret the new CONNECT as resulting from a routing failure. It will
   respond with an ERROR message with the appropriate ReasonCode
   (StreamExists). Since the timeout that the ST agents immediately preceding
   the failure and immediately following the failure are approximately the
   same, it is very likely that the remnants of the broken stream will soon be
   torn down by a DISCONNECT message with the appropriate ReasonCode
   ("failure"). Therefore, the ST agent that receives the ERROR message with
   ReasonCode (StreamExists) should retransmit the CONNECT message after the
   ToConnect timeout expires. If this fails again, the request will be retried
   for NConnect times. Only if it still fails will the ST agent send a REFUSE
   message with the appropriate ReasonCode (RouteLoop) to its previous-hop.
   This message will be propagated back to the ST agent that is attempting
   recovery of the damaged stream. That ST agent can issue a new CONNECT
   message if it so chooses. The REFUSE is matched to a CONNECT message created
   by a recovery operation through the LnkReference field in the CONNECT.

   ST agents that have propagated a CONNECT message and have received a REFUSE
   message should maintain this information for some period of time. If an ST
   agent receives a second CONNECT message for a target that recently resulted
   in a REFUSE, that ST agent may respond with a REFUSE immediately rather than
   attempting to propagate the CONNECT.  This has the effect of pruning the
   tree that is formed by the propagation of CONNECT messages to a target that
   is not reachable by the routes that are selected first. The tree will pass
   through any given ST agent only once, and the stream setup phase will be
   completed faster.

   If a CONNECT message reaches a target, the target should as efficiently as
   possible use the state that it has saved from before the stream failed
   during recovery of the stream. It will then issue an ACCEPT message toward
   the origin. The ACCEPT message will be intercepted by the ST agent that is
   attempting recovery of the damaged stream, if not the origin. If the
   FlowSpec contained in the ACCEPT specifies the same selection of parameters
   as were in effect before the failure, then the ST agent that is attempting
   recovery will not propagate the ACCEPT. If the selections of the parameters
   are different, then the ST agent that is attempting recovery will send the
   origin a NOTIFY message with the appropriate ReasonCode (FailureRecovery)
   that contains a FlowSpec that specifies the new parameter values. The origin
   may then have to change its data generation characteristics and the stream's
   parameters with a CHANGE message to use the newly recovered subtree.

   6.3 Stream Preemption

   As mentioned in Section 1.4.5, it is possible that the LRM decides to break
   a stream intentionally. This is called stream preemption.  Streams are
   expected to be preempted in order to free resources for a new stream which
   has a higher priority.

   If the LRM decides that it is necessary to preempt one or more of the stream
   traversing it, the decision on which streams have to be preempted has to be
   made. There are two ways for an application to influence such decision:

   1.      based on FlowSpec information. For instance, with the ST2+ FlowSpec,
   streams can be assigned a precedence value from 0 (least important) to 256
   (most important). This value is carried in the FlowSpec when the stream is
   setup, see Section 9.2, so that the LRM is informed about it.

   2.      with the group mechanism. An application may specify that a set of
   streams are related to each other and that they are all candidate for
   preemption if one of them gets preempted. It can be done by using the
   fate-sharing relationship defined in Section 7.1.2. This helps the LRM
   making a good choice when more than one stream have to be preempted, because
   it leads to breaking a single application as opposed to as many applications
   as the number of preempted streams.

   If the LRM preempts a stream, it must notify the local ST agent. The
   following actions are performed by the ST agent:

   o       The ST agent at the host where the stream was preempted sends
           DISCONNECT messages with the appropriate ReasonCode
           (StreamPreempted) toward the affected targets. It sends a REFUSE
           message with the appropriate ReasonCode (StreamPreempted) to the
           previous-hop.

   o       A previous-hop ST agent of the preempted stream acts as in case of
           failure recovery, see Section 6.2.

   o       A next-hop ST agent of the preempted stream acts as in case of
           failure recovery, see Section 6.2.

   Note that, as opposite to failure recovery, there is no need to verify that
   the failure actually occurred, because this is explicitly indicated by the
   ReasonCode (StreamPreempted).

   7 A Group of Streams

   There may be need to associate related streams. The group mechanism is
   simply an association technique that allows ST agents to identify the
   different streams that are to be associated.

   A group consists of a set of streams and a relationship. The set of streams
   may be empty. The relationship applies to all group members.  Each group is
   identified by a group name. The group name must be globally unique.

   Streams belong to the same group if they have the same GroupName in the
   GroupName field of the Group parameter, see Section 10.3.2. The relationship
   is defined by the Relationship field.  Group membership must be specified at
   stream creation time and persists for the whole stream lifetime. A single
   stream may belong to multiple groups.

   The ST agent that creates a new group is called group initiator. Any ST
   agent can be a group initiator. The initiator allocates the GroupName and
   the Relationship among group members.  The initiator may or may not be the
   origin of a stream belonging to the group. GroupName generation is described
   in Section 8.2.

   7.1 Basic Group Relationships

   This version of ST defines four basic group relationships. An ST2+
   implementation must support all four basic relationships. Adherence to
   specified relationships are usually best effort.  The basic relationships
   are described in detail below in Section 7.1.1 - Section 7.1.4.

   7.1.1 Bandwidth Sharing

   Streams associated with the same group share the same network bandwidth. The
   intent is to support applications such as audio conferences where, of all
   participants, only some are allowed to speak at one time. In such a
   scenario, global bandwidth utilization can be lowered by allocating only
   those resources that can be used at once, e.g. it is sufficient to reserve
   bandwidth for a small set of audio streams.

   The basic concept of a shared bandwidth group is that the LRM will allocate
   up to some specified multiplier of the most demanding stream that it knows
   about in the group. The LRM will allocate resources incrementally, as stream
   setup requests are received, until the total group requirements are
   satisfied. Subsequent setup requests will share the group's resources and
   will not need any additional resources allocated. The procedure will result
   in standard allocation where only one stream in a group traverses a host,
   and shared allocations where multiple streams traverse a host.

   To illustrate, let's call the multiplier mentioned above "N", and the most
   demanding stream that an agent knows about in a group Bmax. For an
   application that intends to allow three participants to speak at the same
   time, N has a value of three and each LRM will allocate for the group an
   amount of bandwidth up to 3*Bmax even when there are many more steams in the
   group. The LRM will reserve resources incrementally, per stream request,
   until N*Bmax resources are allocated. Each host may be traversed by a
   different set and number of streams all belonging to the same group.

   An ST agent receiving a stream request presents the LRM with all necessary
   group information, see also Section 4.5.2.2. If maximum bandwidth, N*Bmax,
   for the group has already been allocated and a new stream with a bandwidth
   demand less than Bmax is being established, the LRM won't allocate any
   further bandwidth.

   If there is less than N*Bmax resources allocated, the LRM will expand the
   resources allocated to the group by the amount requested in the new
   FlowSpec, up to N*Bmax resources. The LRM will update the FlowSpec based on
   what resources are available to the stream, but not the total resources
   allocated for the group.

   It should be noted that ST agents and LRMs become aware of a group's
   requirements only when the streams belonging to the group are created.  In
   case of the bandwidth sharing relationship, an application should attempt to
   establish the most demanding streams first to minimize stream setup efforts.
   If on the contrary the less demanding streams are built first, it will be
   always necessary to allocate additional bandwidth in consecutive steps as
   the most demanding streams are built. It is also up to the applications to
   coordinate their different FlowSpecs and decide upon an appropriate value
   for N.

   7.1.2 Fate Sharing

   Streams belonging to this group share the same fate. If a stream is deleted,
   the other members of the group are also deleted. This is intended to support
   stream preemption by indicating which streams are mutually related. If
   preemption of multiple streams is necessary, this information can be used by
   the LRM to delete a set of related streams, e.g. with impact on a single
   application, instead of making a random choice with the possible effect of
   interrupting several different applications. This attribute does not apply
   to normal stream shut down, i.e.  ReasonCode (ApplDisconnect). On normal
   disconnect, other streams belonging to such groups remain active.

   This relationship provides a hint on which streams should be preempted.
   Still, the LRM responsible for the preemption is not forced to behave
   accordingly, and other streams could be preempted first based on different
   criteria.

   7.1.3 Route Sharing

   Streams belonging to this group share the same paths as much as is possible.
   This can be desirable for several reasons, e.g. to exploit the same
   allocated resources or in the attempt to maintain the transmission order. An
   ST agent attempts to select the same path although the way this is
   implemented depends heavily on the routing algorithm which is used.

   If the routing algorithm is sophisticated enough, an ST agent can suggest
   that a stream is routed over an already established path.  Otherwise, it can
   ask the routing algorithm for a set of legal routes to the destination and
   check whether the desired path is included in those feasible.

   Route sharing is a hint to the routing algorithm used by ST. Failing to
   route a stream through a shared path should not prevent the creation of a
   new stream or result in the deletion of an existing stream.

   7.1.4 Subnet Resources Sharing

   This relationship provides a hint to the data link layer functions.  Streams
   belonging to this group may share the same MAC layer resources. As an
   example, the same MAC layer multicast address may be used for all the
   streams in a given group. This mechanism allows for a better utilization of
   MAC layer multicast addresses and it is especially useful when used with
   network adapters that offer a very small number of MAC layer multicast
   addresses.

   7.2 Relationships Orthogonality

   The four basic relationships, as they have been defined, are orthogonal.
   This means, any combinations of the basic relationships are allowed. For
   instance, let's consider an application that requires full-duplex service
   for a stream with multiple targets. Also, let's suppose that only N targets
   are allowed to send data back to the origin at the same time. In this
   scenario, all the reverse streams could belong to the same group. They could
   be sharing both the paths and the bandwidth attributes. The Path&Bandwidth
   sharing relationship is obtained from the basic set of relationships. This
   example is important because it shows how full-duplex service can be
   efficiently obtained in ST.

   8 Ancillary Functions

   Certain functions are required by ST host and intermediate agent
   implementations. Such functions are described in this section.

   8.1 Stream ID Generation

   The stream ID, or SID, is composed of 16-bit unique identifier and the
   stream origin's 32-bit IP address. Stream IDs must be globally unique.  The
   specific definition and format of the 16 -bit field is left to the
   implementor. This field is expected to have only local significance.

   An ST implementation has to provide a stream ID generator facility, so that
   an application or higher layer protocol can obtain a unique IDs from the ST
   layer. This is a mechanism for the application to request the allocation of
   stream ID that is independent of the request to create a stream. The Stream
   ID is used by the application or higher layer protocol when creating the
   streams.

   For instance, the following two functions could be made available:

   o       AllocateStreamID() -> result, StreamID

   o       ReleaseStreamID(StreamID) -> result

   8.2 Group Name Generator

   GroupName generation is similar to Stream ID generation. The GroupName
   includes a 16-bit unique identifier, a 32-bit creation timestamp, and a
   32-bit IP address. Group names are globally unique. A GroupName includes the
   creator's IP address, so this reduces a global uniqueness problem to a
   simple local problem. The specific definitions and formats of the 16-bit
   field and the 32-bit creation timestamp are left to the implementor. These
   fields must be locally unique, and only have local significance.

   An ST implementation has to provide a group name generator facility, so that
   an application or higher layer protocol can obtain a unique GroupName from
   the ST layer. This is a mechanism for the application to request the
   allocation of a GroupName that is independent of the request to create a
   stream. The GroupName is used by the application or higher layer protocol
   when creating the streams that are to be part of the group.

   For instance, the following two functions could be made available:

   o       AllocateGroupName() -> result, GroupName

   o       ReleaseGroupName(GroupName) -> result

   8.3 Checksum Computation

   The standard Internet checksum algorithm is used for ST: "The checksum field
   is the 16-bit one's complement of the one's complement sum of all 16-bit
   words in the header. For purposes of computing the checksum, the value of
   the checksum field is zero (0)." See [RFC1071], [RFC1141], and [RFC791] for
   suggestions for efficient checksum algorithms.

   8.4 Collecting Information From Neighbour ST Agent

   The STATUS message can be used to collect information about neighbor ST
   agents, streams the neighbour supports, and specific targets of streams the
   neighbour supports. An agent receiving a STATUS message provides the
   requested information via a STATUS-RESPONSE message.

   The STATUS message can be used to collect different information from a
   neighbour. It can be used to:

   o       identify a neighbour is ST capable. If an ST agent wishes to check
           if a neighbour is ST capable, it should generate a STATUS message
           with an SID which has all its fields set to zero. An agent
           receiving a STATUS message with such SID should answer with a
           STATUS-RESPONSE containing the same SID, and no other stream
           information. The receiving ST agent must answer as soon as
           possible to aid in Round Trip Time estimation, see Section 8.4;

   o       obtain information on a particular stream. If an ST agent wishes to
           check a neighbour's general information related to a specific
           stream, it should generate a STATUS message containing the
           stream's SID. An ST agent receiving such a message, will first
           check to see if the stream is known. If not known, the receiving
           ST agent sends a STATUS-RESPONSE containing the same SID, and
           no other stream information. If the stream is known, the
           receiving ST agent sends a STATUS-RESPONSE containing the
           stream's SID, IPHops, FlowSpec, group membership (if any), and as
           many targets as can be included in a single message as limited by
           MTU, see Section 5.1.2. Note that all targets may not be included
           in a response to a request for general stream information. If
           information on a specific target in a stream is desired, the
           mechanism described next should be used.

   o       obtain information on particular targets in a stream. If an ST agent
           wishes to check a neighbour's information related to on or more
           specific targets of a specific stream, it should generate a
           STATUS message containing the stream's SID and a TargetList
           parameter listing the relevant targets. An ST agent receiving
           such a message, will first check to see if the stream and target
           are known. If the stream is not known, the agent follows the
           process described above. If both the stream and targets are
           known, the agent responds with STATUS-RESPONSE containing the
           stream's SID, IPHops, FlowSpec, group membership (if any), and
           the requested targets that are known. If the stream is known but
           the target is not, the agent responds with a STATUS-RESPONSE
           containing the stream's SID, IPHops, FlowSpec, group membership
           (if any), but no targets.

   The specific formats for STATUS and STATUS-RESPONSE messages are defined in
   Section 10.4.12 and Section 10.4.13.

   8.5 Round Trip Time Estimation

   SCMP is made reliable through use of retransmission when an expected
   acknowledgment is not received in a timely manner. Timeout and
   retransmission algorithm is implementation dependent and it is outside the
   scope of this document. However, it must be reasonable enough not to cause
   excessive retransmission of SCMP message while maintain the robustness of
   the protocol. Algorithms on this subject are described in [WoHD95],
   [Jaco88], [KaPa87].

   Most existing algorithms are based on an estimation of the Round Trip Time
   (RTT) between two hosts. With SCMP, if an ST agent wishes to have an
   estimate of the RTT to and from a neighbor, it should generate a STATUS
   message with an SID which has all its fields set to zero.  An ST agent
   receiving a STATUS message with such SID should immediately answer with a
   STATUS-RESPONSE message containing the same SID, and no other stream
   information. The time interval between the send and receive operations can
   be used as an estimate of the RTT to and from the neighbor.

   8.6 Network MTU Discovery

   At connection setup, the application at the origin asks the local ST agent
   to create streams with certain QoS requirements. The local ST agent fills
   out its network MTU value in the MaxMsgSize parameter in the CONNECT message
   and forwards it to the next-hop ST agents.  Each ST agent in the path checks
   to see if its network MTU is smaller than the one specified in the CONNECT
   message and, if it is, the ST agent updates the MaxMsgSize in the CONNECT
   message to it's network MTU. If the target application decides to accept the
   stream, the ST agent at the target copies the MTU value in the CONNECT
   message to appropriate field in the ACCEPT message and sends it back to the
   application at the origin. The MaxMsgSize field in the ACCEPT message is the
   minimum MTU of network to that target. If the application has multiple
   targets then the minimum MTU of the stream is the smallest MaxMsgSize
   received from all the ACCEPT messages. It is the responsibility of the
   application to segment its PDUs according to the minimum MaxMsgSize of the
   stream since no data fragmentation is supported during the data transfer
   phase.

   8.7 IP Encapsulation of ST

   ST packets may be encapsulated in IP to allow them to pass through routers
   that don't support the ST Protocol. Of course, ST resource management is
   precluded over such a path, and packet overhead is increased by
   encapsulation, but if the performance is reasonably predictable this may be
   better than not communicating at all.

   IP-encapsulated ST packets begin with a normal IP header. Most fields of the
   IP header should be filled in according to the same rules that apply to any
   other IP packet. Three fields of special interest are:

   o       Protocol is 5 to indicate an ST packet is enclosed, as opposed to
           TCP or UDP, for example.  The assignment of protocol 5 to ST is
           an arranged coincidence with the assignment of IP Version 5 to ST
           [RFC1190].

   o       Destination Address is that of the next-hop ST agent. This may or
           may not be the target of the ST stream. There may be an
           intermediate ST agent to which the packet should be routed to
           take advantage of service guarantees on the path past that agent.
           Such an intermediate agent would not be on a directly-connected
           network (or else IP encapsulation wouldn't be needed), so it
           would probably not be listed in the normal routing table.
           Additional routing mechanisms, not defined here, will be required
           to learn about such agents.

   o       Type-of-Service may be set to an appropriate value for the service
           being requested (usually low delay, high throughput, normal
           reliability).  This feature is not implemented uniformly in the
           Internet, so its use can't be precisely defined here.

   IP encapsulation adds little difficulty for the ST agent that receives the
   packet. However, when IP encapsulation is performed it must be done in both
   directions. To process the encapsulated IP message, the ST agents simply
   remove the IP header and proceed with ST header as usual.

   The more difficult part is during setup, when the ST agent must decide
   whether or not to encapsulate. If the next-hop ST agent is on a remote
   network and the route to that network is through a router that supports IP
   but not ST, then encapsulation is required. The ST agents make encapsulation
   decision based on information provided by routing function to indicate
   whether the routers in the path support ST.

   On forwarding, the (mostly constant) IP Header must be inserted and the IP
   checksum appropriately updated.

   Applications are informed about the number of IP hops traversed on the way
   to the targets. The IPHops field value of the CONNECT message, see Section
   10.4.4, is incremented at this purpose in case an ST agent uses IP
   encapsulation to reach its next-hop. The value is then returned to the
   origin in the IPHops field of the ACCEPT message, Section 10.4.1.

   8.8 IP Multicasting

   If an ST agent must use IP encapsulation to reach multiple next-hops toward
   different targets, then either the packet must be replicated for
   transmission to each next-hop, or IP multicasting may be used if it is
   implemented in the next-hop ST agents and in the intervening IP routers.

   When the stream is established, the collection of next-hop ST agents must be
   set up as an IP multicast group. The ST agent must allocate appropriate IP
   multicast address (see Section 10.3.3) and fill that address in the
   IPMulticastAddress field of the CONNECT message. The IP multicast address in
   the CONNECT message is used to inform the next-hop ST agents that they
   should join the multicast group to receive subsequent PDUs. Obviously, the
   CONNECT message itself must be sent using unicast. The next-hop ST agents
   must be able to receive on the specified multicast address in order to
   accept the connection.

   If the next-hop ST agent can not receive on the specified multicast address,
   it sends a REFUSE message with ReasonCode (BadMcastAddress).  Upon receiving
   the REFUSE, the upstream agent can choose to retry with a different
   multicast address. Alternatively, it can choose to loose the efficiency of
   multicast and use unicast delivery.

   The following permanent IP multicast addresses have been assigned to ST:

           224.0.0.7 All ST routers
           224.0.0.8 All ST hosts

   In addition, a block of transient IP multicast addresses, 224.1.0.0 -
   224.1.255.255, has been allocated for ST multicast groups. For instance, the
   following two functions could be made available:

   o       AllocateMcastAddr() -> result, McastAddr

   o       ListenMcastAddr(McastAddr) -> result

   o       ReleaseMcastAddr(McastAddr) -> result

   9 The ST2 Flow Specification

   This section defines the ST2 flow specification. The flow specification
   contains the user application requirements in terms of quality of service.
   Its contents are transparent to the setup protocol. The setup protocol
   carries the flow specification as part of the FlowSpec parameter, which is
   described in Section 10.3.1.

   ST2 is not dependent on a particular flow specification format and it is
   expected that other versions of the flow specification will be needed in the
   future. Different flow specification formats are distinguished by the value
   of the Version field of the FlowSpec parameter, see Section 10.3.1. A single
   stream is always associated with a single flow specification format, i.e.

   the Version field is consistent throughout the whole stream. The following
   Version field values are defined:

   0 - Null FlowSpec       /* must be supported */
   1 - ST Version 1
   2 - ST Version 1.5
   3 - RFC 1190 FlowSpec
   4 - HeiTS FlowSpec
   5 - BerKom FlowSpec
   6 - RFC 1363 FlowSpec
   7 - ST2+ FlowSpec       /* must be supported */

   FlowSpecs version #0 and #7 have to be supported by ST2+ implementations.
   Version numbers in the range 1-6 indicate flow specifications are currently
   used in existing ST2 implementations.  Values in the 128-256 range are
   reserved for private and experimental use.

   9.1 FlowSpec Version #0 - (Null FlowSpec)

   The flow specification identified by a #0 value of the Version field is
   called the Null FlowSpec.  This flow specification causes no resources to be
   allocated. It is ignored by the LRMs. Its contents are never updated. Stream
   setup takes place in the usual way leading to successful stream
   establishment, but no resources are actually reserved.

   The purpose of the Null FlowSpec is that of facilitating interoperability
   tests by allowing streams to be built without actually allocating the
   correspondent amount of resources. The Null FlowSpec may also be used for
   testing and debugging purposes.

   The Null FlowSpec comprises the 4-byte FlowSpec parameter only, see Section
   10.3.1. The third byte (Version field) must be set to 0.

   9.2 FlowSpec Version #7 - ST2+ FlowSpec

   The flow specification identified by a #7 value of the Version field is the
   ST2+ FlowSpec, to be used in the current version of ST2. It allows the user
   applications to express their real-time requirements in the form of a QoS
   class, precedence, and 3 basic QoS parameters:

   o       message size,

   o       message rate,

   o       end-to-end delay.

   The QoS class indicates what kind of QoS guarantees are expected by the
   application, e.g. strict guarantees or predictive, see Section 9.2.1. QoS
   parameters are expressed via a set of values:

   o       the "desired" values indicate the QoS desired by the application.
           These values are assigned by the application and never modified by
           the LRM.

   o       the "limit" values indicate the lowest QoS the application is
           willing to accept. These values are also assigned by the
           application and never modified by the LRM.

   o       the "actual" values indicate the QoS that the system is able to
           provide. They are updated by the LRM at each node. The "actual"
           values are always bounded by the "limit" and "desired" values.

   9.2.1 QoS Classes

   Two QoS classes are defined:

   1 - QOS_PREDICTIVE      /* QoSClass field value = 0x01, must be supported*/

   2 - QOS_GUARANTEED      /* QoSClass field value = 0x10, optional */

   o       The QOS_PREDICTIVE class implies that the negotiated QoS may be
           violated for short time intervals during the data transfer. An
           application has to provide values that take into account the
           average case, e.g. the "desired" message rate is the average rate
           for the transmission.  Reservations are done for the average
           case as opposite to the peak case required by the QOS_GUARANTEED
           service class. This QoS class must be supported by all
           implementations.

   o       The QOS_GUARANTEED class implies that the negotiated QoS for the
           stream is never violated during the data transfer. An
           application has to provide values that take into account the
           worst possible case, e.g. the "desired" message rate is the peak
           rate for the transmission.  As a result, sufficient resources to
           handle the peak rate are reserved. This strategy may lead to
           overbooking of resources, but it provides strict real-time
           guarantees. Support of this QoS class is optional.

   If a LRM that doesn't support class QOS_GUARANTEED receives a FlowSpec
   containing QOS_GUARANTEED class, it informs the local ST agent. The ST agent
   may try different paths or delete the correspondent portion of the stream as
   described in Section 5.5.3, i.e.  ReasonCode (FlowSpecError).

   9.2.2 Precedence

   Precedence is the importance of the connection being established. Zero
   represents the lowest precedence. In general, the distinction between
   precedence and priority is that precedence specifies streams that are
   permitted to take previously committed resources from another stream, while
   priority identifies those PDUs that a stream is most willing to have
   dropped.

   9.2.3 Maximum Data Size

   This parameter is expressed in bytes. It represents the maximum amount of
   data, excluding ST and other headers, allowed to be sent in a messages as
   part of the stream. The LRM first checks whether it is possible to get the
   value desired by the application (DesMaxSize). If not, it updates the actual
   value (ActMaxSize) with the available size unless this value is inferior to
   the minimum allowed by the application (LimitMaxSize), in which case it
   informs the local ST agent that it is not possible to build the stream along
   this path.

   9.2.4 Message Rate

   This parameter is expressed in messages/seconds. It represents the
   transmission rate for the stream. The LRM first checks whether it is
   possible to get the value desired by the application (DesRate). If not, it
   updates the actual value (ActRate) with the available rate unless this value
   is inferior to the minimum allowed by the application (LimitRate), in which
   case it informs the local ST agent that it is not possible to build the
   stream along this path.

   9.2.5 Delay and Delay Jitter

   The delay parameter is expressed in milliseconds. It represents the maximum
   end-to-end delay for the stream. The LRM first checks whether it is possible
   to get the value desired by the application (DesMaxDelay). If not, it
   updates the actual value (ActMaxDelay) with the available delay unless this
   value is greater than the maximum delay allowed by the application
   (LimitMaxDelay), in which case it informs the local ST agent that it is not
   possible to build the stream along this path.

   The LRM also updates at each node the MinDelay field by incrementing it by
   the minimum possible delay to the next-hop. Information on the minimum
   possible delay allows to calculate the maximum end-to-end delay range, i.e.
   the time interval in which a data packet can be received. This interval
   should not exceed the DesMaxDelayRange value indicated by the application.
   The maximum end-to-end delay range is an upper bound to the delay jitter.

   9.2.6 ST2+ FlowSpec Format

   The ST2+ FlowSpec has the following format:

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |    QosClass |    Precedence   |            0(unused)          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                             DesRate                           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                            LimitRate                          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                             ActRate                           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            DesMaxSize         |           LimitMaxSize        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            ActMaxSize         |           DesMaxDelay         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            LimitMaxDelay      |           ActMaxDelay         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            DesMaxDelayRange   |           ActMinDelay         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Figure 9: The ST2+ FlowSpec.

   The LRM modifies only "actual" fields, i.e. those beginning with "Act". The
   user application assignees values to all other fields.

   o       QoSClass indicates which of the two defined classes of service
           applies. The two classes are: QOS_PREDICTIVE (QoSClass = 1) and
           QOS_GUARANTEED (QoSClass = 2).

   o       Precedence indicates the stream's precedence. Zero represents the
           lowest precedence.

   o       DesRate is the desired transmission rate for the stream in
           messages/second. This field is set by the origin and is not
           modified by intermediate agents.

   o       LimitRate is the minimum acceptable transmission rate in
           messages/second. This field is set by the origin and is not
           modified by intermediate agents.

   o       ActRate is the actual transmission rate allocated for the stream in
           messages/second. Each agent updates this field with the available
           rate unless this value is less than LimitRate, in which case a
           REFUSE is generated.

   o       DesMaxSize is the desired maximum data size in bytes that will be
           sent in a message in the stream. This field is set by the origin.

   o       LimitMaxSize is the minimum acceptable data size in bytes.  This
           field is set by the origin

   o       ActMaxSize is the actual maximum data size that may be sent in a
           message in the stream.  This field is updated by each agent based
           on MTU and available resources. If available maximum size is
           less than LimitMaxSize, the connection must be refused

   o       DesMaxDelay is the desired maximum end-to-end delay for the stream
           in milliseconds. This field is set by the origin

   o       LimitMaxDelay is the upper-bound of acceptable end-to-end delay
           for the stream in milliseconds. This field is set by the origin.

   o       ActMaxDelay is the maximum end-to-end delay that will be seen by
           data in the stream. Each ST agent adds to this field the maximum
           delay that will be introduced by the agent, including transmission
           time to the next-hop ST agent. If the actual maximum exceeds
           LimitMaxDelay, then the connection is refused.

   o       DesMaxDelayRange is the desired maximum delay range that may be
           encountered end-to-end by stream data in milliseconds. This value
           is set by the origin.

   o       ActMinDelay is the actual minimum end-to-end delay that will be
           encountered by stream data in milliseconds. Each ST agent adds to
           this field the minimum delay that will be introduced by the agent,
           including transmission time to the next-hop ST agent. The delay
           range for the stream can be calculated from the actual maximum and
           minimum delay fields. It is expected that the range will be
           important to some applications.
   10  ST2 Protocol Data Units Specification

   10.1  Data PDU

   IP and ST packets can be distinguished by the IP Version Number field, i.e.
   the first four (4) bits of the packet; IP currently uses a value of 4, while
   ST has been assigned the value 5 (see [RFC791]). There is no requirement for
   compatibility between IP and ST packet headers beyond the first four bits.

   The ST PDUs sent between ST agents consist of an ST Header encapsulating
   either a higher layer PDU or an ST Control Message. Data packets are
   distinguished from control messages via the D-bit (bit 8) in the ST header.

   The ST Header also includes an ST Version Number, a total length field, a
   header checksum, a unique id, and the stream origin 32-bit IP address. The
   unique id and the stream origin 32-bit IP address form the stream id (SID).
   This is shown in Figure 10. Please refer to Section 10.6 for an explanation
   of the notation.

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  ST=5 | Ver=3 |D| Pri |   0   |            TotalBytes         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |          HeaderChecksum       |            UniqueID           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                         OriginIPAddress                       |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                               Figure 10: ST Header

   o       ST is the IP Version Number assigned to identify ST packets. The
           value for ST is 5.

   o       Ver is the ST Version Number. The value for the current ST2+ version
           is 3.

   o       D (bit 8) is set to 1 in all ST data packets and to 0 in all SCMP
           control messages.

   o       Pri (bits 9-11) is the packet-drop priority field with zero (0)
           being lowest priority and seven the highest. The field is to be
           used as described in Section 3.2.2.

   o       TotalBytes is the length, in bytes, of the entire ST packet, it
           includes the ST Header but does not include any local network
           headers or trailers. In general, all length fields in the ST
           Protocol are in units of bytes.

   o       HeaderChecksum covers only the ST Header (12 bytes). The ST Protocol
           uses 16-bit checksums here in the ST Header and in each Control
           Message. For checksum computation, see Section 8.3.

   o       UniqueID is the first element of the stream ID (SID). It is locally
           unique at the stream origin, see Section 8.1.

   o       OriginIPAddress is the second element of the SID. It is the 32-bit
           IP address of the stream origin, see Section 8.1.

   Bits 12-15 must be set to zero (0) in the current ST version and are
   reserved for future use, e.g., as described in [WoHD95].

   10.1.1 ST Data Packets

   ST packets whose D-bit is non-zero are data packets. Their interpretation is
   a matter for the higher layer protocols and consequently is not specified
   here. The data packets are not protected by an ST checksum and will be
   delivered to the higher layer protocol even with errors. ST agents will not
   pass data packets over a new hop whose setup is not complete.

   10.2 Control PDUs

   SCMP control messages are exchanged between neighbor ST agents using a D-bit
   of zero (0).  The control protocol follows a request-response model with all
   requests expecting responses.  Retransmission after timeout (see Section
   4.3) 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 (see Section 5.1.2). All control messages have the
   following format

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  OpCode       |     Options   |           TotalBytes          |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |          Reference            |          LnkReference         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                         SenderIPAddress                       |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |            Checksum           |            ReasonCode         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        :                      OpCodeSpecificData                       :
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 11: ST Control Message Format

   o       OpCode identifies the type of control message.

   o       Options is used to convey OpCode-specific variations for a control
           message.

   o       TotalBytes is the length of the control message, in bytes, including
           all OpCode specific fields and optional parameters. The value is
           always divisible by four (4).

   o       Reference is a transaction number. Each sender of a request control
           message assigns a Reference number to the message that is unique
           with respect to the stream. The Reference number is used by the
           receiver to detect and discard duplicates. Each acknowledgment
           carries the Reference number of the request being acknowledged.
           Reference zero (0) is never used, and Reference numbers are
           assumed to be monotonically increasing with wraparound so that the
           older-than and more-recent-than relations are well defined.

   o       LnkReference contains the Reference field of the request control
           message that caused this request control message to be created. It
           is used in situations where a single request leads to multiple
           responses from the same ST agent. Examples are CONNECT and CHANGE
           messages that are first acknowledged hop-by-hop and then lead to
           an ACCEPT or REFUSE response from each target.

   o       SenderIPAddress is the 32-bit IP address of the network interface
           that the ST agent used to send the control message. This value
           changes each time the packet is forwarded by an ST agent
           (hop-by-hop).

   o       Checksum is the checksum of the control message. Because the control
           messages are sent in packets that may be delivered with bits in
           error, each control message must be checked before it is acted
           upon.

   o       ReasonCode is set to zero (0 = NoError) in most SCMP messages.
           Otherwise, it can be set to an appropriate value to indicate an
           error situation as defined in Section 10.5.3.

   o       OpCodeSpecificData contains any additional information that is
           associated with the control message. It depends on the specific
           control message and is explained further below. In some response
           control messages, fields of zero (0) are included to allow the
           format to match that of the corresponding request message. The
           OpCodeSpecificData may also contain any of the optional parameters
           defined in Section 10.3.

   10.3 Common SCMP Elements

   Several fields and parameters (referred to generically as elements) are
   common to two or more PDUs. They are described in detail here instead of
   repeating their description several times. In many cases, the presence of a
   parameter is optional. To permit the parameters to be easily defined and
   parsed, each is identified with a PCode byte that is followed by a PBytes
   byte indicating the length of the parameter in bytes (including the PCode,
   PByte, and any padding bytes).  If the length of the information is not a
   multiple of four (4) bytes, the parameter is padded with one to three zero
   (0) bytes. PBytes is thus always a multiple of four (4). Parameters can be
   present in any order.

   10.3.1 FlowSpec

   The FlowSpec parameter (PCode = 1) is used in several SCMP messages to
   convey the ST2 flow specification. The FlowSpec parameter has the following
   format:

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |   PCode = 1   |    PBytes     |   Version     |       0       |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        :                        FlowSpec detail                        :
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                          Figure 12: FlowSpec Parameter

   o       the Version field contains the FlowSpec version.

   o       the FlowSpec detail field contains the flow specification and it is
           transparent to the ST agent.  It is the data structure to be
           passed to the LRM. It must be 4-byte aligned.

   The Null FlowSpec, see Section 9.1, has no FlowSpec detail field. PBytes is
   set to four (4), and Version is set to zero (0). The ST2+ FlowSpec, see
   Section 9.2, is a 32-byte data structure.  PBytes is set to 36, and Version
   is set to seven (7).

   10.3.2 Group

   The Group parameter (PCode = 2) is an optional argument used to indicate
   that the stream is a member in the specified group.

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  PCode = 2    |   PBytes = 16 |           GroupUniqueID       |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                        GroupCreationTime                      |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                     GroupInitiatorIPAddress                   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |            Relationship       |                 N             |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            Figure 13: Group Parameter

   o       GroupUniqueID, GroupInitiatorIPAddress, and GroupCreationTime
           together form the GroupName field. They are allocated by the group
           name generator function, see Section 8.2.  GroupUniqueID and
           GroupCreationTime are implementation specific and have only local
           definitions.

   o       Relationship has the following format:

                                            0
                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
                       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                       |    0 (unused)         |S|P|F|B|
                       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                          Figure 14: Relationship Field

   The B, F, P, S bits correspond to Bandwidth, Fate, Path, and Subnet
   resources sharing, see Section 7. A value of 1 indicates that the
   relationship exists for this group. All combinations of the four bits are
   allowed. Bits 0-11 of the Relationship field are reserved for future use and
   must be set to 0.

   o       N contains a legal value only if the B-bit is set. It is the value
           of the N parameter to be used as explained in Section 7.1.1.

   10.3.3 MulticastAddress

   The MulticastAddress parameter (PCode = 3) is an optional parameter that is
   used when using IP encapsulation and setting up an IP multicast group. This
   parameter is used to communicate the desired IP multicast address to
   next-hop ST agents that should become members of the group, see Section 8.8.
         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  PCode = 3    |   PBytes = 8  |                0              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                        IPMulticastAddress                     |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Figure 15: MulticastAddress

   o       IPMulticastAddress is the 32-bit IP multicast address to be used to
           receive data packets for the stream.

   10.3.4 Origin

   The Origin parameter (PCode = 4) is used to identify the next higher
   protocol, and the SAP being used in conjunction with that protocol.

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  PCode = 4    |   PBytes      | NextPcol      |OriginSAPBytes |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        :                OriginSAP                      :     Padding   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                                Figure 16: Origin

   o       NextPcol is an 8-bit field used in demultiplexing operations to
           identify the protocol to be used above ST. The values of NextPcol
           are in the same number space as the IP header's Protocol field and
           are consequently defined in the Assigned Numbers RFC [RFC1060].

   o       OriginSAPBytes specifies the length of the OriginSAP, exclusive of
           any padding required to maintain 32-bit alignment.

   o       OriginSAP identifies the origin's SAP associated with the NextPcol
           protocol.

   Note that the 32-bit IP address of the stream origin is not included in this
   parameter because it is always available as part of the ST header.

   10.3.5 RecordRoute

   The RecordRoute parameter (PCode = 5) is used to request that the route
   between the origin and a target be recorded and delivered to the user
   application. The ST agent at the origin (or target) including this
   parameter, has to determine the parameter's length, indicated by the PBytes
   field.  ST agents processing messages containing this parameter add their
   receiving IP address in the position indicated by the FreeOffset field,
   space permitting. If no space is available, the parameter is passed
   unchanged. When included by the origin, all agents between the origin and
   the target add their IP addresses and this information is made available
   to the application at the target.  When included by the target, all agents
   between the target and the origin add their IP addresses and this
   information is made available to the application at the origin.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |   PCode = 5   |     PBytes    |       0       |  FreeOffset   |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                          IP Address 1                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                              ...                              :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                          IP Address N                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Figure 17: RecordRoute

   o       PBytes is the length of the parameter in bytes. Length is determined
           by the agent (target or origin) that first introduces the
           parameter. Once set, the length of the parameter remains
           unchanged.

   o       FreeOffset indicates the offset, relative to the start of the
           parameter, for the next IP address to be recorded. When the
           FreeOffset is greater than, or equal to, PBytes the RecordRoute
           parameter is full.

   o       IP Address is filled in, space permitting, by each ST agent
           processing this parameter.

   10.3.6 Target and TargetList

   Several control messages use a parameter called TargetList (PCode = 6),
   which contains information about the targets to which the message
   pertains. For each Target in the TargetList, the information includes the
   32-bit IP address of the target, the SAP applicable to the next higher layer
   protocol, and the length of the SAP (SAPBytes). Consequently, a Target
   structure can be of variable length. Each entry has the format shown in
   Figure 18.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Target IP Address                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  TargetBytes  |  SAPBytes     |     SAP       :    Padding    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                             Figure 18: Target

   o       TargetIPAddress is the 32-bit IP Address of the Target.

   o       TargetBytes is the length of the Target structure, beginning with
           the TargetIPAddress.

   o       SAPBytes is the length of the SAP, excluding any padding required to
           maintain 32-bit alignment.

   o       SAP may be longer than 2 bytes and it includes a padding when
           required. There would be no padding required for SAPs with lengths
           of 2, 6, 10, etc., bytes.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  PCode = 6    |   PBytes      |           TargetCount = N     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                           Target 1                            |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                               :                               :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                           Target N                            |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Figure 19: TargetList

   10.3.7 UserData

   The UserData parameter (PCode = 7) is an optional parameter that may be used
   by the next higher protocol or an application to convey arbitrary
   information to its peers. This parameter is propagated in some control
   messages and its contents have no significance to ST agents. Note that since
   the size of control messages is limited by the smallest MTU in the path to
   the targets, the maximum size of this parameter cannot be specified a
   priori. If the size of this parameter causes a message to exceed the network
   MTU, an ST agent behaves as described in Section 5.1.2. The parameter must
   be padded to a multiple of 32 bits.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  PCode = 7    |   PBytes      |           UserBytes           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                      UserInfo                 :   Padding     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            Figure 20: UserData

   o       UserBytes specifies the number of valid UserInfo bytes.

   o       UserInfo is arbitrary data meaningful to the next higher protocol
           layer or application.

   10.3.8 Handling of Undefined Parameters

   An ST agent must be able to handle all parameters listed above. To support
   possible future uses, parameters with unknown PCodes must also be supported.
   If an agent receives a message containing a parameter with an unknown
   Pcode value, the agent should handle the parameter as if it was a UserData
   parameter. That is, the contents of the parameter should be ignored, and the
   message should be propagated along with the related control message.

   10.4 ST Control Message PDUs

   ST Control messages are described in the following section. Please refer to
   Section 10.6 for an explanation of the notation.

   10.4.1 ACCEPT

   ACCEPT (OpCode = 1) is issued by a target as a positive response to a
   CONNECT message. It implies that the target is prepared to accept data from
   the origin along the stream that was established by the CONNECT. ACCEPT is
   also issued as a positive response to a CHANGE message. It implies that
   the target accepts the proposed stream modification.

   ACCEPT is relayed by the ST agents from the target to the origin along the
   path established by CONNECT (or CHANGE) but in the reverse direction. ACCEPT
   must be acknowledged with ACK at each hop.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 1   |      0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |         LnkReference          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |          MaxMsgSize           |          RecoveryTimeout      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                      StreamCreationTime                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |   IPHops      |                        0                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           FlowSpec                            :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           TargetList                          :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           RecordRoute                         :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           UserData                            :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 21: ACCEPT Control Message

   o       Reference contains a number assigned by the ST agent sending ACCEPT
           for use in the acknowledging ACK.

   o       LnkReference is the Reference number from the corresponding CONNECT
           (or CHANGE)

   o       MaxMsgSize indicates the smallest MTU along the path traversed by
           the stream. This field is only set when responding to a CONNECT
           request.

   o       RecoveryTimeout is the nominal number of milliseconds that the
           application is willing to wait for a failed system component to be
           detected and any corrective action to be taken. This field is only
           set when responding to a CONNECT request.

   o       StreamCreationTime is the 32-bits system dependent timestamp
           generated by the ST agent issuing the CONNECT.

   o       IPHops is the number of IP encapsulated hops traversed by the
           stream. This field is set to zero by the origin, and is
           incremented at each IP encapsulating agent.

   10.4.2 ACK

   ACK (OpCode = 2) is used to acknowledge a request. The ACK message is not
   propagated beyond the previous-hop or next-hop ST agent.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 2   |     0         |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Reference               |           LnkReference = 0    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Checksum                |           ReasonCode          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 22: ACK Control Message

   o       Reference is the Reference number of the control message being
           acknowledged.

   o       ReasonCode is usually NoError, but other possibilities exist, e.g.,
           DuplicateIgn.

   10.4.3 CHANGE

   CHANGE (OpCode = 3) is used to change the FlowSpec of an established stream.
   The CHANGE message is processed similarly to CONNECT, except that it travels
   along the path of an established stream. CHANGE must be propagated until it
   reaches the related stream's targets. CHANGE must be acknowledged with ACK
   at each hop.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 3   |G|I|     0     |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           Reference           |          LnkReference = 0     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        SenderIPAddress                        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                            FlowSpec                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           TargetList                          :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           RecordRoute                         :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                            UserData                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 23: CHANGE Control Message

   o       G (bit 8) is used to request a global, stream-wide change; the
           TargetList parameter may be omitted when the G bit is specified.

   o       I (bit 7) is used to indicate that the LRM are permitted to risk and
           break the stream in the process of trying to satisfy the requested
           change.

   o       Reference contains a number assigned by the ST agent sending CHANGE
           for use in the acknowledging ACK.

   10.4.4 CONNECT

   CONNECT (OpCode = 4) requests the setup of a new stream or an addition to or
   recovery of an existing stream. Only the origin can issue the initial set of
   CONNECTs to setup a stream, and the first CONNECT to each next-hop is used
   to convey the SID.

   The next-hop initially responds with an ACK, which implies that the CONNECT
   was valid and is being processed. The next-hop will later relay back either
   an ACCEPT or REFUSE from each target. An intermediate ST agent that receives
   a CONNECT behaves as explained in Section 4.5.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 4   |J N|S|    0    |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           Reference           |          LnkReference = 0     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           Checksum            |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           MaxMsgSize          |          RecoveryTimeout      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        StreamCreationTime                     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |   IPHops      |                        0                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                             Origin                            :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           FlowSpec                            :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          RecordRoute                          :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                             Group                             :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                        MulticastAddress                       :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                            UserData                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 24: CONNECT Control Message

   o       JN (bits 8 and 9) indicate the join authorization level for the
           stream, see Section 4.4.2.

   o       S (bit 10) indicates the NoRecovery option (Section 4.4.1). When the
           S-bit is set (1), the NoRecovery option is specified for the stream.

   o       Reference contains a number assigned by the ST agent sending CONNECT
           for use in the acknowledging ACK.

   o       MaxMsgSize indicates the smallest MTU along the path traversed by
           the stream. This field is initially set to the network MTU of the
           agent issues the CONNECT.

   o       RecoveryTimeout is the nominal number of milliseconds that the
           application is willing to wait for failed system component to be
           detected and any corrective action to be taken.

   o       StreamCreationTime is the 32-bits system dependent timestamp
           generated by the ST agent issuing the CONNECT.

   o       IPHops is the number of IP encapsulated hops traversed by the
           stream. This field is set to zero by the origin, and is
           incremented at each IP encapsulating agent.

   10.4.5 DISCONNECT

   DISCONNECT (OpCode = 5) is used by an origin to tear down an established
   stream or part of a stream, or by an intermediate ST agent that detects a
   failure between itself and its previous-hop, as distinguished by the
   ReasonCode. The DISCONNECT message specifies the list of targets that are
   to be disconnected. An ACK is required in response to a DISCONNECT message.
   The DISCONNECT message is propagated all the way to the specified targets.
   The targets are expected to terminate their participation in the stream.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 5   |G|    0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |     LnkReference = 0          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                      GeneratorIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           TargetList                          :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                            UserData                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 25: DISCONNECT Control Message

   o       G (bit 8) is used to request a DISCONNECT of all the stream's
           targets; TargetList is omitted when the G-bit is set (1).

   o       Reference contains a number assigned by the ST agent sending
           DISCONNECT for use in the acknowledging ACK.

   o       GeneratorIPAddress is the 32-bit IP address of the host that first
           generated the DISCONNECT message.

   10.4.6 ERROR

   ERROR (OpCode = 6) is sent in acknowledgment to a request in which an error
   is detected. No action is taken on the erroneous request. No ACK is
   expected. The ERROR message is not propagated beyond the previous-hop or
   next-hop ST agent. An ERROR is never sent in response to another ERROR. The
   receiver of an ERROR is encouraged to try again without waiting for a
   retransmission timeout.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 6   |       0       |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |     LnkReference = 0          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |        ReasonCode = 0         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           PDUInError                          :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Figure 26: ERROR Control Message

   o       Reference is the Reference number of the erroneous request.

   o       PDUInError is the PDU in error, beginning with the ST Header. This
           parameter is optional.  Its length is limited by network MTU, and
           may be truncated when too long.

   10.4.7 HELLO

   HELLO (OpCode = 7) is used as part of the ST failure detection mechanism,
   see Section 6.1.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 7   |R|    0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Reference = 0           |        LnkReference = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |         Checksum              |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                          HelloTimer                           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Figure 27: HELLO Control Message

   o       R (bit 8) is used for the Restarted-bit.

   o       HelloTimer represents the time in millisecond since the agent was
           restarted, modulo the precision of the field. It is used to detect
           duplicate or delayed HELLO messages.

   10.4.8 JOIN

   JOIN (OpCode = 8) is used as part of the ST steam joining mechanism, see
   Section 4.6.3.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 8   |      0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |         LnkReference = 0      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                    GeneratorIPAddress                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Figure 28: JOIN Control Message

   o       Reference contains a number assigned by the ST agent sending JOIN
           for use in the acknowledging ACK.

   o       GeneratorIPAddress is the 32-bit IP address of the host that first
           generated the JOIN message.

   o       TargetList IP address of a single target i.e. the origin of the
           stream.

   10.4.9 JOIN-REJECT

   JOIN-REJECT (OpCode = 9) is used as part of the ST steam joining mechanism,
   see Section 4.6.3.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 9   |      0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |          LnkReference         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                      GeneratorIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 29: JOIN-REJECT Control PDU Message

   o       Reference contains an unknown Reference.

   RestartLocal    50      The local ST agent has recently restarted.

   RemoteRestart   51      The remote a number assigned by the ST agent has recently restarted.

   RetransTimeout  52      An acknowledgment to a control message has
   not been received after several retransmissions.

   RouteBack       53      The routing function indicates that sending the route
   to
           REFUSE for use in the next-hop acknowledging ACK.

   o       LnkReference is through the same interface as Reference number from the previous-hop and corresponding JOIN
           message.

   o       GeneratorIPAddress is not the previous-hop.

   RouteInconsist  54      A routing inconsistency has been detected,
   e.g., a route loop.

   RouteLoop       55      A CONNECT was received 32-bit IP address of the host that specified first
           generated the JOIN-REJECT message.

   10.4.10 NOTIFY

   NOTIFY (OpCode = 10) is issued by an
   existing target.

   SAPUnknown      56 ST agent to inform other ST agents of
   events that may be significant. NOTIFY may be propagated beyond the
   previous-hop or next-hop ST agent depending on the ReasonCode, see Section
   10.5.3; NOTIFY must be acknowledged with an ACK.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 10  |      0        |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |          LnkReference         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                      DetectorIPAddress                        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     Figure 30: NOTIFY Control PDU Message

   o       Reference contains an unknown next-higher
   layer SAP (port).

   STAgentFailure  57      An a number assigned by the ST agent failure has been detected.

   StreamExists    58      A stream with sending the given Name or SID already
   exists.

   StreamPreempted 59      The stream has been preempted by one with a
   higher precedence.

   STVerBad        60      A received PDU is not ST Version 3.

   TooManySIDs     61      Attempt to add more SIDs to a stream than
           NOTIFY for use in the
   implementation supports.

   TruncatedCtl    62      Control PDU acknowledging ACK.

   o       ReasonCode identifies the reason for the notification.

   o       DetectorIPAddress is shorter than expected.

   TruncatedPDU    63      A received the 32-bit IP address of the ST PDU agent that
           detects the event.

   o       TargetList is shorter than present when the ST
   Header indicates.

   UserDataSize    64      UserData parameter too large notification is related to permit one or
           more targets.

   10.4.11 REFUSE

   REFUSE (OpCode = 11) is issued by a
   control target that either does not wish to
   accept a CONNECT message or wishes to remove itself from an established
   stream. It might also be issued by an intermediate ST agent in response to fit into a network's MTU.

   ConnectTimeOut  65      A
   CONNECT has not been acknowledged

   ChgFailed       66      An attempt or CHANGE either to change the FlowSpec of terminate a routing loop, or when a satisfactory
   next-hop to a target cannot be found. It may also be a separate command
   when an existing stream failed

   QosClassUnknown 67      QoS class is not supported

   PathConverge    68      Two braches of the has been preempted by a higher precedence stream join during or
   an ST agent detects the
   CONNECT setup.

   TBD: failure N/A An abbreviation used in the text for any of the more
   specific errors: DropFailAgt, DropFailHst, DropFailIfc, DropFailNet,
   IntfcFailure, NetworkFailure, STAgentFailure, FailureRecovery.

   TBD: indicate which ReasonCodes can be used in NOTIFY messages, which
   cause NOTIFY to be propagated back to the Origin.

   10.3.8  Target and TargetList

   Several control messages use a parameter called TargetList (PCode =
   7), which contains information about previous-hop, next-hop, or the targets to which network
   between them. In all cases, the message
   pertains. For each Target in TargetList specifies the TargetList, targets that are
   affected by the information includes condition. Each REFUSE must be acknowledged by an ACK.

   The REFUSE is relayed back by the 32-bit IP address of ST agents to the target, origin (or intermediate
   ST agent that created the SAP applicable to CONNECT or CHANGE) along the next
   higher layer protocol, and path traced by the length of
   CONNECT. The ST agent receiving the SAP (SAPBytes).
   Consequently, a Target structure can be of variable length. Each
   entry has REFUSE will process it differently
   depending on the format shown condition that caused it, as specified in Figure 18.

   Figure 18: Target

   o       TargetIPAddress is the 32-bit IP Address of the Target.

   o       TargetBytes ReasonCode
   field. No special effort is the length of the Target structure, beginning
   with the TargetIPAddress.

   o       SAPBytes made to combine multiple REFUSE messages since
   it is the length of the SAP, excluding any padding
   required considered most unlikely that separate REFUSEs will happen to maintain 32-bit align- ment.

   o       SAP may be longer than 2 bytes both
   pass through an ST agent at the same time and it includes a padding when
   required. There would be no padding required for SAPs with lengths of
   2, 6, 10, etc., bytes.

   Figure 19: easily combined, e.g., have
   identical ReasonCodes and parameters.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 11  |G|E|N|    0    |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |         LnkReference          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       DetectorIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       ValidTargetIPAddress                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList

   10.3.9  UserData

   The                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                         RecordRoute                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                            UserData parameter (PCode =                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 31: REFUSE Control Message

   o       G (bit 8) is an optional parameter that may
   be used by the next higher protocol or an application to convey
   arbitrary information to its peers. Note indicate that since all targets down stream from the size of
   control messages
           sender are refusing. It is limited by the smallest MTU in the path to the
   targets, the maximum size of expected that this parameter cannot be specified a
   priori. If the parameter is too large for some network's MTU, an
   error with ReasonCode(UserDataSize) will occur. be set most
           commonly due to network failures. The TargetList parameter is
           ignored when this bit is set, and must be
   padded to a multiple of 32 bits.

   Figure 20:  UserData

   o       UserBytes specifies the number of valid UserInfo bytes. included when not set.

   o       UserInfo is arbitrary data meaningful to the next higher
   protocol layer or application.

   TBD: GeneratorIPAddress & ReasonCodes 11  ST Control Message PDUs
   Each control message is described in a following section. Please
   refer to Section 13 for an explanation of the notation.

   11.1  ACCEPT

   ACCEPT (OpCode = 1)       E (bit 9) is issued set by a target as a positive response an ST agent to a
   CONNECT message. It implies indicate that the target is prepared to accept
   data from the origin along a change failed and
           pre-change resources and the stream that was established by the
   CONNECT. ACCEPT still exist

   o       N (bit 10) is also issued as a positive response used to a CHANGE
   message. It implies indicate that no further attempts to recover
           the target accepts the proposed stream
   modification.

   The ACCEPT message includes should be made.  This bit must be set when stream
           recovery should not be attempted, even in the FlowSpec that contains case where the cumulative
   information that was calculated
           target application has shut down normally (ApplDisconnect).

   o       Reference contains a number assigned by the intervening ST agents as
   CONNECT (or CHANGE) made its way from agent sending the origin to
           REFUSE for use in the target, as
   well as any modifications made by acknowledging ACK.

   o       LnkReference is either the application at Reference number from the target. The
   FlowSpec corresponding
           CONNECT or CHANGE, if it is not modified on this trip from the target back to result of such a message, or zero
           when the
   origin.

   ACCEPT REFUSE was originated as a separate command.

   o       DetectorIPAddress is relayed by the ST agents from the target to 32-bit IP address of the origin
   along host that first
           generated the path established by CONNECT (or CHANGE) but in REFUSE message.

   o       ValidTargetIPAddress is the reverse
   direction. ACCEPT must be acknowledged with ACK at each hop.

   Since 32-bit IP address of a host that is
           properly connected as part of the cumulative FlowSpec information can be different for
   different targets, no attempt stream. This parameter is made only
           used when recovering from stream convergence.

   10.4.12 STATUS

   STATUS (OpCode = 12) is used to combine inquire about the ACCEPTs from existence of a particular
   stream identified by the
   various targets. The SID. Use of STATUS is intended for collecting
   information from an neighbour ST agent, including general and specific
   stream information, and round trip time estimation.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 12  |       0       |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |       LnkReference = 0        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |          ReasonCode = 0       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList included in each ACCEPT contains the
   32-bit IP address of a single target, i.e. the one that issued the
   ACCEPT.

   TBD: include network MTU field, MaxRecoveryTimeout.                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 21: ACCEPT 32: STATUS Control Message

   o       Reference contains a number assigned by the ST agent sending
   ACCEPT STATUS
           for use in the acknowledging ACK. replying STATUS-RESPONSE.

   o       LnkReference       TargetList is an optional parameter that when present indicates that
           only information related to the Reference number from specific targets should be relayed
           in the corresponding
   CONNECT (or CHANGE).

   11.2  ACK

   ACK STATUS-RESPONSE.

   10.4.13 STATUS-RESPONSE

   STATUS-RESPONSE (OpCode = 2) 13) is used the reply to acknowledge a request. The ACK STATUS message. If the
   stream specified in the STATUS message is not propagated beyond the previous-hop or next-hop ST agent.

   Figure 22: ACK Control Message

   o       Reference is known, the Reference number of STATUS-RESPONSE
   will contain the control message
   being acknowledged.

   o       ReasonCode is usually NoError, specified SID but no other possibilities exist,
   e.g., DuplicateIgn.

   11.3  CHANGE

   CHANGE (OpCode = 3) is used to change parameters. It will otherwise
   contain the FlowSpec current SID, FlowSpec, TargetList, and possibly Groups of an established
   stream. The CHANGE message is processed similarly to CONNECT, except
   that it travels along the path of an established
   stream. CHANGE must
   be propagated until it reaches all It the stream's targets. CHANGE must full target list can not fit in a single message, only those
   targets that can be acknowledged with ACK at each hop. included in one message will be included. As mentioned
   in Section 10.4.12, it is possible to request information on a specific
   target.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  OpCode = 13  |    0          |           TotalBytes          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Reference                |     LnkReference              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                         SenderIPAddress                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Checksum           |       ReasonCode = 0          |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           FlowSpec                            :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                           Groups                              :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     :                          TargetList                           :
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                 Figure 23: CHANGE 33: STATUS-RESPONSE Control Message

   o       G (bit 8) is used to request a global, stream-wide change;
   the TargetList parameter may be omitted when the G bit is specified.

   o       Reference contains a number assigned by the ST agent sending
   CHANGE for use in the acknowledging ACK.

   11.4  CONNECT

   CONNECT (OpCode = 4) requests
           STATUS-RESPONSE.

   o       LnkReference is the setup of a new stream or an
   addition Reference number from the corresponding STATUS.

   10.5 Suggested Protocol Constants

   The ST Protocol uses several fields that must have specific values for the
   protocol to or recovery of work, and also several values that an existing stream. Only the origin can
   issue implementation must
   select. This section specifies the required values and suggests initial set of CONNECTs to setup
   values for others. It is recommended that the latter be implemented as
   variables so that they may be easily changed when experience indicates
   better values. Eventually, they should be managed via the normal network
   management facilities.

   ST uses IP Version Number 5.

   When encapsulated in IP, ST uses IP Protocol Number 5.

   10.5.1 SCMP Messages

   1)      ACCEPT
   2)      ACK
   3)      CHANGE
   4)      CONNECT
   5)      DISCONNECT
   6)      ERROR
   7)      HELLO
   8)      JOIN
   9)      JOIN-REJECT
   10)     NOTIFY
   11)     REFUSE
   12)     STATUS
   13)     STATUS-RESPONSE

   10.5.2 SCMP Parameters

   1)      FlowSpec
   2)      Group
   3)      MulticastAddress
   4)      Origin
   5)      RecordRoute
   6)      TargetList
   7)      UserData

   10.5.3 ReasonCode

   Several errors may occur during protocol processing. All ST error codes are
   taken from a stream, single number space. The currently defined values and their
   meaning is presented in the first
   CONNECT list below.  Note that new error codes may be
   defined from time to each next-hop is used time. All implementations are expected to convey the SID.

   The next-hop initially responds with handle new
   codes in a graceful manner. If an ACK, which implies that the
   CONNECT was valid and unknown ReasonCode is being processed. encountered, it
   should be assumed to be fatal. The next-hop will later
   relay back either ReasonCode is an ACCEPT or REFUSE from each target. 8-bit field. Following
   values are defined:

   1       NoError         No error has occurred.
   2       ErrorUnknown    An
   intermediate ST agent that receives a CONNECT behaves as explained error not contained in
   Section 3.1.

   Figure 24: CONNECT Control Message

   o       JN (bits 8 and 9) indicate the join authorization level for this list has been
                           detected
   3       AccessDenied    Access denied.
   4       AckUnexpected   An unexpected ACK was received.
   5       ApplAbort       The application aborted the stream, see Section 3.2.2.

   o       S (bit 10) indicates stream abnormally.
   6       ApplDisconnect  The application closed the NoRecovery option, described stream normally.
   7       ApplRefused     Applications refused requested connection or change
   8       AuthentFailed   The authentication function failed.
   9       BadMcastAddress IP Multicast address is unacceptable in
   Section 3.2.1.

   o       Reference contains a number assigned by the ST agent sending CONNECT for use in the acknowledging ACK.

   o       TBD: add MTU field
   10      CantGetResrc    Unable to CONNECT, MaxRecoveryTimeout

   o       TBD: add stream importance filed for preemption acquire (additional) resources.
   11      CantRelResrc    Unable to CONNECT

   11.5  DISCONNECT
   DISCONNECT (OpCode = 5) release excess resources.
   12      CantRecover     Unable to recover failed stream.
   13      CksumBadCtl     Control PDU has a bad message checksum.
   14      CksumBadST      PDU has a bad ST Header checksum.
   15      DuplicateIgn    Control PDU is used by a duplicate and is being
                           acknowledged.
   16      DuplicateTarget Control PDU contains a duplicate target, or an origin
                           attempt to tear down add an
   established stream or part of existing target.
   17      FlowSpecMismatch        FlowSpec in request does not match existing
                                   FlowSpec
   18      FlowSpecError   An error occurred while processing the FlowSpec
   19      FlowVerUnknown  Control PDU has a stream, or by an intermediate ST
   agent FlowSpec Version Number that detects is
                           not supported.
   20      GroupUnknown    Control PDU contains an unknown Group Name.
   21      InconsistGroup  An inconsistency has been detected with the streams
                           forming a group.
   22      IntfcFailure    A network interface failure between itself and its previous- hop, as
   distinguished by the ReasonCode. The DISCONNECT message specifies the
   list of targets that are has been detected.
   23      InvalidSender   Control PDU has an invalid SenderIPAddress field.
   24      InvalidTotByt   Control PDU has an invalid TotalBytes field.
   25      JoinAuthFailure Join failed due to be disconnected. An ACK is required in
   response stream authorization level
   26      LnkRefUnknown   Control PDU contains an unknown LnkReference.
   27      NetworkFailure  A network failure has been detected.
   28      NoRouteToAgent  Cannot find a route to an ST agent.
   29      NoRouteToHost   Cannot find a DISCONNECT message. The DISCONNECT message is
   propagated all the way route to the specified targets. The targets are
   expected a host.
   30      NoRouteToNet    Cannot find a route to terminate their participation in the stream.

   Figure 25: DISCONNECT a network.
   31      OpCodeUnknown   Control Message

   o       G (bit 8) is used to request PDU has an invalid OpCode field.
   32      PCodeUnknown    Control PDU has a DISCONNECT of all the stream's
   targets; the TargetList param- eter may be omitted when the G bit is
   set (1).

   o       Reference parameter with an invalid PCode.
   33      ParmValueBad    Control PDU contains a number assigned by the ST agent sending
   DISCONNECT for use in the acknowledging ACK.

   o       GeneratorIPAddress is the 32-bit IP address an invalid parameter value.
   34      PathConvergence Two branches of the host that
   first generated stream join during the DISCON- NECT message.

   11.6  ERROR

   ERROR (OpCode = 6) CONNECT
                           setup
   35      ProtocolUnknown Control PDU contains an unknown next-higher layer
                           protocol identifier.
   36      RecordRouteSize RecordRoute parameter is sent in acknowledgment too long to permit message
                           to fit a request in which network's MTU.
   37      RefUnknown      Control PDU contains an
   error is detected. No action is taken on the erroneous request. No
   ACK is expected. The ERROR unknown Reference.
   38      ResponseTimeout Control message is has been acknowledged but not propagated beyond the
   previous-hop or next-hop
                           answered by an appropriate control message.
   39      RestartLocal    The local ST agent. An ERROR is never sent in response
   to another ERROR. agent has recently restarted.
   40      RestartRemote   The receiver of an ERROR is encouraged remote ST agent has recently restarted.
   41      RetransTimeout  An acknowledgment has not been received after
                           several retransmissions.
   42      RouteBack       Route to try again
   without waiting for a retransmission timeout.

   Figure 26: ERROR Control Message

   o       Reference is the Reference number of the erroneous request.

   11.7  HELLO

   HELLO (OpCode = 7) is used next-hop through same interface as part of the ST failure detection
   mechanism, see Section 5.1.

   Figure 27: HELLO Control Message

   o       R (bit 8) is used for the Restarted-bit.

   o       Reference
                           previous-hop and is non-zero to inform the receiver not previous-hop.
   43      RouteInconsist  A routing inconsistency has been detected, e.g., a
                           route loop.
   44      RouteLoop       A CONNECT was received that specified an existing
                           target.
   45      SAPUnknown      Control PDU contains an ACK
   should be promptly sent so that the sender can update its round-trip
   time estimates. If Reference is zero, no ACK should be sent.

   TBD: HelloTimer
   11.8  JOIN-REQUEST

   JOIN-REQUEST (OpCode = 8) is used as part of the ST steam joining
   mechanism, see Section 3.4.2.

   Figure 28: JOIN-REQUEST unknown next-higher layer
                           SAP (port).
   46      SIDUnknown      Control Message

   o       Reference PDU contains a number assigned by the an unknown SID.
   47      STAgentFailure  An ST agent sending
   JOIN-REQUEST for use in the acknowledging ACK.

   o       GeneratorIPAddress failure has been detected.
   48      STVer3Bad       A received PDU is not ST Version 3.
   49      StreamExists    A stream with the 32-bit IP address of the host that
   first generated the JOIN- REQUEST message.

   11.9  NOTIFY

   NOTIFY (OpCode = 9) is issued given SID already exists.
   50      StreamPreempted The stream has been preempted by an ST agent to inform other ST
   agents one with a higher
                           precedence.

   51      TargetUnknown   A target is not a member of events that may be significant. NOTIFY may be propagated
   beyond the previous-hop specified stream.
   52      TargetMissing   A target parameter was expected and is not
                           included, or next-hop is empty.
   53      TruncatedCtl    Control PDU is shorter than expected.
   54      TruncatedPDU    A received ST agent depending on PDU is shorter than the
   ReasonCode, see Section 10.3.7; NOTIFY must be acknowledged with ST Header
                           indicates.
   55      UserDataSize    UserData parameter too large to permit a message to
                           fit into a network's MTU.

   10.5.4 Timeouts and Other Constants

   SCMP uses retransmission to effect reliability and thus has several
   "retransmission timers".  Each "timer" is modeled by an
   ACK.

   Figure 29: NOTIFY Control Message

   o       Reference contains initial time
   interval (ToXxx), which may get updated dynamically through measurement of
   control traffic, and a number assigned by the ST agent sending
   the NOTIFY for use of times (NXxx) to retransmit a message before
   declaring a failure. All time intervals are in units of milliseconds. Note
   that the acknowledging ACK.

   o       ReasonCode identifies the reason variables are described for reference purposes only, different
   implementations may not include the notification.

   o       NextHopIPAddress is the 32-bit IP address identical variables.

   Value   Timeout Name    Meaning
   ----------------------------------------------------------------------------
     500   ToAccept        Initial hop-by-hop timeout for acknowledgment of a suggested
   next-hop ST agent.

   o       TargetList is present when the notification is related to one
                           ACCEPT
       3   NAccept         ACCEPT retries before failure
     500   ToChange        Initial hop-by-hop timeout for acknowledgment of
                           CHANGE
       3   NChange         CHANGE retries before failure
    5000   ToChangeResp    End-to-End CHANGE timeout for receipt of ACCEPT or more targets.

   11.10
                           REFUSE

   REFUSE (OpCode = 10) is issued by a target that either does not wish
   to accept a
     500   ToConnect       Initial hop-by-hop timeout for acknowledgment of
                           CONNECT message
       5   NConnect        CONNECT retries before failure
    5000   ToConnectResp   End-to-End CONNECT timeout for receipt of ACCEPT or wishes to remove itself
                           REFUSE from an
   established stream. It might also be issued targets by an intermediate ST
   agent in response to a origin
     500   ToDisconnect    Initial hop-by-hop timeout for acknowledgment of
                           DISCONNECT
       3   NDisconnect     DISCONNECT retries before failure
     500   ToJoin          Initial hop-by-hop timeout for acknowledgment of JOIN
       3   NJoin           JOIN retries before failure
     500   ToJoinReject    Initial hop-by-hop timeout for acknowledgment of
                           JOIN-REJECT
       3   NJoinReject     JOIN-REJECT retries before failure
    5000   ToJoinResp      Timeout for receipt of CONNECT or CHANGE either to terminate a
   routing loop, or when a satisfactory next-hop to a target cannot be
   found. It may also be a separate command when an existing stream has
   been preempted by a higher precedence stream JOIN-REJECT from
                           origin or an ST agent detects
   the intermediate hop
     500   ToNotify        Initial hop-by-hop timeout for acknowledgment of
                           NOTIFY
       3   NNotify         NOTIFY retries before failure
     500   ToRefuse        Initial hop-by-hop timeout for acknowledgment of
                           REFUSE
       3   NRefuse         REFUSE retries before failure
     500   ToRetryRoute    Timeout for receipt of a previous-hop, next-hop, ACCEPT or the network between them.
   In all cases, the TargetList specifies the REFUSE from targets
                           during failure recovery
       5   NRetryRoute     CONNECT retries before failure
    1000   ToStatusResp    Timeout for receipt of STATUS-RESPONSE
       3   NStatus         STATUS retries before failure
   10000   HelloTimerHoldDown      Interval that are affected
   by the condition. Each REFUSE Restarted bit must be acknowledged by an ACK. set
                                   after ST restart
       5   HelloLossFactor         Number of consecutively missed HELLO
                                   messages before declaring link failure
    2000   DefaultRecoveryTimeout  Interval between successive HELLOs to/from
                                   active neighbors

   10.6 Data Notations

   The REFUSE is relayed back by convention in the ST agents documentation of Internet Protocols is to express
   numbers in decimal and to picture data with the origin (or
   intermediate ST agent that created most significant octet on
   the CONNECT or CHANGE) along left and the
   path traced by least significant octet on the CONNECT. right.

   The ST agent receiving the REFUSE will
   process it differently depending on order of transmission of the condition that caused it, as
   specified header and data described in the ReasonCode field. No special effort this document
   is made resolved to
   combine multiple REFUSE messages since it the octet level. Whenever a diagram shows a group of octets,
   the order of transmission of those octets is considered most unlikely
   that separate REFUSEs will happen to both pass through an ST agent at the same time and be easily combined, e.g., have identical
   ReasonCodes and parameters. normal order in which they
   are read in English. For example, in the following diagram the octets are
   transmitted in the order they are numbered.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |       1       |       2       |       3       |       4       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |       5       |       6       |       7       |       8       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |       9       |      10       |      11       |      12       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Figure 30: REFUSE Control Message

   o       Reference contains 34: Transmission Order of Bytes

   Whenever an octet represents a number assigned by the ST agent sending numeric quantity the REFUSE for use left most bit in the acknowledging ACK.

   o       LnkReference is either the Reference number from the
   corresponding CONNECT or CHANGE, if it
   diagram is the result of such a
   message, high order or zero when most significant bit. That is, the REFUSE was originated as a separate
   command.

   o       GeneratorIPAddress bit labeled
   0 is the 32-bit IP address of the host that
   first generated most significant bit. For example, the JOIN- REQUEST message.

   11.11  STATUS

   STATUS (OpCode = 11) is used to inquire about following diagram represents
   the existence value 170 (decimal).

                                0 1 2 3 4 5 6 7
                               +-+-+-+-+-+-+-+-+
                               |1 0 1 0 1 0 1 0|
                               +-+-+-+-+-+-+-+-+

                           Figure 35: Significance of Bits

   Similarly, whenever a
   particular stream identified by the SID. Use of STATUS is intended
   for diagnostic purposes and to assist in stream cleanup operations.

   TBD: write section on use of STATUS, STATUS-RESPONSE

   Figure 31: STATUS Control Message

   o       Q (bit 9) is set to one (1) for remote diagnostic purposes
   when the receiving ST agent should return multi-octet field represents a stream's parameters,
   whether or not numeric quantity the source
   left most bit of the message is believed to be a pre-
   vious-hop or next-hop in the specified stream. Note that this use has
   potential for disclosure of sensitive information.

   11.12  STATUS-RESPONSE

   STATUS-RESPONSE (OpCode = 12) whole field is the reply to most significant bit. When a STATUS message. If
   the stream specified in the STATUS message
   multi-octet quantity is not known, the STATUS-
   RESPONSE will contain the specified SID but no other parameters. It
   will otherwise contain transmitted the current SID, FlowSpec, TargetList, most significant octet is
   transmitted first.

   Fields whose length is fixed and
   possibly Groups fully illustrated are shown with a vertical
   bar (|) at the end; fixed fields whose contents are abbreviated are shown
   with an exclamation point (!); variable fields are shown with colons (:).
   Optional parameters are separated from control messages with a blank line.
   The order of any optional parameters is not meaningful.

   11 Acknowledgments and Author's Addresses

   Many individuals have contributed to the work described in this memo. We
   thank the participants in the stream.

   Figure 32: STATUS-RESPONSE Control Message 12  Suggested Protocol
   Constants
   The ST Protocol uses several fields that must have specific values Working Group for the protocol to work, their input, review,
   and constructive comments. We also several values that an
   implementation must select. This section specifies the required
   values and suggests initial values for others. It is recommended that
   the latter be implemented thank Lynne Kendall Beltran for
   translating our drawings into ASCII. Special thanks are due to Steve
   DeJarnett, who served as variables so that they may be easily
   changed when experience indicates better values. Eventually, they working group co-chair until summer 1993.

   We would also like to acknowledge the authors of [RFC1190]. All authors of
   [RFC1190] should be managed via the normal network management facilities.

   ST uses IP Version Number 5.

   When encapsulated in IP, ST uses IP Protocol Number 5.

   12.1  SCMP Messages

   1)      ACCEPT

   2)      ACK

   3)      CHANGE

   4)      CONNECT

   5)      DISCONNECT

   6)      ERROR

   7)      HELLO

   8)      JOIN

   9)      NOTIFY

   10)     REFUSE

   11)     STATUS

   12)     STATUS-RESPONSE

   12.2  SCMP Parameters

   1)      ErroredPDU

   2)      FlowSpec

   3)      Group

   4)      MulticastAddress
   5)      NextHopIPAddress

   6)      Origin

   7)      TargetList

   8)      UserData

   15 considered authors of this document since this document
   contains much of their text and ideas.

   Louis Berger
   BBN Systems and Technologies
   1300 North 17th Street, Suite 1200
   Arlington, VA 22209
   Phone: 703-284-4651
   EMail: lberger@bbn.com

   Luca Delgrossi
   IBM ENC
   Multimedia Technology Center
   Vangerowstr. 18
   D69020 Heidelberg, Germany
   Phone: +49-6221-594330
   EMail: luca@heidelbg.ibm.com

   Dat Duong
   BBN Systems and Technologies
   1300 North 17th Street, Suite 1200
   Arlington, VA 22209
   Phone: 703-284-4760
   EMail: dat@bbn.com

   Steve Jackowski
   Syzygy Communications Incorporated
   269 Mt. Hermon Road
   Scotts Valley, CA 95066
   Phone: 408-439-6834
   EMail: stevej@syzygycomm.com

   Sibylle Schaller
   IBM ENC
   Broadband Multimedia Communications
   Vangerowstr. 18
   D69020 Heidelberg, Germany
   Phone: +49-6221-5944553
   EMail: schaller@heidelbg.ibm.com

   12  References

   [RFC1071]       Braden, Borman, Partridge: Computing the Internet Checksum,
                   RFC 1071, USC/Information Sciences Institute, Cray
                   Research, BBN Laboratories,
   Sep- tember September 1988.

   [RFC1112]       Deering, S.: Host Extensions for IP multicasting, RFC 1112,
                   Stanford
   Univer- sity, University, August 1989.

   [WoHD95]        L. Wolf, R. G. Herrtwich, L. Delgrossi: Filtering Multimedia
                   Data in
   Reser- vation-based Reservation-based Networks, Kommunikation in
                   Verteilten Systemen 1995 (KiVS)', (KiVS), Chemnitz-Zwickau, Germany,
                   February 1995.

   [RFC1122]       Braden, R.: Requirements for Internet Hosts -- Communication
                   Layers, RFC 1122, USC/Information USC/ Information Sciences Institute,
                   October 1989.

   [Jaco88]        Jacobson, V.: Congestion Avoidance and Control, ACM
                   SIGCOMM-88, August 1988.

   [KaPa87]        Karn, P. and C. Partridge: Round Trip Time Estimation, ACM SIGCOMM-
   87,
                   SIGCOMM-87, August 1987.

   [RFC1141]       Mallory, T. and A. Kullberg: Incremental Updating of the
                   Internet Checksum, RFC 1141, BBN, January 1990.

   [RFC 1363]      C. Partridge: A Proposal Flow Specification, RFC 1363.

   [RFC791]        Postel: Internet Protocol, RFC 791, DARPA, September 1981.

   [RFC1060]       Reynolds, Postel: Assigned Numbers, RFC 1060, USC/ISI, March
                   1990.

   [RFC1190]       Topolcic C.: Internet Stream Protocol Version 2 (ST2),
                   RFC1190, October 1990.

   [RFC1633]       R. Braden, D. Clark, S. Shenker: Integrated Services in the
                   Internet Architecture: an Overview, RFC1633, June 1994.

   [VoHN93]        C. Vogt, R. G. Herrtwich, R. Nagarajan: HeiRAT: the
                   Heidelberg Resource Administration Technique - Design
                   Philosophy and Goals, Kommunikation In Verteilten Systemen,
                   Munich, Informatik Aktuell, Springer-Verlag, Heidelberg,
                   1993.

   [Cohe81]        D. Cohen: A Network Voice Protocol NVP-II, University of
                   Southern California, Los Angeles, 1981.

   [Cole81]        R. Cole: PVP - A Packet Video Protocol, University of
                   Southern California, Los Angeles, 1981.

   [DeAl92]        L. Delgrossi (Ed.) The BERKOM-II Multimedia Transport
                   System, Version 1, BERKOM Working Document, October, 1992.

   [DHHS92]        L. Delgrossi, C. Halstrick, R. G. Herrtwich, H. Stuettgen:
                   HeiTP: a Transport Protocol for ST-II, GLOBECOM'92, Orlando
                   (Florida), December 1992.

   [Schu94]        H. Schulzrinne: RTP: A Transport Protocol for Real-Time
                   Applications. Internet Draft, work in progress, 1994.