1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef DRBD_H
27#define DRBD_H
28#include <linux/connector.h>
29#include <asm/types.h>
30
31#ifdef __KERNEL__
32#include <linux/types.h>
33#include <asm/byteorder.h>
34#else
35#include <sys/types.h>
36#include <sys/wait.h>
37#include <limits.h>
38
39
40
41
42
43
44#if __BYTE_ORDER == __LITTLE_ENDIAN
45#define __LITTLE_ENDIAN_BITFIELD
46#elif __BYTE_ORDER == __BIG_ENDIAN
47#define __BIG_ENDIAN_BITFIELD
48#else
49# error "sorry, weird endianness on this box"
50#endif
51
52#endif
53
54
55extern const char *drbd_buildtag(void);
56#define REL_VERSION "8.3.8"
57#define API_VERSION 88
58#define PRO_VERSION_MIN 86
59#define PRO_VERSION_MAX 94
60
61
62enum drbd_io_error_p {
63 EP_PASS_ON,
64 EP_CALL_HELPER,
65 EP_DETACH
66};
67
68enum drbd_fencing_p {
69 FP_DONT_CARE,
70 FP_RESOURCE,
71 FP_STONITH
72};
73
74enum drbd_disconnect_p {
75 DP_RECONNECT,
76 DP_DROP_NET_CONF,
77 DP_FREEZE_IO
78};
79
80enum drbd_after_sb_p {
81 ASB_DISCONNECT,
82 ASB_DISCARD_YOUNGER_PRI,
83 ASB_DISCARD_OLDER_PRI,
84 ASB_DISCARD_ZERO_CHG,
85 ASB_DISCARD_LEAST_CHG,
86 ASB_DISCARD_LOCAL,
87 ASB_DISCARD_REMOTE,
88 ASB_CONSENSUS,
89 ASB_DISCARD_SECONDARY,
90 ASB_CALL_HELPER,
91 ASB_VIOLENTLY
92};
93
94
95enum drbd_ret_codes {
96 ERR_CODE_BASE = 100,
97 NO_ERROR = 101,
98 ERR_LOCAL_ADDR = 102,
99 ERR_PEER_ADDR = 103,
100 ERR_OPEN_DISK = 104,
101 ERR_OPEN_MD_DISK = 105,
102 ERR_DISK_NOT_BDEV = 107,
103 ERR_MD_NOT_BDEV = 108,
104 ERR_DISK_TO_SMALL = 111,
105 ERR_MD_DISK_TO_SMALL = 112,
106 ERR_BDCLAIM_DISK = 114,
107 ERR_BDCLAIM_MD_DISK = 115,
108 ERR_MD_IDX_INVALID = 116,
109 ERR_IO_MD_DISK = 118,
110 ERR_MD_INVALID = 119,
111 ERR_AUTH_ALG = 120,
112 ERR_AUTH_ALG_ND = 121,
113 ERR_NOMEM = 122,
114 ERR_DISCARD = 123,
115 ERR_DISK_CONFIGURED = 124,
116 ERR_NET_CONFIGURED = 125,
117 ERR_MANDATORY_TAG = 126,
118 ERR_MINOR_INVALID = 127,
119 ERR_INTR = 129,
120 ERR_RESIZE_RESYNC = 130,
121 ERR_NO_PRIMARY = 131,
122 ERR_SYNC_AFTER = 132,
123 ERR_SYNC_AFTER_CYCLE = 133,
124 ERR_PAUSE_IS_SET = 134,
125 ERR_PAUSE_IS_CLEAR = 135,
126 ERR_PACKET_NR = 137,
127 ERR_NO_DISK = 138,
128 ERR_NOT_PROTO_C = 139,
129 ERR_NOMEM_BITMAP = 140,
130 ERR_INTEGRITY_ALG = 141,
131 ERR_INTEGRITY_ALG_ND = 142,
132 ERR_CPU_MASK_PARSE = 143,
133 ERR_CSUMS_ALG = 144,
134 ERR_CSUMS_ALG_ND = 145,
135 ERR_VERIFY_ALG = 146,
136 ERR_VERIFY_ALG_ND = 147,
137 ERR_CSUMS_RESYNC_RUNNING= 148,
138 ERR_VERIFY_RUNNING = 149,
139 ERR_DATA_NOT_CURRENT = 150,
140 ERR_CONNECTED = 151,
141 ERR_PERM = 152,
142 ERR_NEED_APV_93 = 153,
143
144
145 AFTER_LAST_ERR_CODE
146};
147
148#define DRBD_PROT_A 1
149#define DRBD_PROT_B 2
150#define DRBD_PROT_C 3
151
152enum drbd_role {
153 R_UNKNOWN = 0,
154 R_PRIMARY = 1,
155 R_SECONDARY = 2,
156 R_MASK = 3,
157};
158
159
160
161
162
163
164enum drbd_conns {
165 C_STANDALONE,
166 C_DISCONNECTING,
167 C_UNCONNECTED,
168
169
170
171
172
173 C_TIMEOUT,
174 C_BROKEN_PIPE,
175 C_NETWORK_FAILURE,
176 C_PROTOCOL_ERROR,
177 C_TEAR_DOWN,
178
179 C_WF_CONNECTION,
180 C_WF_REPORT_PARAMS,
181 C_CONNECTED,
182 C_STARTING_SYNC_S,
183 C_STARTING_SYNC_T,
184 C_WF_BITMAP_S,
185 C_WF_BITMAP_T,
186 C_WF_SYNC_UUID,
187
188
189
190 C_SYNC_SOURCE,
191 C_SYNC_TARGET,
192 C_VERIFY_S,
193 C_VERIFY_T,
194 C_PAUSED_SYNC_S,
195 C_PAUSED_SYNC_T,
196 C_MASK = 31
197};
198
199enum drbd_disk_state {
200 D_DISKLESS,
201 D_ATTACHING,
202 D_FAILED,
203
204 D_NEGOTIATING,
205 D_INCONSISTENT,
206 D_OUTDATED,
207 D_UNKNOWN,
208 D_CONSISTENT,
209 D_UP_TO_DATE,
210 D_MASK = 15
211};
212
213union drbd_state {
214
215
216
217
218
219
220
221
222 struct {
223#if defined(__LITTLE_ENDIAN_BITFIELD)
224 unsigned role:2 ;
225 unsigned peer:2 ;
226 unsigned conn:5 ;
227 unsigned disk:4 ;
228 unsigned pdsk:4 ;
229 unsigned susp:1 ;
230 unsigned aftr_isp:1 ;
231 unsigned peer_isp:1 ;
232 unsigned user_isp:1 ;
233 unsigned _pad:11;
234#elif defined(__BIG_ENDIAN_BITFIELD)
235 unsigned _pad:11;
236 unsigned user_isp:1 ;
237 unsigned peer_isp:1 ;
238 unsigned aftr_isp:1 ;
239 unsigned susp:1 ;
240 unsigned pdsk:4 ;
241 unsigned disk:4 ;
242 unsigned conn:5 ;
243 unsigned peer:2 ;
244 unsigned role:2 ;
245#else
246# error "this endianess is not supported"
247#endif
248 };
249 unsigned int i;
250};
251
252enum drbd_state_ret_codes {
253 SS_CW_NO_NEED = 4,
254 SS_CW_SUCCESS = 3,
255 SS_NOTHING_TO_DO = 2,
256 SS_SUCCESS = 1,
257 SS_UNKNOWN_ERROR = 0,
258 SS_TWO_PRIMARIES = -1,
259 SS_NO_UP_TO_DATE_DISK = -2,
260 SS_NO_LOCAL_DISK = -4,
261 SS_NO_REMOTE_DISK = -5,
262 SS_CONNECTED_OUTDATES = -6,
263 SS_PRIMARY_NOP = -7,
264 SS_RESYNC_RUNNING = -8,
265 SS_ALREADY_STANDALONE = -9,
266 SS_CW_FAILED_BY_PEER = -10,
267 SS_IS_DISKLESS = -11,
268 SS_DEVICE_IN_USE = -12,
269 SS_NO_NET_CONFIG = -13,
270 SS_NO_VERIFY_ALG = -14,
271 SS_NEED_CONNECTION = -15,
272 SS_LOWER_THAN_OUTDATED = -16,
273 SS_NOT_SUPPORTED = -17,
274 SS_IN_TRANSIENT_STATE = -18,
275 SS_CONCURRENT_ST_CHG = -19,
276 SS_AFTER_LAST_ERROR = -20,
277};
278
279
280extern const char *drbd_conn_str(enum drbd_conns);
281extern const char *drbd_role_str(enum drbd_role);
282extern const char *drbd_disk_str(enum drbd_disk_state);
283extern const char *drbd_set_st_err_str(enum drbd_state_ret_codes);
284
285#define SHARED_SECRET_MAX 64
286
287#define MDF_CONSISTENT (1 << 0)
288#define MDF_PRIMARY_IND (1 << 1)
289#define MDF_CONNECTED_IND (1 << 2)
290#define MDF_FULL_SYNC (1 << 3)
291#define MDF_WAS_UP_TO_DATE (1 << 4)
292#define MDF_PEER_OUT_DATED (1 << 5)
293#define MDF_CRASHED_PRIMARY (1 << 6)
294
295enum drbd_uuid_index {
296 UI_CURRENT,
297 UI_BITMAP,
298 UI_HISTORY_START,
299 UI_HISTORY_END,
300 UI_SIZE,
301 UI_FLAGS,
302 UI_EXTENDED_SIZE
303};
304
305enum drbd_timeout_flag {
306 UT_DEFAULT = 0,
307 UT_DEGRADED = 1,
308 UT_PEER_OUTDATED = 2,
309};
310
311#define UUID_JUST_CREATED ((__u64)4)
312
313#define DRBD_MAGIC 0x83740267
314#define BE_DRBD_MAGIC __constant_cpu_to_be32(DRBD_MAGIC)
315
316
317#define DRBD_MD_INDEX_INTERNAL -1
318#define DRBD_MD_INDEX_FLEX_EXT -2
319#define DRBD_MD_INDEX_FLEX_INT -3
320
321
322
323#define DRBD_NL_CREATE_DEVICE 0x01
324#define DRBD_NL_SET_DEFAULTS 0x02
325
326
327
328#define CN_IDX_STEP 6977
329
330struct drbd_nl_cfg_req {
331 int packet_type;
332 unsigned int drbd_minor;
333 int flags;
334 unsigned short tag_list[];
335};
336
337struct drbd_nl_cfg_reply {
338 int packet_type;
339 unsigned int minor;
340 int ret_code;
341 unsigned short tag_list[];
342};
343
344#endif
345