summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-olsr/luasrc/controller/olsr.lua
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-olsr/luasrc/controller/olsr.lua')
-rw-r--r--applications/luci-app-olsr/luasrc/controller/olsr.lua412
1 files changed, 0 insertions, 412 deletions
diff --git a/applications/luci-app-olsr/luasrc/controller/olsr.lua b/applications/luci-app-olsr/luasrc/controller/olsr.lua
deleted file mode 100644
index 41897092f7..0000000000
--- a/applications/luci-app-olsr/luasrc/controller/olsr.lua
+++ /dev/null
@@ -1,412 +0,0 @@
-module("luci.controller.olsr", package.seeall)
-
-local neigh_table = nil
-local ifaddr_table = nil
-
-function index()
- local ipv4,ipv6
- if nixio.fs.access("/etc/config/olsrd") then
- ipv4 = 1
- end
- if nixio.fs.access("/etc/config/olsrd6") then
- ipv6 = 1
- end
- if not ipv4 and not ipv6 then
- return
- end
-
- 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)
-
- local page = node("admin", "status", "olsr")
- page.target = template("status-olsr/overview")
- page.title = _("OLSR")
- page.subindex = true
- page.acl_depends = { "luci-app-olsr" }
-
- local page = node("admin", "status", "olsr", "json")
- page.target = call("action_json")
- page.title = nil
- page.leaf = true
-
- local page = node("admin", "status", "olsr", "neighbors")
- page.target = call("action_neigh")
- page.title = _("Neighbours")
- page.subindex = true
- page.order = 5
-
- local page = node("admin", "status", "olsr", "routes")
- page.target = call("action_routes")
- page.title = _("Routes")
- page.order = 10
-
- local page = node("admin", "status", "olsr", "topology")
- page.target = call("action_topology")
- page.title = _("Topology")
- page.order = 20
-
- local page = node("admin", "status", "olsr", "hna")
- page.target = call("action_hna")
- page.title = _("HNA")
- page.order = 30
-
- local page = node("admin", "status", "olsr", "mid")
- page.target = call("action_mid")
- page.title = _("MID")
- page.order = 50
-
- if has_smartgw then
- local page = node("admin", "status", "olsr", "smartgw")
- page.target = call("action_smartgw")
- page.title = _("SmartGW")
- page.order = 60
- end
-
- local page = node("admin", "status", "olsr", "interfaces")
- page.target = call("action_interfaces")
- page.title = _("Interfaces")
- page.order = 70
-
- odsp = entry(
- {"admin", "services", "olsrd", "display"},
- cbi("olsr/olsrddisplay"), _("Display")
- )
-end
-
-function action_json()
- local http = require "luci.http"
- local utl = require "luci.util"
- local uci = require "luci.model.uci".cursor()
- local jsonreq4
- local jsonreq6
-
- local v4_port = tonumber(uci:get("olsrd", "olsrd_jsoninfo", "port") or "") or 9090
- local v6_port = tonumber(uci:get("olsrd6", "olsrd_jsoninfo", "port") or "") or 9090
-
- jsonreq4 = utl.exec("(echo /all | nc 127.0.0.1 %d | sed -n '/^[}{ ]/p') 2>/dev/null" % v4_port)
- jsonreq6 = utl.exec("(echo /all | nc ::1 %d | sed -n '/^[}{ ]/p') 2>/dev/null" % v6_port)
- http.prepare_content("application/json")
- if not jsonreq4 or jsonreq4 == "" then
- jsonreq4 = "{}"
- end
- if not jsonreq6 or jsonreq6 == "" then
- jsonreq6 = "{}"
- end
- http.write('{"v4":' .. jsonreq4 .. ', "v6":' .. jsonreq6 .. '}')
-end
-
-
-local function local_mac_lookup(ipaddr)
- local _, rt
- for _, rt in ipairs(luci.ip.routes({ type = 1, src = ipaddr })) do
- local link = rt.dev and luci.ip.link(rt.dev)
- local mac = link and luci.ip.checkmac(link.mac)
- if mac then return mac end
- end
-end
-
-local function remote_mac_lookup(ipaddr)
- local _, n
- for _, n in ipairs(luci.ip.neighbors({ dest = ipaddr })) do
- local mac = luci.ip.checkmac(n.mac)
- if mac then return mac end
- end
-end
-
-function action_neigh(json)
- local data, has_v4, has_v6, error = fetch_jsoninfo('links')
-
- if error then
- return
- end
-
- local uci = require "luci.model.uci".cursor_state()
- local resolve = uci:get("luci_olsr", "general", "resolve")
- local ntm = require "luci.model.network".init()
- local devices = ntm:get_wifidevs()
- local sys = require "luci.sys"
- local assoclist = {}
- local ntm = require "luci.model.network"
- local ipc = require "luci.ip"
- local nxo = require "nixio"
- local defaultgw
-
- ipc.routes({ family = 4, type = 1, dest_exact = "0.0.0.0/0" },
- function(rt) defaultgw = rt.gw end)
-
- local function compare(a,b)
- if a.proto == b.proto then
- return a.linkCost < b.linkCost
- else
- return a.proto < b.proto
- end
- end
-
- for _, dev in ipairs(devices) do
- for _, net in ipairs(dev:get_wifinets()) do
- local radio = net:get_device()
- assoclist[#assoclist+1] = {}
- assoclist[#assoclist]['ifname'] = net:ifname()
- assoclist[#assoclist]['network'] = net:network()[1]
- assoclist[#assoclist]['device'] = radio and radio:name() or nil
- assoclist[#assoclist]['list'] = net:assoclist()
- end
- end
-
- for k, v in ipairs(data) do
- local snr = 0
- local signal = 0
- local noise = 0
- local mac = ""
- local ip
- local neihgt = {}
-
- if resolve == "1" then
- hostname = nixio.getnameinfo(v.remoteIP, nil, 100)
- if hostname then
- v.hostname = hostname
- end
- end
-
- local interface = ntm:get_status_by_address(v.localIP)
- local lmac = local_mac_lookup(v.localIP)
- local rmac = remote_mac_lookup(v.remoteIP)
-
- for _, val in ipairs(assoclist) do
- if val.network == interface and val.list then
- local assocmac, assot
- for assocmac, assot in pairs(val.list) do
- if rmac == luci.ip.checkmac(assocmac) then
- signal = tonumber(assot.signal)
- noise = tonumber(assot.noise)
- snr = (noise*-1) - (signal*-1)
- end
- end
- end
- 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
-
- if defaultgw == v.remoteIP then
- v.defaultgw = 1
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/neighbors", {links=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_routes()
- local data, has_v4, has_v6, error = fetch_jsoninfo('routes')
- if error then
- return
- end
-
- local uci = require "luci.model.uci".cursor_state()
- local resolve = uci:get("luci_olsr", "general", "resolve")
-
- for k, v in ipairs(data) do
- if resolve == "1" then
- local hostname = nixio.getnameinfo(v.gateway, nil, 100)
- if hostname then
- v.hostname = hostname
- end
- end
- end
-
- local function compare(a,b)
- if a.proto == b.proto then
- return a.rtpMetricCost < b.rtpMetricCost
- else
- return a.proto < b.proto
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/routes", {routes=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_topology()
- local data, has_v4, has_v6, error = fetch_jsoninfo('topology')
- if error then
- return
- end
-
- local function compare(a,b)
- if a.proto == b.proto then
- return a.tcEdgeCost < b.tcEdgeCost
- else
- return a.proto < b.proto
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/topology", {routes=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_hna()
- local data, has_v4, has_v6, error = fetch_jsoninfo('hna')
- if error then
- return
- end
-
- 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
- end
-
- for k, v in ipairs(data) do
- if resolve == "1" then
- hostname = nixio.getnameinfo(v.gateway, nil, 100)
- if hostname then
- v.hostname = hostname
- end
- end
- if v.validityTime then
- v.validityTime = tonumber(string.format("%.0f", v.validityTime / 1000))
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/hna", {hna=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_mid()
- local data, has_v4, has_v6, error = fetch_jsoninfo('mid')
- if error then
- return
- end
-
- local function compare(a,b)
- if a.proto == b.proto then
- return a.main.ipAddress < b.main.ipAddress
- else
- return a.proto < b.proto
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/mid", {mids=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_smartgw()
- local data, has_v4, has_v6, error = fetch_jsoninfo('gateways')
- if error then
- return
- end
-
- local function compare(a,b)
- if a.proto == b.proto then
- return a.cost < b.cost
- else
- return a.proto < b.proto
- end
- end
-
- table.sort(data.ipv4, compare)
- table.sort(data.ipv6, compare)
- luci.template.render("status-olsr/smartgw", {gws=data, has_v4=has_v4, has_v6=has_v6})
-end
-
-function action_interfaces()
- local data, has_v4, has_v6, error = fetch_jsoninfo('interfaces')
- local ntm = require "luci.model.network".init()
-
- if error then
- return
- end
-
- local function compare(a,b)
- return a.proto < b.proto
- end
-
- for k, v in ipairs(data) do
- local interface = ntm:get_status_by_address(v.olsrInterface.ipAddress)
- if interface then
- v.interface = interface
- end
- end
-
- table.sort(data, compare)
- luci.template.render("status-olsr/interfaces", {iface=data, has_v4=has_v4, has_v6=has_v6})
-end
-
--- Internal
-function fetch_jsoninfo(otable)
- local uci = require "luci.model.uci".cursor_state()
- local utl = require "luci.util"
- local json = require "luci.json"
- local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
- local jsonreq4 = ""
- local jsonreq6 = ""
- local v4_port = tonumber(uci:get("olsrd", "olsrd_jsoninfo", "port") or "") or 9090
- local v6_port = tonumber(uci:get("olsrd6", "olsrd_jsoninfo", "port") or "") or 9090
-
- jsonreq4 = utl.exec("(echo /%s | nc 127.0.0.1 %d | sed -n '/^[}{ ]/p') 2>/dev/null" %{ otable, v4_port })
- jsonreq6 = utl.exec("(echo /%s | nc ::1 %d | sed -n '/^[}{ ]/p') 2>/dev/null" %{ otable, v6_port })
- local jsondata4 = {}
- 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
- end
-
- if jsonreq4 ~= "" then
- has_v4 = 1
- jsondata4 = json.decode(jsonreq4) or {}
- if otable == 'status' then
- data4 = jsondata4
- else
- data4 = jsondata4[otable] or {}
- end
-
- for k, v in ipairs(data4) do
- data4[k]['proto'] = '4'
- end
-
- end
- if jsonreq6 ~= "" then
- has_v6 = 1
- jsondata6 = json.decode(jsonreq6) or {}
- if otable == 'status' then
- data6 = jsondata6
- else
- data6 = jsondata6[otable] or {}
- end
- for k, v in ipairs(data6) do
- data6[k]['proto'] = '6'
- end
- end
-
- for k, v in ipairs(data6) do
- table.insert(data4, v)
- end
-
- return data4, has_v4, has_v6, false
-end
-