1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 * 25 * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 26 */ 27 28 #ifndef _STMF_SBD_IOCTL_H 29 #define _STMF_SBD_IOCTL_H 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 /* 36 * error codes from sbd. 37 */ 38 typedef enum sbd_ret { 39 SBD_RET_META_CREATION_FAILED = 0x01, 40 SBD_RET_INVALID_BLKSIZE, 41 SBD_RET_REQUIRES_SEPARATE_META, 42 SBD_RET_FILE_ALREADY_REGISTERED, 43 SBD_RET_GUID_ALREADY_REGISTERED, 44 SBD_RET_DATA_PATH_NOT_ABSOLUTE, 45 SBD_RET_META_PATH_NOT_ABSOLUTE, 46 SBD_RET_META_FILE_LOOKUP_FAILED, 47 SBD_RET_ZFS_META_CREATE_FAILED, 48 SBD_ZVOL_META_NAME_MISMATCH, 49 SBD_RET_DATA_FILE_LOOKUP_FAILED, 50 SBD_RET_WRONG_META_FILE_TYPE, 51 SBD_RET_WRONG_DATA_FILE_TYPE, 52 SBD_RET_DATA_FILE_OPEN_FAILED, 53 SBD_RET_META_FILE_OPEN_FAILED, 54 SBD_RET_DATA_FILE_GETATTR_FAILED, 55 SBD_RET_META_FILE_GETATTR_FAILED, 56 SBD_RET_FILE_SIZE_ERROR, 57 SBD_RET_FILE_ALIGN_ERROR, 58 SBD_RET_SIZE_OUT_OF_RANGE, 59 SBD_RET_SIZE_NOT_SUPPORTED_BY_FS, 60 SBD_RET_NO_META, 61 SBD_RET_VERSION_NOT_SUPPORTED, 62 SBD_RET_LU_BUSY, 63 SBD_RET_NOT_FOUND, 64 SBD_RET_INSUFFICIENT_BUF_SPACE, 65 SBD_RET_WRITE_CACHE_SET_FAILED, 66 SBD_RET_ACCESS_STATE_FAILED, 67 68 SBD_RET_MAX_VAL 69 } sbd_ret_t; 70 71 #define SBD_IOCTL_DEF(n) ((((int)0x5B) << 16) | (n)) 72 #define SBD_IOCTL_CREATE_AND_REGISTER_LU SBD_IOCTL_DEF(1) 73 #define SBD_IOCTL_IMPORT_LU SBD_IOCTL_DEF(2) 74 #define SBD_IOCTL_DELETE_LU SBD_IOCTL_DEF(3) 75 #define SBD_IOCTL_MODIFY_LU SBD_IOCTL_DEF(4) 76 #define SBD_IOCTL_GET_LU_PROPS SBD_IOCTL_DEF(5) 77 #define SBD_IOCTL_GET_LU_LIST SBD_IOCTL_DEF(6) 78 #define SBD_IOCTL_SET_LU_STANDBY SBD_IOCTL_DEF(7) 79 #define SBD_IOCTL_SET_GLOBAL_LU SBD_IOCTL_DEF(8) 80 #define SBD_IOCTL_GET_GLOBAL_LU SBD_IOCTL_DEF(9) 81 #define SBD_IOCTL_GET_UNMAP_PROPS SBD_IOCTL_DEF(10) 82 83 typedef struct sbd_create_and_reg_lu { 84 uint32_t slu_struct_size; 85 uint16_t slu_meta_fname_valid:1, 86 slu_lu_size_valid:1, 87 slu_blksize_valid:1, 88 slu_vid_valid:1, 89 slu_pid_valid:1, 90 slu_rev_valid:1, 91 slu_serial_valid:1, 92 slu_alias_valid:1, 93 slu_mgmt_url_valid:1, 94 slu_guid_valid:1, 95 slu_company_id_valid:1, 96 slu_host_id_valid:1, 97 slu_writeback_cache_disable_valid:1, 98 slu_writeback_cache_disable:1, 99 slu_write_protected:1; 100 uint16_t slu_meta_fname_off; 101 uint64_t slu_lu_size; 102 uint16_t slu_data_fname_off; 103 uint16_t slu_serial_off; 104 uint8_t slu_serial_size; 105 uint8_t slu_ret_filesize_nbits; 106 uint16_t slu_blksize; 107 uint32_t slu_company_id; 108 uint16_t slu_alias_off; 109 uint16_t slu_mgmt_url_off; 110 uint32_t slu_host_id; 111 char slu_rev[4]; 112 char slu_vid[8]; 113 char slu_pid[16]; 114 uint8_t slu_guid[16]; 115 char slu_buf[8]; /* likely more than 8 */ 116 } sbd_create_and_reg_lu_t; 117 118 typedef struct sbd_global_props { 119 uint32_t mlu_struct_size; 120 uint32_t mlu_vid_valid:1, 121 mlu_pid_valid:1, 122 mlu_rev_valid:1, 123 mlu_serial_valid:1, 124 mlu_mgmt_url_valid:1, 125 mlu_company_id_valid:1, 126 mlu_host_id_valid:1; 127 uint16_t mlu_serial_off; 128 uint8_t mlu_serial_size; 129 uint8_t mlu_rsvd1; 130 uint32_t mlu_company_id; 131 uint16_t mlu_mgmt_url_off; 132 uint16_t rsvd1; 133 uint32_t mlu_host_id; 134 uint32_t mlu_buf_size_needed; 135 char mlu_rev[4]; 136 char mlu_vid[8]; 137 char mlu_pid[16]; 138 char mlu_buf[8]; /* likely more than 8 */ 139 } sbd_global_props_t; 140 141 typedef struct sbd_set_lu_standby { 142 uint8_t stlu_guid[16]; 143 } sbd_set_lu_standby_t; 144 145 146 typedef struct sbd_import_lu { 147 uint32_t ilu_struct_size; 148 uint32_t ilu_rsvd; 149 uint8_t ilu_ret_guid[16]; 150 char ilu_meta_fname[8]; /* Can be more than 8 */ 151 } sbd_import_lu_t; 152 153 typedef struct sbd_modify_lu { 154 uint32_t mlu_struct_size; 155 uint32_t mlu_lu_size_valid:1, 156 mlu_serial_valid:1, 157 mlu_alias_valid:1, 158 mlu_mgmt_url_valid:1, 159 mlu_writeback_cache_disable_valid:1, 160 mlu_writeback_cache_disable:1, 161 mlu_write_protected_valid:1, 162 mlu_write_protected:1, 163 mlu_by_guid:1, 164 mlu_by_fname:1, 165 mlu_standby_valid:1, 166 mlu_standby:1; 167 uint64_t mlu_lu_size; 168 uint16_t mlu_alias_off; 169 uint16_t mlu_mgmt_url_off; 170 uint16_t mlu_serial_off; 171 uint16_t mlu_serial_size; 172 uint16_t mlu_fname_off; 173 uint16_t mlu_rsvd1; 174 uint32_t mlu_rsvd2; 175 uint8_t mlu_input_guid[16]; 176 char mlu_buf[8]; /* can be more than 8 */ 177 } sbd_modify_lu_t; 178 179 typedef struct sbd_delete_lu { 180 uint32_t dlu_struct_size; 181 uint16_t dlu_by_guid:1, 182 dlu_by_meta_name:1; 183 uint16_t dlu_rsvd; 184 uint8_t dlu_guid[16]; 185 uint8_t dlu_meta_name[8]; 186 } sbd_delete_lu_t; 187 188 /* 189 * sbd access states 190 */ 191 #define SBD_LU_ACTIVE 1 192 #define SBD_LU_TRANSITION_TO_ACTIVE 2 193 #define SBD_LU_STANDBY 3 194 #define SBD_LU_TRANSITION_TO_STANDBY 4 195 196 typedef struct sbd_lu_props { 197 uint32_t slp_input_guid:1, /* GUID or meta filename */ 198 slp_separate_meta:1, 199 slp_meta_fname_valid:1, 200 slp_data_fname_valid:1, 201 slp_zfs_meta:1, 202 slp_alias_valid:1, 203 slp_mgmt_url_valid:1, 204 slp_lu_vid:1, 205 slp_lu_pid:1, 206 slp_lu_rev:1, 207 slp_serial_valid:1, 208 slp_writeback_cache_disable_cur:1, 209 slp_writeback_cache_disable_saved:1, 210 slp_write_protected:1; 211 uint16_t slp_meta_fname_off; 212 uint16_t slp_data_fname_off; 213 uint64_t slp_lu_size; 214 uint16_t slp_serial_off; 215 uint16_t slp_blksize; 216 uint16_t slp_alias_off; 217 uint16_t slp_mgmt_url_off; 218 uint32_t slp_buf_size_needed; /* Upon return */ 219 uint16_t slp_serial_size; 220 uint16_t slp_access_state; 221 char slp_rev[4]; 222 char slp_vid[8]; 223 char slp_pid[16]; 224 uint8_t slp_guid[16]; 225 uint8_t slp_buf[8]; /* likely more than 8 */ 226 } sbd_lu_props_t; 227 228 typedef struct sbd_unmap_props { 229 uint32_t sup_found_lu:1, 230 sup_zvol_path_valid:1, 231 sup_guid_valid:1, 232 sup_unmap_enabled; 233 uint32_t sup_rsvd; 234 char sup_zvol_path[256]; 235 uint8_t sup_guid[16]; 236 } sbd_unmap_props_t; 237 238 #ifdef __cplusplus 239 } 240 #endif 241 242 #endif /* _STMF_SBD_IOCTL_H */ 243