root/luci/trunk/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @ 4207

Revision 4207, 11.7 KB (checked in by jow, 4 years ago)

modules/admin-full: move txpower control to wifi-device
modules/admin-core: extend wireless schema to cover txpower changes

  • Property svn:keywords set to Id
Line 
1--[[
2LuCI - Lua Configuration Interface
3
4Copyright 2008 Steven Barth <steven@midlink.org>
5
6Licensed under the Apache License, Version 2.0 (the "License");
7you may not use this file except in compliance with the License.
8You may obtain a copy of the License at
9
10    http://www.apache.org/licenses/LICENSE-2.0
11
12$Id$
13]]--
14require("luci.tools.webadmin")
15arg[1] = arg[1] or ""
16
17m = Map("wireless", translate("networks"), translate("a_w_networks1"))
18
19s = m:section(NamedSection, arg[1], "wifi-device", translate("device") .. " " .. arg[1])
20s.addremove = false
21
22back = s:option(DummyValue, "_overview", translate("overview"))
23back.value = ""
24back.titleref = luci.dispatcher.build_url("admin", "network", "wireless")
25
26
27en = s:option(Flag, "disabled", translate("enable"))
28en.enabled = "0"
29en.disabled = "1"
30en.rmempty = false
31
32function en.cfgvalue(self, section)
33    return Flag.cfgvalue(self, section) or "0"
34end
35
36s:option(DummyValue, "type", translate("type"))
37local hwtype = m:get(arg[1], "type")
38-- NanoFoo
39local nsantenna = m:get(arg[1], "antenna")
40
41ch = s:option(Value, "channel", translate("a_w_channel"))
42for i=1, 14 do
43    ch:value(i, i .. " (2.4 GHz)")
44end
45for i=36, 64, 4 do
46    ch:value(i, i .. " (5 GHz)")
47end
48for i=100, 140, 4 do
49    ch:value(i, i .. " (5 GHz)")
50end
51ch:value(147, 147 .. " (5 GHz)")
52ch:value(151, 151 .. " (5 GHz)")
53ch:value(155, 155 .. " (5 GHz)")
54ch:value(167, 167 .. " (5 GHz)")
55
56s:option(Value, "txpower", translate("a_w_txpwr"), "dBm").rmempty = true
57
58
59------------------- MAC80211 Device ------------------
60
61if hwtype == "mac80211" then
62
63end
64
65
66------------------- Madwifi Device ------------------
67
68if hwtype == "atheros" then
69    mode = s:option(ListValue, "hwmode", translate("mode"))
70    mode:value("", translate("wifi_auto"))
71    mode:value("11b", "802.11b")
72    mode:value("11g", "802.11g")
73    mode:value("11a", "802.11a")
74    mode:value("11bg", "802.11b+g")
75    mode:value("11gdt", "802.11adt")
76    mode:value("11adt", "802.11adt")
77    mode:value("fh", translate("wifi_fh"))
78
79    s:option(Flag, "diversity", translate("wifi_diversity")).rmempty = false
80
81    if not nsantenna then
82        s:option(Value, "txantenna", translate("wifi_txantenna")).optional = true
83        s:option(Value, "rxantenna", translate("wifi_rxantenna")).optional = true
84    else -- NanoFoo
85        local ant = s:option(ListValue, "antenna", translate("wifi_txantenna"))
86        ant:value("auto")
87        ant:value("vertical")
88        ant:value("horizontal")
89        ant:value("external")
90    end
91    s:option(Value, "distance", translate("wifi_distance"),
92        translate("wifi_distance_desc")).optional = true
93
94    --s:option(Flag, "nosbeacon", translate("wifi_nosbeacon")).optional = true
95end
96
97
98
99------------------- Broadcom Device ------------------
100
101if hwtype == "broadcom" then
102    mp = s:option(ListValue, "macfilter", translate("wifi_macpolicy"))
103    mp.optional = true
104    mp:value("")
105    mp:value("allow", translate("wifi_whitelist"))
106    mp:value("deny", translate("wifi_blacklist"))
107    ml = s:option(DynamicList, "maclist", translate("wifi_maclist"))
108    ml:depends({macfilter="allow"})
109    ml:depends({macfilter="deny"})
110
111    s:option(Value, "txantenna", translate("wifi_txantenna")).optional = true
112    s:option(Value, "rxantenna", translate("wifi_rxantenna")).optional = true
113
114    s:option(Flag, "frameburst", translate("wifi_bursting")).optional = true
115
116    s:option(Value, "distance", translate("wifi_distance")).optional = true
117    --s:option(Value, "slottime", translate("wifi_slottime")).optional = true
118
119    s:option(Value, "country", translate("wifi_country")).optional = true
120    s:option(Value, "maxassoc", translate("wifi_maxassoc")).optional = true
121end
122
123
124----------------------- Interface -----------------------
125
126s = m:section(TypedSection, "wifi-iface", translate("interfaces"))
127s.addremove = true
128s.anonymous = true
129s:depends("device", arg[1])
130s.defaults.device = arg[1]
131
132s:option(Value, "ssid", translate("wifi_essid"))
133
134network = s:option(Value, "network", translate("network"), translate("a_w_network1"))
135network.rmempty = true
136network:value("")
137network.combobox_manual = translate("a_w_netmanual")
138luci.tools.webadmin.cbi_add_networks(network)
139
140function network.write(self, section, value)
141    if not m.uci:get("network", value) then
142        -- avoid "value not defined in enum" because network is not known yet
143        s.override_scheme = true
144
145        m:chain("network")
146        m.uci:set("network", value, "interface")
147        Value.write(self, section, value)
148    else
149        if m.uci:get("network", value) == "interface" then
150            Value.write(self, section, value)
151        end
152    end
153end
154
155
156mode = s:option(ListValue, "mode", translate("mode"))
157mode.override_values = true
158mode:value("ap", translate("a_w_ap"))
159mode:value("adhoc", translate("a_w_adhoc"))
160mode:value("sta", translate("a_w_client"))
161
162bssid = s:option(Value, "bssid", translate("wifi_bssid"))
163
164
165-------------------- MAC80211 Interface ----------------------
166
167if hwtype == "mac80211" then
168    mode:value("ahdemo", translate("a_w_ahdemo"))
169    mode:value("monitor", translate("a_w_monitor"))
170    bssid:depends({mode="adhoc"})
171
172    s:option(Value, "frag", translate("wifi_frag")).optional = true
173    s:option(Value, "rts", translate("wifi_rts")).optional = true
174end
175
176
177
178-------------------- Madwifi Interface ----------------------
179
180if hwtype == "atheros" then
181    mode:value("ahdemo", translate("a_w_ahdemo"))
182    mode:value("monitor", translate("a_w_monitor"))
183
184    bssid:depends({mode="adhoc"})
185    bssid:depends({mode="ahdemo"})
186
187    wds = s:option(Flag, "wds", translate("a_w_wds"))
188    wds:depends({mode="ap"})
189    wds:depends({mode="sta"})
190    wds.rmempty = true
191    wdssep = s:option(Flag, "wdssep", translate("wifi_wdssep"))
192    wdssep:depends({mode="ap", wds="1"})
193    wdssep.optional = true
194
195    s:option(Flag, "doth", "802.11h").optional = true
196    hidden = s:option(Flag, "hidden", translate("wifi_hidden"))
197    hidden:depends({mode="ap"})
198    hidden:depends({mode="adhoc"})
199    hidden:depends({mode="wds"})
200    hidden.optional = true
201    isolate = s:option(Flag, "isolate", translate("wifi_isolate"),
202     translate("wifi_isolate_desc"))
203    isolate:depends({mode="ap"})
204    isolate.optional = true
205    s:option(Flag, "bgscan", translate("wifi_bgscan")).optional = true
206
207    mp = s:option(ListValue, "macpolicy", translate("wifi_macpolicy"))
208    mp.optional = true
209    mp:value("")
210    mp:value("deny", translate("wifi_whitelist"))
211    mp:value("allow", translate("wifi_blacklist"))
212    ml = s:option(DynamicList, "maclist", translate("wifi_maclist"))
213    ml:depends({macpolicy="allow"})
214    ml:depends({macpolicy="deny"})
215
216    s:option(Value, "rate", translate("wifi_rate")).optional = true
217    s:option(Value, "mcast_rate", translate("wifi_mcast_rate")).optional = true
218    s:option(Value, "frag", translate("wifi_frag")).optional = true
219    s:option(Value, "rts", translate("wifi_rts")).optional = true
220    s:option(Value, "minrate", translate("wifi_minrate")).optional = true
221    s:option(Value, "maxrate", translate("wifi_maxrate")).optional = true
222    s:option(Flag, "compression", translate("wifi_compression")).optional = true
223
224    s:option(Flag, "bursting", translate("wifi_bursting")).optional = true
225    s:option(Flag, "turbo", translate("wifi_turbo")).optional = true
226    s:option(Value, "ff", translate("wifi_ff")).optional = true
227
228    s:option(Flag, "wmm", translate("wifi_wmm")).optional = true
229    s:option(Flag, "xr", translate("wifi_xr")).optional = true
230    s:option(Flag, "ar", translate("wifi_ar")).optional = true
231
232    local swm = s:option(Flag, "sw_merge", translate("wifi_nosbeacon"))
233    swm:depends({mode="adhoc"})
234    swm.optional = true
235
236    local nos = s:option(Flag, "nosbeacon", translate("wifi_nosbeacon"))
237    nos:depends({mode="sta"})
238    nos.optional = true
239
240    local probereq = s:option(Flag, "probereq", translate("wifi_noprobereq"))
241    probereq.optional = true
242    probereq.enabled  = "0"
243    probereq.disabled = "1"
244end
245
246
247-------------------- Broadcom Interface ----------------------
248
249if hwtype == "broadcom" then
250    mode:value("wds", translate("a_w_wds"))
251    mode:value("monitor", translate("a_w_monitor"))
252
253    hidden = s:option(Flag, "hidden", translate("wifi_hidden"))
254    hidden:depends({mode="ap"})
255    hidden:depends({mode="adhoc"})
256    hidden:depends({mode="wds"})
257    hidden.optional = true
258
259    isolate = s:option(Flag, "isolate", translate("wifi_isolate"),
260     translate("wifi_isolate_desc"))
261    isolate:depends({mode="ap"})
262    isolate.optional = true
263
264    bssid:depends({mode="wds"})
265end
266
267
268
269------------------- WiFI-Encryption -------------------
270
271encr = s:option(ListValue, "encryption", translate("encryption"))
272encr.override_values = true
273encr:depends({mode="ap"})
274encr:depends({mode="sta"})
275encr:depends({mode="adhoc"})
276encr:depends({mode="ahdemo"})
277encr:depends({mode="wds"})
278
279encr:value("none", "No Encryption")
280encr:value("wep", "WEP")
281
282if hwtype == "atheros" or hwtype == "mac80211" then
283    local supplicant = luci.fs.mtime("/usr/sbin/wpa_supplicant")
284    local hostapd = luci.fs.mtime("/usr/sbin/hostapd")
285
286    if hostapd and supplicant then
287        encr:value("psk", "WPA-PSK")
288        encr:value("psk2", "WPA2-PSK")
289        encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="sta"})
290        encr:value("wpa2i", "WPA2-EAP", {mode="ap"}, {mode="sta"})
291    elseif hostapd and not supplicant then
292        encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="adhoc"}, {mode="ahdemo"})
293        encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="adhoc"}, {mode="ahdemo"})
294        encr:value("wpa", "WPA-EAP", {mode="ap"})
295        encr:value("wpa2i", "WPA2-EAP", {mode="ap"})
296        encr.description = translate("wifi_wpareq")
297    elseif not hostapd and supplicant then
298        encr:value("psk", "WPA-PSK", {mode="sta"})
299        encr:value("psk2", "WPA2-PSK", {mode="sta"})
300        encr:value("wpa", "WPA-EAP", {mode="sta"})
301        encr:value("wpa2i", "WPA2-EAP", {mode="sta"})
302        encr.description = translate("wifi_wpareq")
303    else
304        encr.description = translate("wifi_wpareq")
305    end
306elseif hwtype == "broadcom" then
307    encr:value("psk", "WPA-PSK")
308    encr:value("psk2", "WPA2-PSK")
309end
310
311encr:depends("mode", "ap")
312encr:depends("mode", "sta")
313encr:depends("mode", "wds")
314
315server = s:option(Value, "server", translate("a_w_radiussrv"))
316server:depends({mode="ap", encryption="wpa"})
317server:depends({mode="ap", encryption="wpa2i"})
318server.rmempty = true
319
320port = s:option(Value, "port", translate("a_w_radiusport"))
321port:depends({mode="ap", encryption="wpa"})
322port:depends({mode="ap", encryption="wpa2i"})
323port.rmempty = true
324
325key = s:option(Value, "key", translate("key"))
326key:depends("encryption", "wep")
327key:depends("encryption", "psk")
328key:depends({mode="ap", encryption="wpa"})
329key:depends("encryption", "psk2")
330key:depends({mode="ap", encryption="wpa2i"})
331key.rmempty = true
332
333if hwtype == "atheros" or hwtype == "mac80211" then
334    nasid = s:option(Value, "nasid", translate("a_w_nasid"))
335    nasid:depends({mode="ap", encryption="wpa"})
336    nasid:depends({mode="ap", encryption="wpa2i"})
337    nasid.rmempty = true
338
339    eaptype = s:option(ListValue, "eap_type", translate("a_w_eaptype"))
340    eaptype:value("TLS")
341    eaptype:value("PEAP")
342    eaptype:depends({mode="sta", encryption="wpa"})
343    eaptype:depends({mode="sta", encryption="wpa2i"})
344
345    cacert = s:option(FileUpload, "ca_cert", translate("a_w_cacert"))
346    cacert:depends({mode="sta", encryption="wpa"})
347    cacert:depends({mode="sta", encryption="wpa2i"})
348
349    privkey = s:option(FileUpload, "priv_key", translate("a_w_tlsprivkey"))
350    privkey:depends({mode="sta", eap_type="TLS", encryption="wpa2i"})
351    privkey:depends({mode="sta", eap_type="TLS", encryption="wpa"})
352
353    privkeypwd = s:option(Value, "priv_key_pwd", translate("a_w_tlsprivkeypwd"))
354    privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa2i"})
355    privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa"})
356
357
358    auth = s:option(Value, "auth", translate("a_w_peapauth"))
359    auth:depends({mode="sta", eap_type="PEAP", encryption="wpa2i"})
360    auth:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
361
362    identity = s:option(Value, "identity", translate("a_w_peapidentity"))
363    identity:depends({mode="sta", eap_type="PEAP", encryption="wpa2i"})
364    identity:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
365
366    password = s:option(Value, "password", translate("a_w_peappassword"))
367    password:depends({mode="sta", eap_type="PEAP", encryption="wpa2i"})
368    password:depends({mode="sta", eap_type="PEAP", encryption="wpa"})
369end
370
371
372return m
Note: See TracBrowser for help on using the browser.