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