diff --git a/exec/totemiba.c b/exec/totemiba.c index 9e14188d..cb2c15cb 100644 --- a/exec/totemiba.c +++ b/exec/totemiba.c @@ -73,8 +73,6 @@ struct totemiba_instance { int dummy; }; -DECLARE_HDB_DATABASE (totemiba_instance_database,NULL); - static void totemiba_instance_initialize (struct totemiba_instance *instance) { memset (instance, 0, sizeof (struct totemiba_instance)); @@ -91,41 +89,25 @@ do { \ } while (0); -int totemiba_crypto_set (hdb_handle_t handle, +int totemiba_crypto_set (void *iba_context, unsigned int type) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: - return res; + return (res); } int totemiba_finalize ( - hdb_handle_t handle) + void *iba_context) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } @@ -134,7 +116,7 @@ error_exit: */ int totemiba_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **iba_context, struct totem_config *totem_config, int interface_no, void *context, @@ -149,240 +131,144 @@ int totemiba_initialize ( const struct totem_ip_address *iface_address)) { struct totemiba_instance *instance; - unsigned int res; + int res = 0; - res = hdb_handle_create (&totemiba_instance_database, - sizeof (struct totemiba_instance), handle); - if (res != 0) { - goto error_exit; - } - res = hdb_handle_get (&totemiba_instance_database, *handle, - (void *)&instance); - if (res != 0) { - goto error_destroy; + instance = malloc (sizeof (struct totemiba_instance)); + if (instance == NULL) { + return (-1); } totemiba_instance_initialize (instance); -error_exit: - hdb_handle_put (&totemiba_instance_database, *handle); - return (0); - -error_destroy: - hdb_handle_destroy (&totemiba_instance_database, *handle); - return (-1); + return (res); } int totemiba_processor_count_set ( - hdb_handle_t handle, + void *iba_context, int processor_count) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } -int totemiba_recv_flush (hdb_handle_t handle) +int totemiba_recv_flush (void *iba_context) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } -int totemiba_send_flush (hdb_handle_t handle) +int totemiba_send_flush (void *iba_context) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } int totemiba_token_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } + int totemiba_mcast_flush_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } int totemiba_mcast_noflush_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); -error_exit: return (res); } -extern int totemiba_iface_check (hdb_handle_t handle) +extern int totemiba_iface_check (void *iba_context) { - struct totemiba_instance *instance; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); -error_exit: return (res); } -extern void totemiba_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config) +extern void totemiba_net_mtu_adjust (void *iba_context, struct totem_config *totem_config) { + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; + instance = NULL; } -const char *totemiba_iface_print (hdb_handle_t handle) { - struct totemiba_instance *instance; - int res = 0; - const char *ret_char; +const char *totemiba_iface_print (void *iba_context) { + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; + instance = NULL; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - ret_char = "Invalid totemiba handle"; - goto error_exit; - } - - hdb_handle_put (&totemiba_instance_database, handle); -error_exit: - return (ret_char); + return (NULL); } int totemiba_iface_get ( - hdb_handle_t handle, + void *iba_context, struct totem_ip_address *addr) { - struct totemiba_instance *instance; - unsigned int res; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; + int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } int totemiba_token_target_set ( - hdb_handle_t handle, + void *iba_context, const struct totem_ip_address *token_target) { - struct totemiba_instance *instance; - unsigned int res; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; + int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - -error_exit: return (res); } extern int totemiba_recv_mcast_empty ( - hdb_handle_t handle) + void *iba_context) { - struct totemiba_instance *instance; - unsigned int res; + struct totemiba_instance *instance = (struct totemiba_instance *)iba_context; + int res = 0; - res = hdb_handle_get (&totemiba_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + instance = NULL; - hdb_handle_put (&totemiba_instance_database, handle); - - return (0); - -error_exit: return (res); } diff --git a/exec/totemiba.h b/exec/totemiba.h index 49ddb987..d8f06e5b 100644 --- a/exec/totemiba.h +++ b/exec/totemiba.h @@ -45,7 +45,7 @@ */ extern int totemiba_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **iba_handle, struct totem_config *totem_config, int interface_no, void *context, @@ -60,49 +60,49 @@ extern int totemiba_initialize ( const struct totem_ip_address *iface_address)); extern int totemiba_processor_count_set ( - hdb_handle_t handle, + void *iba_context, int processor_count); extern int totemiba_token_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len); extern int totemiba_mcast_flush_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len); extern int totemiba_mcast_noflush_send ( - hdb_handle_t handle, + void *iba_context, const void *msg, unsigned int msg_len); -extern int totemiba_recv_flush (hdb_handle_t handle); +extern int totemiba_recv_flush (void *iba_context); -extern int totemiba_send_flush (hdb_handle_t handle); +extern int totemiba_send_flush (void *iba_context); -extern int totemiba_iface_check (hdb_handle_t handle); +extern int totemiba_iface_check (void *iba_context); -extern int totemiba_finalize (hdb_handle_t handle); +extern int totemiba_finalize (void *iba_context); -extern void totemiba_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config); +extern void totemiba_net_mtu_adjust (void *iba_context, struct totem_config *totem_config); -extern const char *totemiba_iface_print (hdb_handle_t handle); +extern const char *totemiba_iface_print (void *iba_context); extern int totemiba_iface_get ( - hdb_handle_t handle, + void *iba_context, struct totem_ip_address *addr); extern int totemiba_token_target_set ( - hdb_handle_t handle, + void *iba_context, const struct totem_ip_address *token_target); extern int totemiba_crypto_set ( - hdb_handle_t handle, + void *iba_context, unsigned int type); extern int totemiba_recv_mcast_empty ( - hdb_handle_t handle); + void *iba_context); #endif /* TOTEMIBA_H_DEFINED */ diff --git a/exec/totemmrp.c b/exec/totemmrp.c index 7ec52dad..1bd538a2 100644 --- a/exec/totemmrp.c +++ b/exec/totemmrp.c @@ -62,7 +62,7 @@ #include "totemmrp.h" #include "totemsrp.h" -hdb_handle_t totemsrp_handle_in; +void *totemsrp_context; void totemmrp_deliver_fn ( unsigned int nodeid, @@ -138,7 +138,7 @@ int totemmrp_initialize ( result = totemsrp_initialize ( poll_handle, - &totemsrp_handle_in, + &totemsrp_context, totem_config, totemmrp_deliver_fn, totemmrp_confchg_fn); @@ -148,7 +148,7 @@ int totemmrp_initialize ( void totemmrp_finalize (void) { - totemsrp_finalize (totemsrp_handle_in); + totemsrp_finalize (totemsrp_context); } /* @@ -159,7 +159,7 @@ int totemmrp_mcast ( unsigned int iov_len, int priority) { - return totemsrp_mcast (totemsrp_handle_in, iovec, iov_len, priority); + return totemsrp_mcast (totemsrp_context, iovec, iov_len, priority); } /* @@ -167,7 +167,7 @@ int totemmrp_mcast ( */ int totemmrp_avail (void) { - return (totemsrp_avail (totemsrp_handle_in)); + return (totemsrp_avail (totemsrp_context)); } int totemmrp_callback_token_create ( @@ -177,17 +177,17 @@ int totemmrp_callback_token_create ( int (*callback_fn) (enum totem_callback_token_type type, const void *), const void *data) { - return totemsrp_callback_token_create (totemsrp_handle_in, handle_out, type, delete, callback_fn, data); + return totemsrp_callback_token_create (totemsrp_context, handle_out, type, delete, callback_fn, data); } void totemmrp_callback_token_destroy ( void *handle_out) { - totemsrp_callback_token_destroy (totemsrp_handle_in, handle_out); + totemsrp_callback_token_destroy (totemsrp_context, handle_out); } void totemmrp_new_msg_signal (void) { - totemsrp_new_msg_signal (totemsrp_handle_in); + totemsrp_new_msg_signal (totemsrp_context); } int totemmrp_ifaces_get ( @@ -199,7 +199,7 @@ int totemmrp_ifaces_get ( int res; res = totemsrp_ifaces_get ( - totemsrp_handle_in, + totemsrp_context, nodeid, interfaces, status, @@ -211,18 +211,18 @@ int totemmrp_ifaces_get ( int totemmrp_crypto_set ( unsigned int type) { - return totemsrp_crypto_set (totemsrp_handle_in, + return totemsrp_crypto_set (totemsrp_context, type); } unsigned int totemmrp_my_nodeid_get (void) { - return (totemsrp_my_nodeid_get (totemsrp_handle_in)); + return (totemsrp_my_nodeid_get (totemsrp_context)); } int totemmrp_my_family_get (void) { - return (totemsrp_my_family_get (totemsrp_handle_in)); + return (totemsrp_my_family_get (totemsrp_context)); } extern int totemmrp_ring_reenable (void) @@ -230,7 +230,7 @@ extern int totemmrp_ring_reenable (void) int res; res = totemsrp_ring_reenable ( - totemsrp_handle_in); + totemsrp_context); return (res); } diff --git a/exec/totemnet.c b/exec/totemnet.c index 7dc0c2d6..2a2ddfe3 100644 --- a/exec/totemnet.c +++ b/exec/totemnet.c @@ -45,7 +45,7 @@ struct transport { int (*initialize) ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **transport_instance, struct totem_config *totem_config, int interface_no, void *context, @@ -60,51 +60,51 @@ struct transport { const struct totem_ip_address *iface_address)); int (*processor_count_set) ( - hdb_handle_t handle, + void *transport_context, int processor_count); int (*token_send) ( - hdb_handle_t handle, + void *transport_context, const void *msg, unsigned int msg_len); int (*mcast_flush_send) ( - hdb_handle_t handle, + void *transport_context, const void *msg, unsigned int msg_len); int (*mcast_noflush_send) ( - hdb_handle_t handle, + void *transport_context, const void *msg, unsigned int msg_len); - int (*recv_flush) (hdb_handle_t handle); + int (*recv_flush) (void *transport_context); - int (*send_flush) (hdb_handle_t handle); + int (*send_flush) (void *transport_context); - int (*iface_check) (hdb_handle_t handle); + int (*iface_check) (void *transport_context); - int (*finalize) (hdb_handle_t handle); + int (*finalize) (void *transport_context); - void (*net_mtu_adjust) (hdb_handle_t handle, struct totem_config *totem_config); + void (*net_mtu_adjust) (void *transport_context, struct totem_config *totem_config); - const char *(*iface_print) (hdb_handle_t handle); + const char *(*iface_print) (void *transport_context); int (*iface_get) ( - hdb_handle_t handle, + void *transport_context, struct totem_ip_address *addr); int (*token_target_set) ( - hdb_handle_t handle, + void *transport_context, const struct totem_ip_address *token_target); int (*crypto_set) ( - hdb_handle_t handle, + void *transport_context, unsigned int type); int (*recv_mcast_empty) ( - hdb_handle_t handle); + void *transport_context); }; struct transport transport_entries[] = { @@ -148,63 +148,42 @@ struct transport transport_entries[] = { }; struct totemnet_instance { - hdb_handle_t transport_handle; + void *transport_context; struct transport *transport; }; -DECLARE_HDB_DATABASE (totemnet_instance_database,NULL); - static void totemnet_instance_initialize (struct totemnet_instance *instance) { instance->transport = &transport_entries[0]; } -int totemnet_crypto_set (hdb_handle_t handle, - unsigned int type) +int totemnet_crypto_set ( + void *net_context, + unsigned int type) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->crypto_set (instance->transport_context, type); - res = instance->transport->crypto_set (instance->transport_handle, type); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return res; } int totemnet_finalize ( - hdb_handle_t handle) + void *net_context) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->finalize (instance->transport_context); - res = instance->transport->finalize (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } int totemnet_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **net_context, struct totem_config *totem_config, int interface_no, void *context, @@ -221,275 +200,155 @@ int totemnet_initialize ( struct totemnet_instance *instance; unsigned int res; - res = hdb_handle_create (&totemnet_instance_database, - sizeof (struct totemnet_instance), handle); - if (res != 0) { - goto error_exit; + instance = malloc (sizeof (struct totemnet_instance)); + if (instance == NULL) { + return (-1); } - res = hdb_handle_get (&totemnet_instance_database, *handle, - (void *)&instance); - if (res != 0) { + totemnet_instance_initialize (instance); + + res = instance->transport->initialize (poll_handle, + &instance->transport_context, totem_config, + interface_no, context, deliver_fn, iface_change_fn); + + if (res == -1) { goto error_destroy; } - totemnet_instance_initialize (instance); - - res = instance->transport->initialize (poll_handle, &instance->transport_handle, totem_config, - interface_no, context, deliver_fn, iface_change_fn); - -error_exit: - hdb_handle_put (&totemnet_instance_database, *handle); + *net_context = instance; return (0); error_destroy: - hdb_handle_destroy (&totemnet_instance_database, *handle); + free (instance); return (-1); } int totemnet_processor_count_set ( - hdb_handle_t handle, + void *net_context, int processor_count) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - - res = instance->transport->processor_count_set (handle, processor_count); - - hdb_handle_put (&totemnet_instance_database, instance->transport_handle); - -error_exit: + res = instance->transport->processor_count_set (instance->transport_context, processor_count); return (res); } -int totemnet_recv_flush (hdb_handle_t handle) +int totemnet_recv_flush (void *net_context) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->recv_flush (instance->transport_context); - res = instance->transport->recv_flush (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } -int totemnet_send_flush (hdb_handle_t handle) +int totemnet_send_flush (void *net_context) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->send_flush (instance->transport_context); - res = instance->transport->send_flush (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } int totemnet_token_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->token_send (instance->transport_context, msg, msg_len); - res = instance->transport->token_send (instance->transport_handle, msg, msg_len); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } int totemnet_mcast_flush_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->mcast_flush_send (instance->transport_context, msg, msg_len); - res = instance->transport->mcast_flush_send (instance->transport_handle, msg, msg_len); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } int totemnet_mcast_noflush_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->mcast_noflush_send (instance->transport_context, msg, msg_len); - res = instance->transport->mcast_noflush_send (instance->transport_handle, msg, msg_len); - - hdb_handle_put (&totemnet_instance_database, handle); -error_exit: return (res); } -extern int totemnet_iface_check (hdb_handle_t handle) +extern int totemnet_iface_check (void *net_context) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + res = instance->transport->iface_check (instance->transport_context); - res = instance->transport->iface_check (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); -error_exit: return (res); } -extern int totemnet_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config) +extern int totemnet_net_mtu_adjust (void *net_context, struct totem_config *totem_config) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; int res = 0; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - - instance->transport->net_mtu_adjust (instance->transport_handle, totem_config); - - hdb_handle_put (&totemnet_instance_database, handle); -error_exit: + instance->transport->net_mtu_adjust (instance->transport_context, totem_config); return (res); } -const char *totemnet_iface_print (hdb_handle_t handle) { - struct totemnet_instance *instance; - int res = 0; +const char *totemnet_iface_print (void *net_context) { + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; const char *ret_char; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - ret_char = "Invalid totemnet handle"; - goto error_exit; - } - - ret_char = instance->transport->iface_print (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); -error_exit: + ret_char = instance->transport->iface_print (instance->transport_context); return (ret_char); } int totemnet_iface_get ( - hdb_handle_t handle, + void *net_context, struct totem_ip_address *addr) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; unsigned int res; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } - - res = instance->transport->iface_get (instance->transport_handle, addr); + res = instance->transport->iface_get (instance->transport_context, addr); - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } int totemnet_token_target_set ( - hdb_handle_t handle, + void *net_context, const struct totem_ip_address *token_target) { - struct totemnet_instance *instance; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; unsigned int res; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + res = instance->transport->token_target_set (instance->transport_context, token_target); - res = instance->transport->token_target_set (instance->transport_handle, token_target); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } extern int totemnet_recv_mcast_empty ( - hdb_handle_t handle) + void *net_context) { - struct totemnet_instance *instance; - unsigned int res = 0; + struct totemnet_instance *instance = (struct totemnet_instance *)net_context; + unsigned int res; - res = hdb_handle_get (&totemnet_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + res = instance->transport->recv_mcast_empty (instance->transport_context); - res = instance->transport->recv_mcast_empty (instance->transport_handle); - - hdb_handle_put (&totemnet_instance_database, handle); - -error_exit: return (res); } diff --git a/exec/totemnet.h b/exec/totemnet.h index dd29d9f6..644a6c24 100644 --- a/exec/totemnet.h +++ b/exec/totemnet.h @@ -52,7 +52,7 @@ */ extern int totemnet_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **net_context, struct totem_config *totem_config, int interface_no, void *context, @@ -67,49 +67,49 @@ extern int totemnet_initialize ( const struct totem_ip_address *iface_address)); extern int totemnet_processor_count_set ( - hdb_handle_t handle, + void *net_context, int processor_count); extern int totemnet_token_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len); extern int totemnet_mcast_flush_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len); extern int totemnet_mcast_noflush_send ( - hdb_handle_t handle, + void *net_context, const void *msg, unsigned int msg_len); -extern int totemnet_recv_flush (hdb_handle_t handle); +extern int totemnet_recv_flush (void *net_context); -extern int totemnet_send_flush (hdb_handle_t handle); +extern int totemnet_send_flush (void *net_context); -extern int totemnet_iface_check (hdb_handle_t handle); +extern int totemnet_iface_check (void *net_context); -extern int totemnet_finalize (hdb_handle_t handle); +extern int totemnet_finalize (void *net_context); -extern int totemnet_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config); +extern int totemnet_net_mtu_adjust (void *net_context, struct totem_config *totem_config); -extern const char *totemnet_iface_print (hdb_handle_t handle); +extern const char *totemnet_iface_print (void *net_context); extern int totemnet_iface_get ( - hdb_handle_t handle, + void *net_context, struct totem_ip_address *addr); extern int totemnet_token_target_set ( - hdb_handle_t handle, + void *net_context, const struct totem_ip_address *token_target); extern int totemnet_crypto_set ( - hdb_handle_t handle, + void *net_context, unsigned int type); extern int totemnet_recv_mcast_empty ( - hdb_handle_t handle); + void *net_context); #endif /* TOTEMNET_H_DEFINED */ diff --git a/exec/totemrrp.c b/exec/totemrrp.c index 31b31913..f9623064 100644 --- a/exec/totemrrp.c +++ b/exec/totemrrp.c @@ -169,7 +169,7 @@ struct rrp_algo { }; struct totemrrp_instance { - hdb_handle_t totemrrp_poll_handle; + hdb_handle_t poll_handle; struct totem_interface *interfaces; @@ -218,16 +218,12 @@ struct totemrrp_instance { int line, const char *format, ...)__attribute__((format(printf, 5, 6))); - hdb_handle_t handle; - - hdb_handle_t *net_handles; + void **net_handles; void *rrp_algo_instance; int interface_count; - hdb_handle_t poll_handle; - int processor_count; struct totem_config *totem_config; @@ -483,11 +479,6 @@ struct rrp_algo *rrp_algos[] = { #define RRP_ALGOS_COUNT 3 -/* - * All instances in one database - */ -DECLARE_HDB_DATABASE (totemrrp_instance_database,NULL); - #define log_printf(level, format, args...) \ do { \ rrp_instance->totemrrp_log_printf ( \ @@ -1429,27 +1420,16 @@ void rrp_iface_change_fn ( } int totemrrp_finalize ( - hdb_handle_t handle) + void *rrp_context) { - struct totemrrp_instance *instance; - int res = 0; + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; int i; - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - for (i = 0; i < instance->interface_count; i++) { totemnet_finalize (instance->net_handles[i]); } - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } /* @@ -1462,7 +1442,7 @@ error_exit: */ int totemrrp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **rrp_context, struct totem_config *totem_config, void *context, @@ -1487,15 +1467,9 @@ int totemrrp_initialize ( unsigned int res; int i; - res = hdb_handle_create (&totemrrp_instance_database, - sizeof (struct totemrrp_instance), handle); - if (res != 0) { - goto error_exit; - } - res = hdb_handle_get (&totemrrp_instance_database, *handle, - (void *)&instance); - if (res != 0) { - goto error_destroy; + instance = malloc (sizeof (struct totemrrp_instance)); + if (instance == 0) { + return (-1); } totemrrp_instance_initialize (instance); @@ -1506,7 +1480,7 @@ int totemrrp_initialize ( instance->totem_config, instance); if (res == -1) { - goto error_put; + goto error_destroy; } /* @@ -1522,7 +1496,7 @@ int totemrrp_initialize ( instance->interfaces = totem_config->interfaces; - instance->totemrrp_poll_handle = poll_handle; + instance->poll_handle = poll_handle; instance->totemrrp_deliver_fn = deliver_fn; @@ -1534,7 +1508,7 @@ int totemrrp_initialize ( instance->interface_count = totem_config->interface_count; - instance->net_handles = malloc (sizeof (hdb_handle_t) * totem_config->interface_count); + instance->net_handles = malloc (sizeof (void *) * totem_config->interface_count); instance->context = context; @@ -1557,168 +1531,89 @@ int totemrrp_initialize ( (void *)deliver_fn_context, rrp_deliver_fn, rrp_iface_change_fn); + + totemnet_net_mtu_adjust (instance->net_handles[i], totem_config); } - totemnet_net_mtu_adjust (instance->net_handles[i], totem_config); -error_exit: - hdb_handle_put (&totemrrp_instance_database, *handle); + *rrp_context = instance; return (0); -error_put: - hdb_handle_put (&totemrrp_instance_database, *handle); error_destroy: - hdb_handle_destroy (&totemrrp_instance_database, *handle); + free (instance); return (res); } int totemrrp_processor_count_set ( - hdb_handle_t handle, + void *rrp_context, unsigned int processor_count) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->processor_count_set (instance, processor_count); instance->processor_count = processor_count; - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } int totemrrp_token_target_set ( - hdb_handle_t handle, + void *rrp_context, struct totem_ip_address *addr, unsigned int iface_no) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->token_target_set (instance, addr, iface_no); - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } -int totemrrp_recv_flush (hdb_handle_t handle) +int totemrrp_recv_flush (void *rrp_context) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->recv_flush (instance); - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } -int totemrrp_send_flush (hdb_handle_t handle) +int totemrrp_send_flush (void *rrp_context) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->send_flush (instance); - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } int totemrrp_token_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->token_send (instance, msg, msg_len); - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } int totemrrp_mcast_flush_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len) { - struct totemrrp_instance *instance; + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; int res = 0; - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - // TODO this needs to return the result instance->rrp_algo->mcast_flush_send (instance, msg, msg_len); - hdb_handle_put (&totemrrp_instance_database, handle); -error_exit: return (res); } int totemrrp_mcast_noflush_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; /* * merge detects go out through mcast_flush_send so it is safe to * flush these messages if we are only one processor. This avoids @@ -1730,122 +1625,70 @@ int totemrrp_mcast_noflush_send ( instance->rrp_algo->mcast_noflush_send (instance, msg, msg_len); } - hdb_handle_put (&totemrrp_instance_database, handle); -error_exit: - return (res); + return (0); } -int totemrrp_iface_check (hdb_handle_t handle) +int totemrrp_iface_check (void *rrp_context) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; instance->rrp_algo->iface_check (instance); - hdb_handle_put (&totemrrp_instance_database, handle); -error_exit: - return (res); + return (0); } int totemrrp_ifaces_get ( - hdb_handle_t handle, + void *rrp_context, char ***status, unsigned int *iface_count) { - struct totemrrp_instance *instance; - int res = 0; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; *status = instance->status; if (iface_count) { *iface_count = instance->interface_count; } - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: - return (res); + return (0); } int totemrrp_crypto_set ( - hdb_handle_t handle, + void *rrp_context, unsigned int type) { + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; int res; - struct totemrrp_instance *instance; - - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - return (0); - } res = totemnet_crypto_set(instance->net_handles[0], type); - hdb_handle_put (&totemrrp_instance_database, handle); return (res); } int totemrrp_ring_reenable ( - hdb_handle_t handle) + void *rrp_context) { - struct totemrrp_instance *instance; + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; int res = 0; unsigned int i; -printf ("totemrrp ring reenable\n"); - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - instance->rrp_algo->ring_reenable (instance); for (i = 0; i < instance->interface_count; i++) { sprintf (instance->status[i], "ring %d active with no faults", i); } - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: return (res); } extern int totemrrp_mcast_recv_empty ( - hdb_handle_t handle) + void *rrp_context) { - struct totemrrp_instance *instance; + struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context; int res; - res = hdb_handle_get (&totemrrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - res = instance->rrp_algo->mcast_recv_empty (instance); - hdb_handle_put (&totemrrp_instance_database, handle); - -error_exit: return (res); } diff --git a/exec/totemrrp.h b/exec/totemrrp.h index 48e4a01d..03dbedcc 100644 --- a/exec/totemrrp.h +++ b/exec/totemrrp.h @@ -53,7 +53,7 @@ */ extern int totemrrp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **rrp_context, struct totem_config *totem_config, void *context, @@ -76,50 +76,52 @@ extern int totemrrp_initialize ( extern int totemrrp_processor_count_set ( - hdb_handle_t handle, + void *rrp_context, unsigned int processor_count); extern int totemrrp_token_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len); extern int totemrrp_mcast_noflush_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len); extern int totemrrp_mcast_flush_send ( - hdb_handle_t handle, + void *rrp_context, const void *msg, unsigned int msg_len); -extern int totemrrp_recv_flush (hdb_handle_t handle); +extern int totemrrp_recv_flush ( + void *rrp_context); -extern int totemrrp_send_flush (hdb_handle_t handle); +extern int totemrrp_send_flush ( + void *rrp_context); extern int totemrrp_token_target_set ( - hdb_handle_t handle, + void *rrp_context, struct totem_ip_address *target, unsigned int iface_no); -extern int totemrrp_iface_check (hdb_handle_t handle); +extern int totemrrp_iface_check (void *rrp_context); -extern int totemrrp_finalize (hdb_handle_t handle); +extern int totemrrp_finalize (void *rrp_context); extern int totemrrp_ifaces_get ( - hdb_handle_t handle, + void *rrp_context, char ***status, unsigned int *iface_count); extern int totemrrp_crypto_set ( - hdb_handle_t handle, + void *rrp_context, unsigned int type); extern int totemrrp_ring_reenable ( - hdb_handle_t handle); + void *rrp_context); extern int totemrrp_mcast_recv_empty ( - hdb_handle_t handle); + void *rrp_context); #endif /* TOTEMRRP_H_DEFINED */ diff --git a/exec/totemsrp.c b/exec/totemsrp.c index c5b5235f..e40ccfbb 100644 --- a/exec/totemsrp.c +++ b/exec/totemsrp.c @@ -492,7 +492,7 @@ struct totemsrp_instance { struct timeval tv_old; - hdb_handle_t totemrrp_handle; + void *totemrrp_context; struct totem_config *totem_config; @@ -616,11 +616,6 @@ void main_iface_change_fn ( const struct totem_ip_address *iface_address, unsigned int iface_no); -/* - * All instances in one database - */ -DECLARE_HDB_DATABASE (totemsrp_instance_database,NULL); - struct message_handlers totemsrp_message_handlers = { 6, { @@ -707,7 +702,7 @@ static int pause_flush (struct totemsrp_instance *instance) * -1 indicates an error from recvmsg */ do { - res = totemrrp_mcast_recv_empty (instance->totemrrp_handle); + res = totemrrp_mcast_recv_empty (instance->totemrrp_context); } while (res == -1); } return (res); @@ -718,7 +713,7 @@ static int pause_flush (struct totemsrp_instance *instance) */ int totemsrp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **srp_context, struct totem_config *totem_config, void (*deliver_fn) ( @@ -737,16 +732,10 @@ int totemsrp_initialize ( struct totemsrp_instance *instance; unsigned int res; - res = hdb_handle_create (&totemsrp_instance_database, - sizeof (struct totemsrp_instance), handle); - if (res != 0) { + instance = malloc (sizeof (struct totemsrp_instance)); + if (instance == NULL) { goto error_exit; } - res = hdb_handle_get (&totemsrp_instance_database, *handle, - (void *)&instance); - if (res != 0) { - goto error_destroy; - } rundir = getenv ("COROSYNC_RUN_DIR"); if (rundir == NULL) { @@ -755,12 +744,12 @@ int totemsrp_initialize ( res = mkdir (rundir, 0700); if (res == -1 && errno != EEXIST) { - goto error_put; + goto error_destroy; } res = chdir (rundir); if (res == -1) { - goto error_put; + goto error_destroy; } totemsrp_instance_initialize (instance); @@ -877,7 +866,7 @@ int totemsrp_initialize ( totemrrp_initialize ( poll_handle, - &instance->totemrrp_handle, + &instance->totemrrp_context, totem_config, instance, main_deliver_fn, @@ -892,54 +881,37 @@ int totemsrp_initialize ( MESSAGE_QUEUE_MAX, sizeof (struct message_item)); - hdb_handle_put (&totemsrp_instance_database, *handle); - + *srp_context = instance; return (0); -error_put: - hdb_handle_put (&totemsrp_instance_database, *handle); - error_destroy: - hdb_handle_destroy (&totemsrp_instance_database, *handle); + free (instance); error_exit: return (-1); } void totemsrp_finalize ( - hdb_handle_t handle) + void *srp_context) { - struct totemsrp_instance *instance; - unsigned int res; + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - return; - } memb_leave_message_send (instance); - - hdb_handle_put (&totemsrp_instance_database, handle); + free (srp_context); } int totemsrp_ifaces_get ( - hdb_handle_t handle, + void *srp_context, unsigned int nodeid, struct totem_ip_address *interfaces, char ***status, unsigned int *iface_count) { - struct totemsrp_instance *instance; + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; int res; unsigned int found = 0; unsigned int i; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } - for (i = 0; i < instance->my_memb_entries; i++) { if (instance->my_memb_list[i].addr[0].nodeid == nodeid) { found = 1; @@ -970,87 +942,54 @@ int totemsrp_ifaces_get ( } finish: - totemrrp_ifaces_get (instance->totemrrp_handle, status, NULL); - - hdb_handle_put (&totemsrp_instance_database, handle); -error_exit: + totemrrp_ifaces_get (instance->totemrrp_context, status, NULL); return (res); } int totemsrp_crypto_set ( - hdb_handle_t handle, + void *srp_context, unsigned int type) { + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; int res; - struct totemsrp_instance *instance; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - return (0); - } + res = totemrrp_crypto_set(instance->totemrrp_context, type); - res = totemrrp_crypto_set(instance->totemrrp_handle, type); - - hdb_handle_put (&totemsrp_instance_database, handle); return (res); } unsigned int totemsrp_my_nodeid_get ( - hdb_handle_t handle) + void *srp_context) { - struct totemsrp_instance *instance; + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; unsigned int res; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - return (0); - } - res = instance->totem_config->interfaces[0].boundto.nodeid; - hdb_handle_put (&totemsrp_instance_database, handle); return (res); } int totemsrp_my_family_get ( - hdb_handle_t handle) + void *srp_context) { - struct totemsrp_instance *instance; + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; int res; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - return (0); - } - res = instance->totem_config->interfaces[0].boundto.family; - hdb_handle_put (&totemsrp_instance_database, handle); return (res); } int totemsrp_ring_reenable ( - hdb_handle_t handle) + void *srp_context) { - struct totemsrp_instance *instance; - int res; + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + totemrrp_ring_reenable (instance->totemrrp_context); - totemrrp_ring_reenable (instance->totemrrp_handle); - - hdb_handle_put (&totemsrp_instance_database, handle); -error_exit: - return (res); + return (0); } @@ -1538,7 +1477,7 @@ static void timer_function_orf_token_timeout (void *data) "The token was lost in the OPERATIONAL state.\n"); log_printf (instance->totemsrp_log_level_notice, "A processor failed, forming new configuration.\n"); - totemrrp_iface_check (instance->totemrrp_handle); + totemrrp_iface_check (instance->totemrrp_context); memb_state_gather_enter (instance, 2); break; @@ -1932,7 +1871,7 @@ static void memb_state_recovery_enter ( * Build regular configuration */ totemrrp_processor_count_set ( - instance->totemrrp_handle, + instance->totemrrp_context, commit_token->addr_entries); /* @@ -2078,43 +2017,26 @@ originated: return; } -int totemsrp_new_msg_signal (hdb_handle_t handle) +int totemsrp_new_msg_signal (void *srp_context) { - struct totemsrp_instance *instance; - unsigned int res; - - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; token_hold_cancel_send (instance); - hdb_handle_put (&totemsrp_instance_database, handle); return (0); -error_exit: - return (-1); } int totemsrp_mcast ( - hdb_handle_t handle, + void *srp_context, struct iovec *iovec, unsigned int iov_len, int guarantee) { + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; int i; struct message_item message_item; - struct totemsrp_instance *instance; char *addr; unsigned int addr_idx; - unsigned int res; - - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } if (cs_queue_is_full (&instance->new_message_queue)) { log_printf (instance->totemsrp_log_level_debug, "queue full\n"); @@ -2155,39 +2077,23 @@ int totemsrp_mcast ( log_printf (instance->totemsrp_log_level_debug, "mcasted message added to pending queue\n"); cs_queue_item_add (&instance->new_message_queue, &message_item); - hdb_handle_put (&totemsrp_instance_database, handle); return (0); error_mcast: - hdb_handle_put (&totemsrp_instance_database, handle); - -error_exit: return (-1); } /* * Determine if there is room to queue a new message */ -int totemsrp_avail (hdb_handle_t handle) +int totemsrp_avail (void *srp_context) { + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; int avail; - struct totemsrp_instance *instance; - unsigned int res; - - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } cs_queue_avail (&instance->new_message_queue, &avail); - hdb_handle_put (&totemsrp_instance_database, handle); - return (avail); - -error_exit: - return (0); } /* @@ -2229,7 +2135,7 @@ static int orf_token_remcast ( sort_queue_item = ptr; totemrrp_mcast_noflush_send ( - instance->totemrrp_handle, + instance->totemrrp_context, sort_queue_item->mcast, sort_queue_item->msg_len); @@ -2392,7 +2298,7 @@ static int orf_token_mcast ( &sort_queue_item, message_item->mcast->seq); totemrrp_mcast_noflush_send ( - instance->totemrrp_handle, + instance->totemrrp_context, message_item->mcast, message_item->msg_len); @@ -2540,7 +2446,7 @@ static int orf_token_rtr ( static void token_retransmit (struct totemsrp_instance *instance) { - totemrrp_token_send (instance->totemrrp_handle, + totemrrp_token_send (instance->totemrrp_context, instance->orf_token_retransmit, instance->orf_token_retransmit_size); } @@ -2624,7 +2530,7 @@ static int token_send ( return (0); } - totemrrp_token_send (instance->totemrrp_handle, + totemrrp_token_send (instance->totemrrp_context, orf_token, orf_token_size); @@ -2653,7 +2559,7 @@ static int token_hold_cancel_send (struct totemsrp_instance *instance) sizeof (struct memb_ring_id)); assert (token_hold_cancel.header.nodeid); - totemrrp_mcast_flush_send (instance->totemrrp_handle, &token_hold_cancel, + totemrrp_mcast_flush_send (instance->totemrrp_context, &token_hold_cancel, sizeof (struct token_hold_cancel)); return (0); @@ -2777,7 +2683,7 @@ static void memb_state_commit_token_target_set ( for (i = 0; i < instance->totem_config->interface_count; i++) { totemrrp_token_target_set ( - instance->totemrrp_handle, + instance->totemrrp_context, &addr[commit_token->memb_index % commit_token->addr_entries].addr[i], i); @@ -2805,7 +2711,7 @@ static int memb_state_commit_token_send ( memcpy (instance->orf_token_retransmit, commit_token, commit_token_size); instance->orf_token_retransmit_size = commit_token_size; - totemrrp_token_send (instance->totemrrp_handle, + totemrrp_token_send (instance->totemrrp_context, commit_token, commit_token_size); @@ -2941,7 +2847,7 @@ static void memb_join_message_send (struct totemsrp_instance *instance) } totemrrp_mcast_flush_send ( - instance->totemrrp_handle, + instance->totemrrp_context, memb_join, addr_idx); } @@ -3010,7 +2916,7 @@ static void memb_leave_message_send (struct totemsrp_instance *instance) } totemrrp_mcast_flush_send ( - instance->totemrrp_handle, + instance->totemrrp_context, memb_join, addr_idx); } @@ -3028,7 +2934,7 @@ static void memb_merge_detect_transmit (struct totemsrp_instance *instance) sizeof (struct memb_ring_id)); assert (memb_merge_detect.header.nodeid); - totemrrp_mcast_flush_send (instance->totemrrp_handle, + totemrrp_mcast_flush_send (instance->totemrrp_context, &memb_merge_detect, sizeof (struct memb_merge_detect)); } @@ -3103,22 +3009,15 @@ static void memb_ring_id_set_and_store ( } int totemsrp_callback_token_create ( - hdb_handle_t handle, + void *srp_context, void **handle_out, enum totem_callback_token_type type, int delete, int (*callback_fn) (enum totem_callback_token_type type, const void *), const void *data) { + struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context; struct token_callback_instance *callback_handle; - struct totemsrp_instance *instance; - unsigned int res; - - res = hdb_handle_get (&totemsrp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } token_hold_cancel_send (instance); @@ -3141,13 +3040,10 @@ int totemsrp_callback_token_create ( break; } - hdb_handle_put (&totemsrp_instance_database, handle); - -error_exit: return (0); } -void totemsrp_callback_token_destroy (hdb_handle_t handle, void **handle_out) +void totemsrp_callback_token_destroy (void *srp_context, void **handle_out) { struct token_callback_instance *h; @@ -3363,7 +3259,7 @@ static int message_handler_orf_token ( } #endif - totemrrp_recv_flush (instance->totemrrp_handle); + totemrrp_recv_flush (instance->totemrrp_context); /* * Determine if we should hold (in reality drop) the token @@ -3551,7 +3447,7 @@ static int message_handler_orf_token ( } } - totemrrp_send_flush (instance->totemrrp_handle); + totemrrp_send_flush (instance->totemrrp_context); token_send (instance, token, forward_token); #ifdef GIVEINFO diff --git a/exec/totemsrp.h b/exec/totemsrp.h index 426d160d..e003d7d2 100644 --- a/exec/totemsrp.h +++ b/exec/totemsrp.h @@ -48,7 +48,7 @@ */ int totemsrp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **srp_context, struct totem_config *totem_config, void (*deliver_fn) ( @@ -63,13 +63,13 @@ int totemsrp_initialize ( const unsigned int *joined_list, size_t joined_list_entries, const struct memb_ring_id *ring_id)); -void totemsrp_finalize (hdb_handle_t handle); +void totemsrp_finalize (void *srp_context); /* * Multicast a message */ int totemsrp_mcast ( - hdb_handle_t handle, + void *srp_context, struct iovec *iovec, unsigned int iov_len, int priority); @@ -77,10 +77,10 @@ int totemsrp_mcast ( /* * Return number of available messages that can be queued */ -int totemsrp_avail (hdb_handle_t handle); +int totemsrp_avail (void *srp_context); int totemsrp_callback_token_create ( - hdb_handle_t handle, + void *srp_context, void **handle_out, enum totem_callback_token_type type, int delete, @@ -88,31 +88,31 @@ int totemsrp_callback_token_create ( const void *data); void totemsrp_callback_token_destroy ( - hdb_handle_t handle, + void *srp_context, void **handle_out); -int totemsrp_new_msg_signal (hdb_handle_t handle); +int totemsrp_new_msg_signal (void *srp_context); extern void totemsrp_net_mtu_adjust (struct totem_config *totem_config); extern int totemsrp_ifaces_get ( - hdb_handle_t handle, + void *srp_context, unsigned int nodeid, struct totem_ip_address *interfaces, char ***status, unsigned int *iface_count); extern unsigned int totemsrp_my_nodeid_get ( - hdb_handle_t handle); + void *srp_context); extern int totemsrp_my_family_get ( - hdb_handle_t handle); + void *srp_context); extern int totemsrp_crypto_set ( - hdb_handle_t handle, + void *srp_context, unsigned int type); extern int totemsrp_ring_reenable ( - hdb_handle_t handle); + void *srp_context); #endif /* TOTEMSRP_H_DEFINED */ diff --git a/exec/totemudp.c b/exec/totemudp.c index c54dd8af..87062bb4 100644 --- a/exec/totemudp.c +++ b/exec/totemudp.c @@ -165,7 +165,7 @@ struct totemudp_instance { const char *format, ...)__attribute__((format(printf, 5, 6))); - hdb_handle_t handle; + void *udp_context; char iov_buffer[FRAME_SIZE_MAX]; @@ -212,8 +212,6 @@ struct work_item { struct totemudp_instance *instance; }; -static void netif_down_check (struct totemudp_instance *instance); - static int totemudp_build_sockets ( struct totemudp_instance *instance, struct totem_ip_address *bindnet_address, @@ -223,8 +221,6 @@ static int totemudp_build_sockets ( static struct totem_ip_address localhost; -DECLARE_HDB_DATABASE (totemudp_instance_database,NULL); - static void totemudp_instance_initialize (struct totemudp_instance *instance) { memset (instance, 0, sizeof (struct totemudp_instance)); @@ -847,19 +843,13 @@ static void init_crypto( #endif } -int totemudp_crypto_set (hdb_handle_t handle, - unsigned int type) +int totemudp_crypto_set ( + void *udp_context, + unsigned int type) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - /* * Can't set crypto type if OLD is selected */ @@ -883,10 +873,8 @@ int totemudp_crypto_set (hdb_handle_t handle, break; } } - hdb_handle_put (&totemudp_instance_database, handle); -error_exit: - return res; + return (res); } @@ -1123,18 +1111,11 @@ static void totemudp_mcast_worker_fn (void *thread_state, void *work_item_in) } int totemudp_finalize ( - hdb_handle_t handle) + void *udp_context) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - worker_thread_group_exit (&instance->worker_thread_group); if (instance->totemudp_sockets.mcast_recv > 0) { @@ -1151,9 +1132,6 @@ int totemudp_finalize ( instance->totemudp_sockets.token); } - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } @@ -1400,16 +1378,6 @@ static void timer_function_netif_check_timeout ( } } - -/* - * Check if an interface is down and reconfigure - * totemudp waiting for it to come back up - */ -static void netif_down_check (struct totemudp_instance *instance) -{ - timer_function_netif_check_timeout (instance); -} - /* Set the socket priority to INTERACTIVE to ensure that our messages don't get queued behind anything else */ static void totemudp_traffic_control_set(struct totemudp_instance *instance, int sock) @@ -1727,7 +1695,7 @@ static int totemudp_build_sockets ( */ int totemudp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **udp_context, struct totem_config *totem_config, int interface_no, void *context, @@ -1742,17 +1710,10 @@ int totemudp_initialize ( const struct totem_ip_address *iface_address)) { struct totemudp_instance *instance; - unsigned int res; - res = hdb_handle_create (&totemudp_instance_database, - sizeof (struct totemudp_instance), handle); - if (res != 0) { - goto error_exit; - } - res = hdb_handle_get (&totemudp_instance_database, *handle, - (void *)&instance); - if (res != 0) { - goto error_destroy; + instance = malloc (sizeof (struct totemudp_instance)); + if (instance == NULL) { + return (-1); } totemudp_instance_initialize (instance); @@ -1808,35 +1769,29 @@ int totemudp_initialize ( instance->totemudp_iface_change_fn = iface_change_fn; - instance->handle = *handle; - totemip_localhost (instance->mcast_address.family, &localhost); - netif_down_check (instance); + /* + * RRP layer isn't ready to receive message because it hasn't + * initialized yet. Add short timer to check the interfaces. + */ + poll_timer_add (instance->totemudp_poll_handle, + 100, + (void *)instance, + timer_function_netif_check_timeout, + &instance->timer_netif_check_timeout); -error_exit: - hdb_handle_put (&totemudp_instance_database, *handle); + *udp_context = instance; return (0); - -error_destroy: - hdb_handle_destroy (&totemudp_instance_database, *handle); - return (-1); } int totemudp_processor_count_set ( - hdb_handle_t handle, + void *udp_context, int processor_count) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - instance->my_memb_entries = processor_count; poll_timer_delete (instance->totemudp_poll_handle, instance->timer_netif_check_timeout); @@ -1847,26 +1802,17 @@ int totemudp_processor_count_set ( timer_function_netif_check_timeout, &instance->timer_netif_check_timeout); } - hdb_handle_put (&totemudp_instance_database, handle); -error_exit: return (res); } -int totemudp_recv_flush (hdb_handle_t handle) +int totemudp_recv_flush (void *udp_context) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; struct pollfd ufd; int nfds; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - instance->flushing = 1; do { @@ -1881,93 +1827,53 @@ int totemudp_recv_flush (hdb_handle_t handle) instance->flushing = 0; - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } -int totemudp_send_flush (hdb_handle_t handle) +int totemudp_send_flush (void *udp_context) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - worker_thread_group_wait (&instance->worker_thread_group); - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } int totemudp_token_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - ucast_sendmsg (instance, &instance->token_target, msg, msg_len); - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } int totemudp_mcast_flush_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - mcast_sendmsg (instance, msg, msg_len); - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } int totemudp_mcast_noflush_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; struct work_item work_item; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - if (instance->totem_config->threads) { work_item.msg = msg; work_item.msg_len = msg_len; @@ -1979,31 +1885,20 @@ int totemudp_mcast_noflush_send ( mcast_sendmsg (instance, msg, msg_len); } - hdb_handle_put (&totemudp_instance_database, handle); -error_exit: return (res); } -extern int totemudp_iface_check (hdb_handle_t handle) +extern int totemudp_iface_check (void *udp_context) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; int res = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - res = ENOENT; - goto error_exit; - } - timer_function_netif_check_timeout (instance); - hdb_handle_put (&totemudp_instance_database, handle); -error_exit: return (res); } -extern void totemudp_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config) +extern void totemudp_net_mtu_adjust (void *udp_context, struct totem_config *totem_config) { #define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */ if (totem_config->secauth == 1) { @@ -2014,72 +1909,44 @@ extern void totemudp_net_mtu_adjust (hdb_handle_t handle, struct totem_config *t } } -const char *totemudp_iface_print (hdb_handle_t handle) { - struct totemudp_instance *instance; - int res = 0; +const char *totemudp_iface_print (void *udp_context) { + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; const char *ret_char; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - ret_char = "Invalid totemudp handle"; - goto error_exit; - } - ret_char = totemip_print (&instance->my_id); - hdb_handle_put (&totemudp_instance_database, handle); -error_exit: return (ret_char); } int totemudp_iface_get ( - hdb_handle_t handle, + void *udp_context, struct totem_ip_address *addr) { - struct totemudp_instance *instance; - unsigned int res; - - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; + int res = 0; memcpy (addr, &instance->my_id, sizeof (struct totem_ip_address)); - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } int totemudp_token_target_set ( - hdb_handle_t handle, + void *udp_context, const struct totem_ip_address *token_target) { - struct totemudp_instance *instance; - unsigned int res; - - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; + int res = 0; memcpy (&instance->token_target, token_target, sizeof (struct totem_ip_address)); - hdb_handle_put (&totemudp_instance_database, handle); - -error_exit: return (res); } extern int totemudp_recv_mcast_empty ( - hdb_handle_t handle) + void *udp_context) { - struct totemudp_instance *instance; + struct totemudp_instance *instance = (struct totemudp_instance *)udp_context; unsigned int res; struct sockaddr_storage system_from; struct msghdr msg_recv; @@ -2087,12 +1954,6 @@ extern int totemudp_recv_mcast_empty ( int nfds; int msg_processed = 0; - res = hdb_handle_get (&totemudp_instance_database, handle, - (void *)&instance); - if (res != 0) { - goto error_exit; - } - /* * Receive datagram */ @@ -2123,11 +1984,6 @@ extern int totemudp_recv_mcast_empty ( } } while (nfds == 1); - hdb_handle_put (&totemudp_instance_database, handle); - return (msg_processed); - -error_exit: - return (res); } diff --git a/exec/totemudp.h b/exec/totemudp.h index 5d94bf51..66ad80bb 100644 --- a/exec/totemudp.h +++ b/exec/totemudp.h @@ -45,7 +45,7 @@ */ extern int totemudp_initialize ( hdb_handle_t poll_handle, - hdb_handle_t *handle, + void **udp_context, struct totem_config *totem_config, int interface_no, void *context, @@ -60,49 +60,49 @@ extern int totemudp_initialize ( const struct totem_ip_address *iface_address)); extern int totemudp_processor_count_set ( - hdb_handle_t handle, + void *udp_context, int processor_count); extern int totemudp_token_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len); extern int totemudp_mcast_flush_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len); extern int totemudp_mcast_noflush_send ( - hdb_handle_t handle, + void *udp_context, const void *msg, unsigned int msg_len); -extern int totemudp_recv_flush (hdb_handle_t handle); +extern int totemudp_recv_flush (void *udp_context); -extern int totemudp_send_flush (hdb_handle_t handle); +extern int totemudp_send_flush (void *udp_context); -extern int totemudp_iface_check (hdb_handle_t handle); +extern int totemudp_iface_check (void *udp_context); -extern int totemudp_finalize (hdb_handle_t handle); +extern int totemudp_finalize (void *udp_context); -extern void totemudp_net_mtu_adjust (hdb_handle_t handle, struct totem_config *totem_config); +extern void totemudp_net_mtu_adjust (void *udp_context, struct totem_config *totem_config); -extern const char *totemudp_iface_print (hdb_handle_t handle); +extern const char *totemudp_iface_print (void *udp_context); extern int totemudp_iface_get ( - hdb_handle_t handle, + void *udp_context, struct totem_ip_address *addr); extern int totemudp_token_target_set ( - hdb_handle_t handle, + void *udp_context, const struct totem_ip_address *token_target); extern int totemudp_crypto_set ( - hdb_handle_t handle, + void *udp_context, unsigned int type); extern int totemudp_recv_mcast_empty ( - hdb_handle_t handle); + void *udp_context); #endif /* TOTEMUDP_H_DEFINED */