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")
+ 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")
+ end
+ if IpVersion == "6" or IpVersion == "6and4" then
+ jsonreq6 = utl.exec("echo /status | nc ::1 9090")
+ end
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)
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
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)
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)
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
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 = ""
+ 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
local jsondata4 = {}
- local jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090")
local jsondata6 = {}
local data4 = {}
local data6 = {}
return nil, 0, 0, true
end
- if #jsonreq4 ~= 0 then
+ if jsonreq4 ~= "" then
has_v4 = 1
jsondata4 = json.decode(jsonreq4)
if otable == 'status' then
end
end
- if #jsonreq6 ~= 0 then
+ if jsonreq6 ~= "" then
has_v6 = 1
jsondata6 = json.decode(jsonreq6)
if otable == 'status' then