diff --git a/files/www/cgi-bin/iperf b/files/www/cgi-bin/iperf
index 2021705b..6b81cb72 100755
--- a/files/www/cgi-bin/iperf
+++ b/files/www/cgi-bin/iperf
@@ -1,36 +1,36 @@
#!/usr/bin/lua
--[[
- Part of AREDN -- Used for creating Amateur Radio Emergency Data Networks
- Copyright (C) 2022 Tim Wilkinson
- See Contributors file for additional contributors
+ Part of AREDN -- Used for creating Amateur Radio Emergency Data Networks
+ Copyright (C) 2022 Tim Wilkinson
+ See Contributors file for additional contributors
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation version 3 of the License.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation version 3 of the License.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see
iperf is disabled") + print("
iperf is disabled") elseif not server then print("
Provide a server name to run a test between this client and a server [/cgi-bin/iperf?server=<ServerName>&protocol=<udp|tcp>]") -elseif server == "" then - os.execute("killall iperf3; iperf3 -s -D -1 -B " .. node) - for _ = 1,5 - do - if io.popen("netstat -ln | grep 0.0.0.0:5201"):read("*a") ~= "" then - break - end - nixio.nanosleep(1, 0) - end - print("
iperf server running (one time)") -elseif server:match("[^%w-%.]") then - print("
Illegal server name") +elseif server:match("[^%w%-%.]") then + print("
Illegal server name") else - if not server:match("%.") then - server = server .. ".local.mesh" + -- Using io.popen here causes the script to terminate (a bug?), so we have this workaround + if os.execute('if [ "$(pidof iperf3)" = "" ]; then exit 0; else exit 1; fi') ~= 0 then + print("
iperf server busy") + return + end + if server == "" then + os.execute("iperf3 -s -D -1 --idle-timeout 20 -B " .. node) + nixio.nanosleep(1, 0) + print("
iperf server running") + else + if not server:match("%.") then + server = server .. ".local.mesh" + end + local status = "" + local f = io.popen("wget -q -O - 'http://" .. server .. ":8080/cgi-bin/iperf?server=' 2>&1") + if f then + status = f:read("*a") + f:close(); + end + if status:match("running") then + print("
Client: " .. node .. "\nServer: " .. server .. "\n" .. io.popen("/usr/bin/iperf3 --forceflush -b 0 -Z -c " .. server .. (protocol == "udp" and " -u" or "") .. " 2>&1"):read("*a") .. "") + else + print("
iperf client failed to start server") + end end - os.execute("wget -q 'http://" .. server .. ":8080/cgi-bin/iperf?server=' > /dev/null 2>&1") - print("
Client: " .. node .. "\nServer: " .. server .. "\n" .. io.popen("/usr/bin/iperf3 -b 0 -c " .. server .. (protocol == "udp" and " -u" or "") .. " 2>&1"):read("*a") .. "") end