X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fniu%2Fluasrc%2Fmodel%2Fcbi%2Fniu%2Fwireless%2Fap1.lua;h=3ecbf5f4a2757efe80d5e5ac915556d21d487563;hb=2d05a6135a0d29a82148f9bfc215b2de5b609dd5;hp=f6ce258be2d9972fd8f5a517de1053c6dc13883c;hpb=98f1d09a06dd917fa8576f3e677af17ccf736c85;p=project%2Fluci.git diff --git a/modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua b/modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua index f6ce258be..3ecbf5f4a 100644 --- a/modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua +++ b/modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua @@ -13,34 +13,40 @@ You may obtain a copy of the License at $Id$ ]]-- +local iface = "ap" +local ap = true + local fs = require "nixio.fs" local sys = require "luci.sys" local cursor = require "luci.model.uci".inst local state = require "luci.model.uci".inst_state cursor:unload("wireless") -local device = cursor:get("wireless", "ap", "device") + +local device = cursor:get("wireless", iface, "device") local hwtype = cursor:get("wireless", device, "type") local nsantenna = cursor:get("wireless", device, "antenna") local iw = nil -local tx_powers = nil -local chan = sys.wifi.channels() +local tx_powers = {} +local chan = {} state:foreach("wireless", "wifi-iface", function(s) if s.device == device and not iw then iw = sys.wifi.getiwinfo(s.ifname or s.device) - chan = sys.wifi.channels(s.ifname or s.device) + chan = iw and iw.freqlist or { } tx_powers = iw.txpwrlist or { } end end) + +local m -m = Map("wireless", "Configure Access Point", -"The private Access Point is about to be created. You only need to provide ".. -"a network name and a password to finish this step and - if you like - tweak ".. -"some of the advanced settings.") + +if ap then +m = Map("wireless", translate("Configure Access Point")) +end --- Device Settings --- s = m:section(NamedSection, device, "wifi-device", "Device Configuration") @@ -51,13 +57,54 @@ s:tab("general", translate("General Settings")) ch = s:taboption("general", Value, "channel", translate("Channel")) ch:value("auto", translate("automatic")) for _, f in ipairs(chan) do - ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz }) + ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 }) end s:tab("expert", translate("Expert Settings")) if hwtype == "mac80211" then + local macaddr = cursor:get("wireless", device, "macaddr") or "!" + local hwmode = cursor:get("wireless", device, "hwmode") + local modes = {} + local phy + local allowed = {} + for entry in fs.glob("/sys/class/ieee80211/*") do + if (fs.readfile(entry .. "/macaddress") or ""):find(macaddr) == 1 then + phy = entry:sub(22) + end + end + if phy then + local iwp = io.popen("iw phy " .. phy .. " info") + local iwin = iwp:read("*a") + + if iwp then + iwp:close() + local htcap = iwin:match("HT capabilities:%s*0x([0-9a-fA-F]+)") + allowed.n = (htcap and tonumber(htcap, 16) or 0) > 0 + allowed.g = iwin:find("2412 MHz") + allowed.a = iwin:find("5180 MHz") + end + end + + if next(allowed) then + mode = s:taboption("expert", ListValue, "hwmode", translate("Communication Protocol")) + if allowed.n and allowed.g then + mode:value("11ng", "802.11n (2.4 GHz)") + end + if allowed.n and allowed.a then + mode:value("11na", "802.11n (5 GHz)") + end + if allowed.a then + mode:value("11a", "802.11a (5 GHz)") + end + if allowed.g then + mode:value("11g", "802.11g (2.4 GHz)") + mode:value("11bg", "802.11b+g (2.4 GHz)") + mode:value("11b", "802.11b (2.4 GHz)") + end + end + tp = s:taboption("expert", (tx_powers and #tx_powers > 0) and ListValue or Value, "txpower", translate("Transmission Power"), "dBm") @@ -122,13 +169,15 @@ end -s = m:section(NamedSection, "ap", "wifi-iface", "Access Point Details") +s = m:section(NamedSection, iface, "wifi-iface", translate("Interface Details")) s.addremove = false s:tab("general", translate("General Settings")) s:tab("expert", translate("Expert Settings")) -s:taboption("general", Value, "ssid", translate("Network Name (ESSID)")) + + +local ssid = s:taboption("general", Value, "ssid", translate("Network Name (ESSID)")) mode = s:taboption("expert", ListValue, "mode", translate("Operating Mode")) mode.override_values = true @@ -138,26 +187,14 @@ encr = s:taboption("expert", ListValue, "encryption", translate("Encryption")) if hwtype == "mac80211" then - -- Empty -elseif hwtype == "atheros" then - mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")}) - mode:value("wds", translate("Static WDS")) - - function mode.write(self, section, value) - if value == "ap-wds" then - ListValue.write(self, section, "ap") - self.map:set(section, "wds", 1) - else - ListValue.write(self, section, value) - self.map:del(section, "wds") - end - end + mode:value("mesh", translate("Mesh (802.11s)")) + local meshid = s:taboption("expert", Value, "mesh_id", translate("Mesh ID")) + meshid:depends("mode", "mesh") - function mode.cfgvalue(self, section) - local mode = ListValue.cfgvalue(self, section) - local wds = self.map:get(section, "wds") == "1" - return mode == "ap" and wds and "ap-wds" or mode - end + s:taboption("expert", Flag, "wds", translate("Enable Bridging and Repeating (WDS)")):depends("mode", "ap") + s:taboption("expert", Flag, "powersave", translate("Enable Powersaving")):depends("mode", "ap") +elseif hwtype == "atheros" then + -- mode:value("wds", translate("Static WDS")) mp = s:taboption("expert", ListValue, "macpolicy", translate("MAC-Address Filter")) mp:value("", translate("disable")) @@ -166,28 +203,29 @@ elseif hwtype == "atheros" then ml = s:taboption("expert", DynamicList, "maclist", translate("MAC-List")) ml:depends({macpolicy="allow"}) ml:depends({macpolicy="deny"}) - + + s:taboption("expert", Flag, "wds", translate("Enable Bridging and Repeating (WDS)")) - hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) - hidden:depends({mode="ap"}) - hidden:depends({mode="ap-wds"}) - - isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients")) - isolate:depends({mode="ap"}) + if ap then + hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) + hidden:depends({mode="ap"}) + hidden:depends({mode="ap-wds"}) + + isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients")) + isolate:depends({mode="ap"}) + end s:taboption("expert", Flag, "bursting", translate("Allow Burst Transmissions")) elseif hwtype == "broadcom" then - mode:value("wds", translate("WDS")) - - hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) - hidden:depends({mode="ap"}) - hidden:depends({mode="wds"}) + if ap then + hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) + hidden:depends({mode="ap"}) + hidden:depends({mode="wds"}) - isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients")) - isolate:depends({mode="ap"}) + isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients")) + isolate:depends({mode="ap"}) + end elseif hwtype == "prism2" then - mode:value("wds", translate("WDS")) - mp = s:taboption("expert", ListValue, "macpolicy", translate("MAC-Address Filter")) mp:value("", translate("disable")) mp:value("deny", translate("Allow listed only")) @@ -197,31 +235,43 @@ elseif hwtype == "prism2" then ml:depends({macpolicy="allow"}) ml:depends({macpolicy="deny"}) - hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) - hidden:depends({mode="ap"}) - hidden:depends({mode="wds"}) + if ap then + hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point")) + hidden:depends({mode="ap"}) + hidden:depends({mode="wds"}) + end end -- Encryption -- - +encr.default = "wep" -- Early default encr.override_values = true encr.override_depends = true encr:value("none", "No Encryption") -encr:value("wep", "WEP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}) +encr:value("wep", "WEP", {mode="ap"}) if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then local hostapd = fs.access("/usr/sbin/hostapd") or os.getenv("LUCI_SYSROOT") - - if hostapd then - --s:taboption("expert", Flag, "_alloweap", "Allow EAP / 802.11i authentication") - - encr:value("psk", "WPA", {mode="ap"}, {mode="ap-wds"}) - encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="ap-wds"}) - encr:value("psk-mixed", "WPA + WPA2", {mode="ap"}, {mode="ap-wds"}) - encr:value("psk2", "WPA2", {mode="ap"}, {mode="ap-wds"}) - encr:value("wpa2", "WPA2-EAP (802.11i)", {mode="ap"}, {mode="ap-wds"}) + local supplicant = fs.access("/usr/sbin/wpa_supplicant") or os.getenv("LUCI_SYSROOT") + + if hostapd and not supplicant then + encr:value("psk", "WPA", {mode="ap"}) + encr:value("wpa", "WPA-EAP", {mode="ap"}) + encr:value("psk-mixed", "WPA + WPA2", {mode="ap"}) + encr:value("psk2", "WPA2", {mode="ap"}) + encr:value("wpa2", "WPA2-EAP (802.11i)", {mode="ap"}) encr.default = "psk-mixed" + elseif not hostapd and supplicant then + encr:value("psk", "WPA", {mode="mesh"}) + encr:value("psk2", "WPA2", {mode="mesh"}) + encr.default = "psk2" + elseif hostapd and supplicant then + encr:value("psk", "WPA", {mode="ap"}, {mode="mesh"}) + encr:value("wpa", "WPA-EAP", {mode="ap"}) + encr:value("psk-mixed", "WPA + WPA2", {mode="ap"}) + encr:value("psk2", "WPA2", {mode="ap"}, {mode="mesh"}) + encr:value("wpa2", "WPA2-EAP (802.11i)", {mode="ap"}) + encr.default = "psk-mixed" end elseif hwtype == "broadcom" then encr:value("psk", "WPA") @@ -233,15 +283,11 @@ end server = s:taboption("general", Value, "server", translate("Radius-Server")) server:depends({mode="ap", encryption="wpa"}) server:depends({mode="ap", encryption="wpa2"}) -server:depends({mode="ap-wds", encryption="wpa"}) -server:depends({mode="ap-wds", encryption="wpa2"}) server.rmempty = true port = s:taboption("general", Value, "port", translate("Radius-Port")) port:depends({mode="ap", encryption="wpa"}) port:depends({mode="ap", encryption="wpa2"}) -port:depends({mode="ap-wds", encryption="wpa"}) -port:depends({mode="ap-wds", encryption="wpa2"}) port.rmempty = true key = s:taboption("general", Value, "key", translate("Password")) @@ -252,8 +298,6 @@ key:depends("encryption", "psk+psk2") key:depends("encryption", "psk-mixed") key:depends({mode="ap", encryption="wpa"}) key:depends({mode="ap", encryption="wpa2"}) -key:depends({mode="ap-wds", encryption="wpa"}) -key:depends({mode="ap-wds", encryption="wpa2"}) key.rmempty = true key.password = true @@ -261,8 +305,6 @@ if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then nasid = s:taboption("general", Value, "nasid", translate("NAS ID")) nasid:depends({mode="ap", encryption="wpa"}) nasid:depends({mode="ap", encryption="wpa2"}) - nasid:depends({mode="ap-wds", encryption="wpa"}) - nasid:depends({mode="ap-wds", encryption="wpa2"}) nasid.rmempty = true end return m