X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fwifi.lua;h=7d84d29614892158b9b94693b323f4df4da33d9c;hp=7b88e7a9eff6a822bdea2e0fbc4e1d75ba6d2ed4;hb=0c3398c4b6d7ecf5d743e4c8bc84388f93cf222f;hpb=f0a99dd6c7e2a32868ea40d9e08b6c6b44d6ce5d diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua index 7b88e7a9e..7d84d2961 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -22,7 +22,7 @@ arg[1] = arg[1] or "" m = Map("wireless", "", translate("The Device Configuration section covers physical settings of the radio " .. - "hardware such as channel, transmit power or antenna selection which is shared among all " .. + "hardware such as channel, transmit power or antenna selection which are shared among all " .. "defined wireless networks (if the radio hardware is multi-SSID capable). Per network settings " .. "like encryption or operation mode are grouped in the Interface Configuration.")) @@ -61,7 +61,7 @@ function m.parse(map) wdev:set("disabled", nil) nw:commit("wireless") - luci.sys.call("(env -i /sbin/wifi down; env -i /sbin/wifi up) >/dev/null 2>/dev/null") + luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1])) return @@ -143,30 +143,35 @@ end local hwtype = wdev:get("type") -local htcaps = wdev:get("ht_capab") and true or false -- NanoFoo local nsantenna = wdev:get("antenna") --- Check whether there is a client interface on the same radio, --- if yes, lock the channel choice as the station will dicatate the freq -local has_sta = nil +-- Check whether there are client interfaces on the same radio, +-- if yes, lock the channel choice as these stations will dicatate the freq +local found_sta = nil local _, net -for _, net in ipairs(wdev:get_wifinets()) do - if net:mode() == "sta" and net:id() ~= wnet:id() then - has_sta = net - break +if wnet:mode() ~= "sta" then + for _, net in ipairs(wdev:get_wifinets()) do + if net:mode() == "sta" then + if not found_sta then + found_sta = {} + found_sta.channel = net:channel() + found_sta.names = {} + end + found_sta.names[#found_sta.names+1] = net:shortname() + end end end -if has_sta then +if found_sta then ch = s:taboption("general", DummyValue, "choice", translate("Channel")) - ch.value = translatef("Locked to channel %d used by %s", - has_sta:channel(), has_sta:shortname()) + ch.value = translatef("Locked to channel %d used by: %s", + found_sta.channel, table.concat(found_sta.names, ", ")) else 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 + for _, f in ipairs(iw and iw.freqlist or { }) do if not f.restricted then ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 }) end @@ -191,26 +196,43 @@ if hwtype == "mac80211" then end end - mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode")) - mode:value("", translate("auto")) - 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 + mode = s:taboption("advanced", ListValue, "hwmode", translate("Band")) - if htcaps then - 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 + if hw_modes.ac then + if hw_modes.ac then mode:value("11a", "5GHz (802.11n+ac)") end - htmode = s:taboption("advanced", ListValue, "htmode", translate("HT mode")) - htmode:depends("hwmode", "11na") - htmode:depends("hwmode", "11ng") + htmode = s:taboption("advanced", ListValue, "htmode", translate("VHT mode (802.11ac)")) + htmode:value("", translate("disabled")) + htmode:value("VHT20", "20MHz") + htmode:value("VHT40", "40MHz") + htmode:value("VHT80", "80MHz") + + elseif hw_modes.n then + if hw_modes.g then mode:value("11g", "2.4GHz (802.11g+n)") end + if hw_modes.a then mode:value("11a", "5GHz (802.11a+n)") end + + htmode = s:taboption("advanced", ListValue, "htmode", translate("HT mode (802.11n)")) + htmode:value("", translate("disabled")) htmode:value("HT20", "20MHz") - htmode:value("HT40-", translate("40MHz 2nd channel below")) - htmode:value("HT40+", translate("40MHz 2nd channel above")) + htmode:value("HT40", "40MHz") + + function mode.cfgvalue(...) + local v = Value.cfgvalue(...) + if v == "11na" then + return "11a" + elseif v == "11ng" then + return "11g" + end + return v + end - --htcapab = s:taboption("advanced", DynamicList, "ht_capab", translate("HT capabilities")) - --htcapab:depends("hwmode", "11na") - --htcapab:depends("hwmode", "11ng") + noscan = s:taboption("advanced", Flag, "noscan", translate("Force 40MHz mode"), + translate("Always use 40MHz channels even if the secondary channel overlaps. Using this option does not comply with IEEE 802.11n-2009!")) + noscan:depends("htmode", "HT40") + noscan.default = noscan.disabled + else + if hw_modes.g then mode:value("11g", "2.4GHz (802.11g)") end + if hw_modes.a then mode:value("11a", "5GHz (802.11a)") end end local cl = iw and iw.countrylist @@ -227,6 +249,18 @@ if hwtype == "mac80211" then s:taboption("advanced", Value, "distance", translate("Distance Optimization"), translate("Distance to farthest network member in meters.")) + -- external antenna profiles + local eal = iw and iw.extant + if eal and #eal > 0 then + ea = s:taboption("advanced", ListValue, "extant", translate("Antenna Configuration")) + for _, eap in ipairs(eal) do + ea:value(eap.id, "%s (%s)" %{ eap.name, eap.description }) + if eap.selected then + ea.default = eap.id + end + end + end + s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold")) end @@ -319,10 +353,25 @@ if hwtype == "broadcom" then end mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode")) - mode:value("11bg", "802.11b+g") - mode:value("11b", "802.11b") - mode:value("11g", "802.11g") - mode:value("11gst", "802.11g + Turbo") + if hw_modes.n then + if hw_modes.g then mode:value("11ng", "802.11g+n") end + if hw_modes.a then mode:value("11na", "802.11a+n") end + mode:value("11n", "802.11n") + + htmode = s:taboption("advanced", ListValue, "htmode", translate("HT mode (802.11n)")) + htmode:depends("hwmode", "11n") + htmode:depends("hwmode", "11ng") + htmode:depends("hwmode", "11na") + htmode:value("HT20", "20MHz") + htmode:value("HT40-", translate("40MHz 2nd channel below")) + htmode:value("HT40+", translate("40MHz 2nd channel above")) + end + if hw_modes.a then mode:value("11a", "802.11a") end + if hw_modes.b and hw_modes.g then mode:value("11bg", "802.11b+g") end + 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.g then mode:value("11gst", "802.11g Turbo") end + if hw_modes.g then mode:value("11lrs", "802.11g Limited Rate Support") end ant1 = s:taboption("advanced", ListValue, "txantenna", translate("Transmitter Antenna")) ant1.widget = "radio" @@ -384,9 +433,8 @@ mode:value("adhoc", translate("Ad-Hoc")) bssid = s:taboption("general", Value, "bssid", translate("BSSID")) network = s:taboption("general", Value, "network", translate("Network"), - translate("Choose the network you want to attach to this wireless interface. " .. - "Select unspecified to not attach any network or fill out the " .. - "create field to define a new network.")) + translate("Choose the network(s) you want to attach to this wireless interface or " .. + "fill out the create field to define a new network.")) network.rmempty = true network.template = "cbi/network_netlist" @@ -942,4 +990,18 @@ if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then password:depends({mode="sta-wds", eap_type="ttls", encryption="wpa"}) end +if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then + local wpasupplicant = fs.access("/usr/sbin/wpa_supplicant") + local hostcli = fs.access("/usr/sbin/hostapd_cli") + if hostcli and wpasupplicant then + wps = s:taboption("encryption", Flag, "wps_pushbutton", translate("Enable WPS pushbutton, requires WPA(2)-PSK")) + wps.enabled = "1" + wps.disabled = "0" + wps.rmempty = false + wps:depends("encryption", "psk") + wps:depends("encryption", "psk2") + wps:depends("encryption", "psk-mixed") + end +end + return m