X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fnetwork.lua;h=c117e93f741f777645edc58a223d8d8405d7cdd4;hp=c0f66e965eb4be3b15fb8ae3b774d810ae756ae3;hb=7c765875884d6866c53b63757731b079bace2e9b;hpb=935f4a805a484a3325016493e87c82e6b0180fa8 diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/network.lua b/modules/admin-full/luasrc/model/cbi/admin_network/network.lua index c0f66e965..c117e93f7 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/network.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/network.lua @@ -12,20 +12,22 @@ You may obtain a copy of the License at $Id$ ]]-- -require("luci.sys") -require("luci.tools.webadmin") +local sys = require "luci.sys" +local wa = require "luci.tools.webadmin" +local fs = require "nixio.fs" -m = Map("network", translate("interfaces")) -m.stateful = true +local netstate = luci.model.uci.cursor_state():get_all("network") +m = Map("network", translate("Interfaces")) local created -local netstat = luci.sys.net.deviceinfo() +local netstat = sys.net.deviceinfo() s = m:section(TypedSection, "interface", "") s.addremove = true -s.extedit = luci.http.getenv("REQUEST_URI") .. "/%s" +s.extedit = luci.dispatcher.build_url("admin", "network", "network") .. "/%s" s.template = "cbi/tblsection" +s.override_scheme = true function s.filter(self, section) return section ~= "loopback" and section @@ -34,63 +36,77 @@ end function s.create(self, section) if TypedSection.create(self, section) then created = section + else + self.invalid_cts = true end end function s.parse(self, ...) TypedSection.parse(self, ...) if created then - luci.http.redirect(luci.http.getenv("REQUEST_URI") .. "/" .. created) + m.uci:save("network") + luci.http.redirect(luci.dispatcher.build_url("admin", "network", "network") + .. "/" .. created) end end up = s:option(Flag, "up") +function up.cfgvalue(self, section) + return netstate[section] and netstate[section].up or "0" +end + function up.write(self, section, value) - local call = value == "1" and "ifup" or "ifdown" - os.execute(call .. " " .. section) + local call + if value == "1" then + call = "ifup" + elseif value == "0" then + call = "ifdown" + end + os.execute(call .. " " .. section .. " >/dev/null 2>&1") +end + +ifname = s:option(DummyValue, "ifname", translate("Device")) +function ifname.cfgvalue(self, section) + return netstate[section] and netstate[section].ifname end -ifname = s:option(DummyValue, "ifname", translate("device")) ifname.titleref = luci.dispatcher.build_url("admin", "network", "vlan") -if luci.model.uci.load("firewall") then + +if luci.model.uci.cursor():load("firewall") then zone = s:option(DummyValue, "_zone", translate("zone")) zone.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "zones") function zone.cfgvalue(self, section) - local zones = luci.tools.webadmin.network_get_zones(section) - return zones and table.concat(zones, ", ") or "-" + return table.concat(wa.network_get_zones(section) or { "-" }, ", ") end end hwaddr = s:option(DummyValue, "_hwaddr") function hwaddr.cfgvalue(self, section) local ix = self.map:get(section, "ifname") or "" - return luci.fs.readfile("/sys/class/net/" .. ix .. "/address") + return fs.readfile("/sys/class/net/" .. ix .. "/address") or luci.util.exec("ifconfig " .. ix):match(" ([A-F0-9:]+)%s*\n") or "n/a" - end -ipaddr = s:option(DummyValue, "ipaddr", translate("addresses")) - +ipaddr = s:option(DummyValue, "ipaddr", translate("Addresses")) function ipaddr.cfgvalue(self, section) - local addr = luci.tools.webadmin.network_get_addresses(section) - return table.concat(addr, ", ") + return table.concat(wa.network_get_addresses(section), ", ") end txrx = s:option(DummyValue, "_txrx") function txrx.cfgvalue(self, section) local ix = self.map:get(section, "ifname") - + local rx = netstat and netstat[ix] and netstat[ix][1] - rx = rx and luci.tools.webadmin.byte_format(tonumber(rx)) or "-" - + rx = rx and wa.byte_format(tonumber(rx)) or "-" + local tx = netstat and netstat[ix] and netstat[ix][9] - tx = tx and luci.tools.webadmin.byte_format(tonumber(tx)) or "-" - + tx = tx and wa.byte_format(tonumber(tx)) or "-" + return string.format("%s / %s", tx, rx) end @@ -98,14 +114,14 @@ errors = s:option(DummyValue, "_err") function errors.cfgvalue(self, section) local ix = self.map:get(section, "ifname") - + local rx = netstat and netstat[ix] and netstat[ix][3] local tx = netstat and netstat[ix] and netstat[ix][11] - + rx = rx and tostring(rx) or "-" tx = tx and tostring(tx) or "-" - + return string.format("%s / %s", tx, rx) end -return m \ No newline at end of file +return m