xref: /linux-6.15/include/linux/drbd.h (revision 20f2a34a)
1*c6ae4c04SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2b411b363SPhilipp Reisner /*
3b411b363SPhilipp Reisner   drbd.h
4b411b363SPhilipp Reisner   Kernel module for 2.6.x Kernels
5b411b363SPhilipp Reisner 
6b411b363SPhilipp Reisner   This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
7b411b363SPhilipp Reisner 
8b411b363SPhilipp Reisner   Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
9b411b363SPhilipp Reisner   Copyright (C) 2001-2008, Philipp Reisner <[email protected]>.
10b411b363SPhilipp Reisner   Copyright (C) 2001-2008, Lars Ellenberg <[email protected]>.
11b411b363SPhilipp Reisner 
12b411b363SPhilipp Reisner 
13b411b363SPhilipp Reisner */
14b411b363SPhilipp Reisner #ifndef DRBD_H
15b411b363SPhilipp Reisner #define DRBD_H
16b411b363SPhilipp Reisner #include <asm/types.h>
17b411b363SPhilipp Reisner 
18b411b363SPhilipp Reisner #ifdef __KERNEL__
19b411b363SPhilipp Reisner #include <linux/types.h>
20b411b363SPhilipp Reisner #include <asm/byteorder.h>
21b411b363SPhilipp Reisner #else
22b411b363SPhilipp Reisner #include <sys/types.h>
23b411b363SPhilipp Reisner #include <sys/wait.h>
24b411b363SPhilipp Reisner #include <limits.h>
25b411b363SPhilipp Reisner 
2625985edcSLucas De Marchi /* Although the Linux source code makes a difference between
27b411b363SPhilipp Reisner    generic endianness and the bitfields' endianness, there is no
2824c4830cSBart Van Assche    architecture as of Linux-2.6.24-rc4 where the bitfields' endianness
29b411b363SPhilipp Reisner    does not match the generic endianness. */
30b411b363SPhilipp Reisner 
31b411b363SPhilipp Reisner #if __BYTE_ORDER == __LITTLE_ENDIAN
32b411b363SPhilipp Reisner #define __LITTLE_ENDIAN_BITFIELD
33b411b363SPhilipp Reisner #elif __BYTE_ORDER == __BIG_ENDIAN
34b411b363SPhilipp Reisner #define __BIG_ENDIAN_BITFIELD
35b411b363SPhilipp Reisner #else
36b411b363SPhilipp Reisner # error "sorry, weird endianness on this box"
37b411b363SPhilipp Reisner #endif
38b411b363SPhilipp Reisner 
39b411b363SPhilipp Reisner #endif
40b411b363SPhilipp Reisner 
41b411b363SPhilipp Reisner enum drbd_io_error_p {
42b411b363SPhilipp Reisner 	EP_PASS_ON, /* FIXME should the better be named "Ignore"? */
43b411b363SPhilipp Reisner 	EP_CALL_HELPER,
44b411b363SPhilipp Reisner 	EP_DETACH
45b411b363SPhilipp Reisner };
46b411b363SPhilipp Reisner 
47b411b363SPhilipp Reisner enum drbd_fencing_p {
48cb703454SPhilipp Reisner 	FP_NOT_AVAIL = -1, /* Not a policy */
49cb703454SPhilipp Reisner 	FP_DONT_CARE = 0,
50b411b363SPhilipp Reisner 	FP_RESOURCE,
51b411b363SPhilipp Reisner 	FP_STONITH
52b411b363SPhilipp Reisner };
53b411b363SPhilipp Reisner 
54b411b363SPhilipp Reisner enum drbd_disconnect_p {
55b411b363SPhilipp Reisner 	DP_RECONNECT,
56b411b363SPhilipp Reisner 	DP_DROP_NET_CONF,
57b411b363SPhilipp Reisner 	DP_FREEZE_IO
58b411b363SPhilipp Reisner };
59b411b363SPhilipp Reisner 
60b411b363SPhilipp Reisner enum drbd_after_sb_p {
61b411b363SPhilipp Reisner 	ASB_DISCONNECT,
62b411b363SPhilipp Reisner 	ASB_DISCARD_YOUNGER_PRI,
63b411b363SPhilipp Reisner 	ASB_DISCARD_OLDER_PRI,
64b411b363SPhilipp Reisner 	ASB_DISCARD_ZERO_CHG,
65b411b363SPhilipp Reisner 	ASB_DISCARD_LEAST_CHG,
66b411b363SPhilipp Reisner 	ASB_DISCARD_LOCAL,
67b411b363SPhilipp Reisner 	ASB_DISCARD_REMOTE,
68b411b363SPhilipp Reisner 	ASB_CONSENSUS,
69b411b363SPhilipp Reisner 	ASB_DISCARD_SECONDARY,
70b411b363SPhilipp Reisner 	ASB_CALL_HELPER,
71b411b363SPhilipp Reisner 	ASB_VIOLENTLY
72b411b363SPhilipp Reisner };
73b411b363SPhilipp Reisner 
74265be2d0SPhilipp Reisner enum drbd_on_no_data {
75265be2d0SPhilipp Reisner 	OND_IO_ERROR,
76265be2d0SPhilipp Reisner 	OND_SUSPEND_IO
77265be2d0SPhilipp Reisner };
78265be2d0SPhilipp Reisner 
79422028b1SPhilipp Reisner enum drbd_on_congestion {
80422028b1SPhilipp Reisner 	OC_BLOCK,
81422028b1SPhilipp Reisner 	OC_PULL_AHEAD,
82422028b1SPhilipp Reisner 	OC_DISCONNECT,
83422028b1SPhilipp Reisner };
84422028b1SPhilipp Reisner 
85380207d0SPhilipp Reisner enum drbd_read_balancing {
86380207d0SPhilipp Reisner 	RB_PREFER_LOCAL,
87380207d0SPhilipp Reisner 	RB_PREFER_REMOTE,
88380207d0SPhilipp Reisner 	RB_ROUND_ROBIN,
89380207d0SPhilipp Reisner 	RB_LEAST_PENDING,
90380207d0SPhilipp Reisner 	RB_CONGESTED_REMOTE,
91d60de03aSPhilipp Reisner 	RB_32K_STRIPING,
92d60de03aSPhilipp Reisner 	RB_64K_STRIPING,
93d60de03aSPhilipp Reisner 	RB_128K_STRIPING,
94d60de03aSPhilipp Reisner 	RB_256K_STRIPING,
95d60de03aSPhilipp Reisner 	RB_512K_STRIPING,
96d60de03aSPhilipp Reisner 	RB_1M_STRIPING,
97380207d0SPhilipp Reisner };
98380207d0SPhilipp Reisner 
99b411b363SPhilipp Reisner /* KEEP the order, do not delete or insert. Only append. */
100116676caSAndreas Gruenbacher enum drbd_ret_code {
101b411b363SPhilipp Reisner 	ERR_CODE_BASE		= 100,
102b411b363SPhilipp Reisner 	NO_ERROR		= 101,
103b411b363SPhilipp Reisner 	ERR_LOCAL_ADDR		= 102,
104b411b363SPhilipp Reisner 	ERR_PEER_ADDR		= 103,
105b411b363SPhilipp Reisner 	ERR_OPEN_DISK		= 104,
106b411b363SPhilipp Reisner 	ERR_OPEN_MD_DISK	= 105,
107b411b363SPhilipp Reisner 	ERR_DISK_NOT_BDEV	= 107,
108b411b363SPhilipp Reisner 	ERR_MD_NOT_BDEV		= 108,
10967b58bf7SLars Ellenberg 	ERR_DISK_TOO_SMALL	= 111,
11067b58bf7SLars Ellenberg 	ERR_MD_DISK_TOO_SMALL	= 112,
111b411b363SPhilipp Reisner 	ERR_BDCLAIM_DISK	= 114,
112b411b363SPhilipp Reisner 	ERR_BDCLAIM_MD_DISK	= 115,
113b411b363SPhilipp Reisner 	ERR_MD_IDX_INVALID	= 116,
114b411b363SPhilipp Reisner 	ERR_IO_MD_DISK		= 118,
115b411b363SPhilipp Reisner 	ERR_MD_INVALID          = 119,
116b411b363SPhilipp Reisner 	ERR_AUTH_ALG		= 120,
117b411b363SPhilipp Reisner 	ERR_AUTH_ALG_ND		= 121,
118b411b363SPhilipp Reisner 	ERR_NOMEM		= 122,
119eb12010eSLars Ellenberg 	ERR_DISCARD_IMPOSSIBLE	= 123,
120b411b363SPhilipp Reisner 	ERR_DISK_CONFIGURED	= 124,
121b411b363SPhilipp Reisner 	ERR_NET_CONFIGURED	= 125,
122b411b363SPhilipp Reisner 	ERR_MANDATORY_TAG	= 126,
123b411b363SPhilipp Reisner 	ERR_MINOR_INVALID	= 127,
124b411b363SPhilipp Reisner 	ERR_INTR		= 129, /* EINTR */
125b411b363SPhilipp Reisner 	ERR_RESIZE_RESYNC	= 130,
126b411b363SPhilipp Reisner 	ERR_NO_PRIMARY		= 131,
12795f8efd0SAndreas Gruenbacher 	ERR_RESYNC_AFTER	= 132,
12895f8efd0SAndreas Gruenbacher 	ERR_RESYNC_AFTER_CYCLE	= 133,
129b411b363SPhilipp Reisner 	ERR_PAUSE_IS_SET	= 134,
130b411b363SPhilipp Reisner 	ERR_PAUSE_IS_CLEAR	= 135,
131b411b363SPhilipp Reisner 	ERR_PACKET_NR		= 137,
132b411b363SPhilipp Reisner 	ERR_NO_DISK		= 138,
133b411b363SPhilipp Reisner 	ERR_NOT_PROTO_C		= 139,
134b411b363SPhilipp Reisner 	ERR_NOMEM_BITMAP	= 140,
135b411b363SPhilipp Reisner 	ERR_INTEGRITY_ALG	= 141, /* DRBD 8.2 only */
136b411b363SPhilipp Reisner 	ERR_INTEGRITY_ALG_ND	= 142, /* DRBD 8.2 only */
137b411b363SPhilipp Reisner 	ERR_CPU_MASK_PARSE	= 143, /* DRBD 8.2 only */
138b411b363SPhilipp Reisner 	ERR_CSUMS_ALG		= 144, /* DRBD 8.2 only */
139b411b363SPhilipp Reisner 	ERR_CSUMS_ALG_ND	= 145, /* DRBD 8.2 only */
140b411b363SPhilipp Reisner 	ERR_VERIFY_ALG		= 146, /* DRBD 8.2 only */
141b411b363SPhilipp Reisner 	ERR_VERIFY_ALG_ND	= 147, /* DRBD 8.2 only */
142b411b363SPhilipp Reisner 	ERR_CSUMS_RESYNC_RUNNING= 148, /* DRBD 8.2 only */
143b411b363SPhilipp Reisner 	ERR_VERIFY_RUNNING	= 149, /* DRBD 8.2 only */
144b411b363SPhilipp Reisner 	ERR_DATA_NOT_CURRENT	= 150,
145b411b363SPhilipp Reisner 	ERR_CONNECTED		= 151, /* DRBD 8.3 only */
1469f5180e5SPhilipp Reisner 	ERR_PERM		= 152,
1476495d2c6SPhilipp Reisner 	ERR_NEED_APV_93		= 153,
14847ff2d0aSPhilipp Reisner 	ERR_STONITH_AND_PROT_A  = 154,
149422028b1SPhilipp Reisner 	ERR_CONG_NOT_PROTO_A	= 155,
150cd88d030SPhilipp Reisner 	ERR_PIC_AFTER_DEP	= 156,
151cd88d030SPhilipp Reisner 	ERR_PIC_PEER_DEP	= 157,
152789c1b62SAndreas Gruenbacher 	ERR_RES_NOT_KNOWN	= 158,
153789c1b62SAndreas Gruenbacher 	ERR_RES_IN_USE		= 159,
154774b3055SPhilipp Reisner 	ERR_MINOR_CONFIGURED    = 160,
155179e20b8SAndreas Gruenbacher 	ERR_MINOR_OR_VOLUME_EXISTS = 161,
1563b98c0c2SLars Ellenberg 	ERR_INVALID_REQUEST	= 162,
157b032b6faSPhilipp Reisner 	ERR_NEED_APV_100	= 163,
158dcb20d1aSPhilipp Reisner 	ERR_NEED_ALLOW_TWO_PRI  = 164,
159d5d7ebd4SLars Ellenberg 	ERR_MD_UNCLEAN          = 165,
160d752b269SPhilipp Reisner 	ERR_MD_LAYOUT_CONNECTED = 166,
161d752b269SPhilipp Reisner 	ERR_MD_LAYOUT_TOO_BIG   = 167,
162d752b269SPhilipp Reisner 	ERR_MD_LAYOUT_TOO_SMALL = 168,
163d752b269SPhilipp Reisner 	ERR_MD_LAYOUT_NO_FIT    = 169,
164d752b269SPhilipp Reisner 	ERR_IMPLICIT_SHRINK     = 170,
165b411b363SPhilipp Reisner 	/* insert new ones above this line */
166b411b363SPhilipp Reisner 	AFTER_LAST_ERR_CODE
167b411b363SPhilipp Reisner };
168b411b363SPhilipp Reisner 
169b411b363SPhilipp Reisner #define DRBD_PROT_A   1
170b411b363SPhilipp Reisner #define DRBD_PROT_B   2
171b411b363SPhilipp Reisner #define DRBD_PROT_C   3
172b411b363SPhilipp Reisner 
173b411b363SPhilipp Reisner enum drbd_role {
174b411b363SPhilipp Reisner 	R_UNKNOWN = 0,
175b411b363SPhilipp Reisner 	R_PRIMARY = 1,     /* role */
176b411b363SPhilipp Reisner 	R_SECONDARY = 2,   /* role */
177b411b363SPhilipp Reisner 	R_MASK = 3,
178b411b363SPhilipp Reisner };
179b411b363SPhilipp Reisner 
180b411b363SPhilipp Reisner /* The order of these constants is important.
181b411b363SPhilipp Reisner  * The lower ones (<C_WF_REPORT_PARAMS) indicate
182b411b363SPhilipp Reisner  * that there is no socket!
183b411b363SPhilipp Reisner  * >=C_WF_REPORT_PARAMS ==> There is a socket
184b411b363SPhilipp Reisner  */
185b411b363SPhilipp Reisner enum drbd_conns {
186b411b363SPhilipp Reisner 	C_STANDALONE,
187b411b363SPhilipp Reisner 	C_DISCONNECTING,  /* Temporal state on the way to StandAlone. */
188b411b363SPhilipp Reisner 	C_UNCONNECTED,    /* >= C_UNCONNECTED -> inc_net() succeeds */
189b411b363SPhilipp Reisner 
190b411b363SPhilipp Reisner 	/* These temporal states are all used on the way
191b411b363SPhilipp Reisner 	 * from >= C_CONNECTED to Unconnected.
192b411b363SPhilipp Reisner 	 * The 'disconnect reason' states
19325985edcSLucas De Marchi 	 * I do not allow to change between them. */
194b411b363SPhilipp Reisner 	C_TIMEOUT,
195b411b363SPhilipp Reisner 	C_BROKEN_PIPE,
196b411b363SPhilipp Reisner 	C_NETWORK_FAILURE,
197b411b363SPhilipp Reisner 	C_PROTOCOL_ERROR,
198b411b363SPhilipp Reisner 	C_TEAR_DOWN,
199b411b363SPhilipp Reisner 
200b411b363SPhilipp Reisner 	C_WF_CONNECTION,
201b411b363SPhilipp Reisner 	C_WF_REPORT_PARAMS, /* we have a socket */
202b411b363SPhilipp Reisner 	C_CONNECTED,      /* we have introduced each other */
203b411b363SPhilipp Reisner 	C_STARTING_SYNC_S,  /* starting full sync by admin request. */
20424c4830cSBart Van Assche 	C_STARTING_SYNC_T,  /* starting full sync by admin request. */
205b411b363SPhilipp Reisner 	C_WF_BITMAP_S,
206b411b363SPhilipp Reisner 	C_WF_BITMAP_T,
207b411b363SPhilipp Reisner 	C_WF_SYNC_UUID,
208b411b363SPhilipp Reisner 
209b411b363SPhilipp Reisner 	/* All SyncStates are tested with this comparison
210b411b363SPhilipp Reisner 	 * xx >= C_SYNC_SOURCE && xx <= C_PAUSED_SYNC_T */
211b411b363SPhilipp Reisner 	C_SYNC_SOURCE,
212b411b363SPhilipp Reisner 	C_SYNC_TARGET,
213b411b363SPhilipp Reisner 	C_VERIFY_S,
214b411b363SPhilipp Reisner 	C_VERIFY_T,
215b411b363SPhilipp Reisner 	C_PAUSED_SYNC_S,
216b411b363SPhilipp Reisner 	C_PAUSED_SYNC_T,
21767531718SPhilipp Reisner 
21867531718SPhilipp Reisner 	C_AHEAD,
21967531718SPhilipp Reisner 	C_BEHIND,
22067531718SPhilipp Reisner 
221b411b363SPhilipp Reisner 	C_MASK = 31
222b411b363SPhilipp Reisner };
223b411b363SPhilipp Reisner 
224b411b363SPhilipp Reisner enum drbd_disk_state {
225b411b363SPhilipp Reisner 	D_DISKLESS,
226b411b363SPhilipp Reisner 	D_ATTACHING,      /* In the process of reading the meta-data */
227b411b363SPhilipp Reisner 	D_FAILED,         /* Becomes D_DISKLESS as soon as we told it the peer */
2288fe39aacSPhilipp Reisner 			  /* when >= D_FAILED it is legal to access mdev->ldev */
229b411b363SPhilipp Reisner 	D_NEGOTIATING,    /* Late attaching state, we need to talk to the peer */
230b411b363SPhilipp Reisner 	D_INCONSISTENT,
231b411b363SPhilipp Reisner 	D_OUTDATED,
232b411b363SPhilipp Reisner 	D_UNKNOWN,       /* Only used for the peer, never for myself */
233b411b363SPhilipp Reisner 	D_CONSISTENT,     /* Might be D_OUTDATED, might be D_UP_TO_DATE ... */
234b411b363SPhilipp Reisner 	D_UP_TO_DATE,       /* Only this disk state allows applications' IO ! */
235b411b363SPhilipp Reisner 	D_MASK = 15
236b411b363SPhilipp Reisner };
237b411b363SPhilipp Reisner 
238b411b363SPhilipp Reisner union drbd_state {
239b411b363SPhilipp Reisner /* According to gcc's docs is the ...
240b411b363SPhilipp Reisner  * The order of allocation of bit-fields within a unit (C90 6.5.2.1, C99 6.7.2.1).
241b411b363SPhilipp Reisner  * Determined by ABI.
242b411b363SPhilipp Reisner  * pointed out by Maxim Uvarov q<[email protected]>
243b411b363SPhilipp Reisner  * even though we transmit as "cpu_to_be32(state)",
244b411b363SPhilipp Reisner  * the offsets of the bitfields still need to be swapped
24524c4830cSBart Van Assche  * on different endianness.
246b411b363SPhilipp Reisner  */
247b411b363SPhilipp Reisner 	struct {
248b411b363SPhilipp Reisner #if defined(__LITTLE_ENDIAN_BITFIELD)
249b411b363SPhilipp Reisner 		unsigned role:2 ;   /* 3/4	 primary/secondary/unknown */
250b411b363SPhilipp Reisner 		unsigned peer:2 ;   /* 3/4	 primary/secondary/unknown */
251b411b363SPhilipp Reisner 		unsigned conn:5 ;   /* 17/32	 cstates */
252b411b363SPhilipp Reisner 		unsigned disk:4 ;   /* 8/16	 from D_DISKLESS to D_UP_TO_DATE */
253b411b363SPhilipp Reisner 		unsigned pdsk:4 ;   /* 8/16	 from D_DISKLESS to D_UP_TO_DATE */
254fb22c402SPhilipp Reisner 		unsigned susp:1 ;   /* 2/2	 IO suspended no/yes (by user) */
255b411b363SPhilipp Reisner 		unsigned aftr_isp:1 ; /* isp .. imposed sync pause */
256b411b363SPhilipp Reisner 		unsigned peer_isp:1 ;
257b411b363SPhilipp Reisner 		unsigned user_isp:1 ;
258fb22c402SPhilipp Reisner 		unsigned susp_nod:1 ; /* IO suspended because no data */
259fb22c402SPhilipp Reisner 		unsigned susp_fen:1 ; /* IO suspended because fence peer handler runs*/
260fb22c402SPhilipp Reisner 		unsigned _pad:9;   /* 0	 unused */
261b411b363SPhilipp Reisner #elif defined(__BIG_ENDIAN_BITFIELD)
262fb22c402SPhilipp Reisner 		unsigned _pad:9;
263fb22c402SPhilipp Reisner 		unsigned susp_fen:1 ;
264fb22c402SPhilipp Reisner 		unsigned susp_nod:1 ;
265b411b363SPhilipp Reisner 		unsigned user_isp:1 ;
266b411b363SPhilipp Reisner 		unsigned peer_isp:1 ;
267b411b363SPhilipp Reisner 		unsigned aftr_isp:1 ; /* isp .. imposed sync pause */
268b411b363SPhilipp Reisner 		unsigned susp:1 ;   /* 2/2	 IO suspended  no/yes */
269b411b363SPhilipp Reisner 		unsigned pdsk:4 ;   /* 8/16	 from D_DISKLESS to D_UP_TO_DATE */
270b411b363SPhilipp Reisner 		unsigned disk:4 ;   /* 8/16	 from D_DISKLESS to D_UP_TO_DATE */
271b411b363SPhilipp Reisner 		unsigned conn:5 ;   /* 17/32	 cstates */
272b411b363SPhilipp Reisner 		unsigned peer:2 ;   /* 3/4	 primary/secondary/unknown */
273b411b363SPhilipp Reisner 		unsigned role:2 ;   /* 3/4	 primary/secondary/unknown */
274b411b363SPhilipp Reisner #else
27524c4830cSBart Van Assche # error "this endianness is not supported"
276b411b363SPhilipp Reisner #endif
277b411b363SPhilipp Reisner 	};
278b411b363SPhilipp Reisner 	unsigned int i;
279b411b363SPhilipp Reisner };
280b411b363SPhilipp Reisner 
281c8b32563SAndreas Gruenbacher enum drbd_state_rv {
282b411b363SPhilipp Reisner 	SS_CW_NO_NEED = 4,
283b411b363SPhilipp Reisner 	SS_CW_SUCCESS = 3,
284b411b363SPhilipp Reisner 	SS_NOTHING_TO_DO = 2,
285b411b363SPhilipp Reisner 	SS_SUCCESS = 1,
286b411b363SPhilipp Reisner 	SS_UNKNOWN_ERROR = 0, /* Used to sleep longer in _drbd_request_state */
287b411b363SPhilipp Reisner 	SS_TWO_PRIMARIES = -1,
288b411b363SPhilipp Reisner 	SS_NO_UP_TO_DATE_DISK = -2,
289b411b363SPhilipp Reisner 	SS_NO_LOCAL_DISK = -4,
290b411b363SPhilipp Reisner 	SS_NO_REMOTE_DISK = -5,
291b411b363SPhilipp Reisner 	SS_CONNECTED_OUTDATES = -6,
292b411b363SPhilipp Reisner 	SS_PRIMARY_NOP = -7,
293b411b363SPhilipp Reisner 	SS_RESYNC_RUNNING = -8,
294b411b363SPhilipp Reisner 	SS_ALREADY_STANDALONE = -9,
295b411b363SPhilipp Reisner 	SS_CW_FAILED_BY_PEER = -10,
296b411b363SPhilipp Reisner 	SS_IS_DISKLESS = -11,
297b411b363SPhilipp Reisner 	SS_DEVICE_IN_USE = -12,
298b411b363SPhilipp Reisner 	SS_NO_NET_CONFIG = -13,
299b411b363SPhilipp Reisner 	SS_NO_VERIFY_ALG = -14,       /* drbd-8.2 only */
300b411b363SPhilipp Reisner 	SS_NEED_CONNECTION = -15,    /* drbd-8.2 only */
301b411b363SPhilipp Reisner 	SS_LOWER_THAN_OUTDATED = -16,
302b411b363SPhilipp Reisner 	SS_NOT_SUPPORTED = -17,      /* drbd-8.2 only */
303b411b363SPhilipp Reisner 	SS_IN_TRANSIENT_STATE = -18,  /* Retry after the next state change */
304b411b363SPhilipp Reisner 	SS_CONCURRENT_ST_CHG = -19,   /* Concurrent cluster side state change! */
305047e95e2SPhilipp Reisner 	SS_O_VOL_PEER_PRI = -20,
3062bd5ed5dSPhilipp Reisner 	SS_OUTDATE_WO_CONN = -21,
3072bd5ed5dSPhilipp Reisner 	SS_AFTER_LAST_ERROR = -22,    /* Keep this at bottom */
308b411b363SPhilipp Reisner };
309b411b363SPhilipp Reisner 
310b411b363SPhilipp Reisner #define SHARED_SECRET_MAX 64
311b411b363SPhilipp Reisner 
312b411b363SPhilipp Reisner #define MDF_CONSISTENT		(1 << 0)
313b411b363SPhilipp Reisner #define MDF_PRIMARY_IND		(1 << 1)
314b411b363SPhilipp Reisner #define MDF_CONNECTED_IND	(1 << 2)
315b411b363SPhilipp Reisner #define MDF_FULL_SYNC		(1 << 3)
316b411b363SPhilipp Reisner #define MDF_WAS_UP_TO_DATE	(1 << 4)
317b411b363SPhilipp Reisner #define MDF_PEER_OUT_DATED	(1 << 5)
318b411b363SPhilipp Reisner #define MDF_CRASHED_PRIMARY	(1 << 6)
319d5d7ebd4SLars Ellenberg #define MDF_AL_CLEAN		(1 << 7)
3209a51ab1cSPhilipp Reisner #define MDF_AL_DISABLED		(1 << 8)
321b411b363SPhilipp Reisner 
322a2972846SAndreas Gruenbacher #define MAX_PEERS 32
323a2972846SAndreas Gruenbacher 
324b411b363SPhilipp Reisner enum drbd_uuid_index {
325b411b363SPhilipp Reisner 	UI_CURRENT,
326b411b363SPhilipp Reisner 	UI_BITMAP,
327b411b363SPhilipp Reisner 	UI_HISTORY_START,
328b411b363SPhilipp Reisner 	UI_HISTORY_END,
329b411b363SPhilipp Reisner 	UI_SIZE,      /* nl-packet: number of dirty bits */
330b411b363SPhilipp Reisner 	UI_FLAGS,     /* nl-packet: flags */
331b411b363SPhilipp Reisner 	UI_EXTENDED_SIZE   /* Everything. */
332b411b363SPhilipp Reisner };
333b411b363SPhilipp Reisner 
334a2972846SAndreas Gruenbacher #define HISTORY_UUIDS MAX_PEERS
335a2972846SAndreas Gruenbacher 
336b411b363SPhilipp Reisner enum drbd_timeout_flag {
337b411b363SPhilipp Reisner 	UT_DEFAULT      = 0,
338b411b363SPhilipp Reisner 	UT_DEGRADED     = 1,
339b411b363SPhilipp Reisner 	UT_PEER_OUTDATED = 2,
340b411b363SPhilipp Reisner };
341b411b363SPhilipp Reisner 
342a2972846SAndreas Gruenbacher enum drbd_notification_type {
343a2972846SAndreas Gruenbacher 	NOTIFY_EXISTS,
344a2972846SAndreas Gruenbacher 	NOTIFY_CREATE,
345a2972846SAndreas Gruenbacher 	NOTIFY_CHANGE,
346a2972846SAndreas Gruenbacher 	NOTIFY_DESTROY,
347a2972846SAndreas Gruenbacher 	NOTIFY_CALL,
348a2972846SAndreas Gruenbacher 	NOTIFY_RESPONSE,
349a2972846SAndreas Gruenbacher 
350a2972846SAndreas Gruenbacher 	NOTIFY_CONTINUES = 0x8000,
351a2972846SAndreas Gruenbacher 	NOTIFY_FLAGS = NOTIFY_CONTINUES,
352a2972846SAndreas Gruenbacher };
353a2972846SAndreas Gruenbacher 
3547e5fec31SFabian Frederick enum drbd_peer_state {
3557e5fec31SFabian Frederick 	P_INCONSISTENT = 3,
3567e5fec31SFabian Frederick 	P_OUTDATED = 4,
3577e5fec31SFabian Frederick 	P_DOWN = 5,
3587e5fec31SFabian Frederick 	P_PRIMARY = 6,
3597e5fec31SFabian Frederick 	P_FENCING = 7,
3607e5fec31SFabian Frederick };
3617e5fec31SFabian Frederick 
362b411b363SPhilipp Reisner #define UUID_JUST_CREATED ((__u64)4)
363b411b363SPhilipp Reisner 
364f6ba8636SAndreas Gruenbacher enum write_ordering_e {
365f6ba8636SAndreas Gruenbacher 	WO_NONE,
366f6ba8636SAndreas Gruenbacher 	WO_DRAIN_IO,
367f6ba8636SAndreas Gruenbacher 	WO_BDEV_FLUSH,
368f6ba8636SAndreas Gruenbacher 	WO_BIO_BARRIER
369f6ba8636SAndreas Gruenbacher };
370f6ba8636SAndreas Gruenbacher 
371d5d7ebd4SLars Ellenberg /* magic numbers used in meta data and network packets */
372b411b363SPhilipp Reisner #define DRBD_MAGIC 0x83740267
3730b70a13dSPhilipp Reisner #define DRBD_MAGIC_BIG 0x835a
3740c8e36d9SAndreas Gruenbacher #define DRBD_MAGIC_100 0x8620ec20
375b411b363SPhilipp Reisner 
376d5d7ebd4SLars Ellenberg #define DRBD_MD_MAGIC_07   (DRBD_MAGIC+3)
377d5d7ebd4SLars Ellenberg #define DRBD_MD_MAGIC_08   (DRBD_MAGIC+4)
378d5d7ebd4SLars Ellenberg #define DRBD_MD_MAGIC_84_UNCLEAN	(DRBD_MAGIC+5)
379d5d7ebd4SLars Ellenberg 
380d5d7ebd4SLars Ellenberg 
3817ad651b5SLars Ellenberg /* how I came up with this magic?
3827ad651b5SLars Ellenberg  * base64 decode "actlog==" ;) */
3837ad651b5SLars Ellenberg #define DRBD_AL_MAGIC 0x69cb65a2
3847ad651b5SLars Ellenberg 
385b411b363SPhilipp Reisner /* these are of type "int" */
386b411b363SPhilipp Reisner #define DRBD_MD_INDEX_INTERNAL -1
387b411b363SPhilipp Reisner #define DRBD_MD_INDEX_FLEX_EXT -2
388b411b363SPhilipp Reisner #define DRBD_MD_INDEX_FLEX_INT -3
389b411b363SPhilipp Reisner 
390f44d0436SAndreas Gruenbacher #define DRBD_CPU_MASK_SIZE 32
391f44d0436SAndreas Gruenbacher 
392b411b363SPhilipp Reisner #endif
393