diff options
-rw-r--r-- | qos-controller.lua | 8 | ||||
-rw-r--r-- | qos-details-html.lsp | 8 | ||||
-rw-r--r-- | qos-model.lua | 57 | ||||
-rw-r--r-- | qos.roles | 4 |
4 files changed, 43 insertions, 34 deletions
diff --git a/qos-controller.lua b/qos-controller.lua index 703061a..f2c45ae 100644 --- a/qos-controller.lua +++ b/qos-controller.lua @@ -6,7 +6,7 @@ function status(self) return self.model.getstatus() end -function startstop(self) +function startstopinterface(self) return self.handle_form(self, self.model.get_startstop, self.model.startstop_service, self.clientdata) end @@ -15,13 +15,13 @@ function details(self) end function enable(self) - return self:redirect_to_referrer(self.model.enable(self.clientdata.interface)) + return self.handle_form(self, self.model.get_enable, self.model.enable, self.clientdata, "Enable", "Enable QOS on Interface", "Enabled QOS on Interface") end function config(self) - return self.handle_form(self, function() return self.model.get_config(self.clientdata.DEV) end, self.model.update_config, self.clientdata, "Save", "Edit QOS Config", "Configuration Set") + return self.handle_form(self, self.model.get_config, self.model.update_config, self.clientdata, "Save", "Edit QOS Config", "Configuration Set") end function expert(self) - return self.handle_form(self, function() return self.model.get_filedetails(self.clientdata.interface) end, self.model.update_filedetails, self.clientdata, "Save", "Edit QOS Config", "Configuration Set") + return self.handle_form(self, self.model.get_filedetails, self.model.update_filedetails, self.clientdata, "Save", "Edit QOS Config", "Configuration Set") end diff --git a/qos-details-html.lsp b/qos-details-html.lsp index e9b2f01..ba5a631 100644 --- a/qos-details-html.lsp +++ b/qos-details-html.lsp @@ -2,7 +2,7 @@ require("htmlviewfunctions") %> -<% htmlviewfunctions.displaycommandresults({"enable","config","expert","startstop"}, session) %> +<% htmlviewfunctions.displaycommandresults({"enable","config","expert","startstopinterface"}, session) %> <% viewlibrary.dispatch_component("status") %> @@ -19,16 +19,16 @@ require("htmlviewfunctions") <TD style="padding-right:20px;white-space:nowrap;"> <% if intf.enabled then %> <% io.write(html.link{value = "config?DEV="..intf.interface.."&redir="..page_info.orig_action, label="Edit " }) %> - <% io.write(html.link{value = "expert?interface="..intf.interface.."&redir="..page_info.orig_action, label="Expert " }) %> + <% io.write(html.link{value = "expert?filename="..intf.filename.."&redir="..page_info.orig_action, label="Expert " }) %> <% io.write(html.link{value = page_info.script .. "/alpine-baselayout/rc/edit?servicename="..intf.init.."&redir=".. page_info.orig_action, label="Autostart " }) %> <% else %> - <% io.write(html.link{value = "enable?interface="..intf.interface.."&redir="..page_info.orig_action, label="Enable " }) %> + <% io.write(html.link{value = "enable?submit=true&interface="..intf.interface, label="Enable " }) %> <% end %> </TD> <TD style="padding-right:20px;white-space:nowrap;"><%= html.html_escape(intf.interface) %></TD> <TD style="white-space:nowrap;" width="90%"><%= html.html_escape(intf.status) %></TD> <% if intf.enabled then %> - <TD><form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/startstop") %>" method="POST"> + <TD><form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/startstopinterface") %>" method="POST"> <input type="hidden" name="init" value="<%= intf.init %>"> <input class="submit" type="submit" name="submit" value="Start"> <input class="submit" type="submit" name="submit" value="Stop"> diff --git a/qos-model.lua b/qos-model.lua index 029d934..584a3d5 100644 --- a/qos-model.lua +++ b/qos-model.lua @@ -2,6 +2,7 @@ module(..., package.seeall) -- Load libraries require("modelfunctions") +require("processinfo") fs = require("acf.fs") format = require("acf.format") @@ -19,9 +20,9 @@ local ints -- ################################################################################ -- LOCAL FUNCTIONS -local function list_interfaces() +local function list_interfaces(self) if not ints then - local interfacescontroller = APP:new("alpine-baselayout/interfaces") + local interfacescontroller = self:new("alpine-baselayout/interfaces") local interfaces = interfacescontroller.model.get_interfaces() interfacescontroller:destroy() ints = interfaces.value @@ -34,18 +35,18 @@ local function validate_filename(filename) end -- modify /etc/network/interfaces with the up/down lines for ifb device -local function modify_interfaces(DEV, IFB_DEV) +local function modify_interfaces(self, DEV, IFB_DEV) local up = "ip link set ifb%d+ up" local down = "ip link set ifb%d+ down" - local interfacescontroller = APP:new("alpine-baselayout/interfaces") - local interface = interfacescontroller.model.get_iface_by_name(DEV) + local interfacescontroller = self:new("alpine-baselayout/interfaces") + local interface = interfacescontroller.model.get_iface_by_name(interfacescontroller, {name=DEV}) interface.value.up.value = string.gsub(interface.value.up.value, up, "") interface.value.down.value = string.gsub(interface.value.down.value, down, "") if IFB_DEV ~= "" then interface.value.up.value = string.gsub(up, "ifb%%d%+", IFB_DEV) .. "\n" .. interface.value.up.value interface.value.down.value = string.gsub(down, "ifb%%d%+", IFB_DEV) .. "\n" .. interface.value.down.value end - interfacescontroller.model.update_iface(interface) + interfacescontroller.model.update_iface(interfacescontroller, interface) interfacescontroller:destroy() end @@ -53,7 +54,7 @@ end -- PUBLIC FUNCTIONS function get_startstop(self, clientdata) - return modelfunctions.get_startstop(processname) + return modelfunctions.get_startstop(clientdata.init) end function startstop_service(self, startstop, action) @@ -72,12 +73,12 @@ function getstatus() return cfe({ type="group", value=status, label="QOS Status" }) end -function listinterfacedetails() +function listinterfacedetails(self) local result = {} local interface - for i,int in ipairs(list_interfaces()) do + for i,int in ipairs(list_interfaces(self)) do if interface ~= int then - local temp = {interface=int, init=initscript.."."..int, enabled=true} + local temp = {interface=int, init=initscript.."."..int, filename=conffile.."."..int, enabled=true} local status = modelfunctions.getenabled(temp.init) temp.status = status.value if status.errtxt then @@ -90,13 +91,20 @@ function listinterfacedetails() return cfe({ type="structure", value=result, label="QOS Interface List" }) end -function enable(interface) - local retval = cfe({ label="Enable QOS Result" }) +function get_enable(self, clientdata) + local retval = {} + retval.interface = cfe({ value=clientdata.interface or "", label="Interface" }) + return cfe({ type="group", value=retval, label="Enable QOS on Interface" }) +end + +function enable(self, int_enable) + local interface = int_enable.value.interface.value local init = initfile.."."..interface + int_enable.errtxt = "Failed to enable QOS" if not posix.stat(initfile) then - retval.errtxt = initfile.." does not exist" + int_enable.value.interface.errtxt = initfile.." does not exist" elseif posix.stat(init) then - retval.errtxt = init.." already exists" + int_enable.value.interface.errtxt = init.." already exists" else posix.link(initfile, init, true) local conf = string.gsub(init, "init%.d", "conf.d") @@ -109,25 +117,26 @@ function enable(interface) fs.write_file(conf, filecontent) end local IFB_DEV = format.parse_ini_file(fs.read_file(conf) or "", "", "IFB_DEV") or "" - modify_interfaces(interface, IFB_DEV) - retval.value = "Enabled QOS on Interface" + modify_interfaces(self, interface, IFB_DEV) + int_enable.errtxt = nil end - return retval + return int_enable end -function get_filedetails(interface) - return modelfunctions.getfiledetails(conffile.."."..interface, validate_filename) +function get_filedetails(self, clientdata) + return modelfunctions.getfiledetails(clientdata.filename, validate_filename) end function update_filedetails(self, filedetails) return modelfunctions.setfiledetails(self, filedetails, validate_filename) end -function get_config(interface) +function get_config(self, clientdata) + local interface = clientdata.DEV local config = {} local ifbs = {""} if not string.find(interface, "^ifb") then - for i,int in ipairs(list_interfaces()) do + for i,int in ipairs(list_interfaces(self)) do if string.find(int, "^ifb") then ifbs[#ifbs+1] = int end @@ -144,7 +153,7 @@ function get_config(interface) config.EGRESS_RATE = cfe({ value=configopts.EGRESS_RATE or "", label="Egress rate", descr="(units: mbps, mbit, kbit, kbps, bps)"}) config.DEV.errtxt = "Invalid device" - for i,int in ipairs(list_interfaces()) do + for i,int in ipairs(list_interfaces(self)) do if int == interface then config.DEV.errtxt = nil break @@ -157,7 +166,7 @@ end function update_config(self, config) local success = false config.value.DEV.errtxt = "Invalid device" - for i,int in ipairs(list_interfaces()) do + for i,int in ipairs(list_interfaces(self)) do if int == config.value.DEV.value then config.value.DEV.errtxt = nil success = true @@ -213,7 +222,7 @@ function update_config(self, config) fs.write_file(configfile, contents) -- need to set lines in /etc/network/interfaces - modify_interfaces(config.value.DEV.value, config.value.IFB_DEV.value) + modify_interfaces(self, config.value.DEV.value, config.value.IFB_DEV.value) else config.errtxt = "Failed to set config" end @@ -1,3 +1,3 @@ -USER=qos:status,qos:details,qos:startstop,qos:config +USER=qos:status,qos:details,qos:startstopinterface,qos:config EXPERT=qos:enable,qos:expert -ADMIN=qos:status,qos:details,qos:startstop,qos:config,qos:enable,qos:expert +ADMIN=qos:status,qos:details,qos:startstopinterface,qos:config,qos:enable,qos:expert |