X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=modules%2Fadmin-mini%2Fluasrc%2Fmodel%2Fcbi%2Fmini%2Fwifi.lua;h=fea123756028824b8531adc6f3037745a9221a05;hb=0feb0a4607bfe4472c60941b59f2fd7e1c4f4947;hp=95407be85ffb0443b5df402af0c8f4a7531ea792;hpb=4db21391164842ce28193b4d5fac8b62e6d9a521;p=project%2Fluci.git diff --git a/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua b/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua index 95407be85..fea123756 100644 --- a/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua +++ b/modules/admin-mini/luasrc/model/cbi/mini/wifi.lua @@ -15,11 +15,17 @@ $Id$ -- Data init -- -luci.model.uci.load_state("wireless") -local wireless = luci.model.uci.get_all("wireless") -luci.model.uci.unload("wireless") +local uci = luci.model.uci.cursor() +if not uci:get("network", "wan") then + uci:section("network", "interface", "wan", {proto="none", ifname=" "}) + uci:save("network") + uci:commit("network") +end +local wlcursor = luci.model.uci.cursor_state() +local wireless = wlcursor:get_all("wireless") local wifidata = luci.sys.wifi.getiwconfig() +local wifidevs = {} local ifaces = {} for k, v in pairs(wireless) do @@ -28,6 +34,11 @@ for k, v in pairs(wireless) do end end +wlcursor:foreach("wireless", "wifi-device", + function(section) + table.insert(wifidevs, section[".name"]) + end) + -- Main Map -- @@ -49,7 +60,7 @@ 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 + return (wifidata[ifname] and (wifidata[ifname].Cell or wifidata[ifname]["Access Point"])) or "-" end @@ -85,6 +96,7 @@ end t2 = m:section(Table, {}, translate("iwscan"), translate("iwscan1")) function scan.write(self, section) + m.autoapply = false t2.render = t2._render local ifname = self.map:get(section, "ifname") luci.util.update(t2.data, luci.sys.wifi.iwscan(ifname)) @@ -96,7 +108,7 @@ 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")) + return self.map:get(section, "ESSID") end t2:option(DummyValue, "Address", "BSSID") @@ -106,7 +118,7 @@ function chan.cfgvalue(self, section) return self.map:get(section, "Channel") or self.map:get(section, "Frequency") or "-" -end +end t2:option(DummyValue, "Encryption key", translate("iwscan_encr")) @@ -115,11 +127,18 @@ t2:option(DummyValue, "Signal level", translate("iwscan_signal")) t2:option(DummyValue, "Noise level", translate("iwscan_noise")) + +if #wifidevs < 1 then + return m +end + -- Config Section -- -s = m:section(TypedSection, "wifi-device", translate("devices")) +s = m:section(NamedSection, wifidevs[1], "wifi-device", translate("devices")) +s.addremove = false en = s:option(Flag, "disabled", translate("enable")) +en.rmempty = false en.enabled = "0" en.disabled = "1" @@ -128,13 +147,19 @@ function en.cfgvalue(self, section) end -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 +local hwtype = m:get(wifidevs[1], "type") + +if hwtype == "atheros" then + mode = s:option(ListValue, "hwmode", translate("mode")) + mode.override_values = true + mode:value("", "auto") + mode:value("11b", "802.11b") + mode:value("11g", "802.11g") + mode:value("11a", "802.11a") + mode:value("11bg", "802.11b+g") + mode.rmempty = true +end + ch = s:option(Value, "channel", translate("a_w_channel")) for i=1, 14 do @@ -144,15 +169,18 @@ end s = m:section(TypedSection, "wifi-iface", translate("m_n_local")) s.anonymous = true +s.addremove = false + +s:option(Value, "ssid", translate("a_w_netid")) -s:option(Value, "ssid", translate("a_w_netid")).maxlength = 32 +bssid = s:option(Value, "bssid", translate("wifi_bssid")) local devs = {} -luci.model.uci.foreach("wireless", "wifi-device", +luci.model.uci.cursor():foreach("wireless", "wifi-device", function (section) table.insert(devs, section[".name"]) end) - + if #devs > 1 then device = s:option(DummyValue, "device", translate("device")) else @@ -160,28 +188,23 @@ else end mode = s:option(ListValue, "mode", translate("mode")) +mode.override_values = true mode:value("ap", translate("m_w_ap")) mode:value("adhoc", translate("m_w_adhoc")) mode:value("sta", translate("m_w_client")) function mode.write(self, section, value) if value == "sta" then - -- ToDo: Move this away - if not luci.model.uci.get("network", "wan") then - luci.model.uci.set("network", "wan", "proto", "none") - luci.model.uci.set("network", "wan", "ifname", " ") - end - - local oldif = luci.model.uci.get("network", "wan", "ifname") + local oldif = m.uci:get("network", "wan", "ifname") if oldif and oldif ~= " " then - luci.model.uci.set("network", "wan", "_ifname", oldif) + m.uci:set("network", "wan", "_ifname", oldif) end - luci.model.uci.set("network", "wan", "ifname", " ") + m.uci:set("network", "wan", "ifname", " ") self.map:set(section, "network", "wan") else - if luci.model.uci.get("network", "wan", "_ifname") then - luci.model.uci.set("network", "wan", "ifname", luci.model.uci.get("network", "wan", "_ifname")) + if m.uci:get("network", "wan", "_ifname") then + m.uci:set("network", "wan", "ifname", m.uci:get("network", "wan", "_ifname")) end self.map:set(section, "network", "lan") end @@ -190,37 +213,77 @@ function mode.write(self, section, value) end encr = s:option(ListValue, "encryption", translate("encryption")) -encr:value("none", "keine") +encr.override_values = true +encr:value("none", "No Encryption") encr:value("wep", "WEP") -encr:value("psk", "WPA-PSK") -encr:value("wpa", "WPA-Radius") -encr:value("psk2", "WPA2-PSK") -encr:value("wpa2", "WPA2-Radius") + +if hwtype == "atheros" or hwtype == "mac80211" then + local supplicant = luci.fs.mtime("/usr/sbin/wpa_supplicant") + local hostapd = luci.fs.mtime("/usr/sbin/hostapd") + + if hostapd and supplicant then + encr:value("psk", "WPA-PSK") + encr:value("psk2", "WPA2-PSK") + encr:value("mixed", "WPA-PSK/WPA2-PSK Mixed Mode") + encr:value("wpa", "WPA-Radius", {mode="ap"}) + encr:value("wpa2i", "WPA2-Radius", {mode="ap"}) + elseif hostapd and not supplicant then + encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="adhoc"}) + encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="adhoc"}) + encr:value("mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="adhoc"}) + encr:value("wpa", "WPA-Radius", {mode="ap"}) + encr:value("wpa2i", "WPA2-Radius", {mode="ap"}) + encr.description = translate("wifi_wpareq") + elseif not hostapd and supplicant then + encr:value("psk", "WPA-PSK", {mode="sta"}) + encr:value("psk2", "WPA2-PSK", {mode="sta"}) + encr:value("mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="sta"}) + encr.description = translate("wifi_wpareq") + else + encr.description = translate("wifi_wpareq") + end +elseif hwtype == "broadcom" then + encr:value("psk", "WPA-PSK") + encr:value("psk2", "WPA2-PSK") + encr:value("psk+psk2", "WPA-PSK/WPA2-PSK Mixed Mode") +end key = s:option(Value, "key", translate("key")) key:depends("encryption", "wep") key:depends("encryption", "psk") key:depends("encryption", "wpa") key:depends("encryption", "psk2") -key:depends("encryption", "wpa2") +key:depends("encryption", "wpa2i") key.rmempty = true server = s:option(Value, "server", translate("a_w_radiussrv")) server:depends("encryption", "wpa") -server:depends("encryption", "wpa2") +server:depends("encryption", "wpa2i") server.rmempty = true port = s:option(Value, "port", translate("a_w_radiusport")) port:depends("encryption", "wpa") -port:depends("encryption", "wpa2") +port:depends("encryption", "wpa2i") port.rmempty = true -iso = s:option(Flag, "isolate", translate("a_w_apisolation"), translate("a_w_apisolation1")) -iso.rmempty = true -iso:depends("mode", "ap") -hide = s:option(Flag, "hidden", translate("a_w_hideessid")) -hide.rmempty = true -hide:depends("mode", "ap") +if hwtype == "atheros" or hwtype == "broadcom" then + iso = s:option(Flag, "isolate", translate("a_w_apisolation"), translate("a_w_apisolation1")) + iso.rmempty = true + iso:depends("mode", "ap") + + hide = s:option(Flag, "hidden", translate("a_w_hideessid")) + hide.rmempty = true + hide:depends("mode", "ap") +end + +if hwtype == "mac80211" or hwtype == "atheros" then + bssid:depends({mode="adhoc"}) +end + +if hwtype == "broadcom" then + bssid:depends({mode="wds"}) +end + -return m \ No newline at end of file +return m