[SCSI] iscsi_tcp, libiscsi: initial AHS Support
[safe/jmp/linux-2.6] / include / scsi / iscsi_proto.h
index 8d31904..6947082 100644 (file)
 #ifndef ISCSI_PROTO_H
 #define ISCSI_PROTO_H
 
-#define ISCSI_VERSION_STR      "0.3"
-#define ISCSI_DATE_STR         "22-Apr-2005"
 #define ISCSI_DRAFT20_VERSION  0x00
 
 /* default iSCSI listen port for incoming connections */
 #define ISCSI_LISTEN_PORT      3260
 
 /* Padding word length */
-#define PAD_WORD_LEN           4
+#define ISCSI_PAD_LEN          4
 
 /*
  * useful common(control and data pathes) macro
 }
 #define zero_data(p) {p[0]=0;p[1]=0;p[2]=0;}
 
+/* initiator tags; opaque for target */
+typedef uint32_t __bitwise__ itt_t;
+/* below makes sense only for initiator that created this tag */
+#define build_itt(itt, id, age) ((__force itt_t)\
+       ((itt) | ((id) << ISCSI_CID_SHIFT) | ((age) << ISCSI_AGE_SHIFT)))
+#define get_itt(itt) ((__force uint32_t)(itt_t)(itt) & ISCSI_ITT_MASK)
+#define RESERVED_ITT ((__force itt_t)0xffffffff)
+
 /*
  * iSCSI Template Message Header
  */
@@ -52,7 +58,7 @@ struct iscsi_hdr {
        uint8_t         hlength;        /* AHSs total length */
        uint8_t         dlength[3];     /* Data length */
        uint8_t         lun[8];
-       __be32          itt;            /* Initiator Task Tag */
+       itt_t           itt;            /* Initiator Task Tag, opaque for target */
        __be32          ttt;            /* Target Task Tag */
        __be32          statsn;
        __be32          exp_statsn;
@@ -113,7 +119,7 @@ struct iscsi_cmd {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32 itt;     /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32 data_length;
        __be32 cmdsn;
        __be32 exp_statsn;
@@ -141,6 +147,14 @@ struct iscsi_rlength_ahdr {
        __be32 read_length;
 };
 
+/* Extended CDB AHS */
+struct iscsi_ecdb_ahdr {
+       __be16 ahslength;       /* CDB length - 15, including reserved byte */
+       uint8_t ahstype;
+       uint8_t reserved;
+       uint8_t ecdb[260 - 16]; /* 4-byte aligned extended CDB spillover */
+};
+
 /* SCSI Response Header */
 struct iscsi_cmd_rsp {
        uint8_t opcode;
@@ -150,7 +164,7 @@ struct iscsi_cmd_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  rsvd1;
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -208,7 +222,7 @@ struct iscsi_nopout {
        uint8_t rsvd3;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  cmdsn;
        __be32  exp_statsn;
@@ -223,7 +237,7 @@ struct iscsi_nopin {
        uint8_t rsvd3;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -239,8 +253,8 @@ struct iscsi_tm {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;    /* Initiator Task Tag */
-       __be32  rtt;    /* Reference Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
+       itt_t    rtt;   /* Reference Task Tag */
        __be32  cmdsn;
        __be32  exp_statsn;
        __be32  refcmdsn;
@@ -269,8 +283,8 @@ struct iscsi_tm_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd2[8];
-       __be32  itt;    /* Initiator Task Tag */
-       __be32  rtt;    /* Reference Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
+       itt_t    rtt;   /* Reference Task Tag */
        __be32  statsn;
        __be32  exp_cmdsn;
        __be32  max_cmdsn;
@@ -295,7 +309,7 @@ struct iscsi_r2t_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -313,7 +327,7 @@ struct iscsi_data {
        uint8_t rsvd3;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;
+       itt_t    itt;
        __be32  ttt;
        __be32  rsvd4;
        __be32  exp_statsn;
@@ -333,7 +347,7 @@ struct iscsi_data_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t lun[8];
-       __be32  itt;
+       itt_t    itt;
        __be32  ttt;
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -357,7 +371,7 @@ struct iscsi_text {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd4[8];
-       __be32  itt;
+       itt_t    itt;
        __be32  ttt;
        __be32  cmdsn;
        __be32  exp_statsn;
@@ -375,7 +389,7 @@ struct iscsi_text_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd4[8];
-       __be32  itt;
+       itt_t    itt;
        __be32  ttt;
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -394,7 +408,7 @@ struct iscsi_login {
        uint8_t dlength[3];
        uint8_t isid[6];        /* Initiator Session ID */
        __be16  tsih;   /* Target Session Handle */
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be16  cid;
        __be16  rsvd3;
        __be32  cmdsn;
@@ -423,7 +437,7 @@ struct iscsi_login_rsp {
        uint8_t dlength[3];
        uint8_t isid[6];        /* Initiator Session ID */
        __be16  tsih;   /* Target Session Handle */
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  rsvd3;
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -480,7 +494,7 @@ struct iscsi_logout {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd2[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be16  cid;
        uint8_t rsvd3[2];
        __be32  cmdsn;
@@ -507,7 +521,7 @@ struct iscsi_logout_rsp {
        uint8_t hlength;
        uint8_t dlength[3];
        uint8_t rsvd3[8];
-       __be32  itt;    /* Initiator Task Tag */
+       itt_t    itt;   /* Initiator Task Tag */
        __be32  rsvd4;
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -530,7 +544,7 @@ struct iscsi_snack {
        uint8_t opcode;
        uint8_t flags;
        uint8_t rsvd2[14];
-       __be32  itt;
+       itt_t    itt;
        __be32  begrun;
        __be32  runlength;
        __be32  exp_statsn;
@@ -548,9 +562,11 @@ struct iscsi_reject {
        uint8_t flags;
        uint8_t reason;
        uint8_t rsvd2;
-       uint8_t rsvd3;
+       uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t rsvd4[16];
+       uint8_t rsvd3[8];
+       __be32  ffffffff;
+       uint8_t rsvd4[4];
        __be32  statsn;
        __be32  exp_cmdsn;
        __be32  max_cmdsn;
@@ -560,17 +576,17 @@ struct iscsi_reject {
 };
 
 /* Reason for Reject */
-#define CMD_BEFORE_LOGIN       1
-#define DATA_DIGEST_ERROR      2
-#define DATA_SNACK_REJECT      3
-#define ISCSI_PROTOCOL_ERROR   4
-#define CMD_NOT_SUPPORTED      5
-#define IMM_CMD_REJECT         6
-#define TASK_IN_PROGRESS       7
-#define INVALID_SNACK          8
-#define BOOKMARK_REJECTED      9
-#define BOOKMARK_NO_RESOURCES  10
-#define NEGOTIATION_RESET      11
+#define ISCSI_REASON_CMD_BEFORE_LOGIN  1
+#define ISCSI_REASON_DATA_DIGEST_ERROR 2
+#define ISCSI_REASON_DATA_SNACK_REJECT 3
+#define ISCSI_REASON_PROTOCOL_ERROR    4
+#define ISCSI_REASON_CMD_NOT_SUPPORTED 5
+#define ISCSI_REASON_IMM_CMD_REJECT            6
+#define ISCSI_REASON_TASK_IN_PROGRESS  7
+#define ISCSI_REASON_INVALID_SNACK             8
+#define ISCSI_REASON_BOOKMARK_INVALID  9
+#define ISCSI_REASON_BOOKMARK_NO_RESOURCES     10
+#define ISCSI_REASON_NEGOTIATION_RESET 11
 
 /* Max. number of Key=Value pairs in a text message */
 #define MAX_KEY_VALUE_PAIRS    8192
@@ -580,7 +596,19 @@ struct iscsi_reject {
 #define VALUE_MAXLEN           255
 #define TARGET_NAME_MAXLEN     VALUE_MAXLEN
 
-#define DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH   8192
+#define ISCSI_DEF_MAX_RECV_SEG_LEN             8192
+#define ISCSI_MIN_MAX_RECV_SEG_LEN             512
+#define ISCSI_MAX_MAX_RECV_SEG_LEN             16777215
+
+#define ISCSI_DEF_FIRST_BURST_LEN              65536
+#define ISCSI_MIN_FIRST_BURST_LEN              512
+#define ISCSI_MAX_FIRST_BURST_LEN              16777215
+
+#define ISCSI_DEF_MAX_BURST_LEN                        262144
+#define ISCSI_MIN_MAX_BURST_LEN                        512
+#define ISCSI_MAX_MAX_BURST_LEN                        16777215
+
+#define ISCSI_DEF_TIME2WAIT                    2
 
 /************************* RFC 3720 End *****************************/