1 /*
2 * Copyright 2004-2024 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_CLUSTER__H
11 #define PCMK__CRM_CLUSTER__H
12
13 #include <glib.h> // gpointer
14
15 #if SUPPORT_COROSYNC
16 #include <corosync/cpg.h> // cpg_callbacks_t, etc.
17 #endif
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 //! \internal Do not use
24 typedef struct pcmk__cluster_private pcmk__cluster_private_t;
25
26 // Implementation of pcmk_cluster_t
27 // @COMPAT Make contents internal when we can break API backward compatibility
28 //!@{
29 //! \deprecated Do not use (public access will be removed in a future release)
30 struct pcmk__cluster {
31 /* @COMPAT Once all members are moved to pcmk__cluster_private_t, we can
32 * make that the pcmk_cluster_t implementation and drop this struct
33 * altogether, leaving pcmk_cluster_t as an opaque public type.
34 */
35 //! \internal Do not use
36 pcmk__cluster_private_t *priv;
37
38 // NOTE: sbd (as of at least 1.5.2) uses this
39 //! \deprecated Call pcmk_cluster_set_destroy_fn() to set this
40 void (*destroy) (gpointer);
41
42 #if SUPPORT_COROSYNC
43 // NOTE: sbd (as of at least 1.5.2) uses this
44 /*!
45 * \deprecated Call pcmk_cpg_set_deliver_fn() and pcmk_cpg_set_confchg_fn()
46 * to set these
47 */
48 cpg_callbacks_t cpg;
49 #endif // SUPPORT_COROSYNC
50 };
51 //!@}
52
53 //! Connection to a cluster layer
54 typedef struct pcmk__cluster pcmk_cluster_t;
55
56 int pcmk_cluster_connect(pcmk_cluster_t *cluster);
57 int pcmk_cluster_disconnect(pcmk_cluster_t *cluster);
58
59 pcmk_cluster_t *pcmk_cluster_new(void);
60 void pcmk_cluster_free(pcmk_cluster_t *cluster);
61
62 int pcmk_cluster_set_destroy_fn(pcmk_cluster_t *cluster, void (*fn)(gpointer));
63 #if SUPPORT_COROSYNC
64 int pcmk_cpg_set_deliver_fn(pcmk_cluster_t *cluster, cpg_deliver_fn_t fn);
65 int pcmk_cpg_set_confchg_fn(pcmk_cluster_t *cluster, cpg_confchg_fn_t fn);
66 #endif // SUPPORT_COROSYNC
67
68 /*!
69 * \enum pcmk_cluster_layer
70 * \brief Types of cluster layer
71 */
72 enum pcmk_cluster_layer {
73 pcmk_cluster_layer_unknown = 1, //!< Unknown cluster layer
74 pcmk_cluster_layer_invalid = 2, //!< Invalid cluster layer
75 pcmk_cluster_layer_corosync = 32, //!< Corosync Cluster Engine
76 };
77
78 enum pcmk_cluster_layer pcmk_get_cluster_layer(void);
79 const char *pcmk_cluster_layer_text(enum pcmk_cluster_layer layer);
80
81 #ifdef __cplusplus
82 }
83 #endif
84
85 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
86 #include <crm/cluster/compat.h>
87 #endif
88
89 #endif // PCMK__CRM_CLUSTER__H