gluon-packages/gluon/gluon-luci-wifi/files/usr/lib/lua/luci/model/cbi/admin/wifi.lua

176 lines
6.9 KiB
Lua

local f, s, o
local config = "wireless"
local uci = luci.model.uci.cursor()
local radios24 = {}
local radios5 = {}
local primary_iface = 'wan_radio0'
local private_ssid = uci:get(config, primary_iface, "ssid")
local countries = {{"Belgien", "BE"}, {"Bolivien", "BO"}, {"Dänemark", "DK"}, {"Deutschland", "DE"}, {"Frankreich", "FR"}, {"Italien", "IT"}, {"Niederlande", "NL"}, {"Österreich", "AT"}, {"Polen", "PL"}, {"Schweden", "SE"}, {"Schweiz", "CH"}, {"Tschechische Republik", "CZ"}, {"USA", "US"}}
-- look for wifi interfaces and add them to the specific array
uci:foreach(config, 'wifi-device',
function(s)
--get the hwmode to separate 2.4 GHz and 5 GHz radios
local hwmode = uci:get(config, s['.name'], 'hwmode')
if hwmode == '11g' or hwmode == '11ng' then --if 2.4 GHz
table.insert(radios24, s['.name'])
elseif hwmode == '11a' or hwmode == '11na' then --if 5 GHz
table.insert(radios5, s['.name'])
end
end
)
local radios_type = {{"2,4 GHz","24",radios24},{"5 GHz", "5", radios5}}
f = SimpleForm("wifi", "WLAN-Einstellungen")
f.reset = false
f.template = "admin/expertmode"
f.submit = "Speichern"
s = f:section(SimpleSection, nil, [[
In diesem Abschnitt hast du die Möglichkeit die SSID für das Clientnetzwerk zu ändern (nur für Profis!), die maximale Sendeleistung und Reichweite festzusetzen,
die SSIDs des Client- und des Mesh-Netzes zu de/aktivieren, die Region auszuwählen und die Preisgabe der Region in den Beacons abzuschalten (wird nicht empfohlen).
]])
-- show options for 2.4/5 GHz devices
for i=1,#radios_type do
local rtype = radios_type[i]
if table.getn(rtype[3]) > 0 then
s = f:section(SimpleSection, rtype[1], nil)
for index, radio in ipairs(rtype[3]) do
-- ssid for client network
local ssid = uci:get(config, "client_" .. radio, "ssid")
if ssid then
o = s:option(Value, 'ssid' .. rtype[2] .. index, "AP-SSID")
o.default = ssid
o.rmempty = false
end
-- tx power
o = s:option(Value, 'txpower' .. rtype[2] .. index, "Sendeleistung (in dBm)")
local txpower = uci:get(config, radio, "txpower")
if not txpower then txpower="30" end
o.default = txpower
o.datatype = "uinteger"
o.rmempty = false
-- distance
o = s:option(Value, 'distance' .. rtype[2] .. index, "Reichweite (in Metern)")
local distance = uci:get(config, radio, "distance")
if not distance then distance="100" end
o.default = distance
o.datatype = "uinteger"
o.rmempty = false
-- country code
o=s:option(ListValue, "country" .. rtype[2] .. index, "Region")
o.default=uci:get(config, radio, "country")
for i=1,#countries do o:value(countries[i][2],countries[i][1]) end
-- IE in beacons
o = s:option(Flag, 'country_ie' .. rtype[2] .. index, "IE senden (empfohlen)")
local country_ie = uci:get(config, radio, "country_ie")
if not country_ie then country_ie="1" end
o.default = country_ie
o.rmempty = false
-- client network switch
o = s:option(Flag, 'clientbox' .. rtype[2] .. index, "Client-Netz aktivieren")
o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled
o.rmempty = false
-- mesh network switch
o = s:option(Flag, 'meshbox' .. rtype[2] .. index, "Mesh-Netz aktivieren")
o.default = (uci:get_bool(config, 'mesh_' .. radio, "disabled")) and o.disabled or o.enabled
o.rmempty = false
end
end
end
-- show options for private wifi
s = f:section(SimpleSection, "Privates WLAN", [[
Dein Freifunk-Router kann ebenfalls die Reichweite deines privaten Netzes erweitern.
Hierfür wird der WAN-Port mit einem separatem WLAN gebridged.
Diese Funktionalität ist völlig unabhängig von Freifunk.
Beachte, dass du nicht gleichzeitig das Meshen über den WAN Port aktiviert haben solltest.
]])
-- private wifi switch
o = s:option(Flag, "private_enabled", "Aktiviert")
o.default = (private_ssid and not uci:get_bool(config, primary_iface, "disabled")) and o.enabled or o.disabled
o.rmempty = false
-- private wifi ssid
o = s:option(Value, "private_ssid", "Name (SSID)")
o.default = private_ssid
-- private wifi key
o = s:option(Value, "private_key", "Schlüssel", "8-63 Zeichen")
o.datatype = "wpakey"
o.default = uci:get(config, primary_iface, "key")
-- handle submitted changes
function f.handle(self, state, data)
if state == FORM_VALID then
for i=1,#radios_type do
local rtype = radios_type[i]
for index, radio in ipairs(rtype[3]) do
-- set client network ssid
uci:set(config, "client_" .. radio, "ssid", data["ssid" .. rtype[2] .. index])
-- set tx power
uci:set(config, radio, "txpower", data["txpower" .. rtype[2] .. index])
-- set country code
uci:set(config, radio, "country", data["country" .. rtype[2] .. index])
-- set distance
uci:set(config, radio, "distance", data["distance" .. rtype[2] .. index])
-- set IE in beacons
uci:set(config, radio, "country_ie", data["country_ie" .. rtype[2] .. index])
-- set client network switch
if data["clientbox" .. rtype[2] .. index] == '0' then
uci:set(config, 'client_' .. radio, "disabled", 'true')
else
uci:set(config, 'client_' .. radio, "disabled", 'false')
end
-- set mesh network switch
if data["meshbox" .. rtype[2] .. index] == '0' then
uci:set(config, 'mesh_' .. radio, "disabled", 'true')
else
uci:set(config, 'mesh_' .. radio, "disabled", 'false')
end
end
end
uci:foreach(config, "wifi-device",
function(s)
local device = s['.name']
local name = "wan_" .. device
if data.private_enabled == '1' then
-- set up WAN wifi-iface
local t = uci:get_all(config, name) or {}
t.device = device
t.network = "wan"
t.mode = 'ap'
t.encryption = 'psk2'
t.ssid = data.private_ssid
t.key = data.private_key
t.disabled = "false"
uci:section(config, "wifi-iface", name, t)
else
-- disable WAN wifi-iface
uci:set(config, name, "disabled", "true")
end
end)
-- save and commit changes
uci:save(config)
uci:commit(config)
end
end
return f