X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fnetwork.lua;h=8fd536888435e3c597d036e6eaab37003673de02;hb=f7eb9361d7065b91c12096449eb6b0faceac95d9;hp=0fffd32b613ec394b066c8773fe3574be7e0e183;hpb=58f183a28269ded9f41eb980b63a607421689f63;p=project%2Fluci.git 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 0fffd32b6..8fd536888 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/network.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/network.lua @@ -12,19 +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" +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 @@ -33,66 +36,92 @@ 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") -up.stateful = true +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 "ifdown" or "ifup" - 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")) -ifname.stateful = true +function ifname.cfgvalue(self, section) + return netstate[section] and netstate[section].ifname +end + +ifname.titleref = luci.dispatcher.build_url("admin", "network", "vlan") + + +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) + 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:stateget(section, "ifname") or "" - return luci.fs.readfile("/sys/class/net/" .. ix .. "/address") or "n/a" + local ix = self.map:get(section, "ifname") or "" + 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")) - 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:stateget(section, "ifname") - + 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 errors = s:option(DummyValue, "_err") function errors.cfgvalue(self, section) - local ix = self.map:stateget(section, "ifname") - + 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