Add support for Data Digest
This commit is contained in:
@@ -61,6 +61,13 @@ struct iscsi_in_pdu {
|
||||
|
||||
long long data_pos;
|
||||
unsigned char *data;
|
||||
|
||||
/*
|
||||
* Some data structures wrt Data Digest (if negociated)
|
||||
*/
|
||||
unsigned char data_digest_buf[ISCSI_DIGEST_SIZE];
|
||||
int received_data_digest_bytes;
|
||||
uint32_t calculated_data_digest;
|
||||
};
|
||||
void iscsi_free_iscsi_in_pdu(struct iscsi_context *iscsi, struct iscsi_in_pdu *in);
|
||||
|
||||
@@ -105,6 +112,8 @@ struct iscsi_context {
|
||||
uint32_t statsn;
|
||||
enum iscsi_header_digest want_header_digest;
|
||||
enum iscsi_header_digest header_digest;
|
||||
enum iscsi_data_digest want_data_digest;
|
||||
enum iscsi_data_digest data_digest;
|
||||
|
||||
int fd;
|
||||
int is_connected;
|
||||
@@ -272,6 +281,8 @@ struct iscsi_pdu {
|
||||
struct iscsi_scsi_cbdata scsi_cbdata;
|
||||
time_t scsi_timeout;
|
||||
uint32_t expxferlen;
|
||||
|
||||
uint32_t calculated_data_digest;
|
||||
};
|
||||
|
||||
struct iscsi_pdu *iscsi_allocate_pdu(struct iscsi_context *iscsi,
|
||||
@@ -350,6 +361,9 @@ void* iscsi_szmalloc(struct iscsi_context *iscsi, size_t size);
|
||||
void iscsi_sfree(struct iscsi_context *iscsi, void* ptr);
|
||||
|
||||
uint32_t crc32c(uint8_t *buf, int len);
|
||||
void crc32c_init(uint32_t *crc_ptr);
|
||||
uint32_t crc32c_chain(uint32_t crc, uint8_t *buf, int len);
|
||||
uint32_t crc32c_chain_done(uint32_t crc);
|
||||
|
||||
struct scsi_task *iscsi_scsi_get_task_from_pdu(struct iscsi_pdu *pdu);
|
||||
|
||||
|
||||
@@ -335,6 +335,29 @@ enum iscsi_header_digest {
|
||||
EXTERN int iscsi_set_header_digest(struct iscsi_context *iscsi,
|
||||
enum iscsi_header_digest header_digest);
|
||||
|
||||
/*
|
||||
* Types of data digest we support. Default is NONE
|
||||
*/
|
||||
enum iscsi_data_digest {
|
||||
ISCSI_DATA_DIGEST_NONE = 0,
|
||||
ISCSI_DATA_DIGEST_NONE_CRC32C = 1,
|
||||
ISCSI_DATA_DIGEST_CRC32C_NONE = 2,
|
||||
ISCSI_DATA_DIGEST_CRC32C = 3,
|
||||
ISCSI_DATA_DIGEST_LAST = ISCSI_DATA_DIGEST_CRC32C
|
||||
};
|
||||
|
||||
/*
|
||||
* Set the desired data digest for a scsi context.
|
||||
* Data digest can only be set/changed before the context
|
||||
* is logged in to the target.
|
||||
*
|
||||
* Returns:
|
||||
* 0: success
|
||||
* <0: error
|
||||
*/
|
||||
EXTERN int iscsi_set_data_digest(struct iscsi_context *iscsi,
|
||||
enum iscsi_data_digest data_digest);
|
||||
|
||||
/*
|
||||
* Specify the username and password to use for chap authentication
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user