modules/admin-full: prevent crash in wifi model if no tx power list is available
[project/luci.git] / modules / admin-full / luasrc / model / cbi / admin_network / wifi.lua
index bbf2232..63c2344 100644 (file)
@@ -25,8 +25,8 @@ local tx_powers = nil
 
 m.uci:foreach("wireless", "wifi-iface",
        function(s)
-               if s.device == arg[1] and s.ifname and not iw then
-                       iw = luci.sys.wifi.getiwinfo(s.ifname)
+               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)
@@ -105,8 +105,20 @@ if hwtype == "atheros" then
        s:taboption("advanced", Flag, "diversity", translate("wifi_diversity")).rmempty = false
 
        if not nsantenna then
-               s:taboption("advanced", Value, "txantenna", translate("wifi_txantenna"))
-               s:taboption("advanced", Value, "rxantenna", translate("wifi_rxantenna"))
+               ant1 = s:taboption("advanced", ListValue, "txantenna", translate("wifi_txantenna"))
+               ant1.widget = "radio"
+               ant1:depends("diversity", "")
+               ant1:value("0", translate("wifi_auto"))
+               ant1:value("1", translate("wifi_ant1", "Antenna 1"))
+               ant1:value("2", translate("wifi_ant2", "Antenna 2"))
+
+               ant2 = s:taboption("advanced", ListValue, "rxantenna", translate("wifi_rxantenna"))
+               ant2.widget = "radio"
+               ant2:depends("diversity", "")
+               ant2:value("0", translate("wifi_auto"))
+               ant2:value("1", translate("wifi_ant1", "Antenna 1"))
+               ant2:value("2", translate("wifi_ant2", "Antenna 2"))
+
        else -- NanoFoo
                local ant = s:taboption("advanced", ListValue, "antenna", translate("wifi_txantenna"))
                ant:value("auto")
@@ -114,6 +126,7 @@ if hwtype == "atheros" then
                ant:value("horizontal")
                ant:value("external")
        end
+
        s:taboption("advanced", Value, "distance", translate("wifi_distance"),
                translate("wifi_distance_desc"))
        s:taboption("advanced", Value, "regdomain", translate("wifi_regdomain"))
@@ -145,8 +158,19 @@ if hwtype == "broadcom" then
        ml:depends({macfilter="allow"})
        ml:depends({macfilter="deny"})
 
-       s:taboption("advanced", Value, "txantenna", translate("wifi_txantenna"))
-       s:taboption("advanced", Value, "rxantenna", translate("wifi_rxantenna"))
+       ant1 = s:taboption("advanced", ListValue, "txantenna", translate("wifi_txantenna"))
+       ant1.widget = "radio"
+       ant1:depends("diversity", "")
+       ant1:value("3", translate("wifi_auto"))
+       ant1:value("0", translate("wifi_ant1", "Antenna 1"))
+       ant1:value("1", translate("wifi_ant2", "Antenna 2"))
+
+       ant2 = s:taboption("advanced", ListValue, "rxantenna", translate("wifi_rxantenna"))
+       ant2.widget = "radio"
+       ant2:depends("diversity", "")
+       ant2:value("3", translate("wifi_auto"))
+       ant2:value("0", translate("wifi_ant1", "Antenna 1"))
+       ant2:value("1", translate("wifi_ant2", "Antenna 2"))
 
        s:taboption("advanced", Flag, "frameburst", translate("wifi_bursting"))
 
@@ -173,7 +197,7 @@ end
 ----------------------- Interface -----------------------
 
 s = m:section(TypedSection, "wifi-iface", translate("interfaces"))
-s.addremove = true
+s.addremove = (iw and iw.mbssid_support) and true or false
 s.anonymous = true
 s:depends("device", arg[1])
 s.defaults.device = arg[1]
@@ -335,6 +359,9 @@ if hwtype == "broadcom" then
         translate("wifi_isolate_desc"))
        isolate:depends({mode="ap"})
 
+       s:taboption("advanced", Flag, "doth", "802.11h")
+       s:taboption("advanced", Flag, "wmm", translate("wifi_wmm"))
+
        bssid:depends({mode="wds"})
        bssid:depends({mode="adhoc"})
 end
@@ -436,7 +463,7 @@ key:depends("encryption", "wep")
 key:depends("encryption", "psk")
 key:depends("encryption", "psk2")
 key:depends("encryption", "psk+psk2")
-key:depends("encryption", "mixed")
+key:depends("encryption", "psk-mixed")
 key:depends({mode="ap", encryption="wpa"})
 key:depends({mode="ap", encryption="wpa2"})
 key.rmempty = true