/src/pacemaker/include/crm/common/results.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2012-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 | | #ifndef PCMK__CRM_COMMON_RESULTS__H |
10 | | #define PCMK__CRM_COMMON_RESULTS__H |
11 | | |
12 | | #include <glib.h> // gboolean |
13 | | |
14 | | #ifdef __cplusplus |
15 | | extern "C" { |
16 | | #endif |
17 | | |
18 | | /*! |
19 | | * \file |
20 | | * \brief Function and executable result codes |
21 | | * \ingroup core |
22 | | */ |
23 | | |
24 | | // Lifted from config.h |
25 | | /* The _Noreturn keyword of C11. */ |
26 | | #ifndef _Noreturn |
27 | | # if (defined __cplusplus \ |
28 | | && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ |
29 | | || (defined _MSC_VER && 1900 <= _MSC_VER))) |
30 | | # define _Noreturn [[noreturn]] |
31 | | # elif ((!defined __cplusplus || defined __clang__) \ |
32 | | && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ |
33 | | || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) |
34 | | /* _Noreturn works as-is. */ |
35 | | # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C |
36 | | # define _Noreturn __attribute__ ((__noreturn__)) |
37 | | # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) |
38 | | # define _Noreturn __declspec (noreturn) |
39 | | # else |
40 | | # define _Noreturn |
41 | | # endif |
42 | | #endif |
43 | | |
44 | | /* |
45 | | * Function return codes |
46 | | * |
47 | | * Most Pacemaker API functions return an integer return code. There are two |
48 | | * alternative interpretations. The legacy interpration is that the absolute |
49 | | * value of the return code is either a system error number or a custom |
50 | | * pcmk_err_* number. This is less than ideal because system error numbers are |
51 | | * constrained only to the positive int range, so there's the possibility that |
52 | | * system errors and custom errors could collide (which did in fact happen |
53 | | * already on one architecture). The new intepretation is that negative values |
54 | | * are from the pcmk_rc_e enum, and positive values are system error numbers. |
55 | | * Both use 0 for success. |
56 | | * |
57 | | * For system error codes, see: |
58 | | * - /usr/include/asm-generic/errno.h |
59 | | * - /usr/include/asm-generic/errno-base.h |
60 | | */ |
61 | | |
62 | | // Legacy custom return codes for Pacemaker API functions (deprecated) |
63 | | |
64 | | // NOTE: sbd (as of at least 1.5.2) uses this |
65 | 46 | #define pcmk_ok 0 |
66 | | |
67 | | #define PCMK_ERROR_OFFSET 190 /* Replacements on non-linux systems, see include/portability.h */ |
68 | | #define PCMK_CUSTOM_OFFSET 200 /* Purely custom codes */ |
69 | 0 | #define pcmk_err_generic 201 |
70 | 0 | #define pcmk_err_no_quorum 202 |
71 | 0 | #define pcmk_err_schema_validation 203 |
72 | 0 | #define pcmk_err_transform_failed 204 |
73 | 0 | #define pcmk_err_old_data 205 |
74 | | |
75 | | // NOTE: sbd (as of at least 1.5.2) uses this |
76 | 0 | #define pcmk_err_diff_failed 206 |
77 | | |
78 | | // NOTE: sbd (as of at least 1.5.2) uses this |
79 | 0 | #define pcmk_err_diff_resync 207 |
80 | | |
81 | 0 | #define pcmk_err_cib_modified 208 |
82 | 0 | #define pcmk_err_cib_backup 209 |
83 | 0 | #define pcmk_err_cib_save 210 |
84 | 0 | #define pcmk_err_schema_unchanged 211 |
85 | 0 | #define pcmk_err_cib_corrupt 212 |
86 | 0 | #define pcmk_err_multiple 213 |
87 | 0 | #define pcmk_err_node_unknown 214 |
88 | 0 | #define pcmk_err_already 215 |
89 | | /* On HPPA 215 is ENOSYM (Unknown error 215), which hopefully never happens. */ |
90 | | #ifdef __hppa__ |
91 | | #define pcmk_err_bad_nvpair 250 /* 216 is ENOTSOCK */ |
92 | | #define pcmk_err_unknown_format 252 /* 217 is EDESTADDRREQ */ |
93 | | #else |
94 | 0 | #define pcmk_err_bad_nvpair 216 |
95 | 0 | #define pcmk_err_unknown_format 217 |
96 | | #endif |
97 | | |
98 | | /*! |
99 | | * \brief Return codes for Pacemaker API functions |
100 | | * |
101 | | * Any Pacemaker API function documented as returning a "standard Pacemaker |
102 | | * return code" will return pcmk_rc_ok (0) on success, and one of this |
103 | | * enumeration's other (negative) values or a (positive) system error number |
104 | | * otherwise. The custom codes are at -1001 and lower, so that the caller may |
105 | | * use -1 through -1000 for their own custom values if desired. While generally |
106 | | * referred to as "errors", nonzero values simply indicate a result, which might |
107 | | * or might not be an error depending on the calling context. |
108 | | */ |
109 | | enum pcmk_rc_e { |
110 | | /* When adding new values, use consecutively lower numbers, update the array |
111 | | * in lib/common/results.c, and test with crm_error. |
112 | | */ |
113 | | pcmk_rc_digest_mismatch = -1043, |
114 | | pcmk_rc_cs_internal = -1042, |
115 | | pcmk_rc_ipc_more = -1041, |
116 | | pcmk_rc_no_dc = -1040, |
117 | | pcmk_rc_compression = -1039, |
118 | | pcmk_rc_ns_resolution = -1038, |
119 | | pcmk_rc_no_transaction = -1037, |
120 | | pcmk_rc_bad_xml_patch = -1036, |
121 | | pcmk_rc_bad_input = -1035, |
122 | | pcmk_rc_disabled = -1034, |
123 | | pcmk_rc_duplicate_id = -1033, |
124 | | pcmk_rc_unpack_error = -1032, |
125 | | pcmk_rc_invalid_transition = -1031, |
126 | | pcmk_rc_graph_error = -1030, |
127 | | pcmk_rc_dot_error = -1029, |
128 | | pcmk_rc_underflow = -1028, |
129 | | pcmk_rc_no_input = -1027, |
130 | | pcmk_rc_no_output = -1026, |
131 | | pcmk_rc_after_range = -1025, |
132 | | pcmk_rc_within_range = -1024, |
133 | | pcmk_rc_before_range = -1023, |
134 | | pcmk_rc_undetermined = -1022, |
135 | | pcmk_rc_op_unsatisfied = -1021, |
136 | | pcmk_rc_ipc_pid_only = -1020, |
137 | | pcmk_rc_ipc_unresponsive = -1019, |
138 | | pcmk_rc_ipc_unauthorized = -1018, |
139 | | pcmk_rc_no_quorum = -1017, |
140 | | pcmk_rc_schema_validation = -1016, |
141 | | pcmk_rc_schema_unchanged = -1015, |
142 | | pcmk_rc_transform_failed = -1014, |
143 | | pcmk_rc_old_data = -1013, |
144 | | pcmk_rc_diff_failed = -1012, |
145 | | pcmk_rc_diff_resync = -1011, |
146 | | pcmk_rc_cib_modified = -1010, |
147 | | pcmk_rc_cib_backup = -1009, |
148 | | pcmk_rc_cib_save = -1008, |
149 | | pcmk_rc_cib_corrupt = -1007, |
150 | | pcmk_rc_multiple = -1006, |
151 | | pcmk_rc_node_unknown = -1005, |
152 | | pcmk_rc_already = -1004, |
153 | | pcmk_rc_bad_nvpair = -1003, |
154 | | pcmk_rc_unknown_format = -1002, |
155 | | // Developers: Use a more specific code than pcmk_rc_error whenever possible |
156 | | pcmk_rc_error = -1001, |
157 | | |
158 | | // Values -1 through -1000 reserved for caller use |
159 | | |
160 | | // NOTE: sbd (as of at least 1.5.2) uses this |
161 | | pcmk_rc_ok = 0 |
162 | | |
163 | | // Positive values reserved for system error numbers |
164 | | }; |
165 | | |
166 | | |
167 | | /*! |
168 | | * \brief Exit status codes for resource agents |
169 | | * |
170 | | * The OCF Resource Agent API standard enumerates the possible exit status codes |
171 | | * that agents should return. Besides being used with OCF agents, these values |
172 | | * are also used by the executor as a universal status for all agent standards; |
173 | | * actual results are mapped to these before returning them to clients. |
174 | | */ |
175 | | enum ocf_exitcode { |
176 | | PCMK_OCF_OK = 0, //!< Success |
177 | | |
178 | | // NOTE: booth (as of at least 1.1) uses this value |
179 | | PCMK_OCF_UNKNOWN_ERROR = 1, //!< Unspecified error |
180 | | |
181 | | PCMK_OCF_INVALID_PARAM = 2, //!< Parameter invalid (in local context) |
182 | | PCMK_OCF_UNIMPLEMENT_FEATURE = 3, //!< Requested action not implemented |
183 | | PCMK_OCF_INSUFFICIENT_PRIV = 4, //!< Insufficient privileges |
184 | | PCMK_OCF_NOT_INSTALLED = 5, //!< Dependencies not available locally |
185 | | PCMK_OCF_NOT_CONFIGURED = 6, //!< Parameter invalid (inherently) |
186 | | |
187 | | // NOTE: booth (as of at least 1.1) uses this value |
188 | | PCMK_OCF_NOT_RUNNING = 7, //!< Service safely stopped |
189 | | |
190 | | PCMK_OCF_RUNNING_PROMOTED = 8, //!< Service active and promoted |
191 | | PCMK_OCF_FAILED_PROMOTED = 9, //!< Service failed and possibly in promoted role |
192 | | PCMK_OCF_DEGRADED = 190, //!< Service active but more likely to fail soon |
193 | | PCMK_OCF_DEGRADED_PROMOTED = 191, //!< Service promoted but more likely to fail soon |
194 | | |
195 | | /* These two are Pacemaker extensions, not in the OCF standard. The |
196 | | * controller records PCMK_OCF_UNKNOWN for pending actions. |
197 | | * PCMK_OCF_CONNECTION_DIED is used only with older DCs that don't support |
198 | | * PCMK_EXEC_NOT_CONNECTED. |
199 | | */ |
200 | | PCMK_OCF_CONNECTION_DIED = 189, //!< \deprecated See PCMK_EXEC_NOT_CONNECTED |
201 | | PCMK_OCF_UNKNOWN = 193, //!< Action is pending |
202 | | }; |
203 | | |
204 | | // NOTE: sbd (as of at least 1.5.2) uses this |
205 | | /*! |
206 | | * \brief Exit status codes for tools and daemons |
207 | | * |
208 | | * We want well-specified (i.e. OS-invariant) exit status codes for our daemons |
209 | | * and applications so they can be relied on by callers. (Function return codes |
210 | | * and errno's do not make good exit statuses.) |
211 | | * |
212 | | * The only hard rule is that exit statuses must be between 0 and 255; all else |
213 | | * is convention. Universally, 0 is success, and 1 is generic error (excluding |
214 | | * OSes we don't support -- for example, OpenVMS considers 1 success!). |
215 | | * |
216 | | * For init scripts, the LSB gives meaning to 0-7, and sets aside 150-199 for |
217 | | * application use. OCF adds 8-9 and 190-191. |
218 | | * |
219 | | * sysexits.h was an attempt to give additional meanings, but never really |
220 | | * caught on. It uses 0 and 64-78. |
221 | | * |
222 | | * Bash reserves 2 ("incorrect builtin usage") and 126-255 (126 is "command |
223 | | * found but not executable", 127 is "command not found", 128 + n is |
224 | | * "interrupted by signal n"). |
225 | | * |
226 | | * tldp.org recommends 64-113 for application use. |
227 | | * |
228 | | * We try to overlap with the above conventions when practical. |
229 | | * |
230 | | * NOTE: When new exit codes are added here, remember to also update |
231 | | * python/pacemaker/exitstatus.py. |
232 | | */ |
233 | | typedef enum crm_exit_e { |
234 | | // Common convention |
235 | | CRM_EX_OK = 0, //!< Success |
236 | | CRM_EX_ERROR = 1, //!< Unspecified error |
237 | | |
238 | | // LSB + OCF |
239 | | CRM_EX_INVALID_PARAM = 2, //!< Parameter invalid (in local context) |
240 | | CRM_EX_UNIMPLEMENT_FEATURE = 3, //!< Requested action not implemented |
241 | | CRM_EX_INSUFFICIENT_PRIV = 4, //!< Insufficient privileges |
242 | | CRM_EX_NOT_INSTALLED = 5, //!< Dependencies not available locally |
243 | | CRM_EX_NOT_CONFIGURED = 6, //!< Parameter invalid (inherently) |
244 | | CRM_EX_NOT_RUNNING = 7, //!< Service safely stopped |
245 | | CRM_EX_PROMOTED = 8, //!< Service active and promoted |
246 | | CRM_EX_FAILED_PROMOTED = 9, //!< Service failed and possibly promoted |
247 | | |
248 | | // sysexits.h |
249 | | CRM_EX_USAGE = 64, //!< Command line usage error |
250 | | CRM_EX_DATAERR = 65, //!< User-supplied data incorrect |
251 | | CRM_EX_NOINPUT = 66, //!< Input file not available |
252 | | CRM_EX_NOUSER = 67, //!< User does not exist |
253 | | CRM_EX_NOHOST = 68, //!< Host unknown |
254 | | CRM_EX_UNAVAILABLE = 69, //!< Needed service unavailable |
255 | | CRM_EX_SOFTWARE = 70, //!< Internal software bug |
256 | | CRM_EX_OSERR = 71, //!< External (OS/environmental) problem |
257 | | CRM_EX_OSFILE = 72, //!< System file not usable |
258 | | CRM_EX_CANTCREAT = 73, //!< File couldn't be created |
259 | | CRM_EX_IOERR = 74, //!< File I/O error |
260 | | CRM_EX_TEMPFAIL = 75, //!< Try again |
261 | | CRM_EX_PROTOCOL = 76, //!< Protocol violated |
262 | | CRM_EX_NOPERM = 77, //!< Non-file permission issue |
263 | | CRM_EX_CONFIG = 78, //!< Misconfiguration |
264 | | |
265 | | // Custom |
266 | | CRM_EX_FATAL = 100, //!< Do not respawn |
267 | | CRM_EX_PANIC = 101, //!< Panic the local host |
268 | | CRM_EX_DISCONNECT = 102, //!< Lost connection to something |
269 | | CRM_EX_OLD = 103, //!< Update older than existing config |
270 | | CRM_EX_DIGEST = 104, //!< Digest comparison failed |
271 | | CRM_EX_NOSUCH = 105, //!< Requested item does not exist |
272 | | CRM_EX_QUORUM = 106, //!< Local partition does not have quorum |
273 | | CRM_EX_UNSAFE = 107, //!< Requires --force or new conditions |
274 | | CRM_EX_EXISTS = 108, //!< Requested item already exists |
275 | | CRM_EX_MULTIPLE = 109, //!< Requested item has multiple matches |
276 | | CRM_EX_EXPIRED = 110, //!< Requested item has expired |
277 | | CRM_EX_NOT_YET_IN_EFFECT = 111, //!< Requested item is not in effect |
278 | | CRM_EX_INDETERMINATE = 112, //!< Could not determine status |
279 | | CRM_EX_UNSATISFIED = 113, //!< Requested item does not satisfy constraints |
280 | | CRM_EX_NO_DC = 114, //!< DC is not yet elected, e.g. right after cluster restart |
281 | | |
282 | | // Other |
283 | | CRM_EX_TIMEOUT = 124, //!< Convention from timeout(1) |
284 | | |
285 | | /* Anything above 128 overlaps with some shells' use of these values for |
286 | | * "interrupted by signal N", and so may be unreliable when detected by |
287 | | * shell scripts. |
288 | | */ |
289 | | |
290 | | // OCF Resource Agent API 1.1 |
291 | | CRM_EX_DEGRADED = 190, //!< Service active but more likely to fail soon |
292 | | CRM_EX_DEGRADED_PROMOTED = 191, //!< Service promoted but more likely to fail soon |
293 | | |
294 | | /* Custom |
295 | | * |
296 | | * This can be used to initialize exit status variables or to indicate that |
297 | | * a command is pending (which is what the controller uses it for). |
298 | | */ |
299 | | CRM_EX_NONE = 193, //!< No exit status available |
300 | | |
301 | | CRM_EX_MAX = 255, //!< Ensure crm_exit_t can hold this |
302 | | } crm_exit_t; |
303 | | |
304 | | /*! |
305 | | * \brief Execution status |
306 | | * |
307 | | * These codes are used to specify the result of the attempt to execute an |
308 | | * agent, rather than the agent's result itself. |
309 | | */ |
310 | | enum pcmk_exec_status { |
311 | | PCMK_EXEC_UNKNOWN = -2, //!< Used only to initialize variables |
312 | | PCMK_EXEC_PENDING = -1, //!< Action is in progress |
313 | | PCMK_EXEC_DONE, //!< Action completed, result is known |
314 | | PCMK_EXEC_CANCELLED, //!< Action was cancelled |
315 | | PCMK_EXEC_TIMEOUT, //!< Action did not complete in time |
316 | | PCMK_EXEC_NOT_SUPPORTED, //!< Agent does not implement requested action |
317 | | PCMK_EXEC_ERROR, //!< Execution failed, may be retried |
318 | | PCMK_EXEC_ERROR_HARD, //!< Execution failed, do not retry on node |
319 | | PCMK_EXEC_ERROR_FATAL, //!< Execution failed, do not retry anywhere |
320 | | PCMK_EXEC_NOT_INSTALLED, //!< Agent or dependency not available locally |
321 | | PCMK_EXEC_NOT_CONNECTED, //!< No connection to executor |
322 | | PCMK_EXEC_INVALID, //!< Action cannot be attempted (e.g. shutdown) |
323 | | PCMK_EXEC_NO_FENCE_DEVICE, //!< No fence device is configured for target |
324 | | PCMK_EXEC_NO_SECRETS, //!< Necessary CIB secrets are unavailable |
325 | | |
326 | | // Add new values above here then update this one below |
327 | | PCMK_EXEC_MAX = PCMK_EXEC_NO_SECRETS, //!< Maximum value for this enum |
328 | | }; |
329 | | |
330 | | /*! |
331 | | * \brief Types of Pacemaker result codes |
332 | | * |
333 | | * A particular integer can have different meanings within different Pacemaker |
334 | | * result code families. It may be interpretable within zero, one, or multiple |
335 | | * families. |
336 | | * |
337 | | * These values are useful for specifying how an integer result code should be |
338 | | * interpreted in situations involving a generic integer value. For example, a |
339 | | * function that can process multiple types of result codes might accept an |
340 | | * arbitrary integer argument along with a \p pcmk_result_type argument that |
341 | | * specifies how to interpret the integer. |
342 | | */ |
343 | | enum pcmk_result_type { |
344 | | pcmk_result_legacy = 0, //!< Legacy API function return code |
345 | | pcmk_result_rc = 1, //!< Standard Pacemaker return code |
346 | | pcmk_result_exitcode = 2, //!< Exit status code |
347 | | pcmk_result_exec_status = 3, //!< Execution status |
348 | | }; |
349 | | |
350 | | int pcmk_result_get_strings(int code, enum pcmk_result_type type, |
351 | | const char **name, const char **desc); |
352 | | const char *pcmk_rc_name(int rc); |
353 | | |
354 | | // NOTE: sbd (as of at least 1.5.2) uses this |
355 | | const char *pcmk_rc_str(int rc); |
356 | | |
357 | | crm_exit_t pcmk_rc2exitc(int rc); |
358 | | enum ocf_exitcode pcmk_rc2ocf(int rc); |
359 | | int pcmk_rc2legacy(int rc); |
360 | | int pcmk_legacy2rc(int legacy_rc); |
361 | | |
362 | | // NOTE: sbd (as of at least 1.5.2) uses this |
363 | | const char *pcmk_strerror(int rc); |
364 | | |
365 | | const char *pcmk_errorname(int rc); |
366 | | const char *crm_exit_name(crm_exit_t exit_code); |
367 | | |
368 | | // NOTE: sbd (as of at least 1.5.2) uses this |
369 | | const char *crm_exit_str(crm_exit_t exit_code); |
370 | | |
371 | | _Noreturn crm_exit_t crm_exit(crm_exit_t rc); |
372 | | |
373 | | /* coverity[+kill] */ |
374 | | void crm_abort(const char *file, const char *function, int line, |
375 | | const char *condition, gboolean do_core, gboolean do_fork); |
376 | | |
377 | | static inline const char * |
378 | | pcmk_exec_status_str(enum pcmk_exec_status status) |
379 | 0 | { |
380 | 0 | switch (status) { |
381 | 0 | case PCMK_EXEC_PENDING: return "Pending"; |
382 | 0 | case PCMK_EXEC_DONE: return "Done"; |
383 | 0 | case PCMK_EXEC_CANCELLED: return "Cancelled"; |
384 | 0 | case PCMK_EXEC_TIMEOUT: return "Timed out"; |
385 | 0 | case PCMK_EXEC_NOT_SUPPORTED: return "Unsupported"; |
386 | 0 | case PCMK_EXEC_ERROR: return "Error"; |
387 | 0 | case PCMK_EXEC_ERROR_HARD: return "Hard error"; |
388 | 0 | case PCMK_EXEC_ERROR_FATAL: return "Fatal error"; |
389 | 0 | case PCMK_EXEC_NOT_INSTALLED: return "Not installed"; |
390 | 0 | case PCMK_EXEC_NOT_CONNECTED: return "Internal communication failure"; |
391 | 0 | case PCMK_EXEC_INVALID: return "Cannot execute now"; |
392 | 0 | case PCMK_EXEC_NO_FENCE_DEVICE: return "No fence device"; |
393 | 0 | case PCMK_EXEC_NO_SECRETS: return "CIB secrets unavailable"; |
394 | 0 | default: return "Unrecognized status (bug?)"; |
395 | 0 | } |
396 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk_exec_status_str Unexecuted instantiation: results.c:pcmk_exec_status_str Unexecuted instantiation: scores.c:pcmk_exec_status_str Unexecuted instantiation: strings.c:pcmk_exec_status_str Unexecuted instantiation: utils.c:pcmk_exec_status_str Unexecuted instantiation: iso8601.c:pcmk_exec_status_str Unexecuted instantiation: logging.c:pcmk_exec_status_str Unexecuted instantiation: mainloop.c:pcmk_exec_status_str Unexecuted instantiation: options.c:pcmk_exec_status_str Unexecuted instantiation: output.c:pcmk_exec_status_str Unexecuted instantiation: output_log.c:pcmk_exec_status_str Unexecuted instantiation: output_text.c:pcmk_exec_status_str Unexecuted instantiation: output_xml.c:pcmk_exec_status_str Unexecuted instantiation: patchset_display.c:pcmk_exec_status_str Unexecuted instantiation: schemas.c:pcmk_exec_status_str Unexecuted instantiation: xml.c:pcmk_exec_status_str Unexecuted instantiation: xml_attr.c:pcmk_exec_status_str Unexecuted instantiation: xml_comment.c:pcmk_exec_status_str Unexecuted instantiation: xml_display.c:pcmk_exec_status_str Unexecuted instantiation: xml_element.c:pcmk_exec_status_str Unexecuted instantiation: xml_idref.c:pcmk_exec_status_str Unexecuted instantiation: xml_io.c:pcmk_exec_status_str Unexecuted instantiation: xpath.c:pcmk_exec_status_str Unexecuted instantiation: acl.c:pcmk_exec_status_str Unexecuted instantiation: actions.c:pcmk_exec_status_str Unexecuted instantiation: agents.c:pcmk_exec_status_str Unexecuted instantiation: cmdline.c:pcmk_exec_status_str Unexecuted instantiation: digest.c:pcmk_exec_status_str Unexecuted instantiation: health.c:pcmk_exec_status_str Unexecuted instantiation: io.c:pcmk_exec_status_str Unexecuted instantiation: ipc_client.c:pcmk_exec_status_str Unexecuted instantiation: ipc_common.c:pcmk_exec_status_str Unexecuted instantiation: ipc_controld.c:pcmk_exec_status_str Unexecuted instantiation: ipc_pacemakerd.c:pcmk_exec_status_str Unexecuted instantiation: ipc_schedulerd.c:pcmk_exec_status_str Unexecuted instantiation: ipc_server.c:pcmk_exec_status_str Unexecuted instantiation: messages.c:pcmk_exec_status_str Unexecuted instantiation: nodes.c:pcmk_exec_status_str Unexecuted instantiation: nvpair.c:pcmk_exec_status_str Unexecuted instantiation: options_display.c:pcmk_exec_status_str Unexecuted instantiation: patchset.c:pcmk_exec_status_str Unexecuted instantiation: procfs.c:pcmk_exec_status_str Unexecuted instantiation: rules.c:pcmk_exec_status_str Unexecuted instantiation: servers.c:pcmk_exec_status_str Unexecuted instantiation: cib.c:pcmk_exec_status_str Unexecuted instantiation: ipc_attrd.c:pcmk_exec_status_str Unexecuted instantiation: pid.c:pcmk_exec_status_str Unexecuted instantiation: attrs.c:pcmk_exec_status_str Unexecuted instantiation: strings_fuzzer.c:pcmk_exec_status_str Unexecuted instantiation: cib_file_fuzzer.c:pcmk_exec_status_str Unexecuted instantiation: cib_client.c:pcmk_exec_status_str Unexecuted instantiation: cib_file.c:pcmk_exec_status_str Unexecuted instantiation: cib_native.c:pcmk_exec_status_str Unexecuted instantiation: cib_ops.c:pcmk_exec_status_str Unexecuted instantiation: cib_remote.c:pcmk_exec_status_str Unexecuted instantiation: cib_utils.c:pcmk_exec_status_str Unexecuted instantiation: remote.c:pcmk_exec_status_str Unexecuted instantiation: tls.c:pcmk_exec_status_str Unexecuted instantiation: watchdog.c:pcmk_exec_status_str Unexecuted instantiation: iso8601_fuzzer.c:pcmk_exec_status_str |
397 | | |
398 | | #ifdef __cplusplus |
399 | | } |
400 | | #endif |
401 | | |
402 | | #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1) |
403 | | #include <crm/common/results_compat.h> |
404 | | #endif |
405 | | |
406 | | #endif |