modules/admin-full: only offer hwmodes actually supported by the wiphy
[project/luci.git] / modules / admin-full / luasrc / model / cbi / admin_network / wifi.lua
index adf6651..76c0234 100644 (file)
@@ -58,16 +58,10 @@ end
 m.title = ww:get_i18n(wnet)
 
 
-local iw = nil
-local tx_powers = nil
-
-m.uci:foreach("wireless", "wifi-iface",
-       function(s)
-               if s.device == arg[1] and not iw then
-                       iw = luci.sys.wifi.getiwinfo(s.ifname or s.device)
-                       tx_powers = iw.txpwrlist or { }
-               end
-       end)
+local iw = luci.sys.wifi.getiwinfo(arg[1])
+local tx_powers = iw.txpwrlist  or { }
+local hw_modes  = iw.hwmodelist or { }
+
 
 s = m:section(NamedSection, arg[1], "wifi-device", translate("Device Configuration"))
 s.addremove = false
@@ -82,7 +76,11 @@ back.value = ""
 back.titleref = luci.dispatcher.build_url("admin", "network", "wireless")
 ]]
 
-en = s:taboption("general", Flag, "disabled", translate("enable"))
+st = s:taboption("general", DummyValue, "__status", translate("Status"))
+st.template = "admin_network/wifi_status"
+st.ifname   = arg[1]
+
+en = s:taboption("general", Flag, "disabled", translate("Enable device"))
 en.enabled = "0"
 en.disabled = "1"
 en.rmempty = false
@@ -91,7 +89,6 @@ function en.cfgvalue(self, section)
        return Flag.cfgvalue(self, section) or "0"
 end
 
-s:taboption("general", DummyValue, "type", translate("Type"))
 
 local hwtype = m:get(arg[1], "type")
 local htcaps = m:get(arg[1], "ht_capab") and true or false
@@ -102,7 +99,9 @@ local nsantenna = m:get(arg[1], "antenna")
 ch = s:taboption("general", Value, "channel", translate("Channel"))
 ch:value("auto", translate("auto"))
 for _, f in ipairs(iw and iw.freqlist or luci.sys.wifi.channels()) do
-       ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })
+       if not f.restricted then
+               ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })
+       end
 end
 
 
@@ -121,13 +120,13 @@ if hwtype == "mac80211" then
 
        mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))
        mode:value("", translate("auto"))
-       mode:value("11b", "802.11b")
-       mode:value("11g", "802.11g")
-       mode:value("11a", "802.11a")
+       if hw_modes.b then mode:value("11b", "802.11b") end
+       if hw_modes.g then mode:value("11g", "802.11g") end
+       if hw_modes.a then mode:value("11a", "802.11a") end
 
        if htcaps then
-               mode:value("11ng", "802.11g+n")
-               mode:value("11na", "802.11a+n")
+               if hw_modes.g and hw_modes.n then mode:value("11ng", "802.11g+n") end
+               if hw_modes.a and hw_modes.n then mode:value("11na", "802.11a+n") end
 
                htmode = s:taboption("advanced", ListValue, "htmode", translate("HT mode"))
                htmode:depends("hwmode", "11na")
@@ -171,12 +170,12 @@ if hwtype == "atheros" then
 
        mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))
        mode:value("", translate("auto"))
-       mode:value("11b", "802.11b")
-       mode:value("11g", "802.11g")
-       mode:value("11a", "802.11a")
-       mode:value("11bg", "802.11b+g")
-       mode:value("11gst", "802.11g + Turbo")
-       mode:value("11ast", "802.11a + Turbo")
+       if hw_modes.b then mode:value("11b", "802.11b") end
+       if hw_modes.g then mode:value("11g", "802.11g") end
+       if hw_modes.a then mode:value("11a", "802.11a") end
+       if hw_modes.g then mode:value("11bg", "802.11b+g") end
+       if hw_modes.g then mode:value("11gst", "802.11g + Turbo") end
+       if hw_modes.a then mode:value("11ast", "802.11a + Turbo") end
        mode:value("fh", translate("Frequency Hopping"))
 
        s:taboption("advanced", Flag, "diversity", translate("Diversity")).rmempty = false
@@ -626,9 +625,9 @@ if wnet then
                nasid.rmempty = true
 
                eaptype = s:taboption("encryption", ListValue, "eap_type", translate("EAP-Method"))
-               eaptype:value("TLS")
-               eaptype:value("TTLS")
-               eaptype:value("PEAP")
+               eaptype:value("tls")
+               eaptype:value("ttls")
+               eaptype:value("peap")
                eaptype:depends({mode="sta", encryption="wpa"})
                eaptype:depends({mode="sta", encryption="wpa2"})
 
@@ -637,12 +636,12 @@ if wnet then
                cacert:depends({mode="sta", encryption="wpa2"})
 
                privkey = s:taboption("encryption", FileUpload, "priv_key", translate("Path to Private Key"))
-               privkey:depends({mode="sta", eap_type="TLS", encryption="wpa2"})
-               privkey:depends({mode="sta", eap_type="TLS", encryption="wpa"})
+               privkey:depends({mode="sta", eap_type="tls", encryption="wpa2"})
+               privkey:depends({mode="sta", eap_type="tls", encryption="wpa"})
 
                privkeypwd = s:taboption("encryption", Value, "priv_key_pwd", translate("Password of Private Key"))
-               privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa2"})
-               privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa"})
+               privkeypwd:depends({mode="sta", eap_type="tls", encryption="wpa2"})
+               privkeypwd:depends({mode="sta", eap_type="tls", encryption="wpa"})
 
 
                auth = s:taboption("encryption", Value, "auth", translate("Authentication"))
@@ -650,23 +649,23 @@ if wnet then
                auth:value("CHAP")
                auth:value("MSCHAP")
                auth:value("MSCHAPV2")
-               auth:depends({mode="sta", eap_type="PEAP", encryption="wpa2"})
-               auth:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
-               auth:depends({mode="sta", eap_type="TTLS", encryption="wpa2"})
-               auth:depends({mode="sta", eap_type="TTLS", encryption="wpa"})
+               auth:depends({mode="sta", eap_type="peap", encryption="wpa2"})
+               auth:depends({mode="sta", eap_type="peap", encryption="wpa"})
+               auth:depends({mode="sta", eap_type="ttls", encryption="wpa2"})
+               auth:depends({mode="sta", eap_type="ttls", encryption="wpa"})
 
 
                identity = s:taboption("encryption", Value, "identity", translate("Identity"))
-               identity:depends({mode="sta", eap_type="PEAP", encryption="wpa2"})
-               identity:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
-               identity:depends({mode="sta", eap_type="TTLS", encryption="wpa2"})
-               identity:depends({mode="sta", eap_type="TTLS", encryption="wpa"})
+               identity:depends({mode="sta", eap_type="peap", encryption="wpa2"})
+               identity:depends({mode="sta", eap_type="peap", encryption="wpa"})
+               identity:depends({mode="sta", eap_type="ttls", encryption="wpa2"})
+               identity:depends({mode="sta", eap_type="ttls", encryption="wpa"})
 
                password = s:taboption("encryption", Value, "password", translate("Password"))
-               password:depends({mode="sta", eap_type="PEAP", encryption="wpa2"})
-               password:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
-               password:depends({mode="sta", eap_type="TTLS", encryption="wpa2"})
-               password:depends({mode="sta", eap_type="TTLS", encryption="wpa"})
+               password:depends({mode="sta", eap_type="peap", encryption="wpa2"})
+               password:depends({mode="sta", eap_type="peap", encryption="wpa"})
+               password:depends({mode="sta", eap_type="ttls", encryption="wpa2"})
+               password:depends({mode="sta", eap_type="ttls", encryption="wpa"})
        end
 end