1*dd0887e4Skrw /* $OpenBSD: iscsi.h,v 1.9 2019/09/27 23:07:42 krw Exp $ */ 243cf88e5Sdlg 343cf88e5Sdlg /* 443cf88e5Sdlg * Copyright (c) 2008 David Gwynne <dlg@openbsd.org> 543cf88e5Sdlg * 643cf88e5Sdlg * Permission to use, copy, modify, and distribute this software for any 743cf88e5Sdlg * purpose with or without fee is hereby granted, provided that the above 843cf88e5Sdlg * copyright notice and this permission notice appear in all copies. 943cf88e5Sdlg * 1043cf88e5Sdlg * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1143cf88e5Sdlg * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1243cf88e5Sdlg * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1343cf88e5Sdlg * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1443cf88e5Sdlg * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1543cf88e5Sdlg * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1643cf88e5Sdlg * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1743cf88e5Sdlg */ 1843cf88e5Sdlg 19*dd0887e4Skrw #ifndef _SCSI_ISCSI_H 20*dd0887e4Skrw #define _SCSI_ISCSI_H 2143cf88e5Sdlg 2243cf88e5Sdlg struct iscsi_pdu { 2343cf88e5Sdlg u_int8_t opcode; 2443cf88e5Sdlg u_int8_t flags; 2543cf88e5Sdlg u_int8_t _reserved1[2]; 2643cf88e5Sdlg 2743cf88e5Sdlg u_int8_t ahslen; 2843cf88e5Sdlg u_int8_t datalen[3]; 2943cf88e5Sdlg 3043cf88e5Sdlg u_int8_t lun[8]; 3143cf88e5Sdlg 3243cf88e5Sdlg u_int32_t itt; 3343cf88e5Sdlg 34e740f298Sclaudio u_int8_t _reserved2[4]; 35e740f298Sclaudio 36e740f298Sclaudio u_int32_t cmdsn; 37e740f298Sclaudio 38dfa1edcaSclaudio u_int32_t expstatsn; 39dfa1edcaSclaudio 40dfa1edcaSclaudio u_int8_t _reserved3[16]; 4143cf88e5Sdlg } __packed; 4243cf88e5Sdlg 4343cf88e5Sdlg /* 4443cf88e5Sdlg * Initiator opcodes 4543cf88e5Sdlg */ 4643cf88e5Sdlg 4743cf88e5Sdlg #define ISCSI_OP_I_NOP 0x00 4843cf88e5Sdlg #define ISCSI_OP_SCSI_REQUEST 0x01 4943cf88e5Sdlg #define ISCSI_OP_TASK_REQUEST 0x02 5043cf88e5Sdlg #define ISCSI_OP_LOGIN_REQUEST 0x03 5143cf88e5Sdlg #define ISCSI_OP_TEXT_REQUEST 0x04 5243cf88e5Sdlg #define ISCSI_OP_DATA_OUT 0x05 5343cf88e5Sdlg #define ISCSI_OP_LOGOUT_REQUEST 0x06 5443cf88e5Sdlg #define ISCSI_OP_SNACK_REQUEST 0x10 5543cf88e5Sdlg 5643cf88e5Sdlg /* 5743cf88e5Sdlg * Target opcodes 5843cf88e5Sdlg */ 5943cf88e5Sdlg 6043cf88e5Sdlg #define ISCSI_OP_T_NOP 0x20 6143cf88e5Sdlg #define ISCSI_OP_SCSI_RESPONSE 0x21 6243cf88e5Sdlg #define ISCSI_OP_TASK_RESPONSE 0x22 6343cf88e5Sdlg #define ISCSI_OP_LOGIN_RESPONSE 0x23 6443cf88e5Sdlg #define ISCSI_OP_TEXT_RESPONSE 0x24 6543cf88e5Sdlg #define ISCSI_OP_DATA_IN 0x25 6643cf88e5Sdlg #define ISCSI_OP_LOGOUT_RESPONSE 0x26 67fe0615c6Sdlg #define ISCSI_OP_R2T 0x31 68fe0615c6Sdlg #define ISCSI_OP_ASYNC 0x32 69fe0615c6Sdlg #define ISCSI_OP_REJECT 0x3f 7043cf88e5Sdlg 7143cf88e5Sdlg #define ISCSI_PDU_OPCODE(_o) ((_o) & 0x3f) 7243cf88e5Sdlg #define ISCSI_PDU_I(_h) ((_h)->opcode & 0x40) 7343cf88e5Sdlg #define ISCSI_PDU_F(_h) ((_h)->flags & 0x80) 7443cf88e5Sdlg 75e740f298Sclaudio #define ISCSI_OP_F_IMMEDIATE 0x40 76e740f298Sclaudio 77e740f298Sclaudio /* 78e740f298Sclaudio * various other flags and values 79e740f298Sclaudio */ 80e740f298Sclaudio #define ISCSI_ISID_OUI 0x00000000 81e740f298Sclaudio #define ISCSI_ISID_EN 0x40000000 82e740f298Sclaudio #define ISCSI_ISID_RAND 0x80000000 83e740f298Sclaudio 8443cf88e5Sdlg struct iscsi_pdu_scsi_request { 8543cf88e5Sdlg u_int8_t opcode; 8643cf88e5Sdlg u_int8_t flags; 8743cf88e5Sdlg u_int8_t _reserved[2]; 8843cf88e5Sdlg 8943cf88e5Sdlg u_int8_t ahslen; 9043cf88e5Sdlg u_int8_t datalen[3]; 9143cf88e5Sdlg 9243cf88e5Sdlg u_int8_t lun[8]; 9343cf88e5Sdlg 9443cf88e5Sdlg u_int32_t itt; 9543cf88e5Sdlg 9643cf88e5Sdlg u_int32_t bytes; 9743cf88e5Sdlg 9843cf88e5Sdlg u_int32_t cmdsn; 9943cf88e5Sdlg 10043cf88e5Sdlg u_int32_t expstatsn; 10143cf88e5Sdlg 10243cf88e5Sdlg u_int8_t cdb[16]; 10343cf88e5Sdlg } __packed; 10443cf88e5Sdlg 10543cf88e5Sdlg struct iscsi_pdu_scsi_response { 10643cf88e5Sdlg u_int8_t opcode; 10743cf88e5Sdlg u_int8_t flags; 10843cf88e5Sdlg u_int8_t response; 10943cf88e5Sdlg u_int8_t status; 11043cf88e5Sdlg 11143cf88e5Sdlg u_int8_t ahslen; 11243cf88e5Sdlg u_int8_t datalen[3]; 11343cf88e5Sdlg 11443cf88e5Sdlg u_int8_t _reserved[8]; 11543cf88e5Sdlg 11643cf88e5Sdlg u_int32_t itt; 11743cf88e5Sdlg 11843cf88e5Sdlg u_int32_t snack; 11943cf88e5Sdlg 12043cf88e5Sdlg u_int32_t statsn; 12143cf88e5Sdlg 12243cf88e5Sdlg u_int32_t expcmdsn; 12343cf88e5Sdlg 12443cf88e5Sdlg u_int32_t maxcmdsn; 12543cf88e5Sdlg 12643cf88e5Sdlg u_int32_t expdatasn; 127c3f5b1d1Sjordan 128c3f5b1d1Sjordan u_int32_t birescount; 129c3f5b1d1Sjordan 130c3f5b1d1Sjordan u_int32_t rescount; 13143cf88e5Sdlg } __packed; 13243cf88e5Sdlg 1330f034227Sclaudio #define ISCSI_SCSI_F_F 0x80 1340f034227Sclaudio #define ISCSI_SCSI_F_R 0x40 1350f034227Sclaudio #define ISCSI_SCSI_F_W 0x20 1360f034227Sclaudio 1370f034227Sclaudio #define ISCSI_SCSI_ATTR_UNTAGGED 0 1380f034227Sclaudio #define ISCSI_SCSI_ATTR_SIMPLE 1 1390f034227Sclaudio #define ISCSI_SCSI_ATTR_ORDERED 2 1400f034227Sclaudio #define ISCSI_SCSI_ATTR_HEAD_OF_Q 3 1410f034227Sclaudio #define ISCSI_SCSI_ATTR_ACA 4 1420f034227Sclaudio 1430f034227Sclaudio #define ISCSI_SCSI_STAT_GOOD 0x00 1440f034227Sclaudio #define ISCSI_SCSI_STAT_CHCK_COND 0x02 1450f034227Sclaudio /* we don't care about the type of the other error conditions */ 1460f034227Sclaudio 14743cf88e5Sdlg struct iscsi_pdu_task_request { 14843cf88e5Sdlg u_int8_t opcode; 14943cf88e5Sdlg u_int8_t flags; 15043cf88e5Sdlg u_int8_t reserved[2]; 15143cf88e5Sdlg 15243cf88e5Sdlg u_int8_t ahslen; 15343cf88e5Sdlg u_int8_t datalen[3]; 15443cf88e5Sdlg 15543cf88e5Sdlg u_int8_t lun[8]; 15643cf88e5Sdlg 15743cf88e5Sdlg u_int32_t itt; 15843cf88e5Sdlg 15943cf88e5Sdlg u_int32_t tag; 16043cf88e5Sdlg 16143cf88e5Sdlg u_int32_t cmdsn; 16243cf88e5Sdlg 16343cf88e5Sdlg u_int32_t expstatsn; 16443cf88e5Sdlg 16543cf88e5Sdlg u_int32_t refcmdsn; 16643cf88e5Sdlg 16743cf88e5Sdlg u_int32_t expdatasn; 16843cf88e5Sdlg 16943cf88e5Sdlg u_int8_t _reserved[8]; 17043cf88e5Sdlg } __packed; 17143cf88e5Sdlg 17243cf88e5Sdlg struct iscsi_pdu_task_response { 17343cf88e5Sdlg u_int8_t opcode; 17443cf88e5Sdlg u_int8_t flags; 17543cf88e5Sdlg u_int8_t response; 17643cf88e5Sdlg u_int8_t _reserved1; 17743cf88e5Sdlg 17843cf88e5Sdlg u_int8_t ahslen; 17943cf88e5Sdlg u_int8_t datalen[3]; 18043cf88e5Sdlg 181c3f5b1d1Sjordan u_int8_t _reserved[8]; 182c3f5b1d1Sjordan 183c3f5b1d1Sjordan u_int32_t itt; 184c3f5b1d1Sjordan 18543cf88e5Sdlg u_int8_t _reserved2[4]; 18643cf88e5Sdlg 18743cf88e5Sdlg u_int32_t statsn; 18843cf88e5Sdlg 18943cf88e5Sdlg u_int32_t expcmdsn; 19043cf88e5Sdlg 19143cf88e5Sdlg u_int32_t maxcmdsn; 19243cf88e5Sdlg 19343cf88e5Sdlg u_int8_t _reserved3[12]; 19443cf88e5Sdlg } __packed; 19543cf88e5Sdlg 19643cf88e5Sdlg struct iscsi_pdu_data_out { 19743cf88e5Sdlg u_int8_t opcode; 19843cf88e5Sdlg u_int8_t flags; 19943cf88e5Sdlg u_int8_t _reserved1[2]; 20043cf88e5Sdlg 20143cf88e5Sdlg u_int8_t ahslen; 20243cf88e5Sdlg u_int8_t datalen[3]; 20343cf88e5Sdlg 20443cf88e5Sdlg u_int8_t lun[8]; 20543cf88e5Sdlg 20643cf88e5Sdlg u_int32_t itt; 20743cf88e5Sdlg 20843cf88e5Sdlg u_int32_t ttt; 20943cf88e5Sdlg 21043cf88e5Sdlg u_int8_t _reserved2[4]; 21143cf88e5Sdlg 21243cf88e5Sdlg u_int32_t expstatsn; 21343cf88e5Sdlg 21443cf88e5Sdlg u_int8_t _reserved3[4]; 21543cf88e5Sdlg 21643cf88e5Sdlg u_int32_t datasn; 21743cf88e5Sdlg 21843cf88e5Sdlg u_int32_t buffer_offs; 21943cf88e5Sdlg 22043cf88e5Sdlg u_int8_t _reserved4[4]; 22143cf88e5Sdlg } __packed; 22243cf88e5Sdlg 22343cf88e5Sdlg struct iscsi_pdu_data_in { 22443cf88e5Sdlg u_int8_t opcode; 22543cf88e5Sdlg u_int8_t flags; 22643cf88e5Sdlg u_int8_t _reserved; 22743cf88e5Sdlg u_int8_t status; 22843cf88e5Sdlg 22943cf88e5Sdlg u_int8_t ahslen; 23043cf88e5Sdlg u_int8_t datalen[3]; 23143cf88e5Sdlg 23243cf88e5Sdlg u_int8_t lun[8]; 23343cf88e5Sdlg 23443cf88e5Sdlg u_int32_t itt; 23543cf88e5Sdlg 23643cf88e5Sdlg u_int32_t ttt; 23743cf88e5Sdlg 238e740f298Sclaudio u_int32_t statsn; 23943cf88e5Sdlg 240e740f298Sclaudio u_int32_t expcmdsn; 24143cf88e5Sdlg 242e740f298Sclaudio u_int32_t maxcmdsn; 24343cf88e5Sdlg 244e740f298Sclaudio u_int32_t datasn; 24543cf88e5Sdlg 246e740f298Sclaudio u_int32_t buffer_offs; 24743cf88e5Sdlg 248e740f298Sclaudio u_int32_t residual; 24943cf88e5Sdlg } __packed; 25043cf88e5Sdlg 25143cf88e5Sdlg struct iscsi_pdu_rt2 { 25243cf88e5Sdlg u_int8_t opcode; 25343cf88e5Sdlg u_int8_t flags; 25443cf88e5Sdlg u_int8_t _reserved1[2]; 25543cf88e5Sdlg 25643cf88e5Sdlg u_int8_t ahslen; 25743cf88e5Sdlg u_int8_t datalen[3]; 25843cf88e5Sdlg 25943cf88e5Sdlg u_int8_t lun[8]; 26043cf88e5Sdlg 26143cf88e5Sdlg u_int32_t itt; 26243cf88e5Sdlg 26343cf88e5Sdlg u_int32_t ttt; 26443cf88e5Sdlg 26543cf88e5Sdlg u_int32_t statsn; 26643cf88e5Sdlg 26743cf88e5Sdlg u_int32_t expcmdsn; 26843cf88e5Sdlg 26943cf88e5Sdlg u_int32_t maxcmdsn; 27043cf88e5Sdlg 27143cf88e5Sdlg u_int32_t r2tsn; 27243cf88e5Sdlg 27343cf88e5Sdlg u_int32_t buffer_offs; 27443cf88e5Sdlg 27543cf88e5Sdlg u_int32_t desired_datalen; 27643cf88e5Sdlg } __packed; 27743cf88e5Sdlg 27843cf88e5Sdlg struct iscsi_pdu_async { 27943cf88e5Sdlg u_int8_t opcode; 28043cf88e5Sdlg u_int8_t flags; 28143cf88e5Sdlg u_int8_t _reserved1[2]; 28243cf88e5Sdlg 28343cf88e5Sdlg u_int8_t ahslen; 28443cf88e5Sdlg u_int8_t datalen[3]; 28543cf88e5Sdlg 28643cf88e5Sdlg u_int8_t lun[8]; 28743cf88e5Sdlg 28843cf88e5Sdlg u_int32_t ffffffff; 28943cf88e5Sdlg 29043cf88e5Sdlg u_int8_t _reserved2[4]; 29143cf88e5Sdlg 29243cf88e5Sdlg u_int32_t statsn; 29343cf88e5Sdlg 294c3f5b1d1Sjordan u_int32_t expcmdsn; 29543cf88e5Sdlg 296c3f5b1d1Sjordan u_int32_t maxcmdsn; 29743cf88e5Sdlg 29843cf88e5Sdlg u_int8_t event; 29943cf88e5Sdlg u_int8_t vcode; 300c3f5b1d1Sjordan u_int16_t param[3]; 30143cf88e5Sdlg 30243cf88e5Sdlg u_int8_t _reserved3[4]; 30343cf88e5Sdlg } __packed; 30443cf88e5Sdlg 30543cf88e5Sdlg struct iscsi_pdu_text_request { 30643cf88e5Sdlg u_int8_t opcode; 30743cf88e5Sdlg u_int8_t flags; 30843cf88e5Sdlg u_int8_t _reserved1[2]; 30943cf88e5Sdlg 31043cf88e5Sdlg u_int8_t ahslen; 31143cf88e5Sdlg u_int8_t datalen[3]; 31243cf88e5Sdlg 31343cf88e5Sdlg u_int8_t lun[8]; 31443cf88e5Sdlg 31543cf88e5Sdlg u_int32_t itt; 31643cf88e5Sdlg 31743cf88e5Sdlg u_int32_t ttt; 31843cf88e5Sdlg 31943cf88e5Sdlg u_int32_t cmdsn; 32043cf88e5Sdlg 32143cf88e5Sdlg u_int32_t expstatsn; 32243cf88e5Sdlg 32343cf88e5Sdlg u_int8_t _reserved2[16]; 32443cf88e5Sdlg } __packed; 32543cf88e5Sdlg 32643cf88e5Sdlg struct iscsi_pdu_text_response { 32743cf88e5Sdlg u_int8_t opcode; 32843cf88e5Sdlg u_int8_t flags; 32943cf88e5Sdlg u_int8_t _reserved1[2]; 33043cf88e5Sdlg 33143cf88e5Sdlg u_int8_t ahslen; 33243cf88e5Sdlg u_int8_t datalen[3]; 33343cf88e5Sdlg 33443cf88e5Sdlg u_int8_t lun[8]; 33543cf88e5Sdlg 33643cf88e5Sdlg u_int32_t itt; 33743cf88e5Sdlg 33843cf88e5Sdlg u_int32_t ttt; 33943cf88e5Sdlg 34043cf88e5Sdlg u_int32_t cmdsn; 34143cf88e5Sdlg 34243cf88e5Sdlg u_int32_t expcmdsn; 34343cf88e5Sdlg 34443cf88e5Sdlg u_int32_t maxcmdsn; 34543cf88e5Sdlg 34643cf88e5Sdlg u_int8_t _reserved2[12]; 34743cf88e5Sdlg } __packed; 34843cf88e5Sdlg 349dfa1edcaSclaudio #define ISCSI_TEXT_F_F 0x80 350dfa1edcaSclaudio #define ISCSI_TEXT_F_C 0x40 351dfa1edcaSclaudio 35243cf88e5Sdlg struct iscsi_pdu_login_request { 35343cf88e5Sdlg u_int8_t opcode; 35443cf88e5Sdlg u_int8_t flags; 35543cf88e5Sdlg u_int8_t version_max; 35643cf88e5Sdlg u_int8_t version_min; 35743cf88e5Sdlg 35843cf88e5Sdlg u_int8_t ahslen; 35943cf88e5Sdlg u_int8_t datalen[3]; 36043cf88e5Sdlg 3613507dc17Sclaudio u_int32_t isid_base; 3623507dc17Sclaudio u_int16_t isid_qual; 3633507dc17Sclaudio u_int16_t tsih; 36443cf88e5Sdlg 36543cf88e5Sdlg u_int32_t itt; 36643cf88e5Sdlg 36743cf88e5Sdlg u_int16_t cid; 36843cf88e5Sdlg u_int8_t _reserved1[2]; 36943cf88e5Sdlg 37043cf88e5Sdlg u_int32_t cmdsn; 37143cf88e5Sdlg 37243cf88e5Sdlg u_int32_t expstatsn; 37343cf88e5Sdlg 37443cf88e5Sdlg u_int8_t _reserved2[16]; 37543cf88e5Sdlg } __packed; 37643cf88e5Sdlg 377e740f298Sclaudio #define ISCSI_LOGIN_F_T 0x80 378e740f298Sclaudio #define ISCSI_LOGIN_F_C 0x40 379e740f298Sclaudio #define ISCSI_LOGIN_F_CSG(x) (((x) & 0x3) << 2) 380e740f298Sclaudio #define ISCSI_LOGIN_F_NSG(x) ((x) & 0x3) 381e740f298Sclaudio #define ISCSI_LOGIN_STG_SECNEG 0 382e740f298Sclaudio #define ISCSI_LOGIN_STG_OPNEG 1 383e740f298Sclaudio #define ISCSI_LOGIN_STG_FULL 3 384e740f298Sclaudio 38543cf88e5Sdlg struct iscsi_pdu_login_response { 38643cf88e5Sdlg u_int8_t opcode; 38743cf88e5Sdlg u_int8_t flags; 38843cf88e5Sdlg u_int8_t version_max; 38943cf88e5Sdlg u_int8_t version_active; 39043cf88e5Sdlg 39143cf88e5Sdlg u_int8_t ahslen; 39243cf88e5Sdlg u_int8_t datalen[3]; 39343cf88e5Sdlg 3943507dc17Sclaudio u_int32_t isid_base; 3953507dc17Sclaudio u_int16_t isid_qual; 3963507dc17Sclaudio u_int16_t tsih; 39743cf88e5Sdlg 39843cf88e5Sdlg u_int32_t itt; 39943cf88e5Sdlg 40043cf88e5Sdlg u_int8_t _reserved1[4]; 40143cf88e5Sdlg 40243cf88e5Sdlg u_int32_t statsn; 40343cf88e5Sdlg 40443cf88e5Sdlg u_int32_t expcmdsn; 40543cf88e5Sdlg 40643cf88e5Sdlg u_int32_t maxcmdsn; 40743cf88e5Sdlg 40843cf88e5Sdlg u_int8_t status_class; 40943cf88e5Sdlg u_int8_t status_detail; 41043cf88e5Sdlg 41143cf88e5Sdlg u_int8_t _reserved2[10]; 41243cf88e5Sdlg } __packed; 41343cf88e5Sdlg 41443cf88e5Sdlg struct iscsi_pdu_logout_request { 41543cf88e5Sdlg u_int8_t opcode; 41643cf88e5Sdlg u_int8_t flags; 41743cf88e5Sdlg u_int8_t _reserved1[2]; 41843cf88e5Sdlg 41943cf88e5Sdlg u_int8_t ahslen; 42043cf88e5Sdlg u_int8_t datalen[3]; 42143cf88e5Sdlg 42243cf88e5Sdlg u_int8_t _reserved2[8]; 42343cf88e5Sdlg 42443cf88e5Sdlg u_int32_t itt; 42543cf88e5Sdlg 42643cf88e5Sdlg u_int16_t cid; 42743cf88e5Sdlg u_int8_t _reserved3[2]; 42843cf88e5Sdlg 42943cf88e5Sdlg u_int32_t cmdsn; 43043cf88e5Sdlg 43143cf88e5Sdlg u_int32_t expstatsn; 43243cf88e5Sdlg 43343cf88e5Sdlg u_int8_t _reserved4[16]; 43443cf88e5Sdlg } __packed; 43543cf88e5Sdlg 436661c88cfSclaudio #define ISCSI_LOGOUT_F 0x80 437661c88cfSclaudio #define ISCSI_LOGOUT_CLOSE_SESS 0 438661c88cfSclaudio #define ISCSI_LOGOUT_CLOSE_CONN 1 439661c88cfSclaudio #define ISCSI_LOGOUT_RCVRY_CONN 2 440661c88cfSclaudio 441661c88cfSclaudio #define ISCSI_LOGOUT_RESP_SUCCESS 0 442661c88cfSclaudio #define ISCSI_LOGOUT_RESP_UNKN_CID 1 443661c88cfSclaudio #define ISCSI_LOGOUT_RESP_NO_SUPPORT 2 444661c88cfSclaudio #define ISCSI_LOGOUT_RESP_ERROR 3 445661c88cfSclaudio 44643cf88e5Sdlg struct iscsi_pdu_logout_response { 44743cf88e5Sdlg u_int8_t opcode; 44843cf88e5Sdlg u_int8_t flags; 449661c88cfSclaudio u_int8_t response; 450661c88cfSclaudio u_int8_t _reserved1; 45143cf88e5Sdlg 45243cf88e5Sdlg u_int8_t ahslen; 45343cf88e5Sdlg u_int8_t datalen[3]; 45443cf88e5Sdlg 45543cf88e5Sdlg u_int8_t _reserved2[8]; 45643cf88e5Sdlg 45743cf88e5Sdlg u_int32_t itt; 45843cf88e5Sdlg 45943cf88e5Sdlg u_int8_t _reserved3[4]; 46043cf88e5Sdlg 46143cf88e5Sdlg u_int32_t statsn; 46243cf88e5Sdlg 46343cf88e5Sdlg u_int32_t expcmdsn; 46443cf88e5Sdlg 46543cf88e5Sdlg u_int32_t maxcmdsn; 46643cf88e5Sdlg 46743cf88e5Sdlg u_int8_t _reserved4[4]; 46843cf88e5Sdlg 46943cf88e5Sdlg u_int16_t time2wait; 47043cf88e5Sdlg u_int16_t time2retain; 47143cf88e5Sdlg 47243cf88e5Sdlg u_int8_t _reserved5[4]; 47343cf88e5Sdlg } __packed; 47443cf88e5Sdlg 47543cf88e5Sdlg struct iscsi_pdu_snack_request { 47643cf88e5Sdlg u_int8_t opcode; 47743cf88e5Sdlg u_int8_t flags; 47843cf88e5Sdlg u_int8_t _reserved1[2]; 47943cf88e5Sdlg 48043cf88e5Sdlg u_int8_t ahslen; 48143cf88e5Sdlg u_int8_t datalen[3]; 48243cf88e5Sdlg 48343cf88e5Sdlg u_int8_t lun[8]; 48443cf88e5Sdlg 48543cf88e5Sdlg u_int32_t itt; 48643cf88e5Sdlg 48743cf88e5Sdlg u_int32_t ttt; 48843cf88e5Sdlg 48943cf88e5Sdlg u_int8_t _reserved2[4]; 49043cf88e5Sdlg 49143cf88e5Sdlg u_int32_t expstatsn; 49243cf88e5Sdlg 49343cf88e5Sdlg u_int8_t _reserved3[8]; 49443cf88e5Sdlg 49543cf88e5Sdlg u_int32_t begrun; 49643cf88e5Sdlg 49743cf88e5Sdlg u_int32_t runlength; 49843cf88e5Sdlg } __packed; 49943cf88e5Sdlg 50043cf88e5Sdlg struct iscsi_pdu_reject { 50143cf88e5Sdlg u_int8_t opcode; 50243cf88e5Sdlg u_int8_t flags; 50343cf88e5Sdlg u_int8_t reason; 50443cf88e5Sdlg u_int8_t _reserved1; 50543cf88e5Sdlg 50643cf88e5Sdlg u_int8_t ahslen; 50743cf88e5Sdlg u_int8_t datalen[3]; 50843cf88e5Sdlg 50943cf88e5Sdlg u_int8_t _reserved2[8]; 51043cf88e5Sdlg 51143cf88e5Sdlg u_int32_t ffffffff; 51243cf88e5Sdlg 51343cf88e5Sdlg u_int8_t _reserved3[4]; 51443cf88e5Sdlg 51543cf88e5Sdlg u_int32_t statsn; 51643cf88e5Sdlg 51743cf88e5Sdlg u_int32_t expcmdsn; 51843cf88e5Sdlg 51943cf88e5Sdlg u_int32_t maxcmdsn; 52043cf88e5Sdlg 52143cf88e5Sdlg u_int32_t datasn_r2tsn; 52243cf88e5Sdlg 52343cf88e5Sdlg u_int8_t _reserved4[8]; 52443cf88e5Sdlg } __packed; 52543cf88e5Sdlg 52643cf88e5Sdlg struct iscsi_pdu_nop_out { 52743cf88e5Sdlg u_int8_t opcode; 52843cf88e5Sdlg u_int8_t flags; 52943cf88e5Sdlg u_int8_t _reserved1[2]; 53043cf88e5Sdlg 53143cf88e5Sdlg u_int8_t ahslen; 53243cf88e5Sdlg u_int8_t datalen[3]; 53343cf88e5Sdlg 53443cf88e5Sdlg u_int8_t lun[8]; 53543cf88e5Sdlg 53643cf88e5Sdlg u_int32_t itt; 53743cf88e5Sdlg 53843cf88e5Sdlg u_int32_t ttt; 53943cf88e5Sdlg 54043cf88e5Sdlg u_int32_t cmdsn; 54143cf88e5Sdlg 54243cf88e5Sdlg u_int32_t expstatsn; 54343cf88e5Sdlg 54443cf88e5Sdlg u_int8_t _reserved2[16]; 54543cf88e5Sdlg } __packed; 54643cf88e5Sdlg 54743cf88e5Sdlg struct iscsi_pdu_nop_in { 54843cf88e5Sdlg u_int8_t opcode; 54943cf88e5Sdlg u_int8_t flags; 55043cf88e5Sdlg u_int8_t _reserved1[2]; 55143cf88e5Sdlg 55243cf88e5Sdlg u_int8_t ahslen; 55343cf88e5Sdlg u_int8_t datalen[3]; 55443cf88e5Sdlg 55543cf88e5Sdlg u_int8_t lun[8]; 55643cf88e5Sdlg 55743cf88e5Sdlg u_int32_t itt; 55843cf88e5Sdlg 55943cf88e5Sdlg u_int32_t ttt; 56043cf88e5Sdlg 56143cf88e5Sdlg u_int32_t statsn; 56243cf88e5Sdlg 56343cf88e5Sdlg u_int32_t expcmdsn; 56443cf88e5Sdlg 56543cf88e5Sdlg u_int32_t maxcmdsn; 56643cf88e5Sdlg 56743cf88e5Sdlg u_int8_t _reserved2[12]; 56843cf88e5Sdlg } __packed; 56943cf88e5Sdlg 570*dd0887e4Skrw #endif /* _SCSI_ISCSI_H */ 571