X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fcontroller%2Fadmin%2Fnetwork.lua;h=bb880685ab71497432b64b75e94f22281c332bca;hp=72bf7cc5a924451932e4ef2814055868ecdc8cdd;hb=91856a9242125388336d88140c840938704e9053;hpb=c80d0a350e8a09ed798e5b74e2e8e0c74db3ea72 diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 72bf7cc5a..bb880685a 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -22,54 +22,58 @@ function index() page.target = alias("admin", "network", "network") page.title = i18n("network") page.order = 50 + page.index = true local page = node("admin", "network", "vlan") page.target = cbi("admin_network/vlan") page.title = i18n("a_n_switch") page.order = 20 - local page = node("admin", "network", "wireless") - page.target = form("admin_network/wireless") - page.title = i18n("wifi") + local page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), i18n("wifi"), 15) page.i18n = "wifi" - page.order = 15 + page.leaf = true + page.subindex = true + uci:foreach("wireless", "wifi-device", function (section) local ifc = section[".name"] entry({"admin", "network", "wireless", ifc}, - alias("admin", "network", "wifi", ifc), + true, ifc:upper()).i18n = "wifi" end ) - local page = node("admin", "network", "wifi") - page.target = cbi("admin_network/wifi") - page.leaf = true + local page = entry({"admin", "network", "wireless_join"}, call("wifi_join"), nil, 16) page.i18n = "wifi" + page.leaf = true + + local page = entry({"admin", "network", "wireless_delete"}, call("wifi_delete"), nil, 16) + page.i18n = "wifi" + page.leaf = true + + local page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), i18n("interfaces", "Schnittstellen"), 10) + page.leaf = true + page.subindex = true + + local page = entry({"admin", "network", "add"}, cbi("admin_network/iface_add"), nil) + page.leaf = true - local page = node("admin", "network", "network") - page.target = cbi("admin_network/network") - page.title = i18n("interfaces", "Schnittstellen") - page.order = 10 uci:foreach("network", "interface", function (section) local ifc = section[".name"] if ifc ~= "loopback" then entry({"admin", "network", "network", ifc}, - alias("admin", "network", "ifaces", ifc), + true, ifc:upper()) end end ) - local page = node("admin", "network", "ifaces") - page.target = cbi("admin_network/ifaces") - page.leaf = true - local page = node("admin", "network", "dhcp") page.target = cbi("admin_network/dhcp") page.title = "DHCP" page.order = 30 + page.subindex = true entry( {"admin", "network", "dhcp", "leases"}, @@ -84,14 +88,106 @@ function index() local page = node("admin", "network", "routes") page.target = cbi("admin_network/routes") - page.title = i18n("a_n_routes") + page.title = i18n("a_n_routes_static") page.order = 50 - page.leaf = true - entry( - {"admin", "network", "routes", "static"}, - function() end, - i18n("a_n_routes_static") - ) +end + +function wifi_join() + local function param(x) + return luci.http.formvalue(x) + end + + local function ptable(x) + x = param(x) + return x and (type(x) ~= "table" and { x } or x) or {} + end + + local dev = param("device") + local ssid = param("join") + + if dev and ssid then + local wep = (tonumber(param("wep")) == 1) + local wpa = tonumber(param("wpa_version")) or 0 + local channel = tonumber(param("channel")) + local mode = param("mode") + local bssid = param("bssid") + + local confirm = (param("confirm") == "1") + local cancel = param("cancel") and true or false + + if confirm and not cancel then + local fixed_bssid = (param("fixed_bssid") == "1") + local replace_net = (param("replace_net") == "1") + local autoconnect = (param("autoconnect") == "1") + local attach_intf = param("attach_intf") + + local uci = require "luci.model.uci".cursor() + + if replace_net then + uci:delete_all("wireless", "wifi-iface") + end + + local wificonf = { + device = dev, + mode = (mode == "Ad-Hoc" and "adhoc" or "sta"), + ssid = ssid + } + + if attach_intf and uci:get("network", attach_intf) == "interface" then + -- target network already has a interface, make it a bridge + uci:set("network", attach_intf, "type", "bridge") + uci:save("network") + uci:commit("network") + + wificonf.network = attach_intf + + if autoconnect then + require "luci.sys".call("/sbin/ifup " .. attach_intf) + end + end + + if fixed_bssid then + wificonf.bssid = bssid + end + + if wep then + wificonf.encryption = "wep" + wificonf.key = param("key") + elseif wpa > 0 then + wificonf.encryption = param("wpa_suite") + wificonf.key = param("key") + end + + local s = uci:section("wireless", "wifi-iface", nil, wificonf) + uci:delete("wireless", dev, "disabled") + uci:set("wireless", dev, "channel", channel) + + uci:save("wireless") + uci:commit("wireless") + + if autoconnect then + require "luci.sys".call("/sbin/wifi") + end + + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) + elseif cancel then + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless_join?device=" .. dev)) + else + luci.template.render("admin_network/wifi_join_settings") + end + else + luci.template.render("admin_network/wifi_join") + end +end + +function wifi_delete(network) + local uci = require "luci.model.uci".cursor() + local wlm = require "luci.model.wireless" + + wlm.init(uci) + wlm:del_network(network) + uci:save("wireless") + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) end