AP configuration
This commit is contained in:
parent
70f77f481a
commit
98f1d09a06
9 changed files with 421 additions and 4 deletions
48
modules/niu/COPYING.icons
Normal file
48
modules/niu/COPYING.icons
Normal file
|
@ -0,0 +1,48 @@
|
|||
The Oxygen Icon Theme
|
||||
Copyright (C) 2007 David Vignoni <david@icon-king.com>
|
||||
Copyright (C) 2007 Johann Ollivier Lapeyre <johann@oxygen-icons.org>
|
||||
Copyright (C) 2007 Kenneth Wimer <kwwii@bootsplash.org>
|
||||
Copyright (C) 2007 Nuno Fernades Pinheiro <nf.pinheiro@gmail.com>
|
||||
Copyright (C) 2007 Riccardo Iaconelli <riccardo@oxygen-icons.org>
|
||||
Copyright (C) 2007 David Miller <miller@oxygen-icons.org>
|
||||
|
||||
and others
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Clarification:
|
||||
|
||||
The GNU Lesser General Public License or LGPL is written for
|
||||
software libraries in the first place. We expressly want the LGPL to
|
||||
be valid for this artwork library too.
|
||||
|
||||
KDE Oxygen theme icons is a special kind of software library, it is an
|
||||
artwork library, it's elements can be used in a Graphical User Interface, or
|
||||
GUI.
|
||||
|
||||
Source code, for this library means:
|
||||
- where they exist, SVG;
|
||||
- otherwise, if applicable, the multi-layered formats xcf or psd, or
|
||||
otherwise png.
|
||||
|
||||
The LGPL in some sections obliges you to make the files carry
|
||||
notices. With images this is in some cases impossible or hardly useful.
|
||||
|
||||
With this library a notice is placed at a prominent place in the directory
|
||||
containing the elements. You may follow this practice.
|
||||
|
||||
The exception in section 5 of the GNU Lesser General Public License covers
|
||||
the use of elements of this art library in a GUI.
|
||||
|
||||
kde-artists [at] kde.org
|
|
@ -16,6 +16,11 @@ local require = require
|
|||
module "luci.controller.niu.wireless"
|
||||
|
||||
function index()
|
||||
if not fs.access("/etc/config/wireless") then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local toniu = {on_success_to={"niu"}}
|
||||
|
||||
local e = entry({"niu", "wireless"}, alias("niu"), "Wireless", 20)
|
||||
|
@ -24,5 +29,5 @@ function index()
|
|||
e.niu_dbicon = "icons32/network-wireless.png"
|
||||
|
||||
entry({"niu", "wireless", "ap"},
|
||||
cbi("niu/network/ap", toniu), "Configure Private Access Point", 1)
|
||||
cbi("niu/wireless/ap", toniu), "Configure Private Access Point", 1)
|
||||
end
|
|
@ -23,7 +23,7 @@ local has_pppoe = fs.glob("/usr/lib/pppd/*/rp-pppoe.so")()
|
|||
local has_pppoa = fs.glob("/usr/lib/pppd/*/pppoatm.so")()
|
||||
|
||||
|
||||
m = Map("network", "Configure Ethernet Adapter")
|
||||
m = Map("network", "Configure Ethernet Adapter for Internet Connection")
|
||||
nw.init(m.uci)
|
||||
|
||||
s = m:section(NamedSection, "wan", "interface")
|
||||
|
|
|
@ -20,6 +20,7 @@ function d.on_done()
|
|||
cs:save("network")
|
||||
end
|
||||
|
||||
cursor:set("network", "lan", "type", "bridge")
|
||||
cursor:commit("network")
|
||||
cursor:commit("dhcp")
|
||||
end
|
||||
|
|
|
@ -17,7 +17,8 @@ local nw = require "luci.model.network"
|
|||
|
||||
local has_ipv6 = nw:has_ipv6()
|
||||
|
||||
m = Map("network", "Local Network")
|
||||
m = Map("network", "Configure Local Network", "These settings affect the devices in your local network. "..
|
||||
"Usually you do not need to change anything here for your router to work correctly.")
|
||||
|
||||
nw.init(m.uci)
|
||||
|
||||
|
|
43
modules/niu/luasrc/model/cbi/niu/wireless/ap.lua
Normal file
43
modules/niu/luasrc/model/cbi/niu/wireless/ap.lua
Normal file
|
@ -0,0 +1,43 @@
|
|||
local cursor = require "luci.model.uci".cursor()
|
||||
|
||||
if not cursor:get("wireless", "ap") then
|
||||
cursor:section("wireless", "wifi-iface", "ap",
|
||||
{device = "_", doth = "1", wmm = "1", _niu = "1"})
|
||||
cursor:save("wireless")
|
||||
end
|
||||
|
||||
local function deviceroute(self)
|
||||
cursor:unload("wireless")
|
||||
local d = cursor:get("wireless", "ap", "device")
|
||||
if d ~= "none" then
|
||||
cursor:delete_all("wireless", "wifi-iface", function(s)
|
||||
return s.device == d and s._niu ~= "1"
|
||||
end)
|
||||
cursor:set("wireless", d, "disabled", 0)
|
||||
cursor:set("wireless", "ap", "network", "lan")
|
||||
self:set("ap1", load("niu/wireless/ap1"))
|
||||
self:set_route("ap1")
|
||||
else
|
||||
cursor:delete("wireless", "ap", "network")
|
||||
end
|
||||
cursor:save("wireless")
|
||||
end
|
||||
|
||||
|
||||
local d = Delegator()
|
||||
d.allow_finish = true
|
||||
d.allow_back = true
|
||||
d.allow_cancel = true
|
||||
|
||||
d:add("device", load("niu/wireless/apdevice"))
|
||||
d:add("deviceroute", deviceroute)
|
||||
|
||||
function d.on_cancel()
|
||||
cursor:revert("wireless")
|
||||
end
|
||||
|
||||
function d.on_done()
|
||||
cursor:commit("wireless")
|
||||
end
|
||||
|
||||
return d
|
268
modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua
Normal file
268
modules/niu/luasrc/model/cbi/niu/wireless/ap1.lua
Normal file
|
@ -0,0 +1,268 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2009 Steven Barth <steven@midlink.org>
|
||||
Copyright 2009 Jo-Philipp Wich <xm@subsignal.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
local fs = require "nixio.fs"
|
||||
local sys = require "luci.sys"
|
||||
local cursor = require "luci.model.uci".inst
|
||||
local state = require "luci.model.uci".inst_state
|
||||
cursor:unload("wireless")
|
||||
|
||||
local device = cursor:get("wireless", "ap", "device")
|
||||
local hwtype = cursor:get("wireless", device, "type")
|
||||
|
||||
local nsantenna = cursor:get("wireless", device, "antenna")
|
||||
|
||||
local iw = nil
|
||||
local tx_powers = nil
|
||||
local chan = sys.wifi.channels()
|
||||
|
||||
state:foreach("wireless", "wifi-iface",
|
||||
function(s)
|
||||
if s.device == device and not iw then
|
||||
iw = sys.wifi.getiwinfo(s.ifname or s.device)
|
||||
chan = sys.wifi.channels(s.ifname or s.device)
|
||||
tx_powers = iw.txpwrlist or { }
|
||||
end
|
||||
end)
|
||||
|
||||
m = Map("wireless", "Configure Access Point",
|
||||
"The private Access Point is about to be created. You only need to provide "..
|
||||
"a network name and a password to finish this step and - if you like - tweak "..
|
||||
"some of the advanced settings.")
|
||||
|
||||
--- Device Settings ---
|
||||
s = m:section(NamedSection, device, "wifi-device", "Device Configuration")
|
||||
s.addremove = false
|
||||
|
||||
s:tab("general", translate("General Settings"))
|
||||
|
||||
ch = s:taboption("general", Value, "channel", translate("Channel"))
|
||||
ch:value("auto", translate("automatic"))
|
||||
for _, f in ipairs(chan) do
|
||||
ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz })
|
||||
end
|
||||
|
||||
|
||||
|
||||
s:tab("expert", translate("Expert Settings"))
|
||||
if hwtype == "mac80211" then
|
||||
tp = s:taboption("expert",
|
||||
(tx_powers and #tx_powers > 0) and ListValue or Value,
|
||||
"txpower", translate("Transmission Power"), "dBm")
|
||||
|
||||
tp.rmempty = true
|
||||
tp:value("", translate("automatic"))
|
||||
for _, p in ipairs(iw and iw.txpwrlist or {}) do
|
||||
tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
|
||||
end
|
||||
elseif hwtype == "atheros" then
|
||||
tp = s:taboption("expert",
|
||||
(#tx_powers > 0) and ListValue or Value,
|
||||
"txpower", translate("Transmission Power"), "dBm")
|
||||
|
||||
tp.rmempty = true
|
||||
tp:value("", translate("automatic"))
|
||||
for _, p in ipairs(iw.txpwrlist) do
|
||||
tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
|
||||
end
|
||||
|
||||
mode = s:taboption("expert", ListValue, "hwmode", translate("Communication Protocol"))
|
||||
mode:value("", translate("automatic"))
|
||||
mode:value("11g", "802.11g")
|
||||
mode:value("11b", "802.11b")
|
||||
mode:value("11bg", "802.11b+g")
|
||||
mode:value("11a", "802.11a")
|
||||
mode:value("11gst", "802.11g + Turbo")
|
||||
mode:value("11ast", "802.11a + Turbo")
|
||||
|
||||
if nsantenna then -- NanoFoo
|
||||
local ant = s:taboption("expert", ListValue, "antenna", translate("Transmitter Antenna"))
|
||||
ant:value("auto")
|
||||
ant:value("vertical")
|
||||
ant:value("horizontal")
|
||||
ant:value("external")
|
||||
ant.default = "auto"
|
||||
end
|
||||
elseif hwtype == "broadcom" then
|
||||
tp = s:taboption("expert",
|
||||
(#tx_powers > 0) and ListValue or Value,
|
||||
"txpower", translate("Transmit Power"), "dBm")
|
||||
|
||||
tp.rmempty = true
|
||||
tp:value("", translate("automatic"))
|
||||
for _, p in ipairs(iw.txpwrlist) do
|
||||
tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
|
||||
end
|
||||
|
||||
mp = s:taboption("expert", ListValue, "macfilter", translate("MAC-Address Filter"))
|
||||
mp:value("", translate("disable"))
|
||||
mp:value("allow", translate("Allow listed only"))
|
||||
mp:value("deny", translate("Allow all except listed"))
|
||||
ml = s:taboption("expert", DynamicList, "maclist", translate("MAC-List"))
|
||||
ml:depends({macfilter="allow"})
|
||||
ml:depends({macfilter="deny"})
|
||||
|
||||
s:taboption("expert", Flag, "frameburst", translate("Allow Burst Transmissions"))
|
||||
elseif hwtype == "prism2" then
|
||||
s:taboption("expert", Value, "txpower", translate("Transmission Power"), "att units").rmempty = true
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
s = m:section(NamedSection, "ap", "wifi-iface", "Access Point Details")
|
||||
s.addremove = false
|
||||
|
||||
s:tab("general", translate("General Settings"))
|
||||
s:tab("expert", translate("Expert Settings"))
|
||||
|
||||
s:taboption("general", Value, "ssid", translate("Network Name (<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>)"))
|
||||
|
||||
mode = s:taboption("expert", ListValue, "mode", translate("Operating Mode"))
|
||||
mode.override_values = true
|
||||
mode:value("ap", translate("Access Point"))
|
||||
|
||||
encr = s:taboption("expert", ListValue, "encryption", translate("Encryption"))
|
||||
|
||||
|
||||
if hwtype == "mac80211" then
|
||||
-- Empty
|
||||
elseif hwtype == "atheros" then
|
||||
mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")})
|
||||
mode:value("wds", translate("Static WDS"))
|
||||
|
||||
function mode.write(self, section, value)
|
||||
if value == "ap-wds" then
|
||||
ListValue.write(self, section, "ap")
|
||||
self.map:set(section, "wds", 1)
|
||||
else
|
||||
ListValue.write(self, section, value)
|
||||
self.map:del(section, "wds")
|
||||
end
|
||||
end
|
||||
|
||||
function mode.cfgvalue(self, section)
|
||||
local mode = ListValue.cfgvalue(self, section)
|
||||
local wds = self.map:get(section, "wds") == "1"
|
||||
return mode == "ap" and wds and "ap-wds" or mode
|
||||
end
|
||||
|
||||
mp = s:taboption("expert", ListValue, "macpolicy", translate("MAC-Address Filter"))
|
||||
mp:value("", translate("disable"))
|
||||
mp:value("deny", translate("Allow listed only"))
|
||||
mp:value("allow", translate("Allow all except listed"))
|
||||
ml = s:taboption("expert", DynamicList, "maclist", translate("MAC-List"))
|
||||
ml:depends({macpolicy="allow"})
|
||||
ml:depends({macpolicy="deny"})
|
||||
|
||||
|
||||
hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point"))
|
||||
hidden:depends({mode="ap"})
|
||||
hidden:depends({mode="ap-wds"})
|
||||
|
||||
isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients"))
|
||||
isolate:depends({mode="ap"})
|
||||
|
||||
s:taboption("expert", Flag, "bursting", translate("Allow Burst Transmissions"))
|
||||
elseif hwtype == "broadcom" then
|
||||
mode:value("wds", translate("WDS"))
|
||||
|
||||
hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point"))
|
||||
hidden:depends({mode="ap"})
|
||||
hidden:depends({mode="wds"})
|
||||
|
||||
isolate = s:taboption("expert", Flag, "isolate", translate("Prevent communication between clients"))
|
||||
isolate:depends({mode="ap"})
|
||||
elseif hwtype == "prism2" then
|
||||
mode:value("wds", translate("WDS"))
|
||||
|
||||
mp = s:taboption("expert", ListValue, "macpolicy", translate("MAC-Address Filter"))
|
||||
mp:value("", translate("disable"))
|
||||
mp:value("deny", translate("Allow listed only"))
|
||||
mp:value("allow", translate("Allow all except listed"))
|
||||
|
||||
ml = s:taboption("expert", DynamicList, "maclist", translate("MAC-List"))
|
||||
ml:depends({macpolicy="allow"})
|
||||
ml:depends({macpolicy="deny"})
|
||||
|
||||
hidden = s:taboption("expert", Flag, "hidden", translate("Hide Access Point"))
|
||||
hidden:depends({mode="ap"})
|
||||
hidden:depends({mode="wds"})
|
||||
end
|
||||
|
||||
-- Encryption --
|
||||
|
||||
|
||||
encr.override_values = true
|
||||
encr.override_depends = true
|
||||
encr:value("none", "No Encryption")
|
||||
encr:value("wep", "WEP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"})
|
||||
|
||||
if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
|
||||
local hostapd = fs.access("/usr/sbin/hostapd") or os.getenv("LUCI_SYSROOT")
|
||||
|
||||
if hostapd then
|
||||
--s:taboption("expert", Flag, "_alloweap", "Allow EAP / 802.11i authentication")
|
||||
|
||||
encr:value("psk", "WPA", {mode="ap"}, {mode="ap-wds"})
|
||||
encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="ap-wds"})
|
||||
encr:value("psk-mixed", "WPA + WPA2", {mode="ap"}, {mode="ap-wds"})
|
||||
encr:value("psk2", "WPA2", {mode="ap"}, {mode="ap-wds"})
|
||||
encr:value("wpa2", "WPA2-EAP (802.11i)", {mode="ap"}, {mode="ap-wds"})
|
||||
encr.default = "psk-mixed"
|
||||
end
|
||||
elseif hwtype == "broadcom" then
|
||||
encr:value("psk", "WPA")
|
||||
encr:value("psk+psk2", "WPA + WPA2")
|
||||
encr:value("psk2", "WPA2")
|
||||
encr.default = "psk+psk2"
|
||||
end
|
||||
|
||||
server = s:taboption("general", Value, "server", translate("Radius-Server"))
|
||||
server:depends({mode="ap", encryption="wpa"})
|
||||
server:depends({mode="ap", encryption="wpa2"})
|
||||
server:depends({mode="ap-wds", encryption="wpa"})
|
||||
server:depends({mode="ap-wds", encryption="wpa2"})
|
||||
server.rmempty = true
|
||||
|
||||
port = s:taboption("general", Value, "port", translate("Radius-Port"))
|
||||
port:depends({mode="ap", encryption="wpa"})
|
||||
port:depends({mode="ap", encryption="wpa2"})
|
||||
port:depends({mode="ap-wds", encryption="wpa"})
|
||||
port:depends({mode="ap-wds", encryption="wpa2"})
|
||||
port.rmempty = true
|
||||
|
||||
key = s:taboption("general", Value, "key", translate("Password"))
|
||||
key:depends("encryption", "wep")
|
||||
key:depends("encryption", "psk")
|
||||
key:depends("encryption", "psk2")
|
||||
key:depends("encryption", "psk+psk2")
|
||||
key:depends("encryption", "psk-mixed")
|
||||
key:depends({mode="ap", encryption="wpa"})
|
||||
key:depends({mode="ap", encryption="wpa2"})
|
||||
key:depends({mode="ap-wds", encryption="wpa"})
|
||||
key:depends({mode="ap-wds", encryption="wpa2"})
|
||||
key.rmempty = true
|
||||
key.password = true
|
||||
|
||||
if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
|
||||
nasid = s:taboption("general", 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
|
||||
end
|
||||
return m
|
51
modules/niu/luasrc/model/cbi/niu/wireless/apdevice.lua
Normal file
51
modules/niu/luasrc/model/cbi/niu/wireless/apdevice.lua
Normal file
|
@ -0,0 +1,51 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2009 Steven Barth <steven@midlink.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
local iwinfo = require "iwinfo"
|
||||
local cursor = require "luci.model.uci".inst
|
||||
cursor:unload("wireless")
|
||||
|
||||
m = Map("wireless", "Configure Private Access Point")
|
||||
s = m:section(NamedSection, "ap", "interface", "Wireless Radio Device",
|
||||
"Select the wireless radio device that should be used to run the access"..
|
||||
" point. Note that wireless radios will not show up here if you already use"..
|
||||
" them for connecting to the Internet and are not capable of being used as"..
|
||||
" an access point in parallel.")
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
l = s:option(ListValue, "device", "Device providing Access Point")
|
||||
|
||||
local used = {}
|
||||
cursor:foreach("wireless", "wifi-iface", function(s)
|
||||
if s[".name"] ~= "ap" and s._niu == 1 then
|
||||
used[s.device] = 1
|
||||
end
|
||||
end)
|
||||
|
||||
for k in pairs(used) do
|
||||
local t = iwinfo.type(k)
|
||||
if t and iwinfo[t] then
|
||||
used[k] = (iwinfo[t].mbssid_support() < 1)
|
||||
end
|
||||
end
|
||||
|
||||
cursor:foreach("wireless", "wifi-device", function(s)
|
||||
if not used[s[".name"]] then
|
||||
l:value(s[".name"], "Radio %s" % s[".name"])
|
||||
end
|
||||
end)
|
||||
l:value("none", "Disable Private Access Point")
|
||||
|
||||
return m
|
|
@ -35,7 +35,7 @@ uci.inst:foreach("dhcp", "dnsmasq",
|
|||
)
|
||||
|
||||
if leasefn then
|
||||
local ln = io.lines(leasefn)
|
||||
local ln = fs.access(leasefn, "r") and io.lines(leasefn)
|
||||
leasefn = 0
|
||||
while ln and ln() do
|
||||
leasefn = leasefn + 1
|
||||
|
|
Loading…
Reference in a new issue