applications/olsr: Remove macs from olsr neighbors page; show '?' for SNR when no...
[project/luci.git] / applications / luci-olsr / luasrc / controller / olsr.lua
index daedcf5..94240da 100644 (file)
@@ -135,6 +135,7 @@ function action_neigh(json)
        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 
@@ -162,9 +163,9 @@ 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 = ""
@@ -193,27 +194,18 @@ function action_neigh(json)
                                end
                        end
                elseif v.proto == '6' then
-                       local uprefix = uci:get("network", "globals", "ula_prefix") or ""
-                       uprefix = string.gsub(uprefix, "::/.*", "")
-                       ip6assign_c = 0
                        uci:foreach("network", "interface",function(vif)
-                               local ip6assign = vif.ip6assign or 0
-                               if ip6assign ~= 0 then
-                                       if ip6assign_c == 0 then
-                                               ip6assign_addr = uprefix.."::1"
-                                       else
-                                               ip6assign_addr = uprefix..":"..ip6assign_c.."::1"
+                               local name = vif['.name']
+                               local net = ntm:get_network(name)
+                               local device = net and net:get_interface()
+                               local locip = ipc.IPv6(v.localIP)
+                               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
-                                       ip6assign_c = ip6assign_c + 1
-                               end
-                               if ip6assign_addr == v.localIP then
-                                       interface = vif['.name'] or vif.interface
-                                       neihgt = neightbl.get(vif.ifname) or {}
-                                       return
-                               elseif vif.ip6addr and string.gsub(vif.ip6addr, "/"..ip6assign, "") == v.localIP then
-                                       interface = vif['.name'] or vif.interface
-                                       neihgt = neightbl.get(vif.ifname) or {}
-                                       return
                                end
                        end)
                        for ip,mac in pairs(neihgt) do
@@ -227,9 +219,9 @@ function action_neigh(json)
                                for assocmac, assot in pairs(val.list) do
                                        assocmac = string.lower(assocmac or "")
                                        if rmac == assocmac then
-                                               signal = tonumber(assot.signal)*-1
-                                               noise = tonumber(assot.noise)*-1
-                                               snr = noise - signal
+                                               signal = tonumber(assot.signal)
+                                               noise = tonumber(assot.noise)
+                                               snr = (noise*-1) - (signal*-1)
                                        end
                                end
                        end