module(..., package.seeall) -- Load libraries require("modelfunctions") require("format") -- Set variables local path="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin " local configfile = "/etc/quagga/zebra.conf" local processname = "zebra" 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 = path .. "echo -e '" .. format.escapespecialcharacters(configfile.password) .. "\nshow ip route\nquit\n' | nc localhost zebra 2>/dev/null" local f = io.popen( cmd ) local result = f:read("*a") or "" local validoutput 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, "^Password:")) then startout = #output+1 elseif (string.find(line, "^Codes:")) then startout = #output elseif (string.find(line, "> quit")) then stopout = #output-1 end end return table.concat(output,"\n",startout,stopout) end -- ################################################################################ -- PUBLIC FUNCTIONS function startstop_service(action) return modelfunctions.startstop_service(processname, action) end function getstatus() return modelfunctions.getstatus(processname, packagename, "Zebra Status") end function getconfigfile() return modelfunctions.getfiledetails(configfile) end function setconfigfile(filedetails) return modelfunctions.setfiledetails(filedetails, {configfile}) end function getdetails() local status = {} status.showip = cfe({ label="Zebra routes" }) status.showip.value = telnetshowip() return cfe({ type="group", value=status, label="Zebra Details" }) end