⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iscsi-protocol.h

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef ISCSI_PROTOCOL_H_#define ISCSI_PROTOCOL_H_/* * iSCSI connection daemon * Copyright (C) 2001 Cisco Systems, Inc. * maintained by linux-iscsi@cisco.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See the file COPYING included with this distribution for more details. * * $Id: iscsi-protocol.h,v 1.16 2002/10/08 20:01:38 smferris Exp $  * * This file sets up definitions of messages and constants used by the * iSCSI protocol. * */#ifdef __cplusplusextern "C" {#endif#if defined(VXWORKS)#  include <vxWorks.h>#elif defined(LINUX)# ifdef __KERNEL__#   include <linux/types.h>#   include <asm/byteorder.h>#   ifdef __BIG_ENDIAN_BITFIELD#     define ISCSI_BIG_ENDIAN_BITFIELD 1#   endif# else#   include <stdint.h>    #   if (__BYTE_ORDER == __BIG_ENDIAN)#      define ISCSI_BIG_ENDIAN_BITFIELD 1#   endif# endif    typedef uint8_t  UINT8;    typedef uint16_t UINT16;    typedef uint32_t UINT32;#elif defined(SOLARIS)# include <sys/types.h># include <sys/isa_defs.h># if defined (_BIG_ENDIAN)#   define ISCSI_BIG_ENDIAN_BITFIELD 1# endif  typedef uint8_t  UINT8;  typedef uint16_t UINT16;  typedef uint32_t UINT32;#else#  if (__BYTE_ORDER == __BIG_ENDIAN)#    define ISCSI_BIG_ENDIAN_BITFIELD 1#  endif  /* FIXME: probably ok for ILP32 and LP64, but not ILP64 */  typedef unsigned char  UINT8;  typedef unsigned short UINT16;  typedef unsigned int   UINT32;#endif/* iSCSI listen port for incoming connections */#define ISCSI_LISTEN_PORT 3260/* assumes a pointer to a 3-byte array */#define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2]))/* assumes a pointer to a 3 byte array, and an integer value */#define hton24(p, v) {\        p[0] = (((v) >> 16) & 0xFF); \        p[1] = (((v) >> 8) & 0xFF); \        p[2] = ((v) & 0xFF); \}        /* for Login min, max, active version fields */#define ISCSI_MIN_VERSION	0x00#define ISCSI_DRAFT8_VERSION    0x02                                    #define ISCSI_DRAFT16_VERSION   0x00#define ISCSI_MAX_VERSION	0x02/* Min. and Max. length of a PDU we can support */#define MIN_PDU_LENGTH		(8 << 9)	// 4KB#define MAX_PDU_LENGTH		(0xffffffff)	// Huge/* Padding word length */#define PAD_WORD_LEN		4/* Max. number of Key=Value pairs in a text message */#define MAX_KEY_VALUE_PAIRS	8192/* Reserved value for initiator/target task tag */#define RSVD_TASK_TAG	0xffffffff/* maximum length for text keys/values */#define KEY_MAXLEN 64#define VALUE_MAXLEN 255#define TARGET_NAME_MAXLEN    VALUE_MAXLEN/* iSCSI Template Message Header */struct IscsiHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  final:1,	// Final (or Poll) bit	   rsvd1:7;#else    UINT8  rsvd1:7,	   final:1;#endif    UINT8  rsvd2[2];    UINT8  hlength;	/* AHSs total length */    UINT8  dlength[3];	/* Data length */    UINT8  lun[8];    UINT32 itt;		/* Initiator Task Tag */    UINT8  other[28];};/* Opcode encoding bits */#define ISCSI_OP_RETRY		        0x80#define ISCSI_OP_IMMEDIATE		0x40#define ISCSI_OP_RSP			0x00	/* The 2 MSB not set anymore */#define ISCSI_OPCODE_MASK		0x3F/* Client to Server Message Opcode values */#define ISCSI_OP_NOOP_OUT		0x00#define ISCSI_OP_SCSI_CMD		0x01#define ISCSI_OP_SCSI_TASK_MGT_MSG	0x02#define ISCSI_OP_LOGIN_CMD		0x03#define ISCSI_OP_TEXT_CMD		0x04#define ISCSI_OP_SCSI_DATA		0x05#define ISCSI_OP_LOGOUT_CMD		0x06#define ISCSI_OP_SNACK_CMD		0x10/* Server to Client Message Opcode values */#define ISCSI_OP_NOOP_IN		(0x20 | ISCSI_OP_RSP)#define ISCSI_OP_SCSI_RSP		(0x21 | ISCSI_OP_RSP)#define ISCSI_OP_SCSI_TASK_MGT_RSP	(0x22 | ISCSI_OP_RSP)#define ISCSI_OP_LOGIN_RSP		(0x23 | ISCSI_OP_RSP)#define ISCSI_OP_TEXT_RSP		(0x24 | ISCSI_OP_RSP)#define ISCSI_OP_SCSI_DATA_RSP	        (0x25 | ISCSI_OP_RSP)#define ISCSI_OP_LOGOUT_RSP		(0x26 | ISCSI_OP_RSP)#define ISCSI_OP_RTT_RSP		(0x31 | ISCSI_OP_RSP)#define ISCSI_OP_ASYNC_EVENT		(0x32 | ISCSI_OP_RSP)#define ISCSI_OP_REJECT_MSG		(0x3f | ISCSI_OP_RSP)struct IscsiCmdFlags {#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8 	final:1,	  	read_data:1,		write_data:1,		rsvd1:2,		attr:3;		/* see SCSI Command Attribute values below */#else    UINT8	attr:3,		rsvd1:2,		write_data:1,	  	read_data:1,		final:1;#endif};/* SCSI Command Header */struct IscsiScsiCmdHdr {    UINT8			opcode;    struct IscsiCmdFlags	flags;    UINT8			rsvd2;    UINT8			cmdrn;    UINT8			hlength;    UINT8			dlength[3];    UINT8			lun[8];    UINT32			itt;		/* Initiator Task Tag */    UINT32			data_length;    UINT32			cmdsn;    UINT32			expstatsn;    UINT8			scb[16];	/* SCSI Command Block */    /* Additional Data (Command Dependent) */};/* SCSI Command Attribute values */#define ISCSI_ATTR_UNTAGGED		0#define ISCSI_ATTR_SIMPLE		1#define ISCSI_ATTR_ORDERED		2#define ISCSI_ATTR_HEAD_OF_QUEUE	3#define ISCSI_ATTR_ACA			4struct IscsiCmdRespFlags {#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8	fbit:1,	 	rsvd1:2,	  	bidi_overflow:1,		bidi_undeflow:1,		overflow:1,		underflow:1,	  	rsvd2:1;#else    UINT8  	rsvd2:1,    		underflow:1,		overflow:1,		bidi_underflow:1,	  	bidi_overflow:1,		rsvd1:2,		fbit:1;#endif};/* SCSI Response Header */struct IscsiScsiRspHdr {    UINT8			opcode;    struct IscsiCmdRespFlags	flags;    UINT8			response;    UINT8			cmd_status;    UINT8			hlength;    UINT8			dlength[3];    UINT8			rsvd[8];    UINT32			itt;		/* Initiator Task Tag */    UINT32			rsvd1;    UINT32			statsn;    UINT32			expcmdsn;    UINT32			maxcmdsn;    UINT32			expdatasn;    UINT32			bi_residual_count;    UINT32			residual_count;    /* Response or Sense Data (optional) */};/* iSCSI Status values. Valid if Rsp Selector bit is not set */#define ISCSI_STATUS_CMD_COMPLETED	0#define ISCSI_STATUS_TARGET_FAILURE	1#define ISCSI_STATUS_SUBSYS_FAILURE	2/* Asynchronous Event Header */struct IscsiAsyncEvtHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  fbit:1,           rsvd1:7;#else    UINT8  rsvd1:7,           fbit:1;#endif    UINT8  rsvd2[2];    UINT8  rsvd3;    UINT8  dlength[3];    UINT8  lun[8];    UINT8  rsvd4[8];    UINT32 statsn;    UINT32 expcmdsn;    UINT32 maxcmdsn;    UINT8  async_event;	    UINT8  async_vcode;	    UINT16 param1;    UINT16 param2;    UINT16 param3;    UINT8  rsvd5[4];};/* iSCSI Event Indicator values */#define ASYNC_EVENT_SCSI_EVENT                  0#define ASYNC_EVENT_REQUEST_LOGOUT              1#define ASYNC_EVENT_DROPPING_CONNECTION         2#define ASYNC_EVENT_DROPPING_ALL_CONNECTIONS	3#define ASYNC_EVENT_PARAM_NEGOTIATION	        4#define ASYNC_EVENT_VENDOR_SPECIFIC             255/* NOP-Out Message */struct IscsiNopOutHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  poll:1,           rsvd1:7;#else    UINT8  rsvd1:7,           poll:1;#endif    UINT16 rsvd2;    UINT8  rsvd3;    UINT8  dlength[3];    UINT8  lun[8];    UINT32 itt;		/* Initiator Task Tag */    UINT32 ttt;		/* Target Transfer Tag */    UINT32 cmdsn;    UINT32 expstatsn;    UINT8  rsvd4[16];};/* NOP-In Message */struct IscsiNopInHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  fbit:1,	   rsvd1:7;#else    UINT8  rsvd1:7,	   fbit:1;#endif    UINT16 rsvd2;    UINT8  rsvd3;    UINT8  dlength[3];    UINT8  lun[8];    UINT32 itt;		/* Initiator Task Tag */    UINT32 ttt;		/* Target Transfer Tag */    UINT32 statsn;    UINT32 expcmdsn;    UINT32 maxcmdsn;    UINT8  rsvd4[12];};/* SCSI Task Management Message Header */struct IscsiScsiTaskMgtHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  fbit:1,           function:7;  /* see Function values below */#else    UINT8  function:7,           fbit:1;#endif    UINT8  rsvd1[2];    UINT8  hlength;    UINT8  dlength[3];    UINT8  lun[8];    UINT32 itt;         /* Initiator Task Tag */    UINT32 rtt;         /* Reference Task Tag */    UINT32 cmdsn;    UINT32 expstatsn;    UINT32 refcmdsn;    UINT32 expdatasn;    UINT8  rsvd2[8];};/* Function values */#define ISCSI_TM_FUNC_ABORT_TASK         1#define ISCSI_TM_FUNC_ABORT_TASK_SET     2#define ISCSI_TM_FUNC_CLEAR_ACA          3#define ISCSI_TM_FUNC_CLEAR_TASK_SET     4#define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET 5#define ISCSI_TM_FUNC_TARGET_WARM_RESET  6#define ISCSI_TM_FUNC_TARGET_COLD_RESET  7#define ISCSI_TM_FUNC_TASK_REASSIGN	 8/* SCSI Task Management Response Header */struct IscsiScsiTaskMgtRspHdr {    UINT8  opcode;#ifdef ISCSI_BIG_ENDIAN_BITFIELD    UINT8  fbit:1,           rsvd1:7;#else    UINT8  rsvd1:7,           fbit:1;#endif    UINT8  response;	/* see Response values below */    UINT8  qualifier;    UINT8  hlength;    UINT8  dlength[3];    UINT8  rsvd2[8];    UINT32 itt;		/* Initiator Task Tag */    UINT32 rtt;		/* Reference Task Tag */    UINT32 statsn;    UINT32 expcmdsn;    UINT32 maxcmdsn;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -