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