Program.SetCommand.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /* Copyright (C) 2012-2016 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
  2. *
  3. * You can redistribute this program and/or modify it under the terms of
  4. * the GNU Lesser Public License as published by the Free Software Foundation,
  5. * either version 3 of the License, or (at your option) any later version.
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using DiskAccessLibrary;
  11. using ISCSI.Server;
  12. using Utilities;
  13. namespace ISCSIConsole
  14. {
  15. public partial class Program
  16. {
  17. public static void SetCommand(string[] args)
  18. {
  19. if (args.Length == 2)
  20. {
  21. KeyValuePairList<string, string> parameters = ParseParameters(args, 1);
  22. if (!VerifyParameters(parameters, "debug", "commandqueue", "MaxRecvDataSegmentLength".ToLower(), "MaxBurstLength".ToLower(), "FirstBurstLength".ToLower()))
  23. {
  24. Console.WriteLine("Invalid parameter.");
  25. return;
  26. }
  27. if (parameters.ContainsKey("debug"))
  28. {
  29. m_debug = true;
  30. }
  31. if (parameters.ContainsKey("CommandQueue".ToLower()))
  32. {
  33. int requestedCommandQueueSize = Conversion.ToInt32(parameters.ValueOf("commandqueue"), 0);
  34. if (requestedCommandQueueSize < 0)
  35. {
  36. Console.WriteLine("Invalid queue size (must be non-negative).");
  37. return;
  38. }
  39. ISCSIServer.DefaultCommandQueueSize = (uint)requestedCommandQueueSize;
  40. }
  41. if (parameters.ContainsKey("MaxRecvDataSegmentLength".ToLower()))
  42. {
  43. int requestedMaxRecvDataSegmentLength = Conversion.ToInt32(parameters.ValueOf("MaxRecvDataSegmentLength".ToLower()), 0);
  44. if (requestedMaxRecvDataSegmentLength <= 0)
  45. {
  46. Console.WriteLine("Invalid length (must be positive).");
  47. return;
  48. }
  49. ISCSIServer.DeclaredParameters.MaxRecvDataSegmentLength = requestedMaxRecvDataSegmentLength;
  50. Console.WriteLine("MaxRecvDataSegmentLength has been set to " + ISCSIServer.DesiredParameters.MaxBurstLength);
  51. }
  52. if (parameters.ContainsKey("MaxBurstLength".ToLower()))
  53. {
  54. int requestedMaxBurstLength = Conversion.ToInt32(parameters.ValueOf("MaxBurstLength".ToLower()), 0);
  55. if (requestedMaxBurstLength <= 0)
  56. {
  57. Console.WriteLine("Invalid length (must be positive).");
  58. return;
  59. }
  60. ISCSIServer.DesiredParameters.MaxBurstLength = requestedMaxBurstLength;
  61. Console.WriteLine("Offered MaxBurstLength has been set to " + ISCSIServer.DesiredParameters.MaxBurstLength);
  62. if (ISCSIServer.DesiredParameters.MaxBurstLength < ISCSIServer.DesiredParameters.FirstBurstLength)
  63. {
  64. // FirstBurstLength MUST NOT exceed MaxBurstLength
  65. ISCSIServer.DesiredParameters.FirstBurstLength = ISCSIServer.DesiredParameters.MaxBurstLength;
  66. Console.WriteLine("Offered FirstBurstLength has been set to " + ISCSIServer.DesiredParameters.FirstBurstLength);
  67. }
  68. }
  69. if (parameters.ContainsKey("FirstBurstLength".ToLower()))
  70. {
  71. int requestedFirstBurstLength = Conversion.ToInt32(parameters.ValueOf("FirstBurstLength".ToLower()), 0);
  72. if (requestedFirstBurstLength <= 0)
  73. {
  74. Console.WriteLine("Invalid length (must be positive).");
  75. return;
  76. }
  77. ISCSIServer.DesiredParameters.FirstBurstLength = requestedFirstBurstLength;
  78. Console.WriteLine("Offered FirstBurstLength has been set to " + ISCSIServer.DesiredParameters.FirstBurstLength);
  79. if (ISCSIServer.DesiredParameters.MaxBurstLength < ISCSIServer.DesiredParameters.FirstBurstLength)
  80. {
  81. // FirstBurstLength MUST NOT exceed MaxBurstLength
  82. ISCSIServer.DesiredParameters.MaxBurstLength = ISCSIServer.DesiredParameters.FirstBurstLength;
  83. Console.WriteLine("Offered MaxBurstLength has been set to " + ISCSIServer.DesiredParameters.MaxBurstLength);
  84. }
  85. }
  86. }
  87. else if (args.Length > 2)
  88. {
  89. Console.WriteLine("Too many arguments.");
  90. HelpSet();
  91. }
  92. else
  93. {
  94. HelpSet();
  95. }
  96. }
  97. public static void HelpSet()
  98. {
  99. Console.WriteLine();
  100. Console.WriteLine("SET CommandQueue=<N> - Sets the iSCSI server command queue size.");
  101. Console.WriteLine("SET MaxRecvDataSegmentLength=<N> - Declare this value to the initator.");
  102. Console.WriteLine("SET MaxBurstLength=<N> - Offer this value to the initator.");
  103. Console.WriteLine("SET FirstBurstLength=<N> - Offer this value to the initator.");
  104. Console.WriteLine();
  105. Console.WriteLine("Command queue size can be set to 0 (no queue, single command at a time).");
  106. }
  107. }
  108. }