From e7eeba1153d257a244033214e3542bec968df3c5 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Thu, 5 Feb 2026 18:46:53 +0530 Subject: [PATCH 01/13] Refactoring Networking Workload --- .../NetworkingWorkloadExecutor.cs | 2 ++ .../NetworkingWorkload/NetworkingWorkloadState.cs | 13 +++++++++++++ .../VirtualClientComponent.cs | 5 +++++ 3 files changed, 20 insertions(+) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs index b642730dd5..f773cf881c 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs @@ -815,6 +815,7 @@ protected void OnInstructionsReceived(object sender, JObject instructions) this.ProfilingScenario = serverInstructions.ProfilingScenario; this.ProfilingPeriod = serverInstructions.ProfilingPeriod; this.ProfilingWarmUpPeriod = serverInstructions.ProfilingWarmUpPeriod; + this.ProfileIteration = serverInstructions.ProfileIteration; this.NoSyncEnabled = serverInstructions.NoSyncEnabled; if (serverInstructions.Metadata?.Any() == true) @@ -984,6 +985,7 @@ await this.ClientExecutionRetryPolicy.ExecuteAsync(async () => this.ProfilingScenario, this.ProfilingPeriod.ToString(), this.ProfilingWarmUpPeriod.ToString(), + this.ProfileIteration, this.NoSyncEnabled, requestId); diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadState.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadState.cs index 955835d76f..7d3aba4f22 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadState.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadState.cs @@ -134,6 +134,7 @@ public NetworkingWorkloadState( string profilingScenario = null, string profilingPeriod = null, string profilingWarmUpPeriod = null, + int? profileIteration = null, bool? noSyncEnabled = null, Guid? clientRequestId = null, IDictionary metadata = null) @@ -169,6 +170,7 @@ public NetworkingWorkloadState( this.Properties[nameof(this.ProfilingScenario)] = profilingScenario; this.Properties[nameof(this.ProfilingPeriod)] = profilingPeriod; this.Properties[nameof(this.ProfilingWarmUpPeriod)] = profilingWarmUpPeriod; + this.Properties[nameof(this.ProfileIteration)] = profileIteration; this.Properties[nameof(this.NoSyncEnabled)] = noSyncEnabled; this.ClientRequestId = clientRequestId; @@ -487,6 +489,17 @@ protected set } } + /// + /// Virtual Client Iteration at which the current profile is executing. + /// + public int ProfileIteration + { + get + { + return this.Properties.GetValue(nameof(this.ProfileIteration), 0); + } + } + /// /// Differentiator for which to convey the number of interrupts (Parameter for Tools: NTttcp) /// diff --git a/src/VirtualClient/VirtualClient.Contracts/VirtualClientComponent.cs b/src/VirtualClient/VirtualClient.Contracts/VirtualClientComponent.cs index 1e6c25f2d7..308ac8f994 100644 --- a/src/VirtualClient/VirtualClient.Contracts/VirtualClientComponent.cs +++ b/src/VirtualClient/VirtualClient.Contracts/VirtualClientComponent.cs @@ -417,6 +417,11 @@ public int ProfileIteration this.Parameters.TryGetValue(nameof(this.ProfileIteration), out IConvertible profileIteration); return profileIteration != null ? (int)Convert.ChangeType(profileIteration, typeof(int)) : 0; } + + protected set + { + this.Parameters[nameof(this.ProfileIteration)] = value; + } } /// From ac92c391424ca46bfa2117ec0c4930e8d5944975 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Mon, 9 Feb 2026 12:19:42 +0530 Subject: [PATCH 02/13] Adding necessary changes for unit tests --- .../NTttcp/NTttcpExecutor.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs index 787a0225da..a920faf650 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs @@ -200,6 +200,50 @@ public bool? NoSyncEnabled } } + /// + /// Commandline for linux client side. + /// + public string CommandLineLinuxClient + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + } + } + + /// + /// Commandline for linux server side. + /// + public string CommandLineLinuxServer + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + } + } + + /// + /// Commandline for windows client side. + /// + public string CommandLineWindowsClient + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + } + } + + /// + /// Commandline for windows server side. + /// + public string CommandLineWindowsServer + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer)); + } + } + /// /// The retry policy to apply to the startup of the NTttcp workload to handle /// transient issues. From e9d1e39ff92b780b851b3dd0400c50034701c9cf Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Tue, 10 Feb 2026 22:11:25 +0530 Subject: [PATCH 03/13] Adding new command line initialization function --- .../Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs index a920faf650..fc6789a06f 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs @@ -484,10 +484,10 @@ await this.SystemManagement.FileSystem.File.DeleteAsync(this.ResultsPath) } } - private string GetWindowsSpecificCommandLine() + private void IntializeWindowsServerCommandline() { - string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; - string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + //string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + //string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; return $"{(this.IsInClientRole ? "-s" : "-r")} " + $"-m {this.ThreadCount},*,{serverIPAddress} " + $"-wu {NTttcpExecutor.DefaultWarmupTime.TotalSeconds} " + From dfdae1506bcb2f1af6cfa7e681a611cdbaa5bce5 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Mon, 16 Feb 2026 11:06:14 +0530 Subject: [PATCH 04/13] Adding CPS command line --- .../CPS/CPSClientExecutor.cs | 76 +++++ .../NTttcp/NTttcpExecutor.cs | 304 +++++++++++++++++- .../NetworkingWorkloadToolExecutor.cs | 64 ++++ 3 files changed, 429 insertions(+), 15 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs index 1aa5dff19f..689c52a64c 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs @@ -49,5 +49,81 @@ protected override string GetCommandLineArguments() $"{((this.DelayTime != TimeSpan.Zero) ? $"-ds {this.DelayTime.TotalSeconds}" : string.Empty)} " + $"{this.AdditionalParams}".Trim(); } + + private void InitializeWindowsClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + // Ensure base string isn't null. + this.CommandLineWindowsClient ??= string.Empty; + + // Normalize: keep a trailing space so appends don't glue together. + if (this.CommandLineWindowsClient.Length > 0 && !char.IsWhiteSpace(this.CommandLineWindowsClient[^1])) + { + this.CommandLineWindowsClient += " "; + } + + // -c (client mode) + if (!this.CommandLineWindowsClient.Contains("-c", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsClient += "-c "; + } + + // -r {Connections} + // Your reference includes "-c -r {Connections}" + if (!this.CommandLineWindowsClient.Contains("-r", StringComparison.OrdinalIgnoreCase) && this.Connections != null) + { + this.CommandLineWindowsClient += $"-r {this.Connections} "; + } + + // Endpoint tuple: + // {clientIPAddress},0,{serverIPAddress},{Port},{ConnectionsPerThread},{MaxPendingRequestsPerThread},{ConnectionDuration},{DataTransferMode} + // Add it only if we don't already see the server IP (good heuristic to avoid duplication). + if (!this.CommandLineWindowsClient.Contains(serverIPAddress, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsClient += + $"{clientIPAddress},0,{serverIPAddress},{this.Port},{this.ConnectionsPerThread},{this.MaxPendingRequestsPerThread},{this.ConnectionDuration},{this.DataTransferMode} "; + } + + // -i {DisplayInterval} + if (!this.CommandLineWindowsClient.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.DisplayInterval != null) + { + this.CommandLineWindowsClient += $"-i {this.DisplayInterval} "; + } + + // -wt {WarmupTime.TotalSeconds} + if (!this.CommandLineWindowsClient.Contains("-wt", StringComparison.OrdinalIgnoreCase) && this.WarmupTime != null) + { + this.CommandLineWindowsClient += $"-wt {this.WarmupTime.TotalSeconds} "; + } + + // -t {TestDuration.TotalSeconds} + if (!this.CommandLineWindowsClient.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineWindowsClient += $"-t {this.TestDuration.TotalSeconds} "; + } + + // Optional: -ds {DelayTime.TotalSeconds} only if DelayTime != 0 + if (!this.CommandLineWindowsClient.Contains("-ds", StringComparison.OrdinalIgnoreCase) && + this.DelayTime != TimeSpan.Zero) + { + this.CommandLineWindowsClient += $"-ds {this.DelayTime.TotalSeconds} "; + } + + // Additional params (append once) + if (!string.IsNullOrWhiteSpace(this.AdditionalParams)) + { + // Optional: prevent double-appending if already present. + // You can remove this block if AdditionalParams is expected to be dynamic. + if (!this.CommandLineWindowsClient.Contains(this.AdditionalParams, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsClient += $"{this.AdditionalParams} "; + } + } + + this.CommandLineWindowsClient = this.CommandLineWindowsClient.Trim(); + } + } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs index fc6789a06f..9fda844c47 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs @@ -209,6 +209,11 @@ public string CommandLineLinuxClient { return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); } + + set + { + this.Parameters[nameof(this.CommandLineLinuxClient)] = value; + } } /// @@ -218,7 +223,12 @@ public string CommandLineLinuxServer { get { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + return this.Parameters.GetValue(nameof(this.CommandLineLinuxServer)); + } + + set + { + this.Parameters[nameof(this.CommandLineLinuxServer)] = value; } } @@ -229,7 +239,12 @@ public string CommandLineWindowsClient { get { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + return this.Parameters.GetValue(nameof(this.CommandLineWindowsClient)); + } + + set + { + this.Parameters[nameof(this.CommandLineWindowsClient)] = value; } } @@ -242,6 +257,11 @@ public string CommandLineWindowsServer { return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer)); } + + set + { + this.Parameters[nameof(this.CommandLineWindowsServer)] = value; + } } /// @@ -486,19 +506,273 @@ await this.SystemManagement.FileSystem.File.DeleteAsync(this.ResultsPath) private void IntializeWindowsServerCommandline() { - //string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; - //string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - return $"{(this.IsInClientRole ? "-s" : "-r")} " + - $"-m {this.ThreadCount},*,{serverIPAddress} " + - $"-wu {NTttcpExecutor.DefaultWarmupTime.TotalSeconds} " + - $"-cd {NTttcpExecutor.DefaultCooldownTime.TotalSeconds} " + - $"-t {this.TestDuration.TotalSeconds} " + - $"-l {(this.IsInClientRole ? $"{this.BufferSizeClient}" : $"{this.BufferSizeServer}")} " + - $"-p {this.Port} " + - $"-xml {this.ResultsPath} " + - $"{(this.Protocol.ToLowerInvariant() == "udp" ? "-u" : string.Empty)} " + - $"{(this.NoSyncEnabled == true ? "-ns" : string.Empty)} " + - $"{(this.IsInClientRole ? $"-nic {clientIPAddress}" : string.Empty)}".Trim(); + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + if (!this.CommandLineWindowsServer.Contains("-r") && !this.CommandLineWindowsServer.Contains("-s")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + " -r"; + } + + if (!this.CommandLineWindowsServer.Contains("-t") && this.TestDuration != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineWindowsServer.Contains("-l") && this.BufferSizeServer != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -l {this.BufferSizeServer}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -p {this.Port}"; + } + + if (!this.CommandLineWindowsServer.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineWindowsServer.Contains("-u") && this.Protocol != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-m")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"-m {this.ThreadCount},*,{serverIPAddress} "; + } + } + + private void IntializeWindowsClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + if (!this.CommandLineWindowsClient.Contains("-r") && !this.CommandLineWindowsClient.Contains("-s")) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + " -s"; + } + + if (!this.CommandLineWindowsClient.Contains("-t") && this.TestDuration != null) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineWindowsClient.Contains("-l") && this.BufferSizeServer != null) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $" -l {this.BufferSizeClient}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $" -p {this.Port}"; + } + + if (!this.CommandLineWindowsClient.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineWindowsClient.Contains("-u") && this.Protocol != null) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineWindowsClient.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineWindowsClient.Contains("-m")) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $"-m {this.ThreadCount},*,{serverIPAddress} "; + } + + if (!this.CommandLineWindowsClient.Contains("-nic")) + { + this.CommandLineWindowsClient = this.CommandLineWindowsClient + $"-nic {clientIPAddress}"; + } + } + + private void IntializeWindowsServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + if (!this.CommandLineWindowsServer.Contains("-r") && !this.CommandLineWindowsServer.Contains("-s")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + " -r"; + } + + if (!this.CommandLineWindowsServer.Contains("-t") && this.TestDuration != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineWindowsServer.Contains("-l") && this.BufferSizeServer != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -l {this.BufferSizeServer}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -p {this.Port}"; + } + + if (!this.CommandLineWindowsServer.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineWindowsServer.Contains("-u") && this.Protocol != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-m")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"-m {this.ThreadCount},*,{serverIPAddress} "; + } + } + + private void IntializeLinuxClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + if (!this.CommandLineLinuxClient.Contains("-r") && !this.CommandLineLinuxClient.Contains("-s")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + " -s"; + } + + if (!this.CommandLineLinuxClient.Contains("-t") && this.TestDuration != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineLinuxClient.Contains("-l") && this.BufferSizeClient != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $" -l {this.BufferSizeClient}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $" -p {this.Port}"; + } + + if (!this.CommandLineLinuxClient.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineLinuxClient.Contains("-u") && this.Protocol != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineLinuxClient.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineLinuxClient.Contains("-m")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $" -m {this.ThreadCount},*,{serverIPAddress} "; + } + + if (!this.CommandLineLinuxClient.Contains("-L")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(this.SenderLastClient == true ? " -L" : string.Empty)} "; + } + + if (!this.CommandLineLinuxClient.Contains("-n")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(( this.ThreadsPerServerPort != null) ? $" -n {this.ThreadsPerServerPort}" : string.Empty)} "; + } + + if (!this.CommandLineLinuxClient.Contains("-l")) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(( this.ConnectionsPerThread != null) ? $" -l {this.ConnectionsPerThread}" : string.Empty)} " + } + + if (!this.CommandLineLinuxClient.Contains("-N") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(this.NoSyncEnabled == true ? "-N" : string.Empty)} "; + } + + if (!this.CommandLineLinuxClient.Contains("--show-dev-interrupts") && this.DevInterruptsDifferentiator != null) + { + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{((this.DevInterruptsDifferentiator != null) ? $"--show-dev-interrupts {this.DevInterruptsDifferentiator}" : string.Empty)}".Trim(); + } + } + + private void IntializeLinuxServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + if (!this.CommandLineLinuxClient.Contains("-r") && !this.CommandLineLinuxServer.Contains("-s")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + " -r"; + } + + if (!this.CommandLineLinuxServer.Contains("-t") && this.TestDuration != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineLinuxServer.Contains("-l") && this.BufferSizeClient != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -l {this.BufferSizeServer}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -p {this.Port}"; + } + + if (!this.CommandLineLinuxServer.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineLinuxServer.Contains("-u") && this.Protocol != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-m")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -m {this.ThreadCount},*,{serverIPAddress} "; + } + + if (!this.CommandLineLinuxServer.Contains("-M")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{((this.ReceiverMultiClientMode == true) ? " -M" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-N") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.NoSyncEnabled == true ? "-N" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("--show-dev-interrupts") && this.DevInterruptsDifferentiator != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{((this.DevInterruptsDifferentiator != null) ? $"--show-dev-interrupts {this.DevInterruptsDifferentiator}" : string.Empty)}".Trim(); + } } private string GetLinuxSpecificCommandLine() diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs index 2a92ce6a44..d1cdd10789 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs @@ -42,6 +42,70 @@ protected NetworkingWorkloadToolExecutor(IServiceCollection dependencies, IDicti { } + /// + /// Commandline for linux client side. + /// + public string CommandLineLinuxClient + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + } + + set + { + this.Parameters[nameof(this.CommandLineLinuxClient)] = value; + } + } + + /// + /// Commandline for linux server side. + /// + public string CommandLineLinuxServer + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineLinuxServer)); + } + + set + { + this.Parameters[nameof(this.CommandLineLinuxServer)] = value; + } + } + + /// + /// Commandline for windows client side. + /// + public string CommandLineWindowsClient + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineWindowsClient)); + } + + set + { + this.Parameters[nameof(this.CommandLineWindowsClient)] = value; + } + } + + /// + /// Commandline for windows server side. + /// + public string CommandLineWindowsServer + { + get + { + return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer)); + } + + set + { + this.Parameters[nameof(this.CommandLineWindowsServer)] = value; + } + } + /// /// Name of the scenario. /// From d40595701ded69df7d1ebc9e389d805604c91824 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Thu, 19 Feb 2026 15:56:11 +0530 Subject: [PATCH 05/13] Adding Commandline references --- .../NetworkingWorkloadExecutorTests.cs | 3 + .../CPS/CPSClientExecutor.cs | 6 +- .../NTttcp/NTttcpExecutor.cs | 116 +----------------- 3 files changed, 10 insertions(+), 115 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/Network/NetworkingWorkloadExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/Network/NetworkingWorkloadExecutorTests.cs index f0388f4ccb..205f03dad3 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/Network/NetworkingWorkloadExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/Network/NetworkingWorkloadExecutorTests.cs @@ -90,6 +90,7 @@ public void NetworkingWorkloadStateInstancesAreJsonSerializable(bool? noSyncEnab "Profiling_Scenario_1", "00:00:30", "00:00:05", + 1, noSyncEnabled, Guid.NewGuid()); @@ -126,6 +127,7 @@ public void NetworkingWorkloadStateInstancesAreJsonSerializable_2() "Profiling_Scenario_1", "00:00:30", "00:00:05", + 1, false, Guid.NewGuid(), // @@ -174,6 +176,7 @@ public void NetworkingWorkloadStateInstancesAreJsonSerializable_3() "Profiling_Scenario_1", "00:00:30", "00:00:05", + 1, false, Guid.NewGuid(), // diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs index 689c52a64c..c7869e7567 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs @@ -67,12 +67,12 @@ private void InitializeWindowsClientCommandline() // -c (client mode) if (!this.CommandLineWindowsClient.Contains("-c", StringComparison.OrdinalIgnoreCase)) { - this.CommandLineWindowsClient += "-c "; + this.CommandLineWindowsClient += " -c"; } // -r {Connections} // Your reference includes "-c -r {Connections}" - if (!this.CommandLineWindowsClient.Contains("-r", StringComparison.OrdinalIgnoreCase) && this.Connections != null) + if (!this.CommandLineWindowsClient.Contains("-r", StringComparison.OrdinalIgnoreCase)) { this.CommandLineWindowsClient += $"-r {this.Connections} "; } @@ -87,7 +87,7 @@ private void InitializeWindowsClientCommandline() } // -i {DisplayInterval} - if (!this.CommandLineWindowsClient.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.DisplayInterval != null) + if (!this.CommandLineWindowsClient.Contains("-i", StringComparison.OrdinalIgnoreCase)) { this.CommandLineWindowsClient += $"-i {this.DisplayInterval} "; } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs index 9fda844c47..f046720ec2 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs @@ -200,70 +200,6 @@ public bool? NoSyncEnabled } } - /// - /// Commandline for linux client side. - /// - public string CommandLineLinuxClient - { - get - { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); - } - - set - { - this.Parameters[nameof(this.CommandLineLinuxClient)] = value; - } - } - - /// - /// Commandline for linux server side. - /// - public string CommandLineLinuxServer - { - get - { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxServer)); - } - - set - { - this.Parameters[nameof(this.CommandLineLinuxServer)] = value; - } - } - - /// - /// Commandline for windows client side. - /// - public string CommandLineWindowsClient - { - get - { - return this.Parameters.GetValue(nameof(this.CommandLineWindowsClient)); - } - - set - { - this.Parameters[nameof(this.CommandLineWindowsClient)] = value; - } - } - - /// - /// Commandline for windows server side. - /// - public string CommandLineWindowsServer - { - get - { - return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer)); - } - - set - { - this.Parameters[nameof(this.CommandLineWindowsServer)] = value; - } - } - /// /// The retry policy to apply to the startup of the NTttcp workload to handle /// transient issues. @@ -322,9 +258,9 @@ protected override Task InitializeAsync(EventContext telemetryContext, Cancellat protected override string GetCommandLineArguments() { string command = null; - if (this.Platform == PlatformID.Win32NT) + if (this.Platform == PlatformID.Win32NT && this.IsInClientRole) { - command = this.GetWindowsSpecificCommandLine(); + command = this.CommandLineWindowsClient; } else if (this.Platform == PlatformID.Unix) { @@ -599,50 +535,6 @@ private void IntializeWindowsClientCommandline() } } - private void IntializeWindowsServerCommandline() - { - string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - if (!this.CommandLineWindowsServer.Contains("-r") && !this.CommandLineWindowsServer.Contains("-s")) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + " -r"; - } - - if (!this.CommandLineWindowsServer.Contains("-t") && this.TestDuration != null) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -t {this.TestDuration.TotalSeconds}"; - } - - if (!this.CommandLineWindowsServer.Contains("-l") && this.BufferSizeServer != null) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -l {this.BufferSizeServer}"; - } - - if (!this.CommandLineWindowsServer.Contains("-p")) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -p {this.Port}"; - } - - if (!this.CommandLineWindowsServer.Contains("-xml") && this.ResultsPath != null) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -xml {this.ResultsPath}"; - } - - if (!this.CommandLineWindowsServer.Contains("-u") && this.Protocol != null) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; - } - - if (!this.CommandLineWindowsServer.Contains("-ns") && this.NoSyncEnabled != null) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; - } - - if (!this.CommandLineWindowsServer.Contains("-m")) - { - this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"-m {this.ThreadCount},*,{serverIPAddress} "; - } - } - private void IntializeLinuxClientCommandline() { string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; @@ -695,12 +587,12 @@ private void IntializeLinuxClientCommandline() if (!this.CommandLineLinuxClient.Contains("-n")) { - this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(( this.ThreadsPerServerPort != null) ? $" -n {this.ThreadsPerServerPort}" : string.Empty)} "; + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{((this.ThreadsPerServerPort != null) ? $" -n {this.ThreadsPerServerPort}" : string.Empty)} "; } if (!this.CommandLineLinuxClient.Contains("-l")) { - this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{(( this.ConnectionsPerThread != null) ? $" -l {this.ConnectionsPerThread}" : string.Empty)} " + this.CommandLineLinuxClient = this.CommandLineLinuxClient + $"{((this.ConnectionsPerThread != null) ? $" -l {this.ConnectionsPerThread}" : string.Empty)} "; } if (!this.CommandLineLinuxClient.Contains("-N") && this.NoSyncEnabled != null) From 083ec0ddc56f4e4afcb096584807612781424fdb Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Thu, 19 Feb 2026 19:19:44 +0530 Subject: [PATCH 06/13] Adding updated commandline --- .../NetworkingWorkloadToolExecutor.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs index d1cdd10789..5c8d95f967 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs @@ -400,7 +400,18 @@ protected virtual bool IsProcessRunning(string processName) /// Produces powershell script parameters using the workload parameters provided. /// /// Powershell script parameters as a string. - protected abstract string GetCommandLineArguments(); + protected virtual string GetCommandLineArguments() + { + string command = string.Empty; + if (this.Platform == PlatformID.Win32NT && this.IsInClientRole) + { + command = this.CommandLineWindowsClient; + } + else if (this.Platform == PlatformID.Win32NT && !this.IsInClientRole) + { + command = this.CommandLineWindowsServer; + } + } /// /// Returns true if results are found in the results file within the polling/timeout From 7c4dc89edcdc879b12e710bd558c0b54f8b38ee2 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Fri, 20 Feb 2026 11:19:28 +0530 Subject: [PATCH 07/13] Adding getCommand function --- .../NetworkingWorkloadToolExecutor.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs index 5c8d95f967..5feb8ad16e 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs @@ -403,6 +403,7 @@ protected virtual bool IsProcessRunning(string processName) protected virtual string GetCommandLineArguments() { string command = string.Empty; + if (this.Platform == PlatformID.Win32NT && this.IsInClientRole) { command = this.CommandLineWindowsClient; @@ -411,6 +412,16 @@ protected virtual string GetCommandLineArguments() { command = this.CommandLineWindowsServer; } + else if (this.Platform == PlatformID.Unix && this.IsInClientRole) + { + command = this.CommandLineLinuxClient; + } + else if (this.Platform == PlatformID.Unix && !this.IsInClientRole) + { + command = this.CommandLineLinuxServer; + } + + return command; } /// From d791984191d9703e4158089c7c1ed0d1c9ed3a4f Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Sat, 21 Feb 2026 18:03:52 +0530 Subject: [PATCH 08/13] Adding command line --- .../CPS/CPSClientExecutor.cs | 91 +++++-- .../CPS/CPSServerExecutor.cs | 130 ++++++++- .../Latte/LatteClientExecutor.cs | 34 +++ .../Latte/LatteServerExecutor.cs | 31 ++- .../NTttcp/NTttcpClientExecutor.cs | 122 +++++++++ .../NTttcp/NTttcpExecutor.cs | 248 ------------------ .../SockPerf/SockPerfClientExecutor.cs | 85 ++++-- .../SockPerf/SockPerfServerExecutor.cs | 39 +++ 8 files changed, 483 insertions(+), 297 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs index c7869e7567..97dfcdbc73 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSClientExecutor.cs @@ -33,21 +33,8 @@ public CPSClientExecutor(VirtualClientComponent component) public CPSClientExecutor(IServiceCollection dependencies, IDictionary parameters) : base(dependencies, parameters) { - } - - /// - /// Returns the CPS client-side command line arguments. - /// - protected override string GetCommandLineArguments() - { - string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; - string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - - return $"-c -r {this.Connections} " + - $"{clientIPAddress},0,{serverIPAddress},{this.Port},{this.ConnectionsPerThread},{this.MaxPendingRequestsPerThread},{this.ConnectionDuration},{this.DataTransferMode} " + - $"-i {this.DisplayInterval} -wt {this.WarmupTime.TotalSeconds} -t {this.TestDuration.TotalSeconds} " + - $"{((this.DelayTime != TimeSpan.Zero) ? $"-ds {this.DelayTime.TotalSeconds}" : string.Empty)} " + - $"{this.AdditionalParams}".Trim(); + this.InitializeWindowsClientCommandline(); + this.InitializeLinuxClientCommandline(); } private void InitializeWindowsClientCommandline() @@ -125,5 +112,79 @@ private void InitializeWindowsClientCommandline() this.CommandLineWindowsClient = this.CommandLineWindowsClient.Trim(); } + private void InitializeLinuxClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + // Ensure base string isn't null. + this.CommandLineLinuxClient ??= string.Empty; + + // Normalize: keep a trailing space so appends don't glue together. + if (this.CommandLineLinuxClient.Length > 0 && !char.IsWhiteSpace(this.CommandLineLinuxClient[^1])) + { + this.CommandLineLinuxClient += " "; + } + + // -c (client mode) + if (!this.CommandLineLinuxClient.Contains("-c", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += " -c"; + } + + // -r {Connections} + // Your reference includes "-c -r {Connections}" + if (!this.CommandLineLinuxClient.Contains("-r", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $"-r {this.Connections} "; + } + + // Endpoint tuple: + // {clientIPAddress},0,{serverIPAddress},{Port},{ConnectionsPerThread},{MaxPendingRequestsPerThread},{ConnectionDuration},{DataTransferMode} + // Add it only if we don't already see the server IP (good heuristic to avoid duplication). + if (!this.CommandLineLinuxClient.Contains(serverIPAddress, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += + $"{clientIPAddress},0,{serverIPAddress},{this.Port},{this.ConnectionsPerThread},{this.MaxPendingRequestsPerThread},{this.ConnectionDuration},{this.DataTransferMode} "; + } + + // -i {DisplayInterval} + if (!this.CommandLineLinuxClient.Contains("-i", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $"-i {this.DisplayInterval} "; + } + + // -wt {WarmupTime.TotalSeconds} + if (!this.CommandLineLinuxClient.Contains("-wt", StringComparison.OrdinalIgnoreCase) && this.WarmupTime != null) + { + this.CommandLineLinuxClient += $"-wt {this.WarmupTime.TotalSeconds} "; + } + + // -t {TestDuration.TotalSeconds} + if (!this.CommandLineLinuxClient.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineLinuxClient += $"-t {this.TestDuration.TotalSeconds} "; + } + + // Optional: -ds {DelayTime.TotalSeconds} only if DelayTime != 0 + if (!this.CommandLineLinuxClient.Contains("-ds", StringComparison.OrdinalIgnoreCase) && + this.DelayTime != TimeSpan.Zero) + { + this.CommandLineLinuxClient += $"-ds {this.DelayTime.TotalSeconds} "; + } + + // Additional params (append once) + if (!string.IsNullOrWhiteSpace(this.AdditionalParams)) + { + // Optional: prevent double-appending if already present. + // You can remove this block if AdditionalParams is expected to be dynamic. + if (!this.CommandLineLinuxClient.Contains(this.AdditionalParams, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $"{this.AdditionalParams} "; + } + } + + this.CommandLineLinuxClient = this.CommandLineLinuxClient.Trim(); + } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSServerExecutor.cs index 8c5a9604cd..8f86bfd185 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/CPS/CPSServerExecutor.cs @@ -35,14 +35,132 @@ public CPSServerExecutor(IServiceCollection dependencies, IDictionary - /// Returns the CPS client-side command line arguments. - /// - protected override string GetCommandLineArguments() + private void InitializeLinuxServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + // Ensure base string isn't null. + this.CommandLineLinuxServer ??= string.Empty; + + // Normalize: keep a trailing space so appends don't glue together. + if (this.CommandLineLinuxServer.Length > 0 && !char.IsWhiteSpace(this.CommandLineLinuxServer[^1])) + { + this.CommandLineLinuxServer += " "; + } + + // -c (client mode) + if (!this.CommandLineLinuxServer.Contains("-s", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += " -s"; + } + + // -r {Connections} + // Your reference includes "-c -r {Connections}" + if (!this.CommandLineLinuxServer.Contains("-r", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += $" -r {this.Connections} "; + } + + // Endpoint tuple: + // {clientIPAddress},0,{serverIPAddress},{Port},{ConnectionsPerThread},{MaxPendingRequestsPerThread},{ConnectionDuration},{DataTransferMode} + // Add it only if we don't already see the server IP (good heuristic to avoid duplication). + if (!this.CommandLineLinuxServer.Contains(serverIPAddress, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += + $"{serverIPAddress},{this.Port} "; + } + + // -i {DisplayInterval} + if (!this.CommandLineLinuxServer.Contains("-i", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += $" -i {this.DisplayInterval} "; + } + + // -wt {WarmupTime.TotalSeconds} + if (!this.CommandLineLinuxServer.Contains("-wt", StringComparison.OrdinalIgnoreCase) && this.WarmupTime != null) + { + this.CommandLineLinuxServer += $" -wt {this.WarmupTime.TotalSeconds} "; + } + + // -t {TestDuration.TotalSeconds} + if (!this.CommandLineLinuxServer.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineLinuxServer += $" -t {this.TestDuration.TotalSeconds} "; + } + + // Optional: -ds {DelayTime.TotalSeconds} only if DelayTime != 0 + if (!this.CommandLineLinuxServer.Contains("-ds", StringComparison.OrdinalIgnoreCase) && + this.DelayTime != TimeSpan.Zero) + { + this.CommandLineLinuxServer += $" -ds {this.DelayTime.TotalSeconds} "; + } + + this.CommandLineLinuxServer = this.CommandLineLinuxServer.Trim(); + } + + private void InitializeWindowsServerCommandline() { string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - return $"-s -r {this.Connections} {serverIPAddress},{this.Port} -i {this.DisplayInterval} -wt {this.WarmupTime.TotalSeconds} -t {this.TestDuration.TotalSeconds} " + - $"{((this.DelayTime != TimeSpan.Zero) ? $"-ds {this.DelayTime.TotalSeconds}" : string.Empty)} "; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + // Ensure base string isn't null. + this.CommandLineWindowsServer ??= string.Empty; + + // Normalize: keep a trailing space so appends don't glue together. + if (this.CommandLineWindowsServer.Length > 0 && !char.IsWhiteSpace(this.CommandLineWindowsServer[^1])) + { + this.CommandLineWindowsServer += " "; + } + + // -c (client mode) + if (!this.CommandLineWindowsServer.Contains("-s", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsServer += " -s"; + } + + // -r {Connections} + // Your reference includes "-c -r {Connections}" + if (!this.CommandLineWindowsServer.Contains("-r", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsServer += $" -r {this.Connections} "; + } + + // Endpoint tuple: + // {clientIPAddress},0,{serverIPAddress},{Port},{ConnectionsPerThread},{MaxPendingRequestsPerThread},{ConnectionDuration},{DataTransferMode} + // Add it only if we don't already see the server IP (good heuristic to avoid duplication). + if (!this.CommandLineWindowsServer.Contains(serverIPAddress, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsServer += + $"{serverIPAddress},{this.Port} "; + } + + // -i {DisplayInterval} + if (!this.CommandLineWindowsServer.Contains("-i", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsServer += $" -i {this.DisplayInterval} "; + } + + // -wt {WarmupTime.TotalSeconds} + if (!this.CommandLineWindowsServer.Contains("-wt", StringComparison.OrdinalIgnoreCase) && this.WarmupTime != null) + { + this.CommandLineWindowsServer += $" -wt {this.WarmupTime.TotalSeconds} "; + } + + // -t {TestDuration.TotalSeconds} + if (!this.CommandLineWindowsServer.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineWindowsServer += $" -t {this.TestDuration.TotalSeconds} "; + } + + // Optional: -ds {DelayTime.TotalSeconds} only if DelayTime != 0 + if (!this.CommandLineWindowsServer.Contains("-ds", StringComparison.OrdinalIgnoreCase) && + this.DelayTime != TimeSpan.Zero) + { + this.CommandLineWindowsServer += $" -ds {this.DelayTime.TotalSeconds} "; + } + + this.CommandLineWindowsServer = this.CommandLineWindowsServer.Trim(); } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs index 1441dcb467..8f43f07946 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs @@ -140,5 +140,39 @@ protected override void CaptureMetrics(string results, string commandArguments, results); } } + + private void InitializeWindowsClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + + this.CommandLineWindowsClient ??= string.Empty; + + if (this.CommandLineWindowsClient.Length > 0 && !char.IsWhiteSpace(this.CommandLineWindowsClient[^1])) + { + this.CommandLineWindowsClient += " "; + } + + if (!this.CommandLineWindowsClient.Contains("--tcp", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineWindowsClient += this.Protocol.ToLowerInvariant() == "tcp" ? " --tcp" : string.Empty; + } + + if (!this.CommandLineWindowsClient.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.Iterations != 0) + { + this.CommandLineWindowsClient += $" -i {this.Iterations} "; + } + + if (!this.CommandLineWindowsClient.Contains("-riopoll", StringComparison.OrdinalIgnoreCase) && this.RioPoll != 0) + { + this.CommandLineWindowsClient += $" -riopoll {this.RioPoll}"; + } + + if (this.Protocol != null && !this.CommandLineWindowsClient.Contains($"-{this.Protocol.ToString().ToLowerInvariant()}")) + { + this.CommandLineWindowsClient += $" -{this.Protocol.ToString().ToLowerInvariant()}"; + } + + this.CommandLineWindowsClient = this.CommandLineWindowsClient.Trim(); + } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs index f4da698587..db6d84d458 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs @@ -102,14 +102,33 @@ await this.ProcessStartRetryPolicy.ExecuteAsync(async () => }); } - /// - /// Produces powershell script parameters using the workload parameters provided. - /// - /// Powershell script parameters as a string. - protected override string GetCommandLineArguments() + private void InitializeWindowsServerCommandline() { string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - return $"-a {serverIPAddress}:{this.Port} -t {this.TestDuration.TotalSeconds} -rio -riopoll {this.RioPoll} -{this.Protocol.ToLowerInvariant()}"; + + this.CommandLineWindowsServer ??= string.Empty; + + if (this.CommandLineWindowsServer.Length > 0 && !char.IsWhiteSpace(this.CommandLineWindowsServer[^1])) + { + this.CommandLineWindowsServer += " "; + } + + if (!this.CommandLineWindowsServer.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.Iterations != 0) + { + this.CommandLineWindowsServer += $" -i {this.Iterations} "; + } + + if (!this.CommandLineWindowsServer.Contains("-riopoll", StringComparison.OrdinalIgnoreCase) && this.RioPoll != 0) + { + this.CommandLineWindowsServer += $" -riopoll {this.RioPoll}"; + } + + if (this.Protocol != null && !this.CommandLineWindowsServer.Contains($"-{this.Protocol.ToString().ToLowerInvariant()}")) + { + this.CommandLineWindowsServer += $" -{this.Protocol.ToString().ToLowerInvariant()}"; + } + + this.CommandLineWindowsServer = this.CommandLineWindowsServer.Trim(); } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs index d02bb42e66..00bc27c778 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs @@ -31,5 +31,127 @@ public NTttcpClientExecutor(IServiceCollection dependencies, IDictionary }); } - /// - /// Returns the Sockperf client-side command line arguments. - /// - protected override string GetCommandLineArguments() - { - string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; - string protocolParam = this.Protocol.ToLowerInvariant() == "tcp" ? "--tcp" : string.Empty; - - // sockperf under-load -i 10.0.1.1 -p 8201 -t 60 --mps=max --full-rtt --msg-size 64 --client_ip 10.0.1.0 - return $"{this.TestMode} " + - $"-i {serverIPAddress} " + - $"-p {this.Port} {protocolParam} " + - $"-t {this.TestDuration.TotalSeconds} " + - $"{(this.MessagesPerSecond.ToLowerInvariant() == "max" ? "--mps=max" : $"--mps {this.MessagesPerSecond}")} " + - $"--full-rtt --msg-size {this.MessageSize} " + - $"--client_ip {clientIPAddress} " + - $"--full-log {this.ResultsPath}"; - } - /// /// Logs the workload metrics to the telemetry. /// @@ -161,5 +142,65 @@ await this.SystemManagement.FileSystem.File.DeleteAsync(this.ResultsPath) .ConfigureAwait(false); } } + + private void InitializeLinuxClientCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + this.CommandLineLinuxClient ??= string.Empty; + + if (this.CommandLineLinuxClient.Length > 0 && !char.IsWhiteSpace(this.CommandLineLinuxClient[^1])) + { + this.CommandLineLinuxClient += " "; + } + + if (!this.CommandLineLinuxClient.Contains(this.TestMode, StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $" {this.TestMode}"; + } + + if (!this.CommandLineLinuxClient.Contains("--tcp", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += this.Protocol.ToLowerInvariant() == "tcp" ? "--tcp" : string.Empty; + } + + if (!this.CommandLineLinuxClient.Contains("-i", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $"-i {serverIPAddress} "; + } + + if (!this.CommandLineLinuxClient.Contains("-p", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $" -p {this.Port}"; + } + + if (!this.CommandLineLinuxClient.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineLinuxClient += $"-t {this.TestDuration.TotalSeconds} "; + } + + if (!this.CommandLineLinuxClient.Contains("--mps", StringComparison.OrdinalIgnoreCase) && this.MessagesPerSecond != null) + { + this.CommandLineLinuxClient += $" {(this.MessagesPerSecond.ToLowerInvariant() == "max" ? "--mps=max" : $"--mps {this.MessagesPerSecond}")}"; + } + + if (!this.CommandLineLinuxClient.Contains("--msg-size", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $" --msg-size {this.MessageSize}"; + } + + if (!this.CommandLineLinuxClient.Contains("--client_ip", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $" --client_ip {clientIPAddress}"; + } + + if (!this.CommandLineLinuxClient.Contains("--full-log", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxClient += $" --full-log {this.ResultsPath}"; + } + + this.CommandLineLinuxClient = this.CommandLineLinuxClient.Trim(); + } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs index 6e8ea208b0..99d94afdd7 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs @@ -116,6 +116,45 @@ await this.ProcessStartRetryPolicy.ExecuteAsync(async () => }); } + private void InitializeLinuxServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + + this.CommandLineLinuxServer ??= string.Empty; + + if (this.CommandLineLinuxServer.Length > 0 && !char.IsWhiteSpace(this.CommandLineLinuxServer[^1])) + { + this.CommandLineLinuxServer += " "; + } + + if (!this.CommandLineLinuxServer.Contains("server", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += "server"; + } + + if (!this.CommandLineLinuxServer.Contains("--tcp", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += this.Protocol.ToLowerInvariant() == "tcp" ? "--tcp" : string.Empty; + } + + if (!this.CommandLineLinuxServer.Contains("-i", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += $"-i {serverIPAddress} "; + } + + if (!this.CommandLineLinuxServer.Contains("-p", StringComparison.OrdinalIgnoreCase)) + { + this.CommandLineLinuxServer += $" -p {this.Port}"; + } + + if (!this.CommandLineLinuxServer.Contains("-t", StringComparison.OrdinalIgnoreCase) && this.TestDuration != null) + { + this.CommandLineLinuxServer += $"-t {this.TestDuration.TotalSeconds} "; + } + + this.CommandLineLinuxServer = this.CommandLineLinuxServer.Trim(); + } + /// /// Returns the Sockperf server-side command line arguments. /// From 55466351a50604ba5c5e0aa8b6c684f3c85351ca Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Sat, 21 Feb 2026 22:23:05 +0530 Subject: [PATCH 09/13] adding commandline --- .../Latte/LatteClientExecutor.cs | 1 + .../Latte/LatteServerExecutor.cs | 1 + .../NTttcp/NTttcpClientExecutor.cs | 2 + .../NTttcp/NTttcpExecutor.cs | 18 --- .../NTttcp/NTttcpServerExecutor.cs | 108 ++++++++++++++++++ .../SockPerf/SockPerfClientExecutor.cs | 5 +- .../SockPerf/SockPerfServerExecutor.cs | 12 -- 7 files changed, 114 insertions(+), 33 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs index 8f43f07946..46ea9ab923 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs @@ -38,6 +38,7 @@ public LatteClientExecutor(VirtualClientComponent component) public LatteClientExecutor(IServiceCollection dependencies, IDictionary parameters) : base(dependencies, parameters) { + this.InitializeWindowsClientCommandline(); } /// diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs index db6d84d458..37d54e3c5f 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs @@ -27,6 +27,7 @@ public class LatteServerExecutor : LatteExecutor public LatteServerExecutor(VirtualClientComponent component) : base(component) { + this.InitializeWindowsServerCommandline(); } /// diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs index 00bc27c778..2ac3be7b4a 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs @@ -30,6 +30,8 @@ public NTttcpClientExecutor(VirtualClientComponent component) public NTttcpClientExecutor(IServiceCollection dependencies, IDictionary parameters) : base(dependencies, parameters) { + this.IntializeLinuxClientCommandline(); + this.IntializeWindowsClientCommandline(); } private void IntializeWindowsClientCommandline() diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs index e8072d963b..c1c762afaf 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpExecutor.cs @@ -252,24 +252,6 @@ protected override Task InitializeAsync(EventContext telemetryContext, Cancellat return this.SystemManagement.MakeFileExecutableAsync(this.ExecutablePath, this.Platform, cancellationToken); } - /// - /// Returns the NTttcp command line arguments. - /// - protected override string GetCommandLineArguments() - { - string command = null; - if (this.Platform == PlatformID.Win32NT && this.IsInClientRole) - { - command = this.CommandLineWindowsClient; - } - else if (this.Platform == PlatformID.Unix) - { - command = this.GetLinuxSpecificCommandLine(); - } - - return command; - } - /// /// Gets the Sysctl command output. /// diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpServerExecutor.cs index 24e9f242c7..8341d08348 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpServerExecutor.cs @@ -5,6 +5,7 @@ namespace VirtualClient.Actions.NetworkPerformance { using System; using System.Collections.Generic; + using System.Linq; using Microsoft.Extensions.DependencyInjection; using VirtualClient.Contracts; @@ -30,6 +31,113 @@ public NTttcpServerExecutor(VirtualClientComponent component) public NTttcpServerExecutor(IServiceCollection dependencies, IDictionary parameters) : base(dependencies, parameters) { + this.IntializeLinuxServerCommandline(); + this.IntializeWindowsServerCommandline(); + } + + private void IntializeWindowsServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + if (!this.CommandLineWindowsServer.Contains("-r") && !this.CommandLineWindowsServer.Contains("-s")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + " -r"; + } + + if (!this.CommandLineWindowsServer.Contains("-t") && this.TestDuration != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineWindowsServer.Contains("-l") && this.BufferSizeServer != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -l {this.BufferSizeServer}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -p {this.Port}"; + } + + if (!this.CommandLineWindowsServer.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineWindowsServer.Contains("-u") && this.Protocol != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineWindowsServer.Contains("-m")) + { + this.CommandLineWindowsServer = this.CommandLineWindowsServer + $" -m {this.ThreadCount},*,{serverIPAddress} "; + } + } + + private void IntializeLinuxServerCommandline() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + if (!this.CommandLineLinuxClient.Contains("-r") && !this.CommandLineLinuxServer.Contains("-s")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + " -r"; + } + + if (!this.CommandLineLinuxServer.Contains("-t") && this.TestDuration != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -t {this.TestDuration.TotalSeconds}"; + } + + if (!this.CommandLineLinuxServer.Contains("-l") && this.BufferSizeClient != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -l {this.BufferSizeServer}"; + } + + if (!this.CommandLineWindowsServer.Contains("-p")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -p {this.Port}"; + } + + if (!this.CommandLineLinuxServer.Contains("-xml") && this.ResultsPath != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -xml {this.ResultsPath}"; + } + + if (!this.CommandLineLinuxServer.Contains("-u") && this.Protocol != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.Protocol.ToLowerInvariant() == "udp" ? " -u" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-ns") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.NoSyncEnabled == true ? " -ns" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-m")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $" -m {this.ThreadCount},*,{serverIPAddress} "; + } + + if (!this.CommandLineLinuxServer.Contains("-M")) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{((this.ReceiverMultiClientMode == true) ? " -M" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("-N") && this.NoSyncEnabled != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{(this.NoSyncEnabled == true ? " -N" : string.Empty)} "; + } + + if (!this.CommandLineLinuxServer.Contains("--show-dev-interrupts") && this.DevInterruptsDifferentiator != null) + { + this.CommandLineLinuxServer = this.CommandLineLinuxServer + $"{((this.DevInterruptsDifferentiator != null) ? $" --show-dev-interrupts {this.DevInterruptsDifferentiator}" : string.Empty)}".Trim(); + } } } } diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs index bab4b12b7e..840e1fde0a 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs @@ -3,14 +3,13 @@ namespace VirtualClient.Actions.NetworkPerformance { - using Microsoft.Extensions.DependencyInjection; - using Microsoft.Extensions.Logging; - using Org.BouncyCastle.Pqc.Crypto.Lms; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; using VirtualClient.Common; using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs index 99d94afdd7..c8aaa91fd2 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs @@ -154,17 +154,5 @@ private void InitializeLinuxServerCommandline() this.CommandLineLinuxServer = this.CommandLineLinuxServer.Trim(); } - - /// - /// Returns the Sockperf server-side command line arguments. - /// - protected override string GetCommandLineArguments() - { - // sockperf server -i 10.0.1.1 -p 8201 --tcp - string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; - string protocolParam = this.Protocol.ToLowerInvariant() == "tcp" ? "--tcp" : string.Empty; - - return $"server -i {serverIPAddress} -p {this.Port} {protocolParam}".Trim(); - } } } From f9ef8b8f9fd1c3aa3d7e3829d09686ab5fe61f9c Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Sat, 21 Feb 2026 23:01:06 +0530 Subject: [PATCH 10/13] Adding initialize function --- .../NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs | 1 + .../NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs index 840e1fde0a..e687ada8ae 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfClientExecutor.cs @@ -28,6 +28,7 @@ public class SockPerfClientExecutor : SockPerfExecutor public SockPerfClientExecutor(VirtualClientComponent component) : base(component) { + this.InitializeLinuxClientCommandline(); } /// diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs index c8aaa91fd2..418ec3a426 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfServerExecutor.cs @@ -37,6 +37,7 @@ public SockPerfServerExecutor(VirtualClientComponent component) public SockPerfServerExecutor(IServiceCollection dependencies, IDictionary parameters) : base(dependencies, parameters) { + this.InitializeLinuxServerCommandline(); } /// From be3077a26cdc1a902aefd7d569390f73afc62c86 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Wed, 25 Feb 2026 12:22:10 +0530 Subject: [PATCH 11/13] Adding layout reference --- .../NTttcp/NTttcpClientExecutor.cs | 1 + .../NetworkingWorkloadExecutor.cs | 24 +++++++++++++++++++ .../ProfileExpressionEvaluator.cs | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs index 2ac3be7b4a..53f49ab552 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NTttcp/NTttcpClientExecutor.cs @@ -5,6 +5,7 @@ namespace VirtualClient.Actions.NetworkPerformance { using System; using System.Collections.Generic; + using System.Linq; using Microsoft.Extensions.DependencyInjection; using VirtualClient.Contracts; diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs index f773cf881c..39f31b222a 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadExecutor.cs @@ -9,8 +9,11 @@ namespace VirtualClient.Actions.NetworkPerformance using System.Linq; using System.Net; using System.Net.Http; + using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; + using Microsoft.AspNetCore.Hosting.Server; + using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json.Linq; using Polly; @@ -30,6 +33,8 @@ public class NetworkingWorkloadExecutor : VirtualClientComponent { private static readonly object LockObject = new object(); private static Task heartbeatTask; + private static Regex layoutServerIPRegex = new Regex(@"\$\.\s*layout\.serverip\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static Regex layoutClientIPRegex = new Regex(@"\$\.\s*layout\.clientip\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); // Contains the background running process for the server-side // networking workload tool. @@ -599,6 +604,8 @@ protected override async Task InitializeAsync(EventContext telemetryContext, Can EventContext.PersistentProperties["role"] = this.Role; this.InitializeApiClients(); + + this.InlineLayoutReferences(); } /// @@ -1137,6 +1144,23 @@ private void StopServerTool(EventContext telemetryContext) } } + private void InlineLayoutReferences() + { + string serverIPAddress = this.GetLayoutClientInstances(ClientRole.Server).First().IPAddress; + string clientIPAddress = this.GetLayoutClientInstances(ClientRole.Client).First().IPAddress; + + foreach (var key in this.Parameters.Keys.ToList()) + { + var original = this.Parameters[key]?.ToString(); + + var updated = layoutServerIPRegex.Replace(original, serverIPAddress); + updated = layoutClientIPRegex.Replace(updated, clientIPAddress); + + this.Parameters[key] = updated; + + } + } + /// /// Used to track and managed the execution of the background server-side workload /// process over a long running period of time. diff --git a/src/VirtualClient/VirtualClient.Core/ProfileExpressionEvaluator.cs b/src/VirtualClient/VirtualClient.Core/ProfileExpressionEvaluator.cs index 94f517d665..c1cb389259 100644 --- a/src/VirtualClient/VirtualClient.Core/ProfileExpressionEvaluator.cs +++ b/src/VirtualClient/VirtualClient.Core/ProfileExpressionEvaluator.cs @@ -1000,7 +1000,7 @@ private static bool EvaluateParameterSpecificExpressions(IServiceCollection depe if (!cancellationToken.IsCancellationRequested) { // Groups[0] = the full matched text (e.g. {Port}) - // Groups]1] = the capture group (e.g. 1234). + // Groups[1] = the capture group (e.g. 1234). if (parameters.TryGetValue(match.Groups[1].Value, out IConvertible value)) { matchesFound = true; From c5a3a5b1ee7f679ecb21edcfc018f11fdacc8fa5 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Mon, 16 Mar 2026 20:24:37 +0530 Subject: [PATCH 12/13] Adding tool default value as string.empty instead of null --- .../NetworkingWorkloadToolExecutor.cs | 8 +- .../SockPerf/SockPerfExecutor.cs | 9 - .../profiles/PERF-NETWORK.json | 381 ++++++++++++++++++ 3 files changed, 385 insertions(+), 13 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs index 5feb8ad16e..f1d42375dc 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/NetworkingWorkloadToolExecutor.cs @@ -49,7 +49,7 @@ public string CommandLineLinuxClient { get { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient)); + return this.Parameters.GetValue(nameof(this.CommandLineLinuxClient), string.Empty); } set @@ -65,7 +65,7 @@ public string CommandLineLinuxServer { get { - return this.Parameters.GetValue(nameof(this.CommandLineLinuxServer)); + return this.Parameters.GetValue(nameof(this.CommandLineLinuxServer), string.Empty); } set @@ -81,7 +81,7 @@ public string CommandLineWindowsClient { get { - return this.Parameters.GetValue(nameof(this.CommandLineWindowsClient)); + return this.Parameters.GetValue(nameof(this.CommandLineWindowsClient), string.Empty); } set @@ -97,7 +97,7 @@ public string CommandLineWindowsServer { get { - return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer)); + return this.Parameters.GetValue(nameof(this.CommandLineWindowsServer), string.Empty); } set diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfExecutor.cs index c352e8ff20..6bd4565278 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/SockPerf/SockPerfExecutor.cs @@ -131,15 +131,6 @@ public double ConfidenceLevel /// protected IAsyncPolicy ProcessStartRetryPolicy { get; set; } - /// - /// Produces powershell script parameters using the workload parameters provided. - /// - /// Powershell script parameters as a string. - protected override string GetCommandLineArguments() - { - return string.Empty; - } - /// /// Initializes the environment and dependencies for running the tool. /// diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json index 2c1bcee925..dd47aa5e35 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json @@ -364,4 +364,385 @@ } } ] + "Description": "Networking Workload Suite", + "Metadata": { + "RecommendedMinimumExecutionTime": "00:30:00", + "SupportedPlatforms": "linux-x64,linux-arm64,win-x64,win-arm64", + "SupportedOperatingSystems": "CBL-Mariner,CentOS,Debian,RedHat,Suse,Ubuntu,Windows,AwsLinux" + }, + "Parameters": { + "ConfigureNetwork": true, + "EnableBusyPoll": true, + "DisableFirewall": true, + "CpsPort": 7201, + "CpsDuration": "00:05:00", + "NcpsPort": 9800, + "NcpsDuration": "00:05:00", + "LattePort": 6100, + "NTttcpPort": 5500, + "NTttcpDuration": "00:01:00", + "SockPerfPort": 8201, + "SockPerfDuration": "00:01:00", + "ProfilingEnabled": false, + "ProfilingMode": "None", + "TestDuration": "00:01:00" + }, + "Actions": [ + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_4K_Buffer_T1", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 1, + "BufferSizeClient": "4K", + "BufferSizeServer": "4K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T1", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode", + "CommandLineLinuxServer": " -r -V -m {ThreadCount},*,$.layout.serverIP -W 10 -C 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", + "CommandLineLinuxClient": " -s -V -m {ThreadCount},*,$.layout.serverIP -W 10 -C 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", + "CommandLineWindowsServer": " -r -m {ThreadCount},*,$.layout.serverip -wu 10 -cd 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", + "CommandLineWindowsClient": " -s -m {ThreadCount},*,$.layout.serverip -wu 10 -cd 10 -t {TestDuration.TotalSeconds} -b {BufferSizeClient} -x {ResultsPath} -p {Port} -nic $.layout.clientip" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_64K_Buffer_T1", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 1, + "BufferSizeClient": "64K", + "BufferSizeServer": "64K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T1", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_256K_Buffer_T1", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 1, + "BufferSizeClient": "256K", + "BufferSizeServer": "256K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T1", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_4K_Buffer_T32", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 32, + "BufferSizeClient": "4K", + "BufferSizeServer": "4K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T32", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_64K_Buffer_T32", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 32, + "BufferSizeClient": "64K", + "BufferSizeServer": "64K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T32", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_256K_Buffer_T32", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 32, + "BufferSizeClient": "256K", + "BufferSizeServer": "256K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T32", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_4K_Buffer_T256", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 256, + "BufferSizeClient": "4K", + "BufferSizeServer": "4K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T256", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_64K_Buffer_T256", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 256, + "BufferSizeClient": "64K", + "BufferSizeServer": "64K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T256", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_TCP_256K_Buffer_T256", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "TCP", + "ThreadCount": 256, + "BufferSizeClient": "256K", + "BufferSizeServer": "256K", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T256", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_UDP_1400B_Buffer_T1", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "UDP", + "ThreadCount": 1, + "BufferSizeClient": "1400", + "BufferSizeServer": "1400", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_UDP_1400B_Buffer_T1", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NTttcp_UDP_1400B_Buffer_T32", + "ToolName": "NTttcp", + "PackageName": "networking", + "Protocol": "UDP", + "ThreadCount": 32, + "BufferSizeClient": "1400", + "BufferSizeServer": "1400", + "TestDuration": "$.Parameters.NTttcpDuration", + "Port": "$.Parameters.NTttcpPort", + "ProfilingScenario": "NTttcp_UDP_1400B_Buffer_T32", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "Latte_TCP", + "ToolName": "Latte", + "PackageName": "networking", + "Protocol": "tcp", + "Port": "$.Parameters.LattePort", + "ProfilingScenario": "Latte_TCP", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode", + "CommandLineWindowsServer": "-a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol}", + "CommandLineWindowsClient": "-so -c -a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol} -hist -hl 1 -hc 9998 -bl $.layout.clientip" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "Latte_UDP", + "ToolName": "Latte", + "PackageName": "networking", + "Protocol": "UDP", + "Port": "$.Parameters.LattePort", + "ProfilingScenario": "Latte_UDP", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "CPS_T16", + "ToolName": "CPS", + "PackageName": "Networking", + "Connections": 16, + "TestDuration": "$.Parameters.CpsDuration", + "WarmupTime": "00:01:00", + "Port": "$.Parameters.CpsPort", + "ProfilingScenario": "CPS_T16", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode", + "CommandLineWindowsServer": "-a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol}", + "CommandLineWindowsClient": "-so -c -a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol} -hist -hl 1 -hc 9998 -bl $.layout.clientip" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "NCPS_T16", + "ToolName": "NCPS", + "PackageName": "Networking", + "Connections": 16, + "TestDuration": "$.Parameters.NcpsDuration", + "WarmupTime": "00:01:00", + "Port": "$.Parameters.NcpsPort", + "ProfilingScenario": "NCPS_T16", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "SockPerf_TCP_Ping_Pong", + "ToolName": "SockPerf", + "PackageName": "networking", + "Protocol": "TCP", + "TestMode": "ping-pong", + "MessageSize": 64, + "TestDuration": "$.Parameters.SockPerfDuration", + "Port": "$.Parameters.SockPerfPort", + "MessagesPerSecond": "max", + "ProfilingScenario": "SockPerf_TCP_Ping_Pong", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "SockPerf_UDP_Ping_Pong", + "ToolName": "SockPerf", + "PackageName": "networking", + "Protocol": "UDP", + "TestMode": "ping-pong", + "MessageSize": 64, + "TestDuration": "$.Parameters.SockPerfDuration", + "Port": "$.Parameters.SockPerfPort", + "MessagesPerSecond": "max", + "ProfilingScenario": "SockPerf_UDP_Ping_Pong", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode", + "CommandLineLinuxClient": "{TestMode} -i $.layout.serverip -p {Port} -t {TestDuration.TotalSeconds} --mps {MessagesPerSecond} --full-rtt --msg-size {MessageSize} --client_ip $.layout.clientip --full-log {ResultsPath}", + "CommandLineLinuxServer": "server -i $.layout.serverip -p {Port " + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "SockPerf_TCP_Under_Load", + "ToolName": "SockPerf", + "PackageName": "networking", + "Protocol": "TCP", + "TestMode": "under-load", + "MessageSize": 64, + "TestDuration": "$.Parameters.SockPerfDuration", + "Port": "$.Parameters.SockPerfPort", + "MessagesPerSecond": "max", + "ProfilingScenario": "SockPerf_TCP_Under_Load", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + }, + { + "Type": "NetworkingWorkloadExecutor", + "Parameters": { + "Scenario": "SockPerf_UDP_Under_Load", + "ToolName": "SockPerf", + "PackageName": "networking", + "Protocol": "UDP", + "TestMode": "under-load", + "MessageSize": 64, + "TestDuration": "$.Parameters.SockPerfDuration", + "Port": "$.Parameters.SockPerfPort", + "MessagesPerSecond": "max", + "ProfilingScenario": "SockPerf_UDP_Under_Load", + "ProfilingEnabled": "$.Parameters.ProfilingEnabled", + "ProfilingMode": "$.Parameters.ProfilingMode" + } + } + ], + "Dependencies": [ + { + "Type": "DependencyPackageInstallation", + "Parameters": { + "Scenario": "InstallNetworkToolsetPackage", + "BlobContainer": "packages", + "BlobName": "networking.3.1.1.zip", + "PackageName": "networking", + "Extract": true + } + }, + { + "Type": "LinuxPackageInstallation", + "Parameters": { + "Scenario": "InstallLinuxPackages", + "Packages-Dnf": "iptables" + } + }, + { + "Type": "NetworkConfigurationSetup", + "Parameters": { + "Scenario": "ConfigureNetwork", + "ConfigureNetwork": "$.Parameters.ConfigureNetwork", + "EnableBusyPoll": "$.Parameters.EnableBusyPoll", + "DisableFirewall": "$.Parameters.DisableFirewall", + "VisualStudioCRuntimePackageName": "visualstudiocruntime" + } + }, + { + "Type": "ApiServer", + "Parameters": { + "Scenario": "StartAPIServer" + } + } + ] } \ No newline at end of file From bbc8a8420315cd2f5bfb7e9518692386b7243bc6 Mon Sep 17 00:00:00 2001 From: Deepanshu Vaid Date: Tue, 24 Mar 2026 18:34:53 +0530 Subject: [PATCH 13/13] Adding changes to profile --- .../Latte/LatteClientExecutor.cs | 5 - .../Latte/LatteServerExecutor.cs | 5 - .../profiles/PERF-NETWORK.json | 381 ------------------ 3 files changed, 391 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs index 46ea9ab923..26614c0fc4 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteClientExecutor.cs @@ -158,11 +158,6 @@ private void InitializeWindowsClientCommandline() this.CommandLineWindowsClient += this.Protocol.ToLowerInvariant() == "tcp" ? " --tcp" : string.Empty; } - if (!this.CommandLineWindowsClient.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.Iterations != 0) - { - this.CommandLineWindowsClient += $" -i {this.Iterations} "; - } - if (!this.CommandLineWindowsClient.Contains("-riopoll", StringComparison.OrdinalIgnoreCase) && this.RioPoll != 0) { this.CommandLineWindowsClient += $" -riopoll {this.RioPoll}"; diff --git a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs index 37d54e3c5f..8117560223 100644 --- a/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/Network/NetworkingWorkload/Latte/LatteServerExecutor.cs @@ -114,11 +114,6 @@ private void InitializeWindowsServerCommandline() this.CommandLineWindowsServer += " "; } - if (!this.CommandLineWindowsServer.Contains("-i", StringComparison.OrdinalIgnoreCase) && this.Iterations != 0) - { - this.CommandLineWindowsServer += $" -i {this.Iterations} "; - } - if (!this.CommandLineWindowsServer.Contains("-riopoll", StringComparison.OrdinalIgnoreCase) && this.RioPoll != 0) { this.CommandLineWindowsServer += $" -riopoll {this.RioPoll}"; diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json index dd47aa5e35..2c1bcee925 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-NETWORK.json @@ -364,385 +364,4 @@ } } ] - "Description": "Networking Workload Suite", - "Metadata": { - "RecommendedMinimumExecutionTime": "00:30:00", - "SupportedPlatforms": "linux-x64,linux-arm64,win-x64,win-arm64", - "SupportedOperatingSystems": "CBL-Mariner,CentOS,Debian,RedHat,Suse,Ubuntu,Windows,AwsLinux" - }, - "Parameters": { - "ConfigureNetwork": true, - "EnableBusyPoll": true, - "DisableFirewall": true, - "CpsPort": 7201, - "CpsDuration": "00:05:00", - "NcpsPort": 9800, - "NcpsDuration": "00:05:00", - "LattePort": 6100, - "NTttcpPort": 5500, - "NTttcpDuration": "00:01:00", - "SockPerfPort": 8201, - "SockPerfDuration": "00:01:00", - "ProfilingEnabled": false, - "ProfilingMode": "None", - "TestDuration": "00:01:00" - }, - "Actions": [ - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_4K_Buffer_T1", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 1, - "BufferSizeClient": "4K", - "BufferSizeServer": "4K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T1", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode", - "CommandLineLinuxServer": " -r -V -m {ThreadCount},*,$.layout.serverIP -W 10 -C 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", - "CommandLineLinuxClient": " -s -V -m {ThreadCount},*,$.layout.serverIP -W 10 -C 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", - "CommandLineWindowsServer": " -r -m {ThreadCount},*,$.layout.serverip -wu 10 -cd 10 -t {TestDuration.TotalSeconds} -b {BufferSizeServer} -x {ResultsPath} -p {Port}", - "CommandLineWindowsClient": " -s -m {ThreadCount},*,$.layout.serverip -wu 10 -cd 10 -t {TestDuration.TotalSeconds} -b {BufferSizeClient} -x {ResultsPath} -p {Port} -nic $.layout.clientip" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_64K_Buffer_T1", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 1, - "BufferSizeClient": "64K", - "BufferSizeServer": "64K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T1", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_256K_Buffer_T1", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 1, - "BufferSizeClient": "256K", - "BufferSizeServer": "256K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T1", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_4K_Buffer_T32", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 32, - "BufferSizeClient": "4K", - "BufferSizeServer": "4K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T32", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_64K_Buffer_T32", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 32, - "BufferSizeClient": "64K", - "BufferSizeServer": "64K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T32", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_256K_Buffer_T32", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 32, - "BufferSizeClient": "256K", - "BufferSizeServer": "256K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T32", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_4K_Buffer_T256", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 256, - "BufferSizeClient": "4K", - "BufferSizeServer": "4K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_4K_Buffer_T256", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_64K_Buffer_T256", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 256, - "BufferSizeClient": "64K", - "BufferSizeServer": "64K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_64K_Buffer_T256", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_TCP_256K_Buffer_T256", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "TCP", - "ThreadCount": 256, - "BufferSizeClient": "256K", - "BufferSizeServer": "256K", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_TCP_256K_Buffer_T256", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_UDP_1400B_Buffer_T1", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "UDP", - "ThreadCount": 1, - "BufferSizeClient": "1400", - "BufferSizeServer": "1400", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_UDP_1400B_Buffer_T1", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NTttcp_UDP_1400B_Buffer_T32", - "ToolName": "NTttcp", - "PackageName": "networking", - "Protocol": "UDP", - "ThreadCount": 32, - "BufferSizeClient": "1400", - "BufferSizeServer": "1400", - "TestDuration": "$.Parameters.NTttcpDuration", - "Port": "$.Parameters.NTttcpPort", - "ProfilingScenario": "NTttcp_UDP_1400B_Buffer_T32", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "Latte_TCP", - "ToolName": "Latte", - "PackageName": "networking", - "Protocol": "tcp", - "Port": "$.Parameters.LattePort", - "ProfilingScenario": "Latte_TCP", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode", - "CommandLineWindowsServer": "-a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol}", - "CommandLineWindowsClient": "-so -c -a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol} -hist -hl 1 -hc 9998 -bl $.layout.clientip" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "Latte_UDP", - "ToolName": "Latte", - "PackageName": "networking", - "Protocol": "UDP", - "Port": "$.Parameters.LattePort", - "ProfilingScenario": "Latte_UDP", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "CPS_T16", - "ToolName": "CPS", - "PackageName": "Networking", - "Connections": 16, - "TestDuration": "$.Parameters.CpsDuration", - "WarmupTime": "00:01:00", - "Port": "$.Parameters.CpsPort", - "ProfilingScenario": "CPS_T16", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode", - "CommandLineWindowsServer": "-a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol}", - "CommandLineWindowsClient": "-so -c -a $.layout.serverip:{Port} -rio -i {Iterations} -riopoll {RioPoll} -{Protocol} -hist -hl 1 -hc 9998 -bl $.layout.clientip" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "NCPS_T16", - "ToolName": "NCPS", - "PackageName": "Networking", - "Connections": 16, - "TestDuration": "$.Parameters.NcpsDuration", - "WarmupTime": "00:01:00", - "Port": "$.Parameters.NcpsPort", - "ProfilingScenario": "NCPS_T16", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "SockPerf_TCP_Ping_Pong", - "ToolName": "SockPerf", - "PackageName": "networking", - "Protocol": "TCP", - "TestMode": "ping-pong", - "MessageSize": 64, - "TestDuration": "$.Parameters.SockPerfDuration", - "Port": "$.Parameters.SockPerfPort", - "MessagesPerSecond": "max", - "ProfilingScenario": "SockPerf_TCP_Ping_Pong", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "SockPerf_UDP_Ping_Pong", - "ToolName": "SockPerf", - "PackageName": "networking", - "Protocol": "UDP", - "TestMode": "ping-pong", - "MessageSize": 64, - "TestDuration": "$.Parameters.SockPerfDuration", - "Port": "$.Parameters.SockPerfPort", - "MessagesPerSecond": "max", - "ProfilingScenario": "SockPerf_UDP_Ping_Pong", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode", - "CommandLineLinuxClient": "{TestMode} -i $.layout.serverip -p {Port} -t {TestDuration.TotalSeconds} --mps {MessagesPerSecond} --full-rtt --msg-size {MessageSize} --client_ip $.layout.clientip --full-log {ResultsPath}", - "CommandLineLinuxServer": "server -i $.layout.serverip -p {Port " - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "SockPerf_TCP_Under_Load", - "ToolName": "SockPerf", - "PackageName": "networking", - "Protocol": "TCP", - "TestMode": "under-load", - "MessageSize": 64, - "TestDuration": "$.Parameters.SockPerfDuration", - "Port": "$.Parameters.SockPerfPort", - "MessagesPerSecond": "max", - "ProfilingScenario": "SockPerf_TCP_Under_Load", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - }, - { - "Type": "NetworkingWorkloadExecutor", - "Parameters": { - "Scenario": "SockPerf_UDP_Under_Load", - "ToolName": "SockPerf", - "PackageName": "networking", - "Protocol": "UDP", - "TestMode": "under-load", - "MessageSize": 64, - "TestDuration": "$.Parameters.SockPerfDuration", - "Port": "$.Parameters.SockPerfPort", - "MessagesPerSecond": "max", - "ProfilingScenario": "SockPerf_UDP_Under_Load", - "ProfilingEnabled": "$.Parameters.ProfilingEnabled", - "ProfilingMode": "$.Parameters.ProfilingMode" - } - } - ], - "Dependencies": [ - { - "Type": "DependencyPackageInstallation", - "Parameters": { - "Scenario": "InstallNetworkToolsetPackage", - "BlobContainer": "packages", - "BlobName": "networking.3.1.1.zip", - "PackageName": "networking", - "Extract": true - } - }, - { - "Type": "LinuxPackageInstallation", - "Parameters": { - "Scenario": "InstallLinuxPackages", - "Packages-Dnf": "iptables" - } - }, - { - "Type": "NetworkConfigurationSetup", - "Parameters": { - "Scenario": "ConfigureNetwork", - "ConfigureNetwork": "$.Parameters.ConfigureNetwork", - "EnableBusyPoll": "$.Parameters.EnableBusyPoll", - "DisableFirewall": "$.Parameters.DisableFirewall", - "VisualStudioCRuntimePackageName": "visualstudiocruntime" - } - }, - { - "Type": "ApiServer", - "Parameters": { - "Scenario": "StartAPIServer" - } - } - ] } \ No newline at end of file