24#define ISCSI_PORT 3260
27#define ISCSI_FIRST_BURST_LEN 65536
30#define ISCSI_MAX_BURST_LEN 262144
33#define ISCSI_MAX_RECV_DATA_SEG_LEN 8192
58#define ISCSI_AHS_LEN( segment_lengths ) \
59 ( (segment_lengths).bytes.ahs_len )
62#define ISCSI_DATA_LEN( segment_lengths ) \
63 ( ntohl ( (segment_lengths).ahs_and_data_len ) & 0xffffff )
66#define ISCSI_DATA_PAD_LEN( segment_lengths ) \
67 ( ( 0 - (segment_lengths).bytes.data_len[2] ) & 0x03 )
70#define ISCSI_SET_LENGTHS( segment_lengths, ahs_len, data_len ) do { \
71 (segment_lengths).ahs_and_data_len = \
72 htonl ( data_len | ( ahs_len << 24 ) ); \
97#define ISCSI_OPCODE_MASK 0x3f
100#define ISCSI_FLAG_IMMEDIATE 0x40
103#define ISCSI_FLAG_FINAL 0x80
106#define ISCSI_TAG_MAGIC 0x18ae0000
109#define ISCSI_TAG_RESERVED 0xffffffff
174#define ISCSI_OPCODE_LOGIN_REQUEST 0x03
177#define ISCSI_LOGIN_FLAG_TRANSITION 0x80
180#define ISCSI_LOGIN_FLAG_CONTINUE 0x40
183#define ISCSI_LOGIN_CSG_MASK 0x0c
184#define ISCSI_LOGIN_CSG_SECURITY_NEGOTIATION 0x00
185#define ISCSI_LOGIN_CSG_OPERATIONAL_NEGOTIATION 0x04
186#define ISCSI_LOGIN_CSG_FULL_FEATURE_PHASE 0x0c
189#define ISCSI_LOGIN_NSG_MASK 0x03
190#define ISCSI_LOGIN_NSG_SECURITY_NEGOTIATION 0x00
191#define ISCSI_LOGIN_NSG_OPERATIONAL_NEGOTIATION 0x01
192#define ISCSI_LOGIN_NSG_FULL_FEATURE_PHASE 0x03
195#define ISCSI_ISID_IANA 0x40000000
202#define IANA_EN_FEN_SYSTEMS 10019
244#define ISCSI_OPCODE_LOGIN_RESPONSE 0x23
247#define ISCSI_STATUS_SUCCESS 0x00
248#define ISCSI_STATUS_REDIRECT 0x01
249#define ISCSI_STATUS_INITIATOR_ERROR 0x02
250#define ISCSI_STATUS_INITIATOR_ERROR_AUTHENTICATION 0x01
251#define ISCSI_STATUS_INITIATOR_ERROR_AUTHORISATION 0x02
252#define ISCSI_STATUS_INITIATOR_ERROR_NOT_FOUND 0x03
253#define ISCSI_STATUS_INITIATOR_ERROR_REMOVED 0x04
254#define ISCSI_STATUS_TARGET_ERROR 0x03
255#define ISCSI_STATUS_TARGET_ERROR_UNAVAILABLE 0x01
256#define ISCSI_STATUS_TARGET_ERROR_NO_RESOURCES 0x02
286#define ISCSI_OPCODE_SCSI_COMMAND 0x01
289#define ISCSI_COMMAND_FLAG_READ 0x40
292#define ISCSI_COMMAND_FLAG_WRITE 0x20
295#define ISCSI_COMMAND_ATTR_UNTAGGED 0x00
296#define ISCSI_COMMAND_ATTR_SIMPLE 0x01
297#define ISCSI_COMMAND_ATTR_ORDERED 0x02
298#define ISCSI_COMMAND_ATTR_HEAD_OF_QUEUE 0x03
299#define ISCSI_COMMAND_ATTR_ACA 0x04
337#define ISCSI_OPCODE_SCSI_RESPONSE 0x21
340#define ISCSI_RESPONSE_COMMAND_COMPLETE 0x00
343#define ISCSI_RESPONSE_TARGET_FAILURE 0x01
346#define ISCSI_RESPONSE_FLAG_OVERFLOW 0x20
349#define ISCSI_RESPONSE_FLAG_UNDERFLOW 0x40
387#define ISCSI_OPCODE_DATA_IN 0x25
390#define ISCSI_DATA_FLAG_ACKNOWLEDGE 0x40
393#define ISCSI_DATA_FLAG_OVERFLOW 0x04
396#define ISCSI_DATA_FLAG_UNDERFLOW 0x02
399#define ISCSI_DATA_FLAG_STATUS 0x01
435#define ISCSI_OPCODE_DATA_OUT 0x05
471#define ISCSI_OPCODE_R2T 0x31
501#define ISCSI_OPCODE_NOP_IN 0x20
670#define ISCSI_STATUS_SECURITY_NEGOTIATION_PHASE \
671 ( ISCSI_LOGIN_CSG_SECURITY_NEGOTIATION | \
672 ISCSI_LOGIN_NSG_OPERATIONAL_NEGOTIATION )
677#define ISCSI_STATUS_OPERATIONAL_NEGOTIATION_PHASE \
678 ( ISCSI_LOGIN_CSG_OPERATIONAL_NEGOTIATION | \
679 ISCSI_LOGIN_NSG_FULL_FEATURE_PHASE )
682#define ISCSI_STATUS_FULL_FEATURE_PHASE ISCSI_LOGIN_CSG_FULL_FEATURE_PHASE
685#define ISCSI_STATUS_PHASE_MASK ( ISCSI_LOGIN_CSG_MASK | ISCSI_LOGIN_NSG_MASK )
688#define ISCSI_STATUS_STRINGS_SECURITY 0x0100
691#define ISCSI_STATUS_STRINGS_CHAP_ALGORITHM 0x0200
694#define ISCSI_STATUS_STRINGS_CHAP_RESPONSE 0x0400
697#define ISCSI_STATUS_STRINGS_CHAP_CHALLENGE 0x0800
700#define ISCSI_STATUS_STRINGS_OPERATIONAL 0x1000
703#define ISCSI_STATUS_STRINGS_MASK 0xff00
706#define ISCSI_STATUS_AUTH_FORWARD_REQUIRED 0x00010000
709#define ISCSI_STATUS_AUTH_REVERSE_REQUIRED 0x00020000
712#define ISCSI_STATUS_AUTH_REVERSE_OK 0x00040000
715#define ISCSI_DEFAULT_IQN_PREFIX "iqn.2010-04.org.ipxe"
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
#define SETTING_SANBOOT_EXTRA
SAN boot additional settings.
#define __setting(setting_order, name)
Declare a configuration setting.
iscsi_rx_state
State of an iSCSI RX engine.
@ ISCSI_RX_AHS
Receiving the additional header segment.
@ ISCSI_RX_DATA
Receiving the data segment.
@ ISCSI_RX_BHS
Receiving the basic header segment.
@ ISCSI_RX_DATA_PADDING
Receiving the data segment padding.
iscsi_tx_state
State of an iSCSI TX engine.
@ ISCSI_TX_BHS
Sending the basic header segment.
@ ISCSI_TX_AHS
Sending the additional header segment.
@ ISCSI_TX_DATA
Sending the data segment.
@ ISCSI_TX_IDLE
Nothing to send.
An ACPI descriptor (used to construct ACPI tables)
iSCSI basic header segment common request fields
uint8_t other_b[8]
Fields specific to the PDU type.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t itt
Initiator Task Tag.
uint32_t expcmdsn
Expected command sequence number.
uint8_t other_d[16]
Fields specific to the PDU type.
uint8_t other_c[4]
Fields specific to the PDU type.
uint32_t statsn
Status sequence number.
uint8_t other_a[2]
Fields specific to the PDU type.
iSCSI basic header segment common fields
uint8_t other_b[8]
Fields specific to the PDU type.
uint8_t other_a[2]
Fields specific to the PDU type.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t itt
Initiator Task Tag.
uint8_t other_c[28]
Fields specific to the PDU type.
iSCSI data-in basic header segment
struct scsi_lun lun
Logical Unit Number.
uint32_t maxcmdsn
Maximum command sequence number.
uint32_t ttt
Target Transfer Tag.
uint32_t expcmdsn
Expected command sequence number.
uint8_t reserved_a
Reserved.
uint32_t itt
Initiator Task Tag.
uint32_t offset
Buffer offset.
uint32_t datasn
Data sequence number.
uint32_t statsn
Status sequence number.
uint8_t status
SCSI status code.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t residual_count
Residual count.
iSCSI data-out basic header segment
uint32_t reserved_b
Reserved.
uint32_t reserved_c
Reserved.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t datasn
Data sequence number.
struct scsi_lun lun
Logical Unit Number.
uint32_t itt
Initiator Task Tag.
uint32_t expstatsn
Expected status sequence number.
uint32_t reserved_d
Reserved.
uint32_t ttt
Target Transfer Tag.
uint32_t offset
Buffer offset.
uint16_t reserved_a
Reserved.
iSCSI login request basic header segment
uint8_t reserved_b[16]
Reserved.
uint32_t cmdsn
Command sequence number.
uint16_t reserved_a
Reserved.
uint8_t version_max
Maximum supported version number.
uint8_t version_min
Minimum supported version number.
uint32_t expstatsn
Expected status sequence number.
uint32_t itt
Initiator Task Tag.
union iscsi_segment_lengths lengths
Segment lengths.
uint16_t isid_iana_qual
Initiator session ID (IANA format) qualifier.
uint32_t isid_iana_en
Initiator session ID (IANA format) enterprise number and flags.
uint16_t cid
Connection ID.
uint16_t tsih
Target session identifying handle.
iSCSI login response basic header segment
uint8_t version_min
Minimum supported version number.
uint32_t statsn
Status sequence number.
uint8_t version_max
Maximum supported version number.
uint32_t expcmdsn
Expected command sequence number.
uint8_t status_detail
Status detail.
uint16_t isid_iana_qual
Initiator session ID (IANA format) qualifier.
uint8_t status_class
Status class.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t maxcmdsn
Maximum command sequence number.
uint16_t tsih
Target session identifying handle.
uint32_t isid_iana_en
Initiator session ID (IANA format) enterprise number and flags.
uint8_t reserved_b[10]
Reserved.
uint32_t itt
Initiator Task Tag.
uint32_t reserved_a
Reserved.
iSCSI request to transfer basic header segment
uint32_t maxcmdsn
Maximum command sequence number.
union iscsi_segment_lengths lengths
Segment lengths.
struct scsi_lun lun
Logical Unit Number.
uint32_t statsn
Status sequence number.
uint16_t reserved_a
Reserved.
uint32_t itt
Initiator Task Tag.
uint32_t ttt
Target Transfer Tag.
uint32_t len
Desired data transfer length.
uint32_t expcmdsn
Expected command sequence number.
uint32_t offset
Buffer offset.
uint32_t r2tsn
R2T sequence number.
iSCSI SCSI command basic header segment
union scsi_cdb cdb
SCSI Command Descriptor Block (CDB)
uint16_t reserved_a
Reserved.
uint32_t exp_len
Expected data transfer length.
struct scsi_lun lun
SCSI Logical Unit Number.
uint32_t expstatsn
Expected status sequence number.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t cmdsn
Command sequence number.
uint32_t itt
Initiator Task Tag.
iSCSI SCSI response basic header segment
uint32_t itt
Initiator Task Tag.
uint32_t bidi_residual_count
Bidirectional read residual count.
uint8_t status
SCSI status code.
uint32_t residual_count
Residual count.
uint8_t response
Response code.
uint32_t expcmdsn
Expected command sequence number.
uint32_t maxcmdsn
Maximum command sequence number.
uint32_t expdatasn
Expected data sequence number.
uint8_t reserved_a[8]
Reserved.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t statsn
Status sequence number.
iSCSI NOP-In basic header segment
uint32_t expcmdsn
Expected command sequence number.
uint8_t reserved_b[12]
Reserved.
uint32_t maxcmdsn
Maximum command sequence number.
struct scsi_lun lun
Logical Unit Number.
uint32_t statsn
Status sequence number.
uint8_t reserved_a[3]
Reserved.
uint32_t ttt
Target Transfer Tag.
union iscsi_segment_lengths lengths
Segment lengths.
uint32_t itt
Initiator Task Tag.
void * rx_buffer
Buffer for received data (not always used)
char * target_iqn
Target IQN.
char * initiator_password
Initiator password (if any)
union iscsi_bhs tx_bhs
Basic header segment for current TX PDU.
uint32_t cmdsn
Command sequence number.
uint32_t ttt
Target transfer tag.
enum iscsi_rx_state rx_state
State of the RX engine.
struct scsi_lun lun
SCSI LUN (for boot firmware table)
uint32_t transfer_len
Transfer length.
char * target_password
Target password (if any)
unsigned char chap_challenge[17]
CHAP challenge (for target auth only)
uint32_t transfer_offset
Transfer offset.
union iscsi_bhs rx_bhs
Basic header segment for current RX PDU.
struct refcnt refcnt
Reference counter.
struct sockaddr target_sockaddr
Target socket address (for boot firmware table)
size_t max_burst_len
Maximum burst length.
size_t rx_offset
Byte offset within the current RX state.
char * initiator_username
Initiator username (if any)
char * initiator_iqn
Initiator IQN.
struct interface control
SCSI command-issuing interface.
enum iscsi_tx_state tx_state
State of the TX engine.
char * target_username
Target username (if any)
uint32_t itt
Initiator task tag.
struct chap_response chap
CHAP response (used for both initiator and target auth)
uint16_t isid_iana_qual
Initiator session ID (IANA format) qualifier.
int status
Session status.
uint32_t statsn
Status sequence number.
unsigned int target_port
Target port.
struct interface data
SCSI command interface.
size_t rx_len
Length of the current RX state.
struct process process
TX process.
struct scsi_cmd * command
Current SCSI command, if any.
struct acpi_descriptor desc
ACPI descriptor.
char * target_address
Target address.
struct interface socket
Transport-layer socket.
A SCSI command information unit.
Generalized socket address structure.
An iSCSI basic header segment.
struct iscsi_bhs_data_in data_in
unsigned char bytes[sizeof(struct iscsi_bhs_common)]
struct iscsi_bhs_login_request login_request
struct iscsi_bhs_common common
struct iscsi_bhs_scsi_response scsi_response
struct iscsi_bhs_scsi_command scsi_command
struct iscsi_bhs_common_response common_response
struct iscsi_nop_in nop_in
struct iscsi_bhs_login_response login_response
struct iscsi_bhs_data_out data_out
uint32_t ahs_and_data_len
The data length (measured in bytes), in network byte order, with ahs_len as the first byte.
uint8_t data_len[3]
The data length (measured in bytes), in network byte order.
uint8_t ahs_len
The AHS length (measured in dwords)
A SCSI Command Data Block.
Data transfer interfaces.