Merge pull request #1703 from dibdot/travelmate
[project/luci.git] / applications / luci-app-mwan3 / luasrc / model / cbi / mwan / interface.lua
index 95af9bb..14bf138 100644 (file)
@@ -1,41 +1,44 @@
+-- Copyright 2014 Aedan Renner <chipdankly@gmail.com
+-- Copyright 2018 Florian Eckert <fe@dev.tdt.de>
+-- Licensed to the public under the GNU General Public License v2.
+
 dsp = require "luci.dispatcher"
-sys = require "luci.sys"
-ut = require "luci.util"
+
 
 function interfaceWarnings(overview, count)
        local warnings = ""
        if count <= 250 then
-               warnings = string.format("<strong>%s</strong></br>",
+               warnings = string.format("<strong>%s</strong><br />",
                        translatef("There are currently %d of 250 supported interfaces configured", count)
                        )
        else
-               warnings = string.format("<strong>%s</strong></br>",
+               warnings = string.format("<strong>%s</strong><br />",
                        translatef("WARNING: %d interfaces are configured exceeding the maximum of 250!", count)
                        )
        end
 
        for i, k in pairs(overview) do
                if overview[i]["network"] == false then
-                       warnings = warnings .. string.format("<strong>%s</strong></br>",
+                       warnings = warnings .. string.format("<strong>%s</strong><br />",
                                        translatef("WARNING: Interface %s are not found in /etc/config/network", i)
                                        )
                end
 
                if overview[i]["default_route"] == false then
-                       warnings = warnings .. string.format("<strong>%s</strong></br>",
+                       warnings = warnings .. string.format("<strong>%s</strong><br />",
                                translatef("WARNING: Interface %s has no default route in the main routing table", i)
                                )
                end
 
                if overview[i]["reliability"] == false then
-                       warnings = warnings .. string.format("<strong>%s</strong></br>",
+                       warnings = warnings .. string.format("<strong>%s</strong><br />",
                                translatef("WARNING: Interface %s has a higher reliability " ..
                                "requirement than tracking hosts (%d)", i, overview[i]["tracking"])
                                )
                end
 
                if overview[i]["duplicate_metric"] == true then
-                       warnings = warnings .. string.format("<strong>%s</strong></br>",
+                       warnings = warnings .. string.format("<strong>%s</strong><br />",
                                translatef("WARNING: Interface %s has a duplicate metric %s configured", i, overview[i]["metric"])
                                )
                end
@@ -78,7 +81,7 @@ function configCheck()
 
                                local dump = require("luci.util").ubus("network.interface.%s" % iface, "status", {})
                                overview[iface]["default_route"] = false
-                               if dump then
+                               if dump and dump.route then
                                        local _, route
                                        for _, route in ipairs(dump.route) do
                                                if dump.route[_].target == "0.0.0.0" then
@@ -90,7 +93,7 @@ function configCheck()
 
                        local trackingNumber = uci:get("mwan3", iface, "track_ip")
                        overview[iface]["tracking"] = 0
-                       if #trackingNumber > 0 then
+                       if trackingNumber and #trackingNumber > 0 then
                                overview[iface]["tracking"] = #trackingNumber
                                overview[iface]["reliability"] = false
                                local reliabilityNumber = tonumber(uci:get("mwan3", iface, "reliability"))
@@ -105,8 +108,6 @@ end
 
 m5 = Map("mwan3", translate("MWAN - Interfaces"),
        interfaceWarnings(configCheck()))
-       m5:append(Template("mwan/config_css"))
-
 
 mwan_interface = m5:section(TypedSection, "interface", nil,
        translate("MWAN supports up to 250 physical and/or logical interfaces<br />" ..
@@ -114,133 +115,98 @@ mwan_interface = m5:section(TypedSection, "interface", nil,
        "Names must match the interface name found in /etc/config/network (see advanced tab)<br />" ..
        "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" ..
        "Interfaces may not share the same name as configured members, policies or rules"))
-       mwan_interface.addremove = true
-       mwan_interface.dynamic = false
-       mwan_interface.sectionhead = translate("Interface")
-       mwan_interface.sortable = false
-       mwan_interface.template = "cbi/tblsection"
-       mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "interface", "%s")
-       function mwan_interface.create(self, section)
-               TypedSection.create(self, section)
-               m5.uci:save("mwan3")
-               luci.http.redirect(dsp.build_url("admin", "network", "mwan", "interface", section))
-       end
-
+mwan_interface.addremove = true
+mwan_interface.dynamic = false
+mwan_interface.sectionhead = translate("Interface")
+mwan_interface.sortable = false
+mwan_interface.template = "cbi/tblsection"
+mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "interface", "%s")
+function mwan_interface.create(self, section)
+       TypedSection.create(self, section)
+       m5.uci:save("mwan3")
+       luci.http.redirect(dsp.build_url("admin", "network", "mwan", "interface", section))
+end
 
 enabled = mwan_interface:option(DummyValue, "enabled", translate("Enabled"))
-       enabled.rawhtml = true
-       function enabled.cfgvalue(self, s)
-               if self.map:get(s, "enabled") == "1" then
-                       return "Yes"
-               else
-                       return "No"
-               end
-       end
-
-track_ip = mwan_interface:option(DummyValue, "track_ip", translate("Tracking IP"))
-       track_ip.rawhtml = true
-       function track_ip.cfgvalue(self, s)
-               tracked = self.map:get(s, "track_ip")
-               if tracked then
-                       local ipList = ""
-                       for k,v in pairs(tracked) do
-                               ipList = ipList .. v .. "<br />"
-                       end
-                       return ipList
-               else
-                       return "&#8212;"
-               end
+enabled.rawhtml = true
+function enabled.cfgvalue(self, s)
+       if self.map:get(s, "enabled") == "1" then
+               return translate("Yes")
+       else
+               return translate("No")
        end
+end
 
 track_method = mwan_interface:option(DummyValue, "track_method", translate("Tracking method"))
-       track_method.rawhtml = true
-       function track_method.cfgvalue(self, s)
-               if tracked then
-                       return self.map:get(s, "track_method") or "&#8212;"
-               else
-                       return "&#8212;"
-               end
+track_method.rawhtml = true
+function track_method.cfgvalue(self, s)
+       local tracked = self.map:get(s, "track_ip")
+       if tracked then
+               return self.map:get(s, "track_method") or "&#8212;"
+       else
+               return "&#8212;"
        end
+end
 
 reliability = mwan_interface:option(DummyValue, "reliability", translate("Tracking reliability"))
-       reliability.rawhtml = true
-       function reliability.cfgvalue(self, s)
-               if tracked then
-                       return self.map:get(s, "reliability") or "&#8212;"
-               else
-                       return "&#8212;"
-               end
-       end
-
-count = mwan_interface:option(DummyValue, "count", translate("Ping count"))
-       count.rawhtml = true
-       function count.cfgvalue(self, s)
-               if tracked then
-                       return self.map:get(s, "count") or "&#8212;"
-               else
-                       return "&#8212;"
-               end
-       end
-
-timeout = mwan_interface:option(DummyValue, "timeout", translate("Ping timeout"))
-       timeout.rawhtml = true
-       function timeout.cfgvalue(self, s)
-               if tracked then
-                       local timeoutValue = self.map:get(s, "timeout")
-                       if timeoutValue then
-                               return timeoutValue .. "s"
-                       else
-                               return "&#8212;"
-                       end
-               else
-                       return "&#8212;"
-               end
+reliability.rawhtml = true
+function reliability.cfgvalue(self, s)
+       local tracked = self.map:get(s, "track_ip")
+       if tracked then
+               return self.map:get(s, "reliability") or "&#8212;"
+       else
+               return "&#8212;"
        end
+end
 
 interval = mwan_interface:option(DummyValue, "interval", translate("Ping interval"))
-       interval.rawhtml = true
-       function interval.cfgvalue(self, s)
-               if tracked then
-                       local intervalValue = self.map:get(s, "interval")
-                       if intervalValue then
-                               return intervalValue .. "s"
-                       else
-                               return "&#8212;"
-                       end
+interval.rawhtml = true
+function interval.cfgvalue(self, s)
+       local tracked = self.map:get(s, "track_ip")
+       if tracked then
+               local intervalValue = self.map:get(s, "interval")
+               if intervalValue then
+                       return intervalValue .. "s"
                else
                        return "&#8212;"
                end
+       else
+               return "&#8212;"
        end
+end
 
 down = mwan_interface:option(DummyValue, "down", translate("Interface down"))
-       down.rawhtml = true
-       function down.cfgvalue(self, s)
-               if tracked then
-                       return self.map:get(s, "down") or "&#8212;"
-               else
-                       return "&#8212;"
-               end
+down.rawhtml = true
+function down.cfgvalue(self, s)
+       local tracked = self.map:get(s, "track_ip")
+       if tracked then
+               return self.map:get(s, "down") or "&#8212;"
+       else
+               return "&#8212;"
        end
+end
 
 up = mwan_interface:option(DummyValue, "up", translate("Interface up"))
-       up.rawhtml = true
-       function up.cfgvalue(self, s)
-               if tracked then
-                       return self.map:get(s, "up") or "&#8212;"
-               else
-                       return "&#8212;"
-               end
+up.rawhtml = true
+function up.cfgvalue(self, s)
+       local tracked = self.map:get(s, "track_ip")
+       if tracked then
+               return self.map:get(s, "up") or "&#8212;"
+       else
+               return "&#8212;"
        end
+end
 
 metric = mwan_interface:option(DummyValue, "metric", translate("Metric"))
-       metric.rawhtml = true
-       function metric.cfgvalue(self, s)
-               local metricValue = sys.exec("uci -p /var/state get network." .. s .. ".metric")
-               if metricValue ~= "" then
-                       return metricValue
-               else
-                       return "&#8212;"
-               end
+metric.rawhtml = true
+function metric.cfgvalue(self, s)
+       local uci = uci.cursor(nil, "/var/state")
+       local metric = uci:get("network", s, "metric")
+       if metric then
+               return metric
+       else
+               return "&#8212;"
        end
+end
 
 return m5