(* These events should have messages associated with them. *)
| ECast (* Multicast message *)
| ESend (* Pt2pt message *)
| ESubCast (* Multi-destination message *)
| ECastUnrel (* Unreliable multicast message *)
| ESendUnrel (* Unreliable pt2pt message *)
| EMergeRequest (* Request a merge *)
| EMergeGranted (* Grant a merge request *)
| EOrphan (* Message was orphaned *)
(* These types do not have messages. *)
| EAccount (* Output accounting information *)
(*| EAck *)(* Acknowledge message *)
| EAsync (* Asynchronous application event *)
| EBlock (* Block the group *)
| EBlockOk (* Acknowledge blocking of group *)
| EDump (* Dump your state (debugging) *)
| EElect (* I am now the coordinator *)
| EExit (* Disable this stack *)
| EFail (* Fail some members *)
| EGossipExt (* Gossip message *)
| EGossipExtDir (* Gossip message directed at particular address *)
| EInit (* First event delivered *)
| ELeave (* A member wants to leave *)
| ELostMessage (* Member doesn't have a message *)
| EMergeDenied (* Deny a merge request *)
| EMergeFailed (* Merge request failed *)
| EMigrate (* Change my location *)
| EPresent (* Members present in this view *)
| EPrompt (* Prompt a new view *)
| EProtocol (* Request a protocol switch *)
| ERekey (* Request a rekeying of the group *)
| ERekeyPrcl (* The rekey protocol events *)
| ERekeyPrcl2 (* *)
| EStable (* Deliver stability down *)
| EStableReq (* Request for stability information *)
| ESuspect (* Member is suspected to be faulty *)
| ESystemError (* Something serious has happened *)
| ETimer (* Request a timer *)
| EView (* Notify that a new view is ready *)
| EXferDone (* Notify that a state transfer is complete *)
| ESyncInfo
(* Ohad, additions *)
| ESecureMsg (* Private Secure messaging *)
| EChannelList (* passing a list of secure-channels *)
| EFlowBlock (* Blocking/unblocking the application for flow control*)
(* Signature/Verification with PGP *)
| EAuth
| ESecChannelList (* The channel list held by the SECCHAN layer *)
| ERekeyCleanup
| ERekeyCommit
Figure 2: Event typ type definition. Taken from type/event.mli.
This section describes the different types of events. See
fig
type field =
(* Common fields *)
| Type of typ (* type of the message*)
| Peer of rank (* rank of sender/destination *)
| Iov of Iovecl.t (* payload of message *)
| ApplMsg (* was this message generated by an appl? *)
(* Uncommon fields *)
| Address of Addr.set (* new address for a member *)
| Failures of bool Arrayf.t (* failed members *)
| Presence of bool Arrayf.t (* members present in the current view *)
| Suspects of bool Arrayf.t (* suspected members *)
| SuspectReason of string (* reasons for suspicion *)
| Stability of seqno Arrayf.t (* stability vector *)
| NumCasts of seqno Arrayf.t (* number of casts seen *)
| Contact of Endpt.full * View.id option (* contact for a merge *)
(* HEAL gossip *)
| HealGos of Proto.id * View.id * Endpt.full * View.t * Hsys.inet list
| SwitchGos of Proto.id * View.id * Time.t (* SWITCH gossip *)
| ExchangeGos of string (* EXCHANGE gossip *)
(* INTER gossip *)
| MergeGos of (Endpt.full * View.id option) * seqno * typ * View.state
| ViewState of View.state (* state of next view *)
| ProtoId of Proto.id (* protocol id (only for down events) *)
| Time of Time.t (* current time *)
| Alarm of Time.t (* for alarm requests *)
| ApplCasts of seqno Arrayf.t
| ApplSends of seqno Arrayf.t
| DbgName of string
(* Flags *)
| NoTotal (* message is not totally ordered*)
| ServerOnly (* deliver only at servers *)
| ClientOnly (* deliver only at clients *)
| NoVsync
| ForceVsync
| Fragment (* Iovec has been fragmented *)
(* Debugging *)
| History of string (* debugging history *)
(* Private Secure Messaging *)
| SecureMsg of Buf.t
| ChannelList of (rank * Security.key) list
(* interaction between Mflow, Pt2ptw, Pt2ptwp and the application *)
| FlowBlock of rank option * bool
(* Signature/Verification with Auth *)
| AuthData of Addr.set * Auth.data
(* Information passing between optimized rekey layers *)
| Tree of bool * Tree.z
| TreeAct of Tree.sent
| AgreedKey of Security.key
(* The channel list held by the SECCHAN layer *)
| SecChannelList of Trans.rank list
| SecStat of int (* PERF figures for SECCHAN layer *)
| RekeyFlag of bool (* Do a cleanup or not *)
Figure 3: Fields for events. Taken from type/event.mli