summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-mwan3/luasrc/model/cbi
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-mwan3/luasrc/model/cbi')
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua42
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua241
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua262
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua45
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua33
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/notify.lua46
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua92
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua32
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua109
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua85
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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
- 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 "&#8212;"
-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 &#34;#!/bin/sh&#34; 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 "&#8212;"
- 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 "&#8212;"
-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 "&#8212;"
-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 "&#8212;"
-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 "&#8212;"
-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 "&#8212;"
-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