|
@@ -39,9 +39,7 @@
|
|
|
|
|
|
|
|
#include "../lcr/lcr_ifact.h"
|
|
#include "../lcr/lcr_ifact.h"
|
|
|
#include "swab.h"
|
|
#include "swab.h"
|
|
|
-#include "objdb.h"
|
|
|
|
|
#include "totem.h"
|
|
#include "totem.h"
|
|
|
-#include "service.h"
|
|
|
|
|
#include "mainconfig.h"
|
|
#include "mainconfig.h"
|
|
|
#include "util.h"
|
|
#include "util.h"
|
|
|
#include "logsys.h"
|
|
#include "logsys.h"
|
|
@@ -51,8 +49,8 @@
|
|
|
#include "totemip.h"
|
|
#include "totemip.h"
|
|
|
#include "main.h"
|
|
#include "main.h"
|
|
|
#include "ipc.h"
|
|
#include "ipc.h"
|
|
|
-
|
|
|
|
|
#include "../include/coroapi.h"
|
|
#include "../include/coroapi.h"
|
|
|
|
|
+#include "service.h"
|
|
|
|
|
|
|
|
LOGSYS_DECLARE_SUBSYS ("SERV", LOG_INFO);
|
|
LOGSYS_DECLARE_SUBSYS ("SERV", LOG_INFO);
|
|
|
|
|
|
|
@@ -61,34 +59,6 @@ struct default_service {
|
|
|
int ver;
|
|
int ver;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-static struct corosync_api_v1 corosync_api_v1 = {
|
|
|
|
|
- .timer_add_duration = openais_timer_add_duration,
|
|
|
|
|
- .timer_add_absolute = openais_timer_add_absolute,
|
|
|
|
|
- .timer_delete = openais_timer_delete,
|
|
|
|
|
- .timer_time_get = NULL,
|
|
|
|
|
- .ipc_source_set = message_source_set,
|
|
|
|
|
- .ipc_source_is_local = message_source_is_local,
|
|
|
|
|
- .ipc_private_data_get = openais_conn_private_data_get,
|
|
|
|
|
- .ipc_response_send = NULL,
|
|
|
|
|
- .ipc_dispatch_send = NULL,
|
|
|
|
|
- .ipc_conn_send_response = openais_conn_send_response,
|
|
|
|
|
- .ipc_conn_partner_get = openais_conn_partner_get,
|
|
|
|
|
- .ipc_refcnt_inc = openais_ipc_flow_control_local_increment,
|
|
|
|
|
- .ipc_refcnt_dec = openais_ipc_flow_control_local_decrement,
|
|
|
|
|
- .ipc_fc_create = openais_ipc_flow_control_create,
|
|
|
|
|
- .ipc_fc_destroy = openais_ipc_flow_control_destroy,
|
|
|
|
|
- .totem_nodeid_get = totempg_my_nodeid_get,
|
|
|
|
|
- .totem_ring_reenable = totempg_ring_reenable,
|
|
|
|
|
- .totem_mcast = main_mcast,
|
|
|
|
|
- .totem_send_ok = main_send_ok,
|
|
|
|
|
- .totem_ifaces_get = totempg_ifaces_get,
|
|
|
|
|
- .totem_ifaces_print = totempg_ifaces_print,
|
|
|
|
|
- .totem_ip_print = totemip_print,
|
|
|
|
|
- .service_link_and_init = openais_service_link_and_init,
|
|
|
|
|
- .service_unlink_and_exit = openais_service_unlink_and_exit,
|
|
|
|
|
- .error_memory_failure = NULL
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
static struct default_service default_services[] = {
|
|
static struct default_service default_services[] = {
|
|
|
{
|
|
{
|
|
|
.name = "corosync_evs",
|
|
.name = "corosync_evs",
|
|
@@ -113,7 +83,7 @@ struct corosync_service_engine *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
|
|
|
|
|
|
|
|
static unsigned int object_internal_configuration_handle;
|
|
static unsigned int object_internal_configuration_handle;
|
|
|
|
|
|
|
|
-static unsigned int default_services_requested (struct objdb_iface_ver0 *objdb)
|
|
|
|
|
|
|
+static unsigned int default_services_requested (struct corosync_api_v1 *api)
|
|
|
{
|
|
{
|
|
|
unsigned int object_service_handle;
|
|
unsigned int object_service_handle;
|
|
|
char *value;
|
|
char *value;
|
|
@@ -121,14 +91,14 @@ static unsigned int default_services_requested (struct objdb_iface_ver0 *objdb)
|
|
|
/*
|
|
/*
|
|
|
* Don't link default services if they have been disabled
|
|
* Don't link default services if they have been disabled
|
|
|
*/
|
|
*/
|
|
|
- objdb->object_find_reset (OBJECT_PARENT_HANDLE);
|
|
|
|
|
- if (objdb->object_find (
|
|
|
|
|
|
|
+ api->object_find_reset (OBJECT_PARENT_HANDLE);
|
|
|
|
|
+ if (api->object_find (
|
|
|
OBJECT_PARENT_HANDLE,
|
|
OBJECT_PARENT_HANDLE,
|
|
|
"aisexec",
|
|
"aisexec",
|
|
|
strlen ("aisexec"),
|
|
strlen ("aisexec"),
|
|
|
&object_service_handle) == 0) {
|
|
&object_service_handle) == 0) {
|
|
|
|
|
|
|
|
- if ( ! objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ if ( ! api->object_key_get (object_service_handle,
|
|
|
"defaultservices",
|
|
"defaultservices",
|
|
|
strlen ("defaultservices"),
|
|
strlen ("defaultservices"),
|
|
|
(void *)&value,
|
|
(void *)&value,
|
|
@@ -143,7 +113,7 @@ static unsigned int default_services_requested (struct objdb_iface_ver0 *objdb)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
unsigned int openais_service_link_and_init (
|
|
unsigned int openais_service_link_and_init (
|
|
|
- struct objdb_iface_ver0 *objdb,
|
|
|
|
|
|
|
+ struct corosync_api_v1 *api,
|
|
|
char *service_name,
|
|
char *service_name,
|
|
|
unsigned int service_ver)
|
|
unsigned int service_ver)
|
|
|
{
|
|
{
|
|
@@ -180,40 +150,40 @@ unsigned int openais_service_link_and_init (
|
|
|
|
|
|
|
|
ais_service[service->id] = service;
|
|
ais_service[service->id] = service;
|
|
|
if (service->config_init_fn) {
|
|
if (service->config_init_fn) {
|
|
|
- res = service->config_init_fn (objdb);
|
|
|
|
|
|
|
+ res = service->config_init_fn (api);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (service->exec_init_fn) {
|
|
if (service->exec_init_fn) {
|
|
|
- res = service->exec_init_fn (objdb, &corosync_api_v1);
|
|
|
|
|
|
|
+ res = service->exec_init_fn (api);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
* Store service in object database
|
|
* Store service in object database
|
|
|
*/
|
|
*/
|
|
|
- objdb->object_create (object_internal_configuration_handle,
|
|
|
|
|
|
|
+ api->object_create (object_internal_configuration_handle,
|
|
|
&object_service_handle,
|
|
&object_service_handle,
|
|
|
"service",
|
|
"service",
|
|
|
strlen ("service"));
|
|
strlen ("service"));
|
|
|
|
|
|
|
|
- objdb->object_key_create (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_create (object_service_handle,
|
|
|
"name",
|
|
"name",
|
|
|
strlen ("name"),
|
|
strlen ("name"),
|
|
|
service_name,
|
|
service_name,
|
|
|
strlen (service_name) + 1);
|
|
strlen (service_name) + 1);
|
|
|
|
|
|
|
|
- objdb->object_key_create (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_create (object_service_handle,
|
|
|
"ver",
|
|
"ver",
|
|
|
strlen ("ver"),
|
|
strlen ("ver"),
|
|
|
&service_ver,
|
|
&service_ver,
|
|
|
sizeof (service_ver));
|
|
sizeof (service_ver));
|
|
|
|
|
|
|
|
- res = objdb->object_key_create (object_service_handle,
|
|
|
|
|
|
|
+ res = api->object_key_create (object_service_handle,
|
|
|
"handle",
|
|
"handle",
|
|
|
strlen ("handle"),
|
|
strlen ("handle"),
|
|
|
&handle,
|
|
&handle,
|
|
|
sizeof (handle));
|
|
sizeof (handle));
|
|
|
|
|
|
|
|
- objdb->object_key_create (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_create (object_service_handle,
|
|
|
"service_id",
|
|
"service_id",
|
|
|
strlen ("service_id"),
|
|
strlen ("service_id"),
|
|
|
&service->id,
|
|
&service->id,
|
|
@@ -224,7 +194,7 @@ unsigned int openais_service_link_and_init (
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static int openais_service_unlink_common (
|
|
static int openais_service_unlink_common (
|
|
|
- struct objdb_iface_ver0 *objdb,
|
|
|
|
|
|
|
+ struct corosync_api_v1 *api,
|
|
|
unsigned int object_service_handle,
|
|
unsigned int object_service_handle,
|
|
|
const char *service_name,
|
|
const char *service_name,
|
|
|
unsigned int service_version)
|
|
unsigned int service_version)
|
|
@@ -233,13 +203,13 @@ static int openais_service_unlink_common (
|
|
|
unsigned short *service_id;
|
|
unsigned short *service_id;
|
|
|
unsigned int *found_service_handle;
|
|
unsigned int *found_service_handle;
|
|
|
|
|
|
|
|
- res = objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ res = api->object_key_get (object_service_handle,
|
|
|
"handle",
|
|
"handle",
|
|
|
strlen ("handle"),
|
|
strlen ("handle"),
|
|
|
(void *)&found_service_handle,
|
|
(void *)&found_service_handle,
|
|
|
NULL);
|
|
NULL);
|
|
|
|
|
|
|
|
- res = objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ res = api->object_key_get (object_service_handle,
|
|
|
"service_id",
|
|
"service_id",
|
|
|
strlen ("service_id"),
|
|
strlen ("service_id"),
|
|
|
(void *)&service_id,
|
|
(void *)&service_id,
|
|
@@ -249,7 +219,7 @@ static int openais_service_unlink_common (
|
|
|
service_name, service_version);
|
|
service_name, service_version);
|
|
|
|
|
|
|
|
if (ais_service[*service_id]->exec_exit_fn) {
|
|
if (ais_service[*service_id]->exec_exit_fn) {
|
|
|
- ais_service[*service_id]->exec_exit_fn (objdb);
|
|
|
|
|
|
|
+ ais_service[*service_id]->exec_exit_fn (api);
|
|
|
}
|
|
}
|
|
|
ais_service[*service_id] = NULL;
|
|
ais_service[*service_id] = NULL;
|
|
|
|
|
|
|
@@ -257,7 +227,7 @@ static int openais_service_unlink_common (
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
extern unsigned int openais_service_unlink_and_exit (
|
|
extern unsigned int openais_service_unlink_and_exit (
|
|
|
- struct objdb_iface_ver0 *objdb,
|
|
|
|
|
|
|
+ struct corosync_api_v1 *api,
|
|
|
char *service_name,
|
|
char *service_name,
|
|
|
unsigned int service_ver)
|
|
unsigned int service_ver)
|
|
|
{
|
|
{
|
|
@@ -266,19 +236,19 @@ extern unsigned int openais_service_unlink_and_exit (
|
|
|
char *found_service_name;
|
|
char *found_service_name;
|
|
|
unsigned int *found_service_ver;
|
|
unsigned int *found_service_ver;
|
|
|
|
|
|
|
|
- while (objdb->object_find (
|
|
|
|
|
|
|
+ while (api->object_find (
|
|
|
object_internal_configuration_handle,
|
|
object_internal_configuration_handle,
|
|
|
"service",
|
|
"service",
|
|
|
strlen ("service"),
|
|
strlen ("service"),
|
|
|
&object_service_handle) == 0) {
|
|
&object_service_handle) == 0) {
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"name",
|
|
"name",
|
|
|
strlen ("name"),
|
|
strlen ("name"),
|
|
|
(void *)&found_service_name,
|
|
(void *)&found_service_name,
|
|
|
NULL);
|
|
NULL);
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"ver",
|
|
"ver",
|
|
|
strlen ("ver"),
|
|
strlen ("ver"),
|
|
|
(void *)&found_service_ver,
|
|
(void *)&found_service_ver,
|
|
@@ -291,10 +261,10 @@ extern unsigned int openais_service_unlink_and_exit (
|
|
|
(service_ver == *found_service_ver)) {
|
|
(service_ver == *found_service_ver)) {
|
|
|
|
|
|
|
|
res = openais_service_unlink_common (
|
|
res = openais_service_unlink_common (
|
|
|
- objdb, object_service_handle,
|
|
|
|
|
|
|
+ api, object_service_handle,
|
|
|
service_name, service_ver);
|
|
service_name, service_ver);
|
|
|
|
|
|
|
|
- objdb->object_destroy (object_service_handle);
|
|
|
|
|
|
|
+ api->object_destroy (object_service_handle);
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -302,7 +272,7 @@ extern unsigned int openais_service_unlink_and_exit (
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
extern unsigned int openais_service_unlink_all (
|
|
extern unsigned int openais_service_unlink_all (
|
|
|
- struct objdb_iface_ver0 *objdb)
|
|
|
|
|
|
|
+ struct corosync_api_v1 *api)
|
|
|
{
|
|
{
|
|
|
char *service_name;
|
|
char *service_name;
|
|
|
unsigned int *service_ver;
|
|
unsigned int *service_ver;
|
|
@@ -310,30 +280,30 @@ extern unsigned int openais_service_unlink_all (
|
|
|
|
|
|
|
|
log_printf(LOG_LEVEL_NOTICE, "Unloading all openais components\n");
|
|
log_printf(LOG_LEVEL_NOTICE, "Unloading all openais components\n");
|
|
|
|
|
|
|
|
- objdb->object_find_reset (object_internal_configuration_handle);
|
|
|
|
|
|
|
+ api->object_find_reset (object_internal_configuration_handle);
|
|
|
|
|
|
|
|
- while (objdb->object_find (object_internal_configuration_handle,
|
|
|
|
|
|
|
+ while (api->object_find (object_internal_configuration_handle,
|
|
|
"service",
|
|
"service",
|
|
|
strlen ("service"),
|
|
strlen ("service"),
|
|
|
&object_service_handle) == 0) {
|
|
&object_service_handle) == 0) {
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"name",
|
|
"name",
|
|
|
strlen ("name"),
|
|
strlen ("name"),
|
|
|
(void *)&service_name,
|
|
(void *)&service_name,
|
|
|
NULL);
|
|
NULL);
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"ver",
|
|
"ver",
|
|
|
strlen ("ver"),
|
|
strlen ("ver"),
|
|
|
(void *)&service_ver,
|
|
(void *)&service_ver,
|
|
|
NULL);
|
|
NULL);
|
|
|
|
|
|
|
|
openais_service_unlink_common (
|
|
openais_service_unlink_common (
|
|
|
- objdb, object_service_handle, service_name, *service_ver);
|
|
|
|
|
|
|
+ api, object_service_handle, service_name, *service_ver);
|
|
|
|
|
|
|
|
- objdb->object_destroy (object_service_handle);
|
|
|
|
|
- objdb->object_find_reset (object_internal_configuration_handle);
|
|
|
|
|
|
|
+ api->object_destroy (object_service_handle);
|
|
|
|
|
+ api->object_find_reset (object_internal_configuration_handle);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return (0);
|
|
return (0);
|
|
@@ -342,7 +312,7 @@ extern unsigned int openais_service_unlink_all (
|
|
|
/*
|
|
/*
|
|
|
* Links default services into the executive
|
|
* Links default services into the executive
|
|
|
*/
|
|
*/
|
|
|
-unsigned int openais_service_defaults_link_and_init (struct objdb_iface_ver0 *objdb)
|
|
|
|
|
|
|
+unsigned int openais_service_defaults_link_and_init (struct corosync_api_v1 *api)
|
|
|
{
|
|
{
|
|
|
unsigned int i;
|
|
unsigned int i;
|
|
|
|
|
|
|
@@ -351,26 +321,26 @@ unsigned int openais_service_defaults_link_and_init (struct objdb_iface_ver0 *ob
|
|
|
char *found_service_ver;
|
|
char *found_service_ver;
|
|
|
unsigned int found_service_ver_atoi;
|
|
unsigned int found_service_ver_atoi;
|
|
|
|
|
|
|
|
- objdb->object_create (OBJECT_PARENT_HANDLE,
|
|
|
|
|
|
|
+ api->object_create (OBJECT_PARENT_HANDLE,
|
|
|
&object_internal_configuration_handle,
|
|
&object_internal_configuration_handle,
|
|
|
"internal_configuration",
|
|
"internal_configuration",
|
|
|
strlen ("internal_configuration"));
|
|
strlen ("internal_configuration"));
|
|
|
|
|
|
|
|
- objdb->object_find_reset (OBJECT_PARENT_HANDLE);
|
|
|
|
|
|
|
+ api->object_find_reset (OBJECT_PARENT_HANDLE);
|
|
|
|
|
|
|
|
- while (objdb->object_find (
|
|
|
|
|
|
|
+ while (api->object_find (
|
|
|
OBJECT_PARENT_HANDLE,
|
|
OBJECT_PARENT_HANDLE,
|
|
|
"service",
|
|
"service",
|
|
|
strlen ("service"),
|
|
strlen ("service"),
|
|
|
&object_service_handle) == 0) {
|
|
&object_service_handle) == 0) {
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"name",
|
|
"name",
|
|
|
strlen ("name"),
|
|
strlen ("name"),
|
|
|
(void *)&found_service_name,
|
|
(void *)&found_service_name,
|
|
|
NULL);
|
|
NULL);
|
|
|
|
|
|
|
|
- objdb->object_key_get (object_service_handle,
|
|
|
|
|
|
|
+ api->object_key_get (object_service_handle,
|
|
|
"ver",
|
|
"ver",
|
|
|
strlen ("ver"),
|
|
strlen ("ver"),
|
|
|
(void *)&found_service_ver,
|
|
(void *)&found_service_ver,
|
|
@@ -379,19 +349,19 @@ unsigned int openais_service_defaults_link_and_init (struct objdb_iface_ver0 *ob
|
|
|
found_service_ver_atoi = atoi (found_service_ver);
|
|
found_service_ver_atoi = atoi (found_service_ver);
|
|
|
|
|
|
|
|
openais_service_link_and_init (
|
|
openais_service_link_and_init (
|
|
|
- objdb,
|
|
|
|
|
|
|
+ api,
|
|
|
found_service_name,
|
|
found_service_name,
|
|
|
found_service_ver_atoi);
|
|
found_service_ver_atoi);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (default_services_requested (objdb) == 0) {
|
|
|
|
|
|
|
+ if (default_services_requested (api) == 0) {
|
|
|
return (0);
|
|
return (0);
|
|
|
}
|
|
}
|
|
|
for (i = 0;
|
|
for (i = 0;
|
|
|
i < sizeof (default_services) / sizeof (struct default_service); i++) {
|
|
i < sizeof (default_services) / sizeof (struct default_service); i++) {
|
|
|
|
|
|
|
|
openais_service_link_and_init (
|
|
openais_service_link_and_init (
|
|
|
- objdb,
|
|
|
|
|
|
|
+ api,
|
|
|
default_services[i].name,
|
|
default_services[i].name,
|
|
|
default_services[i].ver);
|
|
default_services[i].ver);
|
|
|
}
|
|
}
|