2009-09-26 11:10:01 +00:00
< %#
LuCI - Lua Configuration Interface
Copyright 2008-2009 Steven Barth < steven @ midlink . org >
2010-10-30 00:44:34 +00:00
Copyright 2008-2010 Jo-Philipp Wich < xm @ subsignal . org >
2009-09-26 11:10:01 +00:00
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
-%>
< %-
local sys = require "luci.sys"
local utl = require "luci.util"
2009-10-29 02:22:00 +00:00
local uci = require "luci.model.uci".cursor()
2010-10-30 00:44:34 +00:00
local ntm = require "luci.model.network"
2009-10-29 02:22:00 +00:00
2010-10-30 00:44:34 +00:00
ntm.init(uci)
2009-09-26 11:10:01 +00:00
function guess_wifi_hw(ifname)
local name, idx = ifname:match("^([a-z]+)(%d+)")
idx = tonumber(idx)
-- wl.o
if name == "wl" then
local name = "Broadcom 802.11 Wireless Controller"
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 = string.format(
"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 "Atheros 802.11 Wireless Controller"
-- ralink
elseif name == "ra" then
return "RaLink 802.11 Wireless Controller"
-- prism?
elseif name == "eth" then
return "Prism 802.11 Wireless Controller"
-- dunno yet
else
2009-09-27 03:04:36 +00:00
return "Generic 802.11 Wireless Controller"
2009-09-26 11:10:01 +00:00
end
end
2009-10-29 02:22:00 +00:00
function guess_wifi_signal(scale)
2009-09-26 11:10:01 +00:00
local icon
2009-10-29 02:22:00 +00:00
if scale < 0 then
2009-09-26 11:10:01 +00:00
icon = resource .. "/icons/signal-none.png"
elseif scale < 1 then
icon = resource .. "/icons/signal-0.png"
elseif scale < 2 then
icon = resource .. "/icons/signal-0-25.png"
elseif scale < 3 then
icon = resource .. "/icons/signal-25-50.png"
elseif scale < 4 then
icon = resource .. "/icons/signal-50-75.png"
else
icon = resource .. "/icons/signal-75-100.png"
end
return icon
end
2010-10-30 00:44:34 +00:00
local devices = ntm:get_wifidevs()
2009-09-26 11:10:01 +00:00
local arpcache = { }
sys.net.arptable(function(e) arpcache[e["HW address"]] = e["IP address"] end)
-%>
< %+header%>
2009-10-31 15:54:11 +00:00
< h2 > < a id = "content" name = "content" > < %:Wireless Overview%>< / a > < / h2 >
2009-09-26 11:10:01 +00:00
< div class = "cbi-map" >
2010-10-30 00:44:34 +00:00
< % for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %>
2009-10-29 02:22:00 +00:00
<!-- device <%=dev:name()%> -->
2009-09-26 11:10:01 +00:00
< fieldset class = "cbi-section" >
< table class = "cbi-section-table" style = "margin:10px; empty-cells:hide" >
<!-- physical device -->
< tr >
2009-10-29 02:22:00 +00:00
< td style = "width:34px" > < img src = "<%=resource%>/icons/wifi<%=dev:is_up() and " " or " _disabled " % > .png" style="float:left; margin-right:10px" />< / td >
2009-09-26 11:10:01 +00:00
< td colspan = "2" style = "text-align:left" >
2009-10-29 02:22:00 +00:00
< big > < strong > < %=guess_wifi_hw(dev:name())%> (< %=dev:name()%>)< / strong > < / big > < br / >
< % if nets[1] then %>
< strong > Channel:< / strong > < %=nets[1]:channel() or "?"%> (< %=nets[1]:frequency() or "?"%> GHz) |
< strong > Bitrate:< / strong > < %=nets[1]:bitrate() or "?"%> Mb/s
2009-09-27 03:04:36 +00:00
< % end %>
2009-09-26 11:10:01 +00:00
< / td >
< td style = "width:40px" >
2009-10-29 02:22:00 +00:00
< a href = "<%=luci.dispatcher.build_url(" admin / network / wireless_join ? device = "..dev:name())%>" > < img style = "border:none" src = "<%=resource%>/cbi/find.gif" alt = "Find and join network" title = "Find and join network" / > < / a >
2009-12-25 00:42:17 +00:00
< a href = "<%=luci.dispatcher.build_url(" admin / network / wireless_add ? device = "..dev:name())%>" > < img style = "border:none" src = "<%=resource%>/cbi/add.gif" alt = "Provide new network" title = "Provide new network" / > < / a >
2009-09-26 11:10:01 +00:00
< / td >
< / tr >
<!-- /physical device -->
<!-- network list -->
2009-10-29 02:22:00 +00:00
< % if #nets > 0 then %>
< % for i, net in ipairs(nets) do %>
2009-09-26 11:10:01 +00:00
< tr class = "cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>" >
< td > < / td >
< td class = "cbi-value-field" style = "width:16px; padding:3px" >
2009-10-29 02:22:00 +00:00
< img src = "<%=guess_wifi_signal(net:signal_level())%>" title = "Signal: <%=net:signal()%> dBm / Noise: <%=net:noise()%> dBm" / > < br / >
< small > < %=net:signal_percent()%>%< / small >
2009-09-26 11:10:01 +00:00
< / td >
< td class = "cbi-value-field" style = "vertical-align:middle; text-align:left; padding:3px" >
2009-10-29 02:22:00 +00:00
< strong > SSID:< / strong > < %=utl.pcdata(net:active_ssid())%> |
< strong > Mode:< / strong > < %=net:active_mode_i18n()%>< br / >
< strong > BSSID:< / strong > < %=net:active_bssid()%> |
< strong > Encryption:< / strong > < %=net:active_encryption()%>
2009-09-26 11:10:01 +00:00
< / td >
< td class = "cbi-value-field" style = "width:40px" >
2010-10-30 00:44:34 +00:00
< a href = "<%=net:adminlink()%>" > < img style = "border:none" src = "<%=resource%>/cbi/edit.gif" alt = "Edit this network" title = "Edit this network" / > < / a >
< a href = "<%=luci.dispatcher.build_url(" admin / network / wireless_delete " , net:ifname ( ) ) % > ">< img style = "border:none" src = "<%=resource%>/cbi/remove.gif" alt = "Delete this network" title = "Delete this network" / > < / a >
2009-09-26 11:10:01 +00:00
< / td >
< / tr >
< % end %>
< % else %>
< tr class = "cbi-section-table-row cbi-rowstyle-2" >
< td > < / td >
< td colspan = "3" class = "cbi-value-field" style = "vertical-align:middle; text-align:left; padding:3px" >
< em > (No network configured on this device)< / em >
< / td >
< / tr >
< % end %>
<!-- /network list -->
< / table >
< / fieldset >
2009-10-29 02:22:00 +00:00
<!-- /device <%=dev:name()%> -->
2009-09-26 11:10:01 +00:00
< % end %>
2009-10-31 15:54:11 +00:00
< h2 > < a id = "content" name = "content" > < %:Associated Stations%>< / a > < / h2 >
2009-09-26 11:10:01 +00:00
< fieldset class = "cbi-section" >
< table class = "cbi-section-table" style = "margin:10px; width:50%" >
< tr class = "cbi-section-table-titles" >
< th class = "cbi-section-table-cell" > < / th >
< th class = "cbi-section-table-cell" > SSID< / th >
< th class = "cbi-section-table-cell" > MAC< / th >
< th class = "cbi-section-table-cell" > Address< / th >
< th class = "cbi-section-table-cell" > Signal< / th >
< th class = "cbi-section-table-cell" > Noise< / th >
< / tr >
< % local count = -1 %>
2010-10-30 00:44:34 +00:00
< % for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %>
2009-10-29 02:22:00 +00:00
< % for _, net in ipairs(nets) do %>
< % for mac, info in utl.kspairs(net:assoclist()) do count = count + 1 %>
2009-09-26 11:10:01 +00:00
< tr class = "cbi-section-table-row cbi-rowstyle-<%=1 + (count % 2)%>" >
2009-10-29 02:22:00 +00:00
< td class = "cbi-value-field" > < img src = "<%=guess_wifi_signal(net:signal_level(info.signal, info.noise))%>" title = "Signal: <%=info.signal%> dBm / Noise: <%=info.noise%> dBm" / > < / td >
< td class = "cbi-value-field" > < %=net:active_ssid()%>< / td >
2009-09-26 11:10:01 +00:00
< td class = "cbi-value-field" > < %=mac%>< / td >
2010-10-12 05:06:34 +00:00
< td class = "cbi-value-field" > < %=arpcache[mac:lower()] or "n/a"%>< / td >
2009-09-26 11:10:01 +00:00
< td class = "cbi-value-field" > < %=info.signal%> dBm< / td >
< td class = "cbi-value-field" > < %=info.noise%> dBm< / td >
< / tr >
< % end %>
< % end %>
< % end %>
2010-10-12 05:06:34 +00:00
< % if count < 0 then % >
2009-09-26 11:10:01 +00:00
< tr class = "cbi-section-table-row cbi-rowstyle-2" >
< td class = "cbi-value-field" colspan = "6" >
< em > No information available< / em >
< / td >
< / tr >
< % end %>
< / table >
< / fieldset >
< / div >
< %+footer%>