modules/admin-full: convert controller to new network model

This commit is contained in:
Jo-Philipp Wich 2010-10-30 00:46:41 +00:00
parent 185eacba4b
commit a3e66af2a3

View file

@ -11,6 +11,7 @@ You may obtain a copy of the License at
$Id$ $Id$
]]-- ]]--
module("luci.controller.admin.network", package.seeall) module("luci.controller.admin.network", package.seeall)
function index() function index()
@ -136,32 +137,28 @@ end
function wifi_add() function wifi_add()
local dev = luci.http.formvalue("device") local dev = luci.http.formvalue("device")
local uci = require "luci.model.uci".cursor() local ntm = require "luci.model.network".init()
local wlm = require "luci.model.wireless"
dev = dev and ntm:get_wifidev(dev)
if dev then if dev then
wlm.init(uci) local net = dev:add_wifinet({
local net = wlm:add_network({
device = dev,
mode = "ap", mode = "ap",
ssid = "OpenWrt", ssid = "OpenWrt",
encryption = "none" encryption = "none"
}) })
uci:save("wireless") ntm:save("wireless")
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", dev, net:name())) luci.http.redirect(net:adminlink())
end end
end end
function wifi_delete(network) function wifi_delete(network)
local uci = require "luci.model.uci".cursor() local ntm = require "luci.model.network".init()
local wlm = require "luci.model.wireless"
wlm.init(uci) ntm:del_network(network)
wlm:del_network(network) ntm:save("wireless")
uci:save("wireless")
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless"))
end end
@ -199,49 +196,56 @@ end
function iface_status() function iface_status()
local path = luci.dispatcher.context.requestpath local path = luci.dispatcher.context.requestpath
local iface = path[#path] local x = luci.model.uci.cursor_state()
local data = { } local rv = { }
local info
local x = luci.model.uci.cursor_state()
local dev = x:get("network", iface, "device") or "" local iface
if #dev == 0 or dev:match("^%d") or dev:match("%W") then for iface in path[#path]:gmatch("[%w%.%-]+") do
dev = x:get("network", iface, "ifname") or "" local dev = x:get("network", iface, "device") or ""
dev = dev:match("%S+") if #dev == 0 or dev:match("^%d") or dev:match("%W") then
end dev = x:get("network", iface, "ifname") or ""
dev = dev:match("%S+")
end
for _, info in ipairs(nixio.getifaddrs()) do local info
local name = info.name:match("[^:]+") local data = { }
if name == dev then for _, info in ipairs(nixio.getifaddrs()) do
if info.family == "packet" then local name = info.name:match("[^:]+")
data.flags = info.flags if name == dev then
data.stats = info.data if info.family == "packet" then
data.macaddr = info.addr data.flags = info.flags
data.ifname = name data.stats = info.data
elseif info.family == "inet" then data.macaddr = info.addr
data.ipaddrs = data.ipaddrs or { } data.ifname = name
data.ipaddrs[#data.ipaddrs+1] = { elseif info.family == "inet" then
addr = info.addr, data.ipaddrs = data.ipaddrs or { }
broadaddr = info.broadaddr, data.ipaddrs[#data.ipaddrs+1] = {
dstaddr = info.dstaddr, addr = info.addr,
netmask = info.netmask, broadaddr = info.broadaddr,
prefix = info.prefix dstaddr = info.dstaddr,
} netmask = info.netmask,
elseif info.family == "inet6" then prefix = info.prefix
data.ip6addrs = data.ip6addrs or { } }
data.ip6addrs[#data.ip6addrs+1] = { elseif info.family == "inet6" then
addr = info.addr, data.ip6addrs = data.ip6addrs or { }
netmask = info.netmask, data.ip6addrs[#data.ip6addrs+1] = {
prefix = info.prefix addr = info.addr,
} netmask = info.netmask,
prefix = info.prefix
}
end
end end
end end
if next(data) then
rv[#rv+1] = data
end
end end
if next(data) then if #rv > 0 then
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
jsondump(data) jsondump(rv)
return return
end end
@ -250,22 +254,29 @@ end
function wifi_status() function wifi_status()
local path = luci.dispatcher.context.requestpath local path = luci.dispatcher.context.requestpath
local dev = path[#path] local rv = { }
local iw = luci.sys.wifi.getiwinfo(dev)
if iw then local dev
local f for dev in path[#path]:gmatch("[%w%.%-]+") do
local j = { } local iw = luci.sys.wifi.getiwinfo(dev)
for _, f in ipairs({ if iw then
"channel", "frequency", "txpower", "bitrate", "signal", "noise", local f
"quality", "quality_max", "mode", "ssid", "bssid", "country", local j = { }
"encryption", "ifname" for _, f in ipairs({
}) do "channel", "frequency", "txpower", "bitrate", "signal", "noise",
j[f] = iw[f] "quality", "quality_max", "mode", "ssid", "bssid", "country",
"encryption", "ifname"
}) do
j[f] = iw[f]
end
rv[#rv+1] = j
end end
end
if #rv > 0 then
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
jsondump(j) jsondump(rv)
return return
end end