123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- /* version - 1.0 */
- #ifndef MPATH_PERSIST_LIB_H
- #define MPATH_PERSIST_LIB_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <inttypes.h>
- #define MPATH_MAX_PARAM_LEN 8192
- #define MPATH_MX_TIDS 32 /* Max number of transport ids"*/
- #define MPATH_MX_TID_LEN 256 /* Max length of transport id */
- /* PRIN Service Actions */
- #define MPATH_PRIN_RKEY_SA 0x00 /* READ KEYS SA*/
- #define MPATH_PRIN_RRES_SA 0x01 /* READ RESERVATION SA*/
- #define MPATH_PRIN_RCAP_SA 0x02 /* REPORT CAPABILITIES SA*/
- #define MPATH_PRIN_RFSTAT_SA 0x03 /* READ FULL STATUS SA*/
- /* PROUT Service Actions */
- #define MPATH_PROUT_REG_SA 0x00 /* REGISTER SA */
- #define MPATH_PROUT_RES_SA 0x01 /* RESERVE SA*/
- #define MPATH_PROUT_REL_SA 0x02 /* RELEASE SA*/
- #define MPATH_PROUT_CLEAR_SA 0x03 /* CLEAR SA*/
- #define MPATH_PROUT_PREE_SA 0x04 /* PREEMPT SA*/
- #define MPATH_PROUT_PREE_AB_SA 0x05 /* PREEMPT AND ABORT SA*/
- #define MPATH_PROUT_REG_IGN_SA 0x06 /* REGISTER AND IGNORE EXISTING KEY SA*/
- #define MPATH_PROUT_REG_MOV_SA 0x07 /* REGISTER AND MOVE SA*/
- #define MPATH_LU_SCOPE 0x00 /* LU_SCOPE */
- /* Persistent reservations type */
- #define MPATH_PRTPE_WE 0x01 /* Write Exclusive */
- #define MPATH_PRTPE_EA 0x03 /* Exclusive Access*/
- #define MPATH_PRTPE_WE_RO 0x05 /* WriteExclusive Registrants Only */
- #define MPATH_PRTPE_EA_RO 0x06 /* Exclusive Access. Registrants Only*/
- #define MPATH_PRTPE_WE_AR 0x07 /* Write Exclusive. All Registrants*/
- #define MPATH_PRTPE_EA_AR 0x08 /* Exclusive Access. All Registrants */
- /* PR RETURN_STATUS */
- #define MPATH_PR_SKIP -1 /* skipping this path */
- #define MPATH_PR_SUCCESS 0
- #define MPATH_PR_SYNTAX_ERROR 1 /* syntax error or invalid parameter */
- /* status for check condition */
- #define MPATH_PR_SENSE_NOT_READY 2 /* [sk,asc,ascq: 0x2,*,*] */
- #define MPATH_PR_SENSE_MEDIUM_ERROR 3 /* [sk,asc,ascq: 0x3,*,*] */
- #define MPATH_PR_SENSE_HARDWARE_ERROR 4 /* [sk,asc,ascq: 0x4,*,*] */
- #define MPATH_PR_ILLEGAL_REQ 5 /* [sk,asc,ascq: 0x5,*,*]*/
- #define MPATH_PR_SENSE_UNIT_ATTENTION 6 /* [sk,asc,ascq: 0x6,*,*] */
- #define MPATH_PR_SENSE_INVALID_OP 7 /* [sk,asc,ascq: 0x5,0x20,0x0]*/
- #define MPATH_PR_SENSE_ABORTED_COMMAND 8 /* [sk,asc,ascq: 0xb,*,*] */
- #define MPATH_PR_NO_SENSE 9 /* [sk,asc,ascq: 0x0,*,*] */
- #define MPATH_PR_SENSE_MALFORMED 10 /* Response to SCSI command malformed */
- #define MPATH_PR_RESERV_CONFLICT 11 /* Reservation conflict on the device */
- #define MPATH_PR_FILE_ERROR 12 /* file (device node) problems(e.g. not found)*/
- #define MPATH_PR_DMMP_ERROR 13 /* DMMP related error.(e.g Error in getting dm info */
- #define MPATH_PR_THREAD_ERROR 14 /* pthreads error (e.g. unable to create new thread) */
- #define MPATH_PR_OTHER 15 /*other error/warning has occurred(transport
- or driver error) */
- /* PR MASK */
- #define MPATH_F_APTPL_MASK 0x01 /* APTPL MASK*/
- #define MPATH_F_ALL_TG_PT_MASK 0x04 /* ALL_TG_PT MASK*/
- #define MPATH_F_SPEC_I_PT_MASK 0x08 /* SPEC_I_PT MASK*/
- #define MPATH_PR_TYPE_MASK 0x0f /* TYPE MASK*/
- #define MPATH_PR_SCOPE_MASK 0xf0 /* SCOPE MASK*/
- /*Transport ID PROTOCOL IDENTIFIER values */
- #define MPATH_PROTOCOL_ID_FC 0x00
- #define MPATH_PROTOCOL_ID_ISCSI 0x05
- #define MPATH_PROTOCOL_ID_SAS 0x06
- /*Transport ID FORMATE CODE */
- #define MPATH_WWUI_DEVICE_NAME 0x00 /* World wide unique initiator device name */
- #define MPATH_WWUI_PORT_IDENTIFIER 0x40 /* World wide unique initiator port identifier */
- extern unsigned int mpath_mx_alloc_len;
- struct prin_readdescr
- {
- uint32_t prgeneration;
- uint32_t additional_length; /* The value should be either 0 or divisible by 8.
- 0 indicates no registered reservation key. */
- uint8_t key_list[MPATH_MAX_PARAM_LEN];
- };
- struct prin_resvdescr
- {
- uint32_t prgeneration;
- uint32_t additional_length; /* The value should be either 0 or 10h. 0 indicates
- there is no reservation held. 10h indicates the
- key[8] and scope_type have valid values */
- uint8_t key[8];
- uint32_t _obsolete;
- uint8_t _reserved;
- uint8_t scope_type; /* Use PR SCOPE AND TYPE MASK specified above */
- uint16_t _obsolete1;
- };
- struct prin_capdescr
- {
- uint16_t length;
- uint8_t flags[2];
- uint16_t pr_type_mask;
- uint16_t _reserved;
- };
- struct transportid
- {
- uint8_t format_code;
- uint8_t protocol_id;
- union {
- uint8_t n_port_name[8]; /* FC transport*/
- uint8_t sas_address[8]; /* SAS transport */
- uint8_t iscsi_name[256]; /* ISCSI transport */
- };
- };
- struct prin_fulldescr
- {
- uint8_t key[8];
- uint8_t flag; /* All_tg_pt and reservation holder */
- uint8_t scope_type; /* Use PR SCOPE AND TYPE MASK specified above.
- Meaningful only for reservation holder */
- uint16_t rtpi;
- struct transportid trnptid;
- };
- struct print_fulldescr_list
- {
- uint32_t prgeneration;
- uint32_t number_of_descriptor;
- uint8_t private_buffer[MPATH_MAX_PARAM_LEN]; /*Private buffer for list storage*/
- struct prin_fulldescr *descriptors[];
- };
- struct prin_resp
- {
- union
- {
- struct prin_readdescr prin_readkeys; /* for PRIN read keys SA*/
- struct prin_resvdescr prin_readresv; /* for PRIN read reservation SA*/
- struct prin_capdescr prin_readcap; /* for PRIN Report Capabilities SA*/
- struct print_fulldescr_list prin_readfd; /* for PRIN read full status SA*/
- }prin_descriptor;
- };
- struct prout_param_descriptor { /* PROUT parameter descriptor */
- uint8_t key[8];
- uint8_t sa_key[8];
- uint32_t _obsolete;
- uint8_t sa_flags;
- uint8_t _reserved;
- uint16_t _obsolete1;
- uint8_t private_buffer[MPATH_MAX_PARAM_LEN]; /*private buffer for list storage*/
- uint32_t num_transportid; /* Number of Transport ID listed in trnptid_list[]*/
- struct transportid *trnptid_list[];
- };
- /* Function declarations */
- /*
- * DESCRIPTION :
- * Initialize device mapper multipath configuration. This function must be invoked first
- * before performing reservation management functions.
- * RESTRICTIONS:
- *
- * RETURNS: struct config ->Success, NULL->Failed.
- */
- extern struct config * mpath_lib_init (void);
- /*
- * DESCRIPTION :
- * Release device mapper multipath configuration. This function must be invoked after
- * performing reservation management functions.
- * RESTRICTIONS:
- *
- * RETURNS: 0->Success, 1->Failed.
- */
- extern int mpath_lib_exit (struct config *conf);
- /*
- * DESCRIPTION :
- * This function sends PRIN command to the DM device and get the response.
- *
- * @fd: The file descriptor of a multipath device. Input argument.
- * @rq_servact: PRIN command service action. Input argument
- * @resp: The response from PRIN service action. The resp is a struct specified above. The caller should
- * manage the memory allocation of this struct
- * @noisy: Turn on debugging trace: Input argument. 0->Disable, 1->Enable
- * @verbose: Set verbosity level. Input argument. value:[0-3]. 0->disabled, 3->Max verbose
- *
- * RESTRICTIONS:
- *
- * RETURNS: MPATH_PR_SUCCESS if PR command successful else returns any of the status specified
- * above in RETURN_STATUS.
- *
- */
- extern int mpath_persistent_reserve_in (int fd, int rq_servact, struct prin_resp *resp,
- int noisy, int verbose);
- /*
- * DESCRIPTION :
- * This function is like mpath_persistent_reserve_in(), except that it doesn't call
- * mpath_persistent_reserve_init_vecs() and mpath_persistent_reserve_free_vecs()
- * before and after the actual PR call.
- */
- extern int __mpath_persistent_reserve_in(int fd, int rq_servact,
- struct prin_resp *resp, int noisy);
- /*
- * DESCRIPTION :
- * This function sends PROUT command to the DM device and get the response.
- *
- * @fd: The file descriptor of a multipath device. Input argument.
- * @rq_servact: PROUT command service action. Input argument
- * @rq_scope: Persistent reservation scope. The value should be always LU_SCOPE (0h).
- * @rq_type: Persistent reservation type. The valid values of persistent reservation types are
- * 5h (Write exclusive - registrants only)
- * 6h (Exclusive access - registrants only)
- * 7h (Write exclusive - All registrants)
- * 8h (Exclusive access - All registrants).
- * @paramp: PROUT command parameter data. The paramp is a struct which describes PROUT
- * parameter list. The caller should manage the memory allocation of this struct.
- * @noisy: Turn on debugging trace: Input argument.0->Disable, 1->Enable.
- * @verbose: Set verbosity level. Input argument. value:0 to 3. 0->disabled, 3->Max verbose
- *
- * RESTRICTIONS:
- *
- * RETURNS: MPATH_PR_SUCCESS if PR command successful else returns any of the status specified
- * above in RETURN_STATUS.
- */
- extern int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
- unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy,
- int verbose);
- /*
- * DESCRIPTION :
- * This function is like mpath_persistent_reserve_out(), except that it doesn't call
- * mpath_persistent_reserve_init_vecs() and mpath_persistent_reserve_free_vecs()
- * before and after the actual PR call.
- */
- extern int __mpath_persistent_reserve_out( int fd, int rq_servact, int rq_scope,
- unsigned int rq_type, struct prout_param_descriptor *paramp,
- int noisy);
- /*
- * DESCRIPTION :
- * This function allocates data structures and performs basic initialization and
- * device discovery for later calls of __mpath_persistent_reserve_in() or
- * __mpath_persistent_reserve_out().
- * @verbose: Set verbosity level. Input argument. value:0 to 3. 0->disabled, 3->Max verbose
- *
- * RESTRICTIONS:
- *
- * RETURNS: MPATH_PR_SUCCESS if successful else returns any of the status specified
- * above in RETURN_STATUS.
- */
- int mpath_persistent_reserve_init_vecs(int verbose);
- /*
- * DESCRIPTION :
- * This function frees data structures allocated by
- * mpath_persistent_reserve_init_vecs().
- */
- void mpath_persistent_reserve_free_vecs(void);
- #ifdef __cplusplus
- }
- #endif
- #endif /*MPATH_PERSIST_LIB_H*/
|