end
function dhcp6_leases()
- if luci.sys.call("dnsmasq --version 2>/dev/null | grep -q ' DHCPv6 '") == 0 then
+ local nfs = require "nixio.fs"
+ local leasefile = "/tmp/hosts/6relayd"
+ local rv = {}
+
+ if nfs.access(leasefile, "r") then
+ local fd = io.open(leasefile, "r")
+ if fd then
+ while true do
+ local ln = fd:read("*l")
+ if not ln then
+ break
+ else
+ local iface, duid, iaid, name, ts, id, length, ip = ln:match("^# (%S+) (%S+) (%S+) (%S+) (%d+) (%S+) (%S+) (.*)")
+ if ip then
+ rv[#rv+1] = {
+ expires = os.difftime(tonumber(ts) or 0, os.time()),
+ duid = duid,
+ ip6addr = ip,
+ hostname = (name ~= "-") and name
+ }
+ end
+ end
+ end
+ fd:close()
+ end
+ return rv
+ elseif luci.sys.call("dnsmasq --version 2>/dev/null | grep -q ' DHCPv6 '") == 0 then
return dhcp_leases_common(6)
- else
- return nil
end
end
return { }
end
-function switch_status(dev)
- local ports = { }
- local swc = io.popen("swconfig dev %q show" % dev, "r")
- if swc then
- local l
- repeat
- l = swc:read("*l")
- if l then
- local port, up = l:match("port:(%d+) link:(%w+)")
- if port then
- local speed = l:match(" speed:(%d+)")
- local duplex = l:match(" (%w+)-duplex")
- local txflow = l:match(" (txflow)")
- local rxflow = l:match(" (rxflow)")
- local auto = l:match(" (auto)")
-
- ports[#ports+1] = {
- port = tonumber(port) or 0,
- speed = tonumber(speed) or 0,
- link = (up == "up"),
- duplex = (duplex == "full"),
- rxflow = (not not rxflow),
- txflow = (not not txflow),
- auto = (not not auto)
- }
+function switch_status(devs)
+ local dev
+ local switches = { }
+ for dev in devs:gmatch("[^%s,]+") do
+ local ports = { }
+ local swc = io.popen("swconfig dev %q show" % dev, "r")
+ if swc then
+ local l
+ repeat
+ l = swc:read("*l")
+ if l then
+ local port, up = l:match("port:(%d+) link:(%w+)")
+ if port then
+ local speed = l:match(" speed:(%d+)")
+ local duplex = l:match(" (%w+)-duplex")
+ local txflow = l:match(" (txflow)")
+ local rxflow = l:match(" (rxflow)")
+ local auto = l:match(" (auto)")
+
+ ports[#ports+1] = {
+ port = tonumber(port) or 0,
+ speed = tonumber(speed) or 0,
+ link = (up == "up"),
+ duplex = (duplex == "full"),
+ rxflow = (not not rxflow),
+ txflow = (not not txflow),
+ auto = (not not auto)
+ }
+ end
end
- end
- until not l
- swc:close()
+ until not l
+ swc:close()
+ end
+ switches[dev] = ports
end
- return ports
+ return switches
end