10#ifndef PCMK__CRM_COMMON_IPC_INTERNAL__H
11#define PCMK__CRM_COMMON_IPC_INTERNAL__H
18#include <gnutls/gnutls.h>
21#include <libxml/tree.h>
42#define PCMK__SPECIAL_PID 1
45#define PCMK__IPC_TIMEOUT 120
47#if defined(HAVE_GETPEEREID)
52#define PCMK__SPECIAL_PID_AS_0(p) (((p) == PCMK__SPECIAL_PID) ? 0 : (p))
54#define PCMK__SPECIAL_PID_AS_0(p) (p)
90 gid_t refgid, pid_t *gotpid);
161#define PCMK__CLIENT_TYPE(client) ((client)->flags & UINT64_C(0xff00000000))
194#define pcmk__set_client_flags(client, flags_to_set) do { \
195 (client)->flags = pcmk__set_flags_as(__func__, __LINE__, \
197 "Client", pcmk__client_name(client), \
198 (client)->flags, (flags_to_set), #flags_to_set); \
201#define pcmk__clear_client_flags(client, flags_to_clear) do { \
202 (client)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
204 "Client", pcmk__client_name(client), \
205 (client)->flags, (flags_to_clear), #flags_to_clear); \
208#define pcmk__set_ipc_flags(ipc_flags, ipc_name, flags_to_set) do { \
209 ipc_flags = pcmk__set_flags_as(__func__, __LINE__, LOG_TRACE, \
211 (ipc_flags), (flags_to_set), \
215#define pcmk__clear_ipc_flags(ipc_flags, ipc_name, flags_to_clear) do { \
216 ipc_flags = pcmk__clear_flags_as(__func__, __LINE__, LOG_TRACE, \
218 (ipc_flags), (flags_to_clear), \
239 const char *tag,
const char *ver,
crm_exit_t status);
240#define pcmk__ipc_create_ack(flags, tag, ver, st) \
241 pcmk__ipc_create_ack_as(__func__, __LINE__, (flags), (tag), (ver), (st))
244 uint32_t request, uint32_t
flags,
const char *tag,
246#define pcmk__ipc_send_ack(c, req, flags, tag, ver, st) \
247 pcmk__ipc_send_ack_as(__func__, __LINE__, (c), (req), (flags), (tag), (ver), (st))
250 uint16_t index,
struct iovec **
result, ssize_t *bytes);
252 const xmlNode *message, uint32_t
flags);
261 struct qb_ipcs_service_handlers *cb);
263 struct qb_ipcs_service_handlers *cb);
265 struct qb_ipcs_service_handlers *cb);
270 qb_ipcs_service_t **ipcs_rw,
271 qb_ipcs_service_t **ipcs_shm,
272 struct qb_ipcs_service_handlers *ro_cb,
273 struct qb_ipcs_service_handlers *rw_cb);
276 qb_ipcs_service_t *ipcs_rw,
277 qb_ipcs_service_t *ipcs_shm);
279static inline const char *
280pcmk__ipc_sys_name(
const char *ipc_name,
const char *fallback)
IPC interface to Pacemaker daemons.
pcmk_ipc_dispatch
How IPC replies should be dispatched.
struct crm_ipc_s crm_ipc_t
IPC commands for Pacemaker controller.
pcmk_controld_api_reply
Possible types of controller replies.
pcmk__client_t * pcmk__new_client(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
int pcmk__ipc_msg_append(GByteArray **buffer, guint8 *data)
int pcmk__connect_generic_ipc(crm_ipc_t *ipc)
int pcmk__ipc_fd(crm_ipc_t *ipc, int *fd)
pcmk__client_t * pcmk__find_client_by_id(const char *id)
const char * pcmk__client_name(const pcmk__client_t *c)
const char * pcmk__client_type_str(uint64_t client_type)
const char * pcmk__pcmkd_state_enum2friendly(enum pcmk_pacemakerd_state state)
int pcmk__ipc_prepare_iov(uint32_t request, const GString *message, uint16_t index, struct iovec **result, ssize_t *bytes)
int pcmk__client_pid(qb_ipcs_connection_t *c)
@ pcmk__client_proxied
Client IPC is proxied.
@ pcmk__client_ipc
Client uses plain IPC.
@ pcmk__client_tls
Client uses TCP with TLS.
@ pcmk__client_tls_handshake_complete
Client TLS handshake is complete.
@ pcmk__client_privileged
Client is run by root or cluster user.
@ pcmk__client_to_proxy
Local client to be proxied.
@ pcmk__client_tcp
Client uses TCP connection.
@ pcmk__client_authenticated
Client IPC connection accepted.
const char * pcmk__pcmkd_api_reply2str(enum pcmk_pacemakerd_api_reply reply)
pcmk__client_t * pcmk__find_client(const qb_ipcs_connection_t *c)
void pcmk__ipc_free_client_buffer(crm_ipc_t *client)
int pcmk__ipc_send_ack_as(const char *function, int line, pcmk__client_t *c, uint32_t request, uint32_t flags, const char *tag, const char *ver, crm_exit_t status)
pcmk__client_t * pcmk__new_unauth_client(void *key)
Allocate a new pcmk__client_t object and generate its ID.
void pcmk__drop_all_clients(qb_ipcs_service_t *s)
guint pcmk__ipc_client_count(void)
int pcmk__connect_ipc(pcmk_ipc_api_t *api, enum pcmk_ipc_dispatch dispatch_type, int attempts)
void pcmk__serve_fenced_ipc(qb_ipcs_service_t **ipcs, struct qb_ipcs_service_handlers *cb)
int pcmk__ipc_send_xml(pcmk__client_t *c, uint32_t request, const xmlNode *message, uint32_t flags)
void pcmk__set_client_queue_max(pcmk__client_t *client, const char *qmax)
qb_ipcs_service_t * pcmk__serve_controld_ipc(struct qb_ipcs_service_handlers *cb)
void pcmk__stop_based_ipc(qb_ipcs_service_t *ipcs_ro, qb_ipcs_service_t *ipcs_rw, qb_ipcs_service_t *ipcs_shm)
void pcmk__free_client(pcmk__client_t *c)
int pcmk__ipc_is_authentic_process_active(const char *name, uid_t refuid, gid_t refgid, pid_t *gotpid)
xmlNode * pcmk__client_data2xml(pcmk__client_t *c, uint32_t *id, uint32_t *flags)
int pcmk__connect_ipc_retry_conrefused(pcmk_ipc_api_t *api, enum pcmk_ipc_dispatch dispatch_type, int attempts)
void pcmk__serve_based_ipc(qb_ipcs_service_t **ipcs_ro, qb_ipcs_service_t **ipcs_rw, qb_ipcs_service_t **ipcs_shm, struct qb_ipcs_service_handlers *ro_cb, struct qb_ipcs_service_handlers *rw_cb)
xmlNode * pcmk__ipc_create_ack_as(const char *function, int line, uint32_t flags, const char *tag, const char *ver, crm_exit_t status)
void pcmk__client_cleanup(void)
void pcmk__foreach_ipc_client(GHFunc func, gpointer user_data)
int pcmk__ipc_send_iov(pcmk__client_t *c, struct iovec *iov, uint32_t flags)
const char * pcmk__controld_api_reply2str(enum pcmk_controld_api_reply reply)
void pcmk__serve_attrd_ipc(qb_ipcs_service_t **ipcs, struct qb_ipcs_service_handlers *cb)
qb_ipcs_service_t * pcmk__serve_schedulerd_ipc(struct qb_ipcs_service_handlers *cb)
void pcmk__serve_pacemakerd_ipc(qb_ipcs_service_t **ipcs, struct qb_ipcs_service_handlers *cb)
IPC commands for Pacemakerd.
pcmk_pacemakerd_api_reply
Possible types of pacemakerd replies.
Wrappers for and extensions to glib mainloop.
struct mainloop_io_s mainloop_io_t
pcmk__action_result_t result
enum crm_exit_e crm_exit_t
Exit status codes for tools and daemons.
qb_ipcs_connection_t * ipcs
unsigned int queue_backlog
struct pcmk__remote_s * remote
gnutls_session_t tls_session