gluon-mesh-batman-adv-core: Announce client count by frequency

This commit is contained in:
Jan-Philipp Litza 2015-08-29 23:37:40 +02:00
parent 4405f39869
commit 89a9d8138c
1 changed files with 43 additions and 8 deletions

View File

@ -1,20 +1,55 @@
local list = io.lines("/sys/kernel/debug/batman_adv/bat0/transtable_local")
local iwinfo = require 'iwinfo'
local count = 0
local wifi = 0
local counts = { total = 0
, wifi = 0
, wifi24 = 0
, wifi5 = 0
}
local list = io.lines("/sys/kernel/debug/batman_adv/bat0/transtable_local")
local clients = {}
for line in list do
local mac, _, flags, lastseen = line:match("^ %* ([0-9a-f:]+) *(.- )%[(.-)%] +(%d+%.%d+)")
if mac then
if not flags:match('P') then
count = count + 1
counts.total = counts.total + 1
clients[mac:lower()] = true
if flags:match('W') then
wifi = wifi +1
counts.wifi = counts.wifi +1
end
end
end
end
return { total = count
, wifi = wifi
}
function count_iface_stations(iface)
local wifitype = iwinfo.type(iface)
if wifitype == nil then
return
end
local freq = iwinfo[wifitype].frequency(iface)
local key
if freq >= 2400 and freq < 2500 then
key = "wifi24"
elseif freq >= 5000 and freq < 6000 then
key = "wifi5"
else
return
end
for k, v in pairs(iwinfo[wifitype].assoclist(iface)) do
if clients[k:lower()] then
counts[key] = counts[key] + 1
end
end
end
local ifaces = {}
uci:foreach("wireless", "wifi-iface", function(s)
if s.network == "client" and s.mode == "ap" then
count_iface_stations(s.ifname)
end
end)
return counts