#!/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
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.
You should have received a copy of the GNU General Public License
along with this program. If not, see
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:match("[^%w%-%.]") then print("
Illegal server name") else -- 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("p=$$;setsid sh -c \"(sleep 20; kill $p)\" > /dev/null 2>&1 & /usr/bin/iperf3 --forceflush -b 0 -Z -c " .. server .. (protocol == "udp" and " -u" or "") .. " 2>&1"):read("*a") .. "") elseif status:match("iperf is disabled") then print("
iperf server is disabled") else print("
iperf server failed to start server") end end end