summaryrefslogtreecommitdiffstats
path: root/quagga-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'quagga-model.lua')
-rw-r--r--quagga-model.lua187
1 files changed, 187 insertions, 0 deletions
diff --git a/quagga-model.lua b/quagga-model.lua
new file mode 100644
index 0000000..c9ef9d1
--- /dev/null
+++ b/quagga-model.lua
@@ -0,0 +1,187 @@
+module(..., package.seeall)
+
+require("fs")
+require("procps")
+require("getopts")
+require("format")
+require("daemoncontrol")
+require("validator")
+
+local configfile = "/etc/quagga/bgpd.conf"
+local processname = "bgpd"
+local baseurl = "/etc/quagga/"
+
+local descr = {
+ Type = {
+ ['incomplete']="The protocol address is being resolved",
+ ['negative']="This protocol address is not available",
+ ['cached']="Protocol address was resolved successfully",
+ ['route']="This is a dynamic shortcut",
+ ['dynamic']="This entry is from a node that connected to us",
+ ['local']="Local interface address",
+ ['static']="Static mapping from configuration file (e.g. address of core)",
+ },
+ Flags= {
+-- ['up']="Connection is fully usable",
+ ['lower-up']="ipsec connections is up, but registration is not yet done",
+ },
+}
+
+local function get_version()
+ local cmd_output_result, cmd_output_error
+ local cmd = "/sbin/apk_version -vs " .. processname .." 2>/dev/null"
+ local f = io.popen( cmd )
+ local cmdresult = f:read("*l")
+ if (cmdresult) and (#cmdresult > 0) then
+ cmd_output_result = string.match(cmdresult,"^%S*") or "Unknown"
+ else
+ cmd_output_error = "Program not installed"
+ end
+ f:close()
+ return cmd_output_result,cmd_output_error
+end
+
+local function autostarts()
+ local cmd_output_result, cmd_output_error
+ local cmd = "/sbin/rc_status | egrep '^S' | egrep '" .. processname .."' 2>/dev/null"
+ local f = io.popen( cmd )
+ local cmdresult = f:read("*a")
+ if (cmdresult) and (#cmdresult > 0) then
+ cmd_output_result = "Process will autostart at next boot (at sequence '" .. string.match(cmdresult,"^%a+(%d%d)") .. "')"
+ else
+ cmd_output_error = "Not programmed to autostart"
+ end
+ f:close()
+ return cmd_output_result,cmd_output_error
+end
+
+local function opennhrpctl_show()
+ local cmd_output_result={}
+ local cmd_output_result_table={}
+ local cmd_output_error, opennhrpstatus
+ local cmd = "/usr/sbin/opennhrpctl show 2>/dev/null"
+ local f = io.popen( cmd )
+ for line in f:lines() do
+ if string.find(line, "^Status:") then
+ opennhrpstatus=line
+ else
+ table.insert(cmd_output_result, line)
+ end
+ end
+ f:close()
+ local cnt = 0
+ for k,v in pairs(cmd_output_result) do
+ if string.find(v,"^Interface") then
+ cnt = cnt + 1
+ cmd_output_result_table[cnt] = {}
+ end
+ if ( cnt > 0 ) and (v ~= "") then
+ local k = string.match(v,"^(.-):%s?.*")
+ cmd_output_result_table[cnt][k]=cfe({value=string.match(v,"^.-:%s?(.*)")})
+ local statusdescription = string.lower(string.match(v,"^.-:%s?(.*)"))
+ if (type(descr[k]) == "table") then
+ cmd_output_result_table[cnt][k]['descr']=descr[k][statusdescription]
+ end
+ end
+ end
+
+ local peers_list = {}
+ for k,v in pairs(cmd_output_result_table) do
+ if (v.Interface.value) and not (peers_list[v.Interface.value]) then
+ peers_list[v.Interface.value] = {}
+ end
+ table.insert(peers_list[v.Interface.value], v)
+ end
+
+ return peers_list,opennhrpstatus,cmd_output_error
+end
+
+
+function process_status_text(procname)
+ local t = procps.pidof(procname)
+ if (t) and (#t > 0) then
+ return "Enabled"
+ else
+ return "Disabled"
+ end
+end
+
+-- ################################################################################
+-- PUBLIC FUNCTIONS
+
+function startstop_service ( self, action )
+ local cmd = action.value
+ local cmdresult,cmdmessage,cmderror,cmdaction = daemoncontrol.daemoncontrol(processname, cmd)
+ action.descr=cmdmessage
+ action.errtxt=cmderror
+ -- Reporting back (true|false, the original acition)
+ return cmdresult,action
+end
+
+function getstatus()
+ local status = {}
+ local value, errtxt = get_version()
+ status.version = cfe({ name = "version",
+ label="Program version",
+ value=value,
+ errtxt=errtxt,
+ })
+
+ status.status = cfe({ name="status",
+ label="Program status",
+ value=process_status_text(processname),
+ })
+ local autostart_sequense, autostart_errtxt = autostarts()
+ status.autostart = cfe({ name="autostart",
+ label="Autostart sequence",
+ value=autostart_sequense,
+ errtxt=autostart_errtxt,
+ })
+
+ local opennhrpctl_show, opennhrpctl_status = opennhrpctl_show()
+ status.stats = cfe({ name="stats",
+ label="Programstatus reports",
+ value=opennhrpctl_status,
+ })
+
+ status.show = cfe({ name="show",
+ label="Peers",
+ option=opennhrpctl_show,
+ })
+
+ return status
+end
+
+function get_filedetails()
+ local path = configfile
+ local filedetails = fs.stat(path)
+ local file = {}
+
+ file["filename"] = cfe({
+ name="filename",
+ label="File name",
+ value=path,
+ })
+ file["filesize"] = cfe({
+ name="filesize",
+ label="File size",
+ value=filedetails.size or 0,
+ })
+ file["mtime"] = cfe({
+ name="mtime",
+ label="File date",
+ value=filedetails.mtime or "---",
+ })
+ file["filecontent"] = cfe({
+ type="longtext",
+ name="filecontent",
+ label="File content",
+ value=fs.read_file(path),
+ })
+ return file
+end
+function update_filecontent (self, modifications)
+ local path = configfile
+ local file_result,err = fs.write_file(path, format.dostounix(modifications))
+ return file_result
+end