+local uci = require("luci.model.uci")
+require("luci.sys")
+require("luci.ip")
+
+function byte_format(byte)
+ local suff = {"B", "KB", "MB", "GB", "TB"}
+ for i=1, 5 do
+ if byte > 1024 and i < 5 then
+ byte = byte / 1024
+ else
+ return string.format("%.2f %s", byte, suff[i])
+ end
+ end
+end
+
+function date_format(secs)
+ local suff = {"min", "h", "d"}
+ local mins = 0
+ local hour = 0
+ local days = 0
+
+ secs = math.floor(secs)
+ if secs > 60 then
+ mins = math.floor(secs / 60)
+ secs = secs % 60
+ end
+
+ if mins > 60 then
+ hour = math.floor(mins / 60)
+ mins = mins % 60
+ end
+
+ if hour > 24 then
+ days = math.floor(hour / 24)
+ hour = hour % 24
+ end
+
+ if days > 0 then
+ return string.format("%.0fd %02.0fh %02.0fmin %02.0fs", days, hour, mins, secs)
+ else
+ return string.format("%02.0fh %02.0fmin %02.0fs", hour, mins, secs)
+ end
+end
+
+function network_get_addresses(net)
+ local state = uci.cursor_state()
+ state:load("network")
+ local addr = {}
+ local ipv4 = state:get("network", net, "ipaddr")
+ local mav4 = state:get("network", net, "netmask")
+ local ipv6 = state:get("network", net, "ip6addr")
+
+ if ipv4 and #ipv4 > 0 then
+ if mav4 and #mav4 == 0 then mav4 = nil end
+
+ ipv4 = luci.ip.IPv4(ipv4, mav4)
+
+ if ipv4 then
+ table.insert(addr, ipv4:string())
+ end
+ end
+
+ if ipv6 then
+ table.insert(addr, ipv6)
+ end
+
+ state:foreach("network", "alias",
+ function (section)
+ if section.interface == net then
+ if section.ipaddr and section.netmask then
+ local ipv4 = luci.ip.IPv4(section.ipaddr, section.netmask)
+
+ if ipv4 then
+ table.insert(addr, ipv4:string())
+ end
+ end
+
+ if section.ip6addr then
+ table.insert(addr, section.ip6addr)
+ end
+ end
+ end
+ )
+
+ return addr
+end