123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571 |
- /* $OpenBSD: iscsi.h,v 1.8 2011/04/26 21:30:14 claudio Exp $ */
- /*
- * Copyright (c) 2008 David Gwynne <dlg@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- #ifndef _SYS_SCSI_ISCSI_H
- #define _SYS_SCSI_ISCSI_H
- struct iscsi_pdu {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int8_t _reserved2[4];
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t _reserved3[16];
- } __packed;
- /*
- * Initiator opcodes
- */
- #define ISCSI_OP_I_NOP 0x00
- #define ISCSI_OP_SCSI_REQUEST 0x01
- #define ISCSI_OP_TASK_REQUEST 0x02
- #define ISCSI_OP_LOGIN_REQUEST 0x03
- #define ISCSI_OP_TEXT_REQUEST 0x04
- #define ISCSI_OP_DATA_OUT 0x05
- #define ISCSI_OP_LOGOUT_REQUEST 0x06
- #define ISCSI_OP_SNACK_REQUEST 0x10
- /*
- * Target opcodes
- */
- #define ISCSI_OP_T_NOP 0x20
- #define ISCSI_OP_SCSI_RESPONSE 0x21
- #define ISCSI_OP_TASK_RESPONSE 0x22
- #define ISCSI_OP_LOGIN_RESPONSE 0x23
- #define ISCSI_OP_TEXT_RESPONSE 0x24
- #define ISCSI_OP_DATA_IN 0x25
- #define ISCSI_OP_LOGOUT_RESPONSE 0x26
- #define ISCSI_OP_R2T 0x31
- #define ISCSI_OP_ASYNC 0x32
- #define ISCSI_OP_REJECT 0x3f
- #define ISCSI_PDU_OPCODE(_o) ((_o) & 0x3f)
- #define ISCSI_PDU_I(_h) ((_h)->opcode & 0x40)
- #define ISCSI_PDU_F(_h) ((_h)->flags & 0x80)
- #define ISCSI_OP_F_IMMEDIATE 0x40
- /*
- * various other flags and values
- */
- #define ISCSI_ISID_OUI 0x00000000
- #define ISCSI_ISID_EN 0x40000000
- #define ISCSI_ISID_RAND 0x80000000
- struct iscsi_pdu_scsi_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t bytes;
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t cdb[16];
- } __packed;
- struct iscsi_pdu_scsi_response {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t response;
- u_int8_t status;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t _reserved[8];
- u_int32_t itt;
- u_int32_t snack;
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int32_t expdatasn;
- u_int32_t birescount;
- u_int32_t rescount;
- } __packed;
- #define ISCSI_SCSI_F_F 0x80
- #define ISCSI_SCSI_F_R 0x40
- #define ISCSI_SCSI_F_W 0x20
- #define ISCSI_SCSI_ATTR_UNTAGGED 0
- #define ISCSI_SCSI_ATTR_SIMPLE 1
- #define ISCSI_SCSI_ATTR_ORDERED 2
- #define ISCSI_SCSI_ATTR_HEAD_OF_Q 3
- #define ISCSI_SCSI_ATTR_ACA 4
- #define ISCSI_SCSI_STAT_GOOD 0x00
- #define ISCSI_SCSI_STAT_CHCK_COND 0x02
- /* we don't care about the type of the other error conditions */
- struct iscsi_pdu_task_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t reserved[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t tag;
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int32_t refcmdsn;
- u_int32_t expdatasn;
- u_int8_t _reserved[8];
- } __packed;
- struct iscsi_pdu_task_response {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t response;
- u_int8_t _reserved1;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t _reserved[8];
- u_int32_t itt;
- u_int8_t _reserved2[4];
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t _reserved3[12];
- } __packed;
- struct iscsi_pdu_data_out {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int8_t _reserved2[4];
- u_int32_t expstatsn;
- u_int8_t _reserved3[4];
- u_int32_t datasn;
- u_int32_t buffer_offs;
- u_int8_t _reserved4[4];
- } __packed;
- struct iscsi_pdu_data_in {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved;
- u_int8_t status;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int32_t datasn;
- u_int32_t buffer_offs;
- u_int32_t residual;
- } __packed;
- struct iscsi_pdu_rt2 {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int32_t r2tsn;
- u_int32_t buffer_offs;
- u_int32_t desired_datalen;
- } __packed;
- struct iscsi_pdu_async {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t ffffffff;
- u_int8_t _reserved2[4];
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t event;
- u_int8_t vcode;
- u_int16_t param[3];
- u_int8_t _reserved3[4];
- } __packed;
- struct iscsi_pdu_text_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t _reserved2[16];
- } __packed;
- struct iscsi_pdu_text_response {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t cmdsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t _reserved2[12];
- } __packed;
- #define ISCSI_TEXT_F_F 0x80
- #define ISCSI_TEXT_F_C 0x40
- struct iscsi_pdu_login_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t version_max;
- u_int8_t version_min;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int32_t isid_base;
- u_int16_t isid_qual;
- u_int16_t tsih;
- u_int32_t itt;
- u_int16_t cid;
- u_int8_t _reserved1[2];
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t _reserved2[16];
- } __packed;
- #define ISCSI_LOGIN_F_T 0x80
- #define ISCSI_LOGIN_F_C 0x40
- #define ISCSI_LOGIN_F_CSG(x) (((x) & 0x3) << 2)
- #define ISCSI_LOGIN_F_NSG(x) ((x) & 0x3)
- #define ISCSI_LOGIN_STG_SECNEG 0
- #define ISCSI_LOGIN_STG_OPNEG 1
- #define ISCSI_LOGIN_STG_FULL 3
- struct iscsi_pdu_login_response {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t version_max;
- u_int8_t version_active;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int32_t isid_base;
- u_int16_t isid_qual;
- u_int16_t tsih;
- u_int32_t itt;
- u_int8_t _reserved1[4];
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t status_class;
- u_int8_t status_detail;
- u_int8_t _reserved2[10];
- } __packed;
- struct iscsi_pdu_logout_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t _reserved2[8];
- u_int32_t itt;
- u_int16_t cid;
- u_int8_t _reserved3[2];
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t _reserved4[16];
- } __packed;
- #define ISCSI_LOGOUT_F 0x80
- #define ISCSI_LOGOUT_CLOSE_SESS 0
- #define ISCSI_LOGOUT_CLOSE_CONN 1
- #define ISCSI_LOGOUT_RCVRY_CONN 2
- #define ISCSI_LOGOUT_RESP_SUCCESS 0
- #define ISCSI_LOGOUT_RESP_UNKN_CID 1
- #define ISCSI_LOGOUT_RESP_NO_SUPPORT 2
- #define ISCSI_LOGOUT_RESP_ERROR 3
- struct iscsi_pdu_logout_response {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t response;
- u_int8_t _reserved1;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t _reserved2[8];
- u_int32_t itt;
- u_int8_t _reserved3[4];
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t _reserved4[4];
- u_int16_t time2wait;
- u_int16_t time2retain;
- u_int8_t _reserved5[4];
- } __packed;
- struct iscsi_pdu_snack_request {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int8_t _reserved2[4];
- u_int32_t expstatsn;
- u_int8_t _reserved3[8];
- u_int32_t begrun;
- u_int32_t runlength;
- } __packed;
- struct iscsi_pdu_reject {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t reason;
- u_int8_t _reserved1;
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t _reserved2[8];
- u_int32_t ffffffff;
- u_int8_t _reserved3[4];
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int32_t datasn_r2tsn;
- u_int8_t _reserved4[8];
- } __packed;
- struct iscsi_pdu_nop_out {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t cmdsn;
- u_int32_t expstatsn;
- u_int8_t _reserved2[16];
- } __packed;
- struct iscsi_pdu_nop_in {
- u_int8_t opcode;
- u_int8_t flags;
- u_int8_t _reserved1[2];
- u_int8_t ahslen;
- u_int8_t datalen[3];
- u_int8_t lun[8];
- u_int32_t itt;
- u_int32_t ttt;
- u_int32_t statsn;
- u_int32_t expcmdsn;
- u_int32_t maxcmdsn;
- u_int8_t _reserved2[12];
- } __packed;
- #endif /* _SYS_SCSI_ISCSI_H */
|