diff options
author | Florian Eckert <fe@dev.tdt.de> | 2021-07-02 15:23:39 +0200 |
---|---|---|
committer | Florian Eckert <fe@dev.tdt.de> | 2021-07-09 08:38:11 +0200 |
commit | f5f6b3e4f8e3faed4e9c9926e283c9cf226d4bd8 (patch) | |
tree | e2718f194ede046a90274443f6b61198f35a0961 /applications/luci-app-mwan3/luasrc/model/cbi | |
parent | 12067c8308936abb567001650105b33bec9a56a9 (diff) |
luci-app-mwan3: convert to JS
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Diffstat (limited to 'applications/luci-app-mwan3/luasrc/model/cbi')
10 files changed, 0 insertions, 987 deletions
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua deleted file mode 100644 index ec4085eb4b..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Copyright 2017 Florian Eckert <fe@dev.tdt.de> --- Licensed to the public under the GNU General Public License v2. - -local net = require "luci.model.network".init() - -local s, m, o - -m = Map("mwan3", translate("MWAN - Globals")) - -s = m:section(NamedSection, "globals", "globals", nil) - -o = s:option(Value, "mmx_mask", - translate("Firewall mask"), - translate("Enter value in hex, starting with <code>0x</code>")) -o.datatype = "hex(4)" -o.default = "0x3F00" - -o = s:option(Flag, "logging", - translate("Logging"), - translate("Enables global firewall logging")) - -o = s:option(ListValue, "loglevel", - translate("Loglevel"), - translate("Firewall loglevel")) -o.default = "notice" -o:value("emerg", translate("Emergency")) -o:value("alert", translate("Alert")) -o:value("crit", translate("Critical")) -o:value("error", translate("Error")) -o:value("warning", translate("Warning")) -o:value("notice", translate("Notice")) -o:value("info", translate("Info")) -o:value("debug", translate("Debug")) -o:depends("logging", "1") - -o = s:option(DynamicList, "rt_table_lookup", - translate("Routing table lookup"), - translate("Also scan this Routing table for connected networks")) -o.datatype = "integer" -o:value("220", translatef("Routing table %d", 220)) - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua deleted file mode 100644 index 6e34311d06..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua +++ /dev/null @@ -1,241 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" -local uci = require "uci" - -local m, mwan_interface, enabled, track_method, reliability, interval -local down, up, metric - -function interfaceWarnings(overview, count, iface_max) - local warnings = "" - if count <= iface_max then - warnings = string.format("<strong>%s</strong><br />", - translatef("There are currently %d of %d supported interfaces configured", count, iface_max) - ) - else - warnings = string.format("<strong>%s</strong><br />", - translatef("WARNING: %d interfaces are configured exceeding the maximum of %d!", count, iface_max) - ) - end - - for i, k in pairs(overview) do - if overview[i]["network"] == false then - 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 />", - 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 />", - 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 />", - translatef("WARNING: Interface %s has a duplicate metric %s configured", i, overview[i]["metric"]) - ) - end - end - - return warnings -end - -function configCheck() - local overview = {} - local count = 0 - local duplicate_metric = {} - uci.cursor():foreach("mwan3", "interface", - function (section) - local uci = uci.cursor(nil, "/var/state") - local iface = section[".name"] - overview[iface] = {} - count = count + 1 - local network = uci:get("network", iface) - overview[iface]["network"] = false - if network ~= nil then - overview[iface]["network"] = true - - local device = uci:get("network", iface, "ifname") - if device ~= nil then - overview[iface]["device"] = device - end - - local metric = uci:get("network", iface, "metric") - if metric ~= nil then - overview[iface]["metric"] = metric - overview[iface]["duplicate_metric"] = false - for _, m in ipairs(duplicate_metric) do - if m == metric then - overview[iface]["duplicate_metric"] = true - end - end - table.insert(duplicate_metric, metric) - end - - local dump = require("luci.util").ubus("network.interface.%s" % iface, "status", {}) - overview[iface]["default_route"] = false - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "0.0.0.0" then - overview[iface]["default_route"] = true - end - end - end - end - - local trackingNumber = uci:get("mwan3", iface, "track_ip") - overview[iface]["tracking"] = 0 - if trackingNumber and #trackingNumber > 0 then - overview[iface]["tracking"] = #trackingNumber - overview[iface]["reliability"] = false - local reliabilityNumber = tonumber(uci:get("mwan3", iface, "reliability") or "1") - if reliabilityNumber and reliabilityNumber <= #trackingNumber then - overview[iface]["reliability"] = true - end - end - end - ) - - -- calculate iface_max usage from firewall mmx_mask - function bit(p) - return 2 ^ (p - 1) - end - function hasbit(x, p) - return x % (p + p) >= p - end - function setbit(x, p) - return hasbit(x, p) and x or x + p - end - - local uci = require("uci").cursor(nil, "/var/state") - local mmx_mask = uci:get("mwan3", "globals", "mmx_mask") or "0x3F00" - local number = tonumber(mmx_mask, 16) - local bits = 0 - local iface_max = 0 - for i=1,16 do - if hasbit(number, bit(i)) then - bits = bits + 1 - iface_max = setbit( iface_max, bit(bits)) - end - end - - -- subtract blackhole, unreachable and default table from iface_max - iface_max = iface_max - 3 - - return overview, count, iface_max -end - -m = Map("mwan3", translate("MWAN - Interfaces"), - interfaceWarnings(configCheck())) - -mwan_interface = m:section(TypedSection, "interface", nil, - translate("mwan3 requires that all interfaces have a unique metric configured in /etc/config/network<br />" .. - "Names must match the interface name found in /etc/config/network<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) - m.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 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) - local tracked = self.map:get(s, "track_ip") - if tracked then - return self.map:get(s, "track_method") or "ping" - else - return "—" - end -end - -reliability = mwan_interface:option(DummyValue, "reliability", translate("Tracking reliability")) -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 "1" - else - return "—" - end -end - -interval = mwan_interface:option(DummyValue, "interval", translate("Ping interval")) -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 "5s" - end - else - return "—" - end -end - -down = mwan_interface:option(DummyValue, "down", translate("Interface down")) -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 "3" - else - return "—" - end -end - -up = mwan_interface:option(DummyValue, "up", translate("Interface up")) -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 "3" - else - return "—" - end -end - -metric = mwan_interface:option(DummyValue, "metric", translate("Metric")) -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 "—" - end -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua deleted file mode 100644 index ea07bd4f12..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua +++ /dev/null @@ -1,262 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" - -local m, mwan_interface, enabled, initial_state, family, track_ip -local track_method, reliability, count, size, max_ttl -local check_quality, failure_latency, failure_loss, recovery_latency -local recovery_loss, timeout, interval, failure -local keep_failure, recovery, down, up, flush, metric -local httping_ssl - -arg[1] = arg[1] or "" - -m = Map("mwan3", translatef("MWAN Interface Configuration - %s", arg[1])) -m.redirect = dsp.build_url("admin", "network", "mwan", "interface") - -mwan_interface = m:section(NamedSection, arg[1], "interface", "") -mwan_interface.addremove = false -mwan_interface.dynamic = false - -enabled = mwan_interface:option(Flag, "enabled", translate("Enabled")) -enabled.default = false - -initial_state = mwan_interface:option(ListValue, "initial_state", translate("Initial state"), - translate("Expect interface state on up event")) -initial_state.default = "online" -initial_state:value("online", translate("Online")) -initial_state:value("offline", translate("Offline")) - -family = mwan_interface:option(ListValue, "family", translate("Internet Protocol")) -family.default = "ipv4" -family:value("ipv4", translate("IPv4")) -family:value("ipv6", translate("IPv6")) - -track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking hostname or IP address"), - translate("This hostname or IP address will be pinged to determine if the link is up or down. Leave blank to assume interface is always online")) -track_ip.datatype = "host" - -track_method = mwan_interface:option(ListValue, "track_method", translate("Tracking method")) -track_method.default = "ping" -track_method:value("ping") -if os.execute("command -v nping 1>/dev/null") == 0 then - track_method:value("nping-tcp") - track_method:value("nping-udp") - track_method:value("nping-icmp") - track_method:value("nping-arp") -end - -if os.execute("command -v arping 1>/dev/null") == 0 then - track_method:value("arping") -end - -if os.execute("command -v httping 1>/dev/null") == 0 then - track_method:value("httping") -end - -httping_ssl = mwan_interface:option(Flag, "httping_ssl", translate("Enable ssl tracking"), - translate("Enables https tracking on ssl port 443")) -httping_ssl:depends("track_method", "httping") -httping_ssl.rmempty = false -httping_ssl.default = httping_ssl.enabled - -reliability = mwan_interface:option(Value, "reliability", translate("Tracking reliability"), - translate("Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up")) -reliability.datatype = "range(1, 100)" -reliability.default = "1" - -count = mwan_interface:option(ListValue, "count", translate("Ping count")) -count.default = "1" -count:value("1") -count:value("2") -count:value("3") -count:value("4") -count:value("5") - -size = mwan_interface:option(Value, "size", translate("Ping size")) -size.default = "56" -size:depends("track_method", "ping") -size:value("8") -size:value("24") -size:value("56") -size:value("120") -size:value("248") -size:value("504") -size:value("1016") -size:value("1472") -size:value("2040") -size.datatype = "range(1, 65507)" - -max_ttl = mwan_interface:option(Value, "max_ttl", translate("Max TTL")) -max_ttl.default = "60" -max_ttl:depends("track_method", "ping") -max_ttl:value("10") -max_ttl:value("20") -max_ttl:value("30") -max_ttl:value("40") -max_ttl:value("50") -max_ttl:value("60") -max_ttl:value("70") -max_ttl.datatype = "range(1, 255)" - -check_quality = mwan_interface:option(Flag, "check_quality", translate("Check link quality")) -check_quality:depends("track_method", "ping") -check_quality.default = false - -failure_latency = mwan_interface:option(Value, "failure_latency", translate("Failure latency [ms]")) -failure_latency:depends("check_quality", 1) -failure_latency.default = "1000" -failure_latency:value("25") -failure_latency:value("50") -failure_latency:value("75") -failure_latency:value("100") -failure_latency:value("150") -failure_latency:value("200") -failure_latency:value("250") -failure_latency:value("300") - -failure_loss = mwan_interface:option(Value, "failure_loss", translate("Failure packet loss [%]")) -failure_loss:depends("check_quality", 1) -failure_loss.default = "40" -failure_loss:value("2") -failure_loss:value("5") -failure_loss:value("10") -failure_loss:value("20") -failure_loss:value("25") - -recovery_latency = mwan_interface:option(Value, "recovery_latency", translate("Recovery latency [ms]")) -recovery_latency:depends("check_quality", 1) -recovery_latency.default = "500" -recovery_latency:value("25") -recovery_latency:value("50") -recovery_latency:value("75") -recovery_latency:value("100") -recovery_latency:value("150") -recovery_latency:value("200") -recovery_latency:value("250") -recovery_latency:value("300") - -recovery_loss = mwan_interface:option(Value, "recovery_loss", translate("Recovery packet loss [%]")) -recovery_loss:depends("check_quality", 1) -recovery_loss.default = "10" -recovery_loss:value("2") -recovery_loss:value("5") -recovery_loss:value("10") -recovery_loss:value("20") -recovery_loss:value("25") - -timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout")) -timeout.default = "4" -timeout:value("1", translatef("%d second", 1)) -timeout:value("2", translatef("%d seconds", 2)) -timeout:value("3", translatef("%d seconds", 3)) -timeout:value("4", translatef("%d seconds", 4)) -timeout:value("5", translatef("%d seconds", 5)) -timeout:value("6", translatef("%d seconds", 6)) -timeout:value("7", translatef("%d seconds", 7)) -timeout:value("8", translatef("%d seconds", 8)) -timeout:value("9", translatef("%d seconds", 9)) -timeout:value("10", translatef("%d seconds", 10)) - -interval = mwan_interface:option(ListValue, "interval", translate("Ping interval")) -interval.default = "10" -interval:value("1", translatef("%d second", 1)) -interval:value("3", translatef("%d seconds", 3)) -interval:value("5", translatef("%d seconds", 5)) -interval:value("10", translatef("%d seconds", 10)) -interval:value("20", translatef("%d seconds", 20)) -interval:value("30", translatef("%d seconds", 30)) -interval:value("60", translatef("%d minute", 1)) -interval:value("300", translatef("%d minutes", 5)) -interval:value("600", translatef("%d minutes", 10)) -interval:value("900", translatef("%d minutes", 15)) -interval:value("1800", translatef("%d minutes", 30)) -interval:value("3600", translatef("%d hour", 1)) - -failure = mwan_interface:option(Value, "failure_interval", translate("Failure interval"), - translate("Ping interval during failure detection")) -failure.default = "5" -failure:value("1", translatef("%d second", 1)) -failure:value("3", translatef("%d seconds", 3)) -failure:value("5", translatef("%d seconds", 5)) -failure:value("10", translatef("%d seconds", 10)) -failure:value("20", translatef("%d seconds", 20)) -failure:value("30", translatef("%d seconds", 30)) -failure:value("60", translatef("%d minute", 1)) -failure:value("300", translatef("%d minutes", 5)) -failure:value("600", translatef("%d minutes", 10)) -failure:value("900", translatef("%d minutes", 15)) -failure:value("1800", translatef("%d minutes", 30)) -failure:value("3600", translatef("%d hour", 1)) - -keep_failure = mwan_interface:option(Flag, "keep_failure_interval", translate("Keep failure interval"), - translate("Keep ping failure interval during failure state")) -keep_failure.default = keep_failure.disabled - -recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"), - translate("Ping interval during failure recovering")) -recovery.default = "5" -recovery:value("1", translatef("%d second", 1)) -recovery:value("3", translatef("%d seconds", 3)) -recovery:value("5", translatef("%d seconds", 5)) -recovery:value("10", translatef("%d seconds", 10)) -recovery:value("20", translatef("%d seconds", 20)) -recovery:value("30", translatef("%d seconds", 30)) -recovery:value("60", translatef("%d minute", 1)) -recovery:value("300", translatef("%d minutes", 5)) -recovery:value("600", translatef("%d minutes", 10)) -recovery:value("900", translatef("%d minutes", 15)) -recovery:value("1800", translatef("%d minutes", 30)) -recovery:value("3600", translatef("%d hour", 1)) - -down = mwan_interface:option(ListValue, "down", translate("Interface down"), - translate("Interface will be deemed down after this many failed ping tests")) -down.default = "5" -down:value("1") -down:value("2") -down:value("3") -down:value("4") -down:value("5") -down:value("6") -down:value("7") -down:value("8") -down:value("9") -down:value("10") - -up = mwan_interface:option(ListValue, "up", translate("Interface up"), - translate("Downed interface will be deemed up after this many successful ping tests")) -up.default = "5" -up:value("1") -up:value("2") -up:value("3") -up:value("4") -up:value("5") -up:value("6") -up:value("7") -up:value("8") -up:value("9") -up:value("10") - -flush = mwan_interface:option(StaticList, "flush_conntrack", translate("Flush conntrack table"), - translate("Flush global firewall conntrack table on interface events")) -flush:value("ifup", translate("ifup (netifd)")) -flush:value("ifdown", translate("ifdown (netifd)")) -flush:value("connected", translate("connected (mwan3)")) -flush:value("disconnected", translate("disconnected (mwan3)")) - -metric = mwan_interface:option(DummyValue, "metric", translate("Metric"), - translate("This displays the metric assigned to this interface in /etc/config/network")) -metric.rawhtml = true -function metric.cfgvalue(self, s) - local uci = require "luci.model.uci".cursor(nil, "/var/state") - local metric = uci:get("network", arg[1], "metric") - if metric then - return metric - else - return "—" - end -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua deleted file mode 100644 index 5c3d0c1524..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua +++ /dev/null @@ -1,45 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" - -local m, s, o - -m = Map("mwan3", translate("MWAN - Members")) - -s = m:section(TypedSection, "member", nil, - translate("Members are profiles attaching a metric and weight to an MWAN interface<br />" .. - "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. - "Members may not share the same name as configured interfaces, policies or rules")) -s.addremove = true -s.dynamic = false -s.sectionhead = translate("Member") -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = dsp.build_url("admin", "network", "mwan", "member", "%s") -function s.create(self, section) - TypedSection.create(self, section) - m.uci:save("mwan3") - luci.http.redirect(dsp.build_url("admin", "network", "mwan", "member", section)) -end - -o = s:option(DummyValue, "interface", translate("Interface")) -o.rawhtml = true -function o.cfgvalue(self, s) - return self.map:get(s, "interface") or "—" -end - -o = s:option(DummyValue, "metric", translate("Metric")) -o.rawhtml = true -function o.cfgvalue(self, s) - return self.map:get(s, "metric") or "1" -end - -o = s:option(DummyValue, "weight", translate("Weight")) -o.rawhtml = true -function o.cfgvalue(self, s) - return self.map:get(s, "weight") or "1" -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua deleted file mode 100644 index 3464ebfc92..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua +++ /dev/null @@ -1,33 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" - -local m, mwan_member, interface, metric, weight - -arg[1] = arg[1] or "" - -m = Map("mwan3", translatef("MWAN Member Configuration - %s", arg[1])) -m.redirect = dsp.build_url("admin", "network", "mwan", "member") - -mwan_member = m:section(NamedSection, arg[1], "member", "") -mwan_member.addremove = false -mwan_member.dynamic = false - -interface = mwan_member:option(Value, "interface", translate("Interface")) -m.uci:foreach("mwan3", "interface", - function(s) - interface:value(s['.name'], s['.name']) - end -) - -metric = mwan_member:option(Value, "metric", translate("Metric"), - translate("Acceptable values: 1-256. Defaults to 1 if not set")) -metric.datatype = "range(1, 256)" - -weight = mwan_member:option(Value, "weight", translate("Weight"), - translate("Acceptable values: 1-1000. Defaults to 1 if not set")) -weight.datatype = "range(1, 1000)" - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/notify.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/notify.lua deleted file mode 100644 index ff1d338eee..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/notify.lua +++ /dev/null @@ -1,46 +0,0 @@ --- 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. - -local fs = require "nixio.fs" -local ut = require "luci.util" -local script = "/etc/mwan3.user" - -local m, f, t - -m = SimpleForm("luci", translate("MWAN - Notification")) - -f = m:section(SimpleSection, nil, - translate("This section allows you to modify the content of \"/etc/mwan3.user\".<br />" .. - "The file is also preserved during sysupgrade.<br />" .. - "<br />" .. - "Notes:<br />" .. - "This file is interpreted as a shell script.<br />" .. - "The first line of the script must be "#!/bin/sh" without quotes.<br />" .. - "Lines beginning with # are comments and are not executed.<br />" .. - "Put your custom mwan3 action here, they will<br />" .. - "be executed with each netifd hotplug interface event<br />" .. - "on interfaces for which mwan3 is enabled.<br />" .. - "<br />" .. - "There are three main environment variables that are passed to this script.<br />" .. - "<br />" .. - "$ACTION <br />" .. - "* \"ifup\" Is called by netifd and mwan3track <br />" .. - "* \"ifdown\" Is called by netifd and mwan3track <br />" .. - "* \"connected\" Is only called by mwan3track if tracking was successful <br />" .. - "* \"disconnected\" Is only called by mwan3track if tracking has failed <br />" .. - "$INTERFACE Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")<br />" .. - "$DEVICE Physical device name which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br />" .. - "<br />")) - -t = f:option(TextValue, "lines") -t.rmempty = true -t.rows = 20 -function t.cfgvalue() - return fs.readfile(script) -end -function t.write(self, section, data) - return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n") -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua deleted file mode 100644 index 48a4dcce38..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua +++ /dev/null @@ -1,92 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" -local uci = require "uci" - -local m, s, o - -function policyCheck() - local policy_error = {} - - uci.cursor():foreach("mwan3", "policy", - function (section) - policy_error[section[".name"]] = false - if string.len(section[".name"]) > 15 then - policy_error[section[".name"]] = true - end - end - ) - - return policy_error -end - -function policyError(policy_error) - local warnings = "" - for i, k in pairs(policy_error) do - if policy_error[i] == true then - warnings = warnings .. string.format("<strong>%s</strong><br />", - translatef("WARNING: Policy %s has exceeding the maximum name of 15 characters", i) - ) - end - end - - return warnings -end - -m = Map("mwan3", translate("MWAN - Policies"), - policyError(policyCheck())) - -s = m:section(TypedSection, "policy", nil, - translate("Policies are profiles grouping one or more members controlling how MWAN distributes traffic<br />" .. - "Member interfaces with lower metrics are used first<br />" .. - "Member interfaces with the same metric will be load-balanced<br />" .. - "Load-balanced member interfaces distribute more traffic out those with higher weights<br />" .. - "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. - "Names must be 15 characters or less<br />" .. - "Policies may not share the same name as configured interfaces, members or rules")) -s.addremove = true -s.dynamic = false -s.sectionhead = translate("Policy") -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = dsp.build_url("admin", "network", "mwan", "policy", "%s") -function s.create(self, section) - if #section > 15 then - self.invalid_cts = true - else - TypedSection.create(self, section) - m.uci:save("mwan3") - luci.http.redirect(dsp.build_url("admin", "network", "mwan", "policy", section)) - end -end - -o = s:option(DummyValue, "use_member", translate("Members assigned")) -o.rawhtml = true -function o.cfgvalue(self, s) - local memberConfig, memberList = self.map:get(s, "use_member"), "" - if memberConfig then - for k,v in pairs(memberConfig) do - memberList = memberList .. v .. "<br />" - end - return memberList - else - return "—" - end -end - -o = s:option(DummyValue, "last_resort", translate("Last resort")) -o.rawhtml = true -function o.cfgvalue(self, s) - local action = self.map:get(s, "last_resort") - if action == "blackhole" then - return translate("blackhole (drop)") - elseif action == "default" then - return translate("default (use main routing table)") - else - return translate("unreachable (reject)") - end -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua deleted file mode 100644 index 8e5a3fa950..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua +++ /dev/null @@ -1,32 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" - -local m, mwan_policy, member, last_resort - -arg[1] = arg[1] or "" - -m = Map("mwan3", translatef("MWAN Policy Configuration - %s", arg[1])) -m.redirect = dsp.build_url("admin", "network", "mwan", "policy") - -mwan_policy = m:section(NamedSection, arg[1], "policy", "") -mwan_policy.addremove = false -mwan_policy.dynamic = false - -member = mwan_policy:option(DynamicList, "use_member", translate("Member used")) -m.uci:foreach("mwan3", "member", - function(s) - member:value(s['.name'], s['.name']) - end -) - -last_resort = mwan_policy:option(ListValue, "last_resort", translate("Last resort"), - translate("When all policy members are offline use this behavior for matched traffic")) -last_resort.default = "unreachable" -last_resort:value("unreachable", translate("unreachable (reject)")) -last_resort:value("blackhole", translate("blackhole (drop)")) -last_resort:value("default", translate("default (use main routing table)")) - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua deleted file mode 100644 index 1a97d40c1a..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua +++ /dev/null @@ -1,109 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" -local uci = require "uci" - -local m, mwan_rule, src_ip, src_port, dest_ip, dest_port, proto, use_policy - -function ruleCheck() - local rule_error = {} - uci.cursor():foreach("mwan3", "rule", - function (section) - rule_error[section[".name"]] = false - local uci = uci.cursor(nil, "/var/state") - local sourcePort = uci:get("mwan3", section[".name"], "src_port") - local destPort = uci:get("mwan3", section[".name"], "dest_port") - if sourcePort ~= nil or destPort ~= nil then - local protocol = uci:get("mwan3", section[".name"], "proto") - if protocol == nil or protocol == "all" then - rule_error[section[".name"]] = true - end - end - end - ) - return rule_error -end - -function ruleWarn(rule_error) - local warnings = "" - for i, k in pairs(rule_error) do - if rule_error[i] == true then - warnings = warnings .. string.format("<strong>%s</strong><br />", - translatef("WARNING: Rule %s have a port configured with no or improper protocol specified!", i) - ) - end - end - - return warnings -end - -m = Map("mwan3", translate("MWAN - Rules"), - ruleWarn(ruleCheck()) - ) - -mwan_rule = m:section(TypedSection, "rule", nil, - translate("Rules specify which traffic will use a particular MWAN policy<br />" .. - "Rules are based on IP address, port or protocol<br />" .. - "Rules are matched from top to bottom<br />" .. - "Rules below a matching rule are ignored<br />" .. - "Traffic not matching any rule is routed using the main routing table<br />" .. - "Traffic destined for known (other than default) networks is handled by the main routing table<br />" .. - "Traffic matching a rule, but all WAN interfaces for that policy are down will be blackholed<br />" .. - "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. - "Rules may not share the same name as configured interfaces, members or policies")) -mwan_rule.addremove = true -mwan_rule.anonymous = false -mwan_rule.dynamic = false -mwan_rule.sectionhead = translate("Rule") -mwan_rule.sortable = true -mwan_rule.template = "cbi/tblsection" -mwan_rule.extedit = dsp.build_url("admin", "network", "mwan", "rule", "%s") -function mwan_rule.create(self, section) - if #section > 15 then - self.invalid_cts = true - else - TypedSection.create(self, section) - m.uci:save("mwan3") - luci.http.redirect(dsp.build_url("admin", "network", "mwan", "rule", section)) - end -end - -src_ip = mwan_rule:option(DummyValue, "src_ip", translate("Source address")) -src_ip.rawhtml = true -function src_ip.cfgvalue(self, s) - return self.map:get(s, "src_ip") or "—" -end - -src_port = mwan_rule:option(DummyValue, "src_port", translate("Source port")) -src_port.rawhtml = true -function src_port.cfgvalue(self, s) - return self.map:get(s, "src_port") or "—" -end - -dest_ip = mwan_rule:option(DummyValue, "dest_ip", translate("Destination address")) -dest_ip.rawhtml = true -function dest_ip.cfgvalue(self, s) - return self.map:get(s, "dest_ip") or "—" -end - -dest_port = mwan_rule:option(DummyValue, "dest_port", translate("Destination port")) -dest_port.rawhtml = true -function dest_port.cfgvalue(self, s) - return self.map:get(s, "dest_port") or "—" -end - -proto = mwan_rule:option(DummyValue, "proto", translate("Protocol")) -proto.rawhtml = true -function proto.cfgvalue(self, s) - return self.map:get(s, "proto") or "all" -end - -use_policy = mwan_rule:option(DummyValue, "use_policy", translate("Policy assigned")) -use_policy.rawhtml = true -function use_policy.cfgvalue(self, s) - return self.map:get(s, "use_policy") or "—" -end - -return m diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua deleted file mode 100644 index eca53959a4..0000000000 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua +++ /dev/null @@ -1,85 +0,0 @@ --- 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. - -local dsp = require "luci.dispatcher" -local util = require("luci.util") - -local m, s, o - -arg[1] = arg[1] or "" - -local ipsets = util.split(util.trim(util.exec("ipset -n -L 2>/dev/null | grep -v mwan3_ | sort")), "\n", nil, true) or {} - -m = Map("mwan3", translatef("MWAN Rule Configuration - %s", arg[1])) -m.redirect = dsp.build_url("admin", "network", "mwan", "rule") - -s = m:section(NamedSection, arg[1], "rule", "") -s.addremove = false -s.dynamic = false - -o = s:option(ListValue, "family", translate("Internet Protocol")) -o.default = "" -o:value("", translate("IPv4 and IPv6")) -o:value("ipv4", translate("IPv4 only")) -o:value("ipv6", translate("IPv6 only")) - -o = s:option(Value, "src_ip", translate("Source address"), - translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes")) -o.datatype = ipaddr - -o = s:option(Value, "src_port", translate("Source port"), - translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes")) -o:depends("proto", "tcp") -o:depends("proto", "udp") - -o = s:option(Value, "dest_ip", translate("Destination address"), - translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes")) -o.datatype = ipaddr - -o = s:option(Value, "dest_port", translate("Destination port"), - translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes")) -o:depends("proto", "tcp") -o:depends("proto", "udp") - -o = s:option(Value, "proto", translate("Protocol"), - translate("View the content of /etc/protocols for protocol description")) -o.default = "all" -o.rmempty = false -o:value("all") -o:value("tcp") -o:value("udp") -o:value("icmp") -o:value("esp") - -o = s:option(ListValue, "sticky", translate("Sticky"), - translate("Traffic from the same source IP address that previously matched this rule within the sticky timeout period will use the same WAN interface")) -o.default = "0" -o:value("1", translate("Yes")) -o:value("0", translate("No")) - -o = s:option(Value, "timeout", translate("Sticky timeout"), - translate("Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set")) -o.datatype = "range(1, 1000000)" - -o = s:option(Value, "ipset", translate("IPset"), - translate("Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/youtube.com/youtube\")")) -o:value("", translate("-- Please choose --")) -for _, z in ipairs(ipsets) do - o:value(z) -end - -o = s:option(Flag, "logging", translate("Logging"), - translate("Enables firewall rule logging (global mwan3 logging must also be enabled)")) - -o = s:option(Value, "use_policy", translate("Policy assigned")) -m.uci:foreach("mwan3", "policy", - function(s) - o:value(s['.name'], s['.name']) - end -) -o:value("unreachable", translate("unreachable (reject)")) -o:value("blackhole", translate("blackhole (drop)")) -o:value("default", translate("default (use main routing table)")) - -return m |