mdiox.x revision 8c777d354122faf889cbe261581bb4974f2b8e4d
%/*
% * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
% * Use is subject to license terms.
% *
% * CDDL HEADER START
% *
% * The contents of this file are subject to the terms of the
% * Common Development and Distribution License, Version 1.0 only
% * (the "License"). You may not use this file except in compliance
% * with the License.
% *
% * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
% * See the License for the specific language governing permissions
% * and limitations under the License.
% *
% * When distributing Covered Code, include this CDDL HEADER in each
% * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
% * If applicable, add the following below this CDDL HEADER, with the
% * fields enclosed by brackets "[]" replaced with your own identifying
% * information: Portions Copyright [yyyy] [name of copyright owner]
% *
% * CDDL HEADER END
% */
%
%#pragma ident "%Z%%M% %I% %E% SMI"
%
%/*
% * MDD interface definitions
% */
%/* pick up multihost ioctl definitions */
%/* get the basic XDR types */
%/* pick up device id information */
%#include <sys/dditypes.h>
%/*
% * NOTE: can't change these structures so make sure they are packed
% * in the kernel.
% */
%#pragma pack(4)
%#endif
%
%/*
% * fundamental types
% */
%
%/*
% *
% * NOTE: THESE ARE ON-DISK VALUES DO NOT CHANGE THE ORDER
% */
enum mddb_type_t {
MDDB_FIRST_MODID = 1000
};
%
%/*
% * Configuration commands.
% */
enum mddb_cfgcmd_t {
};
%
%/*
% * Return codes from DB record operations.
% */
enum mddb_recstatus_t {
};
%
%/*
% * Commands for DB accesses from user land.
% */
enum mddb_usercmd_t {
};
%
%/*
% * MDDB_USER record subtypes, set records and drive records.
% * Node records (NR) used for Multinode Disksets.
% * The MDDB_UR_SR record subtype is associated with the structures
% * md_set_record and md_mnset_record.
% * The MDDB_UR_DR record subtype is associated with the structure
% * md_drive_record.
% * The MDDB_NR_DR record subtype is associated with the structure
% * md_mnnode_record.
% * The MDDB_UR_LR record subtype is associated with the structure
% * md_mn_changelog_record_t
% */
enum mddb_userrec_t {
};
%
%/*
% * MDDB_USER record get commands.
% */
enum md_ur_get_cmd_t {
};
%
%/*
% * These are the options for mddb_createrec()
% */
enum md_create_rec_option_t {
MD_CRO_NOOPT = 0x000,
MD_CRO_OPTIMIZE = 0x001,
MD_CRO_32BIT = 0x002,
MD_CRO_64BIT = 0x004,
MD_CRO_STRIPE = 0x008,
MD_CRO_MIRROR = 0x010,
MD_CRO_RAID = 0x020,
MD_CRO_SOFTPART = 0x040,
MD_CRO_TRANS_MASTER = 0x080,
MD_CRO_TRANS_LOG = 0x100,
MD_CRO_HOTSPARE = 0x200,
MD_CRO_HOTSPARE_POOL = 0x400,
MD_CRO_CHANGELOG = 0x800
};
%
%/*
% * This SKEW value is used to skew the sideno of
% * the share device names that are put into each
% * local set's namespace. This will prevent the
% * wrong name to be picked up via a devno, when
% * we really wanted a local device name.
% */
const SKEW = 1;
#ifdef RPC_XDR
%
%/* Start - Avoid duplicate definitions, but get the xdr calls right */
%#if 0
#include "meta_arr.x"
%#endif /* 0 */
%/* End - Avoid duplicate definitions, but get the xdr calls right */
%
#endif /* RPC_XDR */
const MD_DRIVE_RECORD_REVISION = 0x00010000;
#ifdef RPC_HDR
%
%#define MD_DR_ADD 0x00000001U
%#define MD_DR_DEL 0x00000002U
%#define MD_DR_OK 0x80000000U
#endif /* RPC_HDR */
#if !defined(_KERNEL)
struct md_drive_record {
int dr_dbcnt; /* # of replica's */
int dr_dbsize; /* replica size */
};
#else /* _KERNEL */
struct md_drive_record {
int dr_dbcnt; /* # of replica's */
int dr_dbsize; /* replica size */
};
#endif /* !_KERNEL */
#ifdef RPC_HDR
%/*
% * Actions that can be taken on a node record.
% * Used with routine upd_nr_flags.
% */
%
#endif /* RPC_HDR */
struct md_mnnode_record {
};
const MD_MNNODE_RECORD_REVISION = 0x00000100;
const MD_SET_RECORD_REVISION = 0x00010000;
#ifdef RPC_HDR
%
%#define MD_SR_ADD 0x00000001U
%#define MD_SR_DEL 0x00000002U
%#define MD_SR_CHECK 0x00000004U
%#define MD_SR_CVT 0x00000008U
%#define MD_SR_LOCAL 0x00000010U
%#define MD_SR_MB_DEVID 0x10000000U
%#define MD_SR_AUTO_TAKE 0x20000000U
%#define MD_SR_MN 0x40000000U
%#define MD_SR_OK 0x80000000U
%#define MD_SR_STATE_FLAGS (MD_SR_ADD | \
% MD_SR_DEL | \
% MD_SR_CHECK | \
% MD_SR_CVT | \
% MD_SR_OK)
#endif /* RPC_HDR */
#if !defined(_KERNEL)
struct md_set_record {
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
#else /* _KERNEL */
struct md_set_record {
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
#endif /* !_KERNEL */
struct md_mnset_record {
#ifdef RPC_HDR
#endif /* RPC_HDR */
/* md_set_record, */
/* first node always */
/* this node */
};
#ifdef RPC_HDR
%
%#define MD_SETOWNER_NO 0
%#define MD_SETOWNER_YES 1
%#define MD_SETOWNER_NONE 2
#endif /* RPC_HDR */
%
%/* Gate key type */
struct md_setkey_t {
string sk_setname<>;
#ifdef RPC_HDR
struct md_setkey_t *sk_next;
#endif /* RPC_HDR */
};
%
%/* metadevice ID */
%
%/* component ID */
struct comp_t {
};
%
%/* hotspare pool ID */
#ifdef RPC_HDR
%
%#define MD_HSP_NONE ((hsp_t)~0U)
#endif /* RPC_HDR */
%
%/* hotspare ID */
struct hs_t {
};
%
%/* mnum or hsp */
typedef u_int minor_or_hsp_t;
%
%/*
% * name service stuff
% */
const MD_MAXPREFIX = 127;
%
%#define MD_MAX_CTDLEN 64
struct md_name_prefix {
char pre_data[MD_MAXPREFIX];
};
const MD_MAXSUFFIX = 40;
%
struct md_name_suffix {
char suf_data[MD_MAXSUFFIX];
};
struct md_splitname {
};
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
%
%/*
% * Number of bits to represent a setno
% * this gives us all info to define masks and shifts ...
% * Also used for minor #, hsp id, recid mask and shifts.
% */
const MD_BITSSET = 5;
const MD_DEFAULTSETS = 4;
%
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
%
%/*
% * Define a file descriptor for lockfd
% * when the lock is not held.
% */
const MD_NO_LOCK = -2;
%
%/*
% * accumulated setname
% */
struct mdsetname_t {
#ifdef RPC_HDR
int lockfd; /* used by meta_lock_* */
#endif /* RPC_HDR */
};
struct mdsetnamelist_t {
};
%
%/*
% * device name
% */
#ifdef RPC_HDR
%#define MD_FULLNAME_ONLY 0x0
%#define MD_BASICNAME_OK 0x1
%#define MD_BYPASS_DAEMON 0x2
%
%#define MD_SLICE0 0
%#define MD_SLICE6 6
%#define MD_SLICE7 7
%
%#define MD_MAX_PARTS 17
#endif /* RPC_HDR */
struct mdname_t {
#ifdef RPC_HDR
#endif /* RPC_HDR */
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
%/* name structure (old style) */
struct o_mdname_t {
#ifdef RPC_HDR
#endif /* RPC_HDR */
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
struct mdnamelist_t {
};
%
%/*
% * drive name
% */
%/* name types */
enum mdnmtype_t {
MDT_UNKNOWN = 0, /* unknown type */
MDT_ACCES, /* could not access device */
MDT_META, /* metadevice name */
MDT_COMP, /* regular device name */
MDT_FAST_META, /* metadevice name (partial) */
MDT_FAST_COMP /* regular device name (partial) */
};
%/* metadevice types */
enum md_types_t {
MD_UNDEFINED = 0,
};
#ifdef RPC_HDR
%
%/* misc module names */
%#define MD_STRIPE "md_stripe"
%#define MD_MIRROR "md_mirror"
%#define MD_TRANS "md_trans"
%#define MD_HOTSPARES "md_hotspares"
%#define MD_RAID "md_raid"
%#define MD_VERIFY "md_verify"
%#define MD_SP "md_sp"
%#define MD_NOTIFY "md_notify"
#endif /* RPC_HDR */
%/* generic device info */
struct mdgeom_t {
};
%/* generic device info (old style) */
struct o_mdgeom_t {
};
struct mdcinfo_t {
};
struct mdpart_t {
};
%/* partition information (old style) */
struct o_mdpart_t {
};
struct mdvtoc_t {
char *typename; /* disk type (or NULL) */
};
%/* vtoc information (old style) */
struct o_mdvtoc_t {
char *typename; /* disk type (or NULL) */
};
%
%/*
% * List of drivename cnames per side,
% * also the driver name, mnum (for slice 7).
% */
struct mdsidenames_t {
};
struct mddrivename_t {
#ifdef RPC_HDR
/*
* the following string is not used but is left in place so that
* it is not necessary to version the rpc interface that passes
* this structure.
*/
#endif /* RPC_HDR */
int errnum; /* errno for type == MDT_ACCES */
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
%/*
% * old version of mddrivename_t that contains an old version of mdgeom_t,
% * mdvtoc_t and mdname_t (prefixed _o).
% */
struct o_mddrivename_t {
#ifdef RPC_HDR
#endif /* RPC_HDR */
int errnum; /* errno for type == MDT_ACCES */
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
struct mddrivenamelist_t {
};
%
%/*
% * replica struct
% */
typedef u_int replica_flags_t;
#ifdef RPC_HDR
%
%
%/*
% * These are used in de_flags only
% * Do not change these values, they are stored on-disk
% */
%/* used by metadb(1m) for printing */
%#define MDDB_FLAGS_STRING "RSFDMaWm pc luo tBr"
%
%/*
% * See meta_prbits() in SUNWmd/lib/libmeta/meta_print.c for a description of
% * the way this is used
% */
%#define MDDB_F_BITNAMES "\020\001EREAD\002TOOSMALL\003EFMT\004EDATA" \
% "\005EMASTER\006ACTIVE\007EWRITE\010MASTER" \
% "\011SUSPECT\012OPT\013PTCHED\014IOCTL" \
% "\015GOTTEN\016LOCACC\017UP2DATE\020OLDACT" \
% "\021DELETED\022TAGDATA\023BADTAG\024NORELOC"
%
#endif /* RPC_HDR */
/*
* Refering to r_blkno and r_nblk:
* A replica will always be smaller than 1 Terabyte, so no need to
* change the ondisk structure to 64 bits.
*/
struct md_replica_t {
char r_driver_name[MD_MAXDRVNM];
char r_minor_name[MDDB_MINOR_NAME_MAX];
};
struct md_replica_recerr_t {
int r_li;
int r_flags;
char r_driver_name[MD_MAXDRVNM];
};
struct md_replicalist_t {
};
%
%/*
% */
struct md_drive_desc {
int dd_dbcnt; /* # of replicas */
int dd_dbsize; /* size of replica */
};
%
%/*
% */
struct o_md_drive_desc {
int dd_dbcnt; /* # of replicas */
int dd_dbsize; /* size of replica */
};
struct md_mnnode_desc {
/* nodename */
};
struct md_set_desc {
/* for !MN_disksets */
/* for MN_disksets */
};
%/*
% * Defines to determine if diskset is a Multinode diskset.
% * The sd_flags field in the md_set_desc structure is never manipulated
% * directly but is always a copy of the set record's sr_flags field, so
% * the same define (MD_SR_MN) can be used for both sd_flags and sr_flags.
% * The set record is of the structure type md_set_record if a regular diskset
% * or type md_mnset_record for a Multinode diskset.
%*/
%/*
% * Define to determine if diskset is a Auto-Take diskset.
%*/
%/*
% * Define to set the alive flag for a node. A node is alive if it
% * is in the multi_node membership list.
% */
%#define MD_MN_NODE_ALIVE 0x0001
%/*
% * Define to set the own flag for a node. A node is an owner of the diskset
% * if that node has snarf'd in the mddb.
% */
%#define MD_MN_NODE_OWN 0x0002
%/*
% * Defines to set the add, delete and ok states of a node. The add state is
% * set at the beginning of the addition of a node to a diskset. The
% * delete state is set at the beginning of a deletion of a node from a diskset.
% * The OK state is set (and the add state reset) when that node is
% * functional in the diskset.
% * Rollback join flag is used on an error condition when deleting the last
% * disk from a diskset. rpc.metad should never see this flag.
% * NOSET flag is used on an error condition during a reconfig cycle when
% * the set has been removed from this node. rpc.metad should just ignore
% * this flag.
% */
%#define MD_MN_NODE_ADD 0x0004
%#define MD_MN_NODE_DEL 0x0008
%#define MD_MN_NODE_OK 0x0010
%#define MD_MN_NODE_RB_JOIN 0x0020
%#define MD_MN_NODE_NOSET 0x0040
%/*
% * Define for invalid node id. Used specifically to set mn set record
% * master nodeid to invalid when no master can be determined.
% */
%
%/*
% * set description (old style)
% */
struct o_md_set_desc {
};
%
%/*
% * hotspare pool name
% */
struct mdhspname_t {
#ifdef RPC_HDR
#endif /* RPC_HDR */
};
struct mdhspnamelist_t {
};
%
%/*
% * generic metadevice descriptions for status and init
% */
%
%/*
% * following used with un_status
% * bottom 16 bits are global definitions
% * top 16 bits are defined by sub device
% */
typedef u_int md_status_t;
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
%
%/*
% * following are used with un_parent
% * MD_NO_PARENT - Not a sub-device.
% * MD_MULTI_PARENT - A sub-device with one or more parents, like a log.
% * other - A sub-device with only one parent, like a submirror.
% * The number is the parent's unit number.
% */
typedef unit_t md_parent_t;
#ifdef RPC_HDR
%
%#define MD_NO_PARENT 0xffffffffu
%#define MD_MULTI_PARENT 0xfffffffeu
%#define MD_HAS_PARENT(p) ((p) != MD_NO_PARENT)
#endif /* RPC_HDR */
typedef u_int md_stackcap_t;
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
/* common to all metadevices */
struct md_common_t {
};
%
%/*
% * stripe
% */
/*
* ioctl stuff
*/
struct ms_params_t {
int change_hsp_id;
};
/*
* unit structure
*/
typedef u_int comp_state_t;
#ifdef RPC_HDR
%
%#define CS_OKAY 0x0001
%#define CS_ERRED 0x0002
%#define CS_RESYNC 0x0004
%#define CS_LAST_ERRED 0x0008
%
%/* interlace values (in bytes) */
#endif /* RPC_HDR */
struct md_comp_t {
};
struct md_row_t {
};
struct md_stripe_t {
};
%
%/*
% * soft partition
% */
typedef uint64_t xsp_offset_t;
typedef uint64_t xsp_length_t;
typedef u_int xsp_status_t;
%
%#define SP_INIT 0x0001
%#define SP_OK 0x0002
%#define SP_LASTERR 0x0004
%
/*
* unit structure
*/
struct md_sp_ext_t {
};
struct md_sp_t {
md_sp_ext_t ext<>;
};
%
%/*
% * mirror
% */
/*
* ioctl stuff
*/
enum mm_wr_opt_t {
WR_PARALLEL = 0, /* write submirrors in parallel */
WR_SERIAL /* write submirrors one at a time */
};
enum mm_rd_opt_t {
RD_LOAD_BAL = 0, /* read submirrors roundrobin */
RD_GEOMETRY, /* read submirrors geometrically */
RD_FIRST /* read first submirror */
};
typedef short mm_pass_num_t;
const MD_PASS_DEFAULT = 1;
const MD_PASS_MAX = 9;
struct mm_params_t {
int change_read_option;
int change_write_option;
int change_pass_num;
};
/*
* unit structure
*/
typedef u_int sm_state_t;
#ifdef RPC_HDR
%
%#define SMS_UNUSED 0x0000
%#define SMS_RUNNING 0x0001
%#define SMS_COMP_ERRED 0x0002
%#define SMS_COMP_RESYNC 0x0004
%#define SMS_ATTACHED 0x0008
%#define SMS_ATTACHED_RESYNC 0x0010
%#define SMS_OFFLINE 0x0020
%#define SMS_OFFLINE_RESYNC 0x0040
%#define SMS_ALL_ERRED 0x0080
%#define SMS_INUSE (0xffff)
%#define SMS_IGNORE 0x4000
#endif /* RPC_HDR */
typedef u_int sm_flags_t;
#ifdef RPC_HDR
%
%#define MD_SM_RESYNC_TARGET 0x0001
%#define MD_SM_FAILFAST 0x0002
#endif /* RPC_HDR */
struct md_submirror_t {
};
#ifdef RPC_HDR
%
%#define MD_UN_RESYNC_ACTIVE 0x00010000
%#define MD_UN_WAR 0x00020000
%#define MD_UN_OFFLINE_SM 0x00040000
%#define MD_UN_OPT_NOT_DONE 0x00080000
%#define MD_UN_RESYNC_CANCEL 0x00100000
%#define MD_UN_REPLAYED 0x00200000
%#define MD_UN_RENAMING 0x00400000
%#define MD_UN_MOD_INPROGRESS (MD_UN_RESYNC_ACTIVE | \
% MD_UN_OPT_NOT_DONE | \
#endif /* RPC_HDR */
const NMIRROR = 4;
struct md_mirror_t {
int percent_done;
int percent_dirty;
};
%
%/*
% * trans
% */
%/*
% * unit structure
% */
typedef u_int mt_flags_t;
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
typedef u_int mt_l_error_t;
#ifdef RPC_HDR
%
#endif /* RPC_HDR */
struct md_trans_t {
};
%
%/*
% * RAID
% */
/*
* ioctl stuff
*/
struct mr_params_t {
int change_hsp_id;
};
/*
* unit structure
*/
enum rcs_state_t {
RCS_UNUSED = 0x0,
RCS_INIT = 0x1,
RCS_OKAY = 0x2,
RCS_ERRED = 0x4,
RCS_LAST_ERRED = 0x8,
RCS_RESYNC = 0x10,
RCS_INIT_ERRED = 0x20,
RCS_REGEN = 0x40
};
typedef u_int rcs_flags_t;
#ifdef RPC_HDR
%
%#define MD_RAID_DEV_ISOPEN 0x00001
%#define MD_RAID_ALT_ISOPEN 0x00002
%#define MD_RAID_RESYNC 0x00004
%#define MD_RAID_RESYNC_ERRED 0x00008
%#define MD_RAID_FORCE_REPLACE 0x00010
%#define MD_RAID_WRITE_ALT 0x00020
%#define MD_RAID_DEV_ERRED 0x00040
%#define MD_RAID_COPY_RESYNC 0x00080
%#define MD_RAID_REGEN_RESYNC 0x00100
%#define MD_RAID_DEV_PROBEOPEN 0x00200
%#define MD_RAID_HAS_LABEL 0x40000
#endif /* RPC_HDR */
struct md_raidcol_t {
};
enum rus_state_t {
RUS_UNUSED = 0x0,
RUS_INIT = 0x1,
RUS_OKAY = 0x2,
RUS_ERRED = 0x4,
RUS_LAST_ERRED = 0x8,
RUS_DOI = 0x10,
RUS_REGEN = 0x20
};
typedef u_int md_riflags_t;
#ifdef RPC_HDR
%
%#define MD_RI_INPROGRESS 0x0001
%#define MD_GROW_INPROGRESS 0x0002
%#define MD_RI_BLOCK 0x0004
%#define MD_RI_UNBLOCK 0x0008
%#define MD_RI_KILL 0x0010
%#define MD_RI_BLOCK_OWNER 0x0020
%#define MD_RI_SHUTDOWN 0x0040
%#define MD_RI_NO_WAIT 0x0080
%#define MD_RI_RESYNC_FORCE_MNSTART 0x0100
#endif /* RPC_HDR */
const MD_RAID_MIN = 3;
struct md_raid_t {
int percent_dirty;
int percent_done;
int pw_count;
md_raidcol_t cols<>;
};
%
%/*
% * shared
% */
/*
* unit structure
*/
struct md_shared_t {
};
%
%/*
% * hotspare
% */
/*
* ioctl stuff
*/
enum hotspare_states_t {
};
/*
* unit structure
*/
struct md_hs_t {
};
struct md_hsp_t {
};
%
%/*
% * specific error info
% */
%
%/*
% * simple errors
% */
enum md_void_errno_t {
MDE_NONE = 0,
MDE_NO_SET, /* no such set */
MDE_SET_DIFF, /* setname changed on command line */
MDE_BAD_RD_OPT, /* bad mirror read option */
MDE_BAD_WR_OPT, /* bad mirror write option */
MDE_BAD_PASS_NUM, /* bad mirror pass number */
MDE_BAD_INTERLACE, /* bad stripe interlace */
MDE_NO_HSPS, /* couldn't find any hotspare pools */
MDE_NOTENOUGH_DB, /* Too few replicas */
MDE_DELDB_NOTALLOWED, /* last replica in ds cannot be del in metadb */
MDE_DEL_VALIDDB_NOTALLOWED, /* last valid replica cannot be del */
MDE_SYSTEM_FILE, /* /etc/system file error */
MDE_MDDB_FILE, /* /etc/lvm/mddb.cf file error */
MDE_MDDB_CKSUM, /* /etc/lvm/mddb.cf checksum error */
MDE_VFSTAB_FILE, /* /etc/vfstab file error */
MDE_NOSLICE, /* metaslicename() with sliceno to big */
MDE_SYNTAX, /* metainit syntax error */
MDE_OPTION, /* metainit options error */
MDE_TAKE_OWN, /* take ownership failed */
MDE_NOT_DRIVENAME, /* not in drivename syntax */
MDE_RESERVED, /* device is reserved by another host */
MDE_DVERSION, /* driver version out of sync */
MDE_MVERSION, /* MDDB version out of sync */
MDE_TESTERROR, /* Test Error Message */
MDE_BAD_ORIG_NCOL, /* bad RAID original column count */
MDE_RAID_INVALID, /* attempt to use -k on invalid device */
MDE_MED_ERROR, /* mediator error */
MDE_TOOMANYMED, /* Too many mediators specified */
MDE_NOMED, /* No mediators */
MDE_ONLYNODENAME, /* Only the nodename is needed */
MDE_RAID_BAD_PW_CNT, /* bad prewrite count specified */
MDE_DEVID_TOOBIG, /* Devid size is greater than allowed */
MDE_NOPERM, /* No permission - not root */
MDE_NODEVID, /* No device id for given devt */
MDE_NOROOT, /* No root in /etc/mnttab */
MDE_EOF_TRANS, /* trans logging eof'd */
MDE_BAD_RESYNC_OPT, /* bad mirror resync option */
MDE_NOT_MN, /* option only valid within a multi-node set */
MDE_ABR_SET, /* invalid operation for ABR mirror */
MDE_INVAL_MNOP, /* Invalid operation on MN diskset */
MDE_MNSET_NOTRANS, /* Trans metadevice not supported in MN set */
MDE_MNSET_NORAID, /* RAID metadevice not supported in MN set */
MDE_FORCE_DEL_ALL_DRV, /* Must use -f flag to delete all drives */
MDE_STRIPE_TRUNC_SINGLE, /* single component stripe truncation */
MDE_STRIPE_TRUNC_MULTIPLE, /* multiple component stripe trun */
MDE_SMF_FAIL, /* service management facility error */
MDE_SMF_NO_SERVICE /* service not enabled in SMF */
};
struct md_void_error_t {
};
%
%/*
% * system errors
% */
struct md_sys_error_t {
int errnum;
};
%
%/*
% * RPC errors
% */
struct md_rpc_error_t {
};
%
%/*
% * device errors
% */
enum md_dev_errno_t {
MDE_INVAL_HS = 1,
MDE_NO_DB, /* Replica not on device given */
MDE_REPCOMP_INVAL, /* replica slice not allowed in "set" metadevs */
MDE_REPCOMP_ONLY, /* only replica slice diskset replicas */
MDE_INV_ROOT, /* Invalid root device for this operation */
MDE_MULTNM, /* Multiple entries for device in namespace */
MDE_TOO_MANY_PARTS, /* dev has more than MD_MAX_PARTS partitions */
MDE_REPART_REPLICA, /* replica slice would move with repartitioning */
MDE_IS_DUMP /* device already in use as dump device */
};
struct md_dev_error_t {
};
%
%/*
% * overlap errors
% */
enum md_overlap_errno_t {
MDE_OVERLAP_MOUNTED = 1,
};
%
#if !defined(_KERNEL)
struct md_overlap_error_t {
};
#else
struct md_overlap_error_t {
};
#endif /* !_KERNEL */
%
%/*
% * use errors
% */
enum md_use_errno_t {
MDE_IS_MOUNTED = 1,
};
%
#if !defined(_KERNEL)
struct md_use_error_t {
};
#else
struct md_use_error_t {
};
#endif
%
%/*
% * metadevice errors
% */
enum md_md_errno_t {
MDE_INVAL_UNIT = 1,
};
struct md_md_error_t {
};
%
%/*
% * component errors
% */
enum md_comp_errno_t {
MDE_CANT_FIND_COMP = 1,
};
struct md_comp_error_t {
};
%
%/*
% * hotspare pool errors
% */
enum md_hsp_errno_t {
};
struct md_hsp_error_t {
};
%
%/*
% * hotspare errors
% */
enum md_hs_errno_t {
MDE_HS_RESVD = 1,
};
struct md_hs_error_t {
};
%
%/*
% * MDDB errors
% */
enum md_mddb_errno_t {
MDE_TOOMANY_REPLICAS = 1,
};
%
struct md_mddb_error_t {
};
%
%/*
% * diskset (ds) errors
% */
enum md_ds_errno_t {
MDE_DS_DUPHOST = 1,
};
%
#if !defined(_KERNEL)
struct md_ds_error_t {
};
#else /* _KERNEL */
struct md_ds_error_t {
};
#endif /* !_KERNEL */
%
%/*
% * fundamental error type
% */
enum md_errclass_t {
MDEC_VOID = 0, /* simple error */
MDEC_SYS, /* system errno */
MDEC_RPC, /* RPC errno */
MDEC_DEV, /* device error */
MDEC_USE, /* use error */
MDEC_MD, /* metadevice error */
MDEC_COMP, /* component error */
MDEC_HSP, /* hotspare pool error */
MDEC_HS, /* hotspare error */
MDEC_MDDB, /* metadevice database error */
MDEC_DS, /* diskset error */
MDEC_OVERLAP /* overlap error */
};
%
%/*
% * error info
% */
union md_error_info_t
switch (md_errclass_t errclass) {
case MDEC_VOID:
case MDEC_SYS:
case MDEC_RPC:
case MDEC_DEV:
case MDEC_USE:
case MDEC_MD:
case MDEC_COMP:
case MDEC_HSP:
case MDEC_HS:
case MDEC_MDDB:
case MDEC_DS:
case MDEC_OVERLAP:
};
%
#if !defined(_KERNEL)
struct md_error_t {
};
#else /* _KERNEL */
struct md_error_t {
};
#endif /* !_KERNEL */
%#pragma pack()
%#endif
#ifdef RPC_HDR
%
%/*
% * Null error constant
% */
#endif /* RPC_HDR */
#ifdef RPC_XDR
%/*
% * Constant null error struct.
% */
#endif /* RPC_XDR */
#ifdef RPC_HDR
%
%/*
% * External reference to constant null error struct. (declared in mdiox_xdr.c)
% */
%extern const md_error_t mdnullerror;
%
%/*
% * External declarations
% */
%
%
%
%
#ifdef _KERNEL
%
% md_dev64_t dev);
%
#else /* ! _KERNEL */
%
% char *extra);
% char *name);
% char *name);
%
%
#endif /* ! _KERNEL */
#endif /* RPC_HDR */
/*
* common unit structure
*/
struct mdc_unit {
int un_parent_res; /* parent reserve index */
int un_child_res; /* child reserve index */
};
typedef struct mdc_unit mdc_unit_t;
/*
* For old 32 bit format use only
*/
%#pragma pack(4)
%#endif
struct mdc_unit32_od {
int un_parent_res;
int un_child_res;
};
typedef struct mdc_unit32_od mdc_unit32_od_t;
struct md_unit {
mdc_unit_t c; /* common stuff */
};
enum sp_status_t {
MD_SP_CREATEPEND, /* soft partition creation in progress */
MD_SP_GROWPEND, /* attach operation in progress */
MD_SP_DELPEND, /* delete operation in progress */
MD_SP_OK, /* soft partition is stable */
MD_SP_ERR, /* soft partition is errored */
MD_SP_RECOVER, /* recovery operation in progess */
MD_SP_LAST /* always the last entry */
};
/* soft partition offsets and lengths are specified in sectors */
typedef u_longlong_t sp_ext_offset_t;
typedef u_longlong_t sp_ext_length_t;
struct mp_ext {
};
/*
* mp_unit32_od is for old 32 bit format only
*/
struct mp_unit32_od {
mdc_unit32_od_t c; /* common unit structure */
/* extent array. NOTE: sized dynamically! */
};
typedef struct mp_unit32_od mp_unit32_od_t;
/*
* softpart unit structure
*/
struct mp_unit {
mdc_unit_t c; /* common unit structure */
/* extent array. NOTE: sized dynamically! */
};
/*
* ioctl structures used when passing ioctls via rpc.mdcommd
*/
struct md_driver {
char md_drivername[MD_MAXDRVNM];
};
typedef struct md_driver md_driver_t;
struct md_set_params {
int options;
};
typedef struct md_set_params md_set_params_t;
%#pragma pack()
%#endif