Browse Source

[iscsi] Fix interoperability with QNAP TS-639Pro

Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
tags/v1.20.1
Danny Volkind 14 years ago
parent
commit
cd9c94851b
1 changed files with 10 additions and 3 deletions
  1. 10
    3
      src/net/tcp/iscsi.c

+ 10
- 3
src/net/tcp/iscsi.c View File

434
  *
434
  *
435
  *     HeaderDigest=None
435
  *     HeaderDigest=None
436
  *     DataDigest=None
436
  *     DataDigest=None
437
- *     MaxConnections is irrelevant; we make only one connection anyway
437
+ *     MaxConnections is irrelevant; we make only one connection anyway [4]
438
  *     InitialR2T=Yes [1]
438
  *     InitialR2T=Yes [1]
439
- *     ImmediateData is irrelevant; we never send immediate data
439
+ *     ImmediateData is irrelevant; we never send immediate data [4]
440
  *     MaxRecvDataSegmentLength=8192 (default; we don't care) [3]
440
  *     MaxRecvDataSegmentLength=8192 (default; we don't care) [3]
441
  *     MaxBurstLength=262144 (default; we don't care) [3]
441
  *     MaxBurstLength=262144 (default; we don't care) [3]
442
  *     FirstBurstLength=262144 (default; we don't care)
442
  *     FirstBurstLength=262144 (default; we don't care)
459
  * these parameters, but some targets (notably OpenSolaris)
459
  * these parameters, but some targets (notably OpenSolaris)
460
  * incorrectly assume a default value of zero, so we explicitly
460
  * incorrectly assume a default value of zero, so we explicitly
461
  * specify the default values.
461
  * specify the default values.
462
+ *
463
+ * [4] We are quite happy to use the RFC-defined default values for
464
+ * these parameters, but some targets (notably a QNAP TS-639Pro) fail
465
+ * unless they are supplied, so we explicitly specify the default
466
+ * values.
462
  */
467
  */
463
 static int iscsi_build_login_request_strings ( struct iscsi_session *iscsi,
468
 static int iscsi_build_login_request_strings ( struct iscsi_session *iscsi,
464
 					       void *data, size_t len ) {
469
 					       void *data, size_t len ) {
516
 		used += ssnprintf ( data + used, len - used,
521
 		used += ssnprintf ( data + used, len - used,
517
 				    "HeaderDigest=None%c"
522
 				    "HeaderDigest=None%c"
518
 				    "DataDigest=None%c"
523
 				    "DataDigest=None%c"
524
+				    "MaxConnections=1%c"
519
 				    "InitialR2T=Yes%c"
525
 				    "InitialR2T=Yes%c"
526
+				    "ImmediateData=No%c"
520
 				    "MaxRecvDataSegmentLength=8192%c"
527
 				    "MaxRecvDataSegmentLength=8192%c"
521
 				    "MaxBurstLength=262144%c"
528
 				    "MaxBurstLength=262144%c"
522
 				    "DefaultTime2Wait=0%c"
529
 				    "DefaultTime2Wait=0%c"
525
 				    "DataPDUInOrder=Yes%c"
532
 				    "DataPDUInOrder=Yes%c"
526
 				    "DataSequenceInOrder=Yes%c"
533
 				    "DataSequenceInOrder=Yes%c"
527
 				    "ErrorRecoveryLevel=0%c",
534
 				    "ErrorRecoveryLevel=0%c",
528
-				    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
535
+				    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
529
 	}
536
 	}
530
 
537
 
531
 	return used;
538
 	return used;

Loading…
Cancel
Save