2008-06-06 15:50:21 +00:00
|
|
|
module("luci.controller.olsr", package.seeall)
|
2008-05-08 16:14:49 +00:00
|
|
|
|
2008-05-22 14:04:03 +00:00
|
|
|
function index()
|
2009-07-19 00:24:58 +00:00
|
|
|
if not nixio.fs.access("/etc/config/olsrd") then
|
2008-06-08 08:14:31 +00:00
|
|
|
return
|
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
require("luci.model.uci")
|
|
|
|
local uci = luci.model.uci.cursor_state()
|
|
|
|
|
|
|
|
uci:foreach("olsrd", "olsrd", function(s)
|
2013-07-02 22:31:04 +00:00
|
|
|
if s.SmartGateway and s.SmartGateway == "yes" then has_smartgw = true end
|
2013-03-16 18:08:13 +00:00
|
|
|
end)
|
|
|
|
|
2008-06-02 20:16:05 +00:00
|
|
|
local page = node("admin", "status", "olsr")
|
2010-12-17 02:14:28 +00:00
|
|
|
page.target = template("status-olsr/overview")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("OLSR")
|
2008-10-09 20:28:07 +00:00
|
|
|
page.subindex = true
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local page = node("admin", "status", "olsr", "json")
|
|
|
|
page.target = call("action_json")
|
|
|
|
page.title = nil
|
|
|
|
page.leaf = true
|
|
|
|
|
2010-12-17 02:14:28 +00:00
|
|
|
local page = node("admin", "status", "olsr", "neighbors")
|
|
|
|
page.target = call("action_neigh")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("Neighbours")
|
2010-12-17 02:14:28 +00:00
|
|
|
page.subindex = true
|
|
|
|
page.order = 5
|
|
|
|
|
2008-06-02 20:16:05 +00:00
|
|
|
local page = node("admin", "status", "olsr", "routes")
|
2008-05-27 20:39:48 +00:00
|
|
|
page.target = call("action_routes")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("Routes")
|
2008-05-22 14:04:03 +00:00
|
|
|
page.order = 10
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2008-06-02 20:16:05 +00:00
|
|
|
local page = node("admin", "status", "olsr", "topology")
|
2008-05-27 20:39:48 +00:00
|
|
|
page.target = call("action_topology")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("Topology")
|
2008-05-22 14:04:03 +00:00
|
|
|
page.order = 20
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2008-06-02 20:16:05 +00:00
|
|
|
local page = node("admin", "status", "olsr", "hna")
|
2008-05-27 20:39:48 +00:00
|
|
|
page.target = call("action_hna")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("HNA")
|
2008-05-22 14:04:03 +00:00
|
|
|
page.order = 30
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2008-06-02 20:16:05 +00:00
|
|
|
local page = node("admin", "status", "olsr", "mid")
|
2008-05-27 20:39:48 +00:00
|
|
|
page.target = call("action_mid")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("MID")
|
2008-05-22 14:04:03 +00:00
|
|
|
page.order = 50
|
2008-06-06 15:50:21 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
if has_smartgw then
|
|
|
|
local page = node("admin", "status", "olsr", "smartgw")
|
|
|
|
page.target = call("action_smartgw")
|
|
|
|
page.title = _("SmartGW")
|
|
|
|
page.order = 60
|
|
|
|
end
|
2010-12-05 19:06:18 +00:00
|
|
|
|
2010-12-17 02:14:28 +00:00
|
|
|
local page = node("admin", "status", "olsr", "interfaces")
|
2013-07-02 22:31:04 +00:00
|
|
|
page.target = call("action_interfaces")
|
|
|
|
page.title = _("Interfaces")
|
|
|
|
page.order = 70
|
2010-12-17 02:14:28 +00:00
|
|
|
|
2008-10-09 20:28:07 +00:00
|
|
|
local ol = entry(
|
2008-09-13 01:00:11 +00:00
|
|
|
{"admin", "services", "olsrd"},
|
|
|
|
cbi("olsr/olsrd"), "OLSR"
|
2008-10-09 20:28:07 +00:00
|
|
|
)
|
|
|
|
ol.subindex = true
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2010-12-05 01:55:02 +00:00
|
|
|
entry(
|
|
|
|
{"admin", "services", "olsrd", "iface"},
|
|
|
|
cbi("olsr/olsrdiface")
|
|
|
|
).leaf = true
|
|
|
|
|
2008-09-13 01:00:11 +00:00
|
|
|
entry(
|
|
|
|
{"admin", "services", "olsrd", "hna"},
|
2011-08-12 13:16:27 +00:00
|
|
|
cbi("olsr/olsrdhna"), _("HNA Announcements")
|
2008-10-09 20:28:07 +00:00
|
|
|
)
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2008-09-13 17:24:35 +00:00
|
|
|
oplg = entry(
|
2008-09-13 01:00:11 +00:00
|
|
|
{"admin", "services", "olsrd", "plugins"},
|
2011-08-12 13:16:27 +00:00
|
|
|
cbi("olsr/olsrdplugins"), _("Plugins")
|
2008-09-13 17:24:35 +00:00
|
|
|
)
|
2011-02-12 13:53:29 +00:00
|
|
|
|
|
|
|
odsp = entry(
|
|
|
|
{"admin", "services", "olsrd", "display"},
|
2011-08-12 13:16:27 +00:00
|
|
|
cbi("olsr/olsrddisplay"), _("Display")
|
2013-07-02 22:31:04 +00:00
|
|
|
)
|
2011-02-12 13:53:29 +00:00
|
|
|
|
2008-09-13 17:24:35 +00:00
|
|
|
oplg.leaf = true
|
2008-10-09 20:28:07 +00:00
|
|
|
oplg.subindex = true
|
2008-09-13 17:24:35 +00:00
|
|
|
|
|
|
|
local uci = require("luci.model.uci").cursor()
|
|
|
|
uci:foreach("olsrd", "LoadPlugin",
|
|
|
|
function (section)
|
|
|
|
local lib = section.library
|
|
|
|
entry(
|
|
|
|
{"admin", "services", "olsrd", "plugins", lib },
|
|
|
|
cbi("olsr/olsrdplugins"),
|
|
|
|
nil --'Plugin "%s"' % lib:gsub("^olsrd_",""):gsub("%.so.+$","")
|
|
|
|
)
|
|
|
|
end
|
|
|
|
)
|
2008-05-22 14:04:03 +00:00
|
|
|
end
|
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
function action_json()
|
|
|
|
local http = require "luci.http"
|
|
|
|
local utl = require "luci.util"
|
2013-08-07 20:25:17 +00:00
|
|
|
local uci = require "luci.model.uci".cursor_state()
|
|
|
|
local jsonreq4 = ""
|
|
|
|
local jsonreq6 = ""
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-08-07 20:25:17 +00:00
|
|
|
local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
|
|
|
|
if IpVersion == "4" or IpVersion == "6and4" then
|
|
|
|
jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090")
|
2013-03-26 10:30:41 +00:00
|
|
|
end
|
2013-08-07 20:25:17 +00:00
|
|
|
if IpVersion == "6" or IpVersion == "6and4" then
|
|
|
|
jsonreq6 = utl.exec("echo /status | nc ::1 9090")
|
2013-03-26 10:30:41 +00:00
|
|
|
end
|
2013-08-07 20:25:17 +00:00
|
|
|
http.prepare_content("application/json")
|
2013-03-26 10:30:41 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
http.write("{v4:" .. jsonreq4 .. ", v6:" .. jsonreq6 .. "}")
|
2011-11-09 18:12:25 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2011-11-09 18:12:25 +00:00
|
|
|
function action_neigh(json)
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('links')
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
if error then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local uci = require "luci.model.uci".cursor_state()
|
|
|
|
local resolve = uci:get("luci_olsr", "general", "resolve")
|
2013-07-02 22:31:04 +00:00
|
|
|
local ntm = require "luci.model.network".init()
|
|
|
|
local devices = ntm:get_wifidevs()
|
|
|
|
local sys = require "luci.sys"
|
|
|
|
local assoclist = {}
|
2013-07-07 20:16:39 +00:00
|
|
|
local neightbl = require "neightbl"
|
2013-07-25 08:32:04 +00:00
|
|
|
local ipc = require "luci.ip"
|
2013-07-02 22:31:04 +00:00
|
|
|
|
|
|
|
luci.sys.net.routes(function(r)
|
|
|
|
if r.dest:prefix() == 0 then
|
|
|
|
defaultgw = r.gateway:string()
|
|
|
|
end
|
|
|
|
end)
|
2013-03-16 18:08:13 +00:00
|
|
|
|
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.linkCost < b.linkCost
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-07-02 22:31:04 +00:00
|
|
|
for _, dev in ipairs(devices) do
|
|
|
|
for _, net in ipairs(dev:get_wifinets()) do
|
|
|
|
assoclist[#assoclist+1] = {}
|
|
|
|
assoclist[#assoclist]['ifname'] = net.iwdata.ifname
|
|
|
|
assoclist[#assoclist]['network'] = net.iwdata.network
|
|
|
|
assoclist[#assoclist]['device'] = net.iwdata.device
|
|
|
|
assoclist[#assoclist]['list'] = net.iwinfo.assoclist
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
for k, v in ipairs(data) do
|
2013-07-02 22:31:04 +00:00
|
|
|
local interface
|
2013-08-01 21:53:58 +00:00
|
|
|
local snr = 0
|
|
|
|
local signal = 0
|
|
|
|
local noise = 0
|
2013-07-02 22:31:04 +00:00
|
|
|
local arptable = sys.net.arptable()
|
2013-07-07 20:16:39 +00:00
|
|
|
local mac = ""
|
|
|
|
local rmac = ""
|
|
|
|
local lmac = ""
|
2013-07-02 22:31:04 +00:00
|
|
|
local ip
|
2013-07-07 20:16:39 +00:00
|
|
|
local neihgt = {}
|
2013-07-02 22:31:04 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
if resolve == "1" then
|
2013-03-17 12:21:30 +00:00
|
|
|
hostname = nixio.getnameinfo(v.remoteIP, nil, 100)
|
2013-03-16 18:08:13 +00:00
|
|
|
if hostname then
|
|
|
|
v.hostname = hostname
|
|
|
|
end
|
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
if v.proto == '4' then
|
|
|
|
uci:foreach("network", "interface",function(vif)
|
|
|
|
if vif.ipaddr and vif.ipaddr == v.localIP then
|
|
|
|
interface = vif['.name'] or vif.interface
|
2013-07-07 20:16:39 +00:00
|
|
|
lmac = string.lower(vif.macaddr or "")
|
2013-07-02 22:31:04 +00:00
|
|
|
return
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
for _, arpt in ipairs(arptable) do
|
|
|
|
ip = arpt['IP address']
|
|
|
|
if ip == v.remoteIP then
|
|
|
|
rmac = string.lower(arpt['HW address'] or "")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
elseif v.proto == '6' then
|
|
|
|
uci:foreach("network", "interface",function(vif)
|
2013-07-25 08:32:04 +00:00
|
|
|
local name = vif['.name']
|
|
|
|
local net = ntm:get_network(name)
|
|
|
|
local device = net and net:get_interface()
|
|
|
|
local locip = ipc.IPv6(v.localIP)
|
2013-08-11 21:07:25 +00:00
|
|
|
if device and device:ip6addrs() and locip then
|
|
|
|
for _, a in ipairs(device:ip6addrs()) do
|
|
|
|
if not a:is6linklocal() then
|
|
|
|
if a:host() == locip:host() then
|
|
|
|
interface = name
|
|
|
|
neihgt = neightbl.get(device.ifname) or {}
|
|
|
|
end
|
2013-07-25 08:32:04 +00:00
|
|
|
end
|
2013-07-07 20:16:39 +00:00
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
end
|
|
|
|
end)
|
2013-07-07 20:16:39 +00:00
|
|
|
for ip,mac in pairs(neihgt) do
|
|
|
|
if ip == v.remoteIP then
|
|
|
|
rmac = mac
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
for _, val in ipairs(assoclist) do
|
|
|
|
if val.network == interface and val.list then
|
|
|
|
for assocmac, assot in pairs(val.list) do
|
|
|
|
assocmac = string.lower(assocmac or "")
|
|
|
|
if rmac == assocmac then
|
2013-07-10 18:11:09 +00:00
|
|
|
signal = tonumber(assot.signal)
|
|
|
|
noise = tonumber(assot.noise)
|
|
|
|
snr = (noise*-1) - (signal*-1)
|
2013-07-07 20:16:39 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
end
|
|
|
|
if interface then
|
|
|
|
v.interface = interface
|
|
|
|
end
|
|
|
|
v.snr = snr
|
|
|
|
v.signal = signal
|
|
|
|
v.noise = noise
|
|
|
|
if rmac then
|
|
|
|
v.remoteMAC = rmac
|
|
|
|
end
|
|
|
|
if lmac then
|
|
|
|
v.localMAC = lmac
|
|
|
|
end
|
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
if defaultgw == v.remoteIP then
|
|
|
|
v.defaultgw = 1
|
|
|
|
end
|
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/neighbors", {links=data, has_v4=has_v4, has_v6=has_v6})
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function action_routes()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('routes')
|
|
|
|
if error then
|
|
|
|
return
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local uci = require "luci.model.uci".cursor_state()
|
|
|
|
local resolve = uci:get("luci_olsr", "general", "resolve")
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
for k, v in ipairs(data) do
|
|
|
|
if resolve == "1" then
|
2013-03-17 12:21:30 +00:00
|
|
|
local hostname = nixio.getnameinfo(v.gateway, nil, 100)
|
2013-03-16 18:08:13 +00:00
|
|
|
if hostname then
|
|
|
|
v.hostname = hostname
|
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2013-03-16 18:08:13 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.rtpMetricCost < b.rtpMetricCost
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/routes", {routes=data, has_v4=has_v4, has_v6=has_v6})
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function action_topology()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('topology')
|
|
|
|
if error then
|
|
|
|
return
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.tcEdgeCost < b.tcEdgeCost
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/topology", {routes=data, has_v4=has_v4, has_v6=has_v6})
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function action_hna()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('hna')
|
|
|
|
if error then
|
|
|
|
return
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local uci = require "luci.model.uci".cursor_state()
|
|
|
|
local resolve = uci:get("luci_olsr", "general", "resolve")
|
|
|
|
|
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.genmask < b.genmask
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
for k, v in ipairs(data) do
|
|
|
|
if resolve == "1" then
|
2013-03-17 12:21:30 +00:00
|
|
|
hostname = nixio.getnameinfo(v.gateway, nil, 100)
|
2013-03-16 18:08:13 +00:00
|
|
|
if hostname then
|
|
|
|
v.hostname = hostname
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if v.validityTime then
|
2013-07-02 22:31:04 +00:00
|
|
|
v.validityTime = tonumber(string.format("%.0f", v.validityTime / 1000))
|
2013-03-16 18:08:13 +00:00
|
|
|
end
|
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/hna", {hna=data, has_v4=has_v4, has_v6=has_v6})
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function action_mid()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('mid')
|
|
|
|
if error then
|
|
|
|
return
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.ipAddress < b.ipAddress
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/mid", {mids=data, has_v4=has_v4, has_v6=has_v6})
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
|
|
|
|
2010-12-05 15:02:44 +00:00
|
|
|
function action_smartgw()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('gateways')
|
|
|
|
if error then
|
|
|
|
return
|
|
|
|
end
|
2010-12-05 15:02:44 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local function compare(a,b)
|
|
|
|
if a.proto == b.proto then
|
|
|
|
return a.tcPathCost < b.tcPathCost
|
|
|
|
else
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
|
|
|
end
|
2010-12-05 15:02:44 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/smartgw", {gws=data, has_v4=has_v4, has_v6=has_v6})
|
2010-12-05 15:02:44 +00:00
|
|
|
end
|
|
|
|
|
2010-12-17 02:14:28 +00:00
|
|
|
function action_interfaces()
|
2013-03-16 18:08:13 +00:00
|
|
|
local data, has_v4, has_v6, error = fetch_jsoninfo('interfaces')
|
|
|
|
if error then
|
|
|
|
return
|
|
|
|
end
|
2010-12-17 02:14:28 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local function compare(a,b)
|
|
|
|
return a.proto < b.proto
|
|
|
|
end
|
2010-12-05 15:02:44 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
table.sort(data, compare)
|
|
|
|
luci.template.render("status-olsr/interfaces", {iface=data, has_v4=has_v4, has_v6=has_v6})
|
2010-12-17 02:14:28 +00:00
|
|
|
end
|
2008-05-08 16:14:49 +00:00
|
|
|
|
|
|
|
-- Internal
|
2013-03-16 18:08:13 +00:00
|
|
|
function fetch_jsoninfo(otable)
|
2013-07-02 22:31:04 +00:00
|
|
|
local uci = require "luci.model.uci".cursor_state()
|
2013-03-16 18:08:13 +00:00
|
|
|
local utl = require "luci.util"
|
|
|
|
local json = require "luci.json"
|
2013-08-07 20:25:17 +00:00
|
|
|
local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
|
|
|
|
local jsonreq4 = ""
|
|
|
|
local jsonreq6 = ""
|
|
|
|
if IpVersion == "4" or IpVersion == "6and4" then
|
|
|
|
jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090")
|
|
|
|
end
|
|
|
|
if IpVersion == "6" or IpVersion == "6and4" then
|
|
|
|
jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090")
|
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
local jsondata4 = {}
|
|
|
|
local jsondata6 = {}
|
2013-03-16 18:08:13 +00:00
|
|
|
local data4 = {}
|
|
|
|
local data6 = {}
|
|
|
|
local has_v4 = False
|
|
|
|
local has_v6 = False
|
|
|
|
|
|
|
|
if jsonreq4 == '' and jsonreq6 == '' then
|
|
|
|
luci.template.render("status-olsr/error_olsr")
|
|
|
|
return nil, 0, 0, true
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-08-07 20:25:17 +00:00
|
|
|
if jsonreq4 ~= "" then
|
2013-03-16 18:08:13 +00:00
|
|
|
has_v4 = 1
|
2013-07-02 22:31:04 +00:00
|
|
|
jsondata4 = json.decode(jsonreq4)
|
2013-03-16 18:08:13 +00:00
|
|
|
if otable == 'status' then
|
2013-07-02 22:31:04 +00:00
|
|
|
data4 = jsondata4 or {}
|
2013-03-16 18:08:13 +00:00
|
|
|
else
|
2013-07-02 22:31:04 +00:00
|
|
|
data4 = jsondata4[otable] or {}
|
2008-05-08 16:14:49 +00:00
|
|
|
end
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-07-02 22:31:04 +00:00
|
|
|
for k, v in ipairs(data4) do
|
|
|
|
data4[k]['proto'] = '4'
|
2013-03-16 18:08:13 +00:00
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
|
|
|
|
end
|
2013-08-07 20:25:17 +00:00
|
|
|
if jsonreq6 ~= "" then
|
2013-03-16 18:08:13 +00:00
|
|
|
has_v6 = 1
|
2013-07-02 22:31:04 +00:00
|
|
|
jsondata6 = json.decode(jsonreq6)
|
2013-03-16 18:08:13 +00:00
|
|
|
if otable == 'status' then
|
2013-07-02 22:31:04 +00:00
|
|
|
data6 = jsondata6 or {}
|
2013-03-16 18:08:13 +00:00
|
|
|
else
|
2013-07-02 22:31:04 +00:00
|
|
|
data6 = jsondata6[otable] or {}
|
2013-03-16 18:08:13 +00:00
|
|
|
end
|
2013-07-02 22:31:04 +00:00
|
|
|
for k, v in ipairs(data6) do
|
|
|
|
data6[k]['proto'] = '6'
|
|
|
|
end
|
|
|
|
end
|
2010-12-05 15:02:44 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
for k, v in ipairs(data6) do
|
|
|
|
table.insert(data4, v)
|
2010-12-05 15:02:44 +00:00
|
|
|
end
|
2013-03-16 18:08:13 +00:00
|
|
|
|
2013-07-02 22:31:04 +00:00
|
|
|
return data4, has_v4, has_v6, false
|
2008-06-06 15:50:21 +00:00
|
|
|
end
|
2013-03-16 18:08:13 +00:00
|
|
|
|