pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
ipc.h
Go to the documentation of this file.
1/*
2 * Copyright 2004-2025 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#ifndef PCMK__CRM_COMMON_IPC__H
11#define PCMK__CRM_COMMON_IPC__H
12
13#include <stdint.h>
14#include <sys/uio.h>
15#include <qb/qbipcc.h>
16#include <crm/common/xml.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
29/*
30 * The library supports two methods of creating IPC connections. The older code
31 * allows connecting to any arbitrary IPC name. The newer code only allows
32 * connecting to one of the Pacemaker daemons.
33 *
34 * As daemons are converted to use the new model, the old functions should be
35 * considered deprecated for use with those daemons. Once all daemons are
36 * converted, the old functions should be officially deprecated as public API
37 * and eventually made internal API.
38 */
39
40/*
41 * Pacemaker daemon IPC
42 */
43
44/* @COMPAT This is also used internally for cluster message types, but it's not
45 * worth the hassle of redefining this public API just to change the name.
46 */
58
59// NOTE: sbd (as of at least 1.5.2) uses this enum
63
64 // NOTE: sbd (as of at least 1.5.2) uses this value
66
67 // NOTE: sbd (as of at least 1.5.2) uses this value
69
71};
72
79
80// NOTE: sbd (as of at least 1.5.2) uses this
83
99 enum pcmk_ipc_event event_type,
100 crm_exit_t status,
101 void *event_data, void *user_data);
102
103// NOTE: sbd (as of at least 1.5.2) uses this
105
106// NOTE: sbd (as of at least 1.5.2) uses this
108
109// NOTE: sbd (as of at least 1.5.2) uses this
111
113
114int pcmk_poll_ipc(const pcmk_ipc_api_t *api, int timeout_ms);
115
117
118// NOTE: sbd (as of at least 1.5.2) uses this
120 void *user_data);
121
122const char *pcmk_ipc_name(const pcmk_ipc_api_t *api, bool for_log);
123
125
126int pcmk_ipc_purge_node(pcmk_ipc_api_t *api, const char *node_name,
127 uint32_t nodeid);
128
129
130/*
131 * Generic IPC API (to eventually be deprecated as public API and made internal)
132 */
133
135{
136 crm_ipc_flags_none = UINT32_C(0),
138 crm_ipc_compressed = (UINT32_C(1) << 0),
140 crm_ipc_proxied = (UINT32_C(1) << 8),
142 crm_ipc_client_response = (UINT32_C(1) << 9),
143
144 // These are options for Pacemaker's internal use only (pcmk__ipc_send_*())
145
147 crm_ipc_server_event = (UINT32_C(1) << 16),
149 crm_ipc_server_free = (UINT32_C(1) << 17),
152 crm_ipc_proxied_relay_response = (UINT32_C(1) << 18),
154 crm_ipc_multipart = (UINT32_C(1) << 19),
156 crm_ipc_multipart_end = (UINT32_C(1) << 20),
157};
158
159typedef struct crm_ipc_s crm_ipc_t;
160
161crm_ipc_t *crm_ipc_new(const char *name, size_t max_size);
162void crm_ipc_close(crm_ipc_t * client);
163void crm_ipc_destroy(crm_ipc_t * client);
164void pcmk_free_ipc_event(struct iovec *event);
165
166int crm_ipc_send(crm_ipc_t *client, const xmlNode *message,
167 enum crm_ipc_flags flags, int32_t ms_timeout, xmlNode **reply);
168
169int crm_ipc_get_fd(crm_ipc_t * client);
170bool crm_ipc_connected(crm_ipc_t * client);
171int crm_ipc_ready(crm_ipc_t * client);
172long crm_ipc_read(crm_ipc_t * client);
173const char *crm_ipc_buffer(crm_ipc_t * client);
174uint32_t crm_ipc_buffer_flags(crm_ipc_t * client);
175const char *crm_ipc_name(crm_ipc_t * client);
176unsigned int crm_ipc_default_buffer_size(void);
177
213int crm_ipc_is_authentic_process(int sock, uid_t refuid, gid_t refgid,
214 pid_t *gotpid, uid_t *gotuid, gid_t *gotgid);
215
216#ifdef __cplusplus
217}
218#endif
219
220#endif
const char * name
Definition cib.c:26
uint64_t flags
Definition remote.c:3
void(* pcmk_ipc_callback_t)(pcmk_ipc_api_t *api, enum pcmk_ipc_event event_type, crm_exit_t status, void *event_data, void *user_data)
Callback function type for Pacemaker daemon IPC APIs.
Definition ipc.h:98
int pcmk_poll_ipc(const pcmk_ipc_api_t *api, int timeout_ms)
Check whether an IPC connection has data available (without main loop)
Definition ipc_client.c:383
void crm_ipc_destroy(crm_ipc_t *client)
Definition ipc_client.c:976
void pcmk_disconnect_ipc(pcmk_ipc_api_t *api)
Disconnect an IPC API instance.
Definition ipc_client.c:610
const char * crm_ipc_name(crm_ipc_t *client)
int crm_ipc_send(crm_ipc_t *client, const xmlNode *message, enum crm_ipc_flags flags, int32_t ms_timeout, xmlNode **reply)
Send an IPC XML message.
int pcmk_connect_ipc(pcmk_ipc_api_t *api, enum pcmk_ipc_dispatch dispatch_type)
Connect to a Pacemaker daemon via IPC.
Definition ipc_client.c:587
long crm_ipc_read(crm_ipc_t *client)
int crm_ipc_get_fd(crm_ipc_t *client)
unsigned int crm_ipc_default_buffer_size(void)
Return pacemaker's IPC buffer size.
Definition ipc_common.c:31
crm_ipc_flags
Definition ipc.h:135
@ crm_ipc_compressed
Definition ipc.h:138
@ crm_ipc_flags_none
Definition ipc.h:136
@ crm_ipc_proxied_relay_response
Definition ipc.h:152
@ crm_ipc_multipart
This is a multi-part IPC message.
Definition ipc.h:154
@ crm_ipc_server_event
Send an Event instead of a Response.
Definition ipc.h:147
@ crm_ipc_client_response
A response is expected in reply.
Definition ipc.h:142
@ crm_ipc_proxied
ALL replies to proxied connections need to be sent as events
Definition ipc.h:140
@ crm_ipc_server_free
Free the iovec after sending.
Definition ipc.h:149
@ crm_ipc_multipart_end
This is the end of a multi-part IPC message.
Definition ipc.h:156
void pcmk_free_ipc_event(struct iovec *event)
Free an I/O vector created by pcmk__ipc_prepare_iov()
Definition ipc_server.c:259
int crm_ipc_ready(crm_ipc_t *client)
Check whether an IPC connection is ready to be read.
bool crm_ipc_connected(crm_ipc_t *client)
pcmk_ipc_event
Possible event types that an IPC event callback can be called for.
Definition ipc.h:61
@ pcmk_ipc_event_notify
Notification from daemon.
Definition ipc.h:70
@ pcmk_ipc_event_reply
Daemon's reply to client IPC request.
Definition ipc.h:68
@ pcmk_ipc_event_connect
Result of asynchronous connection attempt.
Definition ipc.h:62
@ pcmk_ipc_event_disconnect
Termination of IPC connection.
Definition ipc.h:65
pcmk_ipc_server
Available IPC interfaces.
Definition ipc.h:48
@ pcmk_ipc_schedulerd
Scheduler.
Definition ipc.h:56
@ pcmk_ipc_based
CIB manager.
Definition ipc.h:51
@ pcmk_ipc_execd
Executor.
Definition ipc.h:53
@ pcmk_ipc_pacemakerd
Launcher.
Definition ipc.h:55
@ pcmk_ipc_attrd
Attribute manager.
Definition ipc.h:50
@ pcmk_ipc_controld
Controller.
Definition ipc.h:52
@ pcmk_ipc_fenced
Fencer.
Definition ipc.h:54
@ pcmk_ipc_unknown
Unknown or invalid.
Definition ipc.h:49
const char * pcmk_ipc_name(const pcmk_ipc_api_t *api, bool for_log)
Get the IPC name used with an IPC API connection.
Definition ipc_client.c:241
int crm_ipc_is_authentic_process(int sock, uid_t refuid, gid_t refgid, pid_t *gotpid, uid_t *gotuid, gid_t *gotgid)
Check the authenticity of the IPC socket peer process (legacy)
void crm_ipc_close(crm_ipc_t *client)
Definition ipc_client.c:963
void pcmk_free_ipc_api(pcmk_ipc_api_t *api)
Free the contents of an IPC API object.
Definition ipc_client.c:200
pcmk_ipc_dispatch
How IPC replies should be dispatched.
Definition ipc.h:74
@ pcmk_ipc_dispatch_sync
Sending a command will wait for any reply.
Definition ipc.h:77
@ pcmk_ipc_dispatch_poll
Caller will poll and dispatch IPC.
Definition ipc.h:76
@ pcmk_ipc_dispatch_main
Attach IPC to GMainLoop for dispatch.
Definition ipc.h:75
uint32_t crm_ipc_buffer_flags(crm_ipc_t *client)
int pcmk_new_ipc_api(pcmk_ipc_api_t **api, enum pcmk_ipc_server server)
Create a new object for using Pacemaker daemon IPC.
Definition ipc_client.c:46
const char * crm_ipc_buffer(crm_ipc_t *client)
struct crm_ipc_s crm_ipc_t
Definition ipc.h:159
bool pcmk_ipc_is_connected(pcmk_ipc_api_t *api)
Check whether an IPC API connection is active.
Definition ipc_client.c:271
void pcmk_dispatch_ipc(pcmk_ipc_api_t *api)
Dispatch available messages on an IPC connection (without main loop)
Definition ipc_client.c:423
crm_ipc_t * crm_ipc_new(const char *name, size_t max_size)
Create a new (legacy) object for using Pacemaker daemon IPC.
Definition ipc_client.c:877
int pcmk_ipc_purge_node(pcmk_ipc_api_t *api, const char *node_name, uint32_t nodeid)
Ask a Pacemaker daemon to purge a node from its peer cache.
Definition ipc_client.c:825
void pcmk_register_ipc_callback(pcmk_ipc_api_t *api, pcmk_ipc_callback_t cb, void *user_data)
Register a callback for IPC API events.
Definition ipc_client.c:661
enum crm_exit_e crm_exit_t
Exit status codes for tools and daemons.
enum pcmk_ipc_dispatch dispatch_type
pcmk_ipc_callback_t cb
enum pcmk_ipc_server server
Wrappers for and extensions to libxml2.