<%# Copyright 2008-2009 Steven Barth Copyright 2008-2015 Jo-Philipp Wich Licensed to the public under the Apache License 2.0. -%> <%- local ip = require "luci.ip" local fs = require "nixio.fs" local utl = require "luci.util" local uci = require "luci.model.uci".cursor() local ntm = require "luci.model.network" local has_iwinfo = pcall(require, "iwinfo") ntm.init(uci) function guess_wifi_hw(dev) local bands = "" local ifname = dev:name() local name, idx = ifname:match("^([a-z]+)(%d+)") idx = tonumber(idx) if has_iwinfo then local bl = dev.iwinfo.hwmodelist if bl and next(bl) then if bl.a then bands = bands .. "a" end if bl.b then bands = bands .. "b" end if bl.g then bands = bands .. "g" end if bl.n then bands = bands .. "n" end if bl.ac then bands = bands .. "ac" end end local hw = dev.iwinfo.hardware_name if hw then return "%s 802.11%s" %{ hw, bands } end end -- wl.o if name == "wl" then local name = translatef("Broadcom 802.11%s Wireless Controller", bands) local nm = 0 local fd = nixio.open("/proc/bus/pci/devices", "r") if fd then local ln for ln in fd:linesource() do if ln:match("wl$") then if nm == idx then local version = ln:match("^%S+%s+%S%S%S%S([0-9a-f]+)") name = translatef( "Broadcom BCM%04x 802.11 Wireless Controller", tonumber(version, 16) ) break else nm = nm + 1 end end end fd:close() end return name -- madwifi elseif name == "ath" or name == "wifi" then return translatef("Atheros 802.11%s Wireless Controller", bands) -- ralink elseif name == "ra" then return translatef("RaLink 802.11%s Wireless Controller", bands) -- hermes elseif name == "eth" then return translate("Hermes 802.11b Wireless Controller") -- hostap elseif name == "wlan" and fs.stat("/proc/net/hostap/" .. ifname, "type") == "dir" then return translate("Prism2/2.5/3 802.11b Wireless Controller") -- dunno yet else return translatef("Generic 802.11%s Wireless Controller", bands) end end local devices = ntm:get_wifidevs() local arpcache = { } ip.neighbors({ family = 4 }, function(n) if n.mac and n.dest then arpcache[n.mac:upper()] = n.dest:string() end end) local netlist = { } local netdevs = { } local dev for _, dev in ipairs(devices) do local net for _, net in ipairs(dev:get_wifinets()) do netlist[#netlist+1] = net:id() netdevs[net:id()] = dev:name() end end -%> <%+header%> <% if not has_iwinfo then %>
<%:Package libiwinfo required!%>
<%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%>
<% end %>

<%:Wireless Overview%>

<% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %>
<% if #nets > 0 then %> <% for i, net in ipairs(nets) do %> <% end %> <% else %> <% end %>
<%=guess_wifi_hw(dev)%> (<%=dev:name()%>)

0%
<%:Collecting data...%>
<%:No network configured on this device%>
<% end %>

<%:Associated Stations%>

<%:SSID%> <%:MAC-Address%> <%:IPv4-Address%> <%:Signal%> <%:Noise%> <%:RX Rate%> <%:TX Rate%>
<%:Collecting data...%>
<%+footer%>