-function jsondump(x)
- if x == nil then
- luci.http.write("null")
- elseif type(x) == "table" then
- local k, v
- if type(next(x)) == "number" then
- luci.http.write("[ ")
- for k, v in ipairs(x) do
- jsondump(v)
- if next(x, k) then
- luci.http.write(", ")
+function iface_status()
+ local path = luci.dispatcher.context.requestpath
+ local netm = require "luci.model.network".init()
+ local rv = { }
+
+ local iface
+ for iface in path[#path]:gmatch("[%w%.%-]+") do
+ local net = netm:get_network(iface)
+ if net then
+ local info
+ local dev = net:ifname()
+ local data = {
+ id = iface,
+ proto = net:proto(),
+ uptime = net:uptime(),
+ gwaddr = net:gwaddr(),
+ dnsaddrs = net:dnsaddrs()
+ }
+ for _, info in ipairs(nixio.getifaddrs()) do
+ local name = info.name:match("[^:]+")
+ if name == dev then
+ if info.family == "packet" then
+ data.flags = info.flags
+ data.stats = info.data
+ data.macaddr = info.addr
+ data.ifname = name
+ elseif info.family == "inet" then
+ data.ipaddrs = data.ipaddrs or { }
+ data.ipaddrs[#data.ipaddrs+1] = {
+ addr = info.addr,
+ broadaddr = info.broadaddr,
+ dstaddr = info.dstaddr,
+ netmask = info.netmask,
+ prefix = info.prefix
+ }
+ elseif info.family == "inet6" then
+ data.ip6addrs = data.ip6addrs or { }
+ data.ip6addrs[#data.ip6addrs+1] = {
+ addr = info.addr,
+ netmask = info.netmask,
+ prefix = info.prefix
+ }
+ end