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 #include "e_iovec.h"
00019 
00020 #ifdef _WIN32
00021 #include <winsock2.h>
00022 #endif
00023 
00027 typedef double      ce_float_t ;
00028 
00031 typedef int         ce_bool_t ;
00032 
00037 typedef int         ce_rank_t ;
00038 
00041 typedef int         ce_ltime_t ;
00042 
00045 typedef int         ce_len_t ;
00046 
00051 typedef void       *ce_env_t ;
00052 
00055 typedef double      ce_time_t ;
00056 
00060 typedef char*       ce_endpt_t;
00061 
00064 typedef char*       ce_addr_t;
00065 
00068 typedef char       *ce_data_t;
00069 
00073 typedef ce_iovec_t *ce_iovec_array_t;
00074 
00078 typedef ce_endpt_t *ce_endpt_array_t ;
00079 
00082 typedef ce_rank_t  *ce_rank_array_t ;
00083 
00087 typedef ce_addr_t  *ce_addr_array_t ;
00088 
00098 typedef struct ce_view_id_t {
00099     ce_ltime_t ltime ;
00100     ce_endpt_t endpt ;
00101 } ce_view_id_t ;
00102 
00105 typedef ce_view_id_t **ce_view_id_array_t;
00106 
00112 typedef struct ce_view_state_t {
00113   char* version ;                
00114   char* group ;                  
00115   ce_rank_t coord ;              
00116   int ltime ;                    
00117   ce_bool_t primary ;            
00118   char* proto ;                  
00119   ce_bool_t groupd ;             
00120   ce_bool_t xfer_view ;          
00121   char* key ;                    
00122   int num_ids ;                  
00123   ce_view_id_array_t prev_ids ;  
00124   char *params;                  
00125   ce_time_t uptime ;             
00126   ce_endpt_array_t view ;        
00127   ce_addr_array_t address ;      
00128 } ce_view_state_t ;
00129 
00134 typedef struct ce_local_state_t {
00135   ce_endpt_t endpt ;             
00136   ce_addr_t addr ;               
00137   ce_rank_t rank ;               
00138   char* name ;                   
00139   int nmembers ;                 
00140   ce_view_id_t *view_id ;        
00141   ce_bool_t am_coord ;           
00142 } ce_local_state_t ;
00143 
00148 typedef struct ce_jops_t {
00149   ce_time_t hrtbt_rate ;         
00150   char *transports ;             
00151   char *protocol ;               
00152   char *group_name ;             
00153   char *properties ;             
00154   ce_bool_t use_properties ;     
00155   ce_bool_t groupd ;             
00156   char *params ;                 
00157   ce_bool_t debug ;              
00158   ce_bool_t client;              
00159   char *endpt ;                  
00160   char *princ ;                  
00161   char *key ;                    
00162   ce_bool_t secure ;             
00163 } ce_jops_t;
00164 
00168 #define CE_DEFAULT_PROTOCOL "Top:Heal:Switch:Leave:Inter:Intra:Elect:Merge:Slander:Sync:Suspect:Stable:Vsync:Frag_Abv:Top_appl:Frag:Pt2ptw:Mflow:Pt2pt:Mnak:Bottom"
00169 
00170 
00175 #define CE_DEFAULT_PROPERTIES "Gmp:Sync:Heal:Switch:Frag:Suspect:Flow:Slander"
00176 
00177 /**************************************************************/
00178 /*
00179  * Utilities
00180  */
00181 
00184 #define record_create(type, var) ((type)malloc(sizeof(*var)))
00185 
00188 #define record_free(rec) free(rec)
00189 
00192 #define record_clear(rec) memset(rec, 0, sizeof(*rec))
00193 
00197 char *ce_copy_string(char *str);
00198 
00203 void ce_view_full_free(ce_local_state_t *ls, ce_view_state_t* vs);
00204 
00208 void ce_jops_free(ce_jops_t*) ;
00209 
00210 /**************************************************************/
00217 typedef void (*ce_appl_install_t)(ce_env_t, ce_local_state_t*, ce_view_state_t*);
00218 
00221 typedef void (*ce_appl_exit_t)(ce_env_t) ;
00222 
00228 typedef void (*ce_appl_receive_cast_t)(ce_env_t, ce_rank_t, int, ce_iovec_array_t) ;
00229 
00235 typedef void (*ce_appl_receive_send_t)(ce_env_t, ce_rank_t, int, ce_iovec_array_t) ;
00236 
00241 typedef void (*ce_appl_flow_block_t)(ce_env_t, ce_rank_t, ce_bool_t) ;
00242 
00247 typedef void (*ce_appl_block_t)(ce_env_t) ;
00248 
00252 typedef void (*ce_appl_heartbeat_t)(ce_env_t, ce_time_t) ;
00253 
00260 typedef struct ce_appl_intf_t ce_appl_intf_t ;
00261 
00283 ce_appl_intf_t*
00284 ce_create_intf(ce_env_t env, 
00285                ce_appl_exit_t exit,
00286                ce_appl_install_t install,
00287                ce_appl_flow_block_t flow_block,
00288                ce_appl_block_t block,
00289                ce_appl_receive_cast_t cast,
00290                ce_appl_receive_send_t send,
00291                ce_appl_heartbeat_t heartbeat
00292                );
00293 
00294 /**************************************************************/
00295 
00299 void ce_Init(
00300         int argc,
00301         char **argv
00302 ) ;
00303 
00306 void ce_Main_loop (
00307 );
00308                          
00313 void ce_Join(
00314         ce_jops_t *ops,
00315         ce_appl_intf_t *c_appl
00316 ) ;
00317 
00318 /**************************************************************/
00319 /* The set of actions supported on a group. 
00320  */
00321 
00325 void ce_Leave(ce_appl_intf_t *c_appl) ;
00326 
00332 void ce_Cast(
00333         ce_appl_intf_t *c_appl,
00334         int num,
00335         ce_iovec_array_t iovl
00336 ) ;
00337 
00345 void ce_Send(
00346         ce_appl_intf_t *c_appl,
00347         int num_dests,
00348         ce_rank_array_t dests,
00349         int num,
00350         ce_iovec_array_t iovl
00351 ) ;
00352 
00353 
00360 void ce_Send1(
00361         ce_appl_intf_t *c_appl,
00362         ce_rank_t dest,
00363         int num,
00364         ce_iovec_array_t iovl
00365 ) ;
00366 
00370 void ce_Prompt(
00371         ce_appl_intf_t *c_appl
00372 );
00373 
00379 void ce_Suspect(
00380         ce_appl_intf_t *c_appl,
00381         int num,
00382         ce_rank_array_t suspects
00383 );
00384         
00388 void ce_XferDone(
00389         ce_appl_intf_t *c_appl
00390 ) ;
00391 
00395 void ce_Rekey(
00396         ce_appl_intf_t *c_appl
00397 ) ;
00398 
00409 void ce_ChangeProtocol(
00410         ce_appl_intf_t *c_appl,
00411         char *protocol_name
00412 ) ;
00413 
00414 
00421 void ce_ChangeProperties(
00422         ce_appl_intf_t *c_appl,
00423         char *properties
00424 ) ;
00425 
00426 /**************************************************************/
00433 void ce_MLPrintOverride(
00434         void (*handler)(char *msg)
00435 ) ;
00436 
00440 void ce_MLUncaughtException(
00441         void (*handler)(char *info)
00442 ) ;
00443 
00444 /**************************************************************/
00448 #ifdef _WIN32
00449 typedef SOCKET CE_SOCKET ;
00450 #else
00451 typedef int    CE_SOCKET ;
00452 #endif
00453 
00456 typedef void (*ce_handler_t)(void*);
00457 
00465 void ce_AddSockRecv(
00466                     CE_SOCKET socket,
00467                     ce_handler_t handler,
00468                     ce_env_t env
00469                     );
00470 
00474 void ce_RmvSockRecv(
00475                     CE_SOCKET socket
00476                     );
00477 
00478 /**************************************************************/
00479 /* Here is a simpler "flat" inteface.
00480  * No iovec's are used, as above, things are zero-copy.
00481  */
00482 
00483 
00484 
00485 
00486 
00492 typedef void (*ce_appl_flat_receive_cast_t)(ce_env_t, ce_rank_t, ce_len_t, ce_data_t) ;
00493 
00499 typedef void (*ce_appl_flat_receive_send_t)(ce_env_t, ce_rank_t, ce_len_t, ce_data_t) ;
00500 
00503 ce_appl_intf_t*
00504 ce_create_flat_intf(ce_env_t env, 
00505                ce_appl_exit_t exit,
00506                ce_appl_install_t install,
00507                ce_appl_flow_block_t flow_block,
00508                ce_appl_block_t block,
00509                ce_appl_flat_receive_cast_t cast,
00510                ce_appl_flat_receive_send_t send,
00511                ce_appl_heartbeat_t heartbeat
00512                );
00513 
00514 void ce_flat_Cast(
00520         ce_appl_intf_t *c_appl,
00521         ce_len_t len, 
00522         ce_data_t buf
00523 ) ;
00524 
00532 void ce_flat_Send(
00533         ce_appl_intf_t *c_appl,
00534         int num_dests,
00535         ce_rank_array_t dests,
00536         ce_len_t len, 
00537         ce_data_t buf
00538 ) ;
00539 
00540 
00547 void ce_flat_Send1(
00548         ce_appl_intf_t *c_appl,
00549         ce_rank_t dest,
00550         ce_len_t len, 
00551         ce_data_t buf
00552 ) ;
00553 
00554 #endif  /* __CE_H__ */
00555 
00556 /**************************************************************/
00557 

Generated at Thu Dec 6 15:20:33 2001 for CE by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001