From 0c3fc70ddbf3f0fc0dcbb5d7c05285b0b2d12ccb Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Mon, 18 Aug 2008 00:38:18 +0000 Subject: [PATCH] Huuuuuuuuuuuge rewrite of the Wireless Configuration --- i18n/english/luasrc/i18n/admin-core.en.lua | 4 +- i18n/english/luasrc/i18n/default.en.lua | 1 + i18n/german/luasrc/i18n/admin-core.de.lua | 4 +- i18n/german/luasrc/i18n/default.de.lua | 1 + libs/cbi/luasrc/view/cbi/button.htm | 6 +- libs/cbi/luasrc/view/cbi/nullsection.htm | 3 + libs/cbi/luasrc/view/cbi/tblsection.htm | 8 +- libs/sys/luasrc/sys.lua | 7 +- .../luasrc/controller/admin/network.lua | 17 +++ .../luasrc/controller/admin/wifi.lua | 34 ----- .../networks.lua => admin_network/wifi.lua} | 54 ++++++- .../model/cbi/admin_network/wireless.lua | 135 ++++++++++++++++++ .../luasrc/model/cbi/admin_wifi/devices.lua | 57 -------- .../luasrc/view/admin_wifi/index.htm | 20 --- 14 files changed, 226 insertions(+), 125 deletions(-) delete mode 100644 modules/admin-full/luasrc/controller/admin/wifi.lua rename modules/admin-full/luasrc/model/cbi/{admin_wifi/networks.lua => admin_network/wifi.lua} (74%) create mode 100644 modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua delete mode 100644 modules/admin-full/luasrc/model/cbi/admin_wifi/devices.lua delete mode 100644 modules/admin-full/luasrc/view/admin_wifi/index.htm diff --git a/i18n/english/luasrc/i18n/admin-core.en.lua b/i18n/english/luasrc/i18n/admin-core.en.lua index 4a47e4f1d7..c3552f069c 100644 --- a/i18n/english/luasrc/i18n/admin-core.en.lua +++ b/i18n/english/luasrc/i18n/admin-core.en.lua @@ -287,4 +287,6 @@ a_w_tlsprivkey = "Path to Private Key" a_w_tlsprivkeypwd = "Password of Private Key" a_w_peapauth = "PEAP-Authentication" a_w_peapidentity = "PEAP-Identity" -a_w_peappassword = "PEAP-Password" \ No newline at end of file +a_w_peappassword = "PEAP-Password" + +a_w_create = "Create Network" \ No newline at end of file diff --git a/i18n/english/luasrc/i18n/default.en.lua b/i18n/english/luasrc/i18n/default.en.lua index 6a57073b5b..f57da7f35c 100644 --- a/i18n/english/luasrc/i18n/default.en.lua +++ b/i18n/english/luasrc/i18n/default.en.lua @@ -70,6 +70,7 @@ reset = [[Reset]] revert = [[Revert]] save = [[Save]] saveapply = [[Save & Apply]] +scan = [[Scan]] service = [[Service]] services = [[Services]] settings = [[Settings]] diff --git a/i18n/german/luasrc/i18n/admin-core.de.lua b/i18n/german/luasrc/i18n/admin-core.de.lua index c71dfc1de1..db989047e7 100644 --- a/i18n/german/luasrc/i18n/admin-core.de.lua +++ b/i18n/german/luasrc/i18n/admin-core.de.lua @@ -362,4 +362,6 @@ a_w_tlsprivkey = "Pfad zum Privaten Schlüssel" a_w_tlsprivkeypwd = "Passwort des Privaten Schlüssels" a_w_peapauth = "PEAP-Authentifizierung" a_w_peapidentity = "PEAP-Identitäz" -a_w_peappassword = "PEAP-Passwort" \ No newline at end of file +a_w_peappassword = "PEAP-Passwort" + +a_w_create = "Netzwerk anlegen" \ No newline at end of file diff --git a/i18n/german/luasrc/i18n/default.de.lua b/i18n/german/luasrc/i18n/default.de.lua index 078c1e8d31..bff0203e6e 100644 --- a/i18n/german/luasrc/i18n/default.de.lua +++ b/i18n/german/luasrc/i18n/default.de.lua @@ -88,6 +88,7 @@ revert = "Verwerfen" save = "Speichern" saveapply = "Speichern & Anwenden" +scan = "Scan" service = "Dienst" services = "Dienste" settings = "Einstellungen" diff --git a/libs/cbi/luasrc/view/cbi/button.htm b/libs/cbi/luasrc/view/cbi/button.htm index 2d740f45c0..c2a0d437e8 100644 --- a/libs/cbi/luasrc/view/cbi/button.htm +++ b/libs/cbi/luasrc/view/cbi/button.htm @@ -13,5 +13,9 @@ $Id$ -%> <%+cbi/valueheader%> - class="cbi-input-<%=self.inputstyle%>"<% end %> type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.title) %> /> + <% if self:cfgvalue(section) ~= false then %> + class="cbi-input-<%=self.inputstyle%>"<% end %> type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.title)%> /> + <% else %> + - + <% end %> <%+cbi/valuefooter%> diff --git a/libs/cbi/luasrc/view/cbi/nullsection.htm b/libs/cbi/luasrc/view/cbi/nullsection.htm index b01a6a9f58..476db96d87 100644 --- a/libs/cbi/luasrc/view/cbi/nullsection.htm +++ b/libs/cbi/luasrc/view/cbi/nullsection.htm @@ -13,6 +13,9 @@ $Id$ -%>
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %>
<% self:render_children(1, scope or {}) %>
diff --git a/libs/cbi/luasrc/view/cbi/tblsection.htm b/libs/cbi/luasrc/view/cbi/tblsection.htm index d03d6f4971..66de5aeb2a 100644 --- a/libs/cbi/luasrc/view/cbi/tblsection.htm +++ b/libs/cbi/luasrc/view/cbi/tblsection.htm @@ -76,7 +76,13 @@ end <%- if self.extedit or self.addremove then -%> <%- if self.extedit then -%> - <%:edit%> + + <%=self.extedit:format(section)%> + <%- elseif type(self.extedit) == "function" then -%> + <%=self:extedit(section)%> + <%- end -%> + " title="<%:edit%>"><%:edit%> <%- end; if self.addremove then %> <%- end -%> diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 970dcffaaa..d0dc5acbd8 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -432,8 +432,9 @@ end --- Get iwlist scan output from all wireless devices. -- @return Table of tables contaiing all scan results -function wifi.iwscan() - local cnt = luci.util.exec("iwlist scan 2>/dev/null") +function wifi.iwscan(iface) + local siface = iface or "" + local cnt = luci.util.exec("iwlist "..siface.." scan 2>/dev/null") local iws = {} for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n\n")) do @@ -451,7 +452,7 @@ function wifi.iwscan() end end - return iws + return iface and (iws[iface] or {}) or iws end diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 3952fb868b..23a575852b 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -28,6 +28,23 @@ function index() page.title = i18n("a_n_switch") page.order = 20 + local page = node("admin", "network", "wireless") + page.target = form("admin_network/wireless") + page.title = i18n("wifi") + page.order = 15 + luci.model.uci.foreach("wireless", "wifi-device", + function (section) + local ifc = section[".name"] + entry({"admin", "network", "wireless", ifc}, + alias("admin", "network", "wifi", ifc), + ifc:upper()) + end + ) + + local page = node("admin", "network", "wifi") + page.target = cbi("admin_network/wifi") + page.leaf = true + local page = node("admin", "network", "network") page.target = cbi("admin_network/network") page.title = i18n("interfaces", "Schnittstellen") diff --git a/modules/admin-full/luasrc/controller/admin/wifi.lua b/modules/admin-full/luasrc/controller/admin/wifi.lua deleted file mode 100644 index 4bef0b7a52..0000000000 --- a/modules/admin-full/luasrc/controller/admin/wifi.lua +++ /dev/null @@ -1,34 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -$Id$ -]]-- -module("luci.controller.admin.wifi", package.seeall) - -function index() - luci.i18n.loadc("admin-core") - local i18n = luci.i18n.translate - - local page = node("admin", "wifi") - page.target = template("admin_wifi/index") - page.title = i18n("wifi", "Drahtlos") - page.order = 60 - - local page = node("admin", "wifi", "devices") - page.target = cbi("admin_wifi/devices") - page.title = i18n("devices", "Geräte") - page.order = 10 - - local page = node("admin", "wifi", "networks") - page.target = cbi("admin_wifi/networks") - page.title = i18n("networks", "Netze") - page.order = 20 -end \ No newline at end of file diff --git a/modules/admin-full/luasrc/model/cbi/admin_wifi/networks.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua similarity index 74% rename from modules/admin-full/luasrc/model/cbi/admin_wifi/networks.lua rename to modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua index a109587d90..64a4928796 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_wifi/networks.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -12,20 +12,60 @@ You may obtain a copy of the License at $Id$ ]]-- require("luci.tools.webadmin") +arg[1] = arg[1] or "" + m = Map("wireless", translate("networks"), translate("a_w_networks1")) -s = m:section(TypedSection, "wifi-iface", "") +s = m:section(NamedSection, arg[1], "wifi-device", translate("device") .. " " .. arg[1]) +--s.addremove = true + +en = s:option(Flag, "disabled", translate("enable")) +en.enabled = "0" +en.disabled = "1" + +function en.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +t = s:option(DummyValue, "type", translate("type")) + +mode = s:option(ListValue, "mode", translate("mode")) +mode:value("", "standard") +mode:value("11b", "802.11b") +mode:value("11g", "802.11g") +mode:value("11a", "802.11a") +mode:value("11bg", "802.11b+g") +mode.rmempty = true + +s:option(Value, "channel", translate("a_w_channel")) + +s:option(Value, "txantenna", translate("a_w_txantenna")).optional = true + +s:option(Value, "rxantenna", translate("a_w_rxantenna")).optional = true + +s:option(Value, "distance", translate("distance"), + translate("a_w_distance1")).optional = true + +s:option(Value, "diversity", translate("a_w_diversity")):depends("type", "atheros") + +country = s:option(Value, "country", translate("a_w_countrycode")) +country.optional = true +country:depends("type", "broadcom") + +maxassoc = s:option(Value, "maxassoc", translate("a_w_connlimit")) +maxassoc:depends("type", "broadcom") +maxassoc.optional = true + + + +s = m:section(TypedSection, "wifi-iface", translate("interfaces")) s.addremove = true s.anonymous = true +s:depends("device", arg[1]) +s.defaults.device = arg[1] s:option(Value, "ssid", translate("a_w_netid")).maxlength = 32 -device = s:option(ListValue, "device", translate("device")) -luci.model.uci.foreach("wireless", "wifi-device", - function (section) - device:value(section[".name"]) - end) - network = s:option(ListValue, "network", translate("network"), translate("a_w_network1")) network:value("") luci.tools.webadmin.cbi_add_networks(network) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua new file mode 100644 index 0000000000..ae2462838c --- /dev/null +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wireless.lua @@ -0,0 +1,135 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2008 Steven Barth +Copyright 2008 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]]-- +require("luci.sys") +require("luci.tools.webadmin") + +luci.model.uci.load_state("wireless") +local wireless = luci.model.uci.get_all("wireless") +luci.model.uci.unload("wireless") + +local wifidata = luci.sys.wifi.getiwconfig() +local ifaces = {} + +for k, v in pairs(wireless) do + if v[".type"] == "wifi-iface" then + table.insert(ifaces, v) + end +end + + +m = SimpleForm("wireless", translate("wifi")) + +s = m:section(Table, ifaces, translate("networks")) + +function s.extedit(self, section) + local device = self.map:get(section, "device") or "" + return luci.http.getenv("REQUEST_URI") .. "/" .. device +end + +link = s:option(DummyValue, "_link", translate("link")) +function link.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + return wifidata[ifname] and wifidata[ifname]["Link Quality"] or "-" +end + +essid = s:option(DummyValue, "ssid", "ESSID") + +bssid = s:option(DummyValue, "_bsiid", "BSSID") +function bssid.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + return (wifidata[ifname] and (wifidata[ifname].Cell + or wifidata[ifname]["Access Point"])) or "-" +end + +channel = s:option(DummyValue, "channel", translate("channel")) +function channel.cfgvalue(self, section) + return wireless[self.map:get(section, "device")].channel +end + +protocol = s:option(DummyValue, "_mode", translate("protocol")) +function protocol.cfgvalue(self, section) + return "802." .. wireless[self.map:get(section, "device")].mode +end + +mode = s:option(DummyValue, "mode", translate("mode")) +encryption = s:option(DummyValue, "encryption", translate("iwscan_encr")) + +power = s:option(DummyValue, "_power", translate("power")) +function power.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + return wifidata[ifname] and wifidata[ifname]["Tx-Power"] or "-" +end + +scan = s:option(Button, "_scan", translate("scan")) +scan.inputstyle = "find" + +function scan.cfgvalue(self, section) + return self.map:get(section, "ifname") or false +end + +t2 = m:section(Table, {}, translate("iwscan"), translate("iwscan1")) + +function scan.write(self, section) + t2.render = t2._render + local ifname = self.map:get(section, "ifname") + luci.util.update(t2.data, luci.sys.wifi.iwscan(ifname)) +end + +t2._render = t2.render +t2.render = function() end + +t2:option(DummyValue, "Quality", translate("iwscan_link")) +essid = t2:option(DummyValue, "ESSID", "ESSID") +function essid.cfgvalue(self, section) + return luci.util.pcdata(self.map:get(section, "ESSID")) +end + +t2:option(DummyValue, "Address", "BSSID") +t2:option(DummyValue, "Mode", translate("mode")) +chan = t2:option(DummyValue, "channel", translate("channel")) +function chan.cfgvalue(self, section) + return self.map:get(section, "Channel") + or self.map:get(section, "Frequency") + or "-" +end + +t2:option(DummyValue, "Encryption key", translate("iwscan_encr")) + +t2:option(DummyValue, "Signal level", translate("iwscan_signal")) + +t2:option(DummyValue, "Noise level", translate("iwscan_noise")) + + +s2 = m:section(SimpleSection, translate("a_w_create")) +create = s2:option(ListValue, "create", translate("device")) +create:value("", translate("cbi_select")) +for k, v in pairs(wireless) do + if v[".type"] == "wifi-device" then + create:value(k) + end +end + +function create.write(self, section, value) + luci.model.uci.load_config("wireless") + luci.model.uci.section("wireless", "wifi-iface", nil, {device=value}) + luci.model.uci.save_config("wireless") + luci.http.redirect(luci.http.getenv("REQUEST_URI") .. "/" .. value) +end + +function create.cbid(self, section) + return "priv.cbid.create" +end + +return m \ No newline at end of file diff --git a/modules/admin-full/luasrc/model/cbi/admin_wifi/devices.lua b/modules/admin-full/luasrc/model/cbi/admin_wifi/devices.lua deleted file mode 100644 index e33f241614..0000000000 --- a/modules/admin-full/luasrc/model/cbi/admin_wifi/devices.lua +++ /dev/null @@ -1,57 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -$Id$ -]]-- -m = Map("wireless", translate("devices"), translate("a_w_devices1", - "An dieser Stelle können eingebaute WLAN-Geräte konfiguriert werden.")) - -s = m:section(TypedSection, "wifi-device", "") ---s.addremove = true - -en = s:option(Flag, "disabled", translate("enable")) -en.enabled = "0" -en.disabled = "1" - -function en.cfgvalue(self, section) - return Flag.cfgvalue(self, section) or "0" -end - -t = s:option(DummyValue, "type", translate("type")) - -mode = s:option(ListValue, "mode", translate("mode")) -mode:value("", "standard") -mode:value("11b", "802.11b") -mode:value("11g", "802.11g") -mode:value("11a", "802.11a") -mode:value("11bg", "802.11b+g") -mode.rmempty = true - -s:option(Value, "channel", translate("a_w_channel")) - -s:option(Value, "txantenna", translate("a_w_txantenna")).rmempty = true - -s:option(Value, "rxantenna", translate("a_w_rxantenna")).rmempty = true - -s:option(Value, "distance", translate("distance"), - translate("a_w_distance1")).rmempty = true - -s:option(Value, "diversity", translate("a_w_diversity")):depends("type", "atheros") - -country = s:option(Value, "country", translate("a_w_countrycode")) -country.optional = true -country:depends("type", "broadcom") - -maxassoc = s:option(Value, "maxassoc", translate("a_w_connlimit")) -maxassoc:depends("type", "broadcom") -maxassoc.optional = true - -return m \ No newline at end of file diff --git a/modules/admin-full/luasrc/view/admin_wifi/index.htm b/modules/admin-full/luasrc/view/admin_wifi/index.htm deleted file mode 100644 index 58281d14f9..0000000000 --- a/modules/admin-full/luasrc/view/admin_wifi/index.htm +++ /dev/null @@ -1,20 +0,0 @@ -<%# -LuCI - Lua Configuration Interface -Copyright 2008 Steven Barth -Copyright 2008 Jo-Philipp Wich - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -$Id$ - --%> -<%+header%> -

<%:wifi%>

-

<%:a_w_wifi1%>

-

<%:a_w_wifi2%>

-

<%:a_w_wifi3%>

-<%+footer%> \ No newline at end of file -- 2.30.2