xref: /openbmc/linux/include/scsi/iscsi_proto.h (revision 8b1d0343)
1 /*
2  * RFC 3720 (iSCSI) protocol data types
3  *
4  * Copyright (C) 2005 Dmitry Yusupov
5  * Copyright (C) 2005 Alex Aizman
6  * maintained by open-iscsi@googlegroups.com
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published
10  * by the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * General Public License for more details.
17  *
18  * See the file COPYING included with this distribution for more details.
19  */
20 
21 #ifndef ISCSI_PROTO_H
22 #define ISCSI_PROTO_H
23 
24 #include <linux/types.h>
25 
26 #define ISCSI_DRAFT20_VERSION	0x00
27 
28 /* default iSCSI listen port for incoming connections */
29 #define ISCSI_LISTEN_PORT	3260
30 
31 /* Padding word length */
32 #define ISCSI_PAD_LEN		4
33 
34 /*
35  * useful common(control and data pathes) macro
36  */
37 #define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2]))
38 #define hton24(p, v) { \
39         p[0] = (((v) >> 16) & 0xFF); \
40         p[1] = (((v) >> 8) & 0xFF); \
41         p[2] = ((v) & 0xFF); \
42 }
43 #define zero_data(p) {p[0]=0;p[1]=0;p[2]=0;}
44 
45 /* initiator tags; opaque for target */
46 typedef uint32_t __bitwise__ itt_t;
47 /* below makes sense only for initiator that created this tag */
48 #define build_itt(itt, age) ((__force itt_t)\
49 	((itt) | ((age) << ISCSI_AGE_SHIFT)))
50 #define get_itt(itt) ((__force uint32_t)(itt_t)(itt) & ISCSI_ITT_MASK)
51 #define RESERVED_ITT ((__force itt_t)0xffffffff)
52 
53 /*
54  * iSCSI Template Message Header
55  */
56 struct iscsi_hdr {
57 	uint8_t		opcode;
58 	uint8_t		flags;		/* Final bit */
59 	uint8_t		rsvd2[2];
60 	uint8_t		hlength;	/* AHSs total length */
61 	uint8_t		dlength[3];	/* Data length */
62 	uint8_t		lun[8];
63 	itt_t		itt;		/* Initiator Task Tag, opaque for target */
64 	__be32		ttt;		/* Target Task Tag */
65 	__be32		statsn;
66 	__be32		exp_statsn;
67 	__be32		max_statsn;
68 	uint8_t		other[12];
69 };
70 
71 /************************* RFC 3720 Begin *****************************/
72 
73 #define ISCSI_RESERVED_TAG		0xffffffff
74 
75 /* Opcode encoding bits */
76 #define ISCSI_OP_RETRY			0x80
77 #define ISCSI_OP_IMMEDIATE		0x40
78 #define ISCSI_OPCODE_MASK		0x3F
79 
80 /* Initiator Opcode values */
81 #define ISCSI_OP_NOOP_OUT		0x00
82 #define ISCSI_OP_SCSI_CMD		0x01
83 #define ISCSI_OP_SCSI_TMFUNC		0x02
84 #define ISCSI_OP_LOGIN			0x03
85 #define ISCSI_OP_TEXT			0x04
86 #define ISCSI_OP_SCSI_DATA_OUT		0x05
87 #define ISCSI_OP_LOGOUT			0x06
88 #define ISCSI_OP_SNACK			0x10
89 
90 #define ISCSI_OP_VENDOR1_CMD		0x1c
91 #define ISCSI_OP_VENDOR2_CMD		0x1d
92 #define ISCSI_OP_VENDOR3_CMD		0x1e
93 #define ISCSI_OP_VENDOR4_CMD		0x1f
94 
95 /* Target Opcode values */
96 #define ISCSI_OP_NOOP_IN		0x20
97 #define ISCSI_OP_SCSI_CMD_RSP		0x21
98 #define ISCSI_OP_SCSI_TMFUNC_RSP	0x22
99 #define ISCSI_OP_LOGIN_RSP		0x23
100 #define ISCSI_OP_TEXT_RSP		0x24
101 #define ISCSI_OP_SCSI_DATA_IN		0x25
102 #define ISCSI_OP_LOGOUT_RSP		0x26
103 #define ISCSI_OP_R2T			0x31
104 #define ISCSI_OP_ASYNC_EVENT		0x32
105 #define ISCSI_OP_REJECT			0x3f
106 
107 struct iscsi_ahs_hdr {
108 	__be16 ahslength;
109 	uint8_t ahstype;
110 	uint8_t ahspec[5];
111 };
112 
113 #define ISCSI_AHSTYPE_CDB		1
114 #define ISCSI_AHSTYPE_RLENGTH		2
115 
116 /* iSCSI PDU Header */
117 struct iscsi_cmd {
118 	uint8_t opcode;
119 	uint8_t flags;
120 	__be16 rsvd2;
121 	uint8_t hlength;
122 	uint8_t dlength[3];
123 	uint8_t lun[8];
124 	itt_t	 itt;	/* Initiator Task Tag */
125 	__be32 data_length;
126 	__be32 cmdsn;
127 	__be32 exp_statsn;
128 	uint8_t cdb[16];	/* SCSI Command Block */
129 	/* Additional Data (Command Dependent) */
130 };
131 
132 /* Command PDU flags */
133 #define ISCSI_FLAG_CMD_FINAL		0x80
134 #define ISCSI_FLAG_CMD_READ		0x40
135 #define ISCSI_FLAG_CMD_WRITE		0x20
136 #define ISCSI_FLAG_CMD_ATTR_MASK	0x07	/* 3 bits */
137 
138 /* SCSI Command Attribute values */
139 #define ISCSI_ATTR_UNTAGGED		0
140 #define ISCSI_ATTR_SIMPLE		1
141 #define ISCSI_ATTR_ORDERED		2
142 #define ISCSI_ATTR_HEAD_OF_QUEUE	3
143 #define ISCSI_ATTR_ACA			4
144 
145 struct iscsi_rlength_ahdr {
146 	__be16 ahslength;
147 	uint8_t ahstype;
148 	uint8_t reserved;
149 	__be32 read_length;
150 };
151 
152 /* Extended CDB AHS */
153 struct iscsi_ecdb_ahdr {
154 	__be16 ahslength;	/* CDB length - 15, including reserved byte */
155 	uint8_t ahstype;
156 	uint8_t reserved;
157 	uint8_t ecdb[260 - 16];	/* 4-byte aligned extended CDB spillover */
158 };
159 
160 /* SCSI Response Header */
161 struct iscsi_cmd_rsp {
162 	uint8_t opcode;
163 	uint8_t flags;
164 	uint8_t response;
165 	uint8_t cmd_status;
166 	uint8_t hlength;
167 	uint8_t dlength[3];
168 	uint8_t rsvd[8];
169 	itt_t	 itt;	/* Initiator Task Tag */
170 	__be32	rsvd1;
171 	__be32	statsn;
172 	__be32	exp_cmdsn;
173 	__be32	max_cmdsn;
174 	__be32	exp_datasn;
175 	__be32	bi_residual_count;
176 	__be32	residual_count;
177 	/* Response or Sense Data (optional) */
178 };
179 
180 /* Command Response PDU flags */
181 #define ISCSI_FLAG_CMD_BIDI_OVERFLOW	0x10
182 #define ISCSI_FLAG_CMD_BIDI_UNDERFLOW	0x08
183 #define ISCSI_FLAG_CMD_OVERFLOW		0x04
184 #define ISCSI_FLAG_CMD_UNDERFLOW	0x02
185 
186 /* iSCSI Status values. Valid if Rsp Selector bit is not set */
187 #define ISCSI_STATUS_CMD_COMPLETED	0
188 #define ISCSI_STATUS_TARGET_FAILURE	1
189 #define ISCSI_STATUS_SUBSYS_FAILURE	2
190 
191 /* Asynchronous Event Header */
192 struct iscsi_async {
193 	uint8_t opcode;
194 	uint8_t flags;
195 	uint8_t rsvd2[2];
196 	uint8_t rsvd3;
197 	uint8_t dlength[3];
198 	uint8_t lun[8];
199 	uint8_t rsvd4[8];
200 	__be32	statsn;
201 	__be32	exp_cmdsn;
202 	__be32	max_cmdsn;
203 	uint8_t async_event;
204 	uint8_t async_vcode;
205 	__be16	param1;
206 	__be16	param2;
207 	__be16	param3;
208 	uint8_t rsvd5[4];
209 };
210 
211 /* iSCSI Event Codes */
212 #define ISCSI_ASYNC_MSG_SCSI_EVENT			0
213 #define ISCSI_ASYNC_MSG_REQUEST_LOGOUT			1
214 #define ISCSI_ASYNC_MSG_DROPPING_CONNECTION		2
215 #define ISCSI_ASYNC_MSG_DROPPING_ALL_CONNECTIONS	3
216 #define ISCSI_ASYNC_MSG_PARAM_NEGOTIATION		4
217 #define ISCSI_ASYNC_MSG_VENDOR_SPECIFIC			255
218 
219 /* NOP-Out Message */
220 struct iscsi_nopout {
221 	uint8_t opcode;
222 	uint8_t flags;
223 	__be16	rsvd2;
224 	uint8_t rsvd3;
225 	uint8_t dlength[3];
226 	uint8_t lun[8];
227 	itt_t	 itt;	/* Initiator Task Tag */
228 	__be32	ttt;	/* Target Transfer Tag */
229 	__be32	cmdsn;
230 	__be32	exp_statsn;
231 	uint8_t rsvd4[16];
232 };
233 
234 /* NOP-In Message */
235 struct iscsi_nopin {
236 	uint8_t opcode;
237 	uint8_t flags;
238 	__be16	rsvd2;
239 	uint8_t rsvd3;
240 	uint8_t dlength[3];
241 	uint8_t lun[8];
242 	itt_t	 itt;	/* Initiator Task Tag */
243 	__be32	ttt;	/* Target Transfer Tag */
244 	__be32	statsn;
245 	__be32	exp_cmdsn;
246 	__be32	max_cmdsn;
247 	uint8_t rsvd4[12];
248 };
249 
250 /* SCSI Task Management Message Header */
251 struct iscsi_tm {
252 	uint8_t opcode;
253 	uint8_t flags;
254 	uint8_t rsvd1[2];
255 	uint8_t hlength;
256 	uint8_t dlength[3];
257 	uint8_t lun[8];
258 	itt_t	 itt;	/* Initiator Task Tag */
259 	itt_t	 rtt;	/* Reference Task Tag */
260 	__be32	cmdsn;
261 	__be32	exp_statsn;
262 	__be32	refcmdsn;
263 	__be32	exp_datasn;
264 	uint8_t rsvd2[8];
265 };
266 
267 #define ISCSI_FLAG_TM_FUNC_MASK			0x7F
268 
269 /* Function values */
270 #define ISCSI_TM_FUNC_ABORT_TASK		1
271 #define ISCSI_TM_FUNC_ABORT_TASK_SET		2
272 #define ISCSI_TM_FUNC_CLEAR_ACA			3
273 #define ISCSI_TM_FUNC_CLEAR_TASK_SET		4
274 #define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET	5
275 #define ISCSI_TM_FUNC_TARGET_WARM_RESET		6
276 #define ISCSI_TM_FUNC_TARGET_COLD_RESET		7
277 #define ISCSI_TM_FUNC_TASK_REASSIGN		8
278 
279 /* SCSI Task Management Response Header */
280 struct iscsi_tm_rsp {
281 	uint8_t opcode;
282 	uint8_t flags;
283 	uint8_t response;	/* see Response values below */
284 	uint8_t qualifier;
285 	uint8_t hlength;
286 	uint8_t dlength[3];
287 	uint8_t rsvd2[8];
288 	itt_t	 itt;	/* Initiator Task Tag */
289 	itt_t	 rtt;	/* Reference Task Tag */
290 	__be32	statsn;
291 	__be32	exp_cmdsn;
292 	__be32	max_cmdsn;
293 	uint8_t rsvd3[12];
294 };
295 
296 /* Response values */
297 #define ISCSI_TMF_RSP_COMPLETE		0x00
298 #define ISCSI_TMF_RSP_NO_TASK		0x01
299 #define ISCSI_TMF_RSP_NO_LUN		0x02
300 #define ISCSI_TMF_RSP_TASK_ALLEGIANT	0x03
301 #define ISCSI_TMF_RSP_NO_FAILOVER	0x04
302 #define ISCSI_TMF_RSP_NOT_SUPPORTED	0x05
303 #define ISCSI_TMF_RSP_AUTH_FAILED	0x06
304 #define ISCSI_TMF_RSP_REJECTED		0xff
305 
306 /* Ready To Transfer Header */
307 struct iscsi_r2t_rsp {
308 	uint8_t opcode;
309 	uint8_t flags;
310 	uint8_t rsvd2[2];
311 	uint8_t	hlength;
312 	uint8_t	dlength[3];
313 	uint8_t lun[8];
314 	itt_t	 itt;	/* Initiator Task Tag */
315 	__be32	ttt;	/* Target Transfer Tag */
316 	__be32	statsn;
317 	__be32	exp_cmdsn;
318 	__be32	max_cmdsn;
319 	__be32	r2tsn;
320 	__be32	data_offset;
321 	__be32	data_length;
322 };
323 
324 /* SCSI Data Hdr */
325 struct iscsi_data {
326 	uint8_t opcode;
327 	uint8_t flags;
328 	uint8_t rsvd2[2];
329 	uint8_t rsvd3;
330 	uint8_t dlength[3];
331 	uint8_t lun[8];
332 	itt_t	 itt;
333 	__be32	ttt;
334 	__be32	rsvd4;
335 	__be32	exp_statsn;
336 	__be32	rsvd5;
337 	__be32	datasn;
338 	__be32	offset;
339 	__be32	rsvd6;
340 	/* Payload */
341 };
342 
343 /* SCSI Data Response Hdr */
344 struct iscsi_data_rsp {
345 	uint8_t opcode;
346 	uint8_t flags;
347 	uint8_t rsvd2;
348 	uint8_t cmd_status;
349 	uint8_t hlength;
350 	uint8_t dlength[3];
351 	uint8_t lun[8];
352 	itt_t	 itt;
353 	__be32	ttt;
354 	__be32	statsn;
355 	__be32	exp_cmdsn;
356 	__be32	max_cmdsn;
357 	__be32	datasn;
358 	__be32	offset;
359 	__be32	residual_count;
360 };
361 
362 /* Data Response PDU flags */
363 #define ISCSI_FLAG_DATA_ACK		0x40
364 #define ISCSI_FLAG_DATA_OVERFLOW	0x04
365 #define ISCSI_FLAG_DATA_UNDERFLOW	0x02
366 #define ISCSI_FLAG_DATA_STATUS		0x01
367 
368 /* Text Header */
369 struct iscsi_text {
370 	uint8_t opcode;
371 	uint8_t flags;
372 	uint8_t rsvd2[2];
373 	uint8_t hlength;
374 	uint8_t dlength[3];
375 	uint8_t rsvd4[8];
376 	itt_t	 itt;
377 	__be32	ttt;
378 	__be32	cmdsn;
379 	__be32	exp_statsn;
380 	uint8_t rsvd5[16];
381 	/* Text - key=value pairs */
382 };
383 
384 #define ISCSI_FLAG_TEXT_CONTINUE	0x40
385 
386 /* Text Response Header */
387 struct iscsi_text_rsp {
388 	uint8_t opcode;
389 	uint8_t flags;
390 	uint8_t rsvd2[2];
391 	uint8_t hlength;
392 	uint8_t dlength[3];
393 	uint8_t rsvd4[8];
394 	itt_t	 itt;
395 	__be32	ttt;
396 	__be32	statsn;
397 	__be32	exp_cmdsn;
398 	__be32	max_cmdsn;
399 	uint8_t rsvd5[12];
400 	/* Text Response - key:value pairs */
401 };
402 
403 /* Login Header */
404 struct iscsi_login {
405 	uint8_t opcode;
406 	uint8_t flags;
407 	uint8_t max_version;	/* Max. version supported */
408 	uint8_t min_version;	/* Min. version supported */
409 	uint8_t hlength;
410 	uint8_t dlength[3];
411 	uint8_t isid[6];	/* Initiator Session ID */
412 	__be16	tsih;	/* Target Session Handle */
413 	itt_t	 itt;	/* Initiator Task Tag */
414 	__be16	cid;
415 	__be16	rsvd3;
416 	__be32	cmdsn;
417 	__be32	exp_statsn;
418 	uint8_t rsvd5[16];
419 };
420 
421 /* Login PDU flags */
422 #define ISCSI_FLAG_LOGIN_TRANSIT		0x80
423 #define ISCSI_FLAG_LOGIN_CONTINUE		0x40
424 #define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK	0x0C	/* 2 bits */
425 #define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK	0x03	/* 2 bits */
426 
427 #define ISCSI_LOGIN_CURRENT_STAGE(flags) \
428 	((flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2)
429 #define ISCSI_LOGIN_NEXT_STAGE(flags) \
430 	(flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK)
431 
432 /* Login Response Header */
433 struct iscsi_login_rsp {
434 	uint8_t opcode;
435 	uint8_t flags;
436 	uint8_t max_version;	/* Max. version supported */
437 	uint8_t active_version;	/* Active version */
438 	uint8_t hlength;
439 	uint8_t dlength[3];
440 	uint8_t isid[6];	/* Initiator Session ID */
441 	__be16	tsih;	/* Target Session Handle */
442 	itt_t	 itt;	/* Initiator Task Tag */
443 	__be32	rsvd3;
444 	__be32	statsn;
445 	__be32	exp_cmdsn;
446 	__be32	max_cmdsn;
447 	uint8_t status_class;	/* see Login RSP ststus classes below */
448 	uint8_t status_detail;	/* see Login RSP Status details below */
449 	uint8_t rsvd4[10];
450 };
451 
452 /* Login stage (phase) codes for CSG, NSG */
453 #define ISCSI_INITIAL_LOGIN_STAGE		-1
454 #define ISCSI_SECURITY_NEGOTIATION_STAGE	0
455 #define ISCSI_OP_PARMS_NEGOTIATION_STAGE	1
456 #define ISCSI_FULL_FEATURE_PHASE		3
457 
458 /* Login Status response classes */
459 #define ISCSI_STATUS_CLS_SUCCESS		0x00
460 #define ISCSI_STATUS_CLS_REDIRECT		0x01
461 #define ISCSI_STATUS_CLS_INITIATOR_ERR		0x02
462 #define ISCSI_STATUS_CLS_TARGET_ERR		0x03
463 
464 /* Login Status response detail codes */
465 /* Class-0 (Success) */
466 #define ISCSI_LOGIN_STATUS_ACCEPT		0x00
467 
468 /* Class-1 (Redirection) */
469 #define ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP	0x01
470 #define ISCSI_LOGIN_STATUS_TGT_MOVED_PERM	0x02
471 
472 /* Class-2 (Initiator Error) */
473 #define ISCSI_LOGIN_STATUS_INIT_ERR		0x00
474 #define ISCSI_LOGIN_STATUS_AUTH_FAILED		0x01
475 #define ISCSI_LOGIN_STATUS_TGT_FORBIDDEN	0x02
476 #define ISCSI_LOGIN_STATUS_TGT_NOT_FOUND	0x03
477 #define ISCSI_LOGIN_STATUS_TGT_REMOVED		0x04
478 #define ISCSI_LOGIN_STATUS_NO_VERSION		0x05
479 #define ISCSI_LOGIN_STATUS_ISID_ERROR		0x06
480 #define ISCSI_LOGIN_STATUS_MISSING_FIELDS	0x07
481 #define ISCSI_LOGIN_STATUS_CONN_ADD_FAILED	0x08
482 #define ISCSI_LOGIN_STATUS_NO_SESSION_TYPE	0x09
483 #define ISCSI_LOGIN_STATUS_NO_SESSION		0x0a
484 #define ISCSI_LOGIN_STATUS_INVALID_REQUEST	0x0b
485 
486 /* Class-3 (Target Error) */
487 #define ISCSI_LOGIN_STATUS_TARGET_ERROR		0x00
488 #define ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE	0x01
489 #define ISCSI_LOGIN_STATUS_NO_RESOURCES		0x02
490 
491 /* Logout Header */
492 struct iscsi_logout {
493 	uint8_t opcode;
494 	uint8_t flags;
495 	uint8_t rsvd1[2];
496 	uint8_t hlength;
497 	uint8_t dlength[3];
498 	uint8_t rsvd2[8];
499 	itt_t	 itt;	/* Initiator Task Tag */
500 	__be16	cid;
501 	uint8_t rsvd3[2];
502 	__be32	cmdsn;
503 	__be32	exp_statsn;
504 	uint8_t rsvd4[16];
505 };
506 
507 /* Logout PDU flags */
508 #define ISCSI_FLAG_LOGOUT_REASON_MASK	0x7F
509 
510 /* logout reason_code values */
511 
512 #define ISCSI_LOGOUT_REASON_CLOSE_SESSION	0
513 #define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION	1
514 #define ISCSI_LOGOUT_REASON_RECOVERY		2
515 #define ISCSI_LOGOUT_REASON_AEN_REQUEST		3
516 
517 /* Logout Response Header */
518 struct iscsi_logout_rsp {
519 	uint8_t opcode;
520 	uint8_t flags;
521 	uint8_t response;	/* see Logout response values below */
522 	uint8_t rsvd2;
523 	uint8_t hlength;
524 	uint8_t dlength[3];
525 	uint8_t rsvd3[8];
526 	itt_t	 itt;	/* Initiator Task Tag */
527 	__be32	rsvd4;
528 	__be32	statsn;
529 	__be32	exp_cmdsn;
530 	__be32	max_cmdsn;
531 	__be32	rsvd5;
532 	__be16	t2wait;
533 	__be16	t2retain;
534 	__be32	rsvd6;
535 };
536 
537 /* logout response status values */
538 
539 #define ISCSI_LOGOUT_SUCCESS			0
540 #define ISCSI_LOGOUT_CID_NOT_FOUND		1
541 #define ISCSI_LOGOUT_RECOVERY_UNSUPPORTED	2
542 #define ISCSI_LOGOUT_CLEANUP_FAILED		3
543 
544 /* SNACK Header */
545 struct iscsi_snack {
546 	uint8_t opcode;
547 	uint8_t flags;
548 	uint8_t rsvd2[14];
549 	itt_t	 itt;
550 	__be32	begrun;
551 	__be32	runlength;
552 	__be32	exp_statsn;
553 	__be32	rsvd3;
554 	__be32	exp_datasn;
555 	uint8_t rsvd6[8];
556 };
557 
558 /* SNACK PDU flags */
559 #define ISCSI_FLAG_SNACK_TYPE_MASK	0x0F	/* 4 bits */
560 
561 /* Reject Message Header */
562 struct iscsi_reject {
563 	uint8_t opcode;
564 	uint8_t flags;
565 	uint8_t reason;
566 	uint8_t rsvd2;
567 	uint8_t hlength;
568 	uint8_t dlength[3];
569 	uint8_t rsvd3[8];
570 	__be32  ffffffff;
571 	uint8_t rsvd4[4];
572 	__be32	statsn;
573 	__be32	exp_cmdsn;
574 	__be32	max_cmdsn;
575 	__be32	datasn;
576 	uint8_t rsvd5[8];
577 	/* Text - Rejected hdr */
578 };
579 
580 /* Reason for Reject */
581 #define ISCSI_REASON_CMD_BEFORE_LOGIN	1
582 #define ISCSI_REASON_DATA_DIGEST_ERROR	2
583 #define ISCSI_REASON_DATA_SNACK_REJECT	3
584 #define ISCSI_REASON_PROTOCOL_ERROR	4
585 #define ISCSI_REASON_CMD_NOT_SUPPORTED	5
586 #define ISCSI_REASON_IMM_CMD_REJECT		6
587 #define ISCSI_REASON_TASK_IN_PROGRESS	7
588 #define ISCSI_REASON_INVALID_SNACK		8
589 #define ISCSI_REASON_BOOKMARK_INVALID	9
590 #define ISCSI_REASON_BOOKMARK_NO_RESOURCES	10
591 #define ISCSI_REASON_NEGOTIATION_RESET	11
592 
593 /* Max. number of Key=Value pairs in a text message */
594 #define MAX_KEY_VALUE_PAIRS	8192
595 
596 /* maximum length for text keys/values */
597 #define KEY_MAXLEN		64
598 #define VALUE_MAXLEN		255
599 #define TARGET_NAME_MAXLEN	VALUE_MAXLEN
600 
601 #define ISCSI_DEF_MAX_RECV_SEG_LEN		8192
602 #define ISCSI_MIN_MAX_RECV_SEG_LEN		512
603 #define ISCSI_MAX_MAX_RECV_SEG_LEN		16777215
604 
605 #define ISCSI_DEF_FIRST_BURST_LEN		65536
606 #define ISCSI_MIN_FIRST_BURST_LEN		512
607 #define ISCSI_MAX_FIRST_BURST_LEN		16777215
608 
609 #define ISCSI_DEF_MAX_BURST_LEN			262144
610 #define ISCSI_MIN_MAX_BURST_LEN			512
611 #define ISCSI_MAX_MAX_BURST_LEN			16777215
612 
613 #define ISCSI_DEF_TIME2WAIT			2
614 
615 /************************* RFC 3720 End *****************************/
616 
617 #endif /* ISCSI_PROTO_H */
618