X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fwifi.lua;h=67ccdb4c1c4c2c14a224589ac8e8d95dbb4292c5;hp=334d9f20fe83fe11f4a35b9c0e73d15ff472e51f;hb=2812cb14c5f3650ac1f1d7876cff6fa66a732cc7;hpb=1ec71bbefe7689fecb1d3dfb4c0a37791f298712
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 334d9f20f..67ccdb4c1 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 ""
@@ -59,7 +61,7 @@ function m.parse(map)
wdev:set("disabled", nil)
nw:commit("wireless")
- luci.sys.call("(env -i /sbin/wifi down; env -i /sbin/wifi up) >/dev/null 2>/dev/null")
+ luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null")
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1]))
return
@@ -105,29 +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
-
- 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
-
- 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
-
- 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)
@@ -187,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
@@ -197,20 +176,19 @@ end
------------------- MAC80211 Device ------------------
if hwtype == "mac80211" then
- tp = s:taboption("general",
- (#tx_power_list > 0) and ListValue or Value,
- "txpower", translate("Transmit Power"), "dBm")
-
- tp.rmempty = true
- tp.default = tx_power_cur
-
- function tp.cfgvalue(...)
- return txpower_current(Value.cfgvalue(...), tx_power_list)
- end
+ if #tx_power_list > 1 then
+ tp = s:taboption("general", ListValue,
+ "txpower", translate("Transmit Power"), "dBm")
+ tp.rmempty = true
+ tp.default = tx_power_cur
+ function tp.cfgvalue(...)
+ return txpower_current(Value.cfgvalue(...), tx_power_list)
+ end
- for _, p in ipairs(tx_power_list) do
- tp:value(p.driver_dbm, "%i dBm (%i mW)"
- %{ p.display_dbm, p.display_mw })
+ for _, p in ipairs(tx_power_list) do
+ tp:value(p.driver_dbm, "%i dBm (%i mW)"
+ %{ p.display_dbm, p.display_mw })
+ end
end
mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))
@@ -230,6 +208,12 @@ if hwtype == "mac80211" then
htmode:value("HT40-", translate("40MHz 2nd channel below"))
htmode:value("HT40+", translate("40MHz 2nd channel above"))
+ noscan = s:taboption("advanced", Flag, "noscan", translate("Force 40MHz mode"),
+ translate("Always use 40MHz channels even if the secondary channel overlaps. Using this option does not comply with IEEE 802.11n-2009!"))
+ noscan:depends("htmode", "HT40+")
+ noscan:depends("htmode", "HT40-")
+ noscan.default = noscan.disabled
+
--htcapab = s:taboption("advanced", DynamicList, "ht_capab", translate("HT capabilities"))
--htcapab:depends("hwmode", "11na")
--htcapab:depends("hwmode", "11ng")
@@ -249,6 +233,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
@@ -406,13 +402,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)
@@ -427,10 +423,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
@@ -460,7 +464,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")})
@@ -494,6 +498,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
@@ -560,7 +569,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"))
@@ -634,7 +643,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"))
@@ -715,8 +724,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