23typedef struct pacemakerd_api_private_s {
28static const char *pacemakerd_state_str[] = {
47 if (pcmk__str_eq(state, pacemakerd_state_str[i],
pcmk__str_none)) {
60 return pacemakerd_state_str[state];
79 return "Initializing pacemaker";
81 return "Pacemaker daemons are starting";
83 return "Waiting for startup trigger from SBD";
85 return "Pacemaker is running";
87 return "Pacemaker daemons are shutting down";
92 return "Pacemaker daemons are shut down (reporting to SBD)";
94 return "Invalid pacemakerd state";
102 struct pacemakerd_api_private_s *
private = NULL;
104 api->
api_data = calloc(1,
sizeof(
struct pacemakerd_api_private_s));
115 private->client_uuid = pcmk__getpid_s();
123 free(((
struct pacemakerd_api_private_s *)
data)->client_uuid);
131 struct pacemakerd_api_private_s *
private = NULL;
145 struct pacemakerd_api_private_s *
private = NULL;
161 if (command == NULL) {
173 xmlNode *msg_data = NULL;
177 const char *value = NULL;
178 long long value_ll = 0;
180 if (pcmk__str_eq((
const char *) reply->name,
"ack",
pcmk__str_none)) {
181 long long int ack_status = 0;
187 if (pcmk__str_empty(value)
189 crm_info(
"Unrecognizable message from pacemakerd: "
197 crm_info(
"Unrecognizable message from pacemakerd: no reference");
223 crm_info(
"Unrecognizable message from pacemakerd: "
224 "unknown command '%s'", pcmk__s(value,
""));
251do_pacemakerd_api_call(
pcmk_ipc_api_t *api,
const char *ipc_name,
const char *task)
265 pcmk__ipc_sys_name(ipc_name,
"client"),
266 private->client_uuid);
271 crm_debug(
"Couldn't send request to pacemakerd: %s rc=%d",
285 return do_pacemakerd_api_call(api, ipc_name,
CRM_OP_PING);
291 return do_pacemakerd_api_call(api, ipc_name,
CRM_OP_QUIT);
G_GNUC_INTERNAL int pcmk__send_ipc_request(pcmk_ipc_api_t *api, xmlNode *request)
G_GNUC_INTERNAL void pcmk__call_ipc_callback(pcmk_ipc_api_t *api, enum pcmk_ipc_event event_type, crm_exit_t status, void *event_data)
IPC interface to Pacemaker daemons.
#define create_request(task, xml_data, host_to, sys_to, sys_from, uuid_from)
@ pcmk_ipc_event_reply
Daemon's reply to client IPC request.
const char * pcmk__pcmkd_state_enum2friendly(enum pcmk_pacemakerd_state state)
const char * pcmk_pacemakerd_api_daemon_state_enum2text(enum pcmk_pacemakerd_state state)
pcmk__ipc_methods_t * pcmk__pacemakerd_api_methods(void)
int pcmk_pacemakerd_api_shutdown(pcmk_ipc_api_t *api, const char *ipc_name)
struct pacemakerd_api_private_s pacemakerd_api_private_t
enum pcmk_pacemakerd_state pcmk_pacemakerd_api_daemon_state_text2enum(const char *state)
int pcmk_pacemakerd_api_ping(pcmk_ipc_api_t *api, const char *ipc_name)
IPC commands for Pacemakerd.
@ pcmk_pacemakerd_reply_unknown
@ pcmk_pacemakerd_reply_shutdown
@ pcmk_pacemakerd_reply_ping
@ pcmk_pacemakerd_state_wait_for_ping
@ pcmk_pacemakerd_state_starting_daemons
@ pcmk_pacemakerd_state_invalid
@ pcmk_pacemakerd_state_running
@ pcmk_pacemakerd_state_shutting_down
@ pcmk_pacemakerd_state_max
@ pcmk_pacemakerd_state_init
@ pcmk_pacemakerd_state_shutdown_complete
#define crm_info(fmt, args...)
#define crm_debug(fmt, args...)
#define XML_PING_ATTR_PACEMAKERDSTATE_WAITPING
#define XML_PING_ATTR_SYSFROM
#define XML_PING_ATTR_PACEMAKERDSTATE
#define XML_PING_ATTR_PACEMAKERDSTATE_SHUTDOWNCOMPLETE
#define XML_LRM_ATTR_OPSTATUS
#define XML_PING_ATTR_PACEMAKERDSTATE_SHUTTINGDOWN
#define XML_PING_ATTR_PACEMAKERDSTATE_STARTINGDAEMONS
#define XML_PING_ATTR_STATUS
#define XML_ATTR_RESPONSE
#define XML_ATTR_REFERENCE
#define XML_PING_ATTR_PACEMAKERDSTATE_RUNNING
#define XML_PING_ATTR_PACEMAKERDSTATE_INIT
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute.
int crm_element_value_ll(const xmlNode *data, const char *name, long long *dest)
Retrieve the long long integer value of an XML attribute.
const char * pcmk_rc_str(int rc)
Get a user-friendly description of a return code.
@ CRM_EX_PROTOCOL
Protocol violated.
@ CRM_EX_INDETERMINATE
Could not determine status.
enum crm_exit_e crm_exit_t
int pcmk__scan_ll(const char *text, long long *result, long long default_value)
bool pcmk__str_any_of(const char *s,...) G_GNUC_NULL_TERMINATED
int(* new_data)(pcmk_ipc_api_t *api)
void(* free_data)(void *api_data)
bool(* dispatch)(pcmk_ipc_api_t *api, xmlNode *msg)
void(* post_disconnect)(pcmk_ipc_api_t *api)
bool(* reply_expected)(pcmk_ipc_api_t *api, xmlNode *request)
int(* post_connect)(pcmk_ipc_api_t *api)
enum pcmk_pacemakerd_api_reply reply_type
union pcmk_pacemakerd_api_reply_t::@5 data
struct pcmk_pacemakerd_api_reply_t::@5::@7 shutdown
struct pcmk_pacemakerd_api_reply_t::@5::@6 ping
enum pcmk_pacemakerd_state state
Wrappers for and extensions to libxml2.
void free_xml(xmlNode *child)
xmlNode * get_message_xml(const xmlNode *msg, const char *field)