xref: /plan9-contrib/sys/src/cmd/ip/iscsi.h (revision a9e8ce388a002c20feaa10ccf4ba659568c8c966)
1*a9e8ce38SDavid du Colombier /*
2*a9e8ce38SDavid du Colombier  * iscsi - scsi over tcp/ip
3*a9e8ce38SDavid du Colombier  *
4*a9e8ce38SDavid du Colombier  * observations:
5*a9e8ce38SDavid du Colombier  * iscsi names may be 223 bytes long.
6*a9e8ce38SDavid du Colombier  * two namespaces, "iqn." and "eui.".
7*a9e8ce38SDavid du Colombier  * don't need FIM when using tcp.
8*a9e8ce38SDavid du Colombier  * rfc3720 §3.2.8.1 demonstrates that the authors don't understand (or
9*a9e8ce38SDavid du Colombier  * don't trust) tcp: data isn't quietly dropped.
10*a9e8ce38SDavid du Colombier  *
11*a9e8ce38SDavid du Colombier  * we're not going to implement the optional digests (crcs),
12*a9e8ce38SDavid du Colombier  * so those are omitted.
13*a9e8ce38SDavid du Colombier  */
14*a9e8ce38SDavid du Colombier 
15*a9e8ce38SDavid du Colombier enum {
16*a9e8ce38SDavid du Colombier 	Bhdrsz	= 48,
17*a9e8ce38SDavid du Colombier 
18*a9e8ce38SDavid du Colombier 	/* initiator opcodes (requests) */
19*a9e8ce38SDavid du Colombier 	Iopnopout= 0,
20*a9e8ce38SDavid du Colombier 	Iopcmd,
21*a9e8ce38SDavid du Colombier 	Ioptask,
22*a9e8ce38SDavid du Colombier 	Ioplogin,
23*a9e8ce38SDavid du Colombier 	Ioptext,
24*a9e8ce38SDavid du Colombier 	Iopdataout,		/* write */
25*a9e8ce38SDavid du Colombier 	Ioplogout,
26*a9e8ce38SDavid du Colombier 	Iopsnack= 0x10,
27*a9e8ce38SDavid du Colombier 
28*a9e8ce38SDavid du Colombier 	/* target opcodes (responses) */
29*a9e8ce38SDavid du Colombier 	Topnopin= 0x20,
30*a9e8ce38SDavid du Colombier 	Topresp,
31*a9e8ce38SDavid du Colombier 	Toptask,
32*a9e8ce38SDavid du Colombier 	Toplogin,
33*a9e8ce38SDavid du Colombier 	Toptext,
34*a9e8ce38SDavid du Colombier 	Topdatain,		/* read */
35*a9e8ce38SDavid du Colombier 	Toplogout,
36*a9e8ce38SDavid du Colombier 	Topr2t	= 0x31,
37*a9e8ce38SDavid du Colombier 	Topasync,
38*a9e8ce38SDavid du Colombier 	Topreject= 0x3f,
39*a9e8ce38SDavid du Colombier 
40*a9e8ce38SDavid du Colombier 	Immed	= 1<<6,
41*a9e8ce38SDavid du Colombier 	Oprsrvd	= 1<<7,
42*a9e8ce38SDavid du Colombier 
43*a9e8ce38SDavid du Colombier 	/* opspfc */
44*a9e8ce38SDavid du Colombier 	Finalpkt= 1<<7,
45*a9e8ce38SDavid du Colombier };
46*a9e8ce38SDavid du Colombier 
47*a9e8ce38SDavid du Colombier typedef struct Datainpkt Datainpkt;
48*a9e8ce38SDavid du Colombier typedef struct Iscsiasynch Iscsiasynch;
49*a9e8ce38SDavid du Colombier typedef struct Iscsicmdreq Iscsicmdreq;
50*a9e8ce38SDavid du Colombier typedef struct Iscsicmdresp Iscsicmdresp;
51*a9e8ce38SDavid du Colombier typedef struct Iscsidatain Iscsidatain;
52*a9e8ce38SDavid du Colombier typedef struct Iscsidataout Iscsidataout;
53*a9e8ce38SDavid du Colombier typedef struct Iscsijustbhdr Iscsijustbhdr;
54*a9e8ce38SDavid du Colombier typedef struct Iscsiloginreq Iscsiloginreq;
55*a9e8ce38SDavid du Colombier typedef struct Iscsiloginresp Iscsiloginresp;
56*a9e8ce38SDavid du Colombier typedef struct Iscsilogoutreq Iscsilogoutreq;
57*a9e8ce38SDavid du Colombier typedef struct Iscsilogoutresp Iscsilogoutresp;
58*a9e8ce38SDavid du Colombier typedef struct Iscsinopreq Iscsinopreq;		/* nop out */
59*a9e8ce38SDavid du Colombier typedef struct Iscsinopresp Iscsinopresp;	/* nop in */
60*a9e8ce38SDavid du Colombier typedef struct Iscsiready Iscsiready;
61*a9e8ce38SDavid du Colombier typedef struct Iscsireject Iscsireject;
62*a9e8ce38SDavid du Colombier typedef struct Iscsisnackreq Iscsisnackreq;
63*a9e8ce38SDavid du Colombier typedef struct Iscsistate Iscsistate;
64*a9e8ce38SDavid du Colombier typedef struct Iscsitaskreq Iscsitaskreq;
65*a9e8ce38SDavid du Colombier typedef struct Iscsitaskresp Iscsitaskresp;
66*a9e8ce38SDavid du Colombier typedef struct Iscsitextreq Iscsitextreq;
67*a9e8ce38SDavid du Colombier typedef struct Iscsitextresp Iscsitextresp;
68*a9e8ce38SDavid du Colombier typedef struct Pkt Pkt;
69*a9e8ce38SDavid du Colombier typedef struct Pkts Pkts;
70*a9e8ce38SDavid du Colombier typedef struct Resppkt Resppkt;
71*a9e8ce38SDavid du Colombier 
72*a9e8ce38SDavid du Colombier /*
73*a9e8ce38SDavid du Colombier  * iscsi on-the-wire packet formats
74*a9e8ce38SDavid du Colombier  *
75*a9e8ce38SDavid du Colombier  * all integers are stored big-endian.
76*a9e8ce38SDavid du Colombier  * common pkt start is bhs, 48 bytes.
77*a9e8ce38SDavid du Colombier  */
78*a9e8ce38SDavid du Colombier 
79*a9e8ce38SDavid du Colombier /*
80*a9e8ce38SDavid du Colombier  * first 20 bytes are common *and* defined; another 28 follow but vary.
81*a9e8ce38SDavid du Colombier  */
82*a9e8ce38SDavid du Colombier #define Iscsibhdr \
83*a9e8ce38SDavid du Colombier 	uchar	op;		\
84*a9e8ce38SDavid du Colombier 	uchar	opspfc[3];	\
85*a9e8ce38SDavid du Colombier 	uchar	totahslen;	\
86*a9e8ce38SDavid du Colombier 	uchar	dseglen[3];	\
87*a9e8ce38SDavid du Colombier 	uchar	lun[8];		\
88*a9e8ce38SDavid du Colombier 	uchar	itt[4]		/* initiator task tag */
89*a9e8ce38SDavid du Colombier 
90*a9e8ce38SDavid du Colombier struct Iscsijustbhdr {
91*a9e8ce38SDavid du Colombier 	Iscsibhdr;
92*a9e8ce38SDavid du Colombier };
93*a9e8ce38SDavid du Colombier 
94*a9e8ce38SDavid du Colombier struct Iscsiasynch {
95*a9e8ce38SDavid du Colombier 	Iscsibhdr;
96*a9e8ce38SDavid du Colombier 
97*a9e8ce38SDavid du Colombier 	uchar	_pad1[4];
98*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
99*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
100*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
101*a9e8ce38SDavid du Colombier 
102*a9e8ce38SDavid du Colombier 	uchar	event;
103*a9e8ce38SDavid du Colombier 	uchar	vcode;
104*a9e8ce38SDavid du Colombier 	uchar	param1[2];
105*a9e8ce38SDavid du Colombier 	uchar	param2[2];
106*a9e8ce38SDavid du Colombier 	uchar	param3[2];
107*a9e8ce38SDavid du Colombier 	uchar	_pad2[4];
108*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
109*a9e8ce38SDavid du Colombier };
110*a9e8ce38SDavid du Colombier 
111*a9e8ce38SDavid du Colombier 
112*a9e8ce38SDavid du Colombier struct Iscsiloginreq {
113*a9e8ce38SDavid du Colombier 	Iscsibhdr;
114*a9e8ce38SDavid du Colombier 
115*a9e8ce38SDavid du Colombier 	uchar	cid[2];
116*a9e8ce38SDavid du Colombier 	uchar	_pad1[2];
117*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
118*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
119*a9e8ce38SDavid du Colombier 
120*a9e8ce38SDavid du Colombier 	uchar	_pad2[16];
121*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
122*a9e8ce38SDavid du Colombier };
123*a9e8ce38SDavid du Colombier 
124*a9e8ce38SDavid du Colombier struct Iscsiloginresp {
125*a9e8ce38SDavid du Colombier 	Iscsibhdr;
126*a9e8ce38SDavid du Colombier 
127*a9e8ce38SDavid du Colombier 	uchar	_pad1[4];
128*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
129*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
130*a9e8ce38SDavid du Colombier 	uchar	maxstsseq[4];
131*a9e8ce38SDavid du Colombier 
132*a9e8ce38SDavid du Colombier 	uchar	stsclass;
133*a9e8ce38SDavid du Colombier 	uchar	stsdetail;
134*a9e8ce38SDavid du Colombier 	uchar	_pad2[10];
135*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
136*a9e8ce38SDavid du Colombier };
137*a9e8ce38SDavid du Colombier 
138*a9e8ce38SDavid du Colombier 
139*a9e8ce38SDavid du Colombier struct Iscsilogoutreq {
140*a9e8ce38SDavid du Colombier 	Iscsibhdr;
141*a9e8ce38SDavid du Colombier 
142*a9e8ce38SDavid du Colombier 	uchar	cid[2];
143*a9e8ce38SDavid du Colombier 	uchar	_pad1[2];
144*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
145*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
146*a9e8ce38SDavid du Colombier 	uchar	_pad2[16];
147*a9e8ce38SDavid du Colombier };
148*a9e8ce38SDavid du Colombier 
149*a9e8ce38SDavid du Colombier struct Iscsilogoutresp {
150*a9e8ce38SDavid du Colombier 	Iscsibhdr;
151*a9e8ce38SDavid du Colombier 
152*a9e8ce38SDavid du Colombier 	uchar	_pad1[4];
153*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
154*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
155*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
156*a9e8ce38SDavid du Colombier 	uchar	_pad2[4];
157*a9e8ce38SDavid du Colombier 	uchar	waittime[2];
158*a9e8ce38SDavid du Colombier 	uchar	retaintime[2];
159*a9e8ce38SDavid du Colombier 	uchar	_pad3[4];
160*a9e8ce38SDavid du Colombier };
161*a9e8ce38SDavid du Colombier 
162*a9e8ce38SDavid du Colombier 
163*a9e8ce38SDavid du Colombier struct Iscsinopreq {		/* nop-out */
164*a9e8ce38SDavid du Colombier 	Iscsibhdr;
165*a9e8ce38SDavid du Colombier 
166*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
167*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
168*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
169*a9e8ce38SDavid du Colombier 	uchar	_pad2[16];
170*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
171*a9e8ce38SDavid du Colombier };
172*a9e8ce38SDavid du Colombier 
173*a9e8ce38SDavid du Colombier struct Iscsinopresp {		/* nop-in */
174*a9e8ce38SDavid du Colombier 	Iscsibhdr;
175*a9e8ce38SDavid du Colombier 
176*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
177*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
178*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
179*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
180*a9e8ce38SDavid du Colombier 	uchar	_pad2[12];
181*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
182*a9e8ce38SDavid du Colombier };
183*a9e8ce38SDavid du Colombier 
184*a9e8ce38SDavid du Colombier 
185*a9e8ce38SDavid du Colombier struct Iscsiready {
186*a9e8ce38SDavid du Colombier 	Iscsibhdr;
187*a9e8ce38SDavid du Colombier 
188*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
189*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
190*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
191*a9e8ce38SDavid du Colombier 	uchar	r2tseq[4];
192*a9e8ce38SDavid du Colombier 	uchar	bufoff[4];
193*a9e8ce38SDavid du Colombier 	uchar	xferlen[4];
194*a9e8ce38SDavid du Colombier };
195*a9e8ce38SDavid du Colombier 
196*a9e8ce38SDavid du Colombier struct Iscsireject {
197*a9e8ce38SDavid du Colombier 	Iscsibhdr;
198*a9e8ce38SDavid du Colombier 
199*a9e8ce38SDavid du Colombier 	uchar	_pad2[4];
200*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
201*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
202*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
203*a9e8ce38SDavid du Colombier 	uchar	r2tseq[4];
204*a9e8ce38SDavid du Colombier 	uchar	_pad3[4+4];
205*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
206*a9e8ce38SDavid du Colombier };
207*a9e8ce38SDavid du Colombier 
208*a9e8ce38SDavid du Colombier 
209*a9e8ce38SDavid du Colombier struct Iscsicmdreq {
210*a9e8ce38SDavid du Colombier 	Iscsibhdr;
211*a9e8ce38SDavid du Colombier 
212*a9e8ce38SDavid du Colombier 	uchar	expxferlen[4];
213*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
214*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
215*a9e8ce38SDavid du Colombier 
216*a9e8ce38SDavid du Colombier 	uchar	cdb[16];
217*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
218*a9e8ce38SDavid du Colombier };
219*a9e8ce38SDavid du Colombier 
220*a9e8ce38SDavid du Colombier struct Iscsicmdresp {
221*a9e8ce38SDavid du Colombier 	Iscsibhdr;
222*a9e8ce38SDavid du Colombier 
223*a9e8ce38SDavid du Colombier 	uchar	snacktag[4];
224*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
225*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
226*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
227*a9e8ce38SDavid du Colombier 	uchar	expdataseq[4];
228*a9e8ce38SDavid du Colombier 	uchar	readresid[4];
229*a9e8ce38SDavid du Colombier 	uchar	resid[4];
230*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
231*a9e8ce38SDavid du Colombier };
232*a9e8ce38SDavid du Colombier 
233*a9e8ce38SDavid du Colombier 
234*a9e8ce38SDavid du Colombier struct Iscsidatain {
235*a9e8ce38SDavid du Colombier 	Iscsibhdr;
236*a9e8ce38SDavid du Colombier 
237*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
238*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
239*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
240*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
241*a9e8ce38SDavid du Colombier 	uchar	dataseq[4];
242*a9e8ce38SDavid du Colombier 	uchar	buffoff[4];
243*a9e8ce38SDavid du Colombier 	uchar	resid[4];
244*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
245*a9e8ce38SDavid du Colombier };
246*a9e8ce38SDavid du Colombier 
247*a9e8ce38SDavid du Colombier struct Iscsidataout {		/* a.k.a. data-out */
248*a9e8ce38SDavid du Colombier 	Iscsibhdr;
249*a9e8ce38SDavid du Colombier 
250*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
251*a9e8ce38SDavid du Colombier 	uchar	_pad1[4];
252*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
253*a9e8ce38SDavid du Colombier 	uchar	_pad2[4];
254*a9e8ce38SDavid du Colombier 	uchar	dataseq[4];
255*a9e8ce38SDavid du Colombier 	uchar	buffoff[4];
256*a9e8ce38SDavid du Colombier 	uchar	_pad3[4];
257*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
258*a9e8ce38SDavid du Colombier };
259*a9e8ce38SDavid du Colombier 
260*a9e8ce38SDavid du Colombier 
261*a9e8ce38SDavid du Colombier struct Iscsisnackreq {
262*a9e8ce38SDavid du Colombier 	Iscsibhdr;
263*a9e8ce38SDavid du Colombier 
264*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
265*a9e8ce38SDavid du Colombier 	uchar	_pad1[4];
266*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
267*a9e8ce38SDavid du Colombier 	uchar	_pad2[8];
268*a9e8ce38SDavid du Colombier 	uchar	begrun[4];
269*a9e8ce38SDavid du Colombier 	uchar	runlen[4];
270*a9e8ce38SDavid du Colombier };
271*a9e8ce38SDavid du Colombier 
272*a9e8ce38SDavid du Colombier 
273*a9e8ce38SDavid du Colombier struct Iscsitaskreq {
274*a9e8ce38SDavid du Colombier 	Iscsibhdr;
275*a9e8ce38SDavid du Colombier 
276*a9e8ce38SDavid du Colombier 	uchar	rtt[4];
277*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
278*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
279*a9e8ce38SDavid du Colombier 	uchar	refcmdseq[4];
280*a9e8ce38SDavid du Colombier 	uchar	expdataseq[4];
281*a9e8ce38SDavid du Colombier 	uchar	_pad1[8];
282*a9e8ce38SDavid du Colombier };
283*a9e8ce38SDavid du Colombier 
284*a9e8ce38SDavid du Colombier struct Iscsitaskresp {
285*a9e8ce38SDavid du Colombier 	Iscsibhdr;
286*a9e8ce38SDavid du Colombier 
287*a9e8ce38SDavid du Colombier 	uchar	_pad2[4];
288*a9e8ce38SDavid du Colombier 	uchar	stsseq[4];
289*a9e8ce38SDavid du Colombier 	uchar	expcmdseq[4];
290*a9e8ce38SDavid du Colombier 	uchar	maxcmdseq[4];
291*a9e8ce38SDavid du Colombier 	uchar	_pad4[12];
292*a9e8ce38SDavid du Colombier };
293*a9e8ce38SDavid du Colombier 
294*a9e8ce38SDavid du Colombier 
295*a9e8ce38SDavid du Colombier /* req & resp identical? */
296*a9e8ce38SDavid du Colombier struct Iscsitextreq {
297*a9e8ce38SDavid du Colombier 	Iscsibhdr;
298*a9e8ce38SDavid du Colombier 
299*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
300*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
301*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
302*a9e8ce38SDavid du Colombier 	uchar	_pad1[16];
303*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
304*a9e8ce38SDavid du Colombier };
305*a9e8ce38SDavid du Colombier 
306*a9e8ce38SDavid du Colombier struct Iscsitextresp {
307*a9e8ce38SDavid du Colombier 	Iscsibhdr;
308*a9e8ce38SDavid du Colombier 
309*a9e8ce38SDavid du Colombier 	uchar	ttt[4];
310*a9e8ce38SDavid du Colombier 	uchar	cmdseq[4];
311*a9e8ce38SDavid du Colombier 	uchar	expstsseq[4];
312*a9e8ce38SDavid du Colombier 	uchar	_pad1[16];
313*a9e8ce38SDavid du Colombier 	uchar	dseg[];		/* dseg[dseglen] */
314*a9e8ce38SDavid du Colombier };
315*a9e8ce38SDavid du Colombier 
316*a9e8ce38SDavid du Colombier /*
317*a9e8ce38SDavid du Colombier  * packet-specific data
318*a9e8ce38SDavid du Colombier  */
319*a9e8ce38SDavid du Colombier struct Pkt {
320*a9e8ce38SDavid du Colombier 	union {
321*a9e8ce38SDavid du Colombier 		Iscsijustbhdr *pkthdr;
322*a9e8ce38SDavid du Colombier 		uchar	*pkt;
323*a9e8ce38SDavid du Colombier 	};
324*a9e8ce38SDavid du Colombier 	uint	len;
325*a9e8ce38SDavid du Colombier };
326*a9e8ce38SDavid du Colombier struct Resppkt {
327*a9e8ce38SDavid du Colombier 	Iscsicmdresp *resppkt;
328*a9e8ce38SDavid du Colombier 	uint	resplen;
329*a9e8ce38SDavid du Colombier };
330*a9e8ce38SDavid du Colombier struct Datainpkt {
331*a9e8ce38SDavid du Colombier 	Iscsidatain *datapkt;
332*a9e8ce38SDavid du Colombier 	uint	datalen;
333*a9e8ce38SDavid du Colombier };
334*a9e8ce38SDavid du Colombier 
335*a9e8ce38SDavid du Colombier /*
336*a9e8ce38SDavid du Colombier  * a request packet (pkt), its response packet (Resppkt),
337*a9e8ce38SDavid du Colombier  * and an optional data-in packet for cmd read operations.
338*a9e8ce38SDavid du Colombier  */
339*a9e8ce38SDavid du Colombier struct Pkts {
340*a9e8ce38SDavid du Colombier 	int	op;
341*a9e8ce38SDavid du Colombier 	int	immed;
342*a9e8ce38SDavid du Colombier 	ulong	totahslen;
343*a9e8ce38SDavid du Colombier 	ulong	dseglen;
344*a9e8ce38SDavid du Colombier 	ulong	itt;
345*a9e8ce38SDavid du Colombier 
346*a9e8ce38SDavid du Colombier 	Pkt;
347*a9e8ce38SDavid du Colombier 	Datainpkt;
348*a9e8ce38SDavid du Colombier 	Resppkt;
349*a9e8ce38SDavid du Colombier };
350*a9e8ce38SDavid du Colombier 
351*a9e8ce38SDavid du Colombier /*
352*a9e8ce38SDavid du Colombier  * iscsi state, maintained by both parties.
353*a9e8ce38SDavid du Colombier  * some are per-connection, some per-session.
354*a9e8ce38SDavid du Colombier  */
355*a9e8ce38SDavid du Colombier struct Iscsistate {
356*a9e8ce38SDavid du Colombier 	ulong	cmdseq;		/* to be assigned to next command pkt */
357*a9e8ce38SDavid du Colombier 	ulong	expcmdseq;	/* next cmd expected by target; previous done */
358*a9e8ce38SDavid du Colombier 	ulong	maxcmdseq;  /* maxcmdseq-expcmdseq+1 is target's queue depth */
359*a9e8ce38SDavid du Colombier 
360*a9e8ce38SDavid du Colombier 	ulong	stsseq;
361*a9e8ce38SDavid du Colombier 	ulong	expstsseq;	/* all previous sts seen */
362*a9e8ce38SDavid du Colombier 
363*a9e8ce38SDavid du Colombier 	ulong	dataseq;
364*a9e8ce38SDavid du Colombier 	ulong	r2tseq;
365*a9e8ce38SDavid du Colombier 
366*a9e8ce38SDavid du Colombier 	ulong	maxrcvseglen;
367*a9e8ce38SDavid du Colombier };
368