Main Page   Compound List   File List   Compound Members   File Members  

ce.h

Go to the documentation of this file.
00001 /**************************************************************/
00002 /* CE.H */
00003 /* Author: Ohad Rodeh */
00004 /* Based on code by Mark Hayden and Alexey Vaysburd. */
00005 /**************************************************************/
00013 /**************************************************************/
00014 
00015 #ifndef __CE_H__
00016 #define __CE_H__
00017 
00018 #ifdef _WIN32
00019 #include <winsock2.h>
00020 #endif
00021 
00025 typedef double      ce_float_t ;
00026 
00029 typedef int         ce_bool_t ;
00030 
00035 typedef int         ce_rank_t ;
00036 
00039 typedef int         ce_ltime_t ;
00040 
00043 typedef int         ce_len_t ;
00044 
00049 typedef void       *ce_env_t ;
00050 
00053 typedef double      ce_time_t ;
00054 
00058 typedef char*       ce_endpt_t;
00059 
00062 typedef char*       ce_addr_t;
00063 
00066 typedef char       *ce_data_t;
00067 
00071 typedef ce_endpt_t *ce_endpt_array_t ;
00072 
00075 typedef ce_rank_t  *ce_rank_array_t ;
00076 
00080 typedef ce_addr_t  *ce_addr_array_t ;
00081 
00091 typedef struct ce_view_id_t {
00092     ce_ltime_t ltime ;
00093     ce_endpt_t endpt ;
00094 } ce_view_id_t ;
00095 
00098 typedef ce_view_id_t **ce_view_id_array_t;
00099 
00105 typedef struct ce_view_state_t {
00106   char* version ;                
00107   char* group ;                  
00108   ce_rank_t coord ;              
00109   int ltime ;                    
00110   ce_bool_t primary ;            
00111   char* proto ;                  
00112   ce_bool_t groupd ;             
00113   ce_bool_t xfer_view ;          
00114   char* key ;                    
00115   int num_ids ;                  
00116   ce_view_id_array_t prev_ids ;  
00117   char *params;                  
00118   ce_time_t uptime ;             
00119   ce_endpt_array_t view ;        
00120   ce_addr_array_t address ;      
00121 } ce_view_state_t ;
00122 
00127 typedef struct ce_local_state_t {
00128   ce_endpt_t endpt ;             
00129   ce_addr_t addr ;               
00130   ce_rank_t rank ;               
00131   char* name ;                   
00132   int nmembers ;                 
00133   ce_view_id_t *view_id ;        
00134   ce_bool_t am_coord ;           
00135 } ce_local_state_t ;
00136 
00141 typedef struct ce_jops_t {
00142   ce_time_t hrtbt_rate ;         
00143   char *transports ;             
00144   char *protocol ;               
00145   char *group_name ;             
00146   char *properties ;             
00147   ce_bool_t use_properties ;     
00148   ce_bool_t groupd ;             
00149   char *params ;                 
00150   ce_bool_t debug ;              
00151   ce_bool_t client;              
00152   char *endpt ;                  
00153   char *princ ;                  
00154   char *key ;                    
00155   ce_bool_t secure ;             
00156 } ce_jops_t;
00157 
00161 #define CE_DEFAULT_PROTOCOL \
00162     "Top:Heal:Switch:Leave:" \
00163     "Inter:Intra:Elect:Merge:Sync:Suspect:" \
00164     "Stable:Vsync:Frag_Abv:Top_appl:" \
00165     "Frag:Pt2ptw:Mflow:Pt2pt:Mnak:Bottom"
00166 
00167 
00172 #define CE_DEFAULT_PROPERTIES "Gmp:Sync:Heal:Switch:Frag:Suspect:Flow"
00173 
00174 /**************************************************************/
00175 /*
00176  * Utilities
00177  */
00178 
00181 #define record_create(type, var) ((type)malloc(sizeof(*var)))
00182  
00185 #define record_free(rec) free(rec)
00186 
00189 #define record_clear(rec) memset(rec, 0, sizeof(*rec))
00190 
00195 void ce_view_full_free(ce_local_state_t *ls, ce_view_state_t* vs);
00196 
00200 void ce_jops_free(ce_jops_t*) ;
00201 
00202 /**************************************************************/
00206 
00209 typedef void (*ce_appl_install_t)(ce_env_t, ce_local_state_t*, ce_view_state_t*);
00210 
00213 typedef void (*ce_appl_exit_t)(ce_env_t) ;
00214 
00217 typedef void (*ce_appl_receive_cast_t)(ce_env_t, ce_rank_t, ce_len_t, ce_data_t) ;
00218 
00221 typedef void (*ce_appl_receive_send_t)(ce_env_t, ce_rank_t, ce_len_t, ce_data_t) ;
00222 
00226 typedef void (*ce_appl_flow_block_t)(ce_env_t, ce_rank_t, ce_bool_t) ;
00227 
00232 typedef void (*ce_appl_block_t)(ce_env_t) ;
00233 
00237 typedef void (*ce_appl_heartbeat_t)(ce_env_t, ce_time_t) ;
00238 
00245 typedef struct ce_appl_intf_t ce_appl_intf_t ;
00246 
00266 ce_appl_intf_t*
00267 ce_create_intf(ce_env_t env, 
00268                ce_appl_exit_t exit,
00269                ce_appl_install_t install,
00270                ce_appl_flow_block_t flow_block,
00271                ce_appl_block_t block,
00272                ce_appl_receive_cast_t cast,
00273                ce_appl_receive_send_t send,
00274                ce_appl_heartbeat_t heartbeat
00275                );
00276 
00277 /**************************************************************/
00278 
00282 void ce_Init(
00283         int argc,
00284         char **argv
00285 ) ;
00286 
00289 void ce_Main_loop (
00290 );
00291                           
00296 void ce_Join(
00297         ce_jops_t *ops,
00298         ce_appl_intf_t *c_appl
00299 ) ;
00300 
00301 /**************************************************************/
00302 /* The set of actions supported on a group. 
00303  */
00304 
00308 void ce_Leave(ce_appl_intf_t *c_appl) ;
00309 
00315 void ce_Cast(
00316         ce_appl_intf_t *c_appl,
00317         ce_len_t len, 
00318         ce_data_t buf
00319 ) ;
00320 
00327 void ce_Send(
00328         ce_appl_intf_t *c_appl,
00329         ce_rank_array_t dests,
00330         ce_len_t len, 
00331         ce_data_t buf
00332 ) ;
00333 
00334 
00341 void ce_Send1(
00342         ce_appl_intf_t *c_appl,
00343         ce_rank_t dest,
00344         ce_len_t len, 
00345         ce_data_t buf
00346 ) ;
00347 
00351 void ce_Prompt(
00352         ce_appl_intf_t *c_appl
00353 );
00354 
00359 void ce_Suspect(
00360         ce_appl_intf_t *c_appl,
00361         ce_rank_array_t suspects
00362 );
00363         
00367 void ce_XferDone(
00368         ce_appl_intf_t *c_appl
00369 ) ;
00370 
00374 void ce_Rekey(
00375         ce_appl_intf_t *c_appl
00376 ) ;
00377 
00388 void ce_ChangeProtocol(
00389         ce_appl_intf_t *c_appl,
00390         char *protocol_name
00391 ) ;
00392 
00393 
00400 void ce_ChangeProperties(
00401         ce_appl_intf_t *c_appl,
00402         char *properties
00403 ) ;
00404 
00405 /**************************************************************/
00408 
00412 void ce_MLPrintOverride(
00413         void (*handler)(char *msg)
00414 ) ;
00415 
00419 void ce_MLUncaughtException(
00420         void (*handler)(char *info)
00421 ) ;
00422 
00423 /**************************************************************/
00427 #ifdef _WIN32
00428 typedef SOCKET CE_SOCKET ;
00429 #else
00430 typedef int    CE_SOCKET ;
00431 #endif
00432 
00435 typedef void (*ce_handler_t)(void*);
00436 
00444 void ce_AddSockRecv(
00445                     CE_SOCKET socket,
00446                     ce_handler_t handler,
00447                     ce_env_t env
00448                     );
00449 
00453 void ce_RmvSockRecv(
00454                     CE_SOCKET socket
00455                     );
00456 
00457 /**************************************************************/
00458 #endif /* __CE_H__ */

Generated at Thu Sep 13 13:12:45 2001 for CE by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001