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)
|
|
|
|
if s.SmartGateway and s.SmartGateway == "yes" then has_smartgw = true end
|
|
|
|
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")
|
|
|
|
page.target = call("action_interfaces")
|
2011-08-12 13:16:27 +00:00
|
|
|
page.title = _("Interfaces")
|
2010-12-17 02:14:28 +00:00
|
|
|
page.order = 70
|
|
|
|
|
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")
|
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"
|
2008-09-13 01:00:11 +00:00
|
|
|
|
2013-03-16 18:08:13 +00:00
|
|
|
local jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090")
|
|
|
|
local jsonreq6 = utl.exec("echo /status | nc ::1 9090")
|
|
|
|
http.prepare_content("application/json")
|
2013-03-26 10:30:41 +00:00
|
|
|
|
|
|
|
if #jsonreq4 < 1 then
|
|
|
|
jsonreq4 = "{}"
|
|
|
|
end
|
|
|
|
|
|
|
|
if #jsonreq6 < 1 then
|
|
|
|
jsonreq6 = "{}"
|
|
|
|
end
|
|
|
|
|
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")
|
|
|
|
luci.sys.net.routes(function(r) if r.dest:prefix() == 0 then defaultgw = r.gateway:string() end end)
|
|
|
|
|
|
|
|
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-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.remoteIP, nil, 100)
|
2013-03-16 18:08:13 +00:00
|
|
|
if hostname then
|
|
|
|
v.hostname = hostname
|
|
|
|
end
|
|
|
|
end
|
|
|
|
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
|
|
|
|
v.validityTime = tonumber(string.format("%.0f", v.validityTime / 1000))
|
|
|
|
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)
|
|
|
|
local utl = require "luci.util"
|
|
|
|
local json = require "luci.json"
|
|
|
|
local jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090")
|
|
|
|
local jsondata4 = {}
|
|
|
|
local jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090")
|
|
|
|
local jsondata6 = {}
|
|
|
|
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-03-16 18:08:13 +00:00
|
|
|
if #jsonreq4 ~= 0 then
|
|
|
|
has_v4 = 1
|
|
|
|
jsondata4 = json.decode(jsonreq4)
|
|
|
|
if otable == 'status' then
|
|
|
|
data4 = jsondata4
|
|
|
|
else
|
|
|
|
data4 = jsondata4[otable]
|
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(data4) do
|
|
|
|
data4[k]['proto'] = '4'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if #jsonreq6 ~= 0 then
|
|
|
|
has_v6 = 1
|
|
|
|
jsondata6 = json.decode(jsonreq6)
|
|
|
|
if otable == 'status' then
|
|
|
|
data6 = jsondata6
|
|
|
|
else
|
|
|
|
data6 = jsondata6[otable]
|
|
|
|
end
|
|
|
|
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
|
|
|
|
|
|
|
return data4, has_v4, has_v6, false
|
2008-06-06 15:50:21 +00:00
|
|
|
end
|
2013-03-16 18:08:13 +00:00
|
|
|
|