draft-ietf-st2-spec-03.txt   rfc1819.txt 
ST Working Group L. Delgrossi and L. Berger Network Working Group ST2 Working Group
Internet-Draft March 1995 Request for Comments: 1819 L. Delgrossi and L. Berger, Editors
File: draft-ietf-st2-spec-03.txt Expires: July 1995 Obsoletes: 1190, IEN 119 August 1995
Category: Experimental
Internet Stream Protocol Version 2 (ST2) Internet Stream Protocol Version 2 (ST2)
Protocol Specification - Version ST2+ Protocol Specification - Version ST2+
Status of this Memo Status of this Memo
This document is an Internet-Draft. Internet-Drafts are working This memo defines an Experimental Protocol for the Internet
documents of the Internet Engineering Task Force (IETF), its Areas, community. This memo does not specify an Internet standard of any
and its Working Groups. Note that other groups may also distribute kind. Discussion and suggestions for improvement are requested.
working documents as Internet-Drafts. Distribution of this memo is unlimited.
Internet-Drafts are draft documents valid for a maximum of six IESG NOTE
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 This document is a revision of RFC1190. The charter of this effort
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow was clarifying, simplifying and removing errors from RFC1190 to
Directories on ds.internic.net (US East Coast), nic.nordu.net ensure interoperability of implementations.
(Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific
Rim).
Abstract: NOTE WELL: Neither the version of the protocol described in this
document nor the previous version is an Internet Standard or under
consideration for that status.
Since the publication of the original version of the protocol, there
have been significant developments in the state of the art. Readers
should note that standards and technology addressing alternative
approaches to the resource reservation problem are currently under
development within the IETF.
Abstract
This memo contains a revised specification of the Internet STream This memo contains a revised specification of the Internet STream
Protocol Version 2 (ST2). ST2 is an experimental resource reservation Protocol Version 2 (ST2). ST2 is an experimental resource reservation
protocol intended to provide end-to-end real-time guarantees over an protocol intended to provide end-to-end real-time guarantees over an
internet. It allows its applications to build multi-destination internet. It allows applications to build multi-destination simplex
simplex data streams with a desired quality of service. The revised data streams with a desired quality of service. The revised version
version of ST2 specified in this memo is called ST2+. of ST2 specified in this memo is called ST2+.
1 Introduction 6 This specification is a product of the STream Protocol Working Group
1.1 What is ST2? 6 of the Internet Engineering Task Force.
1.2 ST2 and IP 8
1.3 Protocol History 8
1.3.1 RFC1190 ST and ST2+ Major Differences 9
1.4 Supporting Modules for ST2 10
1.4.1 Data Transfer Protocol 11
1.4.2 Setup Protocol 11
1.4.3 Flow Specification 11
1.4.4 Routing Function 12
1.4.5 Local Resource Manager 12
1.5 ST2 Basic Concepts 14
1.5.1 Streams 14
1.5.2 Data Transmission 15
1.5.3 Flow Specification 16
1.6 Outline of This Document 17
2 ST2 User Service Description 18 Table of Contents
2.1 Stream Operations and Primitive Functions 18
2.2 State Diagrams 20
2.3 State Transition Tables 23
3 The ST2 Data Transfer Protocol 23 1 Introduction 6
3.1 Data Transfer with ST 24 1.1 What is ST2? 6
3.2 ST Protocol Functions 25 1.2 ST2 and IP 8
3.2.1 Stream Identification 25 1.3 Protocol History 8
3.2.2 Packet Discarding based on Data Priority 25 1.3.1 RFC1190 ST and ST2+ Major Differences 9
1.4 Supporting Modules for ST2 10
1.4.1 Data Transfer Protocol 11
1.4.2 Setup Protocol 11
1.4.3 Flow Specification 11
1.4.4 Routing Function 12
1.4.5 Local Resource Manager 12
1.5 ST2 Basic Concepts 15
1.5.1 Streams 16
1.5.2 Data Transmission 16
1.5.3 Flow Specification 17
1.6 Outline of This Document 19
4 SCMP Functional Description 25 2 ST2 User Service Description 19
4.1 Types of Streams 27 2.1 Stream Operations and Primitive Functions 19
4.1.1 Stream Building 27 2.2 State Diagrams 21
4.1.2 Knowledge of Receivers 27 2.3 State Transition Tables 25
4.2 Control PDUs 28
4.3 SCMP Reliability 29
4.4 Stream Options 30
4.4.1 No Recovery 30
4.4.2 Join Authorization Level 31
4.4.3 Record Route 31
4.4.4 User Data 31
4.5 Stream Setup 32
4.5.1 Information from the Application 32
4.5.2 Initial Setup at the Origin 32
4.5.2.1 Invoking the Routing Function 33
4.5.2.2 Reserving Resources 33
4.5.3 Sending CONNECT Messages 34
4.5.3.1 Empty Target List 34
4.5.4 CONNECT Processing by an Intermediate ST agent 34
4.5.5 CONNECT Processing at the Targets 34
4.5.6 ACCEPT Processing by an Intermediate ST agent 35
4.5.7 ACCEPT Processing by the Origin 36
4.5.8 REFUSE Processing by the Intermediate ST agent 36
4.5.9 REFUSE Processing by the Origin 36
4.5.10 Other Functions during Stream Setup 36
4.6 Modifying an Existing Stream 37
4.6.1 The Origin Adding New Targets 37
4.6.2 The Origin Removing a Target 38
4.6.3 A Target Joining a Stream 39
4.6.3.1 Router as Origin 40
4.6.4 A Target Deleting Itself 40
4.6.5 Changing a Stream's FlowSpec 41
4.7 Stream Tear Down 41
5 Exceptional Cases 42 3 The ST2 Data Transfer Protocol 26
5.1 Long ST Messages 42 3.1 Data Transfer with ST 26
5.1.1 Handling of Long Data Packets 42 3.2 ST Protocol Functions 27
5.1.2 Handling of Long Control Packets 42 3.2.1 Stream Identification 27
5.2 Timeout Failures 43 3.2.2 Packet Discarding based on Data Priority 27
5.2.1 Failure due to ACCEPT Acknowledgment Timeout 44
5.2.2 Failure due to CHANGE Acknowledgment Timeout 44
5.2.3 Failure due to CHANGE Response Timeout 44
5.2.4 Failure due to CONNECT Acknowledgment Timeout 44
5.2.5 Failure due to CONNECT Response Timeout 45
5.2.6 Failure due to DISCONNECT Acknowledgment Timeout 45
5.2.7 Failure due to JOIN Acknowledgment Timeout 45
5.2.8 Failure due to JOIN Response Timeout 45
5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout 45
5.2.10 Failure due to NOTIFY Acknowledgment Timeout 46
5.2.11 Failure due to REFUSE Acknowledgment Timeout 46
5.2.12 Failure due to STATUS Response Timeout 46
5.3 Setup Failures due to Routing Failures 46
5.3.1 Path Convergence 47
5.3.2 Other Cases 47
5.4 Problems due to Routing Inconsistency 48
5.5 Problems in Reserving Resources 49
5.5.1 Mismatched FlowSpecs 49
5.5.2 Unknown FlowSpec Version 49
5.5.3 LRM Unable to Process FlowSpec 50
5.5.4 Insufficient Resources 50
5.6 Problems Caused by CHANGE Messages 50
5.7 Unknown Targets in DISCONNECT and CHANGE 51
6 Failure Detection and Recovery 52 4 SCMP Functional Description 28
6.1 Failure Detection 52 4.1 Types of Streams 29
6.1.1 Network Failures 52 4.1.1 Stream Building 30
6.1.2 Detecting ST Agents Failures 53 4.1.2 Knowledge of Receivers 30
6.2 Failure Recovery 54 4.2 Control PDUs 31
6.2.1 Problems in Stream Recovery 57 4.3 SCMP Reliability 32
6.3 Stream Preemption 58 4.4 Stream Options 33
4.4.1 No Recovery 33
4.4.2 Join Authorization Level 34
4.4.3 Record Route 34
4.4.4 User Data 35
4.5 Stream Setup 35
4.5.1 Information from the Application 35
4.5.2 Initial Setup at the Origin 35
4.5.2.1 Invoking the Routing Function 36
4.5.2.2 Reserving Resources 36
4.5.3 Sending CONNECT Messages 37
4.5.3.1 Empty Target List 37
4.5.4 CONNECT Processing by an Intermediate ST agent 37
4.5.5 CONNECT Processing at the Targets 38
4.5.6 ACCEPT Processing by an Intermediate ST agent 38
4.5.7 ACCEPT Processing by the Origin 39
4.5.8 REFUSE Processing by the Intermediate ST agent 39
4.5.9 REFUSE Processing by the Origin 39
4.5.10 Other Functions during Stream Setup 40
4.6 Modifying an Existing Stream 40
4.6.1 The Origin Adding New Targets 41
4.6.2 The Origin Removing a Target 41
4.6.3 A Target Joining a Stream 42
4.6.3.1 Intermediate Agent (Router) as Origin 43
4.6.4 A Target Deleting Itself 43
4.6.5 Changing a Stream's FlowSpec 44
4.7 Stream Tear Down 45
7 A Group of Streams 59 5 Exceptional Cases 45
7.1 Basic Group Relationships 59 5.1 Long ST Messages 45
7.1.1 Bandwidth Sharing 59 5.1.1 Handling of Long Data Packets 45
7.1.2 Fate Sharing 60 5.1.2 Handling of Long Control Packets 46
7.1.3 Route Sharing 61 5.2 Timeout Failures 47
7.1.4 Subnet Resources Sharing 61 5.2.1 Failure due to ACCEPT Acknowledgment Timeout 47
7.2 Relationships Orthogonality 61 5.2.2 Failure due to CHANGE Acknowledgment Timeout 47
5.2.3 Failure due to CHANGE Response Timeout 48
5.2.4 Failure due to CONNECT Acknowledgment Timeout 48
5.2.5 Failure due to CONNECT Response Timeout 48
5.2.6 Failure due to DISCONNECT Acknowledgment Timeout 48
5.2.7 Failure due to JOIN Acknowledgment Timeout 48
5.2.8 Failure due to JOIN Response Timeout 49
5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout 49
5.2.10 Failure due to NOTIFY Acknowledgment Timeout 49
5.2.11 Failure due to REFUSE Acknowledgment Timeout 49
5.2.12 Failure due to STATUS Response Timeout 49
5.3 Setup Failures due to Routing Failures 50
5.3.1 Path Convergence 50
5.3.2 Other Cases 51
5.4 Problems due to Routing Inconsistency 52
5.5 Problems in Reserving Resources 53
5.5.1 Mismatched FlowSpecs 53
5.5.2 Unknown FlowSpec Version 53
5.5.3 LRM Unable to Process FlowSpec 53
5.5.4 Insufficient Resources 53
5.6 Problems Caused by CHANGE Messages 54
5.7 Unknown Targets in DISCONNECT and CHANGE 55
8 Ancillary Functions 62 6 Failure Detection and Recovery 55
8.1 Stream ID Generation 62 6.1 Failure Detection 55
8.2 Group Name Generator 62 6.1.1 Network Failures 56
8.3 Checksum Computation 63 6.1.2 Detecting ST Agents Failures 56
8.4 Neighbour ST Agent Identification and 63 6.2 Failure Recovery 58
Information Collection 6.2.1 Problems in Stream Recovery 60
8.5 Round Trip Time Estimation 64 6.3 Stream Preemption 62
8.6 Network MTU Discovery 64
8.7 IP Encapsulation of ST 65
8.8 IP Multicasting 66
9 The ST2+ Flow Specification 67 7 A Group of Streams 63
9.1 FlowSpec Version #0 - (Null FlowSpec) 68 7.1 Basic Group Relationships 63
9.2 FlowSpec Version #7 - ST2+ FlowSpec 68 7.1.1 Bandwidth Sharing 63
9.2.1 QoS Classes 69 7.1.2 Fate Sharing 64
9.2.2 Precedence 69 7.1.3 Route Sharing 65
9.2.3 Maximum Data Size 70 7.1.4 Subnet Resources Sharing 65
9.2.4 Message Rate 70 7.2 Relationships Orthogonality 65
9.2.5 Delay and Delay Jitter 70
9.2.6 ST2+ FlowSpec Format 70
10 ST2 Protocol Data Units Specification 72 8 Ancillary Functions 66
10.1 Data PDU 72 8.1 Stream ID Generation 66
10.1.1 ST Data Packets 74 8.2 Group Name Generator 66
10.2 Control PDUs 74 8.3 Checksum Computation 67
10.3 Common SCMP Elements 75 8.4 Neighbor ST Agent Identification and
10.3.1 FlowSpec 76 Information Collection 67
10.3.2 Group 76 8.5 Round Trip Time Estimation 68
10.3.3 MulticastAddress 77 8.6 Network MTU Discovery 68
10.3.4 Origin 78 8.7 IP Encapsulation of ST 69
10.3.5 RecordRoute 78 8.8 IP Multicasting 70
10.3.6 Target and TargetList 79
10.3.7 UserData 80
10.3.8 Handling of Undefined Parameters 81
10.4 ST Control Message PDUs 81
10.4.1 ACCEPT 81
10.4.2 ACK 83
10.4.3 CHANGE 84
10.4.4 CONNECT 84
10.4.5 DISCONNECT 86
10.4.6 ERROR 87
10.4.7 HELLO 88
10.4.8 JOIN 89
10.4.9 JOIN-REJECT 90
10.4.10 NOTIFY 91
10.4.11 REFUSE 92
10.4.12 STATUS 94
10.4.13 STATUS-RESPONSE 94
10.5 Suggested Protocol Constants 95
10.5.1 SCMP Messages 95
10.5.2 SCMP Parameters 96
10.5.3 ReasonCode 96
10.5.4 Timeouts and Other Constants 98
10.6 Data Notations 99
11 Security Considerations 100 9 The ST2+ Flow Specification 71
9.1 FlowSpec Version #0 - (Null FlowSpec) 72
9.2 FlowSpec Version #7 - ST2+ FlowSpec 72
9.2.1 QoS Classes 73
9.2.2 Precedence 74
9.2.3 Maximum Data Size 74
9.2.4 Message Rate 74
9.2.5 Delay and Delay Jitter 74
9.2.6 ST2+ FlowSpec Format 75
12 Acknowledgments and Author's Addresses 100 10 ST2 Protocol Data Units Specification 77
10.1 Data PDU 77
10.1.1 ST Data Packets 78
10.2 Control PDUs 78
10.3 Common SCMP Elements 80
10.3.1 FlowSpec 80
10.3.2 Group 81
10.3.3 MulticastAddress 82
10.3.4 Origin 82
10.3.5 RecordRoute 83
10.3.6 Target and TargetList 84
10.3.7 UserData 85
10.3.8 Handling of Undefined Parameters 86
10.4 ST Control Message PDUs 86
10.4.1 ACCEPT 86
10.4.2 ACK 88
10.4.3 CHANGE 89
10.4.4 CONNECT 89
10.4.5 DISCONNECT 92
10.4.6 ERROR 93
10.4.7 HELLO 94
10.4.8 JOIN 95
10.4.9 JOIN-REJECT 96
10.4.10 NOTIFY 97
10.4.11 REFUSE 98
10.4.12 STATUS 100
10.4.13 STATUS-RESPONSE 100
10.5 Suggested Protocol Constants 101
10.5.1 SCMP Messages 102
10.5.2 SCMP Parameters 102
10.5.3 ReasonCode 102
10.5.4 Timeouts and Other Constants 104
10.6 Data Notations 105
11 References 106
12 Security Considerations 108
13 Acknowledgments and Authors' Addresses 108
13 References 101 1. Introduction
1 Introduction
1.1 What is ST2? 1.1 What is ST2?
The Internet Stream Protocol, Version 2 (ST2) is an experimental The Internet Stream Protocol, Version 2 (ST2) is an experimental
connection-oriented internetworking protocol that operates at the same connection-oriented internetworking protocol that operates at the
layer as connectionless IP. It has been developed to support the same layer as connectionless IP. It has been developed to support the
efficient delivery of data streams to single or multiple destinations efficient delivery of data streams to single or multiple destinations
in applications that require guaranteed quality of service. ST2 is in applications that require guaranteed quality of service. ST2 is
part of the IP protocol family and serves as an adjunct to, not a part of the IP protocol family and serves as an adjunct to, not a
replacement for, IP. The main application areas of the protocol are replacement for, IP. The main application areas of the protocol are
the real-time transport of multimedia data, e.g. digital audio and the real-time transport of multimedia data, e.g., digital audio and
video packet streams, and distributed simulation/gaming, across video packet streams, and distributed simulation/gaming, across
internets. internets.
ST2 can be used to reserve bandwidth for real-time streams across ST2 can be used to reserve bandwidth for real-time streams across
network routes. This reservation, together with appropriate network network routes. This reservation, together with appropriate network
access and packet scheduling mechanisms in all nodes running the access and packet scheduling mechanisms in all nodes running the
protocol, guarantees a well-defined Quality of Service (QoS) to ST2 protocol, guarantees a well-defined Quality of Service (QoS) to ST2
applications. It ensures that real-time packets are delivered within applications. It ensures that real-time packets are delivered within
their deadlines, that is, at the time where they need to be presented. their deadlines, that is, at the time where they need to be
This facilitates a smooth delivery of data that is essential for time- presented. This facilitates a smooth delivery of data that is
critical applications, but can typically not be provided by best- essential for time- critical applications, but can typically not be
effort IP communication. provided by best- effort IP communication.
DATA PATH CONTROL PATH DATA PATH CONTROL PATH
========= ============ ========= ============
Upper +------------------+ +---------+ Upper +------------------+ +---------+
Layer | Application data | | Control | Layer | Application data | | Control |
+------------------+ +---------+ +------------------+ +---------+
| | | |
| V | V
| +-------------------+ | +-------------------+
SCMP | | SCMP | | SCMP | | SCMP | |
skipping to change at page 7, line 5 skipping to change at page 7, line 5
+-----------------------+ +------------------------+ +-----------------------+ +------------------------+
D-bit=1 D-bit=0 D-bit=1 D-bit=0
Figure 1: ST2 Data and Control Path Figure 1: ST2 Data and Control Path
Just like IP, ST2 actually consists of two protocols: ST for the data Just like IP, ST2 actually consists of two protocols: ST for the data
transport and SCMP, the Stream Control Message Protocol, for all transport and SCMP, the Stream Control Message Protocol, for all
control functions. ST is simple and contains only a single PDU format control functions. ST is simple and contains only a single PDU format
that is designed for fast and efficient data forwarding in order to that is designed for fast and efficient data forwarding in order to
achieve low communication delays. SCMP, however, is more complex than achieve low communication delays. SCMP, however, is more complex than
IP's ICMP. As with ICMP and IP, SCMP packets are transferred within ST IP's ICMP. As with ICMP and IP, SCMP packets are transferred within
packets as shown in Figure 1. ST packets as shown in Figure 1.
+--------------------+ +--------------------+
| Conference Control | | Conference Control |
+--------------------+ +--------------------+
+-------+ +-------+ | +-------+ +-------+ |
| Video | | Voice | | +-----+ +------+ +-----+ +-----+ Application | Video | | Voice | | +-----+ +------+ +-----+ +-----+ Application
| Appl | | Appl | | | SNMP| |Telnet| | FTP | ... | | Layer | Appl | | Appl | | | SNMP| |Telnet| | FTP | ... | | Layer
+-------+ +-------+ | +-----+ +------+ +-----+ +-----+ +-------+ +-------+ | +-----+ +------+ +-----+ +-----+
| | | | | | | | | | | | | |
V V | | | | | ------------ V V | | | | | ------------
+-----+ +-----+ | | | | | +-----+ +-----+ | | | | |
| PVP | | NVP | | | | | | | PVP | | NVP | | | | | |
+-----+ +-----+ + | | | | +-----+ +-----+ + | | | |
| \ | \ \ | | | | | \ | \ \ | | | |
| +-----|--+-----+ | | | | | +-----|--+-----+ | | | |
| Appl.|control V V V V V | Appl.|control V V V V V
| ST data | +-----+ +-------+ +-----+ | ST data | +-----+ +-------+ +-----+
| & control| | UDP | | TCP | ... | RTP | Transport | & control| | UDP | | TCP | ... | RTP | Transport
| | +-----+ +-------+ +-----+ Layer | | +-----+ +-------+ +-----+ Layer
| /| / | \ / / | / /| | /| / | \ / / | / /|
|\ / | +------+--|--\-----+-/--|--- ... -+ / | |\ / | +------+--|--\-----+-/--|--- ... -+ / |
| \ / | | | \ / | / | | \ / | | | \ / | / |
| \ / | | | \ +----|--- ... -+ | ----------- | \ / | | | \ +----|--- ... -+ | -----------
| \ / | | | \ / | | | \ / | | | \ / | |
| V | | | V | | | V | | | V | |
| +------+ | | | +------+ | +------+ | | +------+ | | | +------+ | +------+ |
| | SCMP | | | | | ICMP | | | IGMP | | Internet | | SCMP | | | | | ICMP | | | IGMP | | Internet
| +------+ | | | +------+ | +------+ | Layer | +------+ | | | +------+ | +------+ | Layer
| | | | | | | | | | | | | | | | | |
V V V V V V V V V V V V V V V V V V
+-----------------+ +-----------------------------------+ +-----------------+ +-----------------------------------+
| STream protocol |->| Internet Protocol | | STream protocol |->| Internet Protocol |
+-----------------+ +-----------------------------------+ +-----------------+ +-----------------------------------+
| \ / | | \ / |
| \ / | | \ / |
| X | ------------ | X | ------------
| / \ | | / \ |
| / \ | | / \ |
VV VV VV VV
+----------------+ +----------------+ +----------------+ +----------------+
| (Sub-) Network |...| (Sub-) Network | (Sub-)Network | (Sub-) Network |...| (Sub-) Network | (Sub-)Network
| Protocol | | Protocol | Layer | Protocol | | Protocol | Layer
+----------------+ +----------------+ +----------------+ +----------------+
Figure 2. Protocol Relationships Figure 2. Protocol Relationships
1.2 ST2 and IP 1.2 ST2 and IP
ST2 is designed to coexist with IP on each node. A typical distributed ST2 is designed to coexist with IP on each node. A typical
multimedia application would use both protocols: IP for the transfer distributed multimedia application would use both protocols: IP for
of traditional data and control information, and ST2 for the transfer the transfer of traditional data and control information, and ST2 for
of real-time data. Whereas IP typically will be accessed from TCP or the transfer of real-time data. Whereas IP typically will be accessed
UDP, ST2 will be accessed via new end-to-end real-time protocols. The from TCP or UDP, ST2 will be accessed via new end-to-end real-time
position of ST2 with respect to the other protocols of the Internet protocols. The position of ST2 with respect to the other protocols of
family is represented in Figure 2. the Internet family is represented in Figure 2.
Both ST2 and IP apply the same addressing schemes to identify Both ST2 and IP apply the same addressing schemes to identify
different hosts. ST2 and IP packets differ in the first four bits, different hosts. ST2 and IP packets differ in the first four bits,
which contain the internetwork protocol version number: number 5 is which contain the internetwork protocol version number: number 5 is
reserved for ST2 (IP itself has version number 4). As a network layer reserved for ST2 (IP itself has version number 4). As a network layer
protocol, like IP, ST2 operates independently of its underlying protocol, like IP, ST2 operates independently of its underlying
subnets. Existing implementations use ARP for address resolution, and subnets. Existing implementations use ARP for address resolution, and
use the same Layer 2 SAPs as IP. use the same Layer 2 SAPs as IP.
As a special function, ST2 messages can be encapsulated in IP packets. As a special function, ST2 messages can be encapsulated in IP
This is represented in Figure 2 as a link between ST2 and IP. This link packets. This is represented in Figure 2 as a link between ST2 and
allows ST2 messages to pass through routers which do not run ST2. IP. This link allows ST2 messages to pass through routers which do
Resource management is typically not available for these IP route not run ST2. Resource management is typically not available for
segments. IP encapsulation is, therefore, suggested only for portions these IP route segments. IP encapsulation is, therefore, suggested
of the network which do not constitute a system bottleneck. only for portions of the network which do not constitute a system
bottleneck.
In Figure 2, the RTP protocol is shown as an example of transport In Figure 2, the RTP protocol is shown as an example of transport
layer on top of ST2. Others include the Packet Video Protocol (PVP) layer on top of ST2. Others include the Packet Video Protocol (PVP)
[Cole81], the Network Voice Protocol (NVP) [Cohe81], and others such [Cole81], the Network Voice Protocol (NVP) [Cohe81], and others such
as the Heidelberg Transport Protocol (HeiTP) [DHHS92]. as the Heidelberg Transport Protocol (HeiTP) [DHHS92].
1.3 Protocol History 1.3 Protocol History
The first version of ST was published in the late 1970's and was used The first version of ST was published in the late 1970's and was used
throughout the 1980's for experimental transmission of voice, video, throughout the 1980's for experimental transmission of voice, video,
and distributed simulation. The experience gained in these and distributed simulation. The experience gained in these
applications led to the development of the revised protocol version applications led to the development of the revised protocol version
ST2. The revision extends the original protocol to make it more ST2. The revision extends the original protocol to make it more
complete and more applicable to emerging multimedia environments. The complete and more applicable to emerging multimedia environments. The
specification of this protocol version is contained in Internet RFC specification of this protocol version is contained in Internet RFC
1190 which was published in October 1990 [RFC1190]. 1190 which was published in October 1990 [RFC1190].
With more and more developments of commercial distributed multimedia With more and more developments of commercial distributed multimedia
applications underway and with a growing dissatisfaction at the applications underway and with a growing dissatisfaction at the
transmission quality for audio and video over IP in the MBONE, transmission quality for audio and video over IP in the MBONE,
interest in ST2 has grown over the last years. Companies have products interest in ST2 has grown over the last years. Companies have
available incorporating the protocol. The BERKOM MMTS project of the products available incorporating the protocol. The BERKOM MMTS
German PTT [DeAl92] uses ST2 as its core protocol for the provision of project of the German PTT [DeAl92] uses ST2 as its core protocol for
multimedia teleservices such as conferencing and mailing. In addition, the provision of multimedia teleservices such as conferencing and
implementations of ST2 for Digital Equipment, IBM, NeXT, Macintosh, mailing. In addition, implementations of ST2 for Digital Equipment,
PC, Silicon Graphics, and Sun platforms are available. IBM, NeXT, Macintosh, PC, Silicon Graphics, and Sun platforms are
available.
In 1993, the IETF started a new working group on ST2 as part of ongoing In 1993, the IETF started a new working group on ST2 as part of
efforts to develop protocols that address resource reservation issues. ongoing efforts to develop protocols that address resource
The group's mission was to clean up the existing protocol reservation issues. The group's mission was to clean up the existing
specification to ensure better interoperability between the existing protocol specification to ensure better interoperability between the
and emerging implementations. It was also the goal to produce an existing and emerging implementations. It was also the goal to
updated experimental protocol specification that reflected the produce an updated experimental protocol specification that reflected
experiences gained with the existing ST2 implementations and the experiences gained with the existing ST2 implementations and
applications. Which led to the specification of the ST2+ protocol applications. Which led to the specification of the ST2+ protocol
contained in this document. contained in this document.
1.3.1 RFC1190 ST and ST2+ Major Differences 1.3.1 RFC1190 ST and ST2+ Major Differences
The protocol changes from RFC1190 were motivated by protocol The protocol changes from RFC1190 were motivated by protocol
simplification and clarification, and codification of extensions in simplification and clarification, and codification of extensions in
existing implementations. This section provides a list of major existing implementations. This section provides a list of major
differences, and is probably of interest only to those who have differences, and is probably of interest only to those who have
knowledge of RFC1190. The major differences between the versions are: knowledge of RFC1190. The major differences between the versions are:
o Elimination of "Hop IDentifiers" or HIDs. HIDs added much complexity o Elimination of "Hop IDentifiers" or HIDs. HIDs added much complexity
to the protocol and was found to be a major impediment to to the protocol and was found to be a major impediment to
interoperability. HIDs have been replaced by globally unique interoperability. HIDs have been replaced by globally unique
identifiers called "Stream IDentifiers" or SIDs. identifiers called "Stream IDentifiers" or SIDs.
o Elimination of a number of stream options. A number of options were o Elimination of a number of stream options. A number of options were
found to not be used by any implementation, or were thought to add found to not be used by any implementation, or were thought to add
more complexity than value. These options were removed. Removed more complexity than value. These options were removed. Removed
options include: point-to-point, full-duplex, reverse charge, and options include: point-to-point, full-duplex, reverse charge, and
source route. source route.
o Elimination of the concept of "subset" implementations. RFC1190 o Elimination of the concept of "subset" implementations. RFC1190
permitted subset implementations, to allow for easy implementation permitted subset implementations, to allow for easy implementation
and experimentation. This led to interoperability problems. Agents and experimentation. This led to interoperability problems. Agents
implementing the protocol specified in this document, MUST implement implementing the protocol specified in this document, MUST implement
the full protocol. A number of the protocol functions are best- the full protocol. A number of the protocol functions are best-
effort. It is expected that some implementations will make more effort. It is expected that some implementations will make more
effort than others in satisfying particular protocol requests. effort than others in satisfying particular protocol requests.
o Clarification of the capability of targets to request to join a o Clarification of the capability of targets to request to join a
steam. RFC1190 can be interpreted to support target requests, but steam. RFC1190 can be interpreted to support target requests, but
most implementors did not understand this and did not add support most implementors did not understand this and did not add support
for this capability. The lack of this capability was found to be a for this capability. The lack of this capability was found to be a
significant limitation in the ability to scale the number of significant limitation in the ability to scale the number of
participants in a single ST stream. This clarification is based on participants in a single ST stream. This clarification is based on
work done by IBM Heidelberg. work done by IBM Heidelberg.
o Separation of functions between ST and supporting modules. An effort o Separation of functions between ST and supporting modules. An effort
was made to improve the separation of functions provided by ST and was made to improve the separation of functions provided by ST and
those provided by other modules. This is reflected in reorganization those provided by other modules. This is reflected in reorganization
of some text and some PDU formats. ST was also made FlowSpec of some text and some PDU formats. ST was also made FlowSpec
independent, although it does define a FlowSpec for testing and independent, although it does define a FlowSpec for testing and
interoperability purposes. interoperability purposes.
o General reorganization and re-write of the specification. This o General reorganization and re-write of the specification. This
document has been organized with the goal of improved readability document has been organized with the goal of improved readability
and clarity. Some sections have been added, and an effort was made and clarity. Some sections have been added, and an effort was made
to improve the introduction of concepts. to improve the introduction of concepts.
1.4 Supporting Modules for ST2 1.4 Supporting Modules for ST2
ST2 is one piece of a larger mosaic. This section presents the overall ST2 is one piece of a larger mosaic. This section presents the
communication architecture and clarifies the role of ST2 with respect overall communication architecture and clarifies the role of ST2 with
to its supporting modules. respect to its supporting modules.
ST2 proposes a two-step communication model. In the first step, the ST2 proposes a two-step communication model. In the first step, the
real-time channels for the subsequent data transfer are built. This is real-time channels for the subsequent data transfer are built. This
called stream setup. It includes selecting the routes to the is called stream setup. It includes selecting the routes to the
destinations and reserving the correspondent resources. In the second destinations and reserving the correspondent resources. In the second
step, the data is transmitted over the previously established streams. step, the data is transmitted over the previously established
This is called data transfer. While stream setup does not have to be streams. This is called data transfer. While stream setup does not
completed in real-time, data transfer has stringent real-time have to be completed in real-time, data transfer has stringent real-
requirements. The architecture used to describe the ST2 communication time requirements. The architecture used to describe the ST2
model includes: communication model includes:
o a data transfer protocol for the transmission of real-time data over o a data transfer protocol for the transmission of real-time data
the established streams, over the established streams,
o a setup protocol to establish real-time streams based on the flow o a setup protocol to establish real-time streams based on the flow
specification, specification,
o a flow specification to express user real-time requirements, o a flow specification to express user real-time requirements,
o a routing function to select routes in the Internet, o a routing function to select routes in the Internet,
o a local resource manager to appropriately handle resources involved o a local resource manager to appropriately handle resources involved
in the communication. in the communication.
This document defines a data protocol (ST), a setup protocol (SCMP), This document defines a data protocol (ST), a setup protocol (SCMP),
and a flow specification (ST2+ FlowSpec). It does not define a routing and a flow specification (ST2+ FlowSpec). It does not define a
function and a local resource manager. However, ST2 assumes their routing function and a local resource manager. However, ST2 assumes
existence. their existence.
Alternative architectures are possible, see [RFC1633] for an example Alternative architectures are possible, see [RFC1633] for an example
alternative architecture that could be used when implementing ST2. alternative architecture that could be used when implementing ST2.
1.4.1 Data Transfer Protocol 1.4.1 Data Transfer Protocol
The data transfer protocol defines the format of the data packets The data transfer protocol defines the format of the data packets
belonging to the stream. Data packets are delivered to the targets belonging to the stream. Data packets are delivered to the targets
along the stream paths previously established by the setup protocol. along the stream paths previously established by the setup protocol.
Data packets are delivered with the quality of service associated with Data packets are delivered with the quality of service associated
the stream. with the stream.
Data packets contain a globally unique stream identifier that Data packets contain a globally unique stream identifier that
indicates which stream they belong to. The stream identifier is also indicates which stream they belong to. The stream identifier is also
known by the setup protocol, which uses it during stream known by the setup protocol, which uses it during stream
establishment. The data transfer protocol for ST2, known simply as ST, establishment. The data transfer protocol for ST2, known simply as
is completely defined by this document. ST, is completely defined by this document.
1.4.2 Setup Protocol 1.4.2 Setup Protocol
The setup protocol is responsible for establishing, maintaining, and The setup protocol is responsible for establishing, maintaining, and
releasing real-time streams. It relies on the routing function to releasing real-time streams. It relies on the routing function to
select the paths from the source to the destinations. At each host/ select the paths from the source to the destinations. At each
router on these paths, it presents the flow specification associated host/router on these paths, it presents the flow specification
with the stream to the local resource manager. This causes the associated with the stream to the local resource manager. This causes
resource managers to reserve appropriate resources for the stream. The the resource managers to reserve appropriate resources for the
setup protocol for ST2 is called Stream Control Message Protocol, or stream. The setup protocol for ST2 is called Stream Control Message
SCMP, and is completely defined by this document. Protocol, or SCMP, and is completely defined by this document.
1.4.3 Flow Specification 1.4.3 Flow Specification
The flow specification is a data structure including the ST2 The flow specification is a data structure including the ST2
applications' QoS requirements. At each host/router, it is used by the applications' QoS requirements. At each host/router, it is used by
local resource manager to appropriately handle resources so that such the local resource manager to appropriately handle resources so that
requirements are met. Distributing the flow specification to all such requirements are met. Distributing the flow specification to all
resource managers along the communication paths is the task of the resource managers along the communication paths is the task of the
setup protocol. However, the contents of the flow specification are setup protocol. However, the contents of the flow specification are
transparent to the setup protocol, which simply carries the flow transparent to the setup protocol, which simply carries the flow
specification. Any operations on the flow specification, including specification. Any operations on the flow specification, including
updating internal fields and comparing flow specifications are updating internal fields and comparing flow specifications are
performed by the resource managers. performed by the resource managers.
This document defines a specific flow specification format that allows This document defines a specific flow specification format that
for interoperability among existing ST2 implementations. allows for interoperability among ST2 implementations. This flow
Implementations may support more than one flow specification format specification is intended to support a flow with a single
and the means are provided to add new formats as they are defined in transmission rate for all destinations in the stream. Implementations
the future. However, the flow specification format has to be may support more than one flow specification format and the means are
consistent throughout the stream, i.e. it is not possible to use provided to add new formats as they are defined in the future.
different flow specification formats for different parts of the same However, the flow specification format has to be consistent
stream. throughout the stream, i.e., it is not possible to use different flow
specification formats for different parts of the same stream.
1.4.4 Routing Function 1.4.4 Routing Function
The routing function is an external unicast route generation The routing function is an external unicast route generation
capability. It provides the setup protocol with the path to reach each capability. It provides the setup protocol with the path to reach
of the desired destinations. The routing function is called on a hop- each of the desired destinations. The routing function is called on a
by-hop basis and provides next-hop information. Once a route is hop-by-hop basis and provides next-hop information. Once a route is
selected by the routing function, it persists for the whole stream selected by the routing function, it persists for the whole stream
lifetime. The routing function may try to optimize based on the number lifetime. The routing function may try to optimize based on the
of targets, the requested resources, or use of local network multicast number of targets, the requested resources, or use of local network
or bandwidth capabilities. Alternatively, the routing function may multicast or bandwidth capabilities. Alternatively, the routing
even be based on simple connectivity information. function may even be based on simple connectivity information.
The setup protocol is not necessarily aware of the criteria used by The setup protocol is not necessarily aware of the criteria used by
the routing function to select routes. It works with any routing the routing function to select routes. It works with any routing
function algorithm. The algorithm adopted is a local matter at each function algorithm. The algorithm adopted is a local matter at each
host/router and different hosts/routers may use different algorithms. host/router and different hosts/routers may use different algorithms.
The interface between setup protocol and routing function is also a The interface between setup protocol and routing function is also a
local matter and therefore it is not specified by this document. local matter and therefore it is not specified by this document.
This version of ST does not support source routing. It does support This version of ST does not support source routing. It does support
route recording. It does include provisions that allow identification route recording. It does include provisions that allow identification
of ST capable neighbours. Identification of remote ST hosts/routers is of ST capable neighbors. Identification of remote ST hosts/routers is
not specifically addressed. not specifically addressed.
1.4.5 Local Resource Manager 1.4.5 Local Resource Manager
At each host/router traversed by a stream, the Local Resource Manager At each host/router traversed by a stream, the Local Resource Manager
(LRM) is responsible for handling local resources. The LRM knows which (LRM) is responsible for handling local resources. The LRM knows
resources are on the system and what capacity they can provide. which resources are on the system and what capacity they can provide.
Resources include: Resources include:
o CPUs on end systems and routers to execute the application and o CPUs on end systems and routers to execute the application and
protocol software, protocol software,
o main memory space for this software (as in all real-time systems,
code should be pinned in main memory, as swapping it out would have
detrimental effects on system performance),
o buffer space to store the data, e.g., communication packets, passing o main memory space for this software (as in all real-time systems,
through the nodes, code should be pinned in main memory, as swapping it out would have
detrimental effects on system performance),
o network adapters, and o buffer space to store the data, e.g., communication packets, passing
through the nodes,
o transmission networks between the nodes. Networks may be as simple o network adapters, and
as point-to-point links or as complex as switched networks such as o transmission networks between the nodes. Networks may be as simple
Frame Relay and ATM networks. as point-to-point links or as complex as switched networks such as
Frame Relay and ATM networks.
During stream setup and modification, the LRM is presented by the During stream setup and modification, the LRM is presented by the
setup protocol with the flow specification associated to the stream. setup protocol with the flow specification associated to the stream.
For each resource it handles, the LRM is expected to perform the For each resource it handles, the LRM is expected to perform the
following functions: following functions:
o Stream Admission Control: it checks whether, given the flow o Stream Admission Control: it checks whether, given the flow
specification, there are sufficient resources left to handle the new specification, there are sufficient resources left to handle the new
data stream. If the available resources are insufficient, the new data stream. If the available resources are insufficient, the new
data stream must be rejected. data stream must be rejected.
o QoS Computation: it calculates the best possible performance the o QoS Computation: it calculates the best possible performance the
resource can provide for the new data stream under the current resource can provide for the new data stream under the current
traffic conditions, e.g. throughput and delay values are computed. traffic conditions, e.g., throughput and delay values are computed.
o Resource Reservation: it reserves the resource capacities required o Resource Reservation: it reserves the resource capacities required
to meet the desired QoS. to meet the desired QoS.
During data transfer, the LRM is responsible for: During data transfer, the LRM is responsible for:
o QoS Enforcement: it enforces the QoS requirements by appropriate o QoS Enforcement: it enforces the QoS requirements by appropriate
scheduling of resource access. For example, data packets from an scheduling of resource access. For example, data packets from an
application with a short guaranteed delay must be served prior to application with a short guaranteed delay must be served prior to
data from an application with a less strict delay bound. data from an application with a less strict delay bound.
The LRM may also provide the following additional functions: The LRM may also provide the following additional functions:
o Data Regulation: to smooth a stream's data traffic, e.g. as with the o Data Regulation: to smooth a stream's data traffic, e.g., as with the
leaky bucket algorithm. leaky bucket algorithm.
o Policing: to prevent applications exceed their negotiated QoS, e.g. o Policing: to prevent applications exceed their negotiated QoS, e.g.,
to send data at a higher rate than indicated in the flow to send data at a higher rate than indicated in the flow
specification. specification.
o Stream Preemption: to free up resources for other streams with o Stream Preemption: to free up resources for other streams with
higher priority or importance. higher priority or importance.
The strategies adopted by the LRMs to handle resources are resource- The strategies adopted by the LRMs to handle resources are resource-
dependent and may vary at every host/router. However, it is necessary dependent and may vary at every host/router. However, it is necessary
that all LRMs have the same understanding of the flow specification. that all LRMs have the same understanding of the flow specification.
The interface between setup protocol and LRM is a local matter at The interface between setup protocol and LRM is a local matter at
every host and therefore it is not specified by this document. An every host and therefore it is not specified by this document. An
example of LRM is the Heidelberg Resource Administration Technique example of LRM is the Heidelberg Resource Administration Technique
(HeiRAT) [VoHN93]. (HeiRAT) [VoHN93].
It is also assumed that the LRM provides functions to compare flow It is also assumed that the LRM provides functions to compare flow
specifications, i.e. to decide whether a flow specification requires a specifications, i.e., to decide whether a flow specification requires
greater, equal, or smaller amount of resource capacities to be a greater, equal, or smaller amount of resource capacities to be
reserved. reserved.
1.5 ST2 Basic Concepts 1.5 ST2 Basic Concepts
The following sections present at an introductory level some of the The following sections present at an introductory level some of the
fundamental ST2 concepts including streams, data transfer, and flow fundamental ST2 concepts including streams, data transfer, and flow
specification. specification.
Hosts Connections... : ...and Streams Hosts Connections... : ...and Streams
==================== : ============== ==================== : ==============
data Origin : Origin data Origin : Origin
packets +-----------+ : +----+ packets +-----------+ : +----+
+----|Application| : | | +----|Application| : | |
| |-----------| : +----+ | |-----------| : +----+
+--->| ST Agent | : | | +--->| ST Agent | : | |
+-----------+ : | | +-----------+ : | |
| : | | | : | |
V : | | V : | |
+-------------+ : | | +-------------+ : | |
| | : | | | | : | |
+-------------| Network A | : +-------+ +--------+ +-------------| Network A | : +-------+ +--+
| | | : | | | | | : | |
| +-------------+ : | | | +-------------+ : | Target 2|
| | Target 2 : | | | | Target 2 : | & Router|
| Target 1 | and Router : | | | Target 1 | and Router : | |
| +-----------+ | +-----------+ : V V | +-----------+ | +-----------+ : V V
| |Application|<-+ | |Application|<-+ : +----+ +----+ | |Application|<-+ | |Application|<-+ : +----+ +----+
| |-----------| | | |-----------| | : | | Target 2 | | | |-----------| | | |-----------| | : | | | |
+->| ST Agent |--+ +->| ST Agent |--+ : +----+ & Router +----+ +->| ST Agent |--+ +->| ST Agent |--+ : +----+ +----+
+-----------+ +-----------+ : Target 1 | | +-----------+ +-----------+ :Target 1 | |
| : | | | : | |
V : | | V : | |
+-------------+ : | | +-------------+ : | |
| | : | | | | : | |
+-------------| Network B | : +----------+ | +-------------| Network B | : +-----+ |
| | | : | | | | | : | |
| +-------------+ : | | | +-------------+ : | |
| Target 3 | Target 4 : | | | Target 3 | Target 4 : | |
| +-----------+ | +-----------+ : V V | +-----------+ | +-----------+ : V V
| |Application|<-+ | |Application|<-+ : +----+ +----+ | |Application|<-+ | |Application|<-+ : +----+ +----+
| |-----------| | | |-----------| | : | | | | | |-----------| | | |-----------| | : | | | |
+->| ST Agent |--+ +->| ST Agent |--+ : +----+ +----+ +->| ST Agent |--+ +->| ST Agent |--+ : +----+ +----+
+-----------+ +-----------+ : Target 3 Target 4 +-----------+ +-----------+ : Target 3 Target 4
: :
Figure 3: The Stream Concept Figure 3: The Stream Concept
1.5.1 Streams 1.5.1 Streams
Streams form the core concepts of ST2. They are established between a Streams form the core concepts of ST2. They are established between a
sending origin and one or more receiving targets in the form of a sending origin and one or more receiving targets in the form of a
routing tree. Streams are uni-directional from the origin to the routing tree. Streams are uni-directional from the origin to the
targets. Nodes in the tree represent so-called ST agents, entities targets. Nodes in the tree represent so-called ST agents, entities
executing the ST2 protocol; links in the tree are called hops. Any executing the ST2 protocol; links in the tree are called hops. Any
node that can sit in the middle of the tree is call an intermediate node in the middle of the tree is called an intermediate agent, or
agent, or router. An agent may have any combination of origin, target, router. An agent may have any combination of origin, target, or
or intermediate capabilities. intermediate capabilities.
Figure 3 illustrates a stream from an origin to four targets, where Figure 3 illustrates a stream from an origin to four targets, where
the ST agent on Target 2 also functions as a router. Let us use this the ST agent on Target 2 also functions as an intermediate agent. Let
Target 2/Router node to explain some basic ST2 terminology: the us use this Target 2/Router node to explain some basic ST2
direction of the stream from this node to Target 3 and 4 is called terminology: the direction of the stream from this node to Target 3
downstream, the direction towards the Origin node upstream. ST agents and 4 is called downstream, the direction towards the Origin node
that are one hop away from a given node are called previous-hops in upstream. ST agents that are one hop away from a given node are
the upstream, and next-hops in the downstream direction. called previous-hops in the upstream, and next-hops in the downstream
direction.
Streams are maintained using SCMP messages. Typical SCMP messages are Streams are maintained using SCMP messages. Typical SCMP messages are
CONNECT and ACCEPT to build a stream, DISCONNECT and REFUSE to close a CONNECT and ACCEPT to build a stream, DISCONNECT and REFUSE to close
stream, CHANGE to modify the quality of service associated with a a stream, CHANGE to modify the quality of service associated with a
stream, and JOIN to request to be added to a stream. stream, and JOIN to request to be added to a stream.
Each ST agent maintains state information describing the streams Each ST agent maintains state information describing the streams
flowing through it. It can actively gather and distribute such flowing through it. It can actively gather and distribute such
information. It can recognize failed neighbour ST agents through the information. It can recognize failed neighbor ST agents through the
use of periodic HELLO message exchanges. It can ask other ST agents use of periodic HELLO message exchanges. It can ask other ST agents
about a particular stream via a STATUS message. These ST agents then about a particular stream via a STATUS message. These ST agents then
send back a STATUS-RESPONSE message. NOTIFY messages can be used to send back a STATUS-RESPONSE message. NOTIFY messages can be used to
inform other ST agents of significant events. inform other ST agents of significant events.
ST2 offers a wealth of functionalities for stream management. Streams ST2 offers a wealth of functionalities for stream management. Streams
can be grouped together to minimize allocated resources or to process can be grouped together to minimize allocated resources or to process
them in the same way in case of failures. During audio conferences, them in the same way in case of failures. During audio conferences,
for example, only a limited set of participants may talk at once. for example, only a limited set of participants may talk at once.
Using the group mechanism, resources for only a portion of the audio Using the group mechanism, resources for only a portion of the audio
streams of the group need to be reserved. Using the same concept, an streams of the group need to be reserved. Using the same concept, an
entire group of related audio and video streams can be dropped if one entire group of related audio and video streams can be dropped if one
of them is preempted. of them is preempted.
1.5.2 Data Transmission 1.5.2 Data Transmission
Data transfer in ST2 is simplex in the downstream direction. Data Data transfer in ST2 is simplex in the downstream direction. Data
transport through streams is very simple. ST2 puts only a small header transport through streams is very simple. ST2 puts only a small
in front of the user data. The header contains a protocol header in front of the user data. The header contains a protocol
identification that distinguishes ST2 from IP packets, an ST2 version identification that distinguishes ST2 from IP packets, an ST2 version
number, a priority field (specifying a relative importance of streams number, a priority field (specifying a relative importance of streams
in cases of conflict), a length counter, a stream identification, and in cases of conflict), a length counter, a stream identification, and
a checksum. These elements form an 12-byte header. a checksum. These elements form a 12-byte header.
Efficiency is also achieved by avoiding fragmentation and reassembly Efficiency is also achieved by avoiding fragmentation and reassembly
on all agents. Stream establishment yields a maximum message size for on all agents. Stream establishment yields a maximum message size for
data packets on a stream. This maximum message size is communicated to data packets on a stream. This maximum message size is communicated
the upper layers, so that they provide data packets of suitable size to the upper layers, so that they provide data packets of suitable
to ST2. size to ST2.
Communication with multiple next-hops can be made even more efficient Communication with multiple next-hops can be made even more efficient
using MAC Layer multicast when it is available. If a subnet supports using MAC Layer multicast when it is available. If a subnet supports
multicast, a single multicast packet is sufficient to reach all next- multicast, a single multicast packet is sufficient to reach all
hops connected to this subnet. This leads to a significant reduction next-hops connected to this subnet. This leads to a significant
of the bandwidth requirements of a stream. If multicast is not reduction of the bandwidth requirements of a stream. If multicast is
provided, separate packets need to be sent to each next-hop. not provided, separate packets need to be sent to each next-hop.
As ST2 relies on reservation, it does not contain error correction As ST2 relies on reservation, it does not contain error correction
mechanisms features for data exchange such as those found in TCP. It mechanisms features for data exchange such as those found in TCP. It
is assumed that real-time data, such as digital audio and video, is assumed that real-time data, such as digital audio and video,
require partially correct delivery only. In many cases, retransmitted require partially correct delivery only. In many cases, retransmitted
packets would arrive too late to meet their real-time delivery packets would arrive too late to meet their real-time delivery
requirements. Also, depending on the data encoding and the particular requirements. Also, depending on the data encoding and the particular
application, a small number of errors in stream data are acceptable. application, a small number of errors in stream data are acceptable.
In any case, reliability can be provided by layers on top of ST2 when In any case, reliability can be provided by layers on top of ST2 when
needed. needed.
1.5.3 Flow Specification 1.5.3 Flow Specification
As part of establishing a connection, SCMP handles the negotiation of As part of establishing a connection, SCMP handles the negotiation of
quality-of-service parameters for a stream. In ST2 terminology, these quality-of-service parameters for a stream. In ST2 terminology, these
parameters form a flow specification (FlowSpec) which is associated parameters form a flow specification (FlowSpec) which is associated
with the stream. Different versions of FlowSpecs exist, see [RFC1190], with the stream. Different versions of FlowSpecs exist, see
[DHHS92] and [RFC1363], and can be distinguished by a version number. [RFC1190], [DHHS92] and [RFC1363], and can be distinguished by a
Typically, they contain parameters such as average and maximum version number. Typically, they contain parameters such as average
throughput, end-to-end delay, and delay variance of a stream. SCMP and maximum throughput, end-to-end delay, and delay variance of a
itself only provides the mechanism for relaying the quality-of-service stream. SCMP itself only provides the mechanism for relaying the
parameters. quality-of-service parameters.
Three kinds of entities participate in the quality-of-service Three kinds of entities participate in the quality-of-service
negotiation: application entities on the origin and target sites as negotiation: application entities on the origin and target sites as
the service users, ST agents, and local resource managers (LRM). The the service users, ST agents, and local resource managers (LRM). The
origin application supplies the initial FlowSpec requesting a origin application supplies the initial FlowSpec requesting a
particular service quality. Each ST agent which obtains the FlowSpec particular service quality. Each ST agent which obtains the FlowSpec
as part of a connection establishment message, it presents the local as part of a connection establishment message, it presents the local
resource manager with it. ST2 does not determine how resource managers resource manager with it. ST2 does not determine how resource
make reservations and how resources are scheduled according to these managers make reservations and how resources are scheduled according
reservations; ST2, however, assumes these mechanisms as its basis. to these reservations; ST2, however, assumes these mechanisms as its
basis.
An example of the FlowSpec negotiation procedure is illustrated in An example of the FlowSpec negotiation procedure is illustrated in
Figure 4. Depending on the success of its local reservations, the LRM Figure 4. Depending on the success of its local reservations, the LRM
updates the FlowSpec fields and returns the FlowSpec to the ST agent, updates the FlowSpec fields and returns the FlowSpec to the ST agent,
which passes it downstream as part of the connection message. which passes it downstream as part of the connection message.
Eventually, the FlowSpec is communicated to the application at the Eventually, the FlowSpec is communicated to the application at the
target which may base its accept/reject decision for establishing the target which may base its accept/reject decision for establishing the
connection on it and may finally also modify the FlowSpec. If a target connection on it and may finally also modify the FlowSpec. If a
accepts the connection, the (possibly modified) FlowSpec is propagated target accepts the connection, the (possibly modified) FlowSpec is
back to the origin which can then calculate an overall service quality propagated back to the origin which can then calculate an overall
for all targets. The application entity the origin may later request a service quality for all targets. The application entity at the origin
CHANGE to adjust reservations. may later request a CHANGE to adjust reservations.
Origin Router Target 1 Origin Router Target 1
+------+ 1a +------+ 1b +------+ +------+ 1a +------+ 1b +------+
| |-------------->| |------------->| | | |-------------->| |------------->| |
+------+ +------+ +------+ +------+ +------+ +------+
^ | ^ | ^ | ^ |
| | | 2 | | | | 2 |
| | +------------------------------------------+ | | +------------------------------------------+
+ + + +
+-------------+ \ \ +-------------+ +-------------+ +-------------+ \ \ +-------------+ +-------------+
|Max Delay: 12| \ \ |Max Delay: 12| |Max Delay: 12| |Max Delay: 12| \ \ |Max Delay: 12| |Max Delay: 12|
|-------------| \ \ |-------------| |-------------| |-------------| \ \ |-------------| |-------------|
|Min Delay: 2| \ \ |Min Delay: 5| |Min Delay: 9| |Min Delay: 2| \ \ |Min Delay: 5| |Min Delay: 9|
|-------------| \ \ |-------------| |-------------| |-------------| \ \ |-------------| |-------------|
|Max Size:4096| + + |Max Size:2048| |Max Size:2048| |Max Size:4096| + + |Max Size:2048| |Max Size:2048|
+-------------+ | | +-------------+ +-------------+ +-------------+ | | +-------------+ +-------------+
FlowSpec | | 1 FlowSpec | | 1
| +---------------+ | +---------------+
| | | |
| V | V
2 | +------+ 2 | +------+
+-------------->| | +---------------| |
+------+ +------+
Target 2 Target 2
+-------------+ +-------------+
|Max Delay: 12| |Max Delay: 12|
|-------------| |-------------|
|Min Delay: 4| |Min Delay: 4|
|-------------| |-------------|
|Max Size:4096| |Max Size:4096|
+-------------+ +-------------+
Figure 4: Quality-of-Service Negotiation with FlowSpecs Figure 4: Quality-of-Service Negotiation with FlowSpecs
1.6 Outline of This Document 1.6 Outline of This Document
This document contains the specification of the ST2+ version of the This document contains the specification of the ST2+ version of the
ST2 protocol. In the rest of the document, whenever the terms "ST" or ST2 protocol. In the rest of the document, whenever the terms "ST" or
"ST2" are used, they refer to the ST2+ version of ST2. "ST2" are used, they refer to the ST2+ version of ST2.
The document is organized as follows: The document is organized as follows:
o Section 2 describes the ST2 user service from an application point o Section 2 describes the ST2 user service from an application point
of view. of view.
o Section 3 illustrates the ST2 data transfer protocol, ST. o Section 3 illustrates the ST2 data transfer protocol, ST.
o Section 4 through Section 8 specify the ST2 setup protocol, SCMP. o Section 4 through Section 8 specify the ST2 setup protocol, SCMP.
o the ST2 flow specification is presented in Section 9. o the ST2 flow specification is presented in Section 9.
o the formats of protocol elements and PDUs are defined in Section 10. o the formats of protocol elements and PDUs are defined in Section 10.
2 ST2 User Service Description 2. ST2 User Service Description
This section describes the ST user service from the high-level point This section describes the ST user service from the high-level point
of view of an application. It defines the ST stream operations and of view of an application. It defines the ST stream operations and
primitive functions. It specifies which operations on streams can be primitive functions. It specifies which operations on streams can be
invoked by the applications built on top of ST and when the ST invoked by the applications built on top of ST and when the ST
primitive functions can be legally executed. Note that the presented primitive functions can be legally executed. Note that the presented
ST primitives do not specify an API. They are used here with the only ST primitives do not specify an API. They are used here with the only
purpose of illustrating the service model for ST. purpose of illustrating the service model for ST.
2.1 Stream Operations and Primitive Functions 2.1 Stream Operations and Primitive Functions
An ST application at the origin may create, expand, reduce, change, An ST application at the origin may create, expand, reduce, change,
send data to, and delete a stream. When a stream is expanded, new send data to, and delete a stream. When a stream is expanded, new
targets are added to the stream; when a stream is reduced, some of the targets are added to the stream; when a stream is reduced, some of
current targets are dropped from it. When a stream is changed, the the current targets are dropped from it. When a stream is changed,
associated quality of service is modified. the associated quality of service is modified.
An ST application at the target may join, receive data from, and leave
a stream. This translates into the following stream operations:
o OPEN: create new stream [origin], CLOSE: delete stream [origin], An ST application at the target may join, receive data from, and
leave a stream. This translates into the following stream operations:
o ADD: expand stream, i.e. add new targets to it [origin], o OPEN: create new stream [origin], CLOSE: delete stream [origin],
o DROP: reduce stream, i.e. drop targets from it [origin], o ADD: expand stream, i.e., add new targets to it [origin],
o JOIN: join a stream [target], LEAVE: leave a stream [target], o DROP: reduce stream, i.e., drop targets from it [origin],
o DATA: send data through stream [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], o CHG: change a stream's QoS [origin],
Each stream operation may require the execution of several primitive Each stream operation may require the execution of several primitive
functions to be completed. For instance, to open a new stream, a functions to be completed. For instance, to open a new stream, a
request is first issued by the sender and an indication is generated request is first issued by the sender and an indication is generated
at one or more receivers; then, the receivers may each accept or at one or more receivers; then, the receivers may each accept or
refuse the request and the correspondent indications are generated at refuse the request and the correspondent indications are generated at
the sender. A single receiver case is shown in Figure 5 below. the sender. A single receiver case is shown in Figure 5 below.
Sender Network Receiver Sender Network Receiver
| | | | | |
OPEN.req | | | OPEN.req | | |
|-----------------> | | |-----------------> | |
| |-----------------> | | |-----------------> |
| | | OPEN.ind | | | OPEN.ind
| | | OPEN.accept | | | OPEN.accept
| |<----------------- | | |<----------------- |
|<----------------- | | |<----------------- | |
OPEN.accept-ind | | | OPEN.accept-ind | | |
| | | | | |
Figure 5: Primitives for the OPEN Stream Operation Figure 5: Primitives for the OPEN Stream Operation
Table 1 defines the ST service primitive functions associated to each Table 1 defines the ST service primitive functions associated to each
stream operation. The column labelled "O/T" indicates whether the stream operation. The column labelled "O/T" indicates whether the
primitive is executed at the origin or at the target. primitive is executed at the origin or at the target.
+===================================================+ +===================================================+
|Primitive | Descriptive |O/T| |Primitive | Descriptive |O/T|
|===================================================| |===================================================|
|OPEN.req | open a stream | O | |OPEN.req | open a stream | O |
|OPEN.ind | connection request indication | T | |OPEN.ind | connection request indication | T |
skipping to change at page 20, line 16 skipping to change at page 21, line 46
|DROP.req | drop targets | O | |DROP.req | drop targets | O |
|DROP.ind | disconnect indication | T | |DROP.ind | disconnect indication | T |
|LEAVE.req | leave stream | T | |LEAVE.req | leave stream | T |
|LEAVE.ind | leave stream indication | O | |LEAVE.ind | leave stream indication | O |
|CLOSE.req | close stream | O | |CLOSE.req | close stream | O |
|CLOSE.ind | close stream indication | T | |CLOSE.ind | close stream indication | T |
+---------------------------------------------------+ +---------------------------------------------------+
Table 1: ST Primitives Table 1: ST Primitives
2.2 State Diagrams 2.2 State Diagrams
It is not sufficient to define the set of ST stream operations. It is It is not sufficient to define the set of ST stream operations. It is
also necessary to specify when the operations can be legally executed. also necessary to specify when the operations can be legally
For this reason, a set of states is now introduced and the transitions executed. For this reason, a set of states is now introduced and the
from one state to the others are specified. States are defined with transitions from one state to the others are specified. States are
respect to a single stream. The previously defined stream operations defined with respect to a single stream. The previously defined
can be legally executed only from an appropriate state. stream operations can be legally executed only from an appropriate
state.
An ST agent may, with respect to an ST stream, be in one of the An ST agent may, with respect to an ST stream, be in one of the
following states: following states:
o IDLE: the stream has not been created yet. o IDLE: the stream has not been created yet.
o PENDING: the stream is in the process of being established. o PENDING: the stream is in the process of being established.
o ACTIVE: the stream is established and active. o ACTIVE: the stream is established and active.
o ADDING: the stream is established. A stream expansion is underway. o ADDING: the stream is established. A stream expansion is underway.
o CHGING: the stream is established. A stream change is underway. o CHGING: the stream is established. A stream change is underway.
Previous experience with ST has lead to limits on the stream Previous experience with ST has lead to limits on stream operations
operations that can be executed at the simultaneously. These that can be executed simultaneously. These restrictions are:
restrictions are:
1. A single ADD or CHG operation can be processed at one time. If an 1. A single ADD or CHG operation can be processed at one time. If
ADD or CHG is already underway, further requests are queued by the an ADD or CHG is already underway, further requests are queued
ST agent and handled only after the previous operation has been by the ST agent and handled only after the previous operation
completed. This also applies to two subsequent requests of the same has been completed. This also applies to two subsequent
kind, e.g. two ADD or two CHG operations. The second operation is requests of the same kind, e.g., two ADD or two CHG operations.
not executed until the first one has been completed. The second operation is not executed until the first one has
been completed.
2. Deleting a stream, leaving a stream, or dropping targets from a 2. Deleting a stream, leaving a stream, or dropping targets from a
stream is possible only after stream establishment has been stream is possible only after stream establishment has been
completed. A stream is considered to be established when all the completed. A stream is considered to be established when all
next-hops of the origin have either accepted or refused the stream. the next-hops of the origin have either accepted or refused the
Note that stream refuse is automatically forced after timeout if no stream. Note that stream refuse is automatically forced after
reply comes from a next-hop. timeout if no reply comes from a next-hop.
3. An ST agent forwards data only along already established paths to 3. An ST agent forwards data only along already established paths
the targets, see also Section 3.1. A path is considered to be to the targets, see also Section 3.1. A path is considered to
established when the next-hop on the path has explicitly accepted be established when the next-hop on the path has explicitly
the stream. This implies that the target and all other intermediate accepted the stream. This implies that the target and all other
ST agents are ready to handle the incoming data packets. In no cases intermediate ST agents are ready to handle the incoming data
an ST agent will forward data to a next-hop ST agent that has not packets. In no cases an ST agent will forward data to a
explicitly accepted the stream. To be sure that all targets receive next-hop ST agent that has not explicitly accepted the stream.
the data, an application should send the data only after all paths To be sure that all targets receive the data, an application
have been established, i.e. the stream is established. 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 CHGING and ADDING states. While 4. It is allowed to send data from the CHGING and ADDING states.
sending data from the CHGING state, the quality of service to the While sending data from the CHGING state, the quality of
targets affected by the change should be assumed to be the more service to the targets affected by the change should be assumed
restrictive quality of service. When sending data from the ADDING to be the more restrictive quality of service. When sending
state, the targets that receive the data include at least all the data from the ADDING state, the targets that receive the data
targets that were already part of the stream at the time the ADD include at least all the targets that were already part of the
operation was invoked. stream at the time the ADD operation was invoked.
The rules introduced above require ST agents to queue incoming The rules introduced above require ST agents to queue incoming
requests when the current state does not allow to process them requests when the current state does not allow to process them
immediately. In order to preserve the semantics, ST agents have to immediately. In order to preserve the semantics, ST agents have to
maintain the order of the requests, i.e. implement FIFO queuing. maintain the order of the requests, i.e., implement FIFO queuing.
Exceptionally, the CLOSE request at the origin and the LEAVE request Exceptionally, the CLOSE request at the origin and the LEAVE request
at the target may be immediately processed: in this cases, the queue at the target may be immediately processed: in these cases, the queue
is deleted and it is possible that requests in the queue are not is deleted and it is possible that requests in the queue are not
processed. processed.
The following state diagrams define the ST service. Separate diagrams The following state diagrams define the ST service. Separate diagrams
are presented for the origin and the targets. are presented for the origin and the targets.
The symbol (a/r)* indicates that all targets in the target list have The symbol (a/r)* indicates that all targets in the target list have
explicitly accepted or refused the stream, or refuse has been forced explicitly accepted or refused the stream, or refuse has been forced
after timeout. If the target list is empty, i.e. it contains no after timeout. If the target list is empty, i.e., it contains no
targets, the (a/r)* condition is immediately satisfied, so the empty targets, the (a/r)* condition is immediately satisfied, so the empty
stream is created and state ESTBL is entered. stream is created and state ESTBL is entered.
The separate OPEN and ADD primitives at the target are for conceptual The separate OPEN and ADD primitives at the target are for conceptual
purposes only. The target is actually unable to distinguish between an purposes only. The target is actually unable to distinguish between
OPEN and an ADD. This is reflected in Figure 7 and Table 3 through the an OPEN and an ADD. This is reflected in Figure 7 and Table 3 through
notation OPEN/ADD. the notation OPEN/ADD.
+------------+ +------------+
| |<-------------------+ | |<-------------------+
+---------->| IDLE |-------------+ | +---------->| IDLE |-------------+ |
| | | OPEN.req | | | | | OPEN.req | |
| +------------+ | | | +------------+ | |
CLOSE.req | CLOSE.req ^ ^ CLOSE.req V | CLOSE.req CLOSE.req | CLOSE.req ^ ^ CLOSE.req V | CLOSE.req
| | | +---------+ | | | | +---------+ |
| | | | PENDING |-|-+ JOIN.reject | | | | PENDING |-|-+ JOIN.reject
| | -------------| |<|-+ | | -------------| |<|-+
| JOIN.reject | +---------+ | | JOIN.reject | +---------+ |
| DROP.req +----------+ | | | DROP.req +----------+ | |
| +-----| | | | | +-----| | | |
| | | ESTDL | OPEN.(a/r)* | | | | | ESTDL | OPEN.(a/r)* | |
| +---->| |<------------+ | | +---->| |<------------+ |
| +----------+ | | +----------+ |
| | ^ | ^ | | | ^ | ^ |
| | | | | | | | | | | |
+----------+ CHG.req| | | | Add.(a/r)* +----------+ +----------+ CHG.req| | | | Add.(a/r)* +----------+
| |<-------+ | | +-------------- | | | |<-------+ | | +-------------- | |
| CHGING | | | | ADDING | | CHGING | | | | ADDING |
| |-----------+ +----------------->| | | |-----------+ +----------------->| |
+----------+ CHG.(a/r)* JOIN.ind +----------+ +----------+ CHG.(a/r)* JOIN.ind +----------+
| ^ ADD.req | ^ | ^ ADD.req | ^
| | | | | | | |
+---+ +---+ +---+ +---+
DROP.req DROP.req DROP.req DROP.req
JOIN.reject JOIN.reject JOIN.reject JOIN.reject
Figure 6: ST Service at the Origin Figure 6: ST Service at the Origin
+--------+ +--------+
| |-----------------------+ | |-----------------------+
| IDLE | | | IDLE | |
| |<---+ | OPEN/ADD.ind | |<---+ | OPEN/ADD.ind
+--------+ | CLOSE.ind | JOIN.req +--------+ | CLOSE.ind | JOIN.req
^ | OPEN/ADD.refuse | ^ | OPEN/ADD.refuse |
| | JOIN.refect-ind | | | JOIN.refect-ind |
CLOSE.ind | | V CLOSE.ind | | V
DROP.ind | | +---------+ DROP.ind | | +---------+
LEAVE.req | +-------------| | LEAVE.req | +-------------| |
| | PENDING | | | PENDING |
+-------+ | | +-------+ | |
| | +---------+ | | +---------+
| ESTBL | OPEN/ADD.accept | | ESTBL | OPEN/ADD.accept |
| |<-----------------------+ | |<-----------------------+
+-------+ +-------+
Figure 7: ST Service at the Target Figure 7: ST Service at the Target
2.3 State Transition Tables 2.3 State Transition Tables
Table 2 and Table 3 define which primitives can be processed from Table 2 and Table 3 define which primitives can be processed from
which states and the possible state transitions. which states and the possible state transitions.
+=============================================================================+ +======================================================================+
|Primitive |IDLE| PENDING | ESTBL | CHGING | ADDING | |Primitive |IDLE| PENDING | ESTBL | CHGING | ADDING |
|=============================================================================| |======================================================================|
|OPEN.req | ok | - | - | - | - | |OPEN.req | ok | - | - | - | - |
|OPEN.accept-ind| - |if(a,r)*->ESTBL| - | - | - | |OPEN.accept-ind| - |if(a,r)*->ESTBL| - | - | - |
|OPEN.refuse-ind| - |if(a,r)*->ESTBL| - | - | - | |OPEN.refuse-ind| - |if(a,r)*->ESTBL| - | - | - |
|ADD.req | - | queued |->ADDING| queued | queued | |ADD.req | - | queued |->ADDING| queued | queued |
|ADD.accept-ind | - | - | - | - |if(a,r)*->ESTBL| |ADD.accept-ind | - | - | - | - |if(a,r)* |
|ADD.refuse-ind | - | - | - | - |if(a,r)*->ESTBL| | | - | - | - | - |->ESTBL |
|JOIN.ind | - | queued |->ADDING| queued |queued | |ADD.refuse-ind | - | - | - | - |if(a,r)* |
|JOIN.reject | - | OK | ok | ok | ok | | | - | - | - | - |->ESTBL |
|DATA.req | - | - | ok | ok | ok | |JOIN.ind | - | queued |->ADDING| queued |queued |
|CHG.req | - | queued |->CHGING| queued |queued | |JOIN.reject | - | OK | ok | ok | ok |
|CHG.accept-ind | - | - | - |if(a,r)*->ESTBL| - | |DATA.req | - | - | ok | ok | ok |
|CHG.refuse.ind | - | - | - |if(a,r)*->ESTBL| - | |CHG.req | - | queued |->CHGING| queued |queued |
|DROP.req | - | - | ok | ok | ok | |CHG.accept-ind | - | - | - |if(a,r)* | - |
|LEAVE.ind | - | OK | ok | ok | ok | | | - | - | - |->ESTBL | - |
|CLOSE.req | - | OK | ok | ok | ok | |CHG.refuse.ind | - | - | - |if(a,r)* | - |
+-----------------------------------------------------------------------------+ | | - | - | - |->ESTBL | - |
|DROP.req | - | - | ok | ok | ok |
|LEAVE.ind | - | OK | ok | ok | ok |
|CLOSE.req | - | OK | ok | ok | ok |
+----------------------------------------------------------------------+
Table 2: Primitives and States at the Origin Table 2: Primitives and States at the Origin
+======================================================+ +======================================================+
| Primitive | IDLE | PENDING | ESTBL | | Primitive | IDLE | PENDING | ESTBL |
|======================================================| |======================================================|
| OPEN/ADD.ind | ->PENDING | - | - | | OPEN/ADD.ind | ->PENDING | - | - |
| OPEN/ADD.accept | - | ->ESTBL | - | | OPEN/ADD.accept | - | ->ESTBL | - |
| OPEN/ADD.refuse | - | ->IDLE | - | | OPEN/ADD.refuse | - | ->IDLE | - |
| JOIN.req | ->PENDING | - | - | | JOIN.req | ->PENDING | - | - |
| JOIN.reject-ind |- | ->IDLE | - | | JOIN.reject-ind |- | ->IDLE | - |
| DATA.ind | - | - | ok | | DATA.ind | - | - | ok |
| CHG.ind | - | - | ok | | CHG.ind | - | - | ok |
| CHG.accept | - | - | ok | | CHG.accept | - | - | ok |
| DROP.ind | - | ok | ok | | DROP.ind | - | ok | ok |
| LEAVE.req | - | ok | ok | | LEAVE.req | - | ok | ok |
| CLOSE.ind | - | ok | ok | | CLOSE.ind | - | ok | ok |
| CHG.ind | - | - | ok | | CHG.ind | - | - | ok |
+------------------------------------------------------+ +------------------------------------------------------+
Table 3: Primitives and States at the Target Table 3: Primitives and States at the Target
3 The ST2 Data Transfer Protocol 3. The ST2 Data Transfer Protocol
This section presents the ST2 data transfer protocol, ST. First, data This section presents the ST2 data transfer protocol, ST. First, data
transfer is described in Section 3.1, then, the data transfer protocol transfer is described in Section 3.1, then, the data transfer
functions are illustrated in Section 3.2. protocol functions are illustrated in Section 3.2.
3.1 Data Transfer with ST 3.1 Data Transfer with ST
Data transmission with ST is unreliable. An application is not Data transmission with ST is unreliable. An application is not
guaranteed that the data reaches its destinations and ST makes no guaranteed that the data reaches its destinations and ST makes no
attempts to recover from packet loss, e.g. due to the underlying attempts to recover from packet loss, e.g., due to the underlying
network. However, if the data reaches its destination, it should do so network. However, if the data reaches its destination, it should do
accordingly to the quality of service associated with the stream. so according to the quality of service associated with the stream.
Additionally, ST may deliver data corrupted in transmission. Many Additionally, ST may deliver data corrupted in transmission. Many
types of real-time data, such as digital audio and video, require types of real-time data, such as digital audio and video, require
partially correct delivery only. In many cases, retransmitted packets partially correct delivery only. In many cases, retransmitted packets
would arrive too late to meet their real-time delivery requirements. would arrive too late to meet their real-time delivery requirements.
On the other hand, depending on the data encoding and the particular On the other hand, depending on the data encoding and the particular
application, a small number of errors in stream data are acceptable. application, a small number of errors in stream data are acceptable.
In any case, reliability can be provided by layers on top of ST2 if In any case, reliability can be provided by layers on top of ST2 if
needed. needed.
skipping to change at page 24, line 37 skipping to change at page 26, line 42
as part of the ACCEPT message, see Section 8.6. The minimum MTU over as part of the ACCEPT message, see Section 8.6. The minimum MTU over
all paths can be calculated from the MTUs relative to the single all paths can be calculated from the MTUs relative to the single
paths. ST agents silently discard too long data packets, see also paths. ST agents silently discard too long data packets, see also
Section 5.1.1. Section 5.1.1.
An ST agent forwards the data only along already established paths to An ST agent forwards the data only along already established paths to
targets. A path is considered to be established once the next-hop ST targets. A path is considered to be established once the next-hop ST
agent on the path sends an ACCEPT message, see Section 2.2. This agent on the path sends an ACCEPT message, see Section 2.2. This
implies that the target and all other intermediate ST agents on the 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 path to the target are ready to handle the incoming data packets. In
no cases will an ST agent forward data to a next-hop ST agent that has no cases will an ST agent forward data to a next-hop ST agent that
not explicitly accepted the stream. has not explicitly accepted the stream.
To be reasonably sure that all targets receive the data with the To be reasonably sure that all targets receive the data with the
desired quality of service, an application should send the data only desired quality of service, an application should send the data only
after the whole stream has been established. Depending on the local after the whole stream has been established. Depending on the local
API, an application may not be prevented from sending data before the API, an application may not be prevented from sending data before the
completion of stream setup, but it should be aware that the data could completion of stream setup, but it should be aware that the data
be lost or not reach all intended targets. This behavior may actually could be lost or not reach all intended targets. This behavior may
be desirable to applications, such as those application that have actually be desirable to applications, such as those application that
multiple targets which can each process data as soon as it is have multiple targets which can each process data as soon as it is
available (e.g. a lecture or distributed gaming). available (e.g., a lecture or distributed gaming).
It is desirable for implementations to take advantage of networks that It is desirable for implementations to take advantage of networks
support multicast. If a network does not support multicast, or for the that support multicast. If a network does not support multicast, or
case where the next-hops are on different networks, multiple copies of for the case where the next-hops are on different networks, multiple
the data packet must be sent. copies of the data packet must be sent.
3.2 ST Protocol Functions 3.2 ST Protocol Functions
The ST protocol provides two functions: The ST protocol provides two functions:
o stream identification o stream identification
o data priority o data priority
3.2.1 Stream Identification 3.2.1 Stream Identification
ST data packets are encapsulated by an ST header containing the Stream ST data packets are encapsulated by an ST header containing the
IDentifier (SID). This SID is selected at the origin so that it is Stream IDentifier (SID). This SID is selected at the origin so that
globally unique over the Internet. The SID must be known by the setup it is globally unique over the Internet. The SID must be known by the
protocol as well. At stream establishment time, the setup protocol setup protocol as well. At stream establishment time, the setup
builds, at each agent traversed by the stream, an entry into its local protocol builds, at each agent traversed by the stream, an entry into
database containing stream information. The SID can be used as a its local database containing stream information. The SID can be used
reference into this database, to obtain quickly the necessary as a reference into this database, to obtain quickly the necessary
replication and forwarding information. replication and forwarding information.
Stream IDentifiers are intended to be used to make the packet Stream IDentifiers are intended to be used to make the packet
forwarding task most efficient. The time-critical operation is an forwarding task most efficient. The time-critical operation is an
intermediate ST agent receiving a packet from the previous-hop ST intermediate ST agent receiving a packet from the previous-hop ST
agent and forwarding it to the next-hop ST agents. agent and forwarding it to the next-hop ST agents.
The format of data PDUs including the SID is defined in Section 10.1. The format of data PDUs including the SID is defined in Section 10.1.
Stream IDentifier generation is discussed in Section 8.1. Stream IDentifier generation is discussed in Section 8.1.
3.2.2 Packet Discarding based on Data Priority 3.2.2 Packet Discarding based on Data Priority
ST provides a well defined quality of service to its applications. ST provides a well defined quality of service to its applications.
However, there may be cases where the network is temporarily congested However, there may be cases where the network is temporarily
and the ST agents have to discard certain packets to minimize the congested and the ST agents have to discard certain packets to
overall impact to other streams. The ST protocol provides a mechanism minimize the overall impact to other streams. The ST protocol
to discard data packets based on the Priority field in the data PDU, provides a mechanism to discard data packets based on the Priority
see Section 10.1. The application assigns each data packet with a field in the data PDU, see Section 10.1. The application assigns each
discard-priority level, carried into the Priority field. ST agents data packet with a discard-priority level, carried into the Priority
will attempt to discard lower priority packets first during periods of field. ST agents will attempt to discard lower priority packets first
network congestion. Applications may choose to send data at multiple during periods of network congestion. Applications may choose to send
priority levels so that less important data may be discarded first. data at multiple priority levels so that less important data may be
discarded first.
4 SCMP Functional Description 4. SCMP Functional Description
ST agents create and manage streams using the ST Control Message ST agents create and manage streams using the ST Control Message
Protocol (SCMP). Conceptually, SCMP resides immediately above ST (as Protocol (SCMP). Conceptually, SCMP resides immediately above ST (as
does ICMP above IP). SCMP follows a request-response model. SCMP does ICMP above IP). SCMP follows a request-response model. SCMP
messages are made reliable through the use of retransmission after messages are made reliable through the use of retransmission after
timeout. timeout.
This section contains a functional description of stream management This section contains a functional description of stream management
with SCMP. To help clarify the SCMP exchanges used to setup and with SCMP. To help clarify the SCMP exchanges used to setup and
maintain ST streams, we include an example of a simple network maintain ST streams, we include an example of a simple network
skipping to change at page 26, line 51 skipping to change at page 29, line 33
+----------| |----| C | +----------| |----| C |
| | +---+ | | +---+
+---------+ | Subnet3 | +---------+ | Subnet3 |
+---+ | | +---+ | | +---+ +---+ | | +---+ | | +---+
| F |---| Subnet4 |---| E |--| |----| D | | F |---| Subnet4 |---| E |--| |----| D |
+---+ | | +---+ +----------+ +---+ +---+ | | +---+ +----------+ +---+
+---------+ +---------+
Figure 8: Sample Topology for an ST Stream Figure 8: Sample Topology for an ST Stream
We first describe the possible types of stream in Section 4.1; Section We first describe the possible types of stream in Section 4.1;
4.2 introduces SCMP control message types; SCMP reliability is Section 4.2 introduces SCMP control message types; SCMP reliability
discussed in Section 4.3; stream options are covered in Section 4.4; is discussed in Section 4.3; stream options are covered in Section
stream setup is presented in Section 4.5; Section 4.6 illustrates 4.4; stream setup is presented in Section 4.5; Section 4.6
stream modification including stream expansion, reduction, changes of illustrates stream modification including stream expansion,
the quality of service associated to a stream. Finally, stream reduction, changes of the quality of service associated to a stream.
deletion is handled in Section 4.7. Finally, stream deletion is handled in Section 4.7.
4.1 Types of Streams 4.1 Types of Streams
SCMP allows for the setup and management of different types of SCMP allows for the setup and management of different types of
streams. Streams differ in the way they are built and the information streams. Streams differ in the way they are built and the information
maintained on connected targets. maintained on connected targets.
4.1.1 Stream Building 4.1.1 Stream Building
Streams may be built in a sender-oriented fashion, receiver-oriented Streams may be built in a sender-oriented fashion, receiver-oriented
fashion, or with a mixed approach: fashion, or with a mixed approach:
o in the sender-oriented fashion, the application at the origin o in the sender-oriented fashion, the application at the origin
provides the ST agent with the list of receivers for the stream. New provides the ST agent with the list of receivers for the stream. New
targets, if any, are also added from the origin. targets, if any, are also added from the origin.
o in the receiver-oriented approach, the application at the origin o in the receiver-oriented approach, the application at the origin
creates an empty stream that contains no targets. Each target joins creates an empty stream that contains no targets. Each target then
then the stream autonomously. joins the stream autonomously.
o in the mixed approach, the application at the origin creates a o in the mixed approach, the application at the origin creates a
stream that contains some targets and other targets join then the stream that contains some targets and other targets join the stream
stream autonomously. autonomously.
ST2 provides stream options to support sender-oriented and mixed ST2 provides stream options to support sender-oriented and mixed
approach steams. Receiver-oriented streams can be emulated through the approach steams. Receiver-oriented streams can be emulated through
use of mixed streams. The fashion by which targets may be added to a the use of mixed streams. The fashion by which targets may be added
particular stream is controlled via join authorization levels. Join to a particular stream is controlled via join authorization levels.
authorization levels are described in Section 4.4.2. Join authorization levels are described in Section 4.4.2.
4.1.2 Knowledge of Receivers 4.1.2 Knowledge of Receivers
When streams are built in the sender-oriented fashion, all ST agents When streams are built in the sender-oriented fashion, all ST agents
will have full information on all targets down stream of a particular will have full information on all targets down stream of a particular
agent. In this case, target information is relayed down stream from agent. In this case, target information is relayed down stream from
agent-to-agent during stream set-up. agent-to-agent during stream set-up.
When targets add themselves to mixed approach streams, upstream ST When targets add themselves to mixed approach streams, upstream ST
agents may or may not be informed. Propagation of information on agents may or may not be informed. Propagation of information on
targets that "join" a stream is also controlled via join authorization targets that "join" a stream is also controlled via join
levels. As previously mentioned, join authorization levels are authorization levels. As previously mentioned, join authorization
described in Section 4.4.2. levels are described in Section 4.4.2.
This leads to two types of streams: This leads to two types of streams:
o full target information is propagated in a full-state stream. For o full target information is propagated in a full-state stream. For
such streams, all agents are aware of all downstream targets such streams, all agents are aware of all downstream targets
connected to the stream. This results in target information being connected to the stream. This results in target information being
maintained at the origin and routers. Operations on single targets maintained at the origin and at intermediate agents. Operations on
are always possible, i.e. change a certain target, or, drop that single targets are always possible, i.e., change a certain target,
target from the stream. It is also always possible for any ST agent or, drop that target from the stream. It is also always possible for
to attempt recovery of all downsteam targets. any ST agent to attempt recovery of all downstream targets.
o in light-weight streams, it is possible that the origin and other o in light-weight streams, it is possible that the origin and other
upstream agents have no knowledge about some targets. This results upstream agents have no knowledge about some targets. This results
in less maintained state and easier stream management, but it limits in less maintained state and easier stream management, but it limits
operations on specific targets. Special actions may be required to operations on specific targets. Special actions may be required to
support change and drop operations on unknown targets, see Section support change and drop operations on unknown targets, see Section
5.7. Also, stream recovery may not be possible. Of course, generic 5.7. Also, stream recovery may not be possible. Of course, generic
functions such as deleting the whole stream, are still possible. It functions such as deleting the whole stream, are still possible. It
is expected that applications that will have a large number of is expected that applications that will have a large number of
targets will use light-weight streams in order to limit state in targets will use light-weight streams in order to limit state in
agents and the number of targets per control message. agents and the number of targets per control message.
Full-state streams serve well applications as video conferencing or Full-state streams serve well applications as video conferencing or
distributed gaming, where it is important to have knowledge on the distributed gaming, where it is important to have knowledge on the
connected receivers, e.g. to limit who participates. Light-weight connected receivers, e.g., to limit who participates. Light-weight
streams may be exploited by applications such as remote lecturing or streams may be exploited by applications such as remote lecturing or
playback applications of radio and TV broadcast where the receivers do playback applications of radio and TV broadcast where the receivers
not need to be known by the sender. Section 4.4.2 defines join do not need to be known by the sender. Section 4.4.2 defines join
authorization levels, which support two types of full-state streams authorization levels, which support two types of full-state streams
and one type of light-weight streams. and one type of light-weight stream.
4.2 Control PDUs 4.2 Control PDUs
SCMP defines the following PDUs (the main purpose of each PDU is also SCMP defines the following PDUs (the main purpose of each PDU is also
indicated): indicated):
1. ACCEPT to accept a new stream 1. ACCEPT to accept a new stream
2. ACK to acknowledge an incoming message 2. ACK to acknowledge an incoming message
3. CHANGE to change the quality of service associated with 3. CHANGE to change the quality of service associated with
a stream a stream
4. CONNECT to establish a new stream or add new targets to 4. CONNECT to establish a new stream or add new targets to
an existing stream an existing stream
5. DISCONNECT to remove some or all of the stream's targets 5. DISCONNECT to remove some or all of the stream's targets
6. ERROR to indicate an error contained into an incoming 6. ERROR to indicate an error contained in an incoming
message message
7. HELLO to detect failures of neighbour ST agents 7. HELLO to detect failures of neighbor ST agents
8. JOIN to request stream joining from a target 8. JOIN to request stream joining from a target
9. JOIN-REJECT to reject a stream joining request from a target 9. JOIN-REJECT to reject a stream joining request from a target
10. NOTIFY to inform an ST agent of a significant event 10. NOTIFY to inform an ST agent of a significant event
11. REFUSE to refuse the establishment of a new stream 11. REFUSE to refuse the establishment of a new stream
12. STATUS to query an ST agent on a specific stream 12. STATUS to query an ST agent on a specific stream
13. STATUS-RESPONSE to reply queries on a specific stream 13. STATUS-RESPONSE to reply queries on a specific stream
SCMP follows a request-response model with all requests expecting SCMP follows a request-response model with all requests expecting
responses. Retransmission after timeout is used to allow for lost or responses. Retransmission after timeout is used to allow for lost or
ignored messages. Control messages do not extend across packet ignored messages. Control messages do not extend across packet
boundaries; if a control message is too large for the MTU of a hop, its boundaries; if a control message is too large for the MTU of a hop,
information is partitioned and a control message per partition is its information is partitioned and a control message per partition is
sent, as described in Section 5.1.2. sent, as described in Section 5.1.2.
The ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY and CONNECT and CHANGE request messages are answered with ACCEPT messages
REFUSE must always be explicitly acknowledged: which indicate success, and with REFUSE messages which indicate
failure. JOIN messages are answered with either a CONNECT message
indicating success, or with a JOIN-REJECT message indicating failure.
Targets may be removed from a stream by either the origin or the
target via the DISCONNECT and REFUSE messages.
o with an ACK message, if the message was received correctly and it The ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY
was possible to parse and correctly extract and interpret its and REFUSE messages must always be explicitly acknowledged:
header, fields and parameters,
o with an ERROR message, if a syntax error was detected in the header, o with an ACK message, if the message was received correctly and it
fields, or parameters included in the message. The errored PDU may was possible to parse and correctly extract and interpret its
be optionally returned as part of the ERROR message. An ERROR header, fields and parameters,
message indicates a syntax error only. If any other errors are
detected, it is necessary to first acknowledge with ACK and then
take appropriate actions. For instance, suppose a CHANGE message
contains an unknown SID: first, an ACK message has to be sent, then
a REFUSE message with ReasonCode (SIDUnknown) follows.
If no ACK or ERROR message are received before the correspondent timer o with an ERROR message, if a syntax error was detected in the header,
expires, a timeout failure occurs. The way an ST agent should handle fields, or parameters included in the message. The errored PDU may
timeout failures is described in Section 5.2. be optionally returned as part of the ERROR message. An ERROR
message indicates a syntax error only. If any other errors are
detected, it is necessary to first acknowledge with ACK and then
take appropriate actions. For instance, suppose a CHANGE message
contains an unknown SID: first, an ACK message has to be sent, then
a REFUSE message with ReasonCode (SIDUnknown) follows.
If no ACK or ERROR message are received before the correspondent
timer expires, a timeout failure occurs. The way an ST agent should
handle timeout failures is described in Section 5.2.
ACK, ERROR, and STATUS-RESPONSE messages are never acknowledged. ACK, ERROR, and STATUS-RESPONSE messages are never acknowledged.
HELLO messages are a special case. If they contain a syntax error, an HELLO messages are a special case. If they contain a syntax error, an
ERROR message should be generated in response. Otherwise, no ERROR message should be generated in response. Otherwise, no
acknowledgment or response should be generated. Use of HELLO messages acknowledgment or response should be generated. Use of HELLO messages
is discussed in Section 6.1.2. is discussed in Section 6.1.2.
STATUS messages containing a syntax error should be replied with an STATUS messages containing a syntax error should be answered with an
ERROR message. Otherwise, a STATUS-RESPONSE message should be sent ERROR message. Otherwise, a STATUS-RESPONSE message should be sent
back in response. Use of STATUS and STATUS-RESPONSE are discussed in back in response. Use of STATUS and STATUS-RESPONSE are discussed in
Section 8.4. Section 8.4.
4.3 SCMP Reliability 4.3 SCMP Reliability
SCMP is made reliable through the use of retransmission when response SCMP is made reliable through the use of retransmission when a
is not received in a timely manner. The ACCEPT, CHANGE, CONNECT, response is not received in a timely manner. The ACCEPT, CHANGE,
DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and REFUSE messages all must be CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and REFUSE messages
answered with an ACK message, see Section 4.2. In general, when all must be answered with an ACK message, see Section 4.2. In
sending a SCMP message which requires an ACK response, the sending ST general, when sending a SCMP message which requires an ACK response,
agent needs to set the Toxxxx timer (where xxxx is the SCMP message the sending ST agent needs to set the Toxxxx timer (where xxxx is the
type, e.g. ToConnect). If it does not receive an ACK before the Toxxxx SCMP message type, e.g., ToConnect). If it does not receive an ACK
timer expires, the ST agent should retransmit the SCMP message. If no before the Toxxxx timer expires, the ST agent should retransmit the
ACK has been received within Nxxxx retransmissions, then a SCMP SCMP message. If no ACK has been received within Nxxxx
timeout condition occurs and the ST agent enters its SCMP timeout retransmissions, then a SCMP timeout condition occurs and the ST
recovery state. The actions performed by the ST agent as the result of agent enters its SCMP timeout recovery state. The actions performed
the SCMP timeout condition differ for different SCMP messages and are by the ST agent as the result of the SCMP timeout condition differ
described in Section 5.2. for different SCMP messages and are described in Section 5.2.
For some SCMP messages (CONNECT, CHANGE, JOIN, and STATUS) the sending For some SCMP messages (CONNECT, CHANGE, JOIN, and STATUS) the
ST agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN- sending ST agent also expects a response back (ACCEPT/REFUSE,
REJECT) after ACK has been received. For these cases, the ST agent CONNECT/JOIN- REJECT) after ACK has been received. For these cases,
needs to set the ToxxxxResp timer after it receives the ACK. (As the ST agent needs to set the ToxxxxResp timer after it receives the
before, xxxx is the initiating SCMP message type, e.g. ToConnectResp). ACK. (As before, xxxx is the initiating SCMP message type, e.g.,
If it does not receive the appropriate response back when ToxxxxResp ToConnectResp). If it does not receive the appropriate response back
expires, the ST agent updates its state and performs appropriate when ToxxxxResp expires, the ST agent updates its state and performs
recovery action as described in Section 5.2. appropriate recovery action as described in Section 5.2. Suggested
constants are given in Section 10.5.4.
The timeout and retransmission algorithm is implementation dependent The timeout and retransmission algorithm is implementation dependent
and it is outside the scope of this document. Most existing algorithms and it is outside the scope of this document. Most existing
are based on an estimation of the Round Trip Time (RTT) between two algorithms are based on an estimation of the Round Trip Time (RTT)
agents. Therefore, SCMP contains a mechanism, see Section 8.5, to between two agents. Therefore, SCMP contains a mechanism, see Section
estimate this RTT. Note that the timeout related variable names 8.5, to estimate this RTT. Note that the timeout related variable
described above are for reference purposes only, implementors may names described above are for reference purposes only, implementors
choose to combine certain variables. may choose to combine certain variables.
4.4 Stream Options 4.4 Stream Options
An application may select among some stream options. The desired An application may select among some stream options. The desired
options are indicated to the ST agent at the origin when a new stream options are indicated to the ST agent at the origin when a new stream
is created. Options apply to single streams and are valid during the is created. Options apply to single streams and are valid during the
whole stream's lifetime. The options chosen by the application at the whole stream's lifetime. The options chosen by the application at the
origin are included into the initial CONNECT message, see Section origin are included into the initial CONNECT message, see Section
4.5.3. When a CONNECT message reaches a target, the application at the 4.5.3. When a CONNECT message reaches a target, the application at
target is notified of the stream options that have been selected, see the target is notified of the stream options that have been selected,
Section 4.5.5. see Section 4.5.5.
4.4.1 No Recovery 4.4.1 No Recovery
When a stream failure is detected, an ST agent would normally attempt When a stream failure is detected, an ST agent would normally attempt
stream recovery, as described in Section 6.2. The NoRecovery option is stream recovery, as described in Section 6.2. The NoRecovery option
used to indicate that ST agents should not attempt recovery for the is used to indicate that ST agents should not attempt recovery for
stream. The protocol behaviour in case the NoRecovery option has been the stream. The protocol behavior in the case that the NoRecovery
selected is illustrated in Section 6.2. The NoRecovery option is option has been selected is illustrated in Section 6.2. The
specified by setting the S-bit in the CONNECT message, see Section NoRecovery option is specified by setting the S-bit in the CONNECT
10.4.4. The S-bit can be set only by the origin and it is never message, see Section 10.4.4. The S-bit can be set only by the origin
modified by intermediate and target ST agents. and it is never modified by intermediate and target ST agents.
4.4.2 Join Authorization Level 4.4.2 Join Authorization Level
When a new stream is created, it is necessary to define the join When a new stream is created, it is necessary to define the join
authorization level associated with the stream. This level determines authorization level associated with the stream. This level determines
the protocol behavior in case of stream joining, see Section 4.1 and the protocol behavior in case of stream joining, see Section 4.1 and
Section 4.6.3. The join authorization level for a stream is defined by Section 4.6.3. The join authorization level for a stream is defined
the J-bit and N-bit in the CONNECT message header, see Section 10.4.4. by the J-bit and N-bit in the CONNECT message header, see Section
One of the following authorization levels has to be selected: 10.4.4. One of the following authorization levels has to be
selected:
o Level 0 - Refuse Join (JN = 00): No targets are allowed to join this o Level 0 - Refuse Join (JN = 00): No targets are allowed to join this
stream. stream.
o Level 1 - OK, Notify Origin (JN = 01): Targets are allowed to join o Level 1 - OK, Notify Origin (JN = 01): Targets are allowed to join
the stream. The origin is notified that the target has joined. the stream. The origin is notified that the target has joined.
o Level 2 - OK (JN = 10): Targets are allowed to join the stream. No o Level 2 - OK (JN = 10): Targets are allowed to join the stream. No
notification is sent to the stream origin. notification is sent to the stream origin.
Some applications may choose to maintain tight control on their Some applications may choose to maintain tight control on their
streams and will not permit any connections without the origin's streams and will not permit any connections without the origin's
permission. For such streams, target applications may request to be permission. For such streams, target applications may request to be
added by sending an out-of-band, i.e. via regular IP, request to the added by sending an out-of-band, i.e., via regular IP, request to the
origin. The origin, if it so chooses, can then add the target origin. The origin, if it so chooses, can then add the target
following the process described in Section 4.6.1. following the process described in Section 4.6.1.
The selected authorization level impacts stream handling and the state The selected authorization level impacts stream handling and the
that is maintained for the stream, as described in Section 4.1. state that is maintained for the stream, as described in Section 4.1.
4.4.3 Record Route 4.4.3 Record Route
The RecordRoute option can be used to request the route between the The RecordRoute option can be used to request the route between the
origin and a target be recorded and delivered to the application. This origin and a target be recorded and delivered to the application.
option may be used while connecting, accepting, changing, or refusing This option may be used while connecting, accepting, changing, or
a stream. The results of a RecordRoute option requested by the origin, refusing a stream. The results of a RecordRoute option requested by
i.e. as part of the CONNECT or CHANGE messages, are delivered to the the origin, i.e., as part of the CONNECT or CHANGE messages, are
target. The results of a RecordRoute option requested by the target, delivered to the target. The results of a RecordRoute option
i.e. as part of the ACCEPT or REFUSE messages, are delivered to the requested by the target, i.e., as part of the ACCEPT or REFUSE
origin. messages, are delivered to the origin.
The RecordRoute option is specified by adding the RecordRoute The RecordRoute option is specified by adding the RecordRoute
parameter to the mentioned SCMP messages. The format of the parameter to the mentioned SCMP messages. The format of the
RecordRoute parameter is shown in Section 10.3.5. When adding this RecordRoute parameter is shown in Section 10.3.5. When adding this
parameter, the ST agent at the origin must determine the number of parameter, the ST agent at the origin must determine the number of
entries that may be recorded as explained in Section 10.3.5. entries that may be recorded as explained in Section 10.3.5.
4.4.4 User Data 4.4.4 User Data
The UserData option can be used by applications to transport The UserData option can be used by applications to transport
application specific data along with some SCMP control messages. This application specific data along with some SCMP control messages. This
option can be included with ACCEPT, CHANGE, CONNECT, DISCONNECT, and option can be included with ACCEPT, CHANGE, CONNECT, DISCONNECT, and
REFUSE messages. The format of the UserData parameter is shown in REFUSE messages. The format of the UserData parameter is shown in
Section 10.3.7. This option may be included by the origin, or the Section 10.3.7. This option may be included by the origin, or the
target, by adding the UserData parameter to the mentioned SCMP target, by adding the UserData parameter to the mentioned SCMP
messages. This option may only be included once per SCMP message. messages. This option may only be included once per SCMP message.
4.5 Stream Setup 4.5 Stream Setup
This section presents a description of stream setup. For simplicity, This section presents a description of stream setup. For simplicity,
we assume that everything succeeds, e.g. any required resources are we assume that everything succeeds, e.g., any required resources are
available, messages are properly delivered, and the routing is available, messages are properly delivered, and the routing is
correct. Possible failures in the setup phase are handled in Section correct. Possible failures in the setup phase are handled in Section
5.2. 5.2.
4.5.1 Information from the Application 4.5.1 Information from the Application
Before stream setup can be started, the application has to collect the Before stream setup can be started, the application has to collect
necessary information to determine the characteristics for the the necessary information to determine the characteristics for the
connection. This includes identifying the participants and selecting connection. This includes identifying the participants and selecting
the QoS parameters of the data flow. Information passed to the ST the QoS parameters of the data flow. Information passed to the ST
agent by the application includes: agent by the application includes:
o the list of the stream's targets (Section 10.3.6). The list may be o the list of the stream's targets (Section 10.3.6). The list may be
empty (Section 4.5.3.1), empty (Section 4.5.3.1),
o the flow specification containing the desired quality of service for o the flow specification containing the desired quality of service for
the stream (Section 9), the stream (Section 9),
o information on the groups in which the stream is a member, if any o information on the groups in which the stream is a member, if any
(Section 7), (Section 7),
o information on the options selected for the stream (Section 4.4). o information on the options selected for the stream (Section 4.4).
4.5.2 Initial Setup at the Origin 4.5.2 Initial Setup at the Origin
The ST agent at the origin then performs the following operations: The ST agent at the origin then performs the following operations:
o allocates a stream ID (SID) for the stream (Section 8.1), o allocates a stream ID (SID) for the stream (Section 8.1),
o invokes the routing function to determine the set of next-hops for o invokes the routing function to determine the set of next-hops for
the stream (Section 4.5.2.1), the stream (Section 4.5.2.1),
o invokes the Local Resource Manager (LRM) to reserve resources o invokes the Local Resource Manager (LRM) to reserve resources
(Section 4.5.2.2), (Section 4.5.2.2),
o creates local database entries to store information on the new o creates local database entries to store information on the new
stream, stream,
o propagates the stream creation request to the next-hops determined o propagates the stream creation request to the next-hops determined
by the routing function (Section 4.5.3). by the routing function (Section 4.5.3).
4.5.2.1 Invoking the Routing Function 4.5.2.1 Invoking the Routing Function
An ST agent that is setting up a stream invokes the routing function An ST agent that is setting up a stream invokes the routing function
to find the next-hop to reach each of the targets specified by the to find the next-hop to reach each of the targets specified by the
target list provided by the application. This is similar to the target list provided by the application. This is similar to the
routing decision in IP. However, in this case the route is to a routing decision in IP. However, in this case the route is to a
multitude of targets with QoS requirements rather than to a single multitude of targets with QoS requirements rather than to a single
destination. destination.
The result of the routing function is a set of next-hop ST agents. The The result of the routing function is a set of next-hop ST agents.
set of next-hops selected by the routing function is not necessarily The set of next-hops selected by the routing function is not
the same as the set of next-hops that IP would select given a number of necessarily the same as the set of next-hops that IP would select
independent IP datagrams to the same destinations. The routing given a number of independent IP datagrams to the same destinations.
algorithm may attempt to optimize parameters other than the number of The routing algorithm may attempt to optimize parameters other than
hops that the packets will take, such as delay, local network the number of hops that the packets will take, such as delay, local
bandwidth consumption, or total internet bandwidth consumption. network bandwidth consumption, or total internet bandwidth
Alternatively, the routing algorithm may use a simple route lookup for consumption. Alternatively, the routing algorithm may use a simple
each target. route lookup for each target.
Once a next-hop is selected by the routing function, it persists for Once a next-hop is selected by the routing function, it persists for
the whole stream lifetime, unless a network failure occurs. the whole stream lifetime, unless a network failure occurs.
4.5.2.2 Reserving Resources 4.5.2.2 Reserving Resources
The ST agent invokes the Local Resource Manager (LRM) to perform the The ST agent invokes the Local Resource Manager (LRM) to perform the
appropriate reservations. The ST agent presents the LRM with appropriate reservations. The ST agent presents the LRM with
information including: information including:
o the flow specification with the desired quality of service for the o the flow specification with the desired quality of service for the
stream (Section 9), stream (Section 9),
o the version number associated with the flow specification o the version number associated with the flow specification
(Section 9). (Section 9).
o information on the groups the stream is member in, if any o information on the groups the stream is member in, if any
(Section 7), (Section 7),
The flow specification contains information needed by the LRM to The flow specification contains information needed by the LRM to
allocate resources. The LRM updates the flow specification contents allocate resources. The LRM updates the flow specification contents
information before returning it to the ST agent. Section 9.2.3 defines information before returning it to the ST agent. Section 9.2.3
the fields of the flow specification to be updated by the LRM. defines the fields of the flow specification to be updated by the
LRM.
The membership of a stream in a group may affect the amount of The membership of a stream in a group may affect the amount of
resources that have to be allocated by the LRM, see Section 7. resources that have to be allocated by the LRM, see Section 7.
4.5.3 Sending CONNECT Messages 4.5.3 Sending CONNECT Messages
The ST agent sends a CONNECT message to each of the next-hop ST agents The ST agent sends a CONNECT message to each of the next-hop ST
identified by the routing function. Each CONNECT message contains the agents identified by the routing function. Each CONNECT message
SID, the selected stream options, the FlowSpec, and a TargetList. The contains the SID, the selected stream options, the FlowSpec, and a
format of the CONNECT message is defined by Section 10.4.4. In TargetList. The format of the CONNECT message is defined by Section
general, the FlowSpec and TargetList depend on both the next-hop and 10.4.4. In general, the FlowSpec and TargetList depend on both the
the intervening network. Each TargetList is a subset of the original next-hop and the intervening network. Each TargetList is a subset of
TargetList, identifying the targets that are to be reached through the the original TargetList, identifying the targets that are to be
next-hop to which the CONNECT message is being sent. reached through the next-hop to which the CONNECT message is being
sent.
The TargetList may be empty, see Section 4.5.3.1; if the TargetList The TargetList may be empty, see Section 4.5.3.1; if the TargetList
causes a too long CONNECT message to be generated, the CONNECT message causes a too long CONNECT message to be generated, the CONNECT
is partitioned as explained in Section 5.1.2. If multiple next-hops message is partitioned as explained in Section 5.1.2. If multiple
are to be reached through a network that supports network level next-hops are to be reached through a network that supports network
multicast, a different CONNECT message must nevertheless be sent to level multicast, a different CONNECT message must nevertheless be
each next-hop since each will have a different TargetList. sent to each next-hop since each will have a different TargetList.
4.5.3.1 Empty Target List 4.5.3.1 Empty Target List
An application at the origin may request the local ST agent to create An application at the origin may request the local ST agent to create
an empty stream. It does so by passing an empty TargetList to the an empty stream. It does so by passing an empty TargetList to the
local ST agent during the initial stream setup. When the local ST local ST agent during the initial stream setup. When the local ST
agent receives request to create an empty stream, it allocates the agent receives a request to create an empty stream, it allocates the
stream ID (SID), updates its local database entries to store stream ID (SID), updates its local database entries to store
information on the new stream and notifies the application that stream information on the new stream and notifies the application that
setup is complete. The local ST agent does not generate any CONNECT stream setup is complete. The local ST agent does not generate any
message for streams with an empty TargetList. Targets may be later CONNECT message for streams with an empty TargetList. Targets may be
added by the origin, see Section 4.6.1, or they may autonomously join later added by the origin, see Section 4.6.1, or they may
the stream, see Section 4.6.3. autonomously join the stream, see Section 4.6.3.
4.5.4 CONNECT Processing by an Intermediate ST agent 4.5.4 CONNECT Processing by an Intermediate ST agent
An ST agent receiving a CONNECT message, assuming no errors, responds An ST agent receiving a CONNECT message, assuming no errors, responds
to the previous-hop with an ACK. The ACK message must identify the to the previous-hop with an ACK. The ACK message must identify the
CONNECT message to which it corresponds by including the reference CONNECT message to which it corresponds by including the reference
number indicated by the Reference field of the CONNECT message. The number indicated by the Reference field of the CONNECT message. The
intermediate ST agent calls the routing function, invokes the LRM to intermediate ST agent calls the routing function, invokes the LRM to
reserve resources, and then propagates the CONNECT messages to its reserve resources, and then propagates the CONNECT messages to its
next-hops, as described in the previous sections. next-hops, as described in the previous sections.
4.5.5 CONNECT Processing at the Targets 4.5.5 CONNECT Processing at the Targets
An ST agent that is the target of a CONNECT message, assuming no An ST agent that is the target of a CONNECT message, assuming no
errors, responds to the previous-hop with an ACK. The ST agent invokes errors, responds to the previous-hop with an ACK. The ST agent
the LRM to reserve local resources and then queries the specified invokes the LRM to reserve local resources and then queries the
application process whether or not it is willing to accept the specified application process whether or not it is willing to accept
connection. the connection.
The application is presented with parameters from the CONNECT message The application is presented with parameters from the CONNECT message
including the SID, the selected stream options, Origin, FlowSpec, including the SID, the selected stream options, Origin, FlowSpec,
TargetList, and Group, if any, to be used as a basis for its decision. TargetList, and Group, if any, to be used as a basis for its
The application is identified by a combination of the NextPcol field, decision. The application is identified by a combination of the
from the Origin parameter, and the service access point, or SAP, field NextPcol field, from the Origin parameter, and the service access
included in the correspondent (usually single remaining) Target of the point, or SAP, field included in the correspondent (usually single
TargetList. The contents of the SAP field may specify the port or remaining) Target of the TargetList. The contents of the SAP field
other local identifier for use by the protocol layer above the host ST may specify the port or other local identifier for use by the
layer. Subsequently received data packets will carry the SID, that can protocol layer above the host ST layer. Subsequently received data
be mapped into this information and be used for their delivery. packets will carry the SID, that can be mapped into this information
and be used for their delivery.
Finally, based on the application's decision, the ST agent sends to Finally, based on the application's decision, the ST agent sends to
the previous-hop from which the CONNECT message was received either an the previous-hop from which the CONNECT message was received either
ACCEPT or REFUSE message. Since the ACCEPT (or REFUSE) message has to an ACCEPT or REFUSE message. Since the ACCEPT (or REFUSE) message has
be acknowledged by the previous-hop, it is assigned a new Reference to be acknowledged by the previous-hop, it is assigned a new
number that will be returned in the ACK. The CONNECT message to which Reference number that will be returned in the ACK. The CONNECT
ACCEPT (or REFUSE) is a reply is identified by placing the CONNECT's message to which ACCEPT (or REFUSE) is a reply is identified by
Reference number in the LnkReference field of ACCEPT (or REFUSE). The placing the CONNECT's Reference number in the LnkReference field of
ACCEPT message contains the FlowSpec as accepted by the application at ACCEPT (or REFUSE). The ACCEPT message contains the FlowSpec as
the target. accepted by the application at the target.
4.5.6 ACCEPT Processing by an Intermediate ST agent 4.5.6 ACCEPT Processing by an Intermediate ST agent
When an intermediate ST agent receives an ACCEPT, it first verifies When an intermediate ST agent receives an ACCEPT, it first verifies
that the message is a response to an earlier CONNECT. If not, it that the message is a response to an earlier CONNECT. If not, it
responds to the next-hop ST agent with an ERROR message, with responds to the next-hop ST agent with an ERROR message, with
ReasonCode (LnkRefUnknown). Otherwise, it responds to the next-hop ST ReasonCode (LnkRefUnknown). Otherwise, it responds to the next-hop ST
agent with an ACK, and propagates the individual ACCEPT message to the agent with an ACK, and propagates the individual ACCEPT message to
previous-hop along the same path traced by the CONNECT but in the the previous-hop along the same path traced by the CONNECT but in the
reverse direction toward the origin. reverse direction toward the origin.
The FlowSpec is included in the ACCEPT message so that the origin and The FlowSpec is included in the ACCEPT message so that the origin and
intermediate ST agents can gain access to the information that was intermediate ST agents can gain access to the information that was
accumulated as the CONNECT traversed the internet. Note that the accumulated as the CONNECT traversed the internet. Note that the
resources, as specified in the FlowSpec in the ACCEPT message, may resources, as specified in the FlowSpec in the ACCEPT message, may
differ from the resources that were reserved when the CONNECT was differ from the resources that were reserved when the CONNECT was
originally processed. Therefore, the ST agent presents the LRM with originally processed. Therefore, the ST agent presents the LRM with
the FlowSpec included in the ACCEPT message. It is expected that each the FlowSpec included in the ACCEPT message. It is expected that each
LRM adjusts local reservations releasing any excess resources. The LRM LRM adjusts local reservations releasing any excess resources. The
may choose not to adjust local reservations when that adjustment may LRM may choose not to adjust local reservations when that adjustment
result in the loss of needed resources. It may also choose to wait to may result in the loss of needed resources. It may also choose to
adjust allocated resources until all targets in transition have been wait to adjust allocated resources until all targets in transition
accepted or refused. have been accepted or refused.
In the case where the intermediate ST agent is acting as the origin In the case where the intermediate ST agent is acting as the origin
with respect to this target, see Section 4.6.3.1, the ACCEPT message with respect to this target, see Section 4.6.3.1, the ACCEPT message
is not propagated upstream. is not propagated upstream.
4.5.7 ACCEPT Processing by the Origin 4.5.7 ACCEPT Processing by the Origin
The origin will eventually receive an ACCEPT (or REFUSE) message from The origin will eventually receive an ACCEPT (or REFUSE) message from
each of the targets. As each ACCEPT is received, the application is each of the targets. As each ACCEPT is received, the application is
notified of the target and the resources that were successfully notified of the target and the resources that were successfully
allocated along the path to it, as specified in the FlowSpec contained allocated along the path to it, as specified in the FlowSpec
in the ACCEPT message. The application may then use the information to contained in the ACCEPT message. The application may then use the
either adopt or terminate the portion of the stream to each target. information to either adopt or terminate the portion of the stream to
When ACCEPT (or REFUSE) from all targets have been received at the each target.
origin, the application is notified that stream setup is complete.
When an ACCEPT is received by the origin, the path to the target is When an ACCEPT is received by the origin, the path to the target is
considered to be established and the ST agent is allowed to forward considered to be established and the ST agent is allowed to forward
the data along this path as explained in Section 2 and in Section 3.1. the data along this path as explained in Section 2 and in Section
3.1.
4.5.8 REFUSE Processing by the Intermediate ST agent 4.5.8 REFUSE Processing by the Intermediate ST agent
If an application at a target does not wish to participate in the If an application at a target does not wish to participate in the
stream, it sends a REFUSE message back to the origin with ReasonCode stream, it sends a REFUSE message back to the origin with ReasonCode
(ApplDisconnect). An intermediate ST agent that receives a REFUSE (ApplDisconnect). An intermediate ST agent that receives a REFUSE
message with ReasonCode (ApplDisconnect) acknowledges it by sending an message with ReasonCode (ApplDisconnect) acknowledges it by sending
ACK to the next-hop, invokes the LRM to adjusts reservations as an ACK to the next-hop, invokes the LRM to adjusts reservations as
appropriate, deletes the target entry from the internal database, and appropriate, deletes the target entry from the internal database, and
propagates the REFUSE message back to the previous-hop ST agent. propagates the REFUSE message back to the previous-hop ST agent.
In the case where the intermediate ST agent is acting as the origin In the case where the intermediate ST agent is acting as the origin
with respect to this target, see Section 4.6.3.1, the REFUSE message with respect to this target, see Section 4.6.3.1, the REFUSE message
is only propagated upstream when there are no more downstream agents is only propagated upstream when there are no more downstream agents
participating in the stream. In this case, the agent indicates that participating in the stream. In this case, the agent indicates that
the agent is to be removed from the stream propagating the REFUSE the agent is to be removed from the stream propagating the REFUSE
message with the G-bit set (1). message with the G-bit set (1).
4.5.9 REFUSE Processing by the Origin 4.5.9 REFUSE Processing by the Origin
When the REFUSE message reaches the origin, the ST agent at the origin When the REFUSE message reaches the origin, the ST agent at the
sends an ACK and notifies the application that the target is no longer origin sends an ACK and notifies the application that the target is
part of the stream and also if the stream has no remaining targets. If no longer part of the stream and also if the stream has no remaining
there are no remaining targets, the application may wish to terminate targets. If there are no remaining targets, the application may wish
the stream or keep the stream active to allow addition of targets, or to terminate the stream, or keep the stream active to allow addition
stream joining as described in Section 4.6.3. of targets or stream joining as described in Section 4.6.3.
4.5.10 Other Functions during Stream Setup 4.5.10 Other Functions during Stream Setup
Some other functions have to be accomplished by an ST agent as CONNECT Some other functions have to be accomplished by an ST agent as
messages travel downstream and ACCEPT (or REFUSE) messages travel CONNECT messages travel downstream and ACCEPT (or REFUSE) messages
upstream during the stream setup phase. They were not mentioned in the travel upstream during the stream setup phase. They were not
previous sections to keep the discussion as simple as possible. These mentioned in the previous sections to keep the discussion as simple
functions include: as possible. These functions include:
o computing the smallest Maximum Transmission Unit size over the path o computing the smallest Maximum Transmission Unit size over the path
to the targets, as part of the MTU discovery mechanism presented in to the targets, as part of the MTU discovery mechanism presented in
Section 8.6. This is done by updating the MaxMsgSize field of the Section 8.6. This is done by updating the MaxMsgSize field of the
CONNECT message, see Section 10.4.4. This value is carried back to CONNECT message, see Section 10.4.4. This value is carried back to
origin in the MaxMsgSize field of the ACCEPT message, see Section origin in the MaxMsgSize field of the ACCEPT message, see Section
10.4.1. 10.4.1.
o counting the number of IP clouds that have to be traversed to reach o counting the number of IP clouds to be traversed to reach the
the targets, as part of the IP encapsulation mechanism described in targets, if any. IP clouds are traversed when the IP encapsulation
Section 8.7. This is done by updating the IPHops field of the mechanism is used. This mechanism described in Section 8.7.
CONNECT message, see Section 10.4.4. This value is carried back to Encapsulating agents update the IPHops field of the CONNECT message,
origin in the IPHops field of the ACCEPT message, see Section see Section 10.4.4. The resulting value is carried back to origin in
10.4.1. the IPHops field of the ACCEPT message, see Section 10.4.1.
o updating the RecoveryTimeout value for the stream based on what can o updating the RecoveryTimeout value for the stream based on what can
the agent can support. This is part of the stream recovery the agent can support. This is part of the stream recovery
mechanism, in Section 6.2. This is done by updating the mechanism, in Section 6.2. This is done by updating the
RecoveryTimeout field of the CONNECT message, see Section 10.4.4. RecoveryTimeout field of the CONNECT message, see Section 10.4.4.
This value is carried back to origin in the RecoveryTimeout field of This value is carried back to origin in the RecoveryTimeout field of
the ACCEPT message, see Section 10.4.1. the ACCEPT message, see Section 10.4.1.
4.6 Modifying an Existing Stream 4.6 Modifying an Existing Stream
Some applications may wish to modify a stream after it has been Some applications may wish to modify a stream after it has been
created. Possible changes include expanding a stream, reducing it, and created. Possible changes include expanding a stream, reducing it,
changing its FlowSpec. The origin may add or remove targets as and changing its FlowSpec. The origin may add or remove targets as
described in Section 4.6.1 and Section 4.6.2. Targets may request to described in Section 4.6.1 and Section 4.6.2. Targets may request to
join the stream as described in Section 4.6.3 or, they may decide to join the stream as described in Section 4.6.3 or, they may decide to
leave a stream as described in Section 4.6.4. Section 4.6.5 explains leave a stream as described in Section 4.6.4. Section 4.6.5 explains
how to change a stream's FlowSpec. how to change a stream's FlowSpec.
As defined by Section 2, an ST agent can handle only one stream As defined by Section 2, an ST agent can handle only one stream
modification at a time. If a stream modification operation is already modification at a time. If a stream modification operation is already
underway, further requests are queued and handled when the previous underway, further requests are queued and handled when the previous
operation has been completed. This also applies to two subsequent operation has been completed. This also applies to two subsequent
requests of the same kind, e.g. two subsequent changes to the requests of the same kind, e.g., two subsequent changes to the
FlowSpec. FlowSpec.
4.6.1 The Origin Adding New Targets 4.6.1 The Origin Adding New Targets
It is possible for an application at the origin to add new targets to 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. an existing stream any time after the stream has been established.
Before new targets are added, the application has to collect the Before new targets are added, the application has to collect the
necessary information on the new targets. Such information is passed necessary information on the new targets. Such information is passed
to the ST agent at the origin. to the ST agent at the origin.
The ST agent at the origin issues a CONNECT message that contains the The ST agent at the origin issues a CONNECT message that contains the
SID, the FlowSpec, and the TargetList specifying the new targets. This SID, the FlowSpec, and the TargetList specifying the new targets.
is similar to sending a CONNECT message during stream establishment, This is similar to sending a CONNECT message during stream
with the following exceptions: the origin checks that a) the SID is establishment, with the following exceptions: the origin checks that
valid, b) the targets are not already members of the stream, c) that a) the SID is valid, b) the targets are not already members of the
the LRM evaluates the FlowSpec of the new target to be the same as the stream, c) that the LRM evaluates the FlowSpec of the new target to
FlowSpec of the existing stream, i.e it requires an equal or smaller be the same as the FlowSpec of the existing stream, i.e., it requires
amount of resources to be allocated. If the FlowSpec of the new target an equal or smaller amount of resources to be allocated. If the
does not match the FlowSpec of the existing stream, an error is FlowSpec of the new target does not match the FlowSpec of the
generated with ReasonCode (FlowSpecMismatch). Functions to compare existing stream, an error is generated with ReasonCode
flow specifications are provided by the LRM, see Section 1.4.5. (FlowSpecMismatch). Functions to compare flow specifications are
provided by the LRM, see Section 1.4.5.
An intermediate ST agent that is already a participant in the stream An intermediate ST agent that is already a participant in the stream
looks at the SID and StreamCreationTime, and verifies that the stream looks at the SID and StreamCreationTime, and verifies that the stream
is the same. It then checks if the intersection of the TargetList and is the same. It then checks if the intersection of the TargetList and
the targets of the established stream is empty. If this is not the the targets of the established stream is empty. If this is not the
case, it responds with a REFUSE message with ReasonCode (TargetExists) case, it responds with a REFUSE message with ReasonCode
that contains a TargetList of those targets that were duplicates. To (TargetExists) that contains a TargetList of those targets that were
indicate that the stream exists, and includes the listed targets, the duplicates. To indicate that the stream exists, and includes the
ST agent sets to one (1) the E-bit of the REFUSE message, see Section listed targets, the ST agent sets to one (1) the E-bit of the REFUSE
10.4.11. message, see Section 10.4.11. The agent then proceeds processing
each new target in the TargetList.
The agent then proceeds processing each new target in the TargetList.
For each new target in the TargetList, processing is much the same as For each new target in the TargetList, processing is much the same as
for the original CONNECT. The CONNECT is acknowledged, propagated, and for the original CONNECT. The CONNECT is acknowledged, propagated,
network resources are reserved. Intermediate or target ST agents that and network resources are reserved. Intermediate or target ST agents
are not already participants in the stream behave as in case of stream that are not already participants in the stream behave as in the case
setup (see Section 4.5.4 and Section 4.5.5). of stream setup (see Section 4.5.4 and Section 4.5.5).
4.6.2 The Origin Removing a Target 4.6.2 The Origin Removing a Target
It is possible for an application at the origin to remove existing It is possible for an application at the origin to remove existing
targets of a stream any time after the targets have accepted the targets of a stream any time after the targets have accepted the
stream. The application at the origin specifies the set of targets stream. The application at the origin specifies the set of targets
that are to be removed and informs the local ST agent. Based on this that are to be removed and informs the local ST agent. Based on this
information, the ST agent sends DISCONNECT messages with the information, the ST agent sends DISCONNECT messages with the
ReasonCode (ApplDisconnect) to the next-hops relative to the targets. ReasonCode (ApplDisconnect) to the next-hops relative to the targets.
An ST agent that receives a DISCONNECT message must acknowledge it by An ST agent that receives a DISCONNECT message must acknowledge it by
sending an ACK to the previous-hop. The ST agent updates its state and sending an ACK to the previous-hop. The ST agent updates its state
notifies the LRM of the target deletion so that the LRM can modify and notifies the LRM of the target deletion so that the LRM can
reservations as appropriate. When the DISCONNECT message reaches the modify reservations as appropriate. When the DISCONNECT message
target, the ST agent also notifies the application that the target is reaches the target, the ST agent also notifies the application that
no longer part of the stream. When there are no remaining targets that the target is no longer part of the stream. When there are no
can be reached through a particular next-hop, the ST agent informs the remaining targets that can be reached through a particular next-hop,
LRM and it deletes the next-hop from its next-hops set. the ST agent informs the LRM and it deletes the next-hop from its
next-hops set.
SCMP also provides a flooding mechanism to delete targets that joined SCMP also provides a flooding mechanism to delete targets that joined
the stream without notifying the origin. The special case of target the stream without notifying the origin. The special case of target
deletion via flooding is described in Section 5.7. deletion via flooding is described in Section 5.7.
4.6.3 A Target Joining a Stream 4.6.3 A Target Joining a Stream
An application may request to join an existing stream. It has to An application may request to join an existing stream. It has to
collect information on the stream including the stream ID (SID) and collect information on the stream including the stream ID (SID) and
the IP address of the stream's origin. This can be done out-of-band, the IP address of the stream's origin. This can be done out-of-band,
e.g. via regular IP. The information is then passed to the local ST e.g., via regular IP. The information is then passed to the local ST
agent. The ST agent generates a JOIN message containing the agent. The ST agent generates a JOIN message containing the
application's request to join the stream and sends it toward the application's request to join the stream and sends it toward the
stream origin. stream origin.
An ST agent receiving a JOIN message, assuming no errors, responds An ST agent receiving a JOIN message, assuming no errors, responds
with an ACK. The ACK message must identify the JOIN message to which with an ACK. The ACK message must identify the JOIN message to which
it corresponds by including the Reference number indicated by the it corresponds by including the Reference number indicated by the
Reference field of the JOIN message. If the ST agent is not traversed Reference field of the JOIN message. If the ST agent is not traversed
by the stream that has to be joined, it propagates the JOIN message by the stream that has to be joined, it propagates the JOIN message
toward the stream's origin. Once a JOIN message has been acknowledged, toward the stream's origin. Once a JOIN message has been
ST agents do not retain any state information related to the JOIN acknowledged, ST agents do not retain any state information related
message. to the JOIN message.
Eventually, an ST agent traversed by the stream or the stream's origin Eventually, an ST agent traversed by the stream or the stream's
itself is reached. This agent must respond to a received JOIN first origin itself is reached. This agent must respond to a received JOIN
with an ACK to the ST agent from which the message was received, then, first with an ACK to the ST agent from which the message was
it issues either a CONNECT or a JOIN-REJECT message and sends it received, then, it issues either a CONNECT or a JOIN-REJECT message
toward the target. The response to the join request is based on the and sends it toward the target. The response to the join request is
join authorization level associated with the stream, see Section based on the join authorization level associated with the stream, see
4.4.2: Section 4.4.2:
o If the stream has authorization level #0 (refuse join): o If the stream has authorization level #0 (refuse join):
The ST agent sends a JOIN-REJECT message toward the target with The ST agent sends a JOIN-REJECT message toward the target with
ReasonCode (JoinAuthFailure). ReasonCode (JoinAuthFailure).
o If the stream has authorization level #1 (ok, notify origin): o If the stream has authorization level #1 (ok, notify origin):
The ST agent sends a CONNECT message toward the target with a The ST agent sends a CONNECT message toward the target with a
TargetList including the target that requested to join the stream. TargetList including the target that requested to join the stream.
This eventually results in adding the target to the stream. When
the ST agent receives the ACCEPT message indicating that the new
target has been added, it does not propagate the ACCEPT message
backwards (Section 4.5.6). Instead, it issues a NOTIFY message
with ReasonCode (TargetJoined) so that upstream agents, including
the origin, may add the new target to maintained state
information. The NOTIFY message includes all target specific
information.
o If the stream has authorization level #2 (ok): This eventually results in adding the target to the stream. When
The ST agent sends a CONNECT message toward the target with a the ST agent receives the ACCEPT message indicating that the new
TargetList including the target that requested to join the stream. target has been added, it does not propagate the ACCEPT message
This eventually results in adding the target to the stream. When backwards (Section 4.5.6). Instead, it issues a NOTIFY message
the ST agent receives the ACCEPT message indicating that the new with ReasonCode (TargetJoined) so that upstream agents, including
target has been added, it does not propagate the ACCEPT message the origin, may add the new target to maintained state
backwards (Section 4.5.6), nor does it notify the origin. A NOTIFY information. The NOTIFY message includes all target specific
message is generated with ReasonCode (TargetJoined) if the target information.
specific information needs to be propagated back to the origin. An
example of such information is change in MTU, see Section 8.6.
4.6.3.1 Router as Origin o If the stream has authorization level #2 (ok):
The ST agent sends a CONNECT message toward the target with a
TargetList including the target that requested to join the stream.
This eventually results in adding the target to the stream. When
the ST agent receives the ACCEPT message indicating that the new
target has been added, it does not propagate the ACCEPT message
backwards (Section 4.5.6), nor does it notify the origin. A NOTIFY
message is generated with ReasonCode (TargetJoined) if the target
specific information needs to be propagated back to the origin. An
example of such information is change in MTU, see Section 8.6.
4.6.3.1 Intermediate Agent (Router) as Origin
When a stream has join authorization level #2, see Section 4.4.2, it When a stream has join authorization level #2, see Section 4.4.2, it
is possible that the stream origin is unaware of some targets is possible that the stream origin is unaware of some targets
participating in the stream. In this case, the router ST agent that participating in the stream. In this case, the ST intermediate agent
first sent a CONNECT message to this target has to act as the stream that first sent a CONNECT message to this target has to act as the
origin for the given target. This includes: stream origin for the given target. This includes:
o if the whole stream is deleted, the router must disconnect the o if the whole stream is deleted, the intermediate agent must
target. disconnect the target.
o if the stream FlowSpec is changed, the router must change the o if the stream FlowSpec is changed, the intermediate agent must
FlowSpec for the target as appropriate. change the FlowSpec for the target as appropriate.
o proper handling of ACCEPT and REFUSE messages, without propagation o proper handling of ACCEPT and REFUSE messages, without propagation
to upstream ST agents. to upstream ST agents.
o generation of NOTIFY messages when needed. (As described above.) o generation of NOTIFY messages when needed. (As described above.)
The router behaves normally for all other targets added to the stream The intermediate agent behaves normally for all other targets added
as a consequence of a CONNECT message issued by the origin. to the stream as a consequence of a CONNECT message issued by the
origin.
4.6.4 A Target Deleting Itself 4.6.4 A Target Deleting Itself
The application at the target may inform the local ST agent that it The application at the target may inform the local ST agent that it
wants to be removed from the stream. The ST agent then forms a REFUSE wants to be removed from the stream. The ST agent then forms a REFUSE
message with the target itself as the only entry in the TargetList and message with the target itself as the only entry in the TargetList
with ReasonCode (ApplDisconnect). The REFUSE message is sent back to and with ReasonCode (ApplDisconnect). The REFUSE message is sent back
the origin via the previous-hop. If a stream has multiple targets and to the origin via the previous-hop. If a stream has multiple targets
one target leaves the stream using this REFUSE mechanism, the stream and one target leaves the stream using this REFUSE mechanism, the
to the other targets is not affected; the stream continues to exist. stream to the other targets is not affected; the stream continues to
exist.
An ST agent that receives a REFUSE message acknowledges it by sending An ST agent that receives a REFUSE message acknowledges it by sending
an ACK to the next-hop. The target is deleted and the LRM is notified an ACK to the next-hop. The target is deleted and the LRM is notified
so that it adjusts reservations as appropriate. The REFUSE message is so that it adjusts reservations as appropriate. The REFUSE message is
also propagated back to the previous-hop ST agent except in the case also propagated back to the previous-hop ST agent except in the case
where the agent is acting as the origin. In this case a NOTIFY may be where the agent is acting as the origin. In this case a NOTIFY may be
propagated instead, see Section 4.6.3. propagated instead, see Section 4.6.3.
When the REFUSE reaches the origin, the origin sends an ACK and When the REFUSE reaches the origin, the origin sends an ACK and
notifies the application that the target is no longer part of the notifies the application that the target is no longer part of the
stream. stream.
4.6.5 Changing a Stream's FlowSpec 4.6.5 Changing a Stream's FlowSpec
The application at the origin may wish to change the FlowSpec of an The application at the origin may wish to change the FlowSpec of an
established stream. Changing the FlowSpec is a critical operation and established stream. Changing the FlowSpec is a critical operation and
it may even lead in some cases to the deletion of the affected it may even lead in some cases to the deletion of the affected
targets. Possible problems with FlowSpec changes are discussed in targets. Possible problems with FlowSpec changes are discussed in
Section 5.6. Section 5.6.
To change the stream's FlowSpec, the application informs the ST agent To change the stream's FlowSpec, the application informs the ST agent
at the origin of the new FlowSpec and of the list of targets relative at the origin of the new FlowSpec and of the list of targets relative
to the change. The ST agent at the origin then issues one CHANGE to the change. The ST agent at the origin then issues one CHANGE
message per next-hop including the new FlowSpec and sends it to the message per next-hop including the new FlowSpec and sends it to the
relevant next-hop ST agents. If the G-bit field of the CHANGE message relevant next-hop ST agents. If the G-bit field of the CHANGE message
is set (1), the change affects all targets in the stream. is set (1), the change affects all targets in the stream.
The CHANGE message contains a bit called I-bit, see Section 10.4.3. By The CHANGE message contains a bit called I-bit, see Section 10.4.3.
default, the I-bit is set to zero (0) to indicate that the LRM is By default, the I-bit is set to zero (0) to indicate that the LRM is
expected to try and perform the requested FlowSpec change without expected to try and perform the requested FlowSpec change without
risking to tear down the stream. Applications that desire a higher risking to tear down the stream. Applications that desire a higher
probability of success and are willing to take the risk of breaking probability of success and are willing to take the risk of breaking
the stream can indicate this by setting the I-bit to one (1). the stream can indicate this by setting the I-bit to one (1).
Applications that require the requested modification in order to Applications that require the requested modification in order to
continue operating are expected to set this bit. continue operating are expected to set this bit.
An intermediate ST agent that receives a CHANGE message first sends an An intermediate ST agent that receives a CHANGE message first sends
ACK to the previous-hop and then provides the FlowSpec to the LRM. If an ACK to the previous-hop and then provides the FlowSpec to the LRM.
the LRM can perform the change, the ST agent propagates the CHANGE If the LRM can perform the change, the ST agent propagates the CHANGE
messages along the established paths. messages along the established paths.
If the whole process succeeds, the CHANGE messages will eventually If the whole process succeeds, the CHANGE messages will eventually
reach the targets. Targets respond with an ACCEPT (or REFUSE) message reach the targets. Targets respond with an ACCEPT (or REFUSE) message
that is propagated back to the origin. In processing the ACCEPT that is propagated back to the origin. In processing the ACCEPT
message on the way back to the origin, excess resources may be message on the way back to the origin, excess resources may be
released by the LRM as described in Section 4.5.6. The REFUSE message released by the LRM as described in Section 4.5.6. The REFUSE message
must have the ReasonCode (ApplRefused). must have the ReasonCode (ApplRefused).
SCMP also provides a flooding mechanism to change targets that joined SCMP also provides a flooding mechanism to change targets that joined
the stream without notifying the origin. The special case of target the stream without notifying the origin. The special case of target
change via flooding is described in Section 5.7. change via flooding is described in Section 5.7.
4.7 Stream Tear Down 4.7 Stream Tear Down
A stream is usually terminated by the origin when it has no further A stream is usually terminated by the origin when it has no further
data to send. A stream is also torn down if the application should data to send. A stream is also torn down if the application should
terminate abnormally or if certain network failures are encountered. terminate abnormally or if certain network failures are encountered.
Processing in this case is identical to the previous descriptions Processing in this case is identical to the previous descriptions
except that the ReasonCode (ApplAbort, NetworkFailure, etc.) is except that the ReasonCode (ApplAbort, NetworkFailure, etc.) is
different. different.
When all targets have left a stream, the origin notifies the When all targets have left a stream, the origin notifies the
application of that fact, and the application is then responsible for application of that fact, and the application is then responsible for
terminating the stream. Note, however, that the application may decide terminating the stream. Note, however, that the application may
to add targets to the stream instead of terminating it, or may just decide to add targets to the stream instead of terminating it, or may
leave the stream open with no targets in order to permit stream joins. just leave the stream open with no targets in order to permit stream
joins.
5 Exceptional Cases 5. Exceptional Cases
The previous descriptions covered the simple cases where everything The previous descriptions covered the simple cases where everything
worked. We now discuss what happens when things do not succeed. worked. We now discuss what happens when things do not succeed.
Included are situations where messages exceed a network MTU, are lost, Included are situations where messages exceed a network MTU, are
the requested resources are not available, the routing fails or is lost, the requested resources are not available, the routing fails or
inconsistent. is inconsistent.
5.1 Long ST Messages 5.1 Long ST Messages
It is possible that an ST agent, or an application, will need to send 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). a message that exceeds a network's Maximum Transmission Unit (MTU).
This case must be handled but not via generic fragmentation, since ST2 This case must be handled but not via generic fragmentation, since
does not support generic fragmentation of either data or control ST2 does not support generic fragmentation of either data or control
messages. messages.
5.1.1 Handling of Long Data Packets 5.1.1 Handling of Long Data Packets
ST agents discard data packets that exceed the MTU of the next-hop ST agents discard data packets that exceed the MTU of the next-hop
network. No error message is generated. Applications should avoid network. No error message is generated. Applications should avoid
sending data packets larger than the minimum MTU supported by a given sending data packets larger than the minimum MTU supported by a given
stream. The application, both at the origin and targets, can learn the stream. The application, both at the origin and targets, can learn
stream minimum MTU through the MTU discovery mechanism described in the stream minimum MTU through the MTU discovery mechanism described
Section 8.6. in Section 8.6.
5.1.2 Handling of Long Control Packets 5.1.2 Handling of Long Control Packets
Each ST agent knows the MTU of the networks to which it is connected, Each ST agent knows the MTU of the networks to which it is connected,
and those MTUs restrict the size of the SCMP message it can send. An and those MTUs restrict the size of the SCMP message it can send. An
SCMP message size can exceed the MTU of a given network for a number of SCMP message size can exceed the MTU of a given network for a number
reasons: of reasons:
o the TargetList parameter (Section 10.3.6) may be too long; o the TargetList parameter (Section 10.3.6) may be too long;
o the RecordRoute parameter (Section 10.3.5) may be too long. o the RecordRoute parameter (Section 10.3.5) may be too long.
o the UserData parameter (Section 10.3.7) may be too long; o the UserData parameter (Section 10.3.7) may be too long;
o the PDUInError field of the ERROR message (Section 10.4.6) may be o the PDUInError field of the ERROR message (Section 10.4.6) may be
too long; too long;
An ST agent receiving or generating a too long SCMP message should: An ST agent receiving or generating a too long SCMP message should:
o break the message into multiple messages, each carrying part of the o break the message into multiple messages, each carrying part of the
TargetList. Any RecordRoute and UserData parameters are replicated TargetList. Any RecordRoute and UserData parameters are replicated
in each message for delivery to all targets. Applications that in each message for delivery to all targets. Applications that
support a large number of targets may avoid using long TargetList support a large number of targets may avoid using long TargetList
parameters, and are expected to do so, by exploiting the stream parameters, and are expected to do so, by exploiting the stream
joining functions, see Section 4.6.3. One exception to this rule joining functions, see Section 4.6.3. One exception to this rule
exists. In the case of a long TargetList parameter to be included in exists. In the case of a long TargetList parameter to be included in
a STATUS-RESPONSE message, the TargetList parameter is just a STATUS-RESPONSE message, the TargetList parameter is just
truncated to the point where the list can fit in a single message, truncated to the point where the list can fit in a single message,
see Section 8.4. see Section 8.4.
o for down stream agents: if the TargetList parameter contains a o for down stream agents: if the TargetList parameter contains a
single Target element and the message size is still too long, the ST single Target element and the message size is still too long, the ST
agent should issue a REFUSE message with ReasonCode agent should issue a REFUSE message with ReasonCode
(RecordRouteSize) if the size of the RecordRoute parameter causes (RecordRouteSize) if the size of the RecordRoute parameter causes
the SCMP message size to exceed the network MTU, or with ReasonCode the SCMP message size to exceed the network MTU, or with ReasonCode
(UserDataSize) if the size of the UserData parameter causes the SCMP (UserDataSize) if the size of the UserData parameter causes the SCMP
message size to exceed the network MTU. If both RecordRoute and message size to exceed the network MTU. If both RecordRoute and
UserData parameters are present the ReasonCode (UserDataSize) should UserData parameters are present the ReasonCode (UserDataSize) should
be sent. For messages generated at the target: the target ST agent be sent. For messages generated at the target: the target ST agent
must check for SCMP messages that may exceed the MTU on the complete must check for SCMP messages that may exceed the MTU on the complete
target-to-origin path, and inform the application that a too long target-to-origin path, and inform the application that a too long
SCMP messages has been generated. The format for the error reporting SCMP messages has been generated. The format for the error reporting
is a local implementation issue. The error codes are the same as is a local implementation issue. The error codes are the same as
previously stated. previously stated.
ST agents generating too long ERROR messages, simply truncate the ST agents generating too long ERROR messages, simply truncate the
PDUInError field to the point where the message is smaller than the PDUInError field to the point where the message is smaller than the
network MTU. network MTU.
5.2 Timeout Failures 5.2 Timeout Failures
As described in Section 4.3, SCMP message delivery is made reliable As described in Section 4.3, SCMP message delivery is made reliable
through the use of acknowledgments, timeouts, and retransmission. The through the use of acknowledgments, timeouts, and retransmission. The
ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and ACCEPT, CHANGE, CONNECT, DISCONNECT, JOIN, JOIN-REJECT, NOTIFY, and
REFUSE messages must always be acknowledged, see Section 4.2. In REFUSE messages must always be acknowledged, see Section 4.2. In
addition, for some SCMP messages (CHANGE, CONNECT, JOIN) the sending addition, for some SCMP messages (CHANGE, CONNECT, JOIN) the sending
ST agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN- ST agent also expects a response back (ACCEPT/REFUSE, CONNECT/JOIN-
REJECT) after ACK has been received. Also, the STATUS message must be REJECT) after an ACK has been received. Also, the STATUS message must
replied to with a STATUS-RESPONSE message. be answered with a STATUS-RESPONSE message.
The following sections describe the handling of each of the possible The following sections describe the handling of each of the possible
failure cases due to timeout situations while waiting for an failure cases due to timeout situations while waiting for an
acknowledgment or a response. The timeout related variables, and their acknowledgment or a response. The timeout related variables, and
names, used in the next sections are for reference purposes only. They their names, used in the next sections are for reference purposes
may be implementation specific. Different implementations are not only. They may be implementation specific. Different implementations
required to share variable names, or even the mechanism by which the are not required to share variable names, or even the mechanism by
timeout and retransmission behavior is implemented. which the timeout and retransmission behavior is implemented.
5.2.1 Failure due to ACCEPT Acknowledgment Timeout 5.2.1 Failure due to ACCEPT Acknowledgment Timeout
An ST agent that sends an ACCEPT message upstream expects an ACK from An ST agent that sends an ACCEPT message upstream expects an ACK from
the previous-hop ST agent. If no ACK is received before the ToAccept the previous-hop ST agent. If no ACK is received before the ToAccept
timeout expires, the ST agent should retry and send the ACCEPT message timeout expires, the ST agent should retry and send the ACCEPT
again. After NAccept unsuccessful retries, the ST agent sends a REFUSE message again. After NAccept unsuccessful retries, the ST agent sends
message toward the origin, and a DISCONNECT message toward the a REFUSE message toward the origin, and a DISCONNECT message toward
targets. Both REFUSE and DISCONNECT must identify the affected targets the targets. Both REFUSE and DISCONNECT must identify the affected
and specify the ReasonCode (RetransTimeout). targets and specify the ReasonCode (RetransTimeout).
5.2.2 Failure due to CHANGE Acknowledgment Timeout 5.2.2 Failure due to CHANGE Acknowledgment Timeout
An ST agent that sends a CHANGE message downstream expects an ACK from An ST agent that sends a CHANGE message downstream expects an ACK
the next-hop ST agent. If no ACK is received before the ToChange from the next-hop ST agent. If no ACK is received before the ToChange
timeout expires, the ST agent should retry and send the CHANGE message timeout expires, the ST agent should retry and send the CHANGE
again. After NChange unsuccessful retries, the ST agent aborts the message again. After NChange unsuccessful retries, the ST agent
change attempt by sending a REFUSE message toward the origin, and a aborts the change attempt by sending a REFUSE message toward the
DISCONNECT message toward the targets. Both REFUSE and DISCONNECT must origin, and a DISCONNECT message toward the targets. Both REFUSE and
identify the affected targets and specify the ReasonCode DISCONNECT must identify the affected targets and specify the
(RetransTimeout). ReasonCode (RetransTimeout).
5.2.3 Failure due to CHANGE Response Timeout 5.2.3 Failure due to CHANGE Response Timeout
Only the origin ST agent implements this timeout. After correctly Only the origin ST agent implements this timeout. After correctly
receiving the ACK to a CHANGE message, an ST agent expects to receive receiving the ACK to a CHANGE message, an ST agent expects to receive
an ACCEPT, or REFUSE message in response. If one of these messages is an ACCEPT, or REFUSE message in response. If one of these messages is
not received before the ToChangeResp timer expires, the ST agent at not received before the ToChangeResp timer expires, the ST agent at
the origin aborts the change attempt, and behaves as if a REFUSE the origin aborts the change attempt, and behaves as if a REFUSE
message with the E-bit set and with ReasonCode (ResponseTimeout) is message with the E-bit set and with ReasonCode (ResponseTimeout) is
received. received.
5.2.4 Failure due to CONNECT Acknowledgment Timeout 5.2.4 Failure due to CONNECT Acknowledgment Timeout
An ST agent that sends a CONNECT message downstream expects an ACK An ST agent that sends a CONNECT message downstream expects an ACK
from the next-hop ST agent. If no ACK is received before the ToConnect from the next-hop ST agent. If no ACK is received before the
timeout expires, the ST agent should retry and send the CONNECT ToConnect timeout expires, the ST agent should retry and send the
message again. After NConnect unsuccessful retries, the ST agent sends CONNECT message again. After NConnect unsuccessful retries, the ST
a REFUSE message toward the origin, and a DISCONNECT message toward agent sends a REFUSE message toward the origin, and a DISCONNECT
the targets. Both REFUSE and DISCONNECT must identify the affected message toward the targets. Both REFUSE and DISCONNECT must identify
targets and specify the ReasonCode (RetransTimeout). the affected targets and specify the ReasonCode (RetransTimeout).
5.2.5 Failure due to CONNECT Response Timeout 5.2.5 Failure due to CONNECT Response Timeout
Only the origin ST agent implements this timeout. After correctly Only the origin ST agent implements this timeout. After correctly
receiving the ACK to a CONNECT message, an ST agent expects to receive receiving the ACK to a CONNECT message, an ST agent expects to
an ACCEPT or REFUSE message in response. If one of these messages is receive an ACCEPT or REFUSE message in response. If one of these
not received before the ToConnectResp timer expires, the origin ST messages is not received before the ToConnectResp timer expires, the
agent aborts the connection setup attempt, acts as if a REFUSE message origin ST agent aborts the connection setup attempt, acts as if a
is received, and it sends a DISCONNECT message toward the targets. REFUSE message is received, and it sends a DISCONNECT message toward
Both REFUSE and DISCONNECT must identify the affected targets and the targets. Both REFUSE and DISCONNECT must identify the affected
specify the ReasonCode (ResponseTimeout). targets and specify the ReasonCode (ResponseTimeout).
5.2.6 Failure due to DISCONNECT Acknowledgment Timeout 5.2.6 Failure due to DISCONNECT Acknowledgment Timeout
An ST agent that sends a DISCONNECT message downstream expects an ACK An ST agent that sends a DISCONNECT message downstream expects an ACK
from the next-hop ST agent. If no ACK is received before the from the next-hop ST agent. If no ACK is received before the
ToDisconnect timeout expires, the ST agent should retry and send the ToDisconnect timeout expires, the ST agent should retry and send the
DISCONNECT message again. After NDisconnect unsuccessful retries, the DISCONNECT message again. After NDisconnect unsuccessful retries, the
ST agent simply gives up and it assumes the next-hop ST agent is not ST agent simply gives up and it assumes the next-hop ST agent is not
part in the stream any more. part in the stream any more.
5.2.7 Failure due to JOIN Acknowledgment Timeout 5.2.7 Failure due to JOIN Acknowledgment Timeout
An ST agent that sends a JOIN message toward the origin expects an ACK An ST agent that sends a JOIN message toward the origin expects an
from a neighbour ST agent. If no ACK is received before the ToJoin ACK from a neighbor ST agent. If no ACK is received before the ToJoin
timeout expires, the ST agent should retry and send the JOIN message timeout expires, the ST agent should retry and send the JOIN message
again. After NJoin unsuccessful retries, the ST agent sends a JOIN- again. After NJoin unsuccessful retries, the ST agent sends a JOIN-
REJECT message back in the direction of the target with ReasonCode REJECT message back in the direction of the target with ReasonCode
(RetransTimeout). (RetransTimeout).
5.2.8 Failure due to JOIN Response Timeout 5.2.8 Failure due to JOIN Response Timeout
Only the target agent implements this timeout. After correctly Only the target agent implements this timeout. After correctly
receiving the ACK to a JOIN message, the ST agent at the target receiving the ACK to a JOIN message, the ST agent at the target
expects to receive a CONNECT or JOIN-REJECT message in response. If expects to receive a CONNECT or JOIN-REJECT message in response. If
one of these message is not received before the ToJoinResp timer one of these message is not received before the ToJoinResp timer
expires, the ST agent aborts the stream join attempt and returns an expires, the ST agent aborts the stream join attempt and returns an
error corresponding with ReasonCode (RetransTimeout) to the error corresponding with ReasonCode (RetransTimeout) to the
application. application.
Note that, after correctly receiving the ACK to a JOIN message, Note that, after correctly receiving the ACK to a JOIN message,
intermediate ST agents do not maintain any state on the stream joining intermediate ST agents do not maintain any state on the stream
attempt. As a consequence, they do not set the ToJoinResp timer and do joining attempt. As a consequence, they do not set the ToJoinResp
not wait for a CONNECT or JOIN-REJECT message. This is described in timer and do not wait for a CONNECT or JOIN-REJECT message. This is
Section 4.6.3. described in Section 4.6.3.
5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout 5.2.9 Failure due to JOIN-REJECT Acknowledgment Timeout
An ST agent that sends a JOIN-REJECT message toward the target expects An ST agent that sends a JOIN-REJECT message toward the target
an ACK from a neighbour ST agent. If no ACK is received before the expects an ACK from a neighbor ST agent. If no ACK is received before
ToJoinReject timeout expires, the ST agent should retry and send the the ToJoinReject timeout expires, the ST agent should retry and send
JOIN-REJECT message again. After NJoinReject unsuccessful retries, the the JOIN-REJECT message again. After NJoinReject unsuccessful
ST agent simply gives up. retries, the ST agent simply gives up.
5.2.10 Failure due to NOTIFY Acknowledgment Timeout 5.2.10 Failure due to NOTIFY Acknowledgment Timeout
An ST agent that sends a NOTIFY message to a neighbour ST agent An ST agent that sends a NOTIFY message to a neighbor ST agent
expects an ACK from that neighbour ST agent. If no ACK is received expects an ACK from that neighbor ST agent. If no ACK is received
before the ToNotify timeout expires, the ST agent should retry and before the ToNotify timeout expires, the ST agent should retry and
send the NOTIFY message again. After NNotify unsuccessful retries, the send the NOTIFY message again. After NNotify unsuccessful retries,
ST agent simply gives up and behaves as if the ACK message was the ST agent simply gives up and behaves as if the ACK message was
received. received.
5.2.11 Failure due to REFUSE Acknowledgment Timeout 5.2.11 Failure due to REFUSE Acknowledgment Timeout
An ST agent that sends a REFUSE message upstream expects an ACK from An ST agent that sends a REFUSE message upstream expects an ACK from
the previous-hop ST agent. If no ACK is received before the ToRefuse the previous-hop ST agent. If no ACK is received before the ToRefuse
timeout expires, the ST agent should retry and send the REFUSE message timeout expires, the ST agent should retry and send the REFUSE
again. After NRefuse unsuccessful retries, the ST agent gives up and message again. After NRefuse unsuccessful retries, the ST agent gives
it assumes it is not part in the stream any more. up and it assumes it is not part in the stream any more.
5.2.12 Failure due to STATUS Response Timeout 5.2.12 Failure due to STATUS Response Timeout
After sending a STATUS message to a neighbour ST agent, an ST agent After sending a STATUS message to a neighbor ST agent, an ST agent
expects to receive a STATUS-RESPONSE message in response. If this expects to receive a STATUS-RESPONSE message in response. If this
message is not received before the ToStatusResp timer expires, the ST message is not received before the ToStatusResp timer expires, the ST
agent sends the STATUS message again. After NStatus unsuccessful agent sends the STATUS message again. After NStatus unsuccessful
retries, the ST agent gives up and assumes that the neighbor ST agent retries, the ST agent gives up and assumes that the neighbor ST agent
is not active. is not active.
5.3 Setup Failures due to Routing Failures 5.3 Setup Failures due to Routing Failures
It is possible for an ST agent to receive a CONNECT message that It is possible for an ST agent to receive a CONNECT message that
contains a known SID, but from an ST agent other than the previous-hop contains a known SID, but from an ST agent other than the previous-
ST agent of the stream with that SID. This may be: hop ST agent of the stream with that SID. This may be:
1. that two branches of the tree forming the stream have joined back 1. that two branches of the tree forming the stream have joined
together, back together,
2. the result of an attempted recovery of a partially failed stream, or 2. the result of an attempted recovery of a partially failed
stream, or
3. a routing loop. 3. a routing loop.
The TargetList contained in the CONNECT is used to distinguish the The TargetList contained in the CONNECT is used to distinguish the
different cases by comparing each newly received target with those of different cases by comparing each newly received target with those of
the previously existing stream: the previously existing stream:
o if the IP address of the target(s) differ, it is case #1; o if the IP address of the target(s) differ, it is case #1;
o if the target matches a target in the existing stream, it may be o if the target matches a target in the existing stream, it may be
case #2 or #3. case #2 or #3.
Case #1 is handled in Section 5.3.1, while the other cases are handled Case #1 is handled in Section 5.3.1, while the other cases are
in Section 5.3.2. handled in Section 5.3.2.
5.3.1 Path Convergence 5.3.1 Path Convergence
It is possible for an ST agent to receive a CONNECT message that It is possible for an ST agent to receive a CONNECT message that
contains a known SID, but from an ST agent other than the previous-hop contains a known SID, but from an ST agent other than the previous-
ST agent of the stream with that SID. This might be the result of two hop ST agent of the stream with that SID. This might be the result of
branches of the tree forming the stream have joined back together. two branches of the tree forming the stream have joined back
Detection of this case and other possible sources was discussed in together. Detection of this case and other possible sources was
Section 5.2. discussed in Section 5.2.
SCMP does not allow for streams which have converged path, i.e streams SCMP does not allow for streams which have converged paths, i.e.,
are always tree-shaped and not graph-like. At the point of streams are always tree-shaped and not graph-like. At the point of
convergence, the ST agent which detects the condition generates a convergence, the ST agent which detects the condition generates a
REFUSE message with ReasonCode (PathConvergence). Also, as a help to REFUSE message with ReasonCode (PathConvergence). Also, as a help to
the upstream ST agent, the detecting agent places the IP address of the upstream ST agent, the detecting agent places the IP address of
one of the stream's connected targets in the ValidTargetIPAddress one of the stream's connected targets in the ValidTargetIPAddress
field of the REFUSE message. This IP address will be used by upstream field of the REFUSE message. This IP address will be used by upstream
ST agents to avoid splitting the stream. ST agents to avoid splitting the stream.
An upstream ST agent that receives the REFUSE with ReasonCode An upstream ST agent that receives the REFUSE with ReasonCode
(PathConvergence) will check to see if the listed IP address is one of (PathConvergence) will check to see if the listed IP address is one
the known stream targets. If it is not, the REFUSE is propagated to of the known stream targets. If it is not, the REFUSE is propagated
the previous-hop agent. If the listed IP address is known by the to the previous-hop agent. If the listed IP address is known by the
upstream ST agent, this ST agent is the ST agent that caused the split upstream ST agent, this ST agent is the ST agent that caused the
in the stream. (This agent may even be the origin.) This agent then split in the stream. (This agent may even be the origin.) This agent
avoids splitting the stream by using the next-hop of that known target then avoids splitting the stream by using the next-hop of that known
as the next-hop for the refused targets. It sends a CONNECT with the target as the next-hop for the refused targets. It sends a CONNECT
affected targets to the existing valid next-hop. with the affected targets to the existing valid next-hop.
The above process will proceed, hop by hop, until the The above process will proceed, hop by hop, until the
ValidTargetIPAddress matches the IP address of a known target. The ValidTargetIPAddress matches the IP address of a known target. The
only case where this process will fail is when the known target is 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 deleted prior to the REFUSE propagating to the origin. In this case
the origin can just reissue the CONNECT and start the whole process the origin can just reissue the CONNECT and start the whole process
over again. over again.
5.3.2 Other Cases 5.3.2 Other Cases
The remaining cases including a partially failed stream and a routing The remaining cases including a partially failed stream and a routing
loop, are not easily distinguishable. In attempting recovery of a loop, are not easily distinguishable. In attempting recovery of a
failed stream, an ST agent may issue new CONNECT messages to the failed stream, an ST agent may issue new CONNECT messages to the
affected targets. Such a CONNECT may reach an ST agent downstream of affected targets. Such a CONNECT may reach an ST agent downstream of
the failure before that ST agent has received a DISCONNECT from the the failure before that ST agent has received a DISCONNECT from the
neighbourhood of the failure. Until that ST agent receives the neighborhood of the failure. Until that ST agent receives the
DISCONNECT, it cannot distinguish between a failure recovery and an DISCONNECT, it cannot distinguish between a failure recovery and an
erroneous routing loop. That ST agent must therefore respond to the erroneous routing loop. That ST agent must therefore respond to the
CONNECT with a REFUSE message with the affected targets specified in CONNECT with a REFUSE message with the affected targets specified in
the TargetList and an appropriate ReasonCode (StreamExists). the TargetList and an appropriate ReasonCode (StreamExists).
The ST agent immediately preceding that point, i.e., the latest ST The ST agent immediately preceding that point, i.e., the latest ST
agent to send the CONNECT message, will receive the REFUSE message. It agent to send the CONNECT message, will receive the REFUSE message.
must release any resources reserved exclusively for traffic to the It must release any resources reserved exclusively for traffic to the
listed targets. If this ST agent was not the one attempting the stream listed targets. If this ST agent was not the one attempting the
recovery, then it cannot distinguish between a failure recovery and an stream recovery, then it cannot distinguish between a failure
erroneous routing loop. It should repeat the CONNECT after a ToConnect recovery and an erroneous routing loop. It should repeat the CONNECT
timeout, see Section 5.2.4. If after NConnect retransmissions it after a ToConnect timeout, see Section 5.2.4. If after NConnect
continues to receive REFUSE messages, it should propagate the REFUSE retransmissions it continues to receive REFUSE messages, it should
message toward the origin, with the TargetList that specifies the propagate the REFUSE message toward the origin, with the TargetList
affected targets, but with a different ReasonCode (RouteLoop). that specifies the affected targets, but with a different ReasonCode
(RouteLoop).
The REFUSE message with this ReasonCode (RouteLoop) is propagated by The REFUSE message with this ReasonCode (RouteLoop) is propagated by
each ST agent without retransmitting any CONNECT messages. At each ST each ST agent without retransmitting any CONNECT messages. At each ST
agent, it causes any resources reserved exclusively for the listed agent, it causes any resources reserved exclusively for the listed
targets to be released. The REFUSE will be propagated to the origin in targets to be released. The REFUSE will be propagated to the origin
the case of an erroneous routing loop. In the case of stream recovery, in the case of an erroneous routing loop. In the case of stream
it will be propagated to the ST agent that is attempting the recovery, recovery, it will be propagated to the ST agent that is attempting
which may be an intermediate ST agent or the origin itself. In the the recovery, which may be an intermediate ST agent or the origin
case of a stream recovery, the ST agent attempting the recovery may itself. In the case of a stream recovery, the ST agent attempting the
issue new CONNECT messages to the same or to different next-hops. recovery may issue new CONNECT messages to the same or to different
next-hops.
If an ST agent receives both a REFUSE message and a DISCONNECT message If an ST agent receives both a REFUSE message and a DISCONNECT
with a target in common then it can, for the each target in common, message with a target in common then it can, for the each target in
release the relevant resources and propagate neither the REFUSE nor common, release the relevant resources and propagate neither the
the DISCONNECT. REFUSE nor the DISCONNECT.
If the origin receives such a REFUSE message, it should attempt to If the origin receives such a REFUSE message, it should attempt to
send a new CONNECT to all the affected targets. Since routing errors send a new CONNECT to all the affected targets. Since routing errors
in an internet are assumed to be temporary, the new CONNECTs will in an internet are assumed to be temporary, the new CONNECTs will
eventually find acceptable routes to the targets, if one exists. If no eventually find acceptable routes to the targets, if one exists. If
further routes exist after NRetryRoute tries, the application should no further routes exist after NRetryRoute tries, the application
be informed so that it may take whatever action it seems necessary. should be informed so that it may take whatever action it seems
necessary.
5.4 Problems due to Routing Inconsistency 5.4 Problems due to Routing Inconsistency
When an intermediate ST agent receives a CONNECT, it invokes the When an intermediate ST agent receives a CONNECT, it invokes the
routing algorithm to select the next-hop ST agents based on the routing algorithm to select the next-hop ST agents based on the
TargetList and the networks to which it is connected. If the resulting TargetList and the networks to which it is connected. If the
next-hop to any of the targets is across the same network from which resulting next-hop to any of the targets is across the same network
it received the CONNECT (but not the previous-hop itself), there may from which it received the CONNECT (but not the previous-hop itself),
be a routing problem. However, the routing algorithm at the previous- there may be a routing problem. However, the routing algorithm at the
hop may be optimizing differently than the local algorithm would in previous- hop may be optimizing differently than the local algorithm
the same situation. Since the local ST agent cannot distinguish the would in the same situation. Since the local ST agent cannot
two cases, it should permit the setup but send back to the previous- distinguish the two cases, it should permit the setup but send back
hop ST agent an informative NOTIFY message with the appropriate to the previous- hop ST agent an informative NOTIFY message with the
ReasonCode (RouteBack), pertinent TargetList, and in the appropriate ReasonCode (RouteBack), pertinent TargetList, and in the
NextHopIPAddress element the address of the next-hop ST agent returned NextHopIPAddress element the address of the next-hop ST agent
by its routing algorithm. returned by its routing algorithm.
The ST agent that receives such a NOTIFY should ACK it. If the ST agent The ST agent that receives such a NOTIFY should ACK it. If the ST
is using an algorithm that would produce such behaviour, no further agent is using an algorithm that would produce such behavior, no
action is taken; if not, the ST agent should send a DISCONNECT to the further action is taken; if not, the ST agent should send a
next-hop ST agent to correct the problem. DISCONNECT to the next-hop ST agent to correct the problem.
Alternatively, if the next-hop returned by the routing function is in Alternatively, if the next-hop returned by the routing function is in
fact the previous-hop, a routing inconsistency has been detected. In fact the previous-hop, a routing inconsistency has been detected. In
this case, a REFUSE is sent back to the previous-hop ST agent this case, a REFUSE is sent back to the previous-hop ST agent
containing an appropriate ReasonCode (RouteInconsist), pertinent containing an appropriate ReasonCode (RouteInconsist), pertinent
TargetList, and in the NextHopIPAddress element the address of the TargetList, and in the NextHopIPAddress element the address of the
previous-hop. When the previous-hop receives the REFUSE, it will previous-hop. When the previous-hop receives the REFUSE, it will
recompute the next-hop for the affected targets. If there is a recompute the next-hop for the affected targets. If there is a
difference in the routing databases in the two ST agents, they may difference in the routing databases in the two ST agents, they may
exchange CONNECT and REFUSE messages again. Since such routing errors exchange CONNECT and REFUSE messages again. Since such routing errors
in the internet are assumed to be temporary, the situation should in the internet are assumed to be temporary, the situation should
eventually stabilize. eventually stabilize.
5.5 Problems in Reserving Resources 5.5 Problems in Reserving Resources
As mentioned in Section 1.4.5, resource reservation is handled by the As mentioned in Section 1.4.5, resource reservation is handled by the
LRM. The LRM may not be able to satisfy a particular request during LRM. The LRM may not be able to satisfy a particular request during
stream setup or modification for a number of reasons, including a stream setup or modification for a number of reasons, including a
mismatched FlowSpec, an unknown FlowSpec version, an error in mismatched FlowSpec, an unknown FlowSpec version, an error in
processing a FlowSpec, and an inability to allocate the requested processing a FlowSpec, and an inability to allocate the requested
resource. This section discusses these cases and specifies the resource. This section discusses these cases and specifies the
ReasonCodes that should be used when these error cases are ReasonCodes that should be used when these error cases are
encountered. encountered.
5.5.1 Mismatched FlowSpecs 5.5.1 Mismatched FlowSpecs
In some cases the LRM may require a requested FlowSpec to match an In some cases the LRM may require a requested FlowSpec to match an
existing FlowSpec, e.g. when adding new targets to an existing stream, existing FlowSpec, e.g., when adding new targets to an existing
see Section 4.6.1. In case of FlowSpec mismatch the LRM notifies the stream, see Section 4.6.1. In case of FlowSpec mismatch the LRM
processing ST agent which should respond with ReasonCode notifies the processing ST agent which should respond with ReasonCode
(FlowSpecMismatch). (FlowSpecMismatch).
5.5.2 Unknown FlowSpec Version 5.5.2 Unknown FlowSpec Version
When the LRM is invoked, it is passed information including the When the LRM is invoked, it is passed information including the
version of the FlowSpec, see Section 4.5.2.2. If this version is not version of the FlowSpec, see Section 4.5.2.2. If this version is not
known by the LRM, the LRM notifies the ST agent. The ST agent should known by the LRM, the LRM notifies the ST agent. The ST agent should
respond with a REFUSE message with ReasonCode (FlowVerUnknown). respond with a REFUSE message with ReasonCode (FlowVerUnknown).
5.5.3 LRM Unable to Process FlowSpec 5.5.3 LRM Unable to Process FlowSpec
The LRM may encounter an LRM or FlowSpec specific error while The LRM may encounter an LRM or FlowSpec specific error while
attempting to satisfy a request. An example of such an error is given attempting to satisfy a request. An example of such an error is given
in Section 9.2.1. These errors are implementation specific and will in Section 9.2.1. These errors are implementation specific and will
not be enumerated with ST ReasonCodes. They are covered by a single, not be enumerated with ST ReasonCodes. They are covered by a single,
generic ReasonCode. When an LRM encounters such an error, it should generic ReasonCode. When an LRM encounters such an error, it should
notify the ST agent which should respond with the generic ReasonCode notify the ST agent which should respond with the generic ReasonCode
(FlowSpecError). (FlowSpecError).
5.5.4 Insufficient Resources 5.5.4 Insufficient Resources
If the LRM cannot make the necessary reservations because sufficient If the LRM cannot make the necessary reservations because sufficient
resources are not available, an ST agent may: resources are not available, an ST agent may:
o try alternative paths to the targets: the ST agent calls the routing o try alternative paths to the targets: the ST agent calls the routing
function to find a different path to the targets. If an alternative function to find a different path to the targets. If an alternative
path is found, stream connection setup continues in the usual way, path is found, stream connection setup continues in the usual way,
as described in Section 4.5. as described in Section 4.5.
o refuse to establish the stream along this path: the origin ST agent o refuse to establish the stream along this path: the origin ST agent
informs the application of the stream setup failure; an ST agent at informs the application of the stream setup failure; intermediate
a router or target issues a REFUSE message (as described in Section and target ST agents issue a REFUSE message (as described in Section
4.5.8) with ReasonCode (CantGetResrc). 4.5.8) with ReasonCode (CantGetResrc).
It depends on the local implementations whether an ST agent tries It depends on the local implementations whether an ST agent tries
alternative paths or refuses to establish the stream. In any case, if alternative paths or refuses to establish the stream. In any case, if
enough resources cannot be found over different paths, the ST agent enough resources cannot be found over different paths, the ST agent
has to explicitly refuse to establish the stream. has to explicitly refuse to establish the stream.
5.6 Problems Caused by CHANGE Messages 5.6 Problems Caused by CHANGE Messages
A CHANGE might fail for several reasons, including: A CHANGE might fail for several reasons, including:
o insufficient resources: the request may be for a larger amount of o insufficient resources: the request may be for a larger amount of
network resources when those resources are not available, ReasonCode network resources when those resources are not available, ReasonCode
(CantGetResrc); (CantGetResrc);
o a target application not agreeing to the change, ReasonCode o a target application not agreeing to the change, ReasonCode
(ApplRefused); (ApplRefused);
The affected stream can be left in one of two states as a result of The affected stream can be left in one of two states as a result of
change failures: a) the stream can revert back to the state it was in change failures: a) the stream can revert back to the state it was in
prior to the CHANGE message being processed, or b) the stream may be prior to the CHANGE message being processed, or b) the stream may be
torn down. torn down.
The expected common case of failure will be when the requested change The expected common case of failure will be when the requested change
cannot be satisfied, but the pre-change resources remain allocated and cannot be satisfied, but the pre-change resources remain allocated
available for use by the stream. In this case, the ST agent at the and available for use by the stream. In this case, the ST agent at
point where the failure occurred must inform upstream ST agents of the the point where the failure occurred must inform upstream ST agents
failure. (In the case where this ST agent is the target, there may not of the failure. (In the case where this ST agent is the target, there
actually be a failure, the application may merely have not agreed to may not actually be a failure, the application may merely have not
the change). The ST agent informs upstream ST agents by sending a agreed to the change). The ST agent informs upstream ST agents by
REFUSE message with ReasonCode (CantGetResrc or ApplRefused). To sending a REFUSE message with ReasonCode (CantGetResrc or
indicate that the pre-change FlowSpec is still available and that the ApplRefused). To indicate that the pre-change FlowSpec is still
stream still exists, the ST agent sets the E-bit of the REFUSE message available and that the stream still exists, the ST agent sets the E-
to one (1), see Section 10.4.11. Upstream ST agents receiving the bit of the REFUSE message to one (1), see Section 10.4.11. Upstream
REFUSE message inform the LRM so that it can attempt to revert back to ST agents receiving the REFUSE message inform the LRM so that it can
the pre-change FlowSpec. It is permissible, but not desirable, for attempt to revert back to the pre-change FlowSpec. It is permissible,
excess resources to remain allocated. but not desirable, for excess resources to remain allocated.
For the case when the attempt to change the stream results in the loss For the case when the attempt to change the stream results in the
of previously reserved resources, the stream is torn down. This can loss of previously reserved resources, the stream is torn down. This
happen, for instance, when the I-bit is set (Section 4.6.5) and the can happen, for instance, when the I-bit is set (Section 4.6.5) and
LRM releases pre-change stream resources before the new ones are the LRM releases pre-change stream resources before the new ones are
reserved, and neither new nor former resources are available. In this reserved, and neither new nor former resources are available. In this
case, the ST agent where the failure occurs must inform other ST case, the ST agent where the failure occurs must inform other ST
agents of the break in the affected portion of the stream. This is agents of the break in the affected portion of the stream. This is
done by the ST agent by sending a REFUSE message upstream and a done by the ST agent by sending a REFUSE message upstream and a
DISCONNECT message downstream, both with the ReasonCode DISCONNECT message downstream, both with the ReasonCode
(CantGetResrc). To indicate that pre-change stream resources have been (CantGetResrc). To indicate that pre-change stream resources have
lost, the E-bit of the REFUSE message is set to zero (0). been lost, the E-bit of the REFUSE message is set to zero (0).
Note that a failure to change the resources requested for specific Note that a failure to change the resources requested for specific
targets should not cause other targets in the stream to be deleted. targets should not cause other targets in the stream to be deleted.
5.7 Unknown Targets in DISCONNECT and CHANGE 5.7 Unknown Targets in DISCONNECT and CHANGE
The handling of unknown targets listed in a DISCONNECT or CHANGE The handling of unknown targets listed in a DISCONNECT or CHANGE
message is dependent on a stream's join authorization level, see message is dependent on a stream's join authorization level, see
Section 4.4.2. For streams with join authorization levels #0 and #1, Section 4.4.2. For streams with join authorization levels #0 and #1,
see Section 4.4.2, all targets must be known. In this case, when see Section 4.4.2, all targets must be known. In this case, when
processing a CHANGE message, the agent should generate a REFUSE processing a CHANGE message, the agent should generate a REFUSE
message with ReasonCode (TargetUnknown). When processing a DISCONNECT message with ReasonCode (TargetUnknown). When processing a DISCONNECT
message, it is possible that the DISCONNECT is a duplicate of an old message, it is possible that the DISCONNECT is a duplicate of an old
request so the agent should respond as if it has successfully request so the agent should respond as if it has successfully
disconnected the target. That is, it should respond with an ACK disconnected the target. That is, it should respond with an ACK
skipping to change at page 52, line 18 skipping to change at page 55, line 42
next-hop ST agents. This has the effect of propagating the CHANGE/ next-hop ST agents. This has the effect of propagating the CHANGE/
DISCONNECT message to all downstream ST agents. Eventually, the ST DISCONNECT message to all downstream ST agents. Eventually, the ST
agent that acts as the origin for the target (Section 4.6.3.1) is agent that acts as the origin for the target (Section 4.6.3.1) is
reached and the target is deleted. reached and the target is deleted.
Target deletion/change via flooding is not expected to be the normal Target deletion/change via flooding is not expected to be the normal
case. It is included to present the applications with uniform case. It is included to present the applications with uniform
capabilities for all stream types. Flooding only applies to streams capabilities for all stream types. Flooding only applies to streams
with join authorization level #2. with join authorization level #2.
6 Failure Detection and Recovery 6. Failure Detection and Recovery
6.1 Failure Detection 6.1 Failure Detection
The SCMP failure detection mechanism is based on two assumptions: The SCMP failure detection mechanism is based on two assumptions:
1. If a neighbour of an ST agent is up, and has been up without a 1. If a neighbor of an ST agent is up, and has been up without a
disruption, and has not notified the ST agent of a problem with disruption, and has not notified the ST agent of a problem with
streams that pass through both, then the ST agent can assume that streams that pass through both, then the ST agent can assume that
there has not been any problem with those streams. there has not been any problem with those streams.
2. A network through which an ST agent has routed a stream will notify 2. A network through which an ST agent has routed a stream will notify
the ST agent if there is a problem that affects the stream data the ST agent if there is a problem that affects the stream data
packets but does not affect the control packets. packets but does not affect the control packets.
The purpose of the robustness protocol defined here is for ST agents The purpose of the robustness protocol defined here is for ST agents
to determine that the streams through a neighbour have been broken by to determine that the streams through a neighbor have been broken by
the failure of the neighbour or the intervening network. This protocol the failure of the neighbor or the intervening network. This protocol
should detect the overwhelming majority of failures that can occur. should detect the overwhelming majority of failures that can occur.
Once a failure is detected, the recovery procedures described in Once a failure is detected, the recovery procedures described in
Section 6.2 are initiated by the ST agents. Section 6.2 are initiated by the ST agents.
6.1.1 Network Failures 6.1.1 Network Failures
An ST agent can detect network failures by two mechanisms: An ST agent can detect network failures by two mechanisms:
o the network can report a failure, or o the network can report a failure, or
o the ST agent can discover a failure by itself. o the ST agent can discover a failure by itself.
They differ in the amount of information that an ST agent has They differ in the amount of information that an ST agent has
available to it in order to make a recovery decision. For example, a available to it in order to make a recovery decision. For example, a
network may be able to report that reserved bandwidth has been lost network may be able to report that reserved bandwidth has been lost
and the reason for the loss and may also report that connectivity to and the reason for the loss and may also report that connectivity to
the neighbouring ST agent remains intact. On the other hand, an ST the neighboring ST agent remains intact. On the other hand, an ST
agent may discover that communication with a neighbouring ST agent has agent may discover that communication with a neighboring ST agent has
ceased because it has not received any traffic from that neighbour in ceased because it has not received any traffic from that neighbor in
some time period. If an ST agent detects a failure, it may not be able some time period. If an ST agent detects a failure, it may not be
to determine if the failure was in the network while the neighbour able to determine if the failure was in the network while the
remains available, or the neighbour has failed while the network neighbor remains available, or the neighbor has failed while the
remains intact. network remains intact.
6.1.2 Detecting ST Agents Failures 6.1.2 Detecting ST Agents Failures
Each ST agent periodically sends each neighbour with which it shares Each ST agent periodically sends each neighbor with which it shares
one or more streams a HELLO message. This message exchange is between one or more streams a HELLO message. This message exchange is between
ST agents, not entities representing streams or applications. That is, ST agents, not entities representing streams or applications. That
an ST agent need only send a single HELLO message to a neighbour is, an ST agent need only send a single HELLO message to a neighbor
regardless of the number of streams that flow between them. All ST regardless of the number of streams that flow between them. All ST
agents (host as well as intermediate) must participate in this agents (host as well as intermediate) must participate in this
exchange. However, only ST agents that share active streams can exchange. However, only ST agents that share active streams can
participate in this exchange and it is an error to send a HELLO 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. to message to a neighbor ST agent with no streams in common, e.g., to
check whether it is active. STATUS messages can be used to poll status check whether it is active. STATUS messages can be used to poll the
of neighbour ST agents, see Section 8.4. status of neighbor ST agents, see Section 8.4.
For the purpose of HELLO message exchange, stream existence is
bounded by ACCEPT and DISCONNECT/REFUSE processing and is defined for
both the upstream and downstream case. A stream to a previous-hop is
defined to start once an ACCEPT message has been forwarded upstream.
A stream to a next-hop is defined to start once the received ACCEPT
message has been acknowledged. A stream is defined to terminate once
an acknowledgment is sent for a received DISCONNECT or REFUSE
message, and an acknowledgment for a sent DISCONNECT or REFUSE
message has been received.
The HELLO message has two fields: The HELLO message has two fields:
o a HelloTimer field that is in units of milliseconds modulo the o a HelloTimer field that is in units of milliseconds modulo the
maximum for the field size, and maximum for the field size, and
o a Restarted-bit specifying that the ST agent has been restarted o a Restarted-bit specifying that the ST agent has been restarted
recently. recently.
The HelloTimer must appear to be incremented every millisecond whether The HelloTimer must appear to be incremented every millisecond
a HELLO message is sent or not. The HelloTimer wraps around to zero whether a HELLO message is sent or not. The HelloTimer wraps around
after reaching the maximum value. Whenever an ST agent suffers a to zero after reaching the maximum value. Whenever an ST agent
catastrophic event that may result in it losing ST state information, suffers a catastrophic event that may result in it losing ST state
it must reset its HelloTimer to zero and must set the Restarted-bit in information, it must reset its HelloTimer to zero and must set the
all HELLO messages sent in the following HelloTimerHoldDown seconds. Restarted-bit in all HELLO messages sent in the following
HelloTimerHoldDown seconds.
If an ST agent receives a HELLO message that contains the Restarted- If an ST agent receives a HELLO message that contains the Restarted-
bit set, it must assume that the sending ST agent has lost its state. bit set, it must assume that the sending ST agent has lost its state.
If it shares streams with that neighbour, it must initiate stream If it shares streams with that neighbor, it must initiate stream
recovery activity, see Section 6.2. If it does not share streams with recovery activity, see Section 6.2. If it does not share streams with
that neighbour, it should not attempt to create one until that bit is that neighbor, it should not attempt to create one until that bit is
no longer set. If an ST agent receives a CONNECT message from a no longer set. If an ST agent receives a CONNECT message from a
neighbour whose Restarted-bit is still set, it must respond with ERROR neighbor whose Restarted-bit is still set, the agent must respond
with the appropriate ReasonCode (RestartRemote). If it receives a with an ERROR message with the appropriate ReasonCode
CONNECT message while its own Restarted-bit is set, it must respond (RestartRemote). If an agent receives a CONNECT message while the
with ERROR with the appropriate ReasonCode (RestartLocal). agent's own Restarted- bit is set, the agent must respond with an
ERROR message with the appropriate ReasonCode (RestartLocal).
Each ST stream has a RecoveryTimeout value associated with it. This Each ST stream has an associated RecoveryTimeout value. This value is
value is assigned by the origin and carried into the CONNECT message, assigned by the origin and carried in the CONNECT message, see
see Section 4.5.10. Each agent checks to see if it can support the Section 4.5.10. Each agent checks to see if it can support the
requested value. If it can not, it updates the value to the smallest requested value. If it can not, it updates the value to the smallest
timeout interval it can support. The RecoveryTimeout used by a timeout interval it can support. The RecoveryTimeout used by a
particular stream is obtained from the ACCEPT message, see Section particular stream is obtained from the ACCEPT message, see Section
4.5.10, and is the smallest value seen across all ACCEPT messages from 4.5.10, and is the smallest value seen across all ACCEPT messages
participating targets. from participating targets.
An ST agent must send HELLO messages to its neighbour with a period An ST agent must send HELLO messages to its neighbor with a period
shorter than the smallest RecoveryTimeout of all the active streams shorter than the smallest RecoveryTimeout of all the active streams
that pass between the two ST agents, regardless of direction. This that pass between the two ST agents, regardless of direction. This
period must be smaller by a factor, called HelloLossFactor, which is period must be smaller by a factor, called HelloLossFactor, which is
at least as large as the greatest number of consecutive HELLO messages at least as large as the greatest number of consecutive HELLO
that could credibly be lost while the communication between the two ST messages that could credibly be lost while the communication between
agents is still viable. the two ST agents is still viable.
An ST agent may send simultaneous HELLO messages to all its neighbours An ST agent may send simultaneous HELLO messages to all its neighbors
at the rate necessary to support the smallest RecoveryTimeout of any at the rate necessary to support the smallest RecoveryTimeout of any
active stream. Alternately, it may send HELLO messages to different active stream. Alternately, it may send HELLO messages to different
neighbours independently at different rates corresponding to neighbors independently at different rates corresponding to
RecoveryTimeouts of individual streams. RecoveryTimeouts of individual streams.
The ST agent that receives a HELLO message expects to receive at least An ST agent must expect to receive at least one new HELLO message
one new HELLO message from a neighbour during the RecoveryTimeout of from each neighbor at least as frequently as the smallest
every active stream through that neighbour. It can detect duplicate or RecoveryTimeout of any active stream in common with that neighbor.
delayed HELLO messages by saving the HelloTimer field of the most The agent can detect duplicate or delayed HELLO messages by comparing
recent valid HELLO message from that neighbour and comparing it with the HelloTimer field of the most recent valid HELLO message from that
the HelloTimer field of incoming HELLO messages. It will only accept neighbor with the HelloTimer field of an incoming HELLO message.
an incoming HELLO message from that neighbour if it has a HelloTimer Valid incoming HELLO messages will have a HelloTimer field that is
field that is greater than the most recent valid HELLO message by the greater than the field contained in the previously received valid
time elapsed since that message was received plus twice the maximum HELLO message by the time elapsed since the previous message was
likely delay variance from that neighbour. received. Actual evaluation of the elapsed time interval should take
into account the maximum likely delay variance from that neighbor.
If the ST agent does not receive a valid HELLO message within the If the ST agent does not receive a valid HELLO message within the
RecoveryTimeout of a stream, it must assume that the neighbouring ST RecoveryTimeout period of a stream, it must assume that the
agent or the communication link between the two has failed and it must neighboring ST agent or the communication link between the two has
initiate stream recovery activity, as described below in Section 6.2. failed and it must initiate stream recovery activity, as described
below in Section 6.2.
6.2 Failure Recovery 6.2 Failure Recovery
If an intermediate ST agent fails or a network or part of a network If an intermediate ST agent fails or a network or part of a network
fails, the previous-hop ST agent and the various next-hop ST agents fails, the previous-hop ST agent and the various next-hop ST agents
will discover the fact by the failure detection mechanism described in will discover the fact by the failure detection mechanism described
Section 6.1. in Section 6.1.
The recovery of an ST stream is a relatively complex and time The recovery of an ST stream is a relatively complex and time
consuming effort because it is designed in a general manner to operate consuming effort because it is designed in a general manner to
across a large number of networks with diverse characteristics. operate across a large number of networks with diverse
Therefore, it may require information to be distributed widely, and characteristics. Therefore, it may require information to be
may require relatively long timers. On the other hand, since a network distributed widely, and may require relatively long timers. On the
is typically a homogeneous system, failure recovery in the network may other hand, since a network is typically a homogeneous system,
be a relatively faster and simpler operation. Therefore an ST agent failure recovery in the network may be a relatively faster and
that detects a failure should attempt to fix the network failure simpler operation. Therefore an ST agent that detects a failure
before attempting recovery of the ST stream. If the stream that should attempt to fix the network failure before attempting recovery
existed between two ST agents before the failure cannot be of the ST stream. If the stream that existed between two ST agents
reconstructed by network recovery mechanisms alone, then the ST stream before the failure cannot be reconstructed by network recovery
recovery mechanism must be invoked. mechanisms alone, then the ST stream recovery mechanism must be
invoked.
If stream recovery is necessary, the different ST agents will need to If stream recovery is necessary, the different ST agents will need to
perform different functions, depending on their relation to the perform different functions, depending on their relation to the
failure: failure:
o An ST agent that is a next-hop of a failure should first verify that o An ST agent that is a next-hop from a failure should first verify
there was a failure. It can do this using STATUS messages to query that there was a failure. It can do this using STATUS messages to
its upstream neighbour. If it cannot communicate with that query its upstream neighbor. If it cannot communicate with that
neighbour, then for each active stream from that neighbour it should neighbor, then for each active stream from that neighbor it should
first send a REFUSE message upstream with the appropriate ReasonCode first send a REFUSE message upstream with the appropriate ReasonCode
(STAgentFailure). This is done to the neighbour to speed up the (STAgentFailure). This is done to the neighbor to speed up the
failure recovery in case the hop is unidirectional, i.e., the failure recovery in case the hop is unidirectional, i.e., the
neighbour can hear the ST agent but the ST agent cannot hear the neighbor can hear the ST agent but the ST agent cannot hear the
neighbour. The ST agent detecting the failure must then, for each neighbor. The ST agent detecting the failure must then, for each
active stream from that neighbour, send DISCONNECT messages with the active stream from that neighbor, send DISCONNECT messages with the
same ReasonCode toward the targets. All downstream ST agents process same ReasonCode toward the targets. All downstream ST agents process
this DISCONNECT message just like the DISCONNECT that tears down the this DISCONNECT message just like the DISCONNECT that tears down the
stream. If recovery is successful, targets will receive new CONNECT stream. If recovery is successful, targets will receive new CONNECT
messages. messages.
o An ST agent that is the previous-hop before the failed component o An ST agent that is the previous-hop before the failed component
first verifies that there was a failure by querying the downstream first verifies that there was a failure by querying the downstream
neighbour using STATUS messages. If the neighbour has lost its state neighbor using STATUS messages. If the neighbor has lost its state
but is available, then the ST agent may try and reconstruct but is available, then the ST agent may try and reconstruct
(explained below) the affected streams, for those streams that do (explained below) the affected streams, for those streams that do
not have the NoRecovery option selected. If it cannot communicate not have the NoRecovery option selected. If it cannot communicate
with the next-hop, then the ST agent detecting the failure sends a with the next-hop, then the ST agent detecting the failure sends a
DISCONNECT message, for each affected stream, with the appropriate DISCONNECT message, for each affected stream, with the appropriate
ReasonCode (STAgentFailure) toward the affected targets. It does so ReasonCode (STAgentFailure) toward the affected targets. It does so
to speed up failure recovery in case the communication may be to speed up failure recovery in case the communication may be
unidirectional and this message might be delivered successfully. unidirectional and this message might be delivered successfully.
Based on the NoRecovery option, the ST agent that is the previous-hop Based on the NoRecovery option, the ST agent that is the previous-hop
before the failed component takes the following actions: before the failed component takes the following actions:
o If the NoRecovery option is selected, then the ST agent sends, per o If the NoRecovery option is selected, then the ST agent sends, per
affected stream, a REFUSE message with the appropriate ReasonCode affected stream, a REFUSE message with the appropriate ReasonCode
(STAgentFailure) to the previous-hop. The TargetList in these (STAgentFailure) to the previous-hop. The TargetList in these
messages contains all the targets that were reached through the messages contains all the targets that were reached through the
broken branch. As discussed in Section 5.1.2, multiple REFUSE 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 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 intervening network. The REFUSE message is propagated all the way to
the origin. The application at the origin can attempt recovery of the origin. The application at the origin can attempt recovery of
the stream by sending a new CONNECT to the affected targets. For the stream by sending a new CONNECT to the affected targets. For
established streams, the new CONNECT will be treated by intermediate established streams, the new CONNECT will be treated by intermediate
ST agents as an addition of new targets into the established stream. 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 o If the NoRecovery option is not selected, the ST agent can attempt
recovery of the affected streams. It does so one a stream by stream recovery of the affected streams. It does so one a stream by stream
basis by issuing a new CONNECT message to the affected targets. If basis 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 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 route to some targets is through the previous-hop, then it sends one
or more REFUSE messages to the previous-hop with the appropriate or more REFUSE messages to the previous-hop with the appropriate
ReasonCode (CantRecover) specifying the affected targets in the ReasonCode (CantRecover) specifying the affected targets in the
TargetList. The previous-hop can then attempt recovery of the stream TargetList. The previous-hop can then attempt recovery of the stream
by issuing a CONNECT to those targets. If it cannot find an by issuing a CONNECT to those targets. If it cannot find an
appropriate route, it will propagate the REFUSE message toward the appropriate route, it will propagate the REFUSE message toward the
origin. origin.
Regardless of which ST agent attempts recovery of a damaged stream, it Regardless of which ST agent attempts recovery of a damaged stream,
will issue one or more CONNECT messages to the affected targets. These it will issue one or more CONNECT messages to the affected targets.
CONNECT messages are treated by intermediate ST agents as additions of These CONNECT messages are treated by intermediate ST agents as
new targets into the established stream. The FlowSpecs of the new additions of new targets into the established stream. The FlowSpecs
CONNECT messages are the same as the ones contained in the most recent of the new CONNECT messages are the same as the ones contained in the
CONNECT or CHANGE messages that the ST agent had sent toward the most recent CONNECT or CHANGE messages that the ST agent had sent
affected targets when the stream was operational. toward the affected targets when the stream was operational.
Upon receiving an ACCEPT during the a stream recovery, the agent Upon receiving an ACCEPT during the a stream recovery, the agent
reconstructing the stream must ensure that the FlowSpec and other reconstructing the stream must ensure that the FlowSpec and other
stream attributes (e.g. MaxMsgSize and RecoveryTimeout) of the re- stream attributes (e.g., MaxMsgSize and RecoveryTimeout) of the re-
established stream are equal to, or are less restrictive, than the established stream are equal to, or are less restrictive, than the
pre-failure stream. If they are more restrictive, the recovery attempt pre-failure stream. If they are more restrictive, the recovery
must be aborted. If they are equal, or are less restrictive, then the attempt must be aborted. If they are equal, or are less restrictive,
recovery attempt is successful. When the attempt is a success, failure then the recovery attempt is successful. When the attempt is a
recovery related ACCEPTs are not forwarded upstream by the recovering success, failure recovery related ACCEPTs are not forwarded upstream
agent. by the recovering agent.
Any ST agent that decides that enough recovery attempts have been Any ST agent that decides that enough recovery attempts have been
made, or that recovery attempts have no chance of succeeding, may made, or that recovery attempts have no chance of succeeding, may
indicate that no further attempts at recovery should be made. This is 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. 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 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 there is no chance of recovery succeeding. An ST agent that receives
REFUSE message with the N-bit set (1) will not attempt recovery, 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 regardless of the NoRecovery option, and it will set the N-bit when
propagating the REFUSE message upstream. propagating the REFUSE message upstream.
6.2.1 Problems in Stream Recovery 6.2.1 Problems in Stream Recovery
The reconstruction of a broken stream may not proceed smoothly. Since The reconstruction of a broken stream may not proceed smoothly. Since
there may be some delay while the information concerning the failure there may be some delay while the information concerning the failure
is propagated throughout an internet, routing errors may occur for is propagated throughout an internet, routing errors may occur for
some time after a failure. As a result, the ST agent attempting the some time after a failure. As a result, the ST agent attempting the
recovery may receive ERROR messages for the new CONNECTs that are recovery may receive ERROR messages for the new CONNECTs that are
caused by internet routing errors. The ST agent attempting the caused by internet routing errors. The ST agent attempting the
recovery should be prepared to resend CONNECTs before it succeeds in recovery should be prepared to resend CONNECTs before it succeeds in
reconstructing the stream. If the failure partitions the internet and reconstructing the stream. If the failure partitions the internet and
a new set of routes cannot be found to the targets, the REFUSE a new set of routes cannot be found to the targets, the REFUSE
messages will eventually be propagated to the origin, which can then messages will eventually be propagated to the origin, which can then
inform the application so it can decide whether to terminate or to inform the application so it can decide whether to terminate or to
continue to attempt recovery of the stream. continue to attempt recovery of the stream.
The new CONNECT may at some point reach an ST agent downstream of the 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 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 receives the CONNECT is not yet aware that the stream has suffered a
failure, and will interpret the new CONNECT as resulting from a failure, and will interpret the new CONNECT as resulting from a
routing failure. It will respond with an ERROR message with the routing failure. It will respond with an ERROR message with the
appropriate ReasonCode (StreamExists). Since the timeout that the ST appropriate ReasonCode (StreamExists). Since the timeout that the ST
agents immediately preceding the failure and immediately following the agents immediately preceding the failure and immediately following
failure are approximately the same, it is very likely that the 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 remnants of the broken stream will soon be torn down by a DISCONNECT
message. Therefore, the ST agent that receives the ERROR message with message. Therefore, the ST agent that receives the ERROR message with
ReasonCode (StreamExists) should retransmit the CONNECT message after ReasonCode (StreamExists) should retransmit the CONNECT message after
the ToConnect timeout expires. If this fails again, the request will the ToConnect timeout expires. If this fails again, the request will
be retried for NConnect times. Only if it still fails will the ST be retried for NConnect times. Only if it still fails will the ST
agent send a REFUSE message with the appropriate ReasonCode agent send a REFUSE message with the appropriate ReasonCode
(RouteLoop) to its previous-hop. This message will be propagated back (RouteLoop) to its previous-hop. This message will be propagated back
to the ST agent that is attempting recovery of the damaged stream. 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 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 REFUSE is matched to a CONNECT message created by a recovery
through the LnkReference field in the CONNECT. operation through the LnkReference field in the CONNECT.
ST agents that have propagated a CONNECT message and have received a ST agents that have propagated a CONNECT message and have received a
REFUSE message should maintain this information for some period of REFUSE message should maintain this information for some period of
time. If an ST agent receives a second CONNECT message for a target 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 that recently resulted in a REFUSE, that ST agent may respond with a
REFUSE immediately rather than attempting to propagate the CONNECT. REFUSE immediately rather than attempting to propagate the CONNECT.
This has the effect of pruning the tree that is formed by the 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 propagation of CONNECT messages to a target that is not reachable by
the routes that are selected first. The tree will pass through any 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 given ST agent only once, and the stream setup phase will be
faster. completed faster.
If a CONNECT message reaches a target, the target should as If a CONNECT message reaches a target, the target should as
efficiently as possible use the state that it has saved from before 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 the stream failed during recovery of the stream. It will then issue
ACCEPT message toward the origin. The ACCEPT message will be an ACCEPT message toward the origin. The ACCEPT message will be
intercepted by the ST agent that is attempting recovery of the damaged intercepted by the ST agent that is attempting recovery of the
stream, if not the origin. If the FlowSpec contained in the ACCEPT damaged stream, if not the origin. If the FlowSpec contained in the
specifies the same selection of parameters as were in effect before ACCEPT specifies the same selection of parameters as were in effect
the failure, then the ST agent that is attempting recovery will not before the failure, then the ST agent that is attempting recovery
propagate the ACCEPT. FlowSpec comparison is done by the LRM. If the will not propagate the ACCEPT. FlowSpec comparison is done by the
selections of the parameters are different, then the ST agent that is LRM. If the selections of the parameters are different, then the ST
attempting recovery will send the origin a NOTIFY message with the agent that is attempting recovery will send the origin a NOTIFY
appropriate ReasonCode (FailureRecovery) that contains a FlowSpec that message with the appropriate ReasonCode (FailureRecovery) that
specifies the new parameter values. The origin may then have to change contains a FlowSpec that specifies the new parameter values. The
its data generation characteristics and the stream's parameters with a origin may then have to change its data generation characteristics
CHANGE message to use the newly recovered subtree. and the stream's parameters with a CHANGE message to use the newly
recovered subtree.
6.3 Stream Preemption 6.3 Stream Preemption
As mentioned in Section 1.4.5, it is possible that the LRM decides to As mentioned in Section 1.4.5, it is possible that the LRM decides to
break a stream intentionally. This is called stream preemption. break a stream intentionally. This is called stream preemption.
Streams are expected to be preempted in order to free resources for a Streams are expected to be preempted in order to free resources for a
new stream which has a higher priority. new stream which has a higher priority.
If the LRM decides that it is necessary to preempt one or more of the 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 stream traversing it, the decision on which streams have to be
preempted has to be made. There are two ways for an application to preempted has to be made. There are two ways for an application to
influence such decision: influence such decision:
1. based on FlowSpec information. For instance, with the ST2+ FlowSpec, 1. based on FlowSpec information. For instance, with the ST2+
streams can be assigned a precedence value from 0 (least important) FlowSpec, streams can be assigned a precedence value from 0
to 256 (most important). This value is carried in the FlowSpec when (least important) to 256 (most important). This value is
the stream is setup, see Section 9.2, so that the LRM is informed carried in the FlowSpec when the stream is setup, see Section
about it. 9.2, so that the LRM is informed about it.
2. with the group mechanism. An application may specify that a set of 2. with the group mechanism. An application may specify that a set
streams are related to each other and that they are all candidate of streams are related to each other and that they are all
for preemption if one of them gets preempted. It can be done by candidate for preemption if one of them gets preempted. It can
using the fate-sharing relationship defined in Section 7.1.2. This be done by using the fate-sharing relationship defined in
helps the LRM making a good choice when more than one stream have to Section 7.1.2. This helps the LRM making a good choice when
be preempted, because it leads to breaking a single application as more than one stream have to be preempted, because it leads to
opposed to as many applications as the number of preempted streams. 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 If the LRM preempts a stream, it must notify the local ST agent. The
following actions are performed by the ST agent: following actions are performed by the ST agent:
o The ST agent at the host where the stream was preempted sends o The ST agent at the host where the stream was preempted sends
DISCONNECT messages with the appropriate ReasonCode DISCONNECT messages with the appropriate ReasonCode
(StreamPreempted) toward the affected targets. It sends a REFUSE (StreamPreempted) toward the affected targets. It sends a REFUSE
message with the appropriate ReasonCode (StreamPreempted) to the message with the appropriate ReasonCode (StreamPreempted) to the
previous-hop. previous-hop.
o A previous-hop ST agent of the preempted stream acts as in case of o A previous-hop ST agent of the preempted stream acts as in case of
failure recovery, see Section 6.2. failure recovery, see Section 6.2.
o A next-hop ST agent of the preempted stream acts as in case of o A next-hop ST agent of the preempted stream acts as in case of
failure recovery, see Section 6.2. failure recovery, see Section 6.2.
Note that, as opposite to failure recovery, there is no need to verify Note that, as opposite to failure recovery, there is no need to
that the failure actually occurred, because this is explicitly verify that the failure actually occurred, because this is explicitly
indicated by the ReasonCode (StreamPreempted). indicated by the ReasonCode (StreamPreempted).
7 A Group of Streams 7. A Group of Streams
There may be need to associate related streams. The group mechanism is There may be need to associate related streams. The group mechanism
simply an association technique that allows ST agents to identify the is simply an association technique that allows ST agents to identify
different streams that are to be associated. the different streams that are to be associated.
A group consists of a set of streams and a relationship. The set of 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. streams may be empty. The relationship applies to all group members.
Each group is identified by a group name. The group name must be Each group is identified by a group name. The group name must be
globally unique. globally unique.
Streams belong to the same group if they have the same GroupName in 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 the GroupName field of the Group parameter, see Section 10.3.2. The
relationship is defined by the Relationship field. Group membership relationship is defined by the Relationship field. Group membership
must be specified at stream creation time and persists for the whole must be specified at stream creation time and persists for the whole
stream lifetime. A single stream may belong to multiple groups. stream lifetime. A single stream may belong to multiple groups.
The ST agent that creates a new group is called group initiator. Any The ST agent that creates a new group is called group initiator. Any
ST agent can be a group initiator. The initiator allocates the ST agent can be a group initiator. The initiator allocates the
GroupName and the Relationship among group members. The initiator may GroupName and the Relationship among group members. The initiator may
or may not be the origin of a stream belonging to the group. GroupName or may not be the origin of a stream belonging to the group.
generation is described in Section 8.2. GroupName generation is described in Section 8.2.
7.1 Basic Group Relationships 7.1 Basic Group Relationships
This version of ST defines four basic group relationships. An ST2+ This version of ST defines four basic group relationships. An ST2+
implementation must support all four basic relationships. Adherence to implementation must support all four basic relationships. Adherence
specified relationships are usually best effort. The basic to specified relationships are usually best effort. The basic
relationships are described in detail below in Section 7.1.1 - Section relationships are described in detail below in Section 7.1.1 -
7.1.4. Section 7.1.4.
7.1.1 Bandwidth Sharing 7.1.1 Bandwidth Sharing
Streams associated with the same group share the same network Streams associated with the same group share the same network
bandwidth. The intent is to support applications such as audio bandwidth. The intent is to support applications such as audio
conferences where, of all participants, only some are allowed to speak conferences where, of all participants, only some are allowed to
at one time. In such a scenario, global bandwidth utilization can be speak at one time. In such a scenario, global bandwidth utilization
lowered by allocating only those resources that can be used at once, can be lowered by allocating only those resources that can be used at
e.g. it is sufficient to reserve bandwidth for a small set of audio once, e.g., it is sufficient to reserve bandwidth for a small set of
streams. audio streams.
The basic concept of a shared bandwidth group is that the LRM will The basic concept of a shared bandwidth group is that the LRM will
allocate up to some specified multiplier of the most demanding stream allocate up to some specified multiplier of the most demanding stream
that it knows about in the group. The LRM will allocate resources that it knows about in the group. The LRM will allocate resources
incrementally, as stream setup requests are received, until the total incrementally, as stream setup requests are received, until the total
group requirements are satisfied. Subsequent setup requests will share group requirements are satisfied. Subsequent setup requests will
the group's resources and will not need any additional resources share the group's resources and will not need any additional
allocated. The procedure will result in standard allocation where only resources allocated. The procedure will result in standard allocation
one stream in a group traverses an agent, and shared allocations where where only one stream in a group traverses an agent, and shared
multiple streams traverse an agent. allocations where multiple streams traverse an agent.
To illustrate, let's call the multiplier mentioned above "N", and the 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 most demanding stream that an agent knows about in a group Bmax. For
an application that intends to allow three participants to speak at 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 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 the group an amount of bandwidth up to 3*Bmax even when there are
more steams in the group. The LRM will reserve resources many more steams in the group. The LRM will reserve resources
incrementally, per stream request, until N*Bmax resources are incrementally, per stream request, until N*Bmax resources are
allocated. Each agent may be traversed by a different set and number allocated. Each agent may be traversed by a different set and number
of streams all belonging to the same group. of streams all belonging to the same group.
An ST agent receiving a stream request presents the LRM with all An ST agent receiving a stream request presents the LRM with all
necessary group information, see Section 4.5.2.2. If maximum necessary group information, see Section 4.5.2.2. If maximum
bandwidth, N*Bmax, for the group has already been allocated and a new bandwidth, N*Bmax, for the group has already been allocated and a new
stream with a bandwidth demand less than Bmax is being established, stream with a bandwidth demand less than Bmax is being established,
the LRM won't allocate any further bandwidth. the LRM won't allocate any further bandwidth.
If there is less than N*Bmax resources allocated, the LRM will expand 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 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 new FlowSpec, up to N*Bmax resources. The LRM will update the
based on what resources are available to the stream, but not the total FlowSpec based on what resources are available to the stream, but not
resources allocated for the group. the total resources allocated for the group.
It should be noted that ST agents and LRMs become aware of a group's 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. requirements only when the streams belonging to the group are
In case of the bandwidth sharing relationship, an application should created. In case of the bandwidth sharing relationship, an
attempt to establish the most demanding streams first to minimize application should attempt to establish the most demanding streams
stream setup efforts. If on the contrary the less demanding streams first to minimize stream setup efforts. If on the contrary the less
are built first, it will be always necessary to allocate additional demanding streams are built first, it will be always necessary to
bandwidth in consecutive steps as the most demanding streams are allocate additional bandwidth in consecutive steps as the most
built. It is also up to the applications to coordinate their different demanding streams are built. It is also up to the applications to
FlowSpecs and decide upon an appropriate value for N. coordinate their different FlowSpecs and decide upon an appropriate
value for N.
7.1.2 Fate Sharing 7.1.2 Fate Sharing
Streams belonging to this group share the same fate. If a stream is 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 deleted, the other members of the group are also deleted. This is
intended to support stream preemption by indicating which streams are intended to support stream preemption by indicating which streams are
mutually related. If preemption of multiple streams is necessary, this mutually related. If preemption of multiple streams is necessary,
information can be used by the LRM to delete a set of related streams, this information can be used by the LRM to delete a set of related
e.g. with impact on a single application, instead of making a random streams, e.g., with impact on a single application, instead of making
choice with the possible effect of interrupting several different a random choice with the possible effect of interrupting several
applications. This attribute does not apply to normal stream shut different applications. This attribute does not apply to normal
down, i.e. ReasonCode (ApplDisconnect). On normal disconnect, other stream shut down, i.e., ReasonCode (ApplDisconnect). On normal
streams belonging to such groups remain active. disconnect, other streams belonging to such groups remain active.
This relationship provides a hint on which streams should be This relationship provides a hint on which streams should be
preempted. Still, the LRM responsible for the preemption is not forced preempted. Still, the LRM responsible for the preemption is not
to behave accordingly, and other streams could be preempted first forced to behave accordingly, and other streams could be preempted
based on different criteria. first based on different criteria.
7.1.3 Route Sharing 7.1.3 Route Sharing
Streams belonging to this group share the same paths as much as is 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 possible. This can be desirable for several reasons, e.g., to exploit
the same allocated resources or in the attempt to maintain the the same allocated resources or in the attempt to maintain the
transmission order. An ST agent attempts to select the same path transmission order. An ST agent attempts to select the same path
although the way this is implemented depends heavily on the routing although the way this is implemented depends heavily on the routing
algorithm which is used. algorithm which is used.
If the routing algorithm is sophisticated enough, an ST agent can If the routing algorithm is sophisticated enough, an ST agent can
suggest that a stream is routed over an already established path. suggest that a stream is routed over an already established path.
Otherwise, it can ask the routing algorithm for a set of legal routes 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 to the destination and check whether the desired path is included in
those feasible. those feasible.
Route sharing is a hint to the routing algorithm used by ST. Failing 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 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 creation of a new stream or result in the deletion of an existing
stream. stream.
7.1.4 Subnet Resources Sharing 7.1.4 Subnet Resources Sharing
This relationship provides a hint to the data link layer functions. This relationship provides a hint to the data link layer functions.
Streams belonging to this group may share the same MAC layer Streams belonging to this group may share the same MAC layer
resources. As an example, the same MAC layer multicast address may be 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 used for all the streams in a given group. This mechanism allows for
better utilization of MAC layer multicast addresses and it is a better utilization of MAC layer multicast addresses and it is
especially useful when used with network adapters that offer a very especially useful when used with network adapters that offer a very
small number of MAC layer multicast addresses. small number of MAC layer multicast addresses.
7.2 Relationships Orthogonality 7.2 Relationships Orthogonality
The four basic relationships, as they have been defined, are The four basic relationships, as they have been defined, are
orthogonal. This means, any combinations of the basic relationships orthogonal. This means, any combinations of the basic relationships
are allowed. For instance, let's consider an application that requires are allowed. For instance, let's consider an application that
full-duplex service for a stream with multiple targets. Also, let's requires full-duplex service for a stream with multiple targets.
suppose that only N targets are allowed to send data back to the Also, let's suppose that only N targets are allowed to send data back
origin at the same time. In this scenario, all the reverse streams to the origin at the same time. In this scenario, all the reverse
could belong to the same group. They could be sharing both the paths streams could belong to the same group. They could be sharing both
and the bandwidth attributes. The Path&Bandwidth sharing relationship the paths and the bandwidth attributes. The Path&Bandwidth sharing
is obtained from the basic set of relationships. This example is relationship is obtained from the basic set of relationships. This
important because it shows how full-duplex service can be efficiently example is important because it shows how full-duplex service can be
obtained in ST. efficiently obtained in ST.
8 Ancillary Functions 8. Ancillary Functions
Certain functions are required by ST host and intermediate agent Certain functions are required by ST host and intermediate agent
implementations. Such functions are described in this section. implementations. Such functions are described in this section.
8.1 Stream ID Generation 8.1 Stream ID Generation
The stream ID, or SID, is composed of 16-bit unique identifier and the The stream ID, or SID, is composed of 16-bit unique identifier and
stream origin's 32-bit IP address. Stream IDs must be globally unique. the stream origin's 32-bit IP address. Stream IDs must be globally
The specific definition and format of the 16 -bit field is left to the unique. The specific definition and format of the 16 -bit field is
implementor. This field is expected to have only local significance. 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 An ST implementation has to provide a stream ID generator facility,
that an application or higher layer protocol can obtain a unique IDs so that an application or higher layer protocol can obtain a unique
from the ST layer. This is a mechanism for the application to request IDs from the ST layer. This is a mechanism for the application to
the allocation of stream ID that is independent of the request to request the allocation of stream ID that is independent of the
create a stream. The Stream ID is used by the application or higher request to create a stream. The Stream ID is used by the application
layer protocol when creating the streams. or higher layer protocol when creating the streams.
For instance, the following two functions could be made available: For instance, the following two functions could be made available:
o AllocateStreamID() -> result, StreamID o AllocateStreamID() -> result, StreamID
o ReleaseStreamID(StreamID) -> result o ReleaseStreamID(StreamID) -> result
An implementation may also provide a StreamID deletion function. An implementation may also provide a StreamID deletion function.
8.2 Group Name Generator 8.2 Group Name Generator
GroupName generation is similar to Stream ID generation. The GroupName GroupName generation is similar to Stream ID generation. The
includes a 16-bit unique identifier, a 32-bit creation timestamp, and GroupName includes a 16-bit unique identifier, a 32-bit creation
a 32-bit IP address. Group names are globally unique. A GroupName timestamp, and a 32-bit IP address. Group names are globally unique.
includes the creator's IP address, so this reduces a global uniqueness A GroupName includes the creator's IP address, so this reduces a
problem to a simple local problem. The specific definitions and global uniqueness problem to a simple local problem. The specific
formats of the 16-bit field and the 32-bit creation timestamp are left definitions and formats of the 16-bit field and the 32-bit creation
to the implementor. These fields must be locally unique, and only have timestamp are left to the implementor. These fields must be locally
local significance. unique, and only have local significance.
An ST implementation has to provide a group name generator facility, An ST implementation has to provide a group name generator facility,
so that an application or higher layer protocol can obtain a unique so that an application or higher layer protocol can obtain a unique
GroupName from the ST layer. This is a mechanism for the application GroupName from the ST layer. This is a mechanism for the application
to request the allocation of a GroupName that is independent of the to request the allocation of a GroupName that is independent of the
request to create a stream. The GroupName is used by the application 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 or higher layer protocol when creating the streams that are to be
of the group. part of the group.
For instance, the following two functions could be made available: For instance, the following two functions could be made available:
o AllocateGroupName() -> result, GroupName o AllocateGroupName() -> result, GroupName
o ReleaseGroupName(GroupName) -> result o ReleaseGroupName(GroupName) -> result
An implementation may also provide a GroupName deletion function. An implementation may also provide a GroupName deletion function.
8.3 Checksum Computation 8.3 Checksum Computation
The standard Internet checksum algorithm is used for ST: "The checksum The standard Internet checksum algorithm is used for ST: "The
field is the 16-bit one's complement of the one's complement sum of checksum field is the 16-bit one's complement of the one's complement
all 16-bit words in the header. For purposes of computing the 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], checksum, the value of the checksum field is zero (0)." See
[RFC1141], and [RFC791] for suggestions for efficient checksum [RFC1071], [RFC1141], and [RFC791] for suggestions for efficient
algorithms. checksum algorithms.
8.4 Neighbour ST Agent Identification and Information Collection 8.4 Neighbor ST Agent Identification and Information Collection
The STATUS message can be used to collect information about neighbour The STATUS message can be used to collect information about neighbor
ST agents, streams the neighbour supports, and specific targets of ST agents, streams the neighbor supports, and specific targets of
streams the neighbour supports. An agent receiving a STATUS message streams the neighbor supports. An agent receiving a STATUS message
provides the requested information via a STATUS-RESPONSE message. provides the requested information via a STATUS-RESPONSE message.
The STATUS message can be used to collect different information from a The STATUS message can be used to collect different information from
neighbour. It can be used to: a neighbor. It can be used to:
o identifying ST capable neighbours. If an ST agent wishes to check if o identify ST capable neighbors. If an ST agent wishes to check if
a neighbour is ST capable, it should generate a STATUS message with a neighbor is ST capable, it should generate a STATUS message with
an SID which has all its fields set to zero. An agent receiving a 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 STATUS message with such SID should answer with a STATUS-RESPONSE
containing the same SID, and no other stream information. The containing the same SID, and no other stream information. The
receiving ST agent must answer as soon as possible to aid in Round receiving ST agent must answer as soon as possible to aid in Round
Trip Time estimation, see Section 8.5; Trip Time estimation, see Section 8.5;
o obtain information on a particular stream. If an ST agent wishes to o obtain information on a particular stream. If an ST agent wishes to
check a neighbour's general information related to a specific check a neighbor's general information related to a specific
stream, it should generate a STATUS message containing the stream's stream, it should generate a STATUS message containing the stream's
SID. An ST agent receiving such a message, will first check to see 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 if the stream is known. If not known, the receiving ST agent sends a
STATUS-RESPONSE containing the same SID, and no other stream STATUS-RESPONSE containing the same SID, and no other stream
information. If the stream is known, the receiving ST agent sends a information. If the stream is known, the receiving ST agent sends a
STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
membership (if any), and as many targets as can be included in a 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 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 targets may not be included in a response to a request for general
stream information. If information on a specific target in a stream stream information. If information on a specific target in a stream
is desired, the mechanism described next should be used. is desired, the mechanism described next should be used.
o obtain information on particular targets in a stream. If an ST agent 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 wishes to check a neighbor's information related to one or more
specific targets of a specific stream, it should generate a STATUS specific targets of a specific stream, it should generate a STATUS
message containing the stream's SID and a TargetList parameter message containing the stream's SID and a TargetList parameter
listing the relevant targets. An ST agent receiving such a message, 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 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. stream is not known, the agent follows the process described above.
If both the stream and targets are known, the agent responds with If both the stream and targets are known, the agent responds with
STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
membership (if any), and the requested targets that are known. If 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 the stream is known but the target is not, the agent responds with a
STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group STATUS-RESPONSE containing the stream's SID, IPHops, FlowSpec, group
membership (if any), but no targets. membership (if any), but no targets.
The specific formats for STATUS and STATUS-RESPONSE messages are The specific formats for STATUS and STATUS-RESPONSE messages are
defined in Section 10.4.12 and Section 10.4.13. defined in Section 10.4.12 and Section 10.4.13.
8.5 Round Trip Time Estimation 8.5 Round Trip Time Estimation
SCMP is made reliable through use of retransmission when an expected SCMP is made reliable through use of retransmission when an expected
acknowledgment is not received in a timely manner. Timeout and acknowledgment is not received in a timely manner. Timeout and
retransmission algorithm is implementation dependent and it is outside retransmission algorithms are implementation dependent and are
the scope of this document. However, it must be reasonable enough not outside the scope of this document. However, it must be reasonable
to cause excessive retransmission of SCMP message while maintaining enough not to cause excessive retransmission of SCMP messages while
the robustness of the protocol. Algorithms on this subject are maintaining the robustness of the protocol. Algorithms on this
described in [WoHD95], [Jaco88], [KaPa87]. subject are described in [WoHD95], [Jaco88], [KaPa87].
Most existing algorithms are based on an estimation of the Round Trip 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 Time (RTT) between two hosts. With SCMP, if an ST agent wishes to
an estimate of the RTT to and from a neighbour, it should generate a have an estimate of the RTT to and from a neighbor, it should
STATUS message with an SID which has all its fields set to zero. An ST generate a STATUS message with an SID which has all its fields set to
agent receiving a STATUS message with such SID should answer as zero. An ST agent receiving a STATUS message with such SID should
rapidly as possible with a STATUS-RESPONSE message containing the same answer as rapidly as possible with a STATUS-RESPONSE message
SID, and no other stream information. The time interval between the containing the same SID, and no other stream information. The time
send and receive operations can be used as an estimate of the RTT to interval between the send and receive operations can be used as an
and from the neighbour. estimate of the RTT to and from the neighbor.
8.6 Network MTU Discovery
8.6 Network MTU Discovery
At connection setup, the application at the origin asks the local ST At connection setup, the application at the origin asks the local ST
agent to create streams with certain QoS requirements. 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 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 the CONNECT message and forwards it to the next-hop ST agents. Each
agent in the path checks to see if it's network MTU is smaller than the ST agent in the path checks to see if it's network MTU is smaller
one specified in the CONNECT message and, if it is, the ST agent than the one specified in the CONNECT message and, if it is, the ST
updates the MaxMsgSize in the CONNECT message to it's network MTU. If agent updates the MaxMsgSize in the CONNECT message to it's network
the target application decides to accept the stream, the ST agent at MTU. If the target application decides to accept the stream, the ST
the target copies the MTU value in the CONNECT message to appropriate agent at the target copies the MTU value in the CONNECT message to
field in the ACCEPT message and sends it back to the application at the MaxMsgSize field in the ACCEPT message and sends it back to the
the origin. The MaxMsgSize field in the ACCEPT message is the minimum application at the origin. The MaxMsgSize field in the ACCEPT message
MTU of network to that target. If the application has multiple targets is the minimum MTU of the intervening networks to that target. If the
then the minimum MTU of the stream is the smallest MaxMsgSize received application has multiple targets then the minimum MTU of the stream
from all the ACCEPT messages. It is the responsibility of the is the smallest MaxMsgSize received from all the ACCEPT messages. It
application to segment its PDUs according to the minimum MaxMsgSize of is the responsibility of the application to segment its PDUs
the stream since no data fragmentation is supported during the data according to the minimum MaxMsgSize of the stream since no data
transfer phase. If a particular target's MaxMsgSize is unacceptable to fragmentation is supported during the data transfer phase. If a
an application, it may disconnect the target from the stream and particular target's MaxMsgSize is unacceptable to an application, it
assume that the target cannot be supported. The application or may disconnect the target from the stream and assume that the target
application interface will need to take into account ST data header cannot be supported. When evaluating a particular target's
size in order to the application to make it's evaluation. MaxMsgSize, the application or the application interface will need to
take into account the size of the ST data header.
8.7 IP Encapsulation of ST 8.7 IP Encapsulation of ST
ST packets may be encapsulated in IP to allow them to pass through 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 routers that don't support the ST Protocol. Of course, ST resource
management is precluded over such a path, and packet overhead is management is precluded over such a path, and packet overhead is
increased by encapsulation, but if the performance is reasonably increased by encapsulation, but if the performance is reasonably
predictable this may be better than not communicating at all. predictable this may be better than not communicating at all.
IP-encapsulated ST packets begin with a normal IP header. Most fields 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 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: apply to any other IP packet. Three fields of special interest are:
o Protocol is 5, see [RFC1700], to indicate an ST packet is enclosed , o Protocol is 5, see [RFC1700], to indicate an ST packet is enclosed,
as opposed to TCP or UDP, for example. as opposed to TCP or UDP, for example.
o Destination Address is that of the next-hop ST agent. This may or 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 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 ST agent to which the packet should be routed to take advantage of
service guarantees on the path past that agent. Such an intermediate service guarantees on the path past that agent. Such an intermediate
agent would not be on a directly-connected network (or else IP agent would not be on a directly-connected network (or else IP
encapsulation wouldn't be needed), so it would probably not be encapsulation wouldn't be needed), so it would probably not be
listed in the normal routing table. Additional routing mechanisms, listed in the normal routing table. Additional routing mechanisms,
not defined here, will be required to learn about such agents. 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 o Type-of-Service may be set to an appropriate value for the service
being requested, see [RFC1700]. This feature is not implemented being requested, see [RFC1700]. This feature is not implemented
uniformly in the Internet, so its use can't be precisely defined uniformly in the Internet, so its use can't be precisely defined
here. here.
IP encapsulation adds little difficulty for the ST agent that receives IP encapsulation adds little difficulty for the ST agent that
the packet. However, when IP encapsulation is performed it must be receives the packet. However, when IP encapsulation is performed it
done in both directions. To process the encapsulated IP message, the must be done in both directions. To process the encapsulated IP
ST agents simply remove the IP header and proceed with ST header as message, the ST agents simply remove the IP header and proceed with
usual. ST header as usual.
The more difficult part is during setup, when the ST agent must decide The more difficult part is during setup, when the ST agent must
whether or not to encapsulate. If the next-hop ST agent is on a remote decide whether or not to encapsulate. If the next-hop ST agent is on
network and the route to that network is through a router that a remote network and the route to that network is through a router
supports IP but not ST, then encapsulation is required. The ST agents that supports IP but not ST, then encapsulation is required. The
make encapsulation decision based on information provided by routing routing function provides ST agents with the route and capability
function to indicate whether the routers in the path support ST. information needed to support encapsulation.
On forwarding, the (mostly constant) IP Header must be inserted and On forwarding, the (mostly constant) IP Header must be inserted and
the IP checksum appropriately updated. the IP checksum appropriately updated.
Applications are informed about the number of IP hops traversed on the Applications are informed about the number of IP hops traversed on
way to the targets. The IPHops field value of the CONNECT message, see the path to each target. The IPHops field of the CONNECT message, see
Section 10.4.4, is incremented at this purpose in case an ST agent Section 10.4.4, carries the number of traversed IP hops to the target
uses IP encapsulation to reach its next-hop. The value is then application. The field is incremented by each ST agent when IP
returned to the origin in the IPHops field of the ACCEPT message, encapsulation will be used to reach the next-hop ST agent. The number
Section 10.4.1. of IP hops traversed is returned to the origin in the IPHops field of
the ACCEPT message, Section 10.4.1.
When using IP Encapsulation, the MaxMsgSize field will not reflect the When using IP Encapsulation, the MaxMsgSize field will not reflect
MTU of the IP encapsulated segments. This means that IP fragmentation the MTU of the IP encapsulated segments. This means that IP
and reassembly may be needed in the IP cloud to support a message of fragmentation and reassembly may be needed in the IP cloud to support
MaxMsgSize. IP fragmentation can only occur when the MTU of the IP a message of MaxMsgSize. IP fragmentation can only occur when the MTU
cloud, less IP header length, is the smallest MTU in a stream's of the IP cloud, less IP header length, is the smallest MTU in a
network path. stream's network path.
8.8 IP Multicasting 8.8 IP Multicasting
If an ST agent must use IP encapsulation to reach multiple next-hops If an ST agent must use IP encapsulation to reach multiple next-hops
toward different targets, then either the packet must be replicated toward different targets, then either the packet must be replicated
for transmission to each next-hop, or IP multicasting may be used if 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 it is implemented in the next-hop ST agents and in the intervening IP
routers. routers.
When the stream is established, the collection of next-hop ST agents 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 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 an appropriate IP multicast address (see Section 10.3.3) and fill
address in the IPMulticastAddress field of the CONNECT message. The IP that address in the IPMulticastAddress field of the CONNECT message.
multicast address in the CONNECT message is used to inform the next- The IP multicast address in the CONNECT message is used to inform the
hop ST agents that they should join the multicast group to receive next-hop ST agents that they should join the multicast group to
subsequent PDUs. Obviously, the CONNECT message itself must be sent receive subsequent PDUs. Obviously, the CONNECT message itself must
using unicast. The next-hop ST agents must be able to receive on the be sent using unicast. The next-hop ST agents must be able to receive
specified multicast address in order to accept the connection. on the specified multicast address in order to accept the connection.
If the next-hop ST agent can not receive on the specified multicast If the next-hop ST agent can not receive on the specified multicast
address, it sends a REFUSE message with ReasonCode (BadMcastAddress). address, it sends a REFUSE message with ReasonCode (BadMcastAddress).
Upon receiving the REFUSE, the upstream agent can choose to retry with Upon receiving the REFUSE, the upstream agent can choose to retry
a different multicast address. Alternatively, it can choose to loose with a different multicast address. Alternatively, it can choose to
the efficiency of multicast and use unicast delivery. lose the efficiency of multicast and use unicast delivery.
The following permanent IP multicast addresses have been assigned to The following permanent IP multicast addresses have been assigned to
ST: ST:
224.0.0.7 All ST routers (intermediated agents) 224.0.0.7 All ST routers (intermediate agents)
224.0.0.8 All ST hosts (agents) 224.0.0.8 All ST hosts (agents)
In addition, a block of transient IP multicast addresses, 224.1.0.0 - 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 224.1.255.255, has been allocated for ST multicast groups. For
instance, the following two functions could be made available: instance, the following two functions could be made available:
o AllocateMcastAddr() -> result, McastAddr o AllocateMcastAddr() -> result, McastAddr
o ListenMcastAddr(McastAddr) -> result o ListenMcastAddr(McastAddr) -> result
o ReleaseMcastAddr(McastAddr) -> result o ReleaseMcastAddr(McastAddr) -> result
9 The ST2+ Flow Specification 9. The ST2+ Flow Specification
This section defines the ST2+ flow specification. The flow This section defines the ST2+ flow specification. The flow
specification contains the user application requirements in terms of specification contains the user application requirements in terms of
quality of service. Its contents are LRM dependent and are transparent quality of service. Its contents are LRM dependent and are
to the ST2 setup protocol. ST2 carries the flow specification as part transparent to the ST2 setup protocol. ST2 carries the flow
of the FlowSpec parameter, which is described in Section 10.3.1. The specification as part of the FlowSpec parameter, which is described
required ST2+ flow specification is included in the protocol only to in Section 10.3.1. The required ST2+ flow specification is included
support interoperability. ST2+ also defines a "null" flow in the protocol only to support interoperability. ST2+ also defines a
specification to be used only to support testing. "null" flow specification to be used only to support testing.
ST2 is not dependent on a particular flow specification format and it ST2 is not dependent on a particular flow specification format and it
is expected that other versions of the flow specification will be is expected that other versions of the flow specification will be
needed in the future. Different flow specification formats are needed in the future. Different flow specification formats are
distinguished by the value of the Version field of the FlowSpec distinguished by the value of the Version field of the FlowSpec
parameter, see Section 10.3.1. A single stream is always associated parameter, see Section 10.3.1. A single stream is always associated
with a single flow specification format, i.e. the Version field is with a single flow specification format, i.e., the Version field is
consistent throughout the whole stream. The following Version field consistent throughout the whole stream. The following Version field
values are defined: values are defined:
0 - Null FlowSpec /* must be supported */ 0 - Null FlowSpec /* must be supported */
1 - ST Version 1 1 - ST Version 1
2 - ST Version 1.5 2 - ST Version 1.5
3 - RFC 1190 FlowSpec 3 - RFC 1190 FlowSpec
4 - HeiTS FlowSpec 4 - HeiTS FlowSpec
5 - BerKom FlowSpec 5 - BerKom FlowSpec
6 - RFC 1363 FlowSpec 6 - RFC 1363 FlowSpec
7 - ST2+ FlowSpec /* must be supported */ 7 - ST2+ FlowSpec /* must be supported */
FlowSpecs version #0 and #7 must be supported by ST2+ implementations. FlowSpecs version #0 and #7 must be supported by ST2+
Version numbers in the range 1-6 indicate flow specifications are implementations. Version numbers in the range 1-6 indicate flow
currently used in existing ST2 implementations. Values in the 128-255 specifications are currently used in existing ST2 implementations.
range are reserved for private and experimental use. Values in the 128-255 range are reserved for private and experimental
use.
9.1 FlowSpec Version #0 - (Null FlowSpec) In general, a flow specification may support sophisticated flow
descriptions. For example, a flow specification could represent sub-
flows of a particular stream. This could then be used to by a
cooperating application and LRM to forward designated packets to
specific targets based on the different sub-flows. The reserved bits
in the ST2 Data PDU, see Section 10.1, may be used with such a flow
specification to designate packets associated with different sub-
flows. The ST2+ FlowSpec is not so sophisticated, and is intended for
use with applications that generate traffic at a single rate for
uniform delivery to all targets.
9.1 FlowSpec Version #0 - (Null FlowSpec)
The flow specification identified by a #0 value of the Version field The flow specification identified by a #0 value of the Version field
is called the Null FlowSpec. This flow specification causes no is called the Null FlowSpec. This flow specification causes no
resources to be allocated. It is ignored by the LRMs. Its contents are resources to be allocated. It is ignored by the LRMs. Its contents
never updated. Stream setup takes place in the usual way leading to are never updated. Stream setup takes place in the usual way leading
successful stream establishment, but no resources are actually to successful stream establishment, but no resources are actually
reserved. reserved.
The purpose of the Null FlowSpec is that of facilitating The purpose of the Null FlowSpec is that of facilitating
interoperability tests by allowing streams to be built without interoperability tests by allowing streams to be built without
actually allocating the correspondent amount of resources. The Null actually allocating the correspondent amount of resources. The Null
FlowSpec may also be used for testing and debugging purposes. FlowSpec may also be used for testing and debugging purposes.
The Null FlowSpec comprises the 4-byte FlowSpec parameter only, see 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. Section 10.3.1. The third byte (Version field) must be set to 0.
9.2 FlowSpec Version #7 - ST2+ FlowSpec 9.2 FlowSpec Version #7 - ST2+ FlowSpec
The flow specification identified by a #7 value of the Version field The flow specification identified by a #7 value of the Version field
is the ST2+ FlowSpec, to be used by all ST2+ implementations. It is the ST2+ FlowSpec, to be used by all ST2+ implementations. It
allows the user applications to express their real-time requirements allows the user applications to express their real-time requirements
in the form of a QoS class, precedence, and three basic QoS in the form of a QoS class, precedence, and three basic QoS
parameters: parameters:
o message size, o message size,
o message rate, o message rate,
o end-to-end delay. o end-to-end delay.
The QoS class indicates what kind of QoS guarantees are expected by The QoS class indicates what kind of QoS guarantees are expected by
the application, e.g. strict guarantees or predictive, see Section the application, e.g., strict guarantees or predictive, see Section
9.2.1. QoS parameters are expressed via a set of values: 9.2.1. QoS parameters are expressed via a set of values:
o the "desired" values indicate the QoS desired by the application. o the "desired" values indicate the QoS desired by the application.
These values are assigned by the application and never modified by These values are assigned by the application and never modified by
the LRM. the LRM.
o the "limit" values indicate the lowest QoS the application is o the "limit" values indicate the lowest QoS the application is
willing to accept. These values are also assigned by the application willing to accept. These values are also assigned by the application
and never modified by the LRM. and never modified by the LRM.
o the "actual" values indicate the QoS that the system is able to 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" provide. They are updated by the LRM at each node. The "actual"
values are always bounded by the "limit" and "desired" values. values are always bounded by the "limit" and "desired" values.
9.2.1 QoS Classes 9.2.1 QoS Classes
Two QoS classes are defined: Two QoS classes are defined:
1 - QOS_PREDICTIVE /* QoSClass field value = 0x01, must be 1 - QOS_PREDICTIVE /* QoSClass field value = 0x01, must be
supported*/ supported*/
2 - QOS_GUARANTEED /* QoSClass field value = 0x10, optional */ 2 - QOS_GUARANTEED /* QoSClass field value = 0x10, optional */
o The QOS_PREDICTIVE class implies that the negotiated QoS may be o The QOS_PREDICTIVE class implies that the negotiated QoS may be
violated for short time intervals during the data transfer. An violated for short time intervals during the data transfer. An
application has to provide values that take into account the average application has to provide values that take into account the
case, e.g. the "desired" message rate is the average rate for the "normal" case, e.g., the "desired" message rate is the allocated rate
transmission. Reservations are done for the average case as opposite for the transmission. Reservations are done for the "normal" case as
to the peak case required by the QOS_GUARANTEED service class. This opposite to the peak case required by the QOS_GUARANTEED service
QoS class must be supported by all implementations. class. This QoS class must be supported by all implementations.
o The QOS_GUARANTEED class implies that the negotiated QoS for the o The QOS_GUARANTEED class implies that the negotiated QoS for the
stream is never violated during the data transfer. An application stream is never violated during the data transfer. An application
has to provide values that take into account the worst possible has to provide values that take into account the worst possible
case, e.g. the "desired" message rate is the peak rate for the case, e.g., the "desired" message rate is the peak rate for the
transmission. As a result, sufficient resources to handle the peak transmission. As a result, sufficient resources to handle the peak
rate are reserved. This strategy may lead to overbooking of rate are reserved. This strategy may lead to overbooking of
resources, but it provides strict real-time guarantees. Support of resources, but it provides strict real-time guarantees. Support of
this QoS class is optional. this QoS class is optional.
If a LRM that doesn't support class QOS_GUARANTEED receives a FlowSpec If a LRM that doesn't support class QOS_GUARANTEED receives a
containing QOS_GUARANTEED class, it informs the local ST agent. The ST FlowSpec containing QOS_GUARANTEED class, it informs the local ST
agent may try different paths or delete the correspondent portion of agent. The ST agent may try different paths or delete the
the stream as described in Section 5.5.3, i.e. ReasonCode correspondent portion of the stream as described in Section 5.5.3,
(FlowSpecError). i.e., ReasonCode (FlowSpecError).
9.2.2 Precedence 9.2.2 Precedence
Precedence is the importance of the connection being established. Zero Precedence is the importance of the connection being established.
represents the lowest precedence. The lowest level is expected to be Zero represents the lowest precedence. The lowest level is expected
used by default. In general, the distinction between precedence and to be used by default. In general, the distinction between precedence
priority is that precedence specifies streams that are permitted to and priority is that precedence specifies streams that are permitted
take previously committed resources from another stream, while to take previously committed resources from another stream, while
priority identifies those PDUs that a stream is most willing to have priority identifies those PDUs that a stream is most willing to have
dropped. dropped.
9.2.3 Maximum Data Size 9.2.3 Maximum Data Size
This parameter is expressed in bytes. It represents the maximum amount This parameter is expressed in bytes. It represents the maximum
of data, excluding ST and other headers, allowed to be sent in a amount of data, excluding ST and other headers, allowed to be sent in
messages as part of the stream. The LRM first checks whether it is 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 possible to get the value desired by the application (DesMaxSize). If
not, it updates the actual value (ActMaxSize) with the available size not, it updates the actual value (ActMaxSize) with the available size
unless this value is inferior to the minimum allowed by the unless this value is inferior to the minimum allowed by the
application (LimitMaxSize), in which case it informs the local ST application (LimitMaxSize), in which case it informs the local ST
agent that it is not possible to build the stream along this path. agent that it is not possible to build the stream along this path.
9.2.4 Message Rate 9.2.4 Message Rate
This parameter is expressed in messages/second. It represents the This parameter is expressed in messages/second. It represents the
transmission rate for the stream. The LRM first checks whether it is transmission rate for the stream. The LRM first checks whether it is
possible to get the value desired by the application (DesRate). If possible to get the value desired by the application (DesRate). If
not, it updates the actual value (ActRate) with the available rate not, it updates the actual value (ActRate) with the available rate
unless this value is inferior to the minimum allowed by the unless this value is inferior to the minimum allowed by the
application (LimitRate), in which case it informs the local ST agent application (LimitRate), in which case it informs the local ST agent
that it is not possible to build the stream along this path. that it is not possible to build the stream along this path.
9.2.5 Delay and Delay Jitter 9.2.5 Delay and Delay Jitter
The delay parameter is expressed in milliseconds. It represents the The delay parameter is expressed in milliseconds. It represents the
maximum end-to-end delay for the stream. The LRM first checks whether maximum end-to-end delay for the stream. The LRM first checks whether
it is possible to get the value desired by the application it is possible to get the value desired by the application
(DesMaxDelay). If not, it updates the actual value (ActMaxDelay) with (DesMaxDelay). If not, it updates the actual value (ActMaxDelay) with
the available delay unless this value is greater than the maximum the available delay unless this value is greater than the maximum
delay allowed by the application (LimitMaxDelay), in which case it delay allowed by the application (LimitMaxDelay), in which case it
informs the local ST agent that it is not possible to build the stream informs the local ST agent that it is not possible to build the
along this path. stream along this path.
The LRM also updates at each node the MinDelay field by incrementing 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 it by the minimum possible delay to the next-hop. Information on the
minimum possible delay allows to calculate the maximum end-to-end 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 delay range, i.e., the time interval in which a data packet can be
received. This interval should not exceed the DesMaxDelayRange value received. This interval should not exceed the DesMaxDelayRange value
indicated by the application. The maximum end-to-end delay range is an indicated by the application. The maximum end-to-end delay range is
upper bound to the delay jitter. an upper bound of the delay jitter.
9.2.6 ST2+ FlowSpec Format 9.2.6 ST2+ FlowSpec Format
The ST2+ FlowSpec has the following format: The ST2+ FlowSpec has the following format:
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| QosClass | Precedence | 0(unused) | | QosClass | Precedence | 0(unused) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DesRate | | DesRate |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LimitRate | | LimitRate |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ActRate | | ActRate |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DesMaxSize | LimitMaxSize | | DesMaxSize | LimitMaxSize |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ActMaxSize | DesMaxDelay | | ActMaxSize | DesMaxDelay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LimitMaxDelay | ActMaxDelay | | LimitMaxDelay | ActMaxDelay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DesMaxDelayRange | ActMinDelay | | DesMaxDelayRange | ActMinDelay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 9: The ST2+ FlowSpec. Figure 9: The ST2+ FlowSpec.
The LRM modifies only "actual" fields, i.e. those beginning with The LRM modifies only "actual" fields, i.e., those beginning with
"Act". The user application assigns values to all other fields. "Act". The user application assigns values to all other fields.
o QoSClass indicates which of the two defined classes of service o QoSClass indicates which of the two defined classes of service
applies. The two classes are: QOS_PREDICTIVE (QoSClass = 1) and applies. The two classes are: QOS_PREDICTIVE (QoSClass = 1) and
QOS_GUARANTEED (QoSClass = 2). QOS_GUARANTEED (QoSClass = 2).
o Precedence indicates the stream's precedence. Zero represents the o Precedence indicates the stream's precedence. Zero represents the
lowest precedence, and should be the default value. lowest precedence, and should be the default value.
o DesRate is the desired transmission rate for the stream in messages/ 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 second. This field is set by the origin and is not modified by
intermediate agents. intermediate agents.
o LimitRate is the minimum acceptable transmission rate in messages/ o LimitRate is the minimum acceptable transmission rate in messages/
second. This field is set by the origin and is not modified by second. This field is set by the origin and is not modified by
intermediate agents. intermediate agents.
o ActRate is the actual transmission rate allocated for the stream in o ActRate is the actual transmission rate allocated for the stream in
messages/second. Each agent updates this field with the available messages/second. Each agent updates this field with the available
rate unless this value is less than LimitRate, in which case a rate unless this value is less than LimitRate, in which case a
REFUSE is generated. REFUSE is generated.
o DesMaxSize is the desired maximum data size in bytes that will be 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. 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 o LimitMaxSize is the minimum acceptable data size in bytes. This
field is set by the origin field is set by the origin
o ActMaxSize is the actual maximum data size that may be sent in a 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 message in the stream. This field is updated by each agent based on
MTU and available resources. If available maximum size is less than MTU and available resources. If available maximum size is less than
LimitMaxSize, the connection must be refused with ReasonCode LimitMaxSize, the connection must be refused with ReasonCode
(CantGetResrc). (CantGetResrc).
o DesMaxDelay is the desired maximum end-to-end delay for the stream o DesMaxDelay is the desired maximum end-to-end delay for the stream
in milliseconds. This field is set by the origin. in milliseconds. This field is set by the origin.
o LimitMaxDelay is the upper-bound of acceptable end-to-end delay for o LimitMaxDelay is the upper-bound of acceptable end-to-end delay for
the stream in milliseconds. This field is set by the origin. 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 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 data in the stream. Each ST agent adds to this field the maximum
delay that will be introduced by the agent, including transmission delay that will be introduced by the agent, including transmission
time to the next-hop ST agent. If the actual maximum exceeds time to the next-hop ST agent. If the actual maximum exceeds
LimitMaxDelay, then the connection is refused with ReasonCode LimitMaxDelay, then the connection is refused with ReasonCode
(CantGetResrc). (CantGetResrc).
o DesMaxDelayRange is the desired maximum delay range that may be o DesMaxDelayRange is the desired maximum delay range that may be
encountered end-to-end by stream data in milliseconds. This value is encountered end-to-end by stream data in milliseconds. This value is
set by the application at the origin. set by the application at the origin.
o ActMinDelay is the actual minimum end-to-end delay that will be o ActMinDelay is the actual minimum end-to-end delay that will be
encountered by stream data in milliseconds. Each ST agent adds to encountered by stream data in milliseconds. Each ST agent adds to
this field the minimum delay that will be introduced by the agent, this field the minimum delay that will be introduced by the agent,
including transmission time to the next-hop ST agent. Each agent including transmission time to the next-hop ST agent. Each agent
must add at least 1 millisecond. The delay range for the stream can must add at least 1 millisecond. The delay range for the stream can
be calculated from the actual maximum and minimum delay fields. It be calculated from the actual maximum and minimum delay fields. It
is expected that the range will be important to some applications. is expected that the range will be important to some applications.
10 ST2 Protocol Data Units Specification 10. ST2 Protocol Data Units Specification
10.1 Data PDU 10.1 Data PDU
IP and ST packets can be distinguished by the IP Version Number field, IP and ST packets can be distinguished by the IP Version Number
i.e. the first four (4) bits of the packet; ST has been assigned the field, i.e., the first four (4) bits of the packet; ST has been
value 5 (see [RFC1700]). There is no requirement for compatibility assigned the value 5 (see [RFC1700]). There is no requirement for
between IP and ST packet headers beyond the first four bits. (IP uses compatibility between IP and ST packet headers beyond the first four
value 4.) bits. (IP uses value 4.)
The ST PDUs sent between ST agents consist of an ST Header The ST PDUs sent between ST agents consist of an ST Header
encapsulating either a higher layer PDU or an ST Control Message. Data encapsulating either a higher layer PDU or an ST Control Message.
packets are distinguished from control messages via the D-bit (bit 8) Data packets are distinguished from control messages via the D-bit
in the ST header. (bit 8) in the ST header.
The ST Header also includes an ST Version Number, a total length 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 field, a header checksum, a unique id, and the stream origin 32-bit
address. The unique id and the stream origin 32-bit IP address form IP address. The unique id and the stream origin 32-bit IP address
the stream id (SID). This is shown in Figure 10. Please refer to form the stream id (SID). This is shown in Figure 10. Please refer to
Section 10.6 for an explanation of the notation. Section 10.6 for an explanation of the notation.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ST=5 | Ver=3 |D| Pri | 0 | TotalBytes | | ST=5 | Ver=3 |D| Pri | 0 | TotalBytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HeaderChecksum | UniqueID | | HeaderChecksum | UniqueID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OriginIPAddress | | OriginIPAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 10: ST Header Figure 10: ST Header
o ST is the IP Version Number assigned to identify ST packets. The o ST is the IP Version Number assigned to identify ST packets. The
value for ST is 5. value for ST is 5.
o Ver is the ST Version Number. The value for the current ST2+ version o Ver is the ST Version Number. The value for the current ST2+ version
is 3. is 3.
o D (bit 8) is set to 1 in all ST data packets and to 0 in all SCMP o D (bit 8) is set to 1 in all ST data packets and to 0 in all SCMP
control messages. control messages.
o Pri (bits 9-11) is the packet-drop priority field with zero (0) 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 being lowest priority and seven the highest. The field is to be used
as described in Section 3.2.2. as described in Section 3.2.2.
o TotalBytes is the length, in bytes, of the entire ST packet, it o TotalBytes is the length, in bytes, of the entire ST packet, it
includes the ST Header but does not include any local network includes the ST Header but does not include any local network
headers or trailers. In general, all length fields in the ST headers or trailers. In general, all length fields in the ST
Protocol are in units of bytes. Protocol are in units of bytes.
o HeaderChecksum covers only the ST Header (12 bytes). The ST Protocol 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 uses 16-bit checksums here in the ST Header and in each Control
Message. For checksum computation, see Section 8.3. Message. For checksum computation, see Section 8.3.
o UniqueID is the first element of the stream ID (SID). It is locally o UniqueID is the first element of the stream ID (SID). It is locally
unique at the stream origin, see Section 8.1. unique at the stream origin, see Section 8.1.
o OriginIPAddress is the second element of the SID. It is the 32-bit o OriginIPAddress is the second element of the SID. It is the 32-bit
IP address of the stream origin, see Section 8.1. 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 Bits 12-15 must be set to zero (0) when using the flow specifications
reserved for future use, e.g., as described in [WoHD95]. defined in this document, see Section 9. They may be set accordingly
when other flow specifications are used, e.g., as described in
[WoHD95].
10.1.1 ST Data Packets 10.1.1 ST Data Packets
ST packets whose D-bit is non-zero are data packets. Their ST packets whose D-bit is non-zero are data packets. Their
interpretation is a matter for the higher layer protocols and interpretation is a matter for the higher layer protocols and
consequently is not specified here. The data packets are not protected consequently is not specified here. The data packets are not
by an ST checksum and will be delivered to the higher layer protocol protected by an ST checksum and will be delivered to the higher layer
even with errors. ST agents will not pass data packets over a new hop protocol even with errors. ST agents will not pass data packets over
whose setup is not complete. a new hop whose setup is not complete.
10.2 Control PDUs 10.2 Control PDUs
SCMP control messages are exchanged between neighbor ST agents using a SCMP control messages are exchanged between neighbor ST agents using
D-bit of zero (0). The control protocol follows a request-response a D-bit of zero (0). The control protocol follows a request-response
model with all requests expecting responses. Retransmission after model with all requests expecting responses. Retransmission after
timeout (see Section 4.3) is used to allow for lost or ignored timeout (see Section 4.3) is used to allow for lost or ignored
messages. Control messages do not extend across packet boundaries; if 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 a control message is too large for the MTU of a hop, its information
partitioned and a control message per partition is sent (see Section is partitioned and a control message per partition is sent (see
5.1.2). All control messages have the following format Section 5.1.2). All control messages have the following format
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OpCode | Options | TotalBytes | | OpCode | Options | TotalBytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference | LnkReference | | Reference | LnkReference |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SenderIPAddress | | SenderIPAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | ReasonCode | | Checksum | ReasonCode |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: OpCodeSpecificData : : OpCodeSpecificData :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 11: ST Control Message Format Figure 11: ST Control Message Format
o OpCode identifies the type of control message. o OpCode identifies the type of control message.
o Options is used to convey OpCode-specific variations for a control o Options is used to convey OpCode-specific variations for a control
message. message.
o TotalBytes is the length of the control message, in bytes, including o TotalBytes is the length of the control message, in bytes, including
all OpCode specific fields and optional parameters. The value is all OpCode specific fields and optional parameters. The value is
always divisible by four (4). always divisible by four (4).
o Reference is a transaction number. Each sender of a request control o Reference is a transaction number. Each sender of a request control
message assigns a Reference number to the message that is unique message assigns a Reference number to the message that is unique
with respect to the stream. The Reference number is used by the with respect to the stream. The Reference number is used by the
receiver to detect and discard duplicates. Each acknowledgment receiver to detect and discard duplicates. Each acknowledgment
carries the Reference number of the request being acknowledged. carries the Reference number of the request being acknowledged.
Reference zero (0) is never used, and Reference numbers are assumed Reference zero (0) is never used, and Reference numbers are assumed
to be monotonically increasing with wraparound so that the older- to be monotonically increasing with wraparound so that the older-
than and more-recent-than relations are well defined. than and more-recent-than relations are well defined.
o LnkReference contains the Reference field of the request control o LnkReference contains the Reference field of the request control
message that caused this request control message to be created. It message that caused this request control message to be created. It
is used in situations where a single request leads to multiple is used in situations where a single request leads to multiple
responses from the same ST agent. Examples are CONNECT and CHANGE responses from the same ST agent. Examples are CONNECT and CHANGE
messages that are first acknowledged hop-by-hop and then lead to an messages that are first acknowledged hop-by-hop and then lead to an
ACCEPT or REFUSE response from each target. ACCEPT or REFUSE response from each target.
o SenderIPAddress is the 32-bit IP address of the network interface o SenderIPAddress is the 32-bit IP address of the network interface
that the ST agent used to send the control message. This value 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- changes each time the packet is forwarded by an ST agent (hop-by-
hop). hop).
o Checksum is the checksum of the control message. Because the control o Checksum is the checksum of the control message. Because the control
messages are sent in packets that may be delivered with bits in messages are sent in packets that may be delivered with bits in
error, each control message must be checked to be error free before error, each control message must be checked to be error free before
it is acted upon. it is acted upon.
o ReasonCode is set to zero (0 = NoError) in most SCMP messages. o ReasonCode is set to zero (0 = NoError) in most SCMP messages.
Otherwise, it can be set to an appropriate value to indicate an Otherwise, it can be set to an appropriate value to indicate an
error situation as defined in Section 10.5.3. error situation as defined in Section 10.5.3.
o OpCodeSpecificData contains any additional information that is o OpCodeSpecificData contains any additional information that is
associated with the control message. It depends on the specific associated with the control message. It depends on the specific
control message and is explained further below. In some response control message and is explained further below. In some response
control messages, fields of zero (0) are included to allow the control messages, fields of zero (0) are included to allow the
format to match that of the corresponding request message. The format to match that of the corresponding request message. The
OpCodeSpecificData may also contain optional parameters. The OpCodeSpecificData may also contain optional parameters. The
specifics of OpCodeSpecificData are defined in Section 10.3. specifics of OpCodeSpecificData are defined in Section 10.3.
10.3 Common SCMP Elements 10.3 Common SCMP Elements
Several fields and parameters (referred to generically as elements) Several fields and parameters (referred to generically as elements)
are common to two or more PDUs. They are described in detail here are common to two or more PDUs. They are described in detail here
instead of repeating their description several times. In many cases, instead of repeating their description several times. In many cases,
the presence of a parameter is optional. To permit the parameters to the presence of a parameter is optional. To permit the parameters to
be easily defined and parsed, each is identified with a PCode byte be easily defined and parsed, each is identified with a PCode byte
that is followed by a PBytes byte indicating the length of the that is followed by a PBytes byte indicating the length of the
parameter in bytes (including the PCode, PByte, and any padding 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). If the length of the information is not a multiple of four
bytes, the parameter is padded with one to three zero (0) bytes. (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 PBytes is thus always a multiple of four (4). Parameters can be
present in any order. present in any order.
10.3.1 FlowSpec 10.3.1 FlowSpec
The FlowSpec parameter (PCode = 1) is used in several SCMP messages to The FlowSpec parameter (PCode = 1) is used in several SCMP messages
convey the ST2 flow specification. The FlowSpec parameter has the to convey the ST2 flow specification. The FlowSpec parameter has the
following format: following format:
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 1 | PBytes | Version | 0 | | PCode = 1 | PBytes | Version | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: FlowSpec detail : : FlowSpec detail :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 12: FlowSpec Parameter Figure 12: FlowSpec Parameter
o the Version field contains the FlowSpec version. o the Version field contains the FlowSpec version.
o the FlowSpec detail field contains the flow specification and is o the FlowSpec detail field contains the flow specification and is
transparent to the ST agent. It is the data structure to be passed transparent to the ST agent. It is the data structure to be passed
to the LRM. It must be 4-byte aligned. to the LRM. It must be 4-byte aligned.
The Null FlowSpec, see Section 9.1, has no FlowSpec detail field. 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+ 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 FlowSpec, see Section 9.2, is a 32-byte data structure. PBytes is set
to 36, and Version is set to seven (7). to 36, and Version is set to seven (7).
10.3.2 Group 10.3.2 Group
The Group parameter (PCode = 2) is an optional argument used to The Group parameter (PCode = 2) is an optional argument used to
indicate that the stream is a member in the specified group. indicate that the stream is a member in the specified group.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 2 | PBytes = 16 | GroupUniqueID | | PCode = 2 | PBytes = 16 | GroupUniqueID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| GroupCreationTime | | GroupCreationTime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| GroupInitiatorIPAddress | | GroupInitiatorIPAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Relationship | N | | Relationship | N |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 13: Group Parameter Figure 13: Group Parameter
o GroupUniqueID, GroupInitiatorIPAddress, and GroupCreationTime o GroupUniqueID, GroupInitiatorIPAddress, and GroupCreationTime
together form the GroupName field. They are allocated by the group together form the GroupName field. They are allocated by the group
name generator function, see Section 8.2. GroupUniqueID and name generator function, see Section 8.2. GroupUniqueID and
GroupCreationTime are implementation specific and have only local GroupCreationTime are implementation specific and have only local
definitions. definitions.
o Relationship has the following format: o Relationship has the following format:
0 0
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 (unused) |S|P|F|B| | 0 (unused) |S|P|F|B|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 14: Relationship Field Figure 14: Relationship Field
The B, F, P, S bits correspond to Bandwidth, Fate, Path, and Subnet 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 resources sharing, see Section 7. A value of 1 indicates that the
relationship exists for this group. All combinations of the four bits relationship exists for this group. All combinations of the four bits
are allowed. Bits 0-11 of the Relationship field are reserved for are allowed. Bits 0-11 of the Relationship field are reserved for
future use and must be set to 0. 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 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. of the N parameter to be used as explained in Section 7.1.1.
10.3.3 MulticastAddress 10.3.3 MulticastAddress
The MulticastAddress parameter (PCode = 3) is an optional parameter The MulticastAddress parameter (PCode = 3) is an optional parameter
that is used when using IP encapsulation and setting up an IP that is used when using IP encapsulation and setting up an IP
multicast group. This parameter is used to communicate the desired IP multicast group. This parameter is used to communicate the desired IP
multicast address to next-hop ST agents that should become members of multicast address to next-hop ST agents that should become members of
the group, see Section 8.8. the group, see Section 8.8.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 3 | PBytes = 8 | 0 | | PCode = 3 | PBytes = 8 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPMulticastAddress | | IPMulticastAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 15: MulticastAddress Figure 15: MulticastAddress
o IPMulticastAddress is the 32-bit IP multicast address to be used to o IPMulticastAddress is the 32-bit IP multicast address to be used to
receive data packets for the stream. receive data packets for the stream.
10.3.4 Origin 10.3.4 Origin
The Origin parameter (PCode = 4) is used to identify the next higher The Origin parameter (PCode = 4) is used to identify the next higher
protocol, and the SAP being used in conjunction with that protocol. protocol, and the SAP being used in conjunction with that protocol.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 5 | PBytes | NextPcol |OriginSAPBytes | | PCode = 5 | PBytes | NextPcol |OriginSAPBytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: OriginSAP : Padding | : OriginSAP : Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 16: Origin Figure 16: Origin
o NextPcol is an 8-bit field used in demultiplexing operations to o NextPcol is an 8-bit field used in demultiplexing operations to
identify the protocol to be used above ST. The values of NextPcol 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 in the same number space as the IP header's Protocol field and
are consequently defined in the Assigned Numbers RFC [RFC1700]. are consequently defined in the Assigned Numbers RFC [RFC1700].
o OriginSAPBytes specifies the length of the OriginSAP, exclusive of o OriginSAPBytes specifies the length of the OriginSAP, exclusive of
any padding required to maintain 32-bit alignment. any padding required to maintain 32-bit alignment.
o OriginSAP identifies the origin's SAP associated with the NextPcol o OriginSAP identifies the origin's SAP associated with the NextPcol
protocol. protocol.
Note that the 32-bit IP address of the stream origin is not included 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 in this parameter because it is always available as part of the ST
header. header.
10.3.5 RecordRoute 10.3.5 RecordRoute
The RecordRoute parameter (PCode = 5) is used to request that the The RecordRoute parameter (PCode = 5) is used to request that the
route between the origin and a target be recorded and delivered to the route between the origin and a target be recorded and delivered to
user application. The ST agent at the origin (or target) including the user application. The ST agent at the origin (or target)
this parameter, has to determine the parameter's length, indicated by including this parameter, has to determine the parameter's length,
the PBytes field. ST agents processing messages containing this indicated by the PBytes field. ST agents processing messages
parameter add their receiving IP address in the position indicated by containing this parameter add their receiving IP address in the
the FreeOffset field, space permitting. If no space is available, the position indicated by the FreeOffset field, space permitting. If no
parameter is passed unchanged. When included by the origin, all agents space is available, the parameter is passed unchanged. When included
between the origin and the target add their IP addresses and this by the origin, all agents between the origin and the target add their
information is made available to the application at the target. When IP addresses and this information is made available to the
included by the target, all agents between the target and the origin, application at the target. When included by the target, all agents
inclusive, add their IP addresses and this information is made between the target and the origin, inclusive, add their IP addresses
available to the application at the origin. and this information is made available to the application at the
origin.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 5 | PBytes | 0 | FreeOffset | | PCode = 5 | PBytes | 0 | FreeOffset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address 1 | | IP Address 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ... : : ... :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address N | | IP Address N |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 17: RecordRoute Figure 17: RecordRoute
o PBytes is the length of the parameter in bytes. Length is determined o PBytes is the length of the parameter in bytes. Length is determined
by the agent (target or origin) that first introduces the parameter. 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 Once set, the length of the parameter remains unchanged.
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 o FreeOffset indicates the offset, relative to the start of the
processing this parameter. parameter, for the next IP address to be recorded. When the
FreeOffset is greater than, or equal to, PBytes the RecordRoute
parameter is full.
10.3.6 Target and TargetList 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 = Several control messages use a parameter called TargetList (PCode =
6), which contains information about the targets to which the message 6), which contains information about the targets to which the message
pertains. For each Target in the TargetList, the information includes pertains. For each Target in the TargetList, the information includes
the 32-bit IP address of the target, the SAP applicable to the next the 32-bit IP address of the target, the SAP applicable to the next
higher layer protocol, and the length of the SAP (SAPBytes). higher layer protocol, and the length of the SAP (SAPBytes).
Consequently, a Target structure can be of variable length. Each entry Consequently, a Target structure can be of variable length. Each
has the format shown in Figure 18. entry has the format shown in Figure 18.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target IP Address | | Target IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TargetBytes | SAPBytes | SAP : Padding | | TargetBytes | SAPBytes | SAP : Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 18: Target Figure 18: Target
o TargetIPAddress is the 32-bit IP Address of the Target. o TargetIPAddress is the 32-bit IP Address of the Target.
o TargetBytes is the length of the Target structure, beginning with o TargetBytes is the length of the Target structure, beginning with
the TargetIPAddress. the TargetIPAddress.
o SAPBytes is the length of the SAP, excluding any padding required to o SAPBytes is the length of the SAP, excluding any padding required to
maintain 32-bit alignment. maintain 32-bit alignment.
o SAP may be longer than 2 bytes and it includes a padding when 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 required. There would be no padding required for SAPs with lengths
of 2, 6, 10, etc., bytes. of 2, 6, 10, etc., bytes.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 6 | PBytes | TargetCount = N | | PCode = 6 | PBytes | TargetCount = N |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target 1 | | Target 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: : : : : :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target N | | Target N |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 19: TargetList Figure 19: TargetList
10.3.7 UserData
10.3.7 UserData
The UserData parameter (PCode = 7) is an optional parameter that may The UserData parameter (PCode = 7) is an optional parameter that may
be used by the next higher protocol or an application to convey be used by the next higher protocol or an application to convey
arbitrary information to its peers. This parameter is propagated in arbitrary information to its peers. This parameter is propagated in
some control messages and its contents have no significance to ST some control messages and its contents have no significance to ST
agents. Note that since the size of control messages is limited by the agents. Note that since the size of control messages is limited by
smallest MTU in the path to the targets, the maximum size of this 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 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 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 described in Section 5.1.2. The parameter must be padded to a
of 32 bits. multiple of 32 bits.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PCode = 7 | PBytes | UserBytes | | PCode = 7 | PBytes | UserBytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: UserInfo : Padding | : UserInfo : Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 20: UserData Figure 20: UserData
o UserBytes specifies the number of valid UserInfo bytes. o UserBytes specifies the number of valid UserInfo bytes.
o UserInfo is arbitrary data meaningful to the next higher protocol o UserInfo is arbitrary data meaningful to the next higher protocol
layer or application. layer or application.
10.3.8 Handling of Undefined Parameters 10.3.8 Handling of Undefined Parameters
An ST agent must be able to handle all parameters listed above. To An ST agent must be able to handle all parameters listed above. To
support possible future uses, parameters with unknown PCodes must also support possible future uses, parameters with unknown PCodes must
be supported. If an agent receives a message containing a parameter also be supported. If an agent receives a message containing a
with an unknown Pcode value, the agent should handle the parameter as parameter with an unknown Pcode value, the agent should handle the
if it was a UserData parameter. That is, the contents of the parameter parameter as if it was a UserData parameter. That is, the contents of
should be ignored, and the message should be propagated, as the parameter should be ignored, and the message should be
appropriate, along with the related control message. propagated, as appropriate, along with the related control message.
10.4 ST Control Message PDUs 10.4 ST Control Message PDUs
ST Control messages are described in the following section. Please ST Control messages are described in the following section. Please
refer to Section 10.6 for an explanation of the notation. refer to Section 10.6 for an explanation of the notation.
10.4.1 ACCEPT 10.4.1 ACCEPT
ACCEPT (OpCode = 1) is issued by a target as a positive response to a 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 CONNECT message. It implies that the target is prepared to accept
from the origin along the stream that was established by the CONNECT. data from the origin along the stream that was established by the
ACCEPT is also issued as a positive response to a CHANGE message. It CONNECT. ACCEPT is also issued as a positive response to a CHANGE
implies that the target accepts the proposed stream modification. 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 ACCEPT is relayed by the ST agents from the target to the origin
the path established by CONNECT (or CHANGE) but in the reverse along the path established by CONNECT (or CHANGE) but in the reverse
direction. ACCEPT must be acknowledged with ACK at each hop. direction. ACCEPT must be acknowledged with ACK at each hop.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OpCode = 1 | 0 | TotalBytes | | OpCode = 1 | 0 | TotalBytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference | LnkReference | | Reference | LnkReference |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SenderIPAddress | | SenderIPAddress |
skipping to change at page 82, line 35 skipping to change at page 87, line 35
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: RecordRoute : : RecordRoute :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: UserData : : UserData :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 21: ACCEPT Control Message Figure 21: ACCEPT Control Message
o Reference contains a number assigned by the ST agent sending ACCEPT o Reference contains a number assigned by the ST agent sending ACCEPT
for use in the acknowledging ACK. for use in the acknowledging ACK.
o LnkReference is the Reference number from the corresponding CONNECT o LnkReference is the Reference number from the corresponding CONNECT
(or CHANGE) (or CHANGE)
o MaxMsgSize indicates the smallest MTU along the path traversed by o MaxMsgSize indicates the smallest MTU along the path traversed by
the stream. This field is only set when responding to a CONNECT the stream. This field is only set when responding to a CONNECT
request. request.
o RecoveryTimeout reflects the nominal number of milliseconds that the o RecoveryTimeout reflects the nominal number of milliseconds that the
application is willing to wait for a failed system component to be application is willing to wait for a failed system component to be
detected and any corrective action to be taken. This field detected and any corrective action to be taken. This field
represents what can actually supported by each participating agent, represents what can actually be supported by each participating
and is only set when responding to a CONNECT request. agent, and is only set when responding to a CONNECT request.
o StreamCreationTime is the 32- bits system dependent timestamp copied o StreamCreationTime is the 32- bits system dependent timestamp copied
from the corresponding CONNECT request. from the corresponding CONNECT request.
o IPHops is the number of IP encapsulated hops traversed by the 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 stream. This field is set to zero by the origin, and is incremented
at each IP encapsulating agent. at each IP encapsulating agent.
10.4.2 ACK 10.4.2 ACK
ACK (OpCode = 2) is used to acknowledge a request. The ACK message is ACK (OpCode = 2) is used to acknowledge a request. The ACK message is
not propagated beyond the previous-hop or next-hop ST agent. not propagated beyond the previous-hop or next-hop ST agent.
0 1