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