1
2
3
4
5
6
7
8
9
10 #ifndef CIB_INTERNAL__H
11 # define CIB_INTERNAL__H
12 # include <crm/cib.h>
13 # include <crm/common/ipc_internal.h>
14
15 # define CIB_OP_SLAVE "cib_slave"
16 # define CIB_OP_SLAVEALL "cib_slave_all"
17 # define CIB_OP_MASTER "cib_master"
18 # define CIB_OP_SYNC "cib_sync"
19 # define CIB_OP_SYNC_ONE "cib_sync_one"
20 # define CIB_OP_ISMASTER "cib_ismaster"
21 # define CIB_OP_BUMP "cib_bump"
22 # define CIB_OP_QUERY "cib_query"
23 # define CIB_OP_CREATE "cib_create"
24 # define CIB_OP_MODIFY "cib_modify"
25 # define CIB_OP_DELETE "cib_delete"
26 # define CIB_OP_ERASE "cib_erase"
27 # define CIB_OP_REPLACE "cib_replace"
28 # define CIB_OP_APPLY_DIFF "cib_apply_diff"
29 # define CIB_OP_UPGRADE "cib_upgrade"
30 # define CIB_OP_DELETE_ALT "cib_delete_alt"
31
32 # define F_CIB_CLIENTID "cib_clientid"
33 # define F_CIB_CALLOPTS "cib_callopt"
34 # define F_CIB_CALLID "cib_callid"
35 # define F_CIB_CALLDATA "cib_calldata"
36 # define F_CIB_OPERATION "cib_op"
37 # define F_CIB_ISREPLY "cib_isreplyto"
38 # define F_CIB_SECTION "cib_section"
39 # define F_CIB_HOST "cib_host"
40 # define F_CIB_RC "cib_rc"
41 # define F_CIB_UPGRADE_RC "cib_upgrade_rc"
42 # define F_CIB_DELEGATED "cib_delegated_from"
43 # define F_CIB_OBJID "cib_object"
44 # define F_CIB_OBJTYPE "cib_object_type"
45 # define F_CIB_EXISTING "cib_existing_object"
46 # define F_CIB_SEENCOUNT "cib_seen"
47 # define F_CIB_TIMEOUT "cib_timeout"
48 # define F_CIB_UPDATE "cib_update"
49 # define F_CIB_CALLBACK_TOKEN "cib_async_id"
50 # define F_CIB_GLOBAL_UPDATE "cib_update"
51 # define F_CIB_UPDATE_RESULT "cib_update_result"
52 # define F_CIB_CLIENTNAME "cib_clientname"
53 # define F_CIB_NOTIFY_TYPE "cib_notify_type"
54 # define F_CIB_NOTIFY_ACTIVATE "cib_notify_activate"
55 # define F_CIB_UPDATE_DIFF "cib_update_diff"
56 # define F_CIB_USER "cib_user"
57 # define F_CIB_LOCAL_NOTIFY_ID "cib_local_notify_id"
58 # define F_CIB_PING_ID "cib_ping_id"
59 # define F_CIB_SCHEMA_MAX "cib_schema_max"
60
61 # define T_CIB "cib"
62 # define T_CIB_NOTIFY "cib_notify"
63
64 # define T_CIB_PRE_NOTIFY "cib_pre_notify"
65 # define T_CIB_POST_NOTIFY "cib_post_notify"
66 # define T_CIB_UPDATE_CONFIRM "cib_update_confirmation"
67 # define T_CIB_REPLACE_NOTIFY "cib_refresh_notify"
68
69 gboolean cib_diff_version_details(xmlNode * diff, int *admin_epoch, int *epoch, int *updates,
70 int *_admin_epoch, int *_epoch, int *_updates);
71
72 gboolean cib_read_config(GHashTable * options, xmlNode * current_cib);
73 void verify_cib_options(GHashTable * options);
74 gboolean cib_internal_config_changed(xmlNode * diff);
75
76 extern GHashTable *cib_op_callback_table;
77 typedef struct cib_notify_client_s {
78 const char *event;
79 const char *obj_id;
80 const char *obj_type;
81 void (*callback) (const char *event, xmlNode * msg);
82
83 } cib_notify_client_t;
84
85 typedef struct cib_callback_client_s {
86 void (*callback) (xmlNode *, int, int, xmlNode *, void *);
87 const char *id;
88 void *user_data;
89 gboolean only_success;
90 struct timer_rec_s *timer;
91 void (*free_func)(void *);
92 } cib_callback_client_t;
93
94 struct timer_rec_s {
95 int call_id;
96 int timeout;
97 guint ref;
98 cib_t *cib;
99 };
100
101 #define cib__set_call_options(cib_call_opts, call_for, flags_to_set) do { \
102 cib_call_opts = pcmk__set_flags_as(__func__, __LINE__, \
103 LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
104 (flags_to_set), #flags_to_set); \
105 } while (0)
106
107 #define cib__clear_call_options(cib_call_opts, call_for, flags_to_clear) do { \
108 cib_call_opts = pcmk__clear_flags_as(__func__, __LINE__, \
109 LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
110 (flags_to_clear), #flags_to_clear); \
111 } while (0)
112
113 typedef int (*cib_op_t) (const char *, int, const char *, xmlNode *,
114 xmlNode *, xmlNode *, xmlNode **, xmlNode **);
115
116 cib_t *cib_new_variant(void);
117
118 int cib_perform_op(const char *op, int call_options, cib_op_t * fn, gboolean is_query,
119 const char *section, xmlNode * req, xmlNode * input,
120 gboolean manage_counters, gboolean * config_changed,
121 xmlNode * current_cib, xmlNode ** result_cib, xmlNode ** diff,
122 xmlNode ** output);
123
124 xmlNode *cib_create_op(int call_id, const char *token, const char *op, const char *host,
125 const char *section, xmlNode * data, int call_options,
126 const char *user_name);
127
128 void cib_native_callback(cib_t * cib, xmlNode * msg, int call_id, int rc);
129 void cib_native_notify(gpointer data, gpointer user_data);
130 int cib_native_register_notification(cib_t * cib, const char *callback, int enabled);
131 gboolean cib_client_register_callback(cib_t * cib, int call_id, int timeout, gboolean only_success,
132 void *user_data, const char *callback_name,
133 void (*callback) (xmlNode *, int, int, xmlNode *, void *));
134 gboolean cib_client_register_callback_full(cib_t *cib, int call_id,
135 int timeout, gboolean only_success,
136 void *user_data,
137 const char *callback_name,
138 void (*callback)(xmlNode *, int, int,
139 xmlNode *, void *),
140 void (*free_func)(void *));
141
142 int cib_process_query(const char *op, int options, const char *section, xmlNode * req,
143 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
144 xmlNode ** answer);
145
146 int cib_process_erase(const char *op, int options, const char *section, xmlNode * req,
147 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
148 xmlNode ** answer);
149
150 int cib_process_bump(const char *op, int options, const char *section, xmlNode * req,
151 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
152 xmlNode ** answer);
153
154 int cib_process_replace(const char *op, int options, const char *section, xmlNode * req,
155 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
156 xmlNode ** answer);
157
158 int cib_process_create(const char *op, int options, const char *section, xmlNode * req,
159 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
160 xmlNode ** answer);
161
162 int cib_process_modify(const char *op, int options, const char *section, xmlNode * req,
163 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
164 xmlNode ** answer);
165
166 int cib_process_delete(const char *op, int options, const char *section, xmlNode * req,
167 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
168 xmlNode ** answer);
169
170 int cib_process_diff(const char *op, int options, const char *section, xmlNode * req,
171 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
172 xmlNode ** answer);
173
174 int cib_process_upgrade(const char *op, int options, const char *section, xmlNode * req,
175 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
176 xmlNode ** answer);
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197 int cib_process_xpath(const char *op, int options, const char *section, xmlNode * req,
198 xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
199 xmlNode ** answer);
200
201 gboolean cib_config_changed(xmlNode * last, xmlNode * next, xmlNode ** diff);
202 gboolean update_results(xmlNode * failed, xmlNode * target, const char *operation, int return_code);
203 int cib_update_counter(xmlNode * xml_obj, const char *field, gboolean reset);
204
205 int cib_internal_op(cib_t * cib, const char *op, const char *host,
206 const char *section, xmlNode * data,
207 xmlNode ** output_data, int call_options, const char *user_name);
208
209
210 int cib_file_read_and_verify(const char *filename, const char *sigfile,
211 xmlNode **root);
212 int cib_file_write_with_digest(xmlNode *cib_root, const char *cib_dirname,
213 const char *cib_filename);
214
215 #endif