made netutil.ping actually return useful values

This commit is contained in:
Izaya 2020-03-18 14:03:45 +11:00
parent 0712210768
commit 90afc8d18d

View File

@ -1,5 +1,6 @@
local computer = require "computer"
local minitel = require "minitel"
local event = require "event"
local rpc = require "rpc"
local netutil = {}
@ -9,6 +10,7 @@ function netutil.importfs(host,rpath,lpath)
return host..":"..rpath
end
fs.mount(lpath,px)
return true
end
function netutil.exportfs(path)
@ -18,21 +20,29 @@ function netutil.exportfs(path)
rpcs.register(path.."_"..k,v)
print(path.."_"..k)
end
return true
end
function netutil.ping(addr,times,timeout)
function netutil.ping(addr,times,timeout, silent)
local times, timeout = times or 5, timeout or 30
local success, fail, time, avg = 0, 0, 0, 0
for i = 1, times do
local ipt = computer.uptime()
local pid = minitel.genPacketID()
computer.pushSignal("net_send",1,addr,0,"ping",pid)
local t,a = event.pull(timeout,"net_ack")
if t == "net_ack" and a == pid then
print("Ping reply: "..tostring(computer.uptime()-ipt).." seconds.")
if not silent then print("Ping reply: "..tostring(computer.uptime()-ipt).." seconds.") end
success = success + 1
time = time + computer.uptime()-ipt
avg = time / success
else
print("Timed out.")
if not silent then print("Timed out.") end
fail = fail + 1
end
end
if not silent then print(string.format("%d packets transmitted, %d received, %0.0f%% packet loss, %0.1fs",times,success,fail/times*100,time)) end
return success > 0, success, fail, avg
end
return netutil