Program.SetCommand.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using DiskAccessLibrary;
  5. using Utilities;
  6. namespace ISCSIConsole
  7. {
  8. public partial class Program
  9. {
  10. public static void SetCommand(string[] args)
  11. {
  12. if (args.Length == 2)
  13. {
  14. KeyValuePairList<string, string> parameters = ParseParameters(args, 1);
  15. if (!VerifyParameters(parameters, "debug", "commandqueue", "MaxRecvDataSegmentLength".ToLower(), "MaxBurstLength".ToLower(), "FirstBurstLength".ToLower()))
  16. {
  17. Console.WriteLine("Invalid parameter.");
  18. return;
  19. }
  20. if (parameters.ContainsKey("debug"))
  21. {
  22. m_debug = true;
  23. }
  24. if (parameters.ContainsKey("commandqueue"))
  25. {
  26. int requestedCommandQueueSize = Conversion.ToInt32(parameters.ValueOf("commandqueue"), 0);
  27. if (requestedCommandQueueSize < 0)
  28. {
  29. Console.WriteLine("Invalid queue size (must be non-negative).");
  30. return;
  31. }
  32. ISCSI.ISCSIServer.CommandQueueSize = (uint)requestedCommandQueueSize;
  33. }
  34. if (parameters.ContainsKey("MaxRecvDataSegmentLength".ToLower()))
  35. {
  36. int requestedMaxRecvDataSegmentLength = Conversion.ToInt32(parameters.ValueOf("MaxRecvDataSegmentLength".ToLower()), 0);
  37. if (requestedMaxRecvDataSegmentLength <= 0)
  38. {
  39. Console.WriteLine("Invalid length (must be positive).");
  40. return;
  41. }
  42. ISCSI.ISCSIServer.MaxRecvDataSegmentLength = (uint)requestedMaxRecvDataSegmentLength;
  43. Console.WriteLine("MaxRecvDataSegmentLength has been set to " + ISCSI.ISCSIServer.OfferedMaxBurstLength);
  44. }
  45. if (parameters.ContainsKey("MaxBurstLength".ToLower()))
  46. {
  47. int requestedMaxBurstLength = Conversion.ToInt32(parameters.ValueOf("MaxBurstLength".ToLower()), 0);
  48. if (requestedMaxBurstLength <= 0)
  49. {
  50. Console.WriteLine("Invalid length (must be positive).");
  51. return;
  52. }
  53. ISCSI.ISCSIServer.OfferedMaxBurstLength = (uint)requestedMaxBurstLength;
  54. Console.WriteLine("Offered MaxBurstLength has been set to " + ISCSI.ISCSIServer.OfferedMaxBurstLength);
  55. if (ISCSI.ISCSIServer.OfferedMaxBurstLength < ISCSI.ISCSIServer.OfferedFirstBurstLength)
  56. {
  57. // FirstBurstLength MUST NOT exceed MaxBurstLength
  58. ISCSI.ISCSIServer.OfferedFirstBurstLength = ISCSI.ISCSIServer.OfferedMaxBurstLength;
  59. Console.WriteLine("Offered FirstBurstLength has been set to " + ISCSI.ISCSIServer.OfferedFirstBurstLength);
  60. }
  61. }
  62. if (parameters.ContainsKey("FirstBurstLength".ToLower()))
  63. {
  64. int requestedFirstBurstLength = Conversion.ToInt32(parameters.ValueOf("FirstBurstLength".ToLower()), 0);
  65. if (requestedFirstBurstLength <= 0)
  66. {
  67. Console.WriteLine("Invalid length (must be positive).");
  68. return;
  69. }
  70. ISCSI.ISCSIServer.OfferedFirstBurstLength = (uint)requestedFirstBurstLength;
  71. Console.WriteLine("Offered FirstBurstLength has been set to " + ISCSI.ISCSIServer.OfferedFirstBurstLength);
  72. if (ISCSI.ISCSIServer.OfferedMaxBurstLength < ISCSI.ISCSIServer.OfferedFirstBurstLength)
  73. {
  74. // FirstBurstLength MUST NOT exceed MaxBurstLength
  75. ISCSI.ISCSIServer.OfferedMaxBurstLength = ISCSI.ISCSIServer.OfferedFirstBurstLength;
  76. Console.WriteLine("Offered MaxBurstLength has been set to " + ISCSI.ISCSIServer.OfferedMaxBurstLength);
  77. }
  78. }
  79. }
  80. else if (args.Length > 2)
  81. {
  82. Console.WriteLine("Too many arguments.");
  83. HelpSet();
  84. }
  85. else
  86. {
  87. HelpSet();
  88. }
  89. }
  90. public static void HelpSet()
  91. {
  92. Console.WriteLine();
  93. Console.WriteLine("SET CommandQueue=<N> - Sets the iSCSI server command queue size.");
  94. Console.WriteLine("SET MaxRecvDataSegmentLength=<N> - Declare this value to the initator.");
  95. Console.WriteLine("SET MaxBurstLength=<N> - Offer this value to the initator.");
  96. Console.WriteLine("SET FirstBurstLength=<N> - Offer this value to the initator.");
  97. Console.WriteLine();
  98. Console.WriteLine("Command queue size can be set to 0 (no queue, single command at a time).");
  99. }
  100. }
  101. }