Skip to content
Snippets Groups Projects
Unverified Commit b40b1c82 authored by Matthias Schiffer's avatar Matthias Schiffer Committed by GitHub
Browse files

Merge pull request #2312 from freifunk-gluon/gluon-web-wifi-cleanup

Hide WLAN config on devices without WLAN + related cleanup
parents 1013dcb1 a40a89d9
No related branches found
No related tags found
No related merge requests found
Showing
with 69 additions and 63 deletions
#!/usr/bin/lua #!/usr/bin/lua
local platform = require 'gluon.platform'
local wireless = require 'gluon.wireless' local wireless = require 'gluon.wireless'
local uci = require('simple-uci').cursor() local uci = require('simple-uci').cursor()
...@@ -52,7 +51,7 @@ local function configure_owe(radio, index, config, radio_name) ...@@ -52,7 +51,7 @@ local function configure_owe(radio, index, config, radio_name)
-- Don't configure OWE in case our device -- Don't configure OWE in case our device
-- can't do MFP, as it's mandatory for OWE. -- can't do MFP, as it's mandatory for OWE.
if not platform.device_supports_mfp(uci) then if not wireless.device_supports_mfp(uci) then
return return
end end
...@@ -80,7 +79,7 @@ local function configure_owe_transition_mode(config, radio_name) ...@@ -80,7 +79,7 @@ local function configure_owe_transition_mode(config, radio_name)
-- Don't configure OWE in case our device -- Don't configure OWE in case our device
-- can't do MFP, as it's mandatory for OWE. -- can't do MFP, as it's mandatory for OWE.
if not platform.device_supports_mfp(uci) then if not wireless.device_supports_mfp(uci) then
return return
end end
......
...@@ -2,7 +2,7 @@ return function(form, uci) ...@@ -2,7 +2,7 @@ return function(form, uci)
local platform = require 'gluon.platform' local platform = require 'gluon.platform'
local wireless = require 'gluon.wireless' local wireless = require 'gluon.wireless'
if not (platform.is_outdoor_device() and platform.device_uses_11a(uci)) then if not (platform.is_outdoor_device() and wireless.device_uses_11a(uci)) then
-- only visible on wizard for outdoor devices -- only visible on wizard for outdoor devices
return return
end end
......
...@@ -13,6 +13,7 @@ end ...@@ -13,6 +13,7 @@ end
local sysconfig = require 'gluon.sysconfig' local sysconfig = require 'gluon.sysconfig'
local platform = require 'gluon.platform' local platform = require 'gluon.platform'
local wireless = require 'gluon.wireless'
local config = site.wifi5.outdoors('preset') local config = site.wifi5.outdoors('preset')
local outdoor local outdoor
...@@ -22,7 +23,7 @@ if sysconfig.gluon_version then ...@@ -22,7 +23,7 @@ if sysconfig.gluon_version then
outdoor = false outdoor = false
elseif config == 'preset' then elseif config == 'preset' then
-- enable outdoor mode through presets on new installs -- enable outdoor mode through presets on new installs
outdoor = platform.is_outdoor_device() and platform.device_uses_11a(uci) outdoor = platform.is_outdoor_device() and wireless.device_uses_11a(uci)
else else
-- enable/disable outdoor mode unconditionally on new installs -- enable/disable outdoor mode unconditionally on new installs
outdoor = config outdoor = config
......
local platform_info = require 'platform_info' local platform_info = require 'platform_info'
local util = require 'gluon.util' local util = require 'gluon.util'
local wireless = require 'gluon.wireless'
local unistd = require 'posix.unistd'
local M = setmetatable({}, { local M = setmetatable({}, {
...@@ -48,41 +46,4 @@ function M.is_outdoor_device() ...@@ -48,41 +46,4 @@ function M.is_outdoor_device()
return false return false
end end
function M.device_supports_wpa3()
return unistd.access('/lib/gluon/features/wpa3')
end
function M.device_supports_mfp(uci)
local supports_mfp = true
if not M.device_supports_wpa3() then
return false
end
uci:foreach('wireless', 'wifi-device', function(radio)
local phy = wireless.find_phy(radio)
local phypath = '/sys/kernel/debug/ieee80211/' .. phy .. '/'
if not util.file_contains_line(phypath .. 'hwflags', 'MFP_CAPABLE') then
supports_mfp = false
return false
end
end)
return supports_mfp
end
function M.device_uses_11a(uci)
local ret = false
uci:foreach('wireless', 'wifi-device', function(radio)
if radio.hwmode == '11a' or radio.hwmode == '11na' then
ret = true
return false
end
end)
return ret
end
return M return M
...@@ -126,4 +126,52 @@ function M.preserve_channels(uci) ...@@ -126,4 +126,52 @@ function M.preserve_channels(uci)
return uci:get_first('gluon-core', 'wireless', 'preserve_channels') return uci:get_first('gluon-core', 'wireless', 'preserve_channels')
end end
function M.device_supports_wpa3()
return unistd.access('/lib/gluon/features/wpa3')
end
function M.device_supports_mfp(uci)
local supports_mfp = true
if not M.device_supports_wpa3() then
return false
end
uci:foreach('wireless', 'wifi-device', function(radio)
local phy = M.find_phy(radio)
local phypath = '/sys/kernel/debug/ieee80211/' .. phy .. '/'
if not util.file_contains_line(phypath .. 'hwflags', 'MFP_CAPABLE') then
supports_mfp = false
return false
end
end)
return supports_mfp
end
function M.device_uses_wlan(uci)
local ret = false
uci:foreach('wireless', 'wifi-device', function()
ret = true
return false
end)
return ret
end
function M.device_uses_11a(uci)
local ret = false
uci:foreach('wireless', 'wifi-device', function(radio)
if radio.hwmode == '11a' or radio.hwmode == '11na' then
ret = true
return false
end
end)
return ret
end
return M return M
local uci = require("simple-uci").cursor()
local wireless = require 'gluon.wireless'
package 'gluon-web-private-wifi' package 'gluon-web-private-wifi'
if wireless.device_uses_wlan(uci) then
entry({"admin", "privatewifi"}, model("admin/privatewifi"), _("Private WLAN"), 30) entry({"admin", "privatewifi"}, model("admin/privatewifi"), _("Private WLAN"), 30)
end
local uci = require("simple-uci").cursor() local uci = require("simple-uci").cursor()
local platform = require 'gluon.platform'
local wireless = require 'gluon.wireless' local wireless = require 'gluon.wireless'
-- where to read the configuration from -- where to read the configuration from
...@@ -30,7 +29,7 @@ key.default = uci:get('wireless', primary_iface, "key") ...@@ -30,7 +29,7 @@ key.default = uci:get('wireless', primary_iface, "key")
local encryption = s:option(ListValue, "encryption", translate("Encryption")) local encryption = s:option(ListValue, "encryption", translate("Encryption"))
encryption:depends(enabled, true) encryption:depends(enabled, true)
encryption:value("psk2", translate("WPA2")) encryption:value("psk2", translate("WPA2"))
if platform.device_supports_wpa3() then if wireless.device_supports_wpa3() then
encryption:value("psk3-mixed", translate("WPA2 / WPA3")) encryption:value("psk3-mixed", translate("WPA2 / WPA3"))
encryption:value("psk3", translate("WPA3")) encryption:value("psk3", translate("WPA3"))
end end
...@@ -39,7 +38,7 @@ encryption.default = uci:get('wireless', primary_iface, 'encryption') or "psk2" ...@@ -39,7 +38,7 @@ encryption.default = uci:get('wireless', primary_iface, 'encryption') or "psk2"
local mfp = s:option(ListValue, "mfp", translate("Management Frame Protection")) local mfp = s:option(ListValue, "mfp", translate("Management Frame Protection"))
mfp:depends(enabled, true) mfp:depends(enabled, true)
mfp:value("0", translate("Disabled")) mfp:value("0", translate("Disabled"))
if platform.device_supports_mfp(uci) then if wireless.device_supports_mfp(uci) then
mfp:value("1", translate("Optional")) mfp:value("1", translate("Optional"))
mfp:value("2", translate("Required")) mfp:value("2", translate("Required"))
end end
...@@ -68,7 +67,7 @@ function f:write() ...@@ -68,7 +67,7 @@ function f:write()
}) })
-- hostapd-mini won't start in case 802.11w is configured -- hostapd-mini won't start in case 802.11w is configured
if platform.device_supports_mfp(uci) then if wireless.device_supports_mfp(uci) then
uci:set('wireless', name, 'ieee80211w', mfp.data) uci:set('wireless', name, 'ieee80211w', mfp.data)
else else
uci:delete('wireless', name, 'ieee80211w') uci:delete('wireless', name, 'ieee80211w')
......
local uci = require("simple-uci").cursor()
local wireless = require 'gluon.wireless'
package 'gluon-web-wifi-config' package 'gluon-web-wifi-config'
if wireless.device_uses_wlan(uci) then
entry({"admin", "wifi-config"}, model("admin/wifi-config"), _("WLAN"), 20) entry({"admin", "wifi-config"}, model("admin/wifi-config"), _("WLAN"), 20)
end
...@@ -24,18 +24,6 @@ local function txpower_list(phy) ...@@ -24,18 +24,6 @@ local function txpower_list(phy)
return new return new
end end
local function has_5ghz_radio()
local result = false
uci:foreach('wireless', 'wifi-device', function(config)
local radio = config['.name']
local hwmode = uci:get('wireless', radio, 'hwmode')
result = result or (hwmode == '11a' or hwmode == '11na')
end)
return result
end
local f = Form(translate("WLAN")) local f = Form(translate("WLAN"))
f:section(Section, nil, translate( f:section(Section, nil, translate(
...@@ -142,7 +130,7 @@ uci:foreach('wireless', 'wifi-device', function(config) ...@@ -142,7 +130,7 @@ uci:foreach('wireless', 'wifi-device', function(config)
end) end)
if has_5ghz_radio() and not wireless.preserve_channels(uci) then if wireless.device_uses_11a(uci) and not wireless.preserve_channels(uci) then
local r = f:section(Section, translate("Outdoor Installation"), translate( local r = f:section(Section, translate("Outdoor Installation"), translate(
"Configuring the node for outdoor use tunes the 5 GHz radio to a frequency " "Configuring the node for outdoor use tunes the 5 GHz radio to a frequency "
.. "and transmission power that conforms with the local regulatory requirements. " .. "and transmission power that conforms with the local regulatory requirements. "
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment