stmf_sbd_ioctl.h revision b77b9231da168bb31490f65bf2697f6031b7f601
1N/A/*
1N/A * CDDL HEADER START
1N/A *
1N/A * The contents of this file are subject to the terms of the
1N/A * Common Development and Distribution License (the "License").
1N/A * You may not use this file except in compliance with the License.
1N/A *
1N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1N/A * or http://www.opensolaris.org/os/licensing.
1N/A * See the License for the specific language governing permissions
1N/A * and limitations under the License.
1N/A *
1N/A * When distributing Covered Code, include this CDDL HEADER in each
1N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1N/A * If applicable, add the following below this CDDL HEADER, with the
1N/A * fields enclosed by brackets "[]" replaced with your own identifying
1N/A * information: Portions Copyright [yyyy] [name of copyright owner]
1N/A *
1N/A * CDDL HEADER END
1N/A */
1N/A/*
1N/A * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1N/A * Use is subject to license terms.
1N/A *
1N/A * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
1N/A */
1N/A
1N/A#ifndef _STMF_SBD_IOCTL_H
1N/A#define _STMF_SBD_IOCTL_H
1N/A
1N/A#ifdef __cplusplus
1N/Aextern "C" {
1N/A#endif
1N/A
1N/A/*
1N/A * error codes from sbd.
1N/A */
1N/Atypedef enum sbd_ret {
1N/A SBD_RET_META_CREATION_FAILED = 0x01,
1N/A SBD_RET_INVALID_BLKSIZE,
1N/A SBD_RET_REQUIRES_SEPARATE_META,
1N/A SBD_RET_FILE_ALREADY_REGISTERED,
1N/A SBD_RET_GUID_ALREADY_REGISTERED,
1N/A SBD_RET_DATA_PATH_NOT_ABSOLUTE,
1N/A SBD_RET_META_PATH_NOT_ABSOLUTE,
1N/A SBD_RET_META_FILE_LOOKUP_FAILED,
1N/A SBD_RET_ZFS_META_CREATE_FAILED,
1N/A SBD_ZVOL_META_NAME_MISMATCH,
1N/A SBD_RET_DATA_FILE_LOOKUP_FAILED,
1N/A SBD_RET_WRONG_META_FILE_TYPE,
1N/A SBD_RET_WRONG_DATA_FILE_TYPE,
1N/A SBD_RET_DATA_FILE_OPEN_FAILED,
1N/A SBD_RET_META_FILE_OPEN_FAILED,
1N/A SBD_RET_DATA_FILE_GETATTR_FAILED,
1N/A SBD_RET_META_FILE_GETATTR_FAILED,
1N/A SBD_RET_FILE_SIZE_ERROR,
1N/A SBD_RET_FILE_ALIGN_ERROR,
1N/A SBD_RET_SIZE_OUT_OF_RANGE,
1N/A SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
1N/A SBD_RET_NO_META,
1N/A SBD_RET_VERSION_NOT_SUPPORTED,
1N/A SBD_RET_LU_BUSY,
1N/A SBD_RET_NOT_FOUND,
1N/A SBD_RET_INSUFFICIENT_BUF_SPACE,
1N/A SBD_RET_WRITE_CACHE_SET_FAILED,
1N/A SBD_RET_ACCESS_STATE_FAILED,
1N/A
1N/A SBD_RET_MAX_VAL
1N/A} sbd_ret_t;
1N/A
1N/A#define SBD_IOCTL_DEF(n) ((((int)0x5B) << 16) | (n))
1N/A#define SBD_IOCTL_CREATE_AND_REGISTER_LU SBD_IOCTL_DEF(1)
1N/A#define SBD_IOCTL_IMPORT_LU SBD_IOCTL_DEF(2)
1N/A#define SBD_IOCTL_DELETE_LU SBD_IOCTL_DEF(3)
1N/A#define SBD_IOCTL_MODIFY_LU SBD_IOCTL_DEF(4)
1N/A#define SBD_IOCTL_GET_LU_PROPS SBD_IOCTL_DEF(5)
1N/A#define SBD_IOCTL_GET_LU_LIST SBD_IOCTL_DEF(6)
1N/A#define SBD_IOCTL_SET_LU_STANDBY SBD_IOCTL_DEF(7)
1N/A#define SBD_IOCTL_SET_GLOBAL_LU SBD_IOCTL_DEF(8)
1N/A#define SBD_IOCTL_GET_GLOBAL_LU SBD_IOCTL_DEF(9)
1N/A#define SBD_IOCTL_GET_UNMAP_PROPS SBD_IOCTL_DEF(10)
1N/A
1N/Atypedef struct sbd_create_and_reg_lu {
1N/A uint32_t slu_struct_size;
1N/A uint16_t slu_meta_fname_valid:1,
1N/A slu_lu_size_valid:1,
1N/A slu_blksize_valid:1,
1N/A slu_vid_valid:1,
1N/A slu_pid_valid:1,
1N/A slu_rev_valid:1,
1N/A slu_serial_valid:1,
1N/A slu_alias_valid:1,
1N/A slu_mgmt_url_valid:1,
1N/A slu_guid_valid:1,
1N/A slu_company_id_valid:1,
1N/A slu_host_id_valid:1,
1N/A slu_writeback_cache_disable_valid:1,
1N/A slu_writeback_cache_disable:1,
1N/A slu_write_protected:1;
1N/A uint16_t slu_meta_fname_off;
uint64_t slu_lu_size;
uint16_t slu_data_fname_off;
uint16_t slu_serial_off;
uint8_t slu_serial_size;
uint8_t slu_ret_filesize_nbits;
uint16_t slu_blksize;
uint32_t slu_company_id;
uint16_t slu_alias_off;
uint16_t slu_mgmt_url_off;
uint32_t slu_host_id;
char slu_rev[4];
char slu_vid[8];
char slu_pid[16];
uint8_t slu_guid[16];
char slu_buf[8]; /* likely more than 8 */
} sbd_create_and_reg_lu_t;
typedef struct sbd_global_props {
uint32_t mlu_struct_size;
uint32_t mlu_vid_valid:1,
mlu_pid_valid:1,
mlu_rev_valid:1,
mlu_serial_valid:1,
mlu_mgmt_url_valid:1,
mlu_company_id_valid:1,
mlu_host_id_valid:1;
uint16_t mlu_serial_off;
uint8_t mlu_serial_size;
uint8_t mlu_rsvd1;
uint32_t mlu_company_id;
uint16_t mlu_mgmt_url_off;
uint16_t rsvd1;
uint32_t mlu_host_id;
uint32_t mlu_buf_size_needed;
char mlu_rev[4];
char mlu_vid[8];
char mlu_pid[16];
char mlu_buf[8]; /* likely more than 8 */
} sbd_global_props_t;
typedef struct sbd_set_lu_standby {
uint8_t stlu_guid[16];
} sbd_set_lu_standby_t;
typedef struct sbd_import_lu {
uint32_t ilu_struct_size;
uint32_t ilu_rsvd;
uint8_t ilu_ret_guid[16];
char ilu_meta_fname[8]; /* Can be more than 8 */
} sbd_import_lu_t;
typedef struct sbd_modify_lu {
uint32_t mlu_struct_size;
uint32_t mlu_lu_size_valid:1,
mlu_serial_valid:1,
mlu_alias_valid:1,
mlu_mgmt_url_valid:1,
mlu_writeback_cache_disable_valid:1,
mlu_writeback_cache_disable:1,
mlu_write_protected_valid:1,
mlu_write_protected:1,
mlu_by_guid:1,
mlu_by_fname:1,
mlu_standby_valid:1,
mlu_standby:1;
uint64_t mlu_lu_size;
uint16_t mlu_alias_off;
uint16_t mlu_mgmt_url_off;
uint16_t mlu_serial_off;
uint16_t mlu_serial_size;
uint16_t mlu_fname_off;
uint16_t mlu_rsvd1;
uint32_t mlu_rsvd2;
uint8_t mlu_input_guid[16];
char mlu_buf[8]; /* can be more than 8 */
} sbd_modify_lu_t;
typedef struct sbd_delete_lu {
uint32_t dlu_struct_size;
uint16_t dlu_by_guid:1,
dlu_by_meta_name:1;
uint16_t dlu_rsvd;
uint8_t dlu_guid[16];
uint8_t dlu_meta_name[8];
} sbd_delete_lu_t;
/*
* sbd access states
*/
#define SBD_LU_ACTIVE 1
#define SBD_LU_TRANSITION_TO_ACTIVE 2
#define SBD_LU_STANDBY 3
#define SBD_LU_TRANSITION_TO_STANDBY 4
typedef struct sbd_lu_props {
uint32_t slp_input_guid:1, /* GUID or meta filename */
slp_separate_meta:1,
slp_meta_fname_valid:1,
slp_data_fname_valid:1,
slp_zfs_meta:1,
slp_alias_valid:1,
slp_mgmt_url_valid:1,
slp_lu_vid:1,
slp_lu_pid:1,
slp_lu_rev:1,
slp_serial_valid:1,
slp_writeback_cache_disable_cur:1,
slp_writeback_cache_disable_saved:1,
slp_write_protected:1;
uint16_t slp_meta_fname_off;
uint16_t slp_data_fname_off;
uint64_t slp_lu_size;
uint16_t slp_serial_off;
uint16_t slp_blksize;
uint16_t slp_alias_off;
uint16_t slp_mgmt_url_off;
uint32_t slp_buf_size_needed; /* Upon return */
uint16_t slp_serial_size;
uint16_t slp_access_state;
char slp_rev[4];
char slp_vid[8];
char slp_pid[16];
uint8_t slp_guid[16];
uint8_t slp_buf[8]; /* likely more than 8 */
} sbd_lu_props_t;
typedef struct sbd_unmap_props {
uint32_t sup_found_lu:1,
sup_zvol_path_valid:1,
sup_guid_valid:1,
sup_unmap_enabled;
uint32_t sup_rsvd;
char sup_zvol_path[256];
uint8_t sup_guid[16];
} sbd_unmap_props_t;
#ifdef __cplusplus
}
#endif
#endif /* _STMF_SBD_IOCTL_H */