+function iface_reconnect()
+ local path = luci.dispatcher.context.requestpath
+ local iface = path[#path]
+ local netmd = require "luci.model.network".init()
+
+ local net = netmd:get_network(iface)
+ if net then
+ local ifn
+ for _, ifn in ipairs(net:get_interfaces()) do
+ local wnet = ifn:get_wifinet()
+ if wnet then
+ local wdev = wnet:get_device()
+ if wdev then
+ luci.sys.call(
+ "env -i /sbin/wifi up %q >/dev/null 2>/dev/null"
+ % wdev:name()
+ )
+
+ luci.http.status(200, "Reconnected")
+ return
+ end
+ end
+ end
+
+ luci.sys.call("env -i /sbin/ifup %q >/dev/null 2>/dev/null" % iface)
+ luci.http.status(200, "Reconnected")
+ return
+ end
+
+ luci.http.status(404, "No such interface")
+end
+
+function iface_shutdown()
+ local path = luci.dispatcher.context.requestpath
+ local iface = path[#path]
+ local netmd = require "luci.model.network".init()
+
+ local net = netmd:get_network(iface)
+ if net then
+ luci.sys.call("env -i /sbin/ifdown %q >/dev/null 2>/dev/null" % iface)
+ luci.http.status(200, "Shutdown")
+ return
+ end
+
+ luci.http.status(404, "No such interface")
+end
+
+function iface_delete()
+ local path = luci.dispatcher.context.requestpath
+ local iface = path[#path]
+ local netmd = require "luci.model.network".init()
+
+ local net = netmd:del_network(iface)
+ if net then
+ luci.sys.call("env -i /sbin/ifdown %q >/dev/null 2>/dev/null" % iface)
+ luci.http.redirect(luci.dispatcher.build_url("admin/network/network"))
+ netmd:commit("network")
+ netmd:commit("wireless")
+ return
+ end
+
+ luci.http.status(404, "No such interface")
+end
+