root/include/scsi/iscsi_proto.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. iscsi_sna_lt
  2. iscsi_sna_lte
  3. iscsi_sna_gt
  4. iscsi_sna_gte

   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 open-iscsi@googlegroups.com
   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 pathes) 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 */

/* [<][>][^][v][top][bottom][index][help] */