diff --git a/usr/bin/ping.lua b/usr/bin/ping.lua new file mode 100644 index 0000000..1de88fc --- /dev/null +++ b/usr/bin/ping.lua @@ -0,0 +1,63 @@ +local ocdns = require("ocdns") + +local name = ... +if not name then + io.stderr:write("Usage: resolve \n") + return +end + +local uuid, err = ocdns.resolve(name) +if uuid then + print("error:", err) + return +end + + +local event = require("event") +local minitel = require("minitel") + +local function pingByUUID(targetUUID, count) + count = count or 4 + local successCount = 0 + local totalTime = 0 + + print(string.format("PING %s via Minitel:", targetUUID)) + + for i = 1, count do + local t1 = computer.uptime() + local ok, err = pcall(function() + minitel.send(targetUUID, 1, "ping") -- port 1 reserved for ping + end) + + if not ok then + print(string.format("Error sending ping: %s", err)) + os.sleep(1) + else + local _, _, from, port, _, msg = event.pull(1, "minitel_message") + local t2 = computer.uptime() + + if msg == "pong" and from == targetUUID then + local rtt = (t2 - t1) * 1000 + successCount = successCount + 1 + totalTime = totalTime + rtt + print(string.format("Reply from %s: time=%.1f ms", from, rtt)) + else + print("Request timed out.") + end + end + os.sleep(1) + end + + print() + print(string.format("Ping statistics for %s:", targetUUID)) + print(string.format(" Packets: Sent = %d, Received = %d, Lost = %d (%.0f%% loss)", + count, successCount, count - successCount, + ((count - successCount) / count) * 100)) + + if successCount > 0 then + print(string.format("Approx. round trip times in milli-seconds: avg = %.1f ms", + totalTime / successCount)) + end +end + +pingByUUID(uuid, 4) diff --git a/usr/lib/ocnetlib.lua b/usr/lib/ocdns.lua similarity index 100% rename from usr/lib/ocnetlib.lua rename to usr/lib/ocdns.lua