2015-01-16 22:38:38 +00:00
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Licensed to the public under the Apache License 2.0.
2009-07-19 00:24:58 +00:00
local wa = require " luci.tools.webadmin "
2009-10-27 21:40:12 +00:00
local nw = require " luci.model.network "
2012-06-26 21:49:18 +00:00
local ut = require " luci.util "
2012-08-08 15:20:10 +00:00
local nt = require " luci.sys " . net
2009-07-19 00:24:58 +00:00
local fs = require " nixio.fs "
2008-08-18 00:38:18 +00:00
arg [ 1 ] = arg [ 1 ] or " "
2009-11-09 00:35:14 +00:00
m = Map ( " wireless " , " " ,
translate ( " The <em>Device Configuration</em> section covers physical settings of the radio " ..
2014-08-05 10:21:03 +00:00
" hardware such as channel, transmit power or antenna selection which are shared among all " ..
2009-11-09 00:35:14 +00:00
" defined wireless networks (if the radio hardware is multi-SSID capable). Per network settings " ..
" like encryption or operation mode are grouped in the <em>Interface Configuration</em>. " ) )
2009-10-27 21:40:12 +00:00
m : chain ( " network " )
2011-10-26 21:54:51 +00:00
m : chain ( " firewall " )
2015-02-14 10:27:57 +00:00
m.redirect = luci.dispatcher . build_url ( " admin/network/wireless " )
2009-10-29 02:23:18 +00:00
local ifsection
function m . on_commit ( map )
2011-01-20 23:26:49 +00:00
local wnet = nw : get_wifinet ( arg [ 1 ] )
2009-10-29 02:23:18 +00:00
if ifsection and wnet then
ifsection.section = wnet.sid
2011-01-20 23:26:49 +00:00
m.title = luci.util . pcdata ( wnet : get_i18n ( ) )
2009-10-29 02:23:18 +00:00
end
end
2009-10-27 21:40:12 +00:00
nw.init ( m.uci )
2009-10-29 02:23:18 +00:00
2011-01-20 23:26:49 +00:00
local wnet = nw : get_wifinet ( arg [ 1 ] )
local wdev = wnet and wnet : get_device ( )
2009-12-25 00:42:51 +00:00
-- redirect to overview page if network does not exist anymore (e.g. after a revert)
2011-01-20 23:26:49 +00:00
if not wnet or not wdev then
2009-12-25 00:42:51 +00:00
luci.http . redirect ( luci.dispatcher . build_url ( " admin/network/wireless " ) )
return
end
2011-09-22 02:43:38 +00:00
-- wireless toggle was requested, commit and reload page
2011-10-01 09:33:36 +00:00
function m . parse ( map )
if m : formvalue ( " cbid.wireless.%s.__toggle " % wdev : name ( ) ) then
if wdev : get ( " disabled " ) == " 1 " or wnet : get ( " disabled " ) == " 1 " then
wnet : set ( " disabled " , nil )
else
wnet : set ( " disabled " , " 1 " )
end
wdev : set ( " disabled " , nil )
2011-09-22 02:43:38 +00:00
2011-10-01 09:33:36 +00:00
nw : commit ( " wireless " )
2013-12-08 20:30:51 +00:00
luci.sys . call ( " (env -i /bin/ubus call network reload) >/dev/null 2>/dev/null " )
2011-09-22 02:43:38 +00:00
2011-10-01 09:33:36 +00:00
luci.http . redirect ( luci.dispatcher . build_url ( " admin/network/wireless " , arg [ 1 ] ) )
return
end
Map.parse ( map )
2011-09-22 02:43:38 +00:00
end
2011-01-20 23:26:49 +00:00
m.title = luci.util . pcdata ( wnet : get_i18n ( ) )
2009-11-09 00:35:14 +00:00
2009-08-19 22:51:56 +00:00
2011-12-05 18:29:04 +00:00
local function txpower_list ( iw )
local list = iw.txpwrlist or { }
local off = tonumber ( iw.txpower_offset ) or 0
local new = { }
local prev = - 1
local _ , val
for _ , val in ipairs ( list ) do
local dbm = val.dbm + off
local mw = math.floor ( 10 ^ ( dbm / 10 ) )
if mw ~= prev then
prev = mw
new [ # new + 1 ] = {
display_dbm = dbm ,
display_mw = mw ,
driver_dbm = val.dbm ,
driver_mw = val.mw
}
end
end
return new
end
local function txpower_current ( pwr , list )
pwr = tonumber ( pwr )
if pwr ~= nil then
local _ , item
for _ , item in ipairs ( list ) do
if item.driver_dbm >= pwr then
return item.driver_dbm
end
end
end
return ( list [ # list ] and list [ # list ] . driver_dbm ) or pwr or 0
end
2010-10-19 04:08:15 +00:00
local iw = luci.sys . wifi.getiwinfo ( arg [ 1 ] )
2011-12-05 18:29:04 +00:00
local hw_modes = iw.hwmodelist or { }
local tx_power_list = txpower_list ( iw )
local tx_power_cur = txpower_current ( wdev : get ( " txpower " ) , tx_power_list )
2009-08-19 22:51:56 +00:00
2011-01-20 23:26:49 +00:00
s = m : section ( NamedSection , wdev : name ( ) , " wifi-device " , translate ( " Device Configuration " ) )
2008-10-31 10:03:27 +00:00
s.addremove = false
2008-08-18 00:38:18 +00:00
2009-10-31 15:54:11 +00:00
s : tab ( " general " , translate ( " General Setup " ) )
s : tab ( " macfilter " , translate ( " MAC-Filter " ) )
s : tab ( " advanced " , translate ( " Advanced Settings " ) )
2009-08-16 04:13:21 +00:00
--[[
2009-10-31 15:54:11 +00:00
back = s : option ( DummyValue , " _overview " , translate ( " Overview " ) )
2008-10-03 16:55:06 +00:00
back.value = " "
back.titleref = luci.dispatcher . build_url ( " admin " , " network " , " wireless " )
2009-08-16 04:13:21 +00:00
] ]
2008-10-03 16:55:06 +00:00
2010-10-19 04:08:15 +00:00
st = s : taboption ( " general " , DummyValue , " __status " , translate ( " Status " ) )
st.template = " admin_network/wifi_status "
2011-01-20 23:26:49 +00:00
st.ifname = arg [ 1 ]
2010-10-19 04:08:15 +00:00
2011-09-22 02:43:38 +00:00
en = s : taboption ( " general " , Button , " __toggle " )
2008-08-18 00:38:18 +00:00
2011-09-22 02:43:38 +00:00
if wdev : get ( " disabled " ) == " 1 " or wnet : get ( " disabled " ) == " 1 " then
en.title = translate ( " Wireless network is disabled " )
en.inputtitle = translate ( " Enable " )
en.inputstyle = " apply "
else
en.title = translate ( " Wireless network is enabled " )
en.inputtitle = translate ( " Disable " )
en.inputstyle = " reset "
2008-08-18 00:38:18 +00:00
end
2009-08-16 04:13:21 +00:00
2011-01-20 23:26:49 +00:00
local hwtype = wdev : get ( " type " )
2010-10-12 05:04:49 +00:00
2008-11-12 18:36:43 +00:00
-- NanoFoo
2011-01-20 23:26:49 +00:00
local nsantenna = wdev : get ( " antenna " )
2008-08-18 00:38:18 +00:00
2014-09-21 18:35:20 +00:00
-- 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
2011-10-26 22:12:50 +00:00
local _ , net
2014-09-21 18:35:20 +00:00
if wnet : mode ( ) ~= " sta " then
for _ , net in ipairs ( wdev : get_wifinets ( ) ) do
2015-07-17 17:03:58 +00:00
if net : mode ( ) == " sta " and net : get ( " disabled " ) ~= " 1 " then
2014-09-21 18:35:20 +00:00
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
2010-10-19 04:08:15 +00:00
end
2008-08-19 18:20:57 +00:00
end
2008-08-18 00:38:18 +00:00
2014-09-21 18:35:20 +00:00
if found_sta then
2011-10-26 22:12:50 +00:00
ch = s : taboption ( " general " , DummyValue , " choice " , translate ( " Channel " ) )
2014-09-21 18:35:20 +00:00
ch.value = translatef ( " Locked to channel %d used by: %s " ,
found_sta.channel , table.concat ( found_sta.names , " , " ) )
2011-10-26 22:12:50 +00:00
else
2014-10-26 16:44:50 +00:00
ch = s : taboption ( " general " , Value , " _mode_freq " , ' <br /> ' .. translate ( " Operating frequency " ) )
ch.hwmodes = iw.hwmodelist
ch.freqlist = iw.freqlist
ch.template = " cbi/wireless_modefreq "
function ch . cfgvalue ( self , section )
return {
m : get ( section , " hwmode " ) or " " ,
m : get ( section , " channel " ) or " auto " ,
m : get ( section , " htmode " ) or " "
}
end
function ch . formvalue ( self , section )
return {
m : formvalue ( self : cbid ( section ) .. " .band " ) or ( iw.hwmodelist . g and " 11g " or " 11a " ) ,
m : formvalue ( self : cbid ( section ) .. " .channel " ) or " auto " ,
m : formvalue ( self : cbid ( section ) .. " .htmode " ) or " "
}
end
function ch . write ( self , section , value )
m : set ( section , " hwmode " , value [ 1 ] )
m : set ( section , " channel " , value [ 2 ] )
m : set ( section , " htmode " , value [ 3 ] )
2011-10-26 22:12:50 +00:00
end
end
2009-01-31 16:27:24 +00:00
2008-08-30 20:32:27 +00:00
------------------- MAC80211 Device ------------------
2008-08-18 00:38:18 +00:00
2008-08-30 20:32:27 +00:00
if hwtype == " mac80211 " then
2012-06-18 19:42:39 +00:00
if # tx_power_list > 1 then
tp = s : taboption ( " general " , ListValue ,
" txpower " , translate ( " Transmit Power " ) , " dBm " )
tp.rmempty = true
tp.default = tx_power_cur
function tp . cfgvalue ( ... )
return txpower_current ( Value.cfgvalue ( ... ) , tx_power_list )
end
2011-12-05 18:29:04 +00:00
2012-06-18 19:42:39 +00:00
for _ , p in ipairs ( tx_power_list ) do
tp : value ( p.driver_dbm , " %i dBm (%i mW) "
% { p.display_dbm , p.display_mw } )
end
2009-08-19 22:51:56 +00:00
end
2010-10-12 05:04:49 +00:00
local cl = iw and iw.countrylist
if cl and # cl > 0 then
cc = s : taboption ( " advanced " , ListValue , " country " , translate ( " Country Code " ) , translate ( " Use ISO/IEC 3166 alpha2 country codes. " ) )
cc.default = tostring ( iw and iw.country or " 00 " )
for _ , c in ipairs ( cl ) do
cc : value ( c.alpha2 , " %s - %s " % { c.alpha2 , c.name } )
end
else
s : taboption ( " advanced " , Value , " country " , translate ( " Country Code " ) , translate ( " Use ISO/IEC 3166 alpha2 country codes. " ) )
end
2010-03-09 21:22:17 +00:00
2010-02-27 23:21:14 +00:00
s : taboption ( " advanced " , Value , " distance " , translate ( " Distance Optimization " ) ,
2010-10-12 05:04:49 +00:00
translate ( " Distance to farthest network member in meters. " ) )
2011-10-13 12:48:55 +00:00
2012-08-15 16:31:41 +00:00
-- 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
2011-10-13 12:48:55 +00:00
s : taboption ( " advanced " , Value , " frag " , translate ( " Fragmentation Threshold " ) )
s : taboption ( " advanced " , Value , " rts " , translate ( " RTS/CTS Threshold " ) )
2008-08-30 20:32:27 +00:00
end
2008-08-18 00:38:18 +00:00
2008-08-30 20:32:27 +00:00
------------------- Madwifi Device ------------------
if hwtype == " atheros " then
2009-08-19 22:51:56 +00:00
tp = s : taboption ( " general " ,
2011-12-05 18:29:04 +00:00
( # tx_power_list > 0 ) and ListValue or Value ,
2009-10-31 15:54:11 +00:00
" txpower " , translate ( " Transmit Power " ) , " dBm " )
2009-08-19 22:51:56 +00:00
tp.rmempty = true
2011-12-05 18:29:04 +00:00
tp.default = tx_power_cur
function tp . cfgvalue ( ... )
return txpower_current ( Value.cfgvalue ( ... ) , tx_power_list )
end
for _ , p in ipairs ( tx_power_list ) do
tp : value ( p.driver_dbm , " %i dBm (%i mW) "
% { p.display_dbm , p.display_mw } )
2009-08-19 22:51:56 +00:00
end
2009-05-21 21:33:24 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Flag , " diversity " , translate ( " Diversity " ) ) . rmempty = false
2008-11-12 18:36:43 +00:00
if not nsantenna then
2009-10-31 15:54:11 +00:00
ant1 = s : taboption ( " advanced " , ListValue , " txantenna " , translate ( " Transmitter Antenna " ) )
2009-08-19 23:24:24 +00:00
ant1.widget = " radio "
2009-10-13 23:59:50 +00:00
ant1.orientation = " horizontal "
2009-08-19 23:24:24 +00:00
ant1 : depends ( " diversity " , " " )
2009-10-31 15:54:11 +00:00
ant1 : value ( " 0 " , translate ( " auto " ) )
ant1 : value ( " 1 " , translate ( " Antenna 1 " ) )
ant1 : value ( " 2 " , translate ( " Antenna 2 " ) )
2009-08-19 23:24:24 +00:00
2009-10-31 15:54:11 +00:00
ant2 = s : taboption ( " advanced " , ListValue , " rxantenna " , translate ( " Receiver Antenna " ) )
2009-08-19 23:24:24 +00:00
ant2.widget = " radio "
2009-10-13 23:59:50 +00:00
ant2.orientation = " horizontal "
2009-08-19 23:24:24 +00:00
ant2 : depends ( " diversity " , " " )
2009-10-31 15:54:11 +00:00
ant2 : value ( " 0 " , translate ( " auto " ) )
ant2 : value ( " 1 " , translate ( " Antenna 1 " ) )
ant2 : value ( " 2 " , translate ( " Antenna 2 " ) )
2009-08-19 23:24:24 +00:00
2008-11-12 18:36:43 +00:00
else -- NanoFoo
2009-10-31 15:54:11 +00:00
local ant = s : taboption ( " advanced " , ListValue , " antenna " , translate ( " Transmitter Antenna " ) )
2008-11-12 18:36:43 +00:00
ant : value ( " auto " )
ant : value ( " vertical " )
ant : value ( " horizontal " )
ant : value ( " external " )
end
2009-08-19 23:24:24 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Value , " distance " , translate ( " Distance Optimization " ) ,
translate ( " Distance to farthest network member in meters. " ) )
s : taboption ( " advanced " , Value , " regdomain " , translate ( " Regulatory Domain " ) )
s : taboption ( " advanced " , Value , " country " , translate ( " Country Code " ) )
s : taboption ( " advanced " , Flag , " outdoor " , translate ( " Outdoor Channels " ) )
2008-09-13 04:26:37 +00:00
2009-10-31 15:54:11 +00:00
--s:option(Flag, "nosbeacon", translate("Disable HW-Beacon timer"))
2008-08-30 20:32:27 +00:00
end
2008-08-18 00:38:18 +00:00
2008-08-30 20:32:27 +00:00
------------------- Broadcom Device ------------------
if hwtype == " broadcom " then
2009-08-19 22:51:56 +00:00
tp = s : taboption ( " general " ,
2011-12-05 18:29:04 +00:00
( # tx_power_list > 0 ) and ListValue or Value ,
2009-10-31 15:54:11 +00:00
" txpower " , translate ( " Transmit Power " ) , " dBm " )
2009-08-19 22:51:56 +00:00
tp.rmempty = true
2011-12-05 18:29:04 +00:00
tp.default = tx_power_cur
function tp . cfgvalue ( ... )
return txpower_current ( Value.cfgvalue ( ... ) , tx_power_list )
end
for _ , p in ipairs ( tx_power_list ) do
tp : value ( p.driver_dbm , " %i dBm (%i mW) "
% { p.display_dbm , p.display_mw } )
2010-10-12 05:04:49 +00:00
end
2009-05-21 21:33:24 +00:00
2009-10-31 15:54:11 +00:00
ant1 = s : taboption ( " advanced " , ListValue , " txantenna " , translate ( " Transmitter Antenna " ) )
2009-08-19 23:24:24 +00:00
ant1.widget = " radio "
ant1 : depends ( " diversity " , " " )
2009-10-31 15:54:11 +00:00
ant1 : value ( " 3 " , translate ( " auto " ) )
ant1 : value ( " 0 " , translate ( " Antenna 1 " ) )
ant1 : value ( " 1 " , translate ( " Antenna 2 " ) )
2009-08-19 23:24:24 +00:00
2009-10-31 15:54:11 +00:00
ant2 = s : taboption ( " advanced " , ListValue , " rxantenna " , translate ( " Receiver Antenna " ) )
2009-08-19 23:24:24 +00:00
ant2.widget = " radio "
ant2 : depends ( " diversity " , " " )
2009-10-31 15:54:11 +00:00
ant2 : value ( " 3 " , translate ( " auto " ) )
ant2 : value ( " 0 " , translate ( " Antenna 1 " ) )
ant2 : value ( " 1 " , translate ( " Antenna 2 " ) )
2008-09-13 04:26:37 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Flag , " frameburst " , translate ( " Frame Bursting " ) )
2008-09-13 04:26:37 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Value , " distance " , translate ( " Distance Optimization " ) )
2009-11-01 01:37:03 +00:00
--s:option(Value, "slottime", translate("Slot time"))
2008-09-13 04:26:37 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Value , " country " , translate ( " Country Code " ) )
s : taboption ( " advanced " , Value , " maxassoc " , translate ( " Connection Limit " ) )
2008-08-30 20:32:27 +00:00
end
2008-08-18 00:38:18 +00:00
2009-05-21 21:33:24 +00:00
--------------------- HostAP Device ---------------------
if hwtype == " prism2 " then
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Value , " txpower " , translate ( " Transmit Power " ) , " att units " ) . rmempty = true
2009-05-21 21:33:24 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Flag , " diversity " , translate ( " Diversity " ) ) . rmempty = false
2009-06-02 21:09:33 +00:00
2009-10-31 15:54:11 +00:00
s : taboption ( " advanced " , Value , " txantenna " , translate ( " Transmitter Antenna " ) )
s : taboption ( " advanced " , Value , " rxantenna " , translate ( " Receiver Antenna " ) )
2009-05-21 21:33:24 +00:00
end
2008-08-30 00:11:48 +00:00
----------------------- Interface -----------------------
2010-10-30 00:45:43 +00:00
s = m : section ( NamedSection , wnet.sid , " wifi-iface " , translate ( " Interface Configuration " ) )
ifsection = s
s.addremove = false
s.anonymous = true
2011-01-20 23:26:49 +00:00
s.defaults . device = wdev : name ( )
2010-10-30 00:45:43 +00:00
s : tab ( " general " , translate ( " General Setup " ) )
s : tab ( " encryption " , translate ( " Wireless Security " ) )
s : tab ( " macfilter " , translate ( " MAC-Filter " ) )
s : tab ( " advanced " , translate ( " Advanced Settings " ) )
s : taboption ( " general " , Value , " ssid " , translate ( " <abbr title= \" Extended Service Set Identifier \" >ESSID</abbr> " ) )
mode = s : taboption ( " general " , ListValue , " mode " , translate ( " Mode " ) )
mode.override_values = true
mode : value ( " ap " , translate ( " Access Point " ) )
mode : value ( " sta " , translate ( " Client " ) )
mode : value ( " adhoc " , translate ( " Ad-Hoc " ) )
bssid = s : taboption ( " general " , Value , " bssid " , translate ( " <abbr title= \" Basic Service Set Identifier \" >BSSID</abbr> " ) )
network = s : taboption ( " general " , Value , " network " , translate ( " Network " ) ,
2012-08-09 23:44:18 +00:00
translate ( " Choose the network(s) you want to attach to this wireless interface or " ..
" fill out the <em>create</em> field to define a new network. " ) )
2010-10-30 00:45:43 +00:00
network.rmempty = true
network.template = " cbi/network_netlist "
2012-06-26 21:49:18 +00:00
network.widget = " checkbox "
network.novirtual = true
2010-10-30 00:45:43 +00:00
function network . write ( self , section , value )
local i = nw : get_interface ( section )
if i then
if value == ' - ' then
value = m : formvalue ( self : cbid ( section ) .. " .newnet " )
if value and # value > 0 then
local n = nw : add_network ( value , { proto = " none " } )
if n then n : add_interface ( i ) end
2009-10-27 21:40:12 +00:00
else
2010-10-30 00:45:43 +00:00
local n = i : get_network ( )
if n then n : del_interface ( i ) end
end
else
2012-06-26 21:49:18 +00:00
local v
for _ , v in ipairs ( i : get_networks ( ) ) do
v : del_interface ( i )
end
for v in ut.imatch ( value ) do
local n = nw : get_network ( v )
if n then
if not n : is_empty ( ) then
n : set ( " type " , " bridge " )
end
n : add_interface ( i )
end
2009-10-27 21:40:12 +00:00
end
2008-08-19 17:02:40 +00:00
end
end
2010-10-30 00:45:43 +00:00
end
2008-08-19 17:02:40 +00:00
2010-10-30 00:45:43 +00:00
-------------------- MAC80211 Interface ----------------------
2008-08-30 20:32:27 +00:00
2010-10-30 00:45:43 +00:00
if hwtype == " mac80211 " then
if fs.access ( " /usr/sbin/iw " ) then
mode : value ( " mesh " , " 802.11s " )
end
2009-08-16 17:30:30 +00:00
2010-10-30 00:45:43 +00:00
mode : value ( " ahdemo " , translate ( " Pseudo Ad-Hoc (ahdemo) " ) )
mode : value ( " monitor " , translate ( " Monitor " ) )
bssid : depends ( { mode = " adhoc " } )
2011-11-15 15:44:01 +00:00
bssid : depends ( { mode = " sta " } )
2011-11-15 15:47:46 +00:00
bssid : depends ( { mode = " sta-wds " } )
2009-08-16 17:30:30 +00:00
2011-06-25 22:14:00 +00:00
mp = s : taboption ( " macfilter " , ListValue , " macfilter " , translate ( " MAC-Address Filter " ) )
2011-10-04 18:05:59 +00:00
mp : depends ( { mode = " ap " } )
mp : depends ( { mode = " ap-wds " } )
2011-06-25 22:14:00 +00:00
mp : value ( " " , translate ( " disable " ) )
mp : value ( " allow " , translate ( " Allow listed only " ) )
mp : value ( " deny " , translate ( " Allow all except listed " ) )
ml = s : taboption ( " macfilter " , DynamicList , " maclist " , translate ( " MAC-List " ) )
ml.datatype = " macaddr "
ml : depends ( { macfilter = " allow " } )
ml : depends ( { macfilter = " deny " } )
2012-08-08 15:20:10 +00:00
nt.mac_hints ( function ( mac , name ) ml : value ( mac , " %s (%s) " % { mac , name } ) end )
2010-10-12 05:04:49 +00:00
2010-10-30 00:45:43 +00:00
mode : value ( " ap-wds " , " %s (%s) " % { translate ( " Access Point " ) , translate ( " WDS " ) } )
mode : value ( " sta-wds " , " %s (%s) " % { translate ( " Client " ) , translate ( " WDS " ) } )
2010-10-12 05:04:49 +00:00
2010-10-30 00:45:43 +00:00
function mode . write ( self , section , value )
if value == " ap-wds " then
ListValue.write ( self , section , " ap " )
m.uci : set ( " wireless " , section , " wds " , 1 )
elseif value == " sta-wds " then
ListValue.write ( self , section , " sta " )
m.uci : set ( " wireless " , section , " wds " , 1 )
else
ListValue.write ( self , section , value )
m.uci : delete ( " wireless " , section , " wds " )
2010-02-27 23:21:14 +00:00
end
2010-10-30 00:45:43 +00:00
end
2010-03-09 01:19:28 +00:00
2010-10-30 00:45:43 +00:00
function mode . cfgvalue ( self , section )
local mode = ListValue.cfgvalue ( self , section )
local wds = m.uci : get ( " wireless " , section , " wds " ) == " 1 "
2010-03-09 01:19:28 +00:00
2010-10-30 00:45:43 +00:00
if mode == " ap " and wds then
return " ap-wds "
elseif mode == " sta " and wds then
return " sta-wds "
else
return mode
2010-03-09 01:19:28 +00:00
end
2009-08-16 17:30:30 +00:00
end
2008-09-13 04:26:37 +00:00
2010-10-30 00:45:43 +00:00
hidden = s : taboption ( " general " , Flag , " hidden " , translate ( " Hide <abbr title= \" Extended Service Set Identifier \" >ESSID</abbr> " ) )
hidden : depends ( { mode = " ap " } )
hidden : depends ( { mode = " ap-wds " } )
2012-07-23 08:53:50 +00:00
wmm = s : taboption ( " general " , Flag , " wmm " , translate ( " WMM Mode " ) )
wmm : depends ( { mode = " ap " } )
wmm : depends ( { mode = " ap-wds " } )
wmm.default = wmm.enabled
2010-10-30 00:45:43 +00:00
end
2008-09-13 04:26:37 +00:00
2010-10-30 00:45:43 +00:00
-------------------- Madwifi Interface ----------------------
2008-08-30 00:11:48 +00:00
2010-10-30 00:45:43 +00:00
if hwtype == " atheros " then
mode : value ( " ahdemo " , translate ( " Pseudo Ad-Hoc (ahdemo) " ) )
mode : value ( " monitor " , translate ( " Monitor " ) )
mode : value ( " ap-wds " , " %s (%s) " % { translate ( " Access Point " ) , translate ( " WDS " ) } )
mode : value ( " sta-wds " , " %s (%s) " % { translate ( " Client " ) , translate ( " WDS " ) } )
mode : value ( " wds " , translate ( " Static WDS " ) )
function mode . write ( self , section , value )
if value == " ap-wds " then
ListValue.write ( self , section , " ap " )
m.uci : set ( " wireless " , section , " wds " , 1 )
elseif value == " sta-wds " then
ListValue.write ( self , section , " sta " )
m.uci : set ( " wireless " , section , " wds " , 1 )
else
ListValue.write ( self , section , value )
m.uci : delete ( " wireless " , section , " wds " )
2009-10-29 02:23:18 +00:00
end
2010-10-30 00:45:43 +00:00
end
2008-04-11 19:03:30 +00:00
2010-10-30 00:45:43 +00:00
function mode . cfgvalue ( self , section )
local mode = ListValue.cfgvalue ( self , section )
local wds = m.uci : get ( " wireless " , section , " wds " ) == " 1 "
2008-08-30 20:32:27 +00:00
2010-10-30 00:45:43 +00:00
if mode == " ap " and wds then
return " ap-wds "
elseif mode == " sta " and wds then
return " sta-wds "
else
return mode
2009-10-29 02:23:18 +00:00
end
end
2008-09-13 04:26:37 +00:00
2010-10-30 00:45:43 +00:00
bssid : depends ( { mode = " adhoc " } )
bssid : depends ( { mode = " ahdemo " } )
bssid : depends ( { mode = " wds " } )
wdssep = s : taboption ( " advanced " , Flag , " wdssep " , translate ( " Separate WDS " ) )
wdssep : depends ( { mode = " ap-wds " } )
s : taboption ( " advanced " , Flag , " doth " , " 802.11h " )
hidden = s : taboption ( " general " , Flag , " hidden " , translate ( " Hide <abbr title= \" Extended Service Set Identifier \" >ESSID</abbr> " ) )
hidden : depends ( { mode = " ap " } )
hidden : depends ( { mode = " adhoc " } )
hidden : depends ( { mode = " ap-wds " } )
hidden : depends ( { mode = " sta-wds " } )
isolate = s : taboption ( " advanced " , Flag , " isolate " , translate ( " Separate Clients " ) ,
translate ( " Prevents client-to-client communication " ) )
isolate : depends ( { mode = " ap " } )
s : taboption ( " advanced " , Flag , " bgscan " , translate ( " Background Scan " ) )
mp = s : taboption ( " macfilter " , ListValue , " macpolicy " , translate ( " MAC-Address Filter " ) )
mp : value ( " " , translate ( " disable " ) )
2011-06-25 22:34:46 +00:00
mp : value ( " allow " , translate ( " Allow listed only " ) )
mp : value ( " deny " , translate ( " Allow all except listed " ) )
2011-04-25 17:45:59 +00:00
2010-10-30 00:45:43 +00:00
ml = s : taboption ( " macfilter " , DynamicList , " maclist " , translate ( " MAC-List " ) )
2011-04-25 17:45:59 +00:00
ml.datatype = " macaddr "
2010-10-30 00:45:43 +00:00
ml : depends ( { macpolicy = " allow " } )
ml : depends ( { macpolicy = " deny " } )
2012-08-08 15:20:10 +00:00
nt.mac_hints ( function ( mac , name ) ml : value ( mac , " %s (%s) " % { mac , name } ) end )
2010-10-30 00:45:43 +00:00
s : taboption ( " advanced " , Value , " rate " , translate ( " Transmission Rate " ) )
s : taboption ( " advanced " , Value , " mcast_rate " , translate ( " Multicast Rate " ) )
s : taboption ( " advanced " , Value , " frag " , translate ( " Fragmentation Threshold " ) )
s : taboption ( " advanced " , Value , " rts " , translate ( " RTS/CTS Threshold " ) )
s : taboption ( " advanced " , Value , " minrate " , translate ( " Minimum Rate " ) )
s : taboption ( " advanced " , Value , " maxrate " , translate ( " Maximum Rate " ) )
s : taboption ( " advanced " , Flag , " compression " , translate ( " Compression " ) )
s : taboption ( " advanced " , Flag , " bursting " , translate ( " Frame Bursting " ) )
s : taboption ( " advanced " , Flag , " turbo " , translate ( " Turbo Mode " ) )
s : taboption ( " advanced " , Flag , " ff " , translate ( " Fast Frames " ) )
s : taboption ( " advanced " , Flag , " wmm " , translate ( " WMM Mode " ) )
s : taboption ( " advanced " , Flag , " xr " , translate ( " XR Support " ) )
s : taboption ( " advanced " , Flag , " ar " , translate ( " AR Support " ) )
local swm = s : taboption ( " advanced " , Flag , " sw_merge " , translate ( " Disable HW-Beacon timer " ) )
swm : depends ( { mode = " adhoc " } )
local nos = s : taboption ( " advanced " , Flag , " nosbeacon " , translate ( " Disable HW-Beacon timer " ) )
nos : depends ( { mode = " sta " } )
nos : depends ( { mode = " sta-wds " } )
local probereq = s : taboption ( " advanced " , Flag , " probereq " , translate ( " Do not send probe responses " ) )
probereq.enabled = " 0 "
probereq.disabled = " 1 "
end
2008-09-13 04:26:37 +00:00
2009-09-22 16:44:21 +00:00
2010-10-30 00:45:43 +00:00
-------------------- Broadcom Interface ----------------------
2008-04-11 19:03:30 +00:00
2010-10-30 00:45:43 +00:00
if hwtype == " broadcom " then
mode : value ( " wds " , translate ( " WDS " ) )
mode : value ( " monitor " , translate ( " Monitor " ) )
2008-04-14 10:58:34 +00:00
2010-10-30 00:45:43 +00:00
hidden = s : taboption ( " general " , Flag , " hidden " , translate ( " Hide <abbr title= \" Extended Service Set Identifier \" >ESSID</abbr> " ) )
hidden : depends ( { mode = " ap " } )
hidden : depends ( { mode = " adhoc " } )
hidden : depends ( { mode = " wds " } )
2009-05-21 21:33:24 +00:00
2010-10-30 00:45:43 +00:00
isolate = s : taboption ( " advanced " , Flag , " isolate " , translate ( " Separate Clients " ) ,
translate ( " Prevents client-to-client communication " ) )
isolate : depends ( { mode = " ap " } )
2009-05-21 21:33:24 +00:00
2010-10-30 00:45:43 +00:00
s : taboption ( " advanced " , Flag , " doth " , " 802.11h " )
s : taboption ( " advanced " , Flag , " wmm " , translate ( " WMM Mode " ) )
2009-05-21 21:33:24 +00:00
2010-10-30 00:45:43 +00:00
bssid : depends ( { mode = " wds " } )
bssid : depends ( { mode = " adhoc " } )
end
2009-05-23 01:59:09 +00:00
2009-05-21 21:33:24 +00:00
2010-10-30 00:45:43 +00:00
----------------------- HostAP Interface ---------------------
2009-05-21 21:33:24 +00:00
2010-10-30 00:45:43 +00:00
if hwtype == " prism2 " then
mode : value ( " wds " , translate ( " WDS " ) )
mode : value ( " monitor " , translate ( " Monitor " ) )
2008-04-14 10:58:34 +00:00
2010-10-30 00:45:43 +00:00
hidden = s : taboption ( " general " , Flag , " hidden " , translate ( " Hide <abbr title= \" Extended Service Set Identifier \" >ESSID</abbr> " ) )
hidden : depends ( { mode = " ap " } )
hidden : depends ( { mode = " adhoc " } )
hidden : depends ( { mode = " wds " } )
2008-08-30 20:32:27 +00:00
2010-10-30 00:45:43 +00:00
bssid : depends ( { mode = " sta " } )
2008-09-07 14:06:20 +00:00
2010-10-30 00:45:43 +00:00
mp = s : taboption ( " macfilter " , ListValue , " macpolicy " , translate ( " MAC-Address Filter " ) )
mp : value ( " " , translate ( " disable " ) )
2011-06-25 22:34:46 +00:00
mp : value ( " allow " , translate ( " Allow listed only " ) )
mp : value ( " deny " , translate ( " Allow all except listed " ) )
2010-10-30 00:45:43 +00:00
ml = s : taboption ( " macfilter " , DynamicList , " maclist " , translate ( " MAC-List " ) )
ml : depends ( { macpolicy = " allow " } )
ml : depends ( { macpolicy = " deny " } )
2012-08-08 15:20:10 +00:00
nt.mac_hints ( function ( mac , name ) ml : value ( mac , " %s (%s) " % { mac , name } ) end )
2008-08-30 20:32:27 +00:00
2010-10-30 00:45:43 +00:00
s : taboption ( " advanced " , Value , " rate " , translate ( " Transmission Rate " ) )
s : taboption ( " advanced " , Value , " frag " , translate ( " Fragmentation Threshold " ) )
s : taboption ( " advanced " , Value , " rts " , translate ( " RTS/CTS Threshold " ) )
end
2008-09-13 04:26:37 +00:00
2010-10-30 00:45:43 +00:00
------------------- WiFI-Encryption -------------------
encr = s : taboption ( " encryption " , ListValue , " encryption " , translate ( " Encryption " ) )
encr.override_values = true
encr.override_depends = true
encr : depends ( { mode = " ap " } )
encr : depends ( { mode = " sta " } )
encr : depends ( { mode = " adhoc " } )
encr : depends ( { mode = " ahdemo " } )
encr : depends ( { mode = " ap-wds " } )
encr : depends ( { mode = " sta-wds " } )
encr : depends ( { mode = " mesh " } )
2011-11-07 06:30:36 +00:00
cipher = s : taboption ( " encryption " , ListValue , " cipher " , translate ( " Cipher " ) )
cipher : depends ( { encryption = " wpa " } )
cipher : depends ( { encryption = " wpa2 " } )
cipher : depends ( { encryption = " psk " } )
cipher : depends ( { encryption = " psk2 " } )
cipher : depends ( { encryption = " wpa-mixed " } )
cipher : depends ( { encryption = " psk-mixed " } )
cipher : value ( " auto " , translate ( " auto " ) )
cipher : value ( " ccmp " , translate ( " Force CCMP (AES) " ) )
cipher : value ( " tkip " , translate ( " Force TKIP " ) )
cipher : value ( " tkip+ccmp " , translate ( " Force TKIP and CCMP (AES) " ) )
function encr . cfgvalue ( self , section )
local v = tostring ( ListValue.cfgvalue ( self , section ) )
if v == " wep " then
return " wep-open "
elseif v and v : match ( " %+ " ) then
return ( v : gsub ( " %+.+$ " , " " ) )
end
return v
end
2011-10-02 10:25:32 +00:00
function encr . write ( self , section , value )
2011-11-07 06:30:36 +00:00
local e = tostring ( encr : formvalue ( section ) )
local c = tostring ( cipher : formvalue ( section ) )
2011-10-02 10:25:32 +00:00
if value == " wpa " or value == " wpa2 " then
self.map . uci : delete ( " wireless " , section , " key " )
end
2011-11-07 06:30:36 +00:00
if e and ( c == " tkip " or c == " ccmp " or c == " tkip+ccmp " ) then
e = e .. " + " .. c
end
self.map : set ( section , " encryption " , e )
end
function cipher . cfgvalue ( self , section )
local v = tostring ( ListValue.cfgvalue ( encr , section ) )
if v and v : match ( " %+ " ) then
v = v : gsub ( " ^[^%+]+%+ " , " " )
if v == " aes " then v = " ccmp "
elseif v == " tkip+aes " then v = " tkip+ccmp "
elseif v == " aes+tkip " then v = " tkip+ccmp "
elseif v == " ccmp+tkip " then v = " tkip+ccmp "
end
end
return v
end
function cipher . write ( self , section )
return encr : write ( section )
2011-10-02 10:25:32 +00:00
end
2010-10-30 00:45:43 +00:00
encr : value ( " none " , " No Encryption " )
2011-12-21 22:41:44 +00:00
encr : value ( " wep-open " , translate ( " WEP Open System " ) , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } , { mode = " adhoc " } , { mode = " ahdemo " } , { mode = " wds " } )
encr : value ( " wep-shared " , translate ( " WEP Shared Key " ) , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } , { mode = " adhoc " } , { mode = " ahdemo " } , { mode = " wds " } )
2010-10-30 00:45:43 +00:00
if hwtype == " atheros " or hwtype == " mac80211 " or hwtype == " prism2 " then
local supplicant = fs.access ( " /usr/sbin/wpa_supplicant " )
local hostapd = fs.access ( " /usr/sbin/hostapd " )
2012-06-26 21:49:18 +00:00
-- Probe EAP support
local has_ap_eap = ( os.execute ( " hostapd -veap >/dev/null 2>/dev/null " ) == 0 )
2011-12-13 15:57:32 +00:00
local has_sta_eap = ( os.execute ( " wpa_supplicant -veap >/dev/null 2>/dev/null " ) == 0 )
2010-10-30 00:45:43 +00:00
if hostapd and supplicant then
2011-12-21 22:41:44 +00:00
encr : value ( " psk " , " WPA-PSK " , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } )
encr : value ( " psk2 " , " WPA2-PSK " , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } )
encr : value ( " psk-mixed " , " WPA-PSK/WPA2-PSK Mixed Mode " , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } )
2011-12-13 15:57:32 +00:00
if has_ap_eap and has_sta_eap then
encr : value ( " wpa " , " WPA-EAP " , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } )
encr : value ( " wpa2 " , " WPA2-EAP " , { mode = " ap " } , { mode = " sta " } , { mode = " ap-wds " } , { mode = " sta-wds " } )
end
2010-10-30 00:45:43 +00:00
elseif hostapd and not supplicant then
2011-12-21 22:41:44 +00:00
encr : value ( " psk " , " WPA-PSK " , { mode = " ap " } , { mode = " ap-wds " } )
encr : value ( " psk2 " , " WPA2-PSK " , { mode = " ap " } , { mode = " ap-wds " } )
encr : value ( " psk-mixed " , " WPA-PSK/WPA2-PSK Mixed Mode " , { mode = " ap " } , { mode = " ap-wds " } )
2011-12-13 15:57:32 +00:00
if has_ap_eap then
encr : value ( " wpa " , " WPA-EAP " , { mode = " ap " } , { mode = " ap-wds " } )
encr : value ( " wpa2 " , " WPA2-EAP " , { mode = " ap " } , { mode = " ap-wds " } )
end
2010-10-30 00:45:43 +00:00
encr.description = translate (
" WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " ..
" and ad-hoc mode) to be installed. "
)
elseif not hostapd and supplicant then
encr : value ( " psk " , " WPA-PSK " , { mode = " sta " } , { mode = " sta-wds " } )
encr : value ( " psk2 " , " WPA2-PSK " , { mode = " sta " } , { mode = " sta-wds " } )
encr : value ( " psk-mixed " , " WPA-PSK/WPA2-PSK Mixed Mode " , { mode = " sta " } , { mode = " sta-wds " } )
2011-12-13 15:57:32 +00:00
if has_sta_eap then
encr : value ( " wpa " , " WPA-EAP " , { mode = " sta " } , { mode = " sta-wds " } )
encr : value ( " wpa2 " , " WPA2-EAP " , { mode = " sta " } , { mode = " sta-wds " } )
end
2010-10-30 00:45:43 +00:00
encr.description = translate (
" WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " ..
" and ad-hoc mode) to be installed. "
)
else
encr.description = translate (
" WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " ..
" and ad-hoc mode) to be installed. "
)
2008-09-07 14:06:20 +00:00
end
2010-10-30 00:45:43 +00:00
elseif hwtype == " broadcom " then
encr : value ( " psk " , " WPA-PSK " )
encr : value ( " psk2 " , " WPA2-PSK " )
encr : value ( " psk+psk2 " , " WPA-PSK/WPA2-PSK Mixed Mode " )
end
2008-08-30 20:32:27 +00:00
2011-10-02 10:25:32 +00:00
auth_server = s : taboption ( " encryption " , Value , " auth_server " , translate ( " Radius-Authentication-Server " ) )
auth_server : depends ( { mode = " ap " , encryption = " wpa " } )
auth_server : depends ( { mode = " ap " , encryption = " wpa2 " } )
auth_server : depends ( { mode = " ap-wds " , encryption = " wpa " } )
auth_server : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
auth_server.rmempty = true
auth_server.datatype = " host "
auth_port = s : taboption ( " encryption " , Value , " auth_port " , translate ( " Radius-Authentication-Port " ) , translatef ( " Default %d " , 1812 ) )
auth_port : depends ( { mode = " ap " , encryption = " wpa " } )
auth_port : depends ( { mode = " ap " , encryption = " wpa2 " } )
auth_port : depends ( { mode = " ap-wds " , encryption = " wpa " } )
auth_port : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
auth_port.rmempty = true
auth_port.datatype = " port "
auth_secret = s : taboption ( " encryption " , Value , " auth_secret " , translate ( " Radius-Authentication-Secret " ) )
auth_secret : depends ( { mode = " ap " , encryption = " wpa " } )
auth_secret : depends ( { mode = " ap " , encryption = " wpa2 " } )
auth_secret : depends ( { mode = " ap-wds " , encryption = " wpa " } )
auth_secret : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
auth_secret.rmempty = true
auth_secret.password = true
acct_server = s : taboption ( " encryption " , Value , " acct_server " , translate ( " Radius-Accounting-Server " ) )
acct_server : depends ( { mode = " ap " , encryption = " wpa " } )
acct_server : depends ( { mode = " ap " , encryption = " wpa2 " } )
acct_server : depends ( { mode = " ap-wds " , encryption = " wpa " } )
acct_server : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
acct_server.rmempty = true
acct_server.datatype = " host "
acct_port = s : taboption ( " encryption " , Value , " acct_port " , translate ( " Radius-Accounting-Port " ) , translatef ( " Default %d " , 1813 ) )
acct_port : depends ( { mode = " ap " , encryption = " wpa " } )
acct_port : depends ( { mode = " ap " , encryption = " wpa2 " } )
acct_port : depends ( { mode = " ap-wds " , encryption = " wpa " } )
acct_port : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
acct_port.rmempty = true
acct_port.datatype = " port "
acct_secret = s : taboption ( " encryption " , Value , " acct_secret " , translate ( " Radius-Accounting-Secret " ) )
acct_secret : depends ( { mode = " ap " , encryption = " wpa " } )
acct_secret : depends ( { mode = " ap " , encryption = " wpa2 " } )
acct_secret : depends ( { mode = " ap-wds " , encryption = " wpa " } )
acct_secret : depends ( { mode = " ap-wds " , encryption = " wpa2 " } )
acct_secret.rmempty = true
acct_secret.password = true
2010-10-30 00:45:43 +00:00
2011-01-10 23:23:32 +00:00
wpakey = s : taboption ( " encryption " , Value , " _wpa_key " , translate ( " Key " ) )
wpakey : depends ( " encryption " , " psk " )
wpakey : depends ( " encryption " , " psk2 " )
wpakey : depends ( " encryption " , " psk+psk2 " )
wpakey : depends ( " encryption " , " psk-mixed " )
wpakey.datatype = " wpakey "
wpakey.rmempty = true
wpakey.password = true
wpakey.cfgvalue = function ( self , section , value )
local key = m.uci : get ( " wireless " , section , " key " )
if key == " 1 " or key == " 2 " or key == " 3 " or key == " 4 " then
return nil
end
return key
end
wpakey.write = function ( self , section , value )
self.map . uci : set ( " wireless " , section , " key " , value )
self.map . uci : delete ( " wireless " , section , " key1 " )
end
wepslot = s : taboption ( " encryption " , ListValue , " _wep_key " , translate ( " Used Key Slot " ) )
wepslot : depends ( " encryption " , " wep-open " )
wepslot : depends ( " encryption " , " wep-shared " )
wepslot : value ( " 1 " , translatef ( " Key #%d " , 1 ) )
wepslot : value ( " 2 " , translatef ( " Key #%d " , 2 ) )
wepslot : value ( " 3 " , translatef ( " Key #%d " , 3 ) )
wepslot : value ( " 4 " , translatef ( " Key #%d " , 4 ) )
wepslot.cfgvalue = function ( self , section )
local slot = tonumber ( m.uci : get ( " wireless " , section , " key " ) )
if not slot or slot < 1 or slot > 4 then
return 1
end
2011-01-20 23:26:49 +00:00
return slot
2011-01-10 23:23:32 +00:00
end
wepslot.write = function ( self , section , value )
self.map . uci : set ( " wireless " , section , " key " , value )
end
local slot
for slot = 1 , 4 do
wepkey = s : taboption ( " encryption " , Value , " key " .. slot , translatef ( " Key #%d " , slot ) )
wepkey : depends ( " encryption " , " wep-open " )
wepkey : depends ( " encryption " , " wep-shared " )
wepkey.datatype = " wepkey "
wepkey.rmempty = true
wepkey.password = true
2011-01-20 23:26:49 +00:00
2011-01-10 23:23:32 +00:00
function wepkey . write ( self , section , value )
if value and ( # value == 5 or # value == 13 ) then
value = " s: " .. value
end
return Value.write ( self , section , value )
end
end
2010-10-30 00:45:43 +00:00
if hwtype == " atheros " or hwtype == " mac80211 " or hwtype == " prism2 " then
nasid = s : taboption ( " encryption " , 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
eaptype = s : taboption ( " encryption " , ListValue , " eap_type " , translate ( " EAP-Method " ) )
eaptype : value ( " tls " , " TLS " )
eaptype : value ( " ttls " , " TTLS " )
eaptype : value ( " peap " , " PEAP " )
eaptype : depends ( { mode = " sta " , encryption = " wpa " } )
eaptype : depends ( { mode = " sta " , encryption = " wpa2 " } )
2011-06-15 23:14:38 +00:00
eaptype : depends ( { mode = " sta-wds " , encryption = " wpa " } )
eaptype : depends ( { mode = " sta-wds " , encryption = " wpa2 " } )
2010-10-30 00:45:43 +00:00
cacert = s : taboption ( " encryption " , FileUpload , " ca_cert " , translate ( " Path to CA-Certificate " ) )
cacert : depends ( { mode = " sta " , encryption = " wpa " } )
cacert : depends ( { mode = " sta " , encryption = " wpa2 " } )
2011-06-15 23:14:38 +00:00
cacert : depends ( { mode = " sta-wds " , encryption = " wpa " } )
cacert : depends ( { mode = " sta-wds " , encryption = " wpa2 " } )
2010-10-30 00:45:43 +00:00
2012-01-24 20:57:54 +00:00
clientcert = s : taboption ( " encryption " , FileUpload , " client_cert " , translate ( " Path to Client-Certificate " ) )
clientcert : depends ( { mode = " sta " , encryption = " wpa " } )
clientcert : depends ( { mode = " sta " , encryption = " wpa2 " } )
clientcert : depends ( { mode = " sta-wds " , encryption = " wpa " } )
clientcert : depends ( { mode = " sta-wds " , encryption = " wpa2 " } )
2010-10-30 00:45:43 +00:00
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 " } )
2011-06-15 23:14:38 +00:00
privkey : depends ( { mode = " sta-wds " , eap_type = " tls " , encryption = " wpa2 " } )
privkey : depends ( { mode = " sta-wds " , eap_type = " tls " , encryption = " wpa " } )
2010-10-30 00:45:43 +00:00
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 " } )
2011-06-15 23:14:38 +00:00
privkeypwd : depends ( { mode = " sta-wds " , eap_type = " tls " , encryption = " wpa2 " } )
privkeypwd : depends ( { mode = " sta-wds " , eap_type = " tls " , encryption = " wpa " } )
2010-10-30 00:45:43 +00:00
auth = s : taboption ( " encryption " , Value , " auth " , translate ( " Authentication " ) )
auth : value ( " PAP " )
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 " } )
2011-06-15 23:14:38 +00:00
auth : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa2 " } )
auth : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa " } )
auth : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa2 " } )
auth : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa " } )
2010-10-30 00:45:43 +00:00
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 " } )
2011-06-15 23:14:38 +00:00
identity : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa2 " } )
identity : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa " } )
identity : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa2 " } )
identity : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa " } )
2010-10-30 00:45:43 +00:00
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 " } )
2011-06-15 23:14:38 +00:00
password : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa2 " } )
password : depends ( { mode = " sta-wds " , eap_type = " peap " , encryption = " wpa " } )
password : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa2 " } )
password : depends ( { mode = " sta-wds " , eap_type = " ttls " , encryption = " wpa " } )
2008-08-30 20:32:27 +00:00
end
2008-04-11 19:03:30 +00:00
2014-10-10 12:48:54 +00:00
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
2008-08-31 22:44:32 +00:00
return m