00001
00002
00003
00004
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
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
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
00480
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
00555
00556
00557