linux/include/scsi/iscsi_proto.h

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * RFC 3720 (iSCSI) protocol data types
 *
 * Copyright (C) 2005 Dmitry Yusupov
 * Copyright (C) 2005 Alex Aizman
 * maintained by [email protected]
 */

#ifndef ISCSI_PROTO_H
#define ISCSI_PROTO_H

#include <linux/types.h>
#include <scsi/scsi.h>

#define ISCSI_DRAFT20_VERSION

/* default iSCSI listen port for incoming connections */
#define ISCSI_LISTEN_PORT

/* iSCSI header length */
#define ISCSI_HDR_LEN

/* iSCSI CRC32C length */
#define ISCSI_CRC_LEN

/* Padding word length */
#define ISCSI_PAD_LEN

/*
 * Serial Number Arithmetic, 32 bits, RFC1982
 */

static inline int iscsi_sna_lt(u32 n1, u32 n2)
{}

static inline int iscsi_sna_lte(u32 n1, u32 n2)
{}

static inline int iscsi_sna_gt(u32 n1, u32 n2)
{}

static inline int iscsi_sna_gte(u32 n1, u32 n2)
{}

/*
 * useful common(control and data paths) macro
 */
#define ntoh24(p)
#define hton24(p, v)
#define zero_data(p)

/* initiator tags; opaque for target */
itt_t;
/* below makes sense only for initiator that created this tag */
#define build_itt(itt, age)
#define get_itt(itt)
#define RESERVED_ITT

/*
 * iSCSI Template Message Header
 */
struct iscsi_hdr {};

/************************* RFC 3720 Begin *****************************/

#define ISCSI_RESERVED_TAG

/* Opcode encoding bits */
#define ISCSI_OP_RETRY
#define ISCSI_OP_IMMEDIATE
#define ISCSI_OPCODE_MASK

/* Initiator Opcode values */
#define ISCSI_OP_NOOP_OUT
#define ISCSI_OP_SCSI_CMD
#define ISCSI_OP_SCSI_TMFUNC
#define ISCSI_OP_LOGIN
#define ISCSI_OP_TEXT
#define ISCSI_OP_SCSI_DATA_OUT
#define ISCSI_OP_LOGOUT
#define ISCSI_OP_SNACK

#define ISCSI_OP_VENDOR1_CMD
#define ISCSI_OP_VENDOR2_CMD
#define ISCSI_OP_VENDOR3_CMD
#define ISCSI_OP_VENDOR4_CMD

/* Target Opcode values */
#define ISCSI_OP_NOOP_IN
#define ISCSI_OP_SCSI_CMD_RSP
#define ISCSI_OP_SCSI_TMFUNC_RSP
#define ISCSI_OP_LOGIN_RSP
#define ISCSI_OP_TEXT_RSP
#define ISCSI_OP_SCSI_DATA_IN
#define ISCSI_OP_LOGOUT_RSP
#define ISCSI_OP_R2T
#define ISCSI_OP_ASYNC_EVENT
#define ISCSI_OP_REJECT

struct iscsi_ahs_hdr {};

#define ISCSI_AHSTYPE_CDB
#define ISCSI_AHSTYPE_RLENGTH
#define ISCSI_CDB_SIZE

/* iSCSI PDU Header */
struct iscsi_scsi_req {};

/* Command PDU flags */
#define ISCSI_FLAG_CMD_FINAL
#define ISCSI_FLAG_CMD_READ
#define ISCSI_FLAG_CMD_WRITE
#define ISCSI_FLAG_CMD_ATTR_MASK

/* SCSI Command Attribute values */
#define ISCSI_ATTR_UNTAGGED
#define ISCSI_ATTR_SIMPLE
#define ISCSI_ATTR_ORDERED
#define ISCSI_ATTR_HEAD_OF_QUEUE
#define ISCSI_ATTR_ACA

struct iscsi_rlength_ahdr {};

/* Extended CDB AHS */
struct iscsi_ecdb_ahdr {};

/* SCSI Response Header */
struct iscsi_scsi_rsp {};

/* Command Response PDU flags */
#define ISCSI_FLAG_CMD_BIDI_OVERFLOW
#define ISCSI_FLAG_CMD_BIDI_UNDERFLOW
#define ISCSI_FLAG_CMD_OVERFLOW
#define ISCSI_FLAG_CMD_UNDERFLOW

/* iSCSI Status values. Valid if Rsp Selector bit is not set */
#define ISCSI_STATUS_CMD_COMPLETED
#define ISCSI_STATUS_TARGET_FAILURE
#define ISCSI_STATUS_SUBSYS_FAILURE

/* Asynchronous Event Header */
struct iscsi_async {};

/* iSCSI Event Codes */
#define ISCSI_ASYNC_MSG_SCSI_EVENT
#define ISCSI_ASYNC_MSG_REQUEST_LOGOUT
#define ISCSI_ASYNC_MSG_DROPPING_CONNECTION
#define ISCSI_ASYNC_MSG_DROPPING_ALL_CONNECTIONS
#define ISCSI_ASYNC_MSG_PARAM_NEGOTIATION
#define ISCSI_ASYNC_MSG_VENDOR_SPECIFIC

/* NOP-Out Message */
struct iscsi_nopout {};

/* NOP-In Message */
struct iscsi_nopin {};

/* SCSI Task Management Message Header */
struct iscsi_tm {};

#define ISCSI_FLAG_TM_FUNC_MASK

/* Function values */
#define ISCSI_TM_FUNC_ABORT_TASK
#define ISCSI_TM_FUNC_ABORT_TASK_SET
#define ISCSI_TM_FUNC_CLEAR_ACA
#define ISCSI_TM_FUNC_CLEAR_TASK_SET
#define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET
#define ISCSI_TM_FUNC_TARGET_WARM_RESET
#define ISCSI_TM_FUNC_TARGET_COLD_RESET
#define ISCSI_TM_FUNC_TASK_REASSIGN

#define ISCSI_TM_FUNC_VALUE(hdr)

/* SCSI Task Management Response Header */
struct iscsi_tm_rsp {};

/* Response values */
#define ISCSI_TMF_RSP_COMPLETE
#define ISCSI_TMF_RSP_NO_TASK
#define ISCSI_TMF_RSP_NO_LUN
#define ISCSI_TMF_RSP_TASK_ALLEGIANT
#define ISCSI_TMF_RSP_NO_FAILOVER
#define ISCSI_TMF_RSP_NOT_SUPPORTED
#define ISCSI_TMF_RSP_AUTH_FAILED
#define ISCSI_TMF_RSP_REJECTED

/* Ready To Transfer Header */
struct iscsi_r2t_rsp {};

/* SCSI Data Hdr */
struct iscsi_data {};

/* SCSI Data Response Hdr */
struct iscsi_data_rsp {};

/* Data Response PDU flags */
#define ISCSI_FLAG_DATA_ACK
#define ISCSI_FLAG_DATA_OVERFLOW
#define ISCSI_FLAG_DATA_UNDERFLOW
#define ISCSI_FLAG_DATA_STATUS

/* Text Header */
struct iscsi_text {};

#define ISCSI_FLAG_TEXT_CONTINUE

/* Text Response Header */
struct iscsi_text_rsp {};

/* Login Header */
struct iscsi_login_req {};

/* Login PDU flags */
#define ISCSI_FLAG_LOGIN_TRANSIT
#define ISCSI_FLAG_LOGIN_CONTINUE
#define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK
#define ISCSI_FLAG_LOGIN_CURRENT_STAGE1
#define ISCSI_FLAG_LOGIN_CURRENT_STAGE2
#define ISCSI_FLAG_LOGIN_CURRENT_STAGE3
#define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK
#define ISCSI_FLAG_LOGIN_NEXT_STAGE1
#define ISCSI_FLAG_LOGIN_NEXT_STAGE2
#define ISCSI_FLAG_LOGIN_NEXT_STAGE3

#define ISCSI_LOGIN_CURRENT_STAGE(flags)
#define ISCSI_LOGIN_NEXT_STAGE(flags)

/* Login Response Header */
struct iscsi_login_rsp {};

/* Login stage (phase) codes for CSG, NSG */
#define ISCSI_INITIAL_LOGIN_STAGE
#define ISCSI_SECURITY_NEGOTIATION_STAGE
#define ISCSI_OP_PARMS_NEGOTIATION_STAGE
#define ISCSI_FULL_FEATURE_PHASE

/* Login Status response classes */
#define ISCSI_STATUS_CLS_SUCCESS
#define ISCSI_STATUS_CLS_REDIRECT
#define ISCSI_STATUS_CLS_INITIATOR_ERR
#define ISCSI_STATUS_CLS_TARGET_ERR

/* Login Status response detail codes */
/* Class-0 (Success) */
#define ISCSI_LOGIN_STATUS_ACCEPT

/* Class-1 (Redirection) */
#define ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP
#define ISCSI_LOGIN_STATUS_TGT_MOVED_PERM

/* Class-2 (Initiator Error) */
#define ISCSI_LOGIN_STATUS_INIT_ERR
#define ISCSI_LOGIN_STATUS_AUTH_FAILED
#define ISCSI_LOGIN_STATUS_TGT_FORBIDDEN
#define ISCSI_LOGIN_STATUS_TGT_NOT_FOUND
#define ISCSI_LOGIN_STATUS_TGT_REMOVED
#define ISCSI_LOGIN_STATUS_NO_VERSION
#define ISCSI_LOGIN_STATUS_ISID_ERROR
#define ISCSI_LOGIN_STATUS_MISSING_FIELDS
#define ISCSI_LOGIN_STATUS_CONN_ADD_FAILED
#define ISCSI_LOGIN_STATUS_NO_SESSION_TYPE
#define ISCSI_LOGIN_STATUS_NO_SESSION
#define ISCSI_LOGIN_STATUS_INVALID_REQUEST

/* Class-3 (Target Error) */
#define ISCSI_LOGIN_STATUS_TARGET_ERROR
#define ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE
#define ISCSI_LOGIN_STATUS_NO_RESOURCES

/* Logout Header */
struct iscsi_logout {};

/* Logout PDU flags */
#define ISCSI_FLAG_LOGOUT_REASON_MASK

/* logout reason_code values */

#define ISCSI_LOGOUT_REASON_CLOSE_SESSION
#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION
#define ISCSI_LOGOUT_REASON_RECOVERY
#define ISCSI_LOGOUT_REASON_AEN_REQUEST

/* Logout Response Header */
struct iscsi_logout_rsp {};

/* logout response status values */

#define ISCSI_LOGOUT_SUCCESS
#define ISCSI_LOGOUT_CID_NOT_FOUND
#define ISCSI_LOGOUT_RECOVERY_UNSUPPORTED
#define ISCSI_LOGOUT_CLEANUP_FAILED

/* SNACK Header */
struct iscsi_snack {};

/* SNACK PDU flags */
#define ISCSI_FLAG_SNACK_TYPE_DATA
#define ISCSI_FLAG_SNACK_TYPE_R2T
#define ISCSI_FLAG_SNACK_TYPE_STATUS
#define ISCSI_FLAG_SNACK_TYPE_DATA_ACK
#define ISCSI_FLAG_SNACK_TYPE_RDATA
#define ISCSI_FLAG_SNACK_TYPE_MASK

/* Reject Message Header */
struct iscsi_reject {};

/* Reason for Reject */
#define ISCSI_REASON_CMD_BEFORE_LOGIN
#define ISCSI_REASON_DATA_DIGEST_ERROR
#define ISCSI_REASON_DATA_SNACK_REJECT
#define ISCSI_REASON_PROTOCOL_ERROR
#define ISCSI_REASON_CMD_NOT_SUPPORTED
#define ISCSI_REASON_IMM_CMD_REJECT
#define ISCSI_REASON_TASK_IN_PROGRESS
#define ISCSI_REASON_INVALID_SNACK
#define ISCSI_REASON_BOOKMARK_INVALID
#define ISCSI_REASON_BOOKMARK_NO_RESOURCES
#define ISCSI_REASON_NEGOTIATION_RESET

/* Max. number of Key=Value pairs in a text message */
#define MAX_KEY_VALUE_PAIRS

/* maximum length for text keys/values */
#define KEY_MAXLEN
#define VALUE_MAXLEN
#define TARGET_NAME_MAXLEN

#define ISCSI_DEF_MAX_RECV_SEG_LEN
#define ISCSI_MIN_MAX_RECV_SEG_LEN
#define ISCSI_MAX_MAX_RECV_SEG_LEN

#define ISCSI_DEF_FIRST_BURST_LEN
#define ISCSI_MIN_FIRST_BURST_LEN
#define ISCSI_MAX_FIRST_BURST_LEN

#define ISCSI_DEF_MAX_BURST_LEN
#define ISCSI_MIN_MAX_BURST_LEN
#define ISCSI_MAX_MAX_BURST_LEN

#define ISCSI_DEF_TIME2WAIT

#define ISCSI_NAME_LEN

/************************* RFC 3720 End *****************************/

#endif /* ISCSI_PROTO_H */