Print this page
NO_COMMENT
| Split |
Close |
| Expand all |
| Collapse all |
--- old/src/sun_nws/headers/common/iscsi/iscsi_protocol.h
+++ new/src/sun_nws/headers/common/iscsi/iscsi_protocol.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License, Version 1.0 only
6 6 * (the "License"). You may not use this file except in compliance
7 7 * with the License.
8 8 *
9 9 * You can obtain a copy of the license at src/sun_nws/OPENSOLARIS.LICENSE
10 10 * or http://www.opensolaris.org/os/licensing.
11 11 * See the License for the specific language governing permissions
12 12 * and limitations under the License.
|
↓ open down ↓ |
12 lines elided |
↑ open up ↑ |
13 13 *
14 14 * When distributing Covered Code, include this CDDL HEADER in each
15 15 * file and include the License file at src/sun_nws/OPENSOLARIS.LICENSE.
16 16 * If applicable, add the following below this CDDL HEADER, with the
17 17 * fields enclosed by brackets "[]" replaced with your own identifying
18 18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 19 *
20 20 * CDDL HEADER END
21 21 */
22 22 /*
23 - * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
23 + * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 24 * Use is subject to license terms.
25 25 */
26 26
27 27 #ifndef _ISCSI_PROTOCOL_H
28 28 #define _ISCSI_PROTOCOL_H
29 29
30 -#pragma ident "@(#)iscsi_protocol.h 1.7 05/12/07 SMI"
30 +#pragma ident "@(#)iscsi_protocol.h 1.10 08/02/29 SMI"
31 31
32 32 #ifdef __cplusplus
33 33 extern "C" {
34 34 #endif
35 35
36 36 /*
37 37 * iSCSI connection daemon
38 38 * Copyright (C) 2001 Cisco Systems, Inc.
39 39 * All rights reserved.
40 40 *
41 41 * This file sets up definitions of messages and constants used by the
42 42 * iSCSI protocol.
43 43 *
44 44 */
45 45
46 46 #include <sys/types.h>
47 47 #include <sys/isa_defs.h>
48 48
49 49 /* iSCSI listen port for incoming connections */
50 50 #define ISCSI_LISTEN_PORT 3260
51 51
52 52 /* assumes a pointer to a 3-byte array */
53 53 #define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2]))
54 54
55 55 /* assumes a pointer to a 3 byte array, and an integer value */
56 56 #define hton24(p, v) {\
57 57 p[0] = (((v) >> 16) & 0xFF); \
58 58 p[1] = (((v) >> 8) & 0xFF); \
59 59 p[2] = ((v) & 0xFF); \
60 60 }
61 61
62 62
63 63 /* for Login min, max, active version fields */
64 64 #define ISCSI_MIN_VERSION 0x00
65 65 #define ISCSI_DRAFT8_VERSION 0x02
66 66 #define ISCSI_DRAFT20_VERSION 0x00
67 67 #define ISCSI_MAX_VERSION 0x02
68 68
69 69 /* Min. and Max. length of a PDU we can support */
70 70 #define ISCSI_MIN_PDU_LENGTH (8 << 9) /* 4KB */
71 71 #define ISCSI_MAX_PDU_LENGTH (0xffffffff) /* Huge */
|
↓ open down ↓ |
31 lines elided |
↑ open up ↑ |
72 72
73 73 /* Padding word length */
74 74 #define ISCSI_PAD_WORD_LEN 4
75 75
76 76 /* Max. number of Key=Value pairs in a text message */
77 77 #define ISCSI_MAX_KEY_VALUE_PAIRS 8192
78 78
79 79 /* text separtor between key value pairs exhanged in login */
80 80 #define ISCSI_TEXT_SEPARATOR '='
81 81
82 +/* reserved text constants for Text Mode Negotiation */
83 +#define ISCSI_TEXT_NONE "None"
84 +#define ISCSI_TEXT_REJECT "Reject"
85 +#define ISCSI_TEXT_IRRELEVANT "Irrelevant"
86 +#define ISCSI_TEXT_NOTUNDERSTOOD "NotUnderstood"
87 +
82 88 /* Reserved value for initiator/target task tag */
83 89 #define ISCSI_RSVD_TASK_TAG 0xffffffff
84 90
85 91 /* maximum length for text keys/values */
86 92 #define KEY_MAXLEN 64
87 93 #define VALUE_MAXLEN 255
88 94 #define TARGET_NAME_MAXLEN VALUE_MAXLEN
89 95
90 96 #define ISCSI_DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH 8192
91 97
92 98 /* most PDU types have a final bit */
93 99 #define ISCSI_FLAG_FINAL 0x80
94 100
95 101 /*
96 102 * Strings used during SendTargets requests
97 103 */
98 104 #define ISCSI_TEXT_SEPARATOR '='
99 105 #define TARGETNAME "TargetName="
100 106 #define TARGETADDRESS "TargetAddress="
101 107
102 108 /* iSCSI Template Message Header */
103 109 typedef struct _iscsi_hdr {
104 110 uint8_t opcode;
105 111 uint8_t flags; /* Final bit */
106 112 uint8_t rsvd2[2];
107 113 uint8_t hlength; /* AHSs total length */
108 114 uint8_t dlength[3]; /* Data length */
109 115 uint8_t lun[8];
110 116 uint32_t itt; /* Initiator Task Tag */
111 117 uint8_t other[28];
112 118 } iscsi_hdr_t;
113 119
114 120 /* Opcode encoding bits */
115 121 #define ISCSI_OP_RETRY 0x80
116 122 #define ISCSI_OP_IMMEDIATE 0x40
117 123 #define ISCSI_OPCODE_MASK 0x3F
118 124
119 125 /* Client to Server Message Opcode values */
120 126 #define ISCSI_OP_NOOP_OUT 0x00
121 127 #define ISCSI_OP_SCSI_CMD 0x01
122 128 #define ISCSI_OP_SCSI_TASK_MGT_MSG 0x02
123 129 #define ISCSI_OP_LOGIN_CMD 0x03
124 130 #define ISCSI_OP_TEXT_CMD 0x04
125 131 #define ISCSI_OP_SCSI_DATA 0x05
126 132 #define ISCSI_OP_LOGOUT_CMD 0x06
127 133 #define ISCSI_OP_SNACK_CMD 0x10
128 134
129 135 /* Server to Client Message Opcode values */
130 136 #define ISCSI_OP_NOOP_IN 0x20
131 137 #define ISCSI_OP_SCSI_RSP 0x21
132 138 #define ISCSI_OP_SCSI_TASK_MGT_RSP 0x22
133 139 #define ISCSI_OP_LOGIN_RSP 0x23
134 140 #define ISCSI_OP_TEXT_RSP 0x24
135 141 #define ISCSI_OP_SCSI_DATA_RSP 0x25
136 142 #define ISCSI_OP_LOGOUT_RSP 0x26
137 143 #define ISCSI_OP_RTT_RSP 0x31
138 144 #define ISCSI_OP_ASYNC_EVENT 0x32
139 145 #define ISCSI_OP_REJECT_MSG 0x3f
140 146
141 147
142 148 /* SCSI Command Header */
143 149 typedef struct _iscsi_scsi_cmd_hdr {
144 150 uint8_t opcode;
145 151 uint8_t flags;
146 152 uint8_t rsvd[2];
147 153 uint8_t hlength;
148 154 uint8_t dlength[3];
149 155 uint8_t lun[8];
150 156 uint32_t itt; /* Initiator Task Tag */
151 157 uint32_t data_length;
152 158 uint32_t cmdsn;
153 159 uint32_t expstatsn;
154 160 uint8_t scb[16]; /* SCSI Command Block */
155 161 /*
156 162 * Additional Data (Command Dependent)
157 163 */
158 164 } iscsi_scsi_cmd_hdr_t;
159 165
160 166 /* Command PDU flags */
161 167 #define ISCSI_FLAG_CMD_READ 0x40
162 168 #define ISCSI_FLAG_CMD_WRITE 0x20
163 169 #define ISCSI_FLAG_CMD_ATTR_MASK 0x07 /* 3 bits */
164 170
165 171 /* SCSI Command Attribute values */
166 172 #define ISCSI_ATTR_UNTAGGED 0
167 173 #define ISCSI_ATTR_SIMPLE 1
168 174 #define ISCSI_ATTR_ORDERED 2
169 175 #define ISCSI_ATTR_HEAD_OF_QUEUE 3
170 176 #define ISCSI_ATTR_ACA 4
171 177
172 178
173 179 /* SCSI Response Header */
174 180 typedef struct _iscsi_scsi_rsp_hdr {
175 181 uint8_t opcode;
176 182 uint8_t flags;
177 183 uint8_t response;
178 184 uint8_t cmd_status;
179 185 uint8_t hlength;
180 186 uint8_t dlength[3];
181 187 uint8_t rsvd[8];
182 188 uint32_t itt; /* Initiator Task Tag */
183 189 uint32_t rsvd1;
184 190 uint32_t statsn;
185 191 uint32_t expcmdsn;
186 192 uint32_t maxcmdsn;
187 193 uint32_t expdatasn;
188 194 uint32_t bi_residual_count;
189 195 uint32_t residual_count;
190 196 /*
191 197 * Response or Sense Data (optional)
192 198 */
193 199 } iscsi_scsi_rsp_hdr_t;
194 200
195 201 /* 10.2.2.3 - Extended CDB Additional Header Segment */
196 202
197 203 typedef struct _iscsi_addl_hdr {
198 204 iscsi_scsi_cmd_hdr_t ahs_isch;
199 205 uint8_t ahs_hlen_hi;
200 206 uint8_t ahs_hlen_lo;
201 207 uint8_t ahs_key;
202 208 uint8_t ahs_resv;
203 209 uint8_t ahs_extscb[4];
204 210 } iscsi_addl_hdr_t;
205 211
206 212 /* Command Response PDU flags */
207 213 #define ISCSI_FLAG_CMD_BIDI_OVERFLOW 0x10
208 214 #define ISCSI_FLAG_CMD_BIDI_UNDERFLOW 0x08
209 215 #define ISCSI_FLAG_CMD_OVERFLOW 0x04
210 216 #define ISCSI_FLAG_CMD_UNDERFLOW 0x02
211 217
212 218 /* iSCSI Status values. Valid if Rsp Selector bit is not set */
213 219 #define ISCSI_STATUS_CMD_COMPLETED 0
214 220 #define ISCSI_STATUS_TARGET_FAILURE 1
215 221 #define ISCSI_STATUS_SUBSYS_FAILURE 2
216 222
217 223
218 224 /* Asynchronous Event Header */
219 225 typedef struct _iscsi_async_evt_hdr {
220 226 uint8_t opcode;
221 227 uint8_t flags;
222 228 uint8_t rsvd2[2];
223 229 uint8_t rsvd3;
224 230 uint8_t dlength[3];
225 231 uint8_t lun[8];
226 232 uint8_t rsvd4[8];
227 233 uint32_t statsn;
228 234 uint32_t expcmdsn;
229 235 uint32_t maxcmdsn;
230 236 uint8_t async_event;
231 237 uint8_t async_vcode;
232 238 uint16_t param1;
233 239 uint16_t param2;
234 240 uint16_t param3;
235 241 uint8_t rsvd5[4];
236 242 } iscsi_async_evt_hdr_t;
237 243
238 244 /* iSCSI Event Indicator values */
239 245 #define ISCSI_ASYNC_EVENT_SCSI_EVENT 0
240 246 #define ISCSI_ASYNC_EVENT_REQUEST_LOGOUT 1
241 247 #define ISCSI_ASYNC_EVENT_DROPPING_CONNECTION 2
242 248 #define ISCSI_ASYNC_EVENT_DROPPING_ALL_CONNECTIONS 3
243 249 #define ISCSI_ASYNC_EVENT_PARAM_NEGOTIATION 4
244 250 #define ISCSI_ASYNC_EVENT_VENDOR_SPECIFIC 255
245 251
246 252
247 253 /* NOP-Out Message */
248 254 typedef struct _iscsi_nop_out_hdr {
249 255 uint8_t opcode;
250 256 uint8_t flags;
251 257 uint16_t rsvd2;
252 258 uint8_t rsvd3;
253 259 uint8_t dlength[3];
254 260 uint8_t lun[8];
255 261 uint32_t itt; /* Initiator Task Tag */
256 262 uint32_t ttt; /* Target Transfer Tag */
257 263 uint32_t cmdsn;
258 264 uint32_t expstatsn;
259 265 uint8_t rsvd4[16];
260 266 } iscsi_nop_out_hdr_t;
261 267
262 268
263 269 /* NOP-In Message */
264 270 typedef struct _iscsi_nop_in_hdr {
265 271 uint8_t opcode;
266 272 uint8_t flags;
267 273 uint16_t rsvd2;
268 274 uint8_t rsvd3;
269 275 uint8_t dlength[3];
270 276 uint8_t lun[8];
271 277 uint32_t itt; /* Initiator Task Tag */
272 278 uint32_t ttt; /* Target Transfer Tag */
273 279 uint32_t statsn;
274 280 uint32_t expcmdsn;
275 281 uint32_t maxcmdsn;
276 282 uint8_t rsvd4[12];
277 283 } iscsi_nop_in_hdr_t;
278 284
279 285 /* SCSI Task Management Message Header */
280 286 typedef struct _iscsi_scsi_task_mgt_hdr {
281 287 uint8_t opcode;
282 288 uint8_t function;
283 289 uint8_t rsvd1[2];
284 290 uint8_t hlength;
285 291 uint8_t dlength[3];
286 292 uint8_t lun[8];
287 293 uint32_t itt; /* Initiator Task Tag */
288 294 uint32_t rtt; /* Reference Task Tag */
289 295 uint32_t cmdsn;
290 296 uint32_t expstatsn;
291 297 uint32_t refcmdsn;
292 298 uint32_t expdatasn;
293 299 uint8_t rsvd2[8];
294 300 } iscsi_scsi_task_mgt_hdr_t;
295 301
296 302 #define ISCSI_FLAG_TASK_MGMT_FUNCTION_MASK 0x7F
297 303
298 304 /* Function values */
299 305 #define ISCSI_TM_FUNC_ABORT_TASK 1
300 306 #define ISCSI_TM_FUNC_ABORT_TASK_SET 2
301 307 #define ISCSI_TM_FUNC_CLEAR_ACA 3
302 308 #define ISCSI_TM_FUNC_CLEAR_TASK_SET 4
303 309 #define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET 5
304 310 #define ISCSI_TM_FUNC_TARGET_WARM_RESET 6
305 311 #define ISCSI_TM_FUNC_TARGET_COLD_RESET 7
306 312 #define ISCSI_TM_FUNC_TASK_REASSIGN 8
307 313
308 314
309 315 /* SCSI Task Management Response Header */
310 316 typedef struct _iscsi_scsi_task_mgt_rsp_hdr {
311 317 uint8_t opcode;
312 318 uint8_t flags;
313 319 uint8_t response; /* see Response values below */
314 320 uint8_t qualifier;
315 321 uint8_t hlength;
316 322 uint8_t dlength[3];
317 323 uint8_t rsvd2[8];
318 324 uint32_t itt; /* Initiator Task Tag */
319 325 uint32_t rtt; /* Reference Task Tag */
320 326 uint32_t statsn;
321 327 uint32_t expcmdsn;
322 328 uint32_t maxcmdsn;
323 329 uint8_t rsvd3[12];
324 330 } iscsi_scsi_task_mgt_rsp_hdr_t;
325 331
326 332
327 333 /* Response values */
328 334 #define SCSI_TCP_TM_RESP_COMPLETE 0x00
329 335 #define SCSI_TCP_TM_RESP_NO_TASK 0x01
330 336 #define SCSI_TCP_TM_RESP_NO_LUN 0x02
331 337 #define SCSI_TCP_TM_RESP_TASK_ALLEGIANT 0x03
332 338 #define SCSI_TCP_TM_RESP_NO_FAILOVER 0x04
333 339 #define SCSI_TCP_TM_RESP_IN_PRGRESS 0x05
334 340 #define SCSI_TCP_TM_RESP_REJECTED 0xff
335 341
336 342 /* Ready To Transfer Header */
337 343 typedef struct _iscsi_rtt_hdr {
338 344 uint8_t opcode;
339 345 uint8_t flags;
340 346 uint8_t rsvd2[2];
341 347 uint8_t rsvd3[12];
342 348 uint32_t itt; /* Initiator Task Tag */
343 349 uint32_t ttt; /* Target Transfer Tag */
344 350 uint32_t statsn;
345 351 uint32_t expcmdsn;
346 352 uint32_t maxcmdsn;
347 353 uint32_t rttsn;
348 354 uint32_t data_offset;
349 355 uint32_t data_length;
350 356 } iscsi_rtt_hdr_t;
351 357
352 358
353 359 /* SCSI Data Hdr */
354 360 typedef struct _iscsi_data_hdr {
355 361 uint8_t opcode;
356 362 uint8_t flags;
357 363 uint8_t rsvd2[2];
358 364 uint8_t rsvd3;
359 365 uint8_t dlength[3];
360 366 uint8_t lun[8];
361 367 uint32_t itt;
362 368 uint32_t ttt;
363 369 uint32_t rsvd4;
364 370 uint32_t expstatsn;
365 371 uint32_t rsvd5;
366 372 uint32_t datasn;
367 373 uint32_t offset;
368 374 uint32_t rsvd6;
369 375 /*
370 376 * Payload
371 377 */
372 378 } iscsi_data_hdr_t;
373 379
374 380 /* SCSI Data Response Hdr */
375 381 typedef struct _iscsi_data_rsp_hdr {
376 382 uint8_t opcode;
377 383 uint8_t flags;
378 384 uint8_t rsvd2;
379 385 uint8_t cmd_status;
380 386 uint8_t hlength;
381 387 uint8_t dlength[3];
382 388 uint8_t lun[8];
383 389 uint32_t itt;
384 390 uint32_t ttt;
385 391 uint32_t statsn;
386 392 uint32_t expcmdsn;
387 393 uint32_t maxcmdsn;
388 394 uint32_t datasn;
389 395 uint32_t offset;
390 396 uint32_t residual_count;
391 397 } iscsi_data_rsp_hdr_t;
392 398
393 399 /* Data Response PDU flags */
394 400 #define ISCSI_FLAG_DATA_ACK 0x40
395 401 #define ISCSI_FLAG_DATA_OVERFLOW 0x04
396 402 #define ISCSI_FLAG_DATA_UNDERFLOW 0x02
397 403 #define ISCSI_FLAG_DATA_STATUS 0x01
398 404
399 405
400 406 /* Text Header */
401 407 typedef struct _iscsi_text_hdr {
402 408 uint8_t opcode;
403 409 uint8_t flags;
404 410 uint8_t rsvd2[2];
405 411 uint8_t hlength;
406 412 uint8_t dlength[3];
407 413 uint8_t rsvd4[8];
408 414 uint32_t itt;
409 415 uint32_t ttt;
410 416 uint32_t cmdsn;
411 417 uint32_t expstatsn;
412 418 uint8_t rsvd5[16];
413 419 /*
414 420 * Text - key=value pairs
415 421 */
416 422 } iscsi_text_hdr_t;
417 423
418 424 #define ISCSI_FLAG_TEXT_CONTINUE 0x40
419 425
420 426 /* Text Response Header */
421 427 typedef struct _iscsi_text_rsp_hdr {
422 428 uint8_t opcode;
423 429 uint8_t flags;
424 430 uint8_t rsvd2[2];
425 431 uint8_t hlength;
426 432 uint8_t dlength[3];
427 433 uint8_t rsvd4[8];
428 434 uint32_t itt;
429 435 uint32_t ttt;
430 436 uint32_t statsn;
431 437 uint32_t expcmdsn;
432 438 uint32_t maxcmdsn;
433 439 uint8_t rsvd5[12];
434 440 /*
435 441 * Text Response - key:value pairs
436 442 */
437 443 } iscsi_text_rsp_hdr_t;
438 444
439 445 #define ISCSI_ISID_LEN 6
440 446
441 447 /* Login Header */
442 448 typedef struct _iscsi_login_hdr {
443 449 uint8_t opcode;
444 450 uint8_t flags;
445 451 uint8_t max_version; /* Max. version supported */
446 452 uint8_t min_version; /* Min. version supported */
447 453 uint8_t hlength;
448 454 uint8_t dlength[3];
449 455 uint8_t isid[ISCSI_ISID_LEN]; /* Initiator Session ID */
450 456 uint16_t tsid; /* Target Session ID */
451 457 uint32_t itt; /* Initiator Task Tag */
452 458 uint16_t cid;
453 459 uint16_t rsvd3;
454 460 uint32_t cmdsn;
455 461 uint32_t expstatsn;
456 462 uint8_t rsvd5[16];
457 463 } iscsi_login_hdr_t;
458 464
459 465 /* Login PDU flags */
460 466 #define ISCSI_FLAG_LOGIN_TRANSIT 0x80
461 467 #define ISCSI_FLAG_LOGIN_CONTINUE 0x40
462 468 #define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK 0x0C /* 2 bits */
463 469 #define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK 0x03 /* 2 bits */
464 470
465 471 #define ISCSI_LOGIN_CURRENT_STAGE(flags) \
466 472 ((flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2)
467 473 #define ISCSI_LOGIN_NEXT_STAGE(flags) \
468 474 (flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK)
469 475
470 476
471 477 /* Login Response Header */
472 478 typedef struct _iscsi_login_rsp_hdr {
473 479 uint8_t opcode;
474 480 uint8_t flags;
475 481 uint8_t max_version; /* Max. version supported */
476 482 uint8_t active_version; /* Active version */
477 483 uint8_t hlength;
478 484 uint8_t dlength[3];
479 485 uint8_t isid[ISCSI_ISID_LEN]; /* Initiator Session ID */
480 486 uint16_t tsid; /* Target Session ID */
481 487 uint32_t itt; /* Initiator Task Tag */
482 488 uint32_t rsvd3;
483 489 uint32_t statsn;
484 490 uint32_t expcmdsn;
485 491 uint32_t maxcmdsn;
486 492 uint8_t status_class; /* see Login RSP ststus classes below */
487 493 uint8_t status_detail; /* see Login RSP Status details below */
488 494 uint8_t rsvd4[10];
489 495 } iscsi_login_rsp_hdr_t;
490 496
491 497 /* Login stage (phase) codes for CSG, NSG */
492 498 #define ISCSI_SECURITY_NEGOTIATION_STAGE 0
493 499 #define ISCSI_OP_PARMS_NEGOTIATION_STAGE 1
494 500 #define ISCSI_FULL_FEATURE_PHASE 3
495 501
496 502 /* Login Status response classes */
497 503 #define ISCSI_STATUS_CLASS_SUCCESS 0x00
498 504 #define ISCSI_STATUS_CLASS_REDIRECT 0x01
499 505 #define ISCSI_STATUS_CLASS_INITIATOR_ERR 0x02
500 506 #define ISCSI_STATUS_CLASS_TARGET_ERR 0x03
501 507
502 508 /* Login Status response detail codes */
503 509 /* Class-0 (Success) */
504 510 #define ISCSI_LOGIN_STATUS_ACCEPT 0x00
505 511
506 512 /* Class-1 (Redirection) */
507 513 #define ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP 0x01
508 514 #define ISCSI_LOGIN_STATUS_TGT_MOVED_PERM 0x02
509 515
510 516 /* Class-2 (Initiator Error) */
511 517 #define ISCSI_LOGIN_STATUS_INIT_ERR 0x00
512 518 #define ISCSI_LOGIN_STATUS_AUTH_FAILED 0x01
513 519 #define ISCSI_LOGIN_STATUS_TGT_FORBIDDEN 0x02
514 520 #define ISCSI_LOGIN_STATUS_TGT_NOT_FOUND 0x03
515 521 #define ISCSI_LOGIN_STATUS_TGT_REMOVED 0x04
516 522 #define ISCSI_LOGIN_STATUS_NO_VERSION 0x05
517 523 #define ISCSI_LOGIN_STATUS_ISID_ERROR 0x06
518 524 #define ISCSI_LOGIN_STATUS_MISSING_FIELDS 0x07
519 525 #define ISCSI_LOGIN_STATUS_CONN_ADD_FAILED 0x08
520 526 #define ISCSI_LOGIN_STATUS_NO_SESSION_TYPE 0x09
521 527 #define ISCSI_LOGIN_STATUS_NO_SESSION 0x0a
522 528 #define ISCSI_LOGIN_STATUS_INVALID_REQUEST 0x0b
523 529
524 530 /* Class-3 (Target Error) */
525 531 #define ISCSI_LOGIN_STATUS_TARGET_ERROR 0x00
526 532 #define ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE 0x01
527 533 #define ISCSI_LOGIN_STATUS_NO_RESOURCES 0x02
528 534
529 535 /* Logout Header */
530 536 typedef struct _iscsi_logout_hdr {
531 537 uint8_t opcode;
532 538 uint8_t flags;
533 539 uint8_t rsvd1[2];
534 540 uint8_t hlength;
535 541 uint8_t dlength[3];
536 542 uint8_t rsvd2[8];
537 543 uint32_t itt; /* Initiator Task Tag */
538 544 uint16_t cid;
539 545 uint8_t rsvd3[2];
540 546 uint32_t cmdsn;
541 547 uint32_t expstatsn;
542 548 uint8_t rsvd4[16];
543 549 } iscsi_logout_hdr_t;
544 550
545 551 /* Logout PDU flags */
546 552 #define ISCSI_FLAG_LOGOUT_REASON_MASK 0x7F
547 553
548 554 /* logout reason_code values */
549 555
550 556 #define ISCSI_LOGOUT_REASON_CLOSE_SESSION 0
551 557 #define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION 1
552 558 #define ISCSI_LOGOUT_REASON_RECOVERY 2
553 559 #define ISCSI_LOGOUT_REASON_AEN_REQUEST 3
554 560
555 561 /* Logout Response Header */
556 562 typedef struct _iscsi_logout_rsp_hdr {
557 563 uint8_t opcode;
558 564 uint8_t flags;
559 565 uint8_t response; /* see Logout response values below */
560 566 uint8_t rsvd2;
561 567 uint8_t hlength;
562 568 uint8_t dlength[3];
563 569 uint8_t rsvd3[8];
564 570 uint32_t itt; /* Initiator Task Tag */
565 571 uint32_t rsvd4;
566 572 uint32_t statsn;
567 573 uint32_t expcmdsn;
568 574 uint32_t maxcmdsn;
569 575 uint32_t rsvd5;
570 576 uint16_t t2wait;
571 577 uint16_t t2retain;
572 578 uint32_t rsvd6;
573 579 } iscsi_logout_rsp_hdr_t;
574 580
575 581 /* logout response status values */
576 582
577 583 #define ISCSI_LOGOUT_SUCCESS 0
578 584 #define ISCSI_LOGOUT_CID_NOT_FOUND 1
579 585 #define ISCSI_LOGOUT_RECOVERY_UNSUPPORTED 2
580 586 #define ISCSI_LOGOUT_CLEANUP_FAILED 3
581 587
582 588
583 589 /* SNACK Header */
584 590 typedef struct _iscsi_snack_hdr {
585 591 uint8_t opcode;
586 592 uint8_t flags;
587 593 uint8_t rsvd2[14];
588 594 uint32_t itt;
589 595 uint32_t begrun;
590 596 uint32_t runlength;
591 597 uint32_t expstatsn;
592 598 uint32_t rsvd3;
593 599 uint32_t expdatasn;
594 600 uint8_t rsvd6[8];
595 601 } iscsi_snack_hdr_t;
596 602
597 603 /* SNACK PDU flags */
598 604 #define ISCSI_FLAG_SNACK_TYPE_MASK 0x0F /* 4 bits */
599 605
600 606 /* Reject Message Header */
601 607 typedef struct _iscsi_reject_rsp_hdr {
602 608 uint8_t opcode;
603 609 uint8_t flags;
604 610 uint8_t reason;
605 611 uint8_t rsvd2;
606 612 uint8_t rsvd3;
607 613 uint8_t dlength[3];
608 614 uint8_t rsvd4[16];
609 615 uint32_t statsn;
610 616 uint32_t expcmdsn;
611 617 uint32_t maxcmdsn;
612 618 uint32_t datasn;
613 619 uint8_t rsvd5[8];
614 620 /*
615 621 * Text - Rejected hdr
616 622 */
617 623 } iscsi_reject_rsp_hdr_t;
618 624
619 625 /* Reason for Reject */
620 626 #define ISCSI_REJECT_CMD_BEFORE_LOGIN 1
621 627 #define ISCSI_REJECT_DATA_DIGEST_ERROR 2
622 628 #define ISCSI_REJECT_SNACK_REJECT 3
623 629 #define ISCSI_REJECT_PROTOCOL_ERROR 4
624 630 #define ISCSI_REJECT_CMD_NOT_SUPPORTED 5
625 631 #define ISCSI_REJECT_IMM_CMD_REJECT 6
626 632 #define ISCSI_REJECT_TASK_IN_PROGRESS 7
627 633 #define ISCSI_REJECT_INVALID_DATA_ACK 8
628 634 #define ISCSI_REJECT_INVALID_PDU_FIELD 9
629 635 #define ISCSI_REJECT_LONG_OPERATION_REJECT 10
630 636 #define ISCSI_REJECT_NEGOTIATION_RESET 11
631 637 #define ISCSI_REJECT_WAITING_FOR_LOGOUT 12
632 638
633 639 /* Defaults as defined by the iSCSI specification */
634 640 #define ISCSI_DEFAULT_IMMEDIATE_DATA TRUE
635 641 #define ISCSI_DEFAULT_INITIALR2T TRUE
636 642 #define ISCSI_DEFAULT_FIRST_BURST_LENGTH (64 * 1024) /* 64kbytes */
637 643 #define ISCSI_DEFAULT_MAX_BURST_LENGTH (256 * 1024) /* 256kbytes */
638 644 #define ISCSI_DEFAULT_DATA_PDU_IN_ORDER TRUE
639 645 #define ISCSI_DEFAULT_DATA_SEQUENCE_IN_ORDER TRUE
640 646 #define ISCSI_DEFAULT_TIME_TO_WAIT 2 /* 2 seconds */
641 647 #define ISCSI_DEFAULT_TIME_TO_RETAIN 20 /* 20 seconds */
642 648 #define ISCSI_DEFAULT_HEADER_DIGEST ISCSI_DIGEST_NONE
|
↓ open down ↓ |
551 lines elided |
↑ open up ↑ |
643 649 #define ISCSI_DEFAULT_DATA_DIGEST ISCSI_DIGEST_NONE
644 650 #define ISCSI_DEFAULT_MAX_RECV_SEG_LEN (8 * 1024)
645 651 #define ISCSI_DEFAULT_MAX_XMIT_SEG_LEN (8 * 1024)
646 652 #define ISCSI_DEFAULT_MAX_CONNECTIONS 1
647 653 #define ISCSI_DEFAULT_MAX_OUT_R2T 1
648 654 #define ISCSI_DEFAULT_ERROR_RECOVERY_LEVEL 0
649 655 #define ISCSI_DEFAULT_IFMARKER FALSE
650 656 #define ISCSI_DEFAULT_OFMARKER FALSE
651 657
652 658 /*
659 + * Minimum values from the iSCSI specification
660 + */
661 +
662 +#define ISCSI_MIN_TIME2RETAIN 0
663 +#define ISCSI_MIN_TIME2WAIT 0
664 +#define ISCSI_MIN_ERROR_RECOVERY_LEVEL 0
665 +#define ISCSI_MIN_RECV_DATA_SEGMENT_LENGTH 0x200
666 +#define ISCSI_MIN_FIRST_BURST_LENGTH 0x200
667 +#define ISCSI_MIN_MAX_BURST_LENGTH 0x200
668 +#define ISCSI_MIN_CONNECTIONS 1
669 +#define ISCSI_MIN_MAX_OUTSTANDING_R2T 1
670 +
671 +/*
653 672 * Maximum values from the iSCSI specification
654 673 */
655 674 #define ISCSI_MAX_HEADER_DIGEST 3
656 675 #define ISCSI_MAX_DATA_DIGEST 3
657 676 #define ISCSI_MAX_TIME2RETAIN 3600
658 677 #define ISCSI_MAX_TIME2WAIT 3600
659 678 #define ISCSI_MAX_ERROR_RECOVERY_LEVEL 2
660 679 #define ISCSI_MAX_FIRST_BURST_LENGTH 0xffffff
661 680 #define ISCSI_MAX_BURST_LENGTH 0xffffff
662 681 #define ISCSI_MAX_CONNECTIONS 65535
663 682 #define ISCSI_MAX_OUTSTANDING_R2T 65535
664 683 #define ISCSI_MAX_RECV_DATA_SEGMENT_LENGTH 0xffffff
665 684 #define ISCSI_MAX_TPGT_VALUE 65535 /* 16 bit numeric */
666 685
667 686 /*
668 687 * iqn and eui name prefixes and related defines
669 688 */
670 689 #define ISCSI_IQN_NAME_PREFIX "iqn"
671 690 #define ISCSI_EUI_NAME_PREFIX "eui"
672 691 #define ISCSI_EUI_NAME_LEN 20 /* eui. plus 16 octets */
673 692
674 693 #ifdef __cplusplus
675 694 }
676 695 #endif
677 696
678 697 #endif /* _ISCSI_PROTOCOL_H */
|
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX