]> err.no Git - linux-2.6/blobdiff - include/scsi/iscsi_proto.h
Merge git://oss.sgi.com:8090/xfs/xfs-2.6
[linux-2.6] / include / scsi / iscsi_proto.h
index 6c08551c79f5ef903e11a14a8b6def7070792a56..4a44278ed768c7f89f23643f15f1811be932f35e 100644 (file)
@@ -21,8 +21,6 @@
 #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 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,11 +58,12 @@ 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;
-       uint8_t         other[16];
+       __be32          max_statsn;
+       uint8_t         other[12];
 };
 
 /************************* RFC 3720 Begin *****************************/
@@ -78,6 +85,11 @@ struct iscsi_hdr {
 #define ISCSI_OP_LOGOUT                        0x06
 #define ISCSI_OP_SNACK                 0x10
 
+#define ISCSI_OP_VENDOR1_CMD           0x1c
+#define ISCSI_OP_VENDOR2_CMD           0x1d
+#define ISCSI_OP_VENDOR3_CMD           0x1e
+#define ISCSI_OP_VENDOR4_CMD           0x1f
+
 /* Target Opcode values */
 #define ISCSI_OP_NOOP_IN               0x20
 #define ISCSI_OP_SCSI_CMD_RSP          0x21
@@ -90,16 +102,24 @@ struct iscsi_hdr {
 #define ISCSI_OP_ASYNC_EVENT           0x32
 #define ISCSI_OP_REJECT                        0x3f
 
+struct iscsi_ahs_hdr {
+       __be16 ahslength;
+       uint8_t ahstype;
+       uint8_t ahspec[5];
+};
+
+#define ISCSI_AHSTYPE_CDB              1
+#define ISCSI_AHSTYPE_RLENGTH          2
+
 /* iSCSI PDU Header */
 struct iscsi_cmd {
        uint8_t opcode;
        uint8_t flags;
-       uint8_t rsvd2;
-       uint8_t cmdrn;
+       __be16 rsvd2;
        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;
@@ -120,6 +140,13 @@ struct iscsi_cmd {
 #define ISCSI_ATTR_HEAD_OF_QUEUE       3
 #define ISCSI_ATTR_ACA                 4
 
+struct iscsi_rlength_ahdr {
+       __be16 ahslength;
+       uint8_t ahstype;
+       uint8_t reserved;
+       __be32 read_length;
+};
+
 /* SCSI Response Header */
 struct iscsi_cmd_rsp {
        uint8_t opcode;
@@ -129,7 +156,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;
@@ -187,7 +214,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;
@@ -202,7 +229,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;
@@ -218,8 +245,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;
@@ -227,7 +254,7 @@ struct iscsi_tm {
        uint8_t rsvd2[8];
 };
 
-#define ISCSI_FLAG_TASK_MGMT_FUNCTION_MASK     0x7F
+#define ISCSI_FLAG_TM_FUNC_MASK                        0x7F
 
 /* Function values */
 #define ISCSI_TM_FUNC_ABORT_TASK               1
@@ -248,8 +275,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;
@@ -257,14 +284,14 @@ struct iscsi_tm_rsp {
 };
 
 /* Response values */
-#define SCSI_TCP_TM_RESP_COMPLETE      0x00
-#define SCSI_TCP_TM_RESP_NO_TASK       0x01
-#define SCSI_TCP_TM_RESP_NO_LUN                0x02
-#define SCSI_TCP_TM_RESP_TASK_ALLEGIANT        0x03
-#define SCSI_TCP_TM_RESP_NO_FAILOVER   0x04
-#define SCSI_TCP_TM_RESP_NOT_SUPPORTED 0x05
-#define SCSI_TCP_TM_RESP_AUTH_FAILED   0x06
-#define SCSI_TCP_TM_RESP_REJECTED      0xff
+#define ISCSI_TMF_RSP_COMPLETE         0x00
+#define ISCSI_TMF_RSP_NO_TASK          0x01
+#define ISCSI_TMF_RSP_NO_LUN           0x02
+#define ISCSI_TMF_RSP_TASK_ALLEGIANT   0x03
+#define ISCSI_TMF_RSP_NO_FAILOVER      0x04
+#define ISCSI_TMF_RSP_NOT_SUPPORTED    0x05
+#define ISCSI_TMF_RSP_AUTH_FAILED      0x06
+#define ISCSI_TMF_RSP_REJECTED         0xff
 
 /* Ready To Transfer Header */
 struct iscsi_r2t_rsp {
@@ -274,7 +301,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;
@@ -292,7 +319,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;
@@ -312,7 +339,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;
@@ -336,7 +363,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;
@@ -354,7 +381,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;
@@ -373,7 +400,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;
@@ -402,7 +429,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;
@@ -459,7 +486,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;
@@ -486,7 +513,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;
@@ -509,7 +536,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;
@@ -527,9 +554,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;
@@ -539,17 +568,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