local mymodule = {} -- Load libraries modelfunctions = require("modelfunctions") format = require("acf.format") -- Set variables local path="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin " local configfile = "/etc/quagga/ospfd.conf" local processname = "ospfd" local packagename = "quagga" -- ################################################################################ -- LOCAL FUNCTIONS local function parseconfigfile() local conf = {} local f = io.open(configfile, "r") local line, key, _, k, v if not f then return nil end for line in f:lines() do line = string.gsub(line, "%s*#.*", "") local k,v = string.match(line, "^%s*(%S*)%s+(.*)") if k then conf[k] = v end end f:close() return conf end local function telnetshowip() local output = {} local configfile = parseconfigfile() or {} local cmd = (configfile.password or "") .. "\nshow ip ospf route\nquit\n" local result, errtxt = modelfunctions.run_executable({"nc", "localhost", "ospfd"}, false, cmd) if result == "" then result = "Failed to find routes" end local startout, stopout for line in string.gmatch(result, "([^\n]*)\n?") do table.insert(output,line) if (string.find(line, "show ip ospf route")) then startout = #output+1 elseif (string.find(line, "> quit")) then stopout = #output-1 end end return table.concat(output,"\n",startout,stopout) end -- ################################################################################ -- PUBLIC FUNCTIONS function mymodule.get_startstop(self, clientdata) return modelfunctions.get_startstop(processname) end function mymodule.startstop_service(self, startstop, action) return modelfunctions.startstop_service(startstop, action) end function mymodule.getstatus() return modelfunctions.getstatus(processname, packagename, "OSPF Status") end function mymodule.getconfigfile() return modelfunctions.getfiledetails(configfile) end function mymodule.setconfigfile(self, filedetails) return modelfunctions.setfiledetails(self, filedetails, {configfile}) end function mymodule.getdetails() local status = {} status.showip = cfe({ label="OSPF routes" }) status.showip.value = telnetshowip() return cfe({ type="group", value=status, label="OSPF Details" }) end return mymodule