Table of Contents
1 Introduction
Part I The Ensemble Architecture
2 Identifiers
2.1 Endpoint Identifiers
2.2 Group Identifiers
2.3 View Identifiers
2.4 Connection Identifiers
2.5 Protocol Identifiers
2.6 Mode identifiers
2.7 Stack Identifiers
3 The Event Module
3.1 Fields
3.1.1 Extension fields
3.1.2 Event Types
3.1.3 Field Specifiers
3.2 Constructors
3.3 Special Constructors
3.4 Modifiers
3.5 Copiers
3.6 Destructors
4 Event protocol: Intra-stack communication
4.1 Event Types
4.2 Event fields
4.2.1 Event Fields
4.3 Event fields and the ``types'' for which they are defined
4.4 Event Chains
4.4.1 Timer Chain
4.4.2 Send Chain
4.4.3 Broadcast Chain
4.4.4 Failure Chain
4.4.5 Block Chain
4.4.6 View Chain
4.4.7 Merge Chain (successful)
4.4.8 Merge Chain (failed)
5 Layer Execution Model
5.1 Callbacks
5.2 Ordering Properties
6 Layer Anatomy: what are the pieces of a layer?
6.1 Design Goals
6.2 Notes
6.3 Values and Types
7 Event Handlers: Standard
8 The Ensemble Security Architecture (by Ohad Rodeh)
8.1 Cryptographic Infrastructure
8.2 Rekeying
8.3 A secure stack
8.4 Security events
8.5 Using Security
8.6 Checking that things work
8.7 Using security from HOT and EJava
Part II The Ensemble Protocols
9 Layers and Stacks
9.1 ANYLAYER
9.2 CREDIT
9.3 RATE
9.4 BOTTOM
9.5 CAUSAL
9.6 ELECT
9.7 ENCRYPT
9.8 HEAL
9.9 INTER
9.10 INTRA
9.11 LEAVE
9.12 MERGE
9.13 MFLOW
9.14 MNAK
9.15 OPTREKEY
9.16 PERFREKEY
9.17 PRIMARY
9.18 PT2PT
9.19 PT2PTW
9.20 PT2PTWP
9.21 REALKEYS
9.22 REKEY
9.23 REKEY_DT
9.24 REKEY_DIAM
9.25 SECCHAN
9.26 SEQUENCER
9.27 SLANDER
9.28 STABLE
9.29 SUSPECT
9.30 SYNC
9.31 TOTEM
9.32 WINDOW
9.33 XFER
9.34 ZBCAST
9.35 VSYNC
A Appendix: ML Does Not Allow Segmentation Faults
B Ensemble Membership Service TCP Interface
B.1 Locating the service
B.2 Communicating with the service
C Bimodal Multicast (by Ken Birman, Mark Hayden, and Zhen Xiao)
C.1 Protocol description
C.2 Usage