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