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=c79dc8359d1a8b92bece4c3f1316f44886b8fb73;hb=7c765875884d6866c53b63757731b079bace2e9b;hpb=07fdaa87dbac0582960cded4e9aa981d4a141782 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 c79dc8359..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,18 +12,22 @@ You may obtain a copy of the License at $Id$ ]]-- -require("luci.sys") +local sys = require "luci.sys" +local wa = require "luci.tools.webadmin" +local fs = require "nixio.fs" -m = Map("network", translate("interfaces"), translate("a_n_ifaces1")) +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", translate("interfaces")) +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 @@ -32,48 +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")) +function ifname.cfgvalue(self, section) + return netstate[section] and netstate[section].ifname end -ipaddr = s:option(DummyValue, "ipaddr", translate("ipaddress")) -ipaddr.stateful = true +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: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 ip = self.map:stateget(section, "ipaddr") - local nm = self.map:stateget(section, "netmask") - - local parsed = ip and luci.ip.IPv4(ip, nm) - return parsed and parsed:string() or "" + return table.concat(wa.network_get_addresses(section), ", ") end -rx = s:option(DummyValue, "_rx") +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 wa.byte_format(tonumber(rx)) or "-" -function rx.cfgvalue(self, section) - local ix = self.map:stateget(section, "ifname") - local bt = netstat and netstat[ix] and netstat[ix][1] - return bt and string.format("%.2f MB", tonumber(bt) / 1024 / 1024) + local tx = netstat and netstat[ix] and netstat[ix][9] + tx = tx and wa.byte_format(tonumber(tx)) or "-" + + return string.format("%s / %s", tx, rx) end -tx = s:option(DummyValue, "_tx") +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 "-" -function tx.cfgvalue(self, section) - local ix = self.map:stateget(section, "ifname") - local bt = netstat and netstat[ix] and netstat[ix][9] - return bt and string.format("%.2f MB", tonumber(bt) / 1024 / 1024) + return string.format("%s / %s", tx, rx) end -return m \ No newline at end of file +return m