summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorttrask <ttrask@ab2d0c66-481e-0410-8bed-d214d4d58bed>2009-03-12 15:26:41 +0000
committerttrask <ttrask@ab2d0c66-481e-0410-8bed-d214d4d58bed>2009-03-12 15:26:41 +0000
commitb4f9cfd3d76c66b657779778bcdc46966126ebd7 (patch)
treea75ae3f48b03210c3b05336022305d80d0ebf218
parent6ef84b2e00d2bedb221e133794a3a2c04e385c7d (diff)
downloadacf-alpine-baselayout-b4f9cfd3d76c66b657779778bcdc46966126ebd7.tar.bz2
acf-alpine-baselayout-b4f9cfd3d76c66b657779778bcdc46966126ebd7.tar.xz
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
-rw-r--r--interfaces-model.lua152
1 files 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