X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fwifi.lua;h=f645493a61d17c6cb17df308f33df1b0b33e6b57;hp=b407408a3f4e97fbde48436327bd2874743b6d2b;hb=02ac6686fe8165a3965fd79e3fb32aaf1f831c79;hpb=fb5d41c2a5aa751302375c0a31ca03d095145e93;ds=sidebyside
diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua
index b407408a3..f645493a6 100644
--- a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua
+++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua
@@ -14,6 +14,8 @@ $Id$
local wa = require "luci.tools.webadmin"
local nw = require "luci.model.network"
+local ut = require "luci.util"
+local nt = require "luci.sys".net
local fs = require "nixio.fs"
arg[1] = arg[1] or ""
@@ -105,33 +107,6 @@ local function txpower_current(pwr, list)
return (list[#list] and list[#list].driver_dbm) or pwr or 0
end
-local function arplist(opt)
- local _, e, mac, ip, name
- local arp = { }
-
- for _, e in ipairs(luci.sys.net.arptable()) do
- arp[e["HW address"]:upper()] = { e["IP address"] }
- end
-
- if fs.access("/etc/ethers") then
- for e in io.lines("/etc/ethers") do
- mac, ip = e:match("^([a-f0-9]%S+) (%S+)")
- if mac and ip then arp[mac:upper()] = { ip } end
- end
- end
-
- if fs.access("/var/dhcp.leases") then
- for e in io.lines("/var/dhcp.leases") do
- mac, ip, name = e:match("^%d+ (%S+) (%S+) (%S+)")
- if mac and ip then arp[mac:upper()] = { ip, name ~= "*" and name } end
- end
- end
-
- for mac, e in luci.util.kspairs(arp) do
- opt:value(mac, "%s (%s)" %{ mac, e[2] or e[1] })
- end
-end
-
local iw = luci.sys.wifi.getiwinfo(arg[1])
local hw_modes = iw.hwmodelist or { }
local tx_power_list = txpower_list(iw)
@@ -191,7 +166,7 @@ if has_sta then
else
ch = s:taboption("general", Value, "channel", translate("Channel"))
ch:value("auto", translate("auto"))
- for _, f in ipairs(iw and iw.freqlist or luci.sys.wifi.channels()) do
+ for _, f in ipairs(iw and iw.freqlist or { }) do
if not f.restricted then
ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })
end
@@ -252,6 +227,18 @@ if hwtype == "mac80211" then
s:taboption("advanced", Value, "distance", translate("Distance Optimization"),
translate("Distance to farthest network member in meters."))
+ -- external antenna profiles
+ local eal = iw and iw.extant
+ if eal and #eal > 0 then
+ ea = s:taboption("advanced", ListValue, "extant", translate("Antenna Configuration"))
+ for _, eap in ipairs(eal) do
+ ea:value(eap.id, "%s (%s)" %{ eap.name, eap.description })
+ if eap.selected then
+ ea.default = eap.id
+ end
+ end
+ end
+
s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold"))
s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold"))
end
@@ -409,13 +396,13 @@ mode:value("adhoc", translate("Ad-Hoc"))
bssid = s:taboption("general", Value, "bssid", translate("BSSID"))
network = s:taboption("general", Value, "network", translate("Network"),
- translate("Choose the network you want to attach to this wireless interface. " ..
- "Select unspecified to not attach any network or fill out the " ..
- "create field to define a new network."))
+ translate("Choose the network(s) you want to attach to this wireless interface or " ..
+ "fill out the create field to define a new network."))
network.rmempty = true
network.template = "cbi/network_netlist"
-network.widget = "radio"
+network.widget = "checkbox"
+network.novirtual = true
function network.write(self, section, value)
local i = nw:get_interface(section)
@@ -430,10 +417,18 @@ function network.write(self, section, value)
if n then n:del_interface(i) end
end
else
- local n = nw:get_network(value)
- if n then
- n:set("type", "bridge")
- n:add_interface(i)
+ local v
+ for _, v in ipairs(i:get_networks()) do
+ v:del_interface(i)
+ end
+ for v in ut.imatch(value) do
+ local n = nw:get_network(v)
+ if n then
+ if not n:is_empty() then
+ n:set("type", "bridge")
+ end
+ n:add_interface(i)
+ end
end
end
end
@@ -463,7 +458,7 @@ if hwtype == "mac80211" then
ml.datatype = "macaddr"
ml:depends({macfilter="allow"})
ml:depends({macfilter="deny"})
- arplist(ml)
+ nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end)
mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")})
mode:value("sta-wds", "%s (%s)" % {translate("Client"), translate("WDS")})
@@ -497,6 +492,11 @@ if hwtype == "mac80211" then
hidden = s:taboption("general", Flag, "hidden", translate("Hide ESSID"))
hidden:depends({mode="ap"})
hidden:depends({mode="ap-wds"})
+
+ wmm = s:taboption("general", Flag, "wmm", translate("WMM Mode"))
+ wmm:depends({mode="ap"})
+ wmm:depends({mode="ap-wds"})
+ wmm.default = wmm.enabled
end
@@ -563,7 +563,7 @@ if hwtype == "atheros" then
ml.datatype = "macaddr"
ml:depends({macpolicy="allow"})
ml:depends({macpolicy="deny"})
- arplist(ml)
+ nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end)
s:taboption("advanced", Value, "rate", translate("Transmission Rate"))
s:taboption("advanced", Value, "mcast_rate", translate("Multicast Rate"))
@@ -637,7 +637,7 @@ if hwtype == "prism2" then
ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List"))
ml:depends({macpolicy="allow"})
ml:depends({macpolicy="deny"})
- arplist(ml)
+ nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end)
s:taboption("advanced", Value, "rate", translate("Transmission Rate"))
s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold"))
@@ -718,8 +718,8 @@ if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
local supplicant = fs.access("/usr/sbin/wpa_supplicant")
local hostapd = fs.access("/usr/sbin/hostapd")
- -- Probe EAP support
- local has_ap_eap = (os.execute("hostapd -veap >/dev/null 2>/dev/null") == 0)
+ -- Probe EAP support
+ local has_ap_eap = (os.execute("hostapd -veap >/dev/null 2>/dev/null") == 0)
local has_sta_eap = (os.execute("wpa_supplicant -veap >/dev/null 2>/dev/null") == 0)
if hostapd and supplicant then