luci-mod-admin-full: rework wifi configuration
- localize variables - get rid of redirects breaking apply workflow - auto-adjust unusable channels when switching country - use apply/rollback workflow when enabling/disabling networks Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
8deb949551
commit
fd1ddcc419
2 changed files with 67 additions and 58 deletions
|
@ -7,6 +7,17 @@ local ut = require "luci.util"
|
||||||
local nt = require "luci.sys".net
|
local nt = require "luci.sys".net
|
||||||
local fs = require "nixio.fs"
|
local fs = require "nixio.fs"
|
||||||
|
|
||||||
|
local acct_port, acct_secret, acct_server, anonymous_identity, ant1, ant2,
|
||||||
|
auth, auth_port, auth_secret, auth_server, bssid, cacert, cacert2,
|
||||||
|
cc, ch, cipher, clientcert, clientcert2, ea, eaptype, en, encr,
|
||||||
|
ft_protocol, ft_psk_generate_local, hidden, htmode, identity,
|
||||||
|
ieee80211r, ieee80211w, ifname, ifsection, isolate, key_retries,
|
||||||
|
legacyrates, max_timeout, meshfwd, meshid, ml, mobility_domain, mode,
|
||||||
|
mp, nasid, network, password, pmk_r1_push, privkey, privkey2, privkeypwd,
|
||||||
|
privkeypwd2, r0_key_lifetime, r0kh, r1_key_holder, r1kh,
|
||||||
|
reassociation_deadline, retry_timeout, ssid, st, tp, wepkey, wepslot,
|
||||||
|
wmm, wpakey, wps
|
||||||
|
|
||||||
arg[1] = arg[1] or ""
|
arg[1] = arg[1] or ""
|
||||||
|
|
||||||
m = Map("wireless", "",
|
m = Map("wireless", "",
|
||||||
|
@ -19,8 +30,6 @@ m:chain("network")
|
||||||
m:chain("firewall")
|
m:chain("firewall")
|
||||||
m.redirect = luci.dispatcher.build_url("admin/network/wireless")
|
m.redirect = luci.dispatcher.build_url("admin/network/wireless")
|
||||||
|
|
||||||
local ifsection
|
|
||||||
|
|
||||||
function m.on_commit(map)
|
function m.on_commit(map)
|
||||||
local wnet = nw:get_wifinet(arg[1])
|
local wnet = nw:get_wifinet(arg[1])
|
||||||
if ifsection and wnet then
|
if ifsection and wnet then
|
||||||
|
@ -40,38 +49,6 @@ if not wnet or not wdev then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- wireless toggle was requested, commit and reload page
|
|
||||||
function m.parse(map)
|
|
||||||
local new_cc = m:formvalue("cbid.wireless.%s.country" % wdev:name())
|
|
||||||
local old_cc = m:get(wdev:name(), "country")
|
|
||||||
|
|
||||||
if m:formvalue("cbid.wireless.%s.__toggle" % wdev:name()) then
|
|
||||||
if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
|
|
||||||
wnet:set("disabled", nil)
|
|
||||||
else
|
|
||||||
wnet:set("disabled", "1")
|
|
||||||
end
|
|
||||||
wdev:set("disabled", nil)
|
|
||||||
|
|
||||||
nw:commit("wireless")
|
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
Map.parse(map)
|
|
||||||
|
|
||||||
if m:get(wdev:name(), "type") == "mac80211" and new_cc and new_cc ~= old_cc then
|
|
||||||
luci.sys.call("iw reg set %s" % ut.shellquote(new_cc))
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1]))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
m.title = luci.util.pcdata(wnet:get_i18n())
|
|
||||||
|
|
||||||
|
|
||||||
local function txpower_list(iw)
|
local function txpower_list(iw)
|
||||||
local list = iw.txpwrlist or { }
|
local list = iw.txpwrlist or { }
|
||||||
local off = tonumber(iw.txpower_offset) or 0
|
local off = tonumber(iw.txpower_offset) or 0
|
||||||
|
@ -112,6 +89,57 @@ local hw_modes = iw.hwmodelist or { }
|
||||||
local tx_power_list = txpower_list(iw)
|
local tx_power_list = txpower_list(iw)
|
||||||
local tx_power_cur = txpower_current(wdev:get("txpower"), tx_power_list)
|
local tx_power_cur = txpower_current(wdev:get("txpower"), tx_power_list)
|
||||||
|
|
||||||
|
-- wireless toggle was requested, commit and reload page
|
||||||
|
function m.parse(map)
|
||||||
|
local new_cc = m:formvalue("cbid.wireless.%s.country" % wdev:name())
|
||||||
|
local old_cc = m:get(wdev:name(), "country")
|
||||||
|
|
||||||
|
if m:formvalue("cbid.wireless.%s.__toggle" % wdev:name()) then
|
||||||
|
if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
|
||||||
|
wnet:set("disabled", nil)
|
||||||
|
else
|
||||||
|
wnet:set("disabled", "1")
|
||||||
|
end
|
||||||
|
wdev:set("disabled", nil)
|
||||||
|
m.apply_needed = true
|
||||||
|
m.redirect = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
Map.parse(map)
|
||||||
|
|
||||||
|
if m:get(wdev:name(), "type") == "mac80211" and new_cc and new_cc ~= old_cc then
|
||||||
|
luci.sys.call("iw reg set %s" % ut.shellquote(new_cc))
|
||||||
|
|
||||||
|
local old_ch = tonumber(m:formvalue("cbid.wireless.%s._mode_freq.channel" % wdev:name()) or "")
|
||||||
|
if old_ch then
|
||||||
|
local _, c, new_ch
|
||||||
|
for _, c in ipairs(iw.freqlist) do
|
||||||
|
if c.channel > old_ch or (old_ch <= 14 and c.channel > 14) then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
new_ch = c.channel
|
||||||
|
end
|
||||||
|
if new_ch ~= old_ch then
|
||||||
|
wdev:set("channel", new_ch)
|
||||||
|
m.message = translatef("Channel %d is not available in the %s regulatory domain and has been auto-adjusted to %d.",
|
||||||
|
old_ch, new_cc, new_ch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
|
||||||
|
en.title = translate("Wireless network is disabled")
|
||||||
|
en.inputtitle = translate("Enable")
|
||||||
|
en.inputstyle = "apply"
|
||||||
|
else
|
||||||
|
en.title = translate("Wireless network is enabled")
|
||||||
|
en.inputtitle = translate("Disable")
|
||||||
|
en.inputstyle = "reset"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
m.title = luci.util.pcdata(wnet:get_i18n())
|
||||||
|
|
||||||
s = m:section(NamedSection, wdev:name(), "wifi-device", translate("Device Configuration"))
|
s = m:section(NamedSection, wdev:name(), "wifi-device", translate("Device Configuration"))
|
||||||
s.addremove = false
|
s.addremove = false
|
||||||
|
|
||||||
|
@ -119,29 +147,12 @@ s:tab("general", translate("General Setup"))
|
||||||
s:tab("macfilter", translate("MAC-Filter"))
|
s:tab("macfilter", translate("MAC-Filter"))
|
||||||
s:tab("advanced", translate("Advanced Settings"))
|
s:tab("advanced", translate("Advanced Settings"))
|
||||||
|
|
||||||
--[[
|
|
||||||
back = s:option(DummyValue, "_overview", translate("Overview"))
|
|
||||||
back.value = ""
|
|
||||||
back.titleref = luci.dispatcher.build_url("admin", "network", "wireless")
|
|
||||||
]]
|
|
||||||
|
|
||||||
st = s:taboption("general", DummyValue, "__status", translate("Status"))
|
st = s:taboption("general", DummyValue, "__status", translate("Status"))
|
||||||
st.template = "admin_network/wifi_status"
|
st.template = "admin_network/wifi_status"
|
||||||
st.ifname = arg[1]
|
st.ifname = arg[1]
|
||||||
|
|
||||||
en = s:taboption("general", Button, "__toggle")
|
en = s:taboption("general", Button, "__toggle")
|
||||||
|
|
||||||
if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
|
|
||||||
en.title = translate("Wireless network is disabled")
|
|
||||||
en.inputtitle = translate("Enable")
|
|
||||||
en.inputstyle = "apply"
|
|
||||||
else
|
|
||||||
en.title = translate("Wireless network is enabled")
|
|
||||||
en.inputtitle = translate("Disable")
|
|
||||||
en.inputstyle = "reset"
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
local hwtype = wdev:get("type")
|
local hwtype = wdev:get("type")
|
||||||
|
|
||||||
-- NanoFoo
|
-- NanoFoo
|
||||||
|
@ -170,9 +181,7 @@ if found_sta then
|
||||||
found_sta.channel or "(auto)", table.concat(found_sta.names, ", "))
|
found_sta.channel or "(auto)", table.concat(found_sta.names, ", "))
|
||||||
else
|
else
|
||||||
ch = s:taboption("general", Value, "_mode_freq", '<br />'..translate("Operating frequency"))
|
ch = s:taboption("general", Value, "_mode_freq", '<br />'..translate("Operating frequency"))
|
||||||
ch.hwmodes = hw_modes
|
ch.iwinfo = iw
|
||||||
ch.htmodes = iw.htmodelist
|
|
||||||
ch.freqlist = iw.freqlist
|
|
||||||
ch.template = "cbi/wireless_modefreq"
|
ch.template = "cbi/wireless_modefreq"
|
||||||
|
|
||||||
function ch.cfgvalue(self, section)
|
function ch.cfgvalue(self, section)
|
||||||
|
@ -1049,7 +1058,7 @@ if hwtype == "mac80211" then
|
||||||
retry_timeout.rmempty = true
|
retry_timeout.rmempty = true
|
||||||
end
|
end
|
||||||
|
|
||||||
local key_retries = s:taboption("encryption", Flag, "wpa_disable_eapol_key_retries",
|
key_retries = s:taboption("encryption", Flag, "wpa_disable_eapol_key_retries",
|
||||||
translate("Enable key reinstallation (KRACK) countermeasures"),
|
translate("Enable key reinstallation (KRACK) countermeasures"),
|
||||||
translate("Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load."))
|
translate("Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load."))
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<%+cbi/valueheader%>
|
<%+cbi/valueheader%>
|
||||||
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
<script type="text/javascript">//<![CDATA[
|
||||||
var freqlist = <%= luci.http.write_json(self.freqlist) %>;
|
var freqlist = <%= luci.http.write_json(self.iwinfo.freqlist) %>;
|
||||||
var hwmodes = <%= luci.http.write_json(self.hwmodes) %>;
|
var hwmodes = <%= luci.http.write_json(self.iwinfo.hwmodelist or {}) %>;
|
||||||
var htmodes = <%= luci.http.write_json(self.htmodes) %>;
|
var htmodes = <%= luci.http.write_json(self.iwinfo.htmodelist) %>;
|
||||||
|
|
||||||
var channels = {
|
var channels = {
|
||||||
'11g': [
|
'11g': [
|
||||||
|
|
Loading…
Reference in a new issue