X-Git-Url: http://git.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fview%2Fadmin_network%2Fwifi_overview.htm;h=22d27cb1cd59c3eb754cf62a90341e62f511d4f7;hp=251f767d23272ca0d9a0d5444716e13de5a46189;hb=0453e50932ab03c172ef18727673a2d874d93c52;hpb=4d3ddb03a308629abc4f9c37686c5d2351ce5950 diff --git a/modules/admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/admin-full/luasrc/view/admin_network/wifi_overview.htm index 251f767d23..22d27cb1cd 100644 --- a/modules/admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/modules/admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -1,7 +1,7 @@ <%# LuCI - Lua Configuration Interface Copyright 2008-2009 Steven Barth -Copyright 2008-2009 Jo-Philipp Wich +Copyright 2008-2011 Jo-Philipp Wich Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,16 +16,34 @@ $Id$ <%- local sys = require "luci.sys" + local fs = require "luci.fs" local utl = require "luci.util" - local uci = require "luci.model.uci".cursor_state() + 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(ifname) + local bands = "" local name, idx = ifname:match("^([a-z]+)(%d+)") idx = tonumber(idx) + if has_iwinfo then + local iw = luci.sys.wifi.getiwinfo(ifname) + local bl = iw.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 + end + end + -- wl.o if name == "wl" then - local name = "Broadcom 802.11 Wireless Controller" + local name = "Broadcom 802.11%s Wireless Controller" % bands local nm = 0 local fd = nixio.open("/proc/bus/pci/devices", "r") @@ -53,141 +71,324 @@ $Id$ -- madwifi elseif name == "ath" or name == "wifi" then - return "Atheros 802.11 Wireless Controller" + return "Atheros 802.11%s Wireless Controller" % bands -- ralink elseif name == "ra" then - return "RaLink 802.11 Wireless Controller" + return "RaLink 802.11%s Wireless Controller" % bands - -- prism? + -- hermes elseif name == "eth" then - return "Prism 802.11 Wireless Controller" + return "Hermes 802.11b Wireless Controller" - -- dunno yet - else - return "Unkown 802.11 Wireless Controller" - end - end + -- hostap + elseif name == "wlan" and fs.isdirectory("/proc/net/hostap/" .. ifname) then + return "Prism2/2.5/3 802.11b Wireless Controller" - function guess_wifi_signal(info) - local snr = -1 * ((info.noise or 0) - (info.signal or 0)) - local scale = math.floor(snr / 5) - local icon - - if not info.bssid or info.bssid == "00:00:00:00:00:00" then - 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 - - function percent_wifi_signal(info) - local qc = info.quality or 0 - local qm = info.quality_max or 0 - - if info.bssid and qc > 0 and qm > 0 then - return math.floor((100 / qm) * qc) + -- dunno yet else - return 0 + return "Generic 802.11%s Wireless Controller" % bands end end - function find_wifi_devices() - local devs = { } - uci:foreach("wireless", "wifi-device", - function(s) - local dev = s['.name'] - local act = 0 - devs[dev] = { active = 0, networks = { } } - - uci:foreach("wireless", "wifi-iface", - function(s) - if s.device == dev then - if s.up == "1" then act = act + 1 end - devs[dev].networks[#devs[dev].networks+1] = { - active = (s.up == "1"), - ifname = s.ifname, - info = sys.wifi.getiwinfo(s.ifname or s.device) - } - end - end) - - devs[dev].hwname = guess_wifi_hw(dev) - devs[dev].active = (act > 0) - end) + local devices = ntm:get_wifidevs() + local arpcache = { } + sys.net.arptable(function(e) arpcache[e["HW address"]:upper()] = e["IP address"] end) - return devs - end + local netlist = { } + local netdevs = { } - function find_wifi_frequency(state) - if state.active then - return string.format("%d (%.03f GHz)", - state.networks[1].info.channel, - state.networks[1].info.frequency / 1000); - else - return "n/a" + 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 - - - local devices = find_wifi_devices() - local arpcache = { } - sys.net.arptable(function(e) arpcache[e["HW address"]] = e["IP address"] end) -%> <%+header%> -

<%:a_s_iw_overview Wireless Overview%>

+<% 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, state in utl.kspairs(devices) do %> - + <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> +
- + - - <% if #state.networks > 0 then %> - <% for i, net in ipairs(state.networks) do %> + <% if #nets > 0 then %> + <% for i, net in ipairs(nets) do %> - - - <% end %> @@ -195,54 +396,36 @@ $Id$ <% end %>
.png" style="float:left; margin-right:10px" /> - <%=state.hwname%> (<%=dev%>)
- Channel: <%=find_wifi_frequency(state)%> | - Bitrate: <%=state.active and (state.networks[1].info.bitrate / 1000) .. " Mb/s" or "n/a"%> + <%=guess_wifi_hw(dev:name())%> (<%=dev:name()%>)
+
- Find and join network - Provide new network + + ?device=<%=dev:name()%>'" title="<%:Find and join network%>" value="<%:Scan%>" /> + ?device=<%=dev:name()%>'" title="<%:Provide new network%>" value="<%:Add%>" />
-
- <%=percent_wifi_signal(net.info)%>% +
+
+ 0%
- SSID: <%=utl.pcdata(net.info.ssid)%> | - Mode: <%=net.info.mode%>
- BSSID: <%=net.info.bssid%> | - Encryption: <%=net.info.enctype%> +
+ <%:Collecting data...%> - Edit this network - Delete this network + + + + '" title="<%:Delete this network%>" value="<%:Remove%>" />
- (No network configured on this device) + <%:No network configured on this device%>
- + <% end %> - - -

<%:a_s_iw_overview2 Associated Stations%>

+

<%:Associated Stations%>

- +
- - - - - + + + + + + + - - <% local count = -1 %> - <% for dev, state in utl.kspairs(devices) do %> - <% for _, net in ipairs(state.networks) do %> - <% for mac, info in utl.kspairs(net.info.assoclist) do info.bssid = mac; count = count + 1 %> - - - - - - - - - <% end %> - <% end %> - <% end %> - <% if count <= 0 then %> - - <% end %>
SSIDMACAddressSignalNoise<%:SSID%><%:MAC%><%:Address%><%:Signal%><%:Noise%><%:RX Rate%><%:TX Rate%>
<%=net.info.ssid%><%=mac%><%=arpcache[mac] or "n/a"%><%=info.signal%> dBm<%=info.noise%> dBm
- No information available + + <%:Collecting data...%>