4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The header file of iSCSI Protocol that defines many specific data structures.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _ISCSI_PROTO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _ISCSI_PROTO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ScsiPassThruExt.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// RFC 1982 Serial Number Arithmetic, SERIAL_BITS = 32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SEQ_EQ(s1, s2) ((s1) == (s2))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SEQ_LT(s1, s2) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((INT32) (s1) < (INT32) (s2)) && (s2 - s1) < ((UINT32) 1 << 31)) || \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((INT32) (s1) > (INT32) (s2)) && (s1 - s2) > ((UINT32) 1 << 31)) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SEQ_GT(s1, s2) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((INT32) (s1) < (INT32) (s2)) && (s2 - s1) > ((UINT32) 1 << 31)) || \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((INT32) (s1) > (INT32) (s2)) && (s1 - s2) < ((UINT32) 1 << 31)) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_WELL_KNOWN_PORT 3260
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_MAX_CONNS_PER_SESSION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_MAX_RECV_DATA_SEG_LEN 8192
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAX_RECV_DATA_SEG_LEN_IN_FFP 65536
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_MAX_OUTSTANDING_R2T 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_VERSION_MAX 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_VERSION_MIN 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_AUTH_METHOD "AuthMethod"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_HEADER_DIGEST "HeaderDigest"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_DATA_DIGEST "DataDigest"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_MAX_CONNECTIONS "MaxConnections"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_TARGET_NAME "TargetName"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_INITIATOR_NAME "InitiatorName"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_TARGET_ALIAS "TargetAlias"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_INITIATOR_ALIAS "InitiatorAlias"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_TARGET_ADDRESS "TargetAddress"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_INITIAL_R2T "InitialR2T"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_IMMEDIATE_DATA "ImmediateData"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_TARGET_PORTAL_GROUP_TAG "TargetPortalGroupTag"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_MAX_BURST_LENGTH "MaxBurstLength"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_FIRST_BURST_LENGTH "FirstBurstLength"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_DEFAULT_TIME2WAIT "DefaultTime2Wait"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_DEFAULT_TIME2RETAIN "DefaultTime2Retain"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_MAX_OUTSTANDING_R2T "MaxOutstandingR2T"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_DATA_PDU_IN_ORDER "DataPDUInOrder"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_DATA_SEQUENCE_IN_ORDER "DataSequenceInOrder"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_ERROR_RECOVERY_LEVEL "ErrorRecoveryLevel"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_SESSION_TYPE "SessionType"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_MAX_RECV_DATA_SEGMENT_LENGTH "MaxRecvDataSegmentLength"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_KEY_VALUE_NONE "None"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// connection state for initiator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_FREE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_XPT_WAIT 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_IN_LOGIN 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_LOGGED_IN 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_IN_LOGOUT 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_LOGOUT_REQUESTED 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_CLEANUP_WAIT 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CONN_STATE_IN_CLEANUP 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// session state for initiator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SESSION_STATE_FREE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SESSION_STATE_LOGGED_IN 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SESSION_STATE_FAILED 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataIn = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataOut = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataBi = 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DATA_DIRECTION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_RESERVED_TAG 0xffffffff
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_REQ_IMMEDIATE 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_MASK 0x3F
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SET_OPCODE(PduHdr, Op, Flgs) ((((ISCSI_BASIC_HEADER *) (PduHdr))->OpCode) = ((Op) | (Flgs)))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_OPCODE(PduHdr) ((((ISCSI_BASIC_HEADER *) (PduHdr))->OpCode) & ISCSI_OPCODE_MASK)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_CHECK_OPCODE(PduHdr, Op) ((((PduHdr)->OpCode) & ISCSI_OPCODE_MASK) == (Op))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_IMMEDIATE_ON(PduHdr) ((PduHdr)->OpCode & ISCSI_REQ_IMMEDIATE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SET_FLAG(PduHdr, Flag) (((ISCSI_BASIC_HEADER *) (PduHdr))->Flags |= (BOOLEAN)(Flag))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_CLEAR_FLAG(PduHdr, Flag) (((ISCSI_BASIC_HEADER *) (PduHdr))->Flags &= ~(Flag))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_FLAG_ON(PduHdr, Flag) ((((ISCSI_BASIC_HEADER *) (PduHdr))->Flags & (Flag)) == (Flag))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SET_STAGES(PduHdr, Cur, Nxt) ((PduHdr)->Flags = (UINT8) ((PduHdr)->Flags | ((Cur) << 2 | (Nxt))))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_CURRENT_STAGE(PduHdr) (((PduHdr)->Flags >> 2) & 0x3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_NEXT_STAGE(PduHdr) (((PduHdr)->Flags) & 0x3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_PAD_LEN(DataLen) ((~(DataLen) + 1) & 0x3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_ROUNDUP(DataLen) (((DataLen) + 3) &~(0x3))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HTON24(Dst, Src) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync do { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (Dst)[0] = (UINT8) (((Src) >> 16) & 0xFF); \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (Dst)[1] = (UINT8) (((Src) >> 8) & 0xFF); \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (Dst)[2] = (UINT8) ((Src) & 0xFF); \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } while (0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define NTOH24(src) (((src)[0] << 16) | ((src)[1] << 8) | ((src)[2]))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_DATASEG_LEN(PduHdr) NTOH24 (((ISCSI_BASIC_HEADER *) (PduHdr))->DataSegmentLength)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SET_DATASEG_LEN(PduHdr, Len) HTON24 (((ISCSI_BASIC_HEADER *) (PduHdr))->DataSegmentLength, (Len))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// initiator opcodes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_NOP_OUT 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_CMD 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_TMF_REQ 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_LOGIN_REQ 0x03
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_TEXT_REQ 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_DATA_OUT 0x05
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_LOGOUT_REQ 0x06
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SNACK_REQ 0x10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_I0 0x1c
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_I1 0x1d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_I2 0x1e
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// target opcodes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_NOP_IN 0x20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_RSP 0x21
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_TMF_RSP 0x22
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_LOGIN_RSP 0x23
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_TEXT_RSP 0x24
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_SCSI_DATA_IN 0x25
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_LOGOUT_RSP 0x26
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_R2T 0x31
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_ASYNC_MSG 0x32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_T0 0x3c
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_T1 0x3d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_VENDOR_T2 0x3e
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_OPCODE_REJECT 0x3f
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_BHS_FLAG_FINAL 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// iSCSI Basic Header Segment
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_BASIC_HEADER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 OpCodeSpecific1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 OpCodeSpecific2[7];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_BASIC_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Defined AHS types, others are reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_AHS_TYPE_EXT_CDB 0x1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_AHS_TYPE_BI_EXP_READ_DATA_LEN 0x2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_ADDTIONAL_HEADER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TypeSpecific[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_ADDITIONAL_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_BI_EXP_READ_DATA_LEN_AHS {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpReadDataLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_BI_EXP_READ_DATA_LEN_AHS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_CMD_PDU_FLAG_READ 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_CMD_PDU_FLAG_WRITE 0x20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_CMD_PDU_TASK_ATTR_MASK 0x07
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// task attributes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TASK_ATTR_UNTAGGED 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TASK_ATTR_SIMPLE 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TASK_ATTR_ORDERD 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TASK_ATTR_HOQ 0x03
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TASK_ATTR_ACA 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// SCSI Command
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SCSI_COMMAND {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpDataXferLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Cdb[16];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SCSI_COMMAND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// flag bit definitions in SCSI response
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_RSP_PDU_FLAG_BI_READ_OVERFLOW 0x10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_RSP_PDU_FLAG_BI_READ_UNDERFLOW 0x08
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_RSP_PDU_FLAG_OVERFLOW 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_RSP_PDU_FLAG_UNDERFLOW 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// iSCSI service response codes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SERVICE_RSP_COMMAND_COMPLETE_AT_TARGET 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SERVICE_RSP_TARGET_FAILURE 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// SCSI Response
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SCSI_RESPONSE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Response;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SNACKTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpDataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BiReadResidualCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ResidualCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SCSI_RESPONSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_SENSE_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Data[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_SENSE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// iSCSI Task Managment Function Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_TMF_REQUEST {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Fuction;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ReferencedTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RefCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpDataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_TMF_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_COMPLETE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_TASK_NOT_EXIST 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_LUN_NOT_EXIST 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_TASK_STILL_ALLEGIANT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_TASK_REASSGIN_NOT_SUPPORTED 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_NOT_SUPPORTED 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_AHTH_FAILED 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_REJECTED 255
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// iSCSI Task Management Function Response
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_TMF_RESPONSE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Response;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserver3[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_TMF_RESPONSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// SCSI Data-Out
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_SCSI_DATA_OUT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BufferOffset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_SCSI_DATA_OUT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_DATA_IN_PDU_FLAG_ACKKNOWLEDGE 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_DATA_IN_PDU_FLAG_OVERFLOW SCSI_RSP_PDU_FLAG_OVERFLOW
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_DATA_IN_PDU_FLAG_UNDERFLOW SCSI_RSP_PDU_FLAG_UNDERFLOW
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SCSI_DATA_IN_PDU_FLAG_STATUS_VALID 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// SCSI Data-In
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_SCSI_DATA_IN {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BufferOffset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ResidualCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_SCSI_DATA_IN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_BUFFER_OFFSET(PduHdr) NTOHL (((ISCSI_SCSI_DATA_IN *) (PduHdr))->BufferOffset)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Ready To Transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_READY_TO_TRANSFER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 R2TSeqNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BufferOffset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DesiredDataTransferLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_READY_TO_TRANSFER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_ASYNC_MESSAGE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 AsyncEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 AsyncVCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Parameter1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Parameter2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Parameter3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_ASYNC_MESSAGE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_REQ_PDU_FLAG_TRANSIT 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_REQ_PDU_FLAG_CONTINUE 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Login Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_LOGIN_REQUEST {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 VersionMax;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 VersionMin;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Isid[6];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Tsih;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Cid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2[4];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_LOGIN_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_RSP_PDU_FLAG_TRANSIT ISCSI_LOGIN_REQ_PDU_FLAG_TRANSIT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_RSP_PDU_FLAG_CONTINUE ISCSI_LOGIN_REQ_PDU_FLAG_CONTINUE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_STATUS_SUCCESS 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_STATUS_REDIRECTION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_STATUS_INITIATOR_ERROR 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_STATUS_TARGET_ERROR 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Login Response
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_LOGIN_RESPONSE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Flags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 VersionMax;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 VersionActive;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Isid[6];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Tsih;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 StatusClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 StatusDetail;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved2[10];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_LOGIN_RESPONSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_REASON_CLOSE_SESSION 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_REASON_REMOVE_CONNECTION_FOR_RECOVERY 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Logout Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_LOGOUT_REQUEST {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ReasonCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Cid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved4[4];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_LOGOUT_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_RESPONSE_SESSION_CLOSED_SUCCESS 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_RESPONSE_CID_NOT_FOUND 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_RESPONSE_RECOVERY_NOT_SUPPORTED 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGOUT_RESPONSE_CLEANUP_FAILED 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Logout Response
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_LOGOUT_RESPONSE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Response;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved3[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Time2Wait;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Time2Retain;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_LOGOUT_RESPONSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SNACK_REQUEST_TYPE_DATA_OR_R2T 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SNACK_REQUEST_TYPE_STATUS 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SNACK_REQUEST_TYPE_DATA_ACK 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SNACK_REQUEST_TYPE_RDATA 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// SNACK Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_SNACK_REQUEST {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BegRun;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RunLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_SNACK_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Reject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_REJECT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reason;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved3[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved5[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_REJECT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// NOP-Out
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_NOP_OUT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2[4];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_NOP_OUT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// NOP-In
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_NOP_IN {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OpCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved1[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TotalAHSLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataSegmentLength[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lun[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Reserved2[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_NOP_IN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SECURITY_NEGOTIATION 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_LOGIN_OPERATIONAL_NEGOTIATION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_FULL_FEATURE_PHASE 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IScsiDigestNone,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IScsiDigestCRC32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_DIGEST_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_XFER_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TargetTransferTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DesiredLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpDataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_XFER_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_IN_BUFFER_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *InData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InDataLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_IN_BUFFER_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_TCB {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN SoFarInOrder;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpDataSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN FbitReceived;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN StatusXferd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ActiveR2Ts;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Response;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Reason;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SNACKTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_XFER_CONTEXT XferContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_CONNECTION *Conn;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_TCB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ISCSI_KEY_VALUE_PAIR {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY List;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Key;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ISCSI_KEY_VALUE_PAIR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Attach the iSCSI connection to the iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Session The iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The iSCSI connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiAttatchConnection (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_SESSION *Session,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Detach the iSCSI connection from the session it belongs to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The iSCSI connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiDetatchConnection (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function does the iSCSI connection login.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The iSCSI connection to login.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI connection is logged into the iSCSI target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Timeout happened during the login procedure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiConnLogin (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create a TCP connection for the iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Private The iSCSI driver data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Session Maximum CmdSN from the target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The newly created iSCSI connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncISCSI_CONNECTION *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiCreateConnection (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_DRIVER_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_SESSION *Session
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Destroy an iSCSI connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Conn The connection to destroy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiDestroyConnection (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Login the iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Private The iSCSI driver data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI session login procedure finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MEDIA There was a media error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiSessionLogin (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_DRIVER_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Build and send the iSCSI login request to the iSCSI target according to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the current login stage.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Conn The connection in the iSCSI login phase.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI login request PDU is built and sent on this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Some kind of device error happened.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiSendLoginReq (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Receive and process the iSCSI login response.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Conn The connection in the iSCSI login phase.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI login response PDU is received and processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiReceiveLoginRsp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Add an iSCSI key-value pair as a string into the data segment of the Login Request PDU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The DataSegmentLength and the actual size of the net buffer containing this PDU will be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync updated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Pdu The iSCSI PDU whose data segment the key-value pair will
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be added to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Key The key name string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Value The value string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The key-valu pair is added to the PDU's datasegment and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the correspondence length fields are updated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES There is not enough space in the PDU to add the key-value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pair.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiAddKeyValuePair (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT NET_BUF *Pdu,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Key,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prepare the iSCSI login request to be sent according to the current login status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The connection in the iSCSI login phase.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer to the net buffer containing the iSCSI login request built.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncNET_BUF *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiPrepareLoginReq (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Process the iSCSI Login Response.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The connection on which the iSCSI login response is received.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Pdu The iSCSI login response PDU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI login response PDU is processed and all check are passed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error happened.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_MEDIA_CHANGED Target is redirected.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiProcessLoginRsp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT NET_BUF *Pdu
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Updated the target information according the data received in the iSCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync login response with an target redirection status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Session The iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The data segment which should contain the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TargetAddress key-value list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Len Length of the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The target address is updated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The TargetAddress key is not found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiUpdateTargetAddress (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_SESSION *Session,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Len
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The callback function to free the net buffer list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Arg The opaque parameter.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiFreeNbufList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Arg
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Receive an iSCSI response PDU. An iSCSI response PDU contains an iSCSI PDU header and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional data segment. The two parts will be put into two blocks of buffers in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync net buffer. The digest check will be conducted in this function if needed and the digests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync will be trimmed from the PDU buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Conn The iSCSI connection to receive data from.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Pdu The received iSCSI pdu.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context The context used to describe information on the caller provided
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer to receive data segment of the iSCSI pdu, it's optional.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HeaderDigest Whether there will be header digest received.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataDigest Whether there will be data digest.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TimeoutEvent The timeout event, it's optional.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS An iSCSI pdu is received.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error happened.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiReceivePdu (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_CONNECTION *Conn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT NET_BUF **Pdu,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_IN_BUFFER_CONTEXT *Context, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN HeaderDigest,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN DataDigest,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT TimeoutEvent OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check and get the result of the prameter negotiation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Conn The connection in iSCSI login.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The parmeter check is passed and negotiation is finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error happened.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiCheckOpParams (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_CONNECTION *Conn
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Fill the oprational prameters.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Conn The connection in iSCSI login.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Pdu The iSCSI login request PDU to fill the parameters.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The parmeters are filled into the iSCSI login request PDU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiFillOpParams (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ISCSI_CONNECTION *Conn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT NET_BUF *Pdu
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pad the iSCSI AHS or data segment to an integer number of 4 byte words.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Pdu The iSCSI pdu which contains segments to pad.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Len The length of the last semgnet in the PDU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The segment is padded or no need to pad it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES There is not enough remaining free space to add the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync padding bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiPadSegment (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT NET_BUF *Pdu,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Len
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Build a key-value list from the data segment.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The data segment containing the key-value pairs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Len Length of the data segment.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The key-value list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval NULL Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncLIST_ENTRY *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiBuildKeyValueList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Len
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the value string by the key name from the key-value list. If found,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the key-value entry will be removed from the list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] KeyValueList The key-value list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Key The key name to find.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The value string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR8 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiGetValueByKeyFromList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT LIST_ENTRY *KeyValueList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Key
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Free the key-value list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] KeyValueList The key-value list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiFreeKeyValueList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN LIST_ENTRY *KeyValueList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Normalize the iSCSI name according to RFC.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Name The iSCSI name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Len length of the iSCSI name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The iSCSI name is valid and normalized.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_PROTOCOL_ERROR The iSCSI name is mal-formatted or not in the IQN format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiNormalizeName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR8 *Name,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Len
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Execute the SCSI command issued through the EXT SCSI PASS THRU protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PassThru The EXT SCSI PASS THRU protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Target The target ID.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Lun The LUN.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Packet The request packet containing IO request, SCSI command
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer and buffers to read/write.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCES The SCSI command is executed and the result is updated to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the Packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Session state was not as required.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiExecuteScsiCommand (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Lun,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reinstate the session on some error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Private The iSCSI driver data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCES The session is reinstated from some error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Other Reinstatement failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiSessionReinstatement (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_DRIVER_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initialize some session parameters before login.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Session The iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Recovery Whether the request is from a fresh new start or recovery.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiSessionInit (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_SESSION *Session,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN Recovery
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Abort the iSCSI session, that is, reset all the connection and free the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resources.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Session The iSCSI session.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCES The session is aborted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIScsiSessionAbort (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT ISCSI_SESSION *Session
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif