X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=applications%2Fluci-olsr%2Fluasrc%2Fcontroller%2Folsr.lua;h=4573f690b598142c152eaacfafb3a10dee8f7b47;hp=4623f132c177886084a9fdaa229565a0426c52f4;hb=89a03c45c532249a26fbd09fec9888ef5186acf0;hpb=38aa51a39141af9432a957579dffc0e6932c63c9 diff --git a/applications/luci-olsr/luasrc/controller/olsr.lua b/applications/luci-olsr/luasrc/controller/olsr.lua index 4623f132c..4573f690b 100644 --- a/applications/luci-olsr/luasrc/controller/olsr.lua +++ b/applications/luci-olsr/luasrc/controller/olsr.lua @@ -1,7 +1,14 @@ module("luci.controller.olsr", package.seeall) function index() - if not nixio.fs.access("/etc/config/olsrd") then + 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 @@ -60,65 +67,30 @@ function index() page.title = _("Interfaces") page.order = 70 - local ol = entry( - {"admin", "services", "olsrd"}, - cbi("olsr/olsrd"), "OLSR" - ) - ol.subindex = true - - entry( - {"admin", "services", "olsrd", "iface"}, - cbi("olsr/olsrdiface") - ).leaf = true - - entry( - {"admin", "services", "olsrd", "hna"}, - cbi("olsr/olsrdhna"), _("HNA Announcements") - ) - - oplg = entry( - {"admin", "services", "olsrd", "plugins"}, - cbi("olsr/olsrdplugins"), _("Plugins") - ) - odsp = entry( {"admin", "services", "olsrd", "display"}, cbi("olsr/olsrddisplay"), _("Display") ) - oplg.leaf = true - oplg.subindex = true - - 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 - ) end function action_json() local http = require "luci.http" local utl = require "luci.util" + local uci = require "luci.model.uci".cursor_state() + local jsonreq4 + local jsonreq6 - local jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090") - local jsonreq6 = utl.exec("echo /status | nc ::1 9090") + jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090") + jsonreq6 = utl.exec("echo /status | nc ::1 9090") http.prepare_content("application/json") - - if #jsonreq4 < 1 then + if not jsonreq4 or jsonreq4 == "" then jsonreq4 = "{}" end - - if #jsonreq6 < 1 then + if not jsonreq6 or jsonreq6 == "" then jsonreq6 = "{}" end - - http.write("{v4:" .. jsonreq4 .. ", v6:" .. jsonreq6 .. "}") + http.write('{"v4":' .. jsonreq4 .. ', "v6":' .. jsonreq6 .. '}') end function action_neigh(json) @@ -134,6 +106,8 @@ function action_neigh(json) local devices = ntm:get_wifidevs() local sys = require "luci.sys" local assoclist = {} + --local neightbl = require "neightbl" + local ipc = require "luci.ip" luci.sys.net.routes(function(r) if r.dest:prefix() == 0 then @@ -161,14 +135,15 @@ function action_neigh(json) for k, v in ipairs(data) do local interface - local snr = 1 - local signal = 1 - local noise = 1 + local snr = 0 + local signal = 0 + local noise = 0 local arptable = sys.net.arptable() - local mac - local rmac - local lmac + local mac = "" + local rmac = "" + local lmac = "" local ip + local neihgt = {} if resolve == "1" then hostname = nixio.getnameinfo(v.remoteIP, nil, 100) @@ -180,7 +155,7 @@ function action_neigh(json) uci:foreach("network", "interface",function(vif) if vif.ipaddr and vif.ipaddr == v.localIP then interface = vif['.name'] or vif.interface - lmac = string.lower(vif.macaddr or "") + lmac = string.lower(vif.macaddr or "") return end end) @@ -190,25 +165,42 @@ function action_neigh(json) rmac = string.lower(arpt['HW address'] or "") 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 - signal = tonumber(assot.signal) - noise = tonumber(assot.noise) - snr = signal/noise + elseif v.proto == '6' then + uci:foreach("network", "interface",function(vif) + local name = vif['.name'] + local net = ntm:get_network(name) + local device = net and net:get_interface() + local locip = ipc.IPv6(v.localIP) + 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 end end end + end) + --[[ + for ip,mac in pairs(neihgt) do + if ip == v.remoteIP then + rmac = mac + end end - elseif v.proto == '6' then - uci:foreach("network", "interface",function(vif) - if vif.ip6addr and string.gsub(vif.ip6addr, "/64", "") == v.localIP then - interface = vif['.name'] or vif.interface - return + ]]-- + 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 + signal = tonumber(assot.signal) + noise = tonumber(assot.noise) + snr = (noise*-1) - (signal*-1) + end end - end) + end end if interface then v.interface = interface @@ -368,9 +360,12 @@ function fetch_jsoninfo(otable) local uci = require "luci.model.uci".cursor_state() local utl = require "luci.util" local json = require "luci.json" - local jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090") + local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion") + local jsonreq4 = "" + local jsonreq6 = "" + jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090") + jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090") local jsondata4 = {} - local jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090") local jsondata6 = {} local data4 = {} local data6 = {} @@ -382,7 +377,7 @@ function fetch_jsoninfo(otable) return nil, 0, 0, true end - if #jsonreq4 ~= 0 then + if jsonreq4 ~= "" then has_v4 = 1 jsondata4 = json.decode(jsonreq4) if otable == 'status' then @@ -396,7 +391,7 @@ function fetch_jsoninfo(otable) end end - if #jsonreq6 ~= 0 then + if jsonreq6 ~= "" then has_v6 = 1 jsondata6 = json.decode(jsonreq6) if otable == 'status' then