From b4f9cfd3d76c66b657779778bcdc46966126ebd7 Mon Sep 17 00:00:00 2001 From: ttrask Date: Thu, 12 Mar 2009 15:26:41 +0000 Subject: Fixed interfaces bug in expert, did some reorg of code. git-svn-id: svn://svn.alpinelinux.org/acf/alpine-baselayout/trunk@1727 ab2d0c66-481e-0410-8bed-d214d4d58bed --- interfaces-model.lua | 152 +++++++++++++++++++-------------------------------- 1 file changed, 57 insertions(+), 95 deletions(-) diff --git a/interfaces-model.lua b/interfaces-model.lua index fdff2e2..ea18e56 100644 --- a/interfaces-model.lua +++ b/interfaces-model.lua @@ -6,6 +6,9 @@ require("modelfunctions") require("fs") require("format") +local filename = "/etc/network/interfaces" +local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin " + -- iface is a local (private) table with private methods for managing -- the interfaces file. All low-level stuff is done here. It exposes -- the iface.tags, file(raw), and array (parsed), as well as a number @@ -77,7 +80,6 @@ local iface = { tags = { comment = {type="longtext", label="Comments"}, -- Lowlevel functions - they do things directly to iface. -local filename = "/etc/network/interfaces" iface.read_file = function () iface.file = cfe({ type="longtext", label=filename }) local file = io.open(filename) @@ -141,7 +143,6 @@ iface.index = function (name) return false, 0 end - iface.append = function (self, value, prefix) self = self or "" -- if we already have some values, then append a newline @@ -250,7 +251,6 @@ iface.commit = function () return iface.write_file() end - iface.add_after = function (def, name) -- if the new def.name is already in the table, then fail local rc, idx = iface.index(def.value.name.value) @@ -291,7 +291,6 @@ iface.read = function (name) return iface.array[idx] end - iface.update = function (def) -- if the def by that name doesn't exist, fail local rc, idx = iface.index(def.value.name.value or "" ) @@ -328,7 +327,6 @@ iface.delete = function (name) return cfe({ value=value, label="Delete result" }) end - iface.validate = function (def) local success = true -- since the structure is different depending on the family and method ... @@ -362,61 +360,6 @@ iface.validate = function (def) return success, newdef end -iface.ifup = function (name) - name = name or "" - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ifup "..name - local f = io.popen(format.escapespecialcharacters(cmd)) - local cmdresult = f:read("*a") - f:close() - - if cmdresult == "" then - cmdresult = "Interface up" - end - - return cfe({ type="longtext", value=cmdresult, label="ifup "..name }) -end - -iface.ifdown = function (name) - name = name or "" - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ifdown "..name - local f = io.popen(format.escapespecialcharacters(cmd)) - local cmdresult = f:read("*a") - f:close() - - if cmdresult == "" then - cmdresult = "Interface down" - end - - return cfe({ type="longtext", value=cmdresult, label="ifdown "..name }) -end - -iface.ipaddr = function () - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ip addr" - local f = io.popen(format.escapespecialcharacters(cmd)) - local cmdresult = f:read("*a") - f:close() - - return cfe({ type="longtext", value=cmdresult, label="ip addr" }) -end - -iface.iproute = function () - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ip route" - local f = io.popen(format.escapespecialcharacters(cmd)) - local cmdresult = f:read("*a") - f:close() - - return cfe({ type="longtext", value=cmdresult, label="ip route" }) -end - -iface.ifconfig = function () - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ifconfig" - local f = io.popen(format.escapespecialcharacters(cmd)) - local cmdresult = f:read("*a") - f:close() - - return cfe({ type="longtext", value=cmdresult, label="ifconfig" }) -end - ------------------------------------------------------------------------------- -- Public Methods ------------------------------------------------------------------------------- @@ -433,56 +376,46 @@ update_iface = iface.update delete_iface_by_name = iface.delete -ifup_by_name = iface.ifup - -ifdown_by_name = iface.ifdown - get_status = function () - local interfacesfile = cfe({ - label="Interfaces file", - value=filename, - }) + local status = {} + status.filename = cfe({ value=filename, label="Interfaces file" }) + status.iproute = cfe({ type="longtext", label="ip route" }) + status.ipaddr = cfe({ type="longtext", label="ip addr" }) + if not fs.is_file(filename) then - interfacesfile.errtxt = "File not found" + status.filename.errtxt = "File not found" end - return cfe({ type="group", value={filename=interfacesfile, ipaddr=iface.ipaddr(), iproute=iface.iproute()}, label="Status" }) + local cmd = path.."ip route" + local f = io.popen(format.escapespecialcharacters(cmd)) + status.iproute.value = f:read("*a") + f:close() + cmd = path.."ip addr" + f = io.popen(format.escapespecialcharacters(cmd)) + status.ipaddr.value = f:read("*a") + f:close() + + return cfe({ type="group", value=status, label="Status" }) end get_file = function () - if not iface.file then - iface.read_file() - end - - local file = cfe({ value=filename, label="Interfaces file" }) - local filesize = cfe({ value="0", label="File size" }) - local mtime = cfe({ value="---", label="File date" }) - local filedetails = fs.stat(filename) - if filedetails then - filesize.value = filedetails.size - mtime.value = filedetails.mtime - else - file.errtxt = "File not found" - end - - return cfe({ type="group", value={filename=file, filecontent=iface.file, filesize=filesize, mtime=mtime}, label="Interfaces file details" }) + return modelfunctions.getfiledetails(filename) end write_file = function (newfile) - if not iface.file then - iface.read_file() - end - iface.file.value = newfile.value.filecontent.value - iface.write_file() - - return get_file() + iface.array = nil + iface.file = nil + return modelfunctions.setfiledetails(newfile, {filename}) end get_addresses = function() - local ipaddr = iface.ipaddr() + local cmd = path.."ip addr" + local f = io.popen(format.escapespecialcharacters(cmd)) + local ipaddr = f:read("*a") + f:close() -- now parse the result to find the interfaces and IP addresses local retval = {} local interface - for line in string.gmatch(ipaddr.value, "[^\n]*\n?") do + for line in string.gmatch(ipaddr, "[^\n]*\n?") do if string.find(line, "^%d+:%s+") then interface=string.match(line, "^%d+:%s+([^:@]+)") elseif string.find(line, "^%s*inet%s") then @@ -492,6 +425,35 @@ get_addresses = function() return cfe({ type="structure", value=retval, label="Interface IP Addresses" }) end +ifup_by_name = function (name) + name = name or "" + local cmd = path.."ifup "..name + local f = io.popen(format.escapespecialcharacters(cmd)) + local cmdresult = f:read("*a") + f:close() + + if cmdresult == "" then + cmdresult = "Interface up" + end + + return cfe({ type="longtext", value=cmdresult, label="ifup "..name }) +end + + +ifdown_by_name = function (name) + name = name or "" + local cmd = path.."ifdown "..name + local f = io.popen(format.escapespecialcharacters(cmd)) + local cmdresult = f:read("*a") + f:close() + + if cmdresult == "" then + cmdresult = "Interface down" + end + + return cfe({ type="longtext", value=cmdresult, label="ifdown "..name }) +end + restartnetworking = function() return modelfunctions.startstop_service("networking", "restart") end -- cgit v1.2.3