^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * RFC 3720 (iSCSI) protocol data types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2005 Dmitry Yusupov
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2005 Alex Aizman
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * maintained by open-iscsi@googlegroups.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef ISCSI_PROTO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define ISCSI_PROTO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <scsi/scsi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define ISCSI_DRAFT20_VERSION 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* default iSCSI listen port for incoming connections */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define ISCSI_LISTEN_PORT 3260
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /* iSCSI header length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define ISCSI_HDR_LEN 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /* iSCSI CRC32C length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define ISCSI_CRC_LEN 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /* Padding word length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define ISCSI_PAD_LEN 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * Serial Number Arithmetic, 32 bits, RFC1982
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) static inline int iscsi_sna_lt(u32 n1, u32 n2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) return (s32)(n1 - n2) < 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) static inline int iscsi_sna_lte(u32 n1, u32 n2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) return (s32)(n1 - n2) <= 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) static inline int iscsi_sna_gt(u32 n1, u32 n2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) return (s32)(n1 - n2) > 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) static inline int iscsi_sna_gte(u32 n1, u32 n2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) return (s32)(n1 - n2) >= 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) * useful common(control and data pathes) macro
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2]))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define hton24(p, v) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) p[0] = (((v) >> 16) & 0xFF); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) p[1] = (((v) >> 8) & 0xFF); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) p[2] = ((v) & 0xFF); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define zero_data(p) {p[0]=0;p[1]=0;p[2]=0;}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* initiator tags; opaque for target */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) typedef uint32_t __bitwise itt_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* below makes sense only for initiator that created this tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define build_itt(itt, age) ((__force itt_t)\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) ((itt) | ((age) << ISCSI_AGE_SHIFT)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define get_itt(itt) ((__force uint32_t)(itt_t)(itt) & ISCSI_ITT_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define RESERVED_ITT ((__force itt_t)0xffffffff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * iSCSI Template Message Header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) struct iscsi_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) uint8_t flags; /* Final bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) uint8_t hlength; /* AHSs total length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) uint8_t dlength[3]; /* Data length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) itt_t itt; /* Initiator Task Tag, opaque for target */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) __be32 ttt; /* Target Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) __be32 max_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) uint8_t other[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /************************* RFC 3720 Begin *****************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define ISCSI_RESERVED_TAG 0xffffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /* Opcode encoding bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define ISCSI_OP_RETRY 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define ISCSI_OP_IMMEDIATE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define ISCSI_OPCODE_MASK 0x3F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* Initiator Opcode values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define ISCSI_OP_NOOP_OUT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define ISCSI_OP_SCSI_CMD 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define ISCSI_OP_SCSI_TMFUNC 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define ISCSI_OP_LOGIN 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define ISCSI_OP_TEXT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define ISCSI_OP_SCSI_DATA_OUT 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define ISCSI_OP_LOGOUT 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define ISCSI_OP_SNACK 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define ISCSI_OP_VENDOR1_CMD 0x1c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define ISCSI_OP_VENDOR2_CMD 0x1d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define ISCSI_OP_VENDOR3_CMD 0x1e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define ISCSI_OP_VENDOR4_CMD 0x1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /* Target Opcode values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define ISCSI_OP_NOOP_IN 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define ISCSI_OP_SCSI_CMD_RSP 0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define ISCSI_OP_SCSI_TMFUNC_RSP 0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define ISCSI_OP_LOGIN_RSP 0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define ISCSI_OP_TEXT_RSP 0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define ISCSI_OP_SCSI_DATA_IN 0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define ISCSI_OP_LOGOUT_RSP 0x26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define ISCSI_OP_R2T 0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define ISCSI_OP_ASYNC_EVENT 0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define ISCSI_OP_REJECT 0x3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct iscsi_ahs_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __be16 ahslength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) uint8_t ahstype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) uint8_t ahspec[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define ISCSI_AHSTYPE_CDB 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define ISCSI_AHSTYPE_RLENGTH 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define ISCSI_CDB_SIZE 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) /* iSCSI PDU Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) struct iscsi_scsi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __be16 rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __be32 data_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) uint8_t cdb[ISCSI_CDB_SIZE]; /* SCSI Command Block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /* Additional Data (Command Dependent) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* Command PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define ISCSI_FLAG_CMD_FINAL 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define ISCSI_FLAG_CMD_READ 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define ISCSI_FLAG_CMD_WRITE 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define ISCSI_FLAG_CMD_ATTR_MASK 0x07 /* 3 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) /* SCSI Command Attribute values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define ISCSI_ATTR_UNTAGGED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define ISCSI_ATTR_SIMPLE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define ISCSI_ATTR_ORDERED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define ISCSI_ATTR_HEAD_OF_QUEUE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define ISCSI_ATTR_ACA 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct iscsi_rlength_ahdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) __be16 ahslength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) uint8_t ahstype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) uint8_t reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) __be32 read_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* Extended CDB AHS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) struct iscsi_ecdb_ahdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) __be16 ahslength; /* CDB length - 15, including reserved byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) uint8_t ahstype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) uint8_t reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* 4-byte aligned extended CDB spillover */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) uint8_t ecdb[SCSI_MAX_VARLEN_CDB_SIZE - ISCSI_CDB_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /* SCSI Response Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) struct iscsi_scsi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) uint8_t response;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) uint8_t cmd_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) uint8_t rsvd[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __be32 rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __be32 exp_datasn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __be32 bi_residual_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) __be32 residual_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) /* Response or Sense Data (optional) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) /* Command Response PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define ISCSI_FLAG_CMD_BIDI_OVERFLOW 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define ISCSI_FLAG_CMD_BIDI_UNDERFLOW 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define ISCSI_FLAG_CMD_OVERFLOW 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define ISCSI_FLAG_CMD_UNDERFLOW 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) /* iSCSI Status values. Valid if Rsp Selector bit is not set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define ISCSI_STATUS_CMD_COMPLETED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define ISCSI_STATUS_TARGET_FAILURE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define ISCSI_STATUS_SUBSYS_FAILURE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) /* Asynchronous Event Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) struct iscsi_async {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) uint8_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) uint8_t rsvd4[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) uint8_t async_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) uint8_t async_vcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) __be16 param1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) __be16 param2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) __be16 param3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) uint8_t rsvd5[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) /* iSCSI Event Codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define ISCSI_ASYNC_MSG_SCSI_EVENT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define ISCSI_ASYNC_MSG_REQUEST_LOGOUT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define ISCSI_ASYNC_MSG_DROPPING_CONNECTION 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define ISCSI_ASYNC_MSG_DROPPING_ALL_CONNECTIONS 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define ISCSI_ASYNC_MSG_PARAM_NEGOTIATION 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define ISCSI_ASYNC_MSG_VENDOR_SPECIFIC 255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) /* NOP-Out Message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) struct iscsi_nopout {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) __be16 rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) uint8_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) __be32 ttt; /* Target Transfer Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) uint8_t rsvd4[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) /* NOP-In Message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) struct iscsi_nopin {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) __be16 rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) uint8_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) __be32 ttt; /* Target Transfer Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) uint8_t rsvd4[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /* SCSI Task Management Message Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) struct iscsi_tm {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) uint8_t rsvd1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) itt_t rtt; /* Reference Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) __be32 refcmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) __be32 exp_datasn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) uint8_t rsvd2[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) #define ISCSI_FLAG_TM_FUNC_MASK 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* Function values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #define ISCSI_TM_FUNC_ABORT_TASK 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) #define ISCSI_TM_FUNC_ABORT_TASK_SET 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define ISCSI_TM_FUNC_CLEAR_ACA 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define ISCSI_TM_FUNC_CLEAR_TASK_SET 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define ISCSI_TM_FUNC_TARGET_WARM_RESET 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define ISCSI_TM_FUNC_TARGET_COLD_RESET 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) #define ISCSI_TM_FUNC_TASK_REASSIGN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define ISCSI_TM_FUNC_VALUE(hdr) ((hdr)->flags & ISCSI_FLAG_TM_FUNC_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) /* SCSI Task Management Response Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) struct iscsi_tm_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) uint8_t response; /* see Response values below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) uint8_t qualifier;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) uint8_t rsvd2[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) itt_t rtt; /* Reference Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) uint8_t rsvd3[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) /* Response values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #define ISCSI_TMF_RSP_COMPLETE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #define ISCSI_TMF_RSP_NO_TASK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) #define ISCSI_TMF_RSP_NO_LUN 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) #define ISCSI_TMF_RSP_TASK_ALLEGIANT 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) #define ISCSI_TMF_RSP_NO_FAILOVER 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) #define ISCSI_TMF_RSP_NOT_SUPPORTED 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) #define ISCSI_TMF_RSP_AUTH_FAILED 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #define ISCSI_TMF_RSP_REJECTED 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) /* Ready To Transfer Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) struct iscsi_r2t_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) __be32 ttt; /* Target Transfer Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) __be32 r2tsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) __be32 data_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) __be32 data_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) /* SCSI Data Hdr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) struct iscsi_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) uint8_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) itt_t itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) __be32 ttt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) __be32 rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) __be32 rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) __be32 datasn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) __be32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) __be32 rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) /* Payload */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) /* SCSI Data Response Hdr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) struct iscsi_data_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) uint8_t cmd_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) struct scsi_lun lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) itt_t itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) __be32 ttt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) __be32 datasn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) __be32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) __be32 residual_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) /* Data Response PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #define ISCSI_FLAG_DATA_ACK 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define ISCSI_FLAG_DATA_OVERFLOW 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) #define ISCSI_FLAG_DATA_UNDERFLOW 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) #define ISCSI_FLAG_DATA_STATUS 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) /* Text Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) struct iscsi_text {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) uint8_t rsvd4[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) itt_t itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) __be32 ttt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) uint8_t rsvd5[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) /* Text - key=value pairs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) #define ISCSI_FLAG_TEXT_CONTINUE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) /* Text Response Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) struct iscsi_text_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) uint8_t rsvd4[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) itt_t itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) __be32 ttt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) uint8_t rsvd5[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) /* Text Response - key:value pairs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /* Login Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) struct iscsi_login_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) uint8_t max_version; /* Max. version supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) uint8_t min_version; /* Min. version supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) uint8_t isid[6]; /* Initiator Session ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) __be16 tsih; /* Target Session Handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) __be16 cid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) __be16 rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) uint8_t rsvd5[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) /* Login PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) #define ISCSI_FLAG_LOGIN_TRANSIT 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) #define ISCSI_FLAG_LOGIN_CONTINUE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) #define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK 0x0C /* 2 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define ISCSI_FLAG_LOGIN_CURRENT_STAGE1 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) #define ISCSI_FLAG_LOGIN_CURRENT_STAGE2 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) #define ISCSI_FLAG_LOGIN_CURRENT_STAGE3 0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK 0x03 /* 2 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) #define ISCSI_FLAG_LOGIN_NEXT_STAGE1 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) #define ISCSI_FLAG_LOGIN_NEXT_STAGE2 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) #define ISCSI_FLAG_LOGIN_NEXT_STAGE3 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) #define ISCSI_LOGIN_CURRENT_STAGE(flags) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) ((flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) #define ISCSI_LOGIN_NEXT_STAGE(flags) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) (flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) /* Login Response Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) struct iscsi_login_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) uint8_t max_version; /* Max. version supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) uint8_t active_version; /* Active version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) uint8_t isid[6]; /* Initiator Session ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) __be16 tsih; /* Target Session Handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) __be32 rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) uint8_t status_class; /* see Login RSP ststus classes below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) uint8_t status_detail; /* see Login RSP Status details below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) uint8_t rsvd4[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) /* Login stage (phase) codes for CSG, NSG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) #define ISCSI_INITIAL_LOGIN_STAGE -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) #define ISCSI_SECURITY_NEGOTIATION_STAGE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) #define ISCSI_OP_PARMS_NEGOTIATION_STAGE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) #define ISCSI_FULL_FEATURE_PHASE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) /* Login Status response classes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) #define ISCSI_STATUS_CLS_SUCCESS 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define ISCSI_STATUS_CLS_REDIRECT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) #define ISCSI_STATUS_CLS_INITIATOR_ERR 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) #define ISCSI_STATUS_CLS_TARGET_ERR 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) /* Login Status response detail codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) /* Class-0 (Success) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) #define ISCSI_LOGIN_STATUS_ACCEPT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) /* Class-1 (Redirection) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) #define ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) #define ISCSI_LOGIN_STATUS_TGT_MOVED_PERM 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) /* Class-2 (Initiator Error) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) #define ISCSI_LOGIN_STATUS_INIT_ERR 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) #define ISCSI_LOGIN_STATUS_AUTH_FAILED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) #define ISCSI_LOGIN_STATUS_TGT_FORBIDDEN 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) #define ISCSI_LOGIN_STATUS_TGT_NOT_FOUND 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) #define ISCSI_LOGIN_STATUS_TGT_REMOVED 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) #define ISCSI_LOGIN_STATUS_NO_VERSION 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) #define ISCSI_LOGIN_STATUS_ISID_ERROR 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) #define ISCSI_LOGIN_STATUS_MISSING_FIELDS 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) #define ISCSI_LOGIN_STATUS_CONN_ADD_FAILED 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) #define ISCSI_LOGIN_STATUS_NO_SESSION_TYPE 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) #define ISCSI_LOGIN_STATUS_NO_SESSION 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) #define ISCSI_LOGIN_STATUS_INVALID_REQUEST 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) /* Class-3 (Target Error) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) #define ISCSI_LOGIN_STATUS_TARGET_ERROR 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) #define ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) #define ISCSI_LOGIN_STATUS_NO_RESOURCES 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) /* Logout Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) struct iscsi_logout {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) uint8_t rsvd1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) uint8_t rsvd2[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) __be16 cid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) uint8_t rsvd3[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) __be32 cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) uint8_t rsvd4[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) /* Logout PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #define ISCSI_FLAG_LOGOUT_REASON_MASK 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) /* logout reason_code values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) #define ISCSI_LOGOUT_REASON_CLOSE_SESSION 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) #define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) #define ISCSI_LOGOUT_REASON_RECOVERY 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define ISCSI_LOGOUT_REASON_AEN_REQUEST 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) /* Logout Response Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) struct iscsi_logout_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) uint8_t response; /* see Logout response values below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) uint8_t rsvd3[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) itt_t itt; /* Initiator Task Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __be32 rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) __be32 rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) __be16 t2wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __be16 t2retain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) __be32 rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) /* logout response status values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) #define ISCSI_LOGOUT_SUCCESS 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) #define ISCSI_LOGOUT_CID_NOT_FOUND 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) #define ISCSI_LOGOUT_RECOVERY_UNSUPPORTED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) #define ISCSI_LOGOUT_CLEANUP_FAILED 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) /* SNACK Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) struct iscsi_snack {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) uint8_t rsvd2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) uint8_t lun[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) itt_t itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) __be32 ttt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) uint8_t rsvd3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) __be32 exp_statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) uint8_t rsvd4[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) __be32 begrun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) __be32 runlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) /* SNACK PDU flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) #define ISCSI_FLAG_SNACK_TYPE_DATA 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) #define ISCSI_FLAG_SNACK_TYPE_R2T 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) #define ISCSI_FLAG_SNACK_TYPE_STATUS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) #define ISCSI_FLAG_SNACK_TYPE_DATA_ACK 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) #define ISCSI_FLAG_SNACK_TYPE_RDATA 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) #define ISCSI_FLAG_SNACK_TYPE_MASK 0x0F /* 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) /* Reject Message Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) struct iscsi_reject {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) uint8_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) uint8_t reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) uint8_t hlength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) uint8_t dlength[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) uint8_t rsvd3[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) __be32 ffffffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) uint8_t rsvd4[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __be32 statsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) __be32 exp_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) __be32 max_cmdsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) __be32 datasn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) uint8_t rsvd5[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) /* Text - Rejected hdr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) /* Reason for Reject */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) #define ISCSI_REASON_CMD_BEFORE_LOGIN 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) #define ISCSI_REASON_DATA_DIGEST_ERROR 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) #define ISCSI_REASON_DATA_SNACK_REJECT 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) #define ISCSI_REASON_PROTOCOL_ERROR 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) #define ISCSI_REASON_CMD_NOT_SUPPORTED 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) #define ISCSI_REASON_IMM_CMD_REJECT 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) #define ISCSI_REASON_TASK_IN_PROGRESS 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) #define ISCSI_REASON_INVALID_SNACK 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) #define ISCSI_REASON_BOOKMARK_INVALID 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) #define ISCSI_REASON_BOOKMARK_NO_RESOURCES 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) #define ISCSI_REASON_NEGOTIATION_RESET 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) /* Max. number of Key=Value pairs in a text message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) #define MAX_KEY_VALUE_PAIRS 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) /* maximum length for text keys/values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) #define KEY_MAXLEN 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) #define VALUE_MAXLEN 255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) #define TARGET_NAME_MAXLEN VALUE_MAXLEN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) #define ISCSI_DEF_MAX_RECV_SEG_LEN 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) #define ISCSI_MIN_MAX_RECV_SEG_LEN 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) #define ISCSI_MAX_MAX_RECV_SEG_LEN 16777215
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) #define ISCSI_DEF_FIRST_BURST_LEN 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) #define ISCSI_MIN_FIRST_BURST_LEN 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) #define ISCSI_MAX_FIRST_BURST_LEN 16777215
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) #define ISCSI_DEF_MAX_BURST_LEN 262144
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) #define ISCSI_MIN_MAX_BURST_LEN 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) #define ISCSI_MAX_MAX_BURST_LEN 16777215
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) #define ISCSI_DEF_TIME2WAIT 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) #define ISCSI_NAME_LEN 224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) /************************* RFC 3720 End *****************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) #endif /* ISCSI_PROTO_H */