X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=applications%2Fluci-app-mwan3%2Fluasrc%2Fcontroller%2Fmwan3.lua;h=18c2135e4385443cf3941572db70dafe09c69bc2;hp=27dc984eb4a7c3ff075c3b44fb9ab47caee58fcc;hb=HEAD;hpb=9dcf73b323fa97534a931e3acfbab8b03ce3961f diff --git a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua index 27dc984eb..18c2135e4 100644 --- a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua +++ b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua @@ -56,7 +56,7 @@ function index() arcombine(cbi("mwan/rule"), cbi("mwan/ruleconfig")), _("Rules"), 40).leaf = true entry({"admin", "network", "mwan", "notify"}, - cbi("mwan/notify"), + form("mwan/notify"), _("Notification"), 50).leaf = true end @@ -85,7 +85,8 @@ function diagnosticsData(interface, task) function getInterfaceNumber(interface) local number = 0 local interfaceNumber - uci.cursor():foreach("mwan3", "interface", + local uci = require "luci.model.uci".cursor() + uci:foreach("mwan3", "interface", function (section) number = number+1 if section[".name"] == interface then @@ -96,9 +97,9 @@ function diagnosticsData(interface, task) return interfaceNumber end - function diag_command(cmd, addr) + function diag_command(cmd, device, addr) if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then - local util = io.popen(cmd % ut.shellquote(addr)) + local util = io.popen(cmd %{ut.shellquote(device), ut.shellquote(addr)}) if util then while true do local ln = util:read("*l") @@ -113,8 +114,14 @@ function diagnosticsData(interface, task) end function get_gateway(inteface) - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - local gateway + local gateway = nil + local dump = nil + + dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) + if not dump then + dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + end + if dump and dump.route then local _, route for _, route in ipairs(dump.route) do @@ -130,7 +137,7 @@ function diagnosticsData(interface, task) local results = "" local number = getInterfaceNumber(interface) - local uci = uci.cursor(nil, "/var/state") + local uci = require "luci.model.uci".cursor(nil, "/var/state") local device = uci:get("network", interface, "ifname") luci.http.prepare_content("text/plain") @@ -138,7 +145,7 @@ function diagnosticsData(interface, task) if task == "ping_gateway" then local gateway = get_gateway(interface) if gateway ~= nil then - diag_command("ping -c 5 -W 1 %s 2>&1", gateway) + diag_command("ping -I %s -c 5 -W 1 %s 2>&1", device, gateway) else luci.http.prepare_content("text/plain") luci.http.write(string.format("No gateway for interface %s found.", interface)) @@ -147,7 +154,7 @@ function diagnosticsData(interface, task) local trackips = uci:get("mwan3", interface, "track_ip") if #trackips > 0 then for i in pairs(trackips) do - diag_command("ping -c 5 -W 1 %s 2>&1", trackips[i]) + diag_command("ping -I %s -c 5 -W 1 %s 2>&1", device, trackips[i]) end else luci.http.write(string.format("No tracking Hosts for interface %s defined.", interface))