diff --git a/benchmarks/iperf/Makefile b/benchmarks/iperf/Makefile index c3e8860aec..d0dfa4661c 100644 --- a/benchmarks/iperf/Makefile +++ b/benchmarks/iperf/Makefile @@ -1,6 +1,6 @@ PLUGIN_NAME= iperf PLUGIN_VERSION= 1.0 -PLUGIN_REVISION= 2 +PLUGIN_REVISION= 3 PLUGIN_COMMENT= Connection speed tester PLUGIN_DEPENDS= iperf3 ruby rubygem-rexml PLUGIN_MAINTAINER= franz.fabian.94@gmail.com diff --git a/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/Api/InstanceController.php b/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/Api/InstanceController.php index 2418351163..693da0ac39 100644 --- a/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/Api/InstanceController.php +++ b/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/Api/InstanceController.php @@ -55,9 +55,11 @@ public function setAction() 'error' => 'interface parameter is missing'); } $interface_name = $_POST['instance']['interface']; + $prefer_port_5201 = isset($_POST['instance']['prefer_port_5201']) && + $_POST['instance']['prefer_port_5201'] === '1'; if ($interface = $this->get_real_interface_name($interface_name)) { // start iperf - return $this->send_command("start $interface", $backend); + return $this->send_command("start $interface " . ($prefer_port_5201 ? '1' : '0'), $backend); } else { return array('status' => 'error', 'error' => 'interface is unknown'); diff --git a/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/forms/instance_settings.xml b/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/forms/instance_settings.xml index 5b5d1f70b3..1fb9987b07 100644 --- a/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/forms/instance_settings.xml +++ b/benchmarks/iperf/src/opnsense/mvc/app/controllers/OPNsense/iperf/forms/instance_settings.xml @@ -5,4 +5,10 @@ dropdown Choose the interface on which the port should be opened. + + instance.prefer_port_5201 + + checkbox + Use the standard iPerf port 5201 when it is available; otherwise, use a random available port. + diff --git a/benchmarks/iperf/src/opnsense/mvc/app/models/OPNsense/iperf/FakeInstance.xml b/benchmarks/iperf/src/opnsense/mvc/app/models/OPNsense/iperf/FakeInstance.xml index f3254be98e..e6d600f14c 100644 --- a/benchmarks/iperf/src/opnsense/mvc/app/models/OPNsense/iperf/FakeInstance.xml +++ b/benchmarks/iperf/src/opnsense/mvc/app/models/OPNsense/iperf/FakeInstance.xml @@ -7,5 +7,9 @@ Y N + + 1 + N + diff --git a/benchmarks/iperf/src/opnsense/scripts/iperf/ruby_iperf.rb b/benchmarks/iperf/src/opnsense/scripts/iperf/ruby_iperf.rb index 23740fd90e..79db876cb8 100755 --- a/benchmarks/iperf/src/opnsense/scripts/iperf/ruby_iperf.rb +++ b/benchmarks/iperf/src/opnsense/scripts/iperf/ruby_iperf.rb @@ -39,6 +39,7 @@ ONE_HOUR = 3600 KEY_START_TIME = 'start_time' KEY_PORT = 'port' +IPERF_DEFAULT_PORT = 5201 LF = "\n" def execute_firewall_port(rule) @@ -106,8 +107,11 @@ def find_open_ports ports end -def find_open_port - find_open_ports.sample +def find_open_port(prefer_default_port = false) + ports = find_open_ports + return IPERF_DEFAULT_PORT if prefer_default_port && ports.include?(IPERF_DEFAULT_PORT) + + ports.sample end def run_iperf3(port) @@ -123,9 +127,9 @@ def run_iperf3(port) output end -def run_test(interface = 'any', data) +def run_test(interface, data, prefer_default_port = false) ret = nil - data[KEY_PORT] = port = find_open_port + data[KEY_PORT] = port = find_open_port(prefer_default_port) # regenerate ruleset flush_firewall_rules gen_firewall_rules @@ -149,12 +153,12 @@ def run_test(interface = 'any', data) ret end -def run_test_thread(interface = 'any') +def run_test_thread(interface = 'any', prefer_default_port = false) data = {} t = Thread.new do data[KEY_START_TIME] = Time.now data['interface'] = interface - run_test(interface, data) + run_test(interface, data, prefer_default_port) end $instances[t] = data end @@ -190,7 +194,8 @@ def run_test_thread(interface = 'any') # check if a valid interface was given interface = intf if intf =~ /^[a-z0-9_-]+$/ end - data = run_test_thread interface + prefer_default_port = command.shift == '1' + data = run_test_thread interface, prefer_default_port connection.puts '{"status": "queued job"}' when 'query' connection.puts $instances.values.to_json