[BACK]Return to iscsi.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / dist / iscsi / include

File: [cvs.NetBSD.org] / src / dist / iscsi / include / Attic / iscsi.h (download)

Revision 1.4, Mon Nov 12 23:25:40 2007 UTC (16 years, 5 months ago) by agc
Branch: MAIN
CVS Tags: yamt-pf42-baseX, yamt-pf42-base4, yamt-pf42-base3, yamt-pf42-base2, yamt-pf42-base, yamt-pf42, wrstuden-revivesa-base-3, wrstuden-revivesa-base-2, wrstuden-revivesa-base-1, wrstuden-revivesa-base, wrstuden-revivesa, netbsd-5-base, netbsd-5-2-RELEASE, netbsd-5-2-RC1, netbsd-5-2-3-RELEASE, netbsd-5-2-2-RELEASE, netbsd-5-2-1-RELEASE, netbsd-5-2, netbsd-5-1-RELEASE, netbsd-5-1-RC4, netbsd-5-1-RC3, netbsd-5-1-RC2, netbsd-5-1-RC1, netbsd-5-1-5-RELEASE, netbsd-5-1-4-RELEASE, netbsd-5-1-3-RELEASE, netbsd-5-1-2-RELEASE, netbsd-5-1-1-RELEASE, netbsd-5-1, netbsd-5-0-RELEASE, netbsd-5-0-RC4, netbsd-5-0-RC3, netbsd-5-0-RC2, netbsd-5-0-RC1, netbsd-5-0-2-RELEASE, netbsd-5-0-1-RELEASE, netbsd-5-0, netbsd-5, mjf-devfs2-base, mjf-devfs2, matt-nb5-pq3-base, matt-nb5-pq3, matt-nb5-mips64-u2-k2-k4-k7-k8-k9, matt-nb5-mips64-u1-k1-k5, matt-nb5-mips64-premerge-20101231, matt-nb5-mips64-premerge-20091211, matt-nb5-mips64-k15, matt-nb5-mips64, matt-nb4-mips64-k7-u2a-k9b, matt-mips64-base2, matt-armv6-nbase, matt-armv6-base, keiichi-mipv6-base, keiichi-mipv6, jym-xensuspend-nbase, jym-xensuspend-base, jym-xensuspend, hpcarm-cleanup-nbase, hpcarm-cleanup-base, cube-autoconf-base, cube-autoconf
Changes since 1.3: +1 -1 lines

Rename include/util.h to include/iscsiutil.h to avoid a nameclash
with /usr/include/util.h.

/*
 * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By downloading, copying, installing or
 * using the software you agree to this license. If you do not agree to this license, do not download, install,
 * copy or use the software.
 *
 * Intel License Agreement
 *
 * Copyright (c) 2000, Intel Corporation
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that
 * the following conditions are met:
 *
 * -Redistributions of source code must retain the above copyright notice, this list of conditions and the
 *  following disclaimer.
 *
 * -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
 *  following disclaimer in the documentation and/or other materials provided with the distribution.
 *
 * -The name of Intel Corporation may not be used to endorse or promote products derived from this software
 *  without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef ISCSI_H
#define ISCSI_H

#include "iscsiutil.h"

/*
 * iSCSI Version 18
 */

#define ISCSI_VENDOR	"NetBSD"
#define ISCSI_PRODUCT	"NetBSD iSCSI"
#define ISCSI_VERSION	0

/*
 * Parameters
 */

#define ISCSI_IMMEDIATE_DATA_DFLT            1
#define ISCSI_INITIAL_R2T_DFLT               1
#define ISCSI_USE_PHASE_COLLAPSED_READ_DFLT  0
#define ISCSI_HEADER_LEN                     48
#define ISCSI_PORT                           3260	/* Default port */
#define ISCSI_OPCODE(HEADER)                 (HEADER[0] & 0x3f)

#define ISCSI_FIRST_BURST                    (ISCSI_FIRST_BURST_DFLT)
#define ISCSI_DATA_PDU_LENGTH                (ISCSI_DATA_PDU_LENGTH_DFLT)

/*
 * Opcodes
 */
enum {
	ISCSI_NOP_OUT       = 0x00,
	ISCSI_SCSI_CMD      = 0x01,
	ISCSI_TASK_CMD      = 0x02,
	ISCSI_LOGIN_CMD     = 0x03,
	ISCSI_TEXT_CMD      = 0x04,
	ISCSI_WRITE_DATA    = 0x05,
	ISCSI_LOGOUT_CMD    = 0x06,
	ISCSI_SNACK         = 0x10,	/* not implemented */
	ISCSI_NOP_IN        = 0x20,
	ISCSI_SCSI_RSP      = 0x21,
	ISCSI_TASK_RSP      = 0x22,
	ISCSI_LOGIN_RSP     = 0x23,
	ISCSI_TEXT_RSP      = 0x24,
	ISCSI_READ_DATA     = 0x25,
	ISCSI_LOGOUT_RSP    = 0x26,
	ISCSI_R2T           = 0x31,
	ISCSI_ASYNC         = 0x32,
	ISCSI_REJECT        = 0x3f
};

enum {
	ISCSI_AHS_EXTENDED_CDB	= 0x01,
	ISCSI_AHS_BIDI_READ	= 0x02
};

/*
 * Login Phase
 */
enum {
	ISCSI_LOGIN_STATUS_SUCCESS          = 0,
	ISCSI_LOGIN_STATUS_REDIRECTION      = 1,
	ISCSI_LOGIN_STATUS_INITIATOR_ERROR  = 2,
	ISCSI_LOGIN_STATUS_TARGET_ERROR     = 3,

	ISCSI_LOGIN_STAGE_SECURITY          = 0,
	ISCSI_LOGIN_STAGE_NEGOTIATE         = 1,
	ISCSI_LOGIN_STAGE_FULL_FEATURE      = 3
};

/* detailed return codes for login phase */
enum {
	ISCSI_LOGIN_DETAIL_SUCCESS = 0x0,
	ISCSI_LOGIN_DETAIL_INIT_AUTH_FAILURE = 0x01,
	ISCSI_LOGIN_DETAIL_VERSION_NOT_SUPPORTED = 0x05,
	ISCSI_LOGIN_DETAIL_NOT_LOGGED_IN = 0x0b
};


/*
 * Logout Phase
 */
enum {
	ISCSI_LOGOUT_CLOSE_SESSION      = 0,
	ISCSI_LOGOUT_CLOSE_CONNECTION   = 1,
	ISCSI_LOGOUT_CLOSE_RECOVERY     = 2,

	ISCSI_LOGOUT_STATUS_SUCCESS     = 0,
	ISCSI_LOGOUT_STATUS_NO_CID      = 1,
	ISCSI_LOGOUT_STATUS_NO_RECOVERY = 2,
	ISCSI_LOGOUT_STATUS_FAILURE     = 3
};


/*
 * Task Command
 */
enum {
	ISCSI_TASK_CMD_ABORT_TASK           = 1,
	ISCSI_TASK_CMD_ABORT_TASK_SET       = 2,
	ISCSI_TASK_CMD_CLEAR_ACA            = 3,
	ISCSI_TASK_CMD_CLEAR_TASK_SET       = 4,
	ISCSI_TASK_CMD_LOGICAL_UNIT_RESET   = 5,
	ISCSI_TASK_CMD_TARGET_WARM_RESET    = 6,
	ISCSI_TASK_CMD_TARGET_COLD_RESET    = 7,
	ISCSI_TASK_CMD_TARGET_REASSIGN      = 8
};

typedef struct iscsi_task_cmd_t {
	int32_t         immediate;
	uint8_t         function;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        ref_tag;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
	uint32_t        RefCmdSN;
	uint32_t        ExpDataSN;
}               iscsi_task_cmd_t;

int             iscsi_task_cmd_encap(uint8_t *header, iscsi_task_cmd_t * cmd);
int             iscsi_task_cmd_decap(uint8_t *header, iscsi_task_cmd_t * cmd);


/*
 * Task Response
 */
enum {
	ISCSI_TASK_RSP_FUNCTION_COMPLETE  = 0,
	ISCSI_TASK_RSP_NO_SUCH_TASK       = 1,
	ISCSI_TASK_RSP_NO_SUCH_LUN        = 2,
	ISCSI_TASK_RSP_STILL_ALLEGIANT    = 3,
	ISCSI_TASK_RSP_NO_FAILOVER        = 4,
	ISCSI_TASK_RSP_NO_SUPPORT	  = 5,
	ISCSI_TASK_RSP_AUTHORIZED_FAILED  = 6,

	ISCSI_TASK_RSP_REJECTED           = 255,

	ISCSI_TASK_QUAL_FUNCTION_EXECUTED = 0,
	ISCSI_TASK_QUAL_NOT_AUTHORIZED    = 1
};

typedef struct iscsi_task_rsp_t {
	uint8_t         response;
	uint32_t        length;
	uint32_t        tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
}               iscsi_task_rsp_t;

int             iscsi_task_rsp_encap(uint8_t *header, iscsi_task_rsp_t * rsp);
int             iscsi_task_rsp_decap(uint8_t *header, iscsi_task_rsp_t * rsp);


/*
 * NOP-Out
 */


typedef struct iscsi_nop_out_args_t {
	int32_t         immediate;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
	const uint8_t   *data;
}               iscsi_nop_out_args_t;

int             iscsi_nop_out_encap(uint8_t *header, iscsi_nop_out_args_t * cmd);
int             iscsi_nop_out_decap(uint8_t *header, iscsi_nop_out_args_t * cmd);


/*
 * NOP-In
 */


typedef struct iscsi_nop_in_args_t {
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
}               iscsi_nop_in_args_t;

int             iscsi_nop_in_encap(uint8_t *header, iscsi_nop_in_args_t * cmd);
int             iscsi_nop_in_decap(uint8_t *header, iscsi_nop_in_args_t * cmd);


/*
 * Text Command
 */


typedef struct iscsi_text_cmd_args_t {
	int32_t         immediate;
	int32_t         final;
	int32_t         cont;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
	char           *text;
}               iscsi_text_cmd_args_t;

int             iscsi_text_cmd_encap(uint8_t *header, iscsi_text_cmd_args_t * cmd);
int             iscsi_text_cmd_decap(uint8_t *header, iscsi_text_cmd_args_t * cmd);


/*
 * Text Response
 */


typedef struct iscsi_text_rsp_args_t {
	int32_t         final;
	int32_t         cont;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
}               iscsi_text_rsp_args_t;

int             iscsi_text_rsp_encap(uint8_t *header, iscsi_text_rsp_args_t * rsp);
int             iscsi_text_rsp_decap(uint8_t *header, iscsi_text_rsp_args_t * rsp);


/*
 * Login Command
 */


typedef struct iscsi_login_cmd_args_t {
	int32_t         transit;
	int32_t         cont;
	uint8_t         csg;
	uint8_t         nsg;
	int8_t          version_max;
	int8_t          version_min;
	uint8_t         AHSlength;
	uint32_t        length;
	uint64_t	isid;
	uint16_t        tsih;
	uint32_t        tag;
	uint16_t        cid;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
	char           *text;
}               iscsi_login_cmd_args_t;

int             iscsi_login_cmd_encap(uint8_t *header, iscsi_login_cmd_args_t * cmd);
int             iscsi_login_cmd_decap(uint8_t *header, iscsi_login_cmd_args_t * cmd);


/*
 * Login Response
 */


typedef struct iscsi_login_rsp_args_t {
	int32_t         transit;
	int32_t         cont;
	uint8_t         csg;
	uint8_t         nsg;
	int8_t          version_max;
	int8_t          version_active;
	uint8_t         AHSlength;
	uint32_t        length;
	uint64_t	isid;
	uint16_t        tsih;
	uint32_t        tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint8_t         status_class;
	uint8_t         status_detail;
}               iscsi_login_rsp_args_t;

int             iscsi_login_rsp_encap(uint8_t *header, iscsi_login_rsp_args_t * rsp);
int             iscsi_login_rsp_decap(uint8_t *header, iscsi_login_rsp_args_t * rsp);


/*
 * Logout Command
 */


typedef struct iscsi_logout_cmd_args_t {
	int32_t         immediate;
	uint8_t         reason;
	uint32_t        tag;
	uint16_t        cid;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
}               iscsi_logout_cmd_args_t;

int             iscsi_logout_cmd_encap(uint8_t *header, iscsi_logout_cmd_args_t * cmd);
int             iscsi_logout_cmd_decap(uint8_t *header, iscsi_logout_cmd_args_t * cmd);


/*
 * Logout Response
 */


typedef struct iscsi_logout_rsp_args_t {
	uint8_t         response;
	uint32_t        length;
	uint32_t        tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint16_t        Time2Wait;
	uint16_t        Time2Retain;
}               iscsi_logout_rsp_args_t;

int             iscsi_logout_rsp_encap(uint8_t *header, iscsi_logout_rsp_args_t * rsp);
int             iscsi_logout_rsp_decap(uint8_t *header, iscsi_logout_rsp_args_t * rsp);


/*
 * SCSI Command
 */


typedef struct iscsi_scsi_cmd_args_t {
	int32_t         immediate;
	int32_t         final;
	int32_t         input;
	int32_t         output;
	uint8_t         attr;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        trans_len;
	uint32_t        bidi_trans_len;
	uint32_t        CmdSN;
	uint32_t        ExpStatSN;
	uint8_t  	*cdb;
	uint8_t  	*ext_cdb;
	uint8_t  	*ahs;
	uint8_t         ahs_len;
	uint8_t  	*send_data;
	int32_t         send_sg_len;
	uint8_t  	*recv_data;
	int32_t         recv_sg_len;
	uint8_t         status;
	uint32_t        bytes_sent;
	uint32_t        bytes_recv;
}               iscsi_scsi_cmd_args_t;

int             iscsi_scsi_cmd_encap(uint8_t *header, iscsi_scsi_cmd_args_t * cmd);
int             iscsi_scsi_cmd_decap(uint8_t *header, iscsi_scsi_cmd_args_t * cmd);


/*
 * SCSI Response
 */


typedef struct iscsi_scsi_rsp_args_t {
	int32_t         bidi_overflow;
	int32_t         bidi_underflow;
	int32_t         overflow;
	int32_t         underflow;


	uint8_t         response;
	uint8_t         status;
	uint32_t        ahs_len;
	uint32_t        length;
	uint32_t        tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint32_t        ExpDataSN;
	uint32_t        bidi_res_cnt;
	uint32_t        basic_res_cnt;
}               iscsi_scsi_rsp_t;

int             iscsi_scsi_rsp_encap(uint8_t *header, iscsi_scsi_rsp_t * rsp);
int             iscsi_scsi_rsp_decap(uint8_t *header, iscsi_scsi_rsp_t * rsp);


/*
 * Ready To Transfer (R2T)
 */


typedef struct iscsi_r2t_args_t {
	uint32_t        AHSlength;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint32_t        R2TSN;
	uint32_t        offset;
	uint32_t        length;
}               iscsi_r2t_t;

int             iscsi_r2t_encap(uint8_t *header, iscsi_r2t_t * cmd);
int             iscsi_r2t_decap(uint8_t *header, iscsi_r2t_t * cmd);


/*
 * SCSI Write Data
 */


typedef struct iscsi_write_data_args_t {
	int32_t         final;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        tag;
	uint32_t        transfer_tag;
	uint32_t        ExpStatSN;
	uint32_t        DataSN;
	uint32_t        offset;
}               iscsi_write_data_t;

int             iscsi_write_data_encap(uint8_t *header, iscsi_write_data_t * cmd);
int             iscsi_write_data_decap(uint8_t *header, iscsi_write_data_t * cmd);


/*
 * SCSI Read Data
 */


typedef struct iscsi_read_data_args_t {
	int32_t         final;
	int32_t         ack;
	int32_t         overflow;
	int32_t         underflow;
	int32_t         S_bit;
	uint8_t         status;
	uint32_t        length;
	uint64_t        lun;
	uint32_t        task_tag;
	uint32_t        transfer_tag;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint32_t        DataSN;
	uint32_t        offset;
	uint32_t        res_count;
}               iscsi_read_data_t;

int             iscsi_read_data_encap(uint8_t *header, iscsi_read_data_t * cmd);
int             iscsi_read_data_decap(uint8_t *header, iscsi_read_data_t * cmd);


/*
 * Reject
 */

typedef struct iscsi_reject_args_t {
	uint8_t         reason;
	uint32_t        length;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint32_t        DataSN;
	char           *header;

}               iscsi_reject_t;

int             iscsi_reject_encap(uint8_t *header, iscsi_reject_t * cmd);
int             iscsi_reject_decap(uint8_t *header, iscsi_reject_t * cmd);

/*
 * Async Message
 */

typedef struct iscsi_async_msg_args_t {
	uint8_t         AHSlength;
	uint64_t        lun;
	uint32_t        StatSN;
	uint32_t        ExpCmdSN;
	uint32_t        MaxCmdSN;
	uint32_t        length;
	uint8_t         AsyncEvent;
	uint8_t         AsyncVCode;
}               iscsi_async_msg_t;

int             iscsi_amsg_decap(uint8_t *header, iscsi_async_msg_t * msg);

#ifndef SOL_TCP
#define SOL_TCP IPPROTO_TCP
#endif

#endif				/* ISCSI_H */