luci.mk: move indexcache delete into postinst
[oweals/luci.git] / applications / luci-app-mwan3 / luasrc / model / cbi / mwan / interfaceconfig.lua
1 -- Copyright 2014 Aedan Renner <chipdankly@gmail.com>
2 -- Copyright 2018 Florian Eckert <fe@dev.tdt.de>
3 -- Licensed to the public under the GNU General Public License v2.
4
5 local dsp = require "luci.dispatcher"
6
7 local m, mwan_interface, enabled, initial_state, family, track_ip
8 local track_method, reliability, count, size, max_ttl
9 local check_quality, failure_latency, failure_loss, recovery_latency
10 local recovery_loss, timeout, interval, failure
11 local keep_failure, recovery, down, up, flush, metric
12 local httping_ssl
13
14 arg[1] = arg[1] or ""
15
16 m = Map("mwan3", translatef("MWAN Interface Configuration - %s", arg[1]))
17 m.redirect = dsp.build_url("admin", "network", "mwan", "interface")
18
19 mwan_interface = m:section(NamedSection, arg[1], "interface", "")
20 mwan_interface.addremove = false
21 mwan_interface.dynamic = false
22
23 enabled = mwan_interface:option(Flag, "enabled", translate("Enabled"))
24 enabled.default = false
25
26 initial_state = mwan_interface:option(ListValue, "initial_state", translate("Initial state"),
27         translate("Expect interface state on up event"))
28 initial_state.default = "online"
29 initial_state:value("online", translate("Online"))
30 initial_state:value("offline", translate("Offline"))
31
32 family = mwan_interface:option(ListValue, "family", translate("Internet Protocol"))
33 family.default = "ipv4"
34 family:value("ipv4", translate("IPv4"))
35 family:value("ipv6", translate("IPv6"))
36
37 track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking hostname or IP address"),
38         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"))
39 track_ip.datatype = "host"
40
41 track_method = mwan_interface:option(ListValue, "track_method", translate("Tracking method"))
42 track_method.default = "ping"
43 track_method:value("ping")
44 if os.execute("which nping 1>/dev/null") == 0 then
45         track_method:value("nping-tcp")
46         track_method:value("nping-udp")
47         track_method:value("nping-icmp")
48         track_method:value("nping-arp")
49 end
50
51 if os.execute("which arping 1>/dev/null") == 0 then
52         track_method:value("arping")
53 end
54
55 if os.execute("which httping 1>/dev/null") == 0 then
56         track_method:value("httping")
57 end
58
59 httping_ssl = mwan_interface:option(Flag, "httping_ssl", translate("Enable ssl tracking"),
60         translate("Enables https tracking on ssl port 443"))
61 httping_ssl:depends("track_method", "httping")
62 httping_ssl.default = httping_ssl.enabled
63
64 reliability = mwan_interface:option(Value, "reliability", translate("Tracking reliability"),
65         translate("Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up"))
66 reliability.datatype = "range(1, 100)"
67 reliability.default = "1"
68
69 count = mwan_interface:option(ListValue, "count", translate("Ping count"))
70 count.default = "1"
71 count:value("1")
72 count:value("2")
73 count:value("3")
74 count:value("4")
75 count:value("5")
76
77 size = mwan_interface:option(Value, "size", translate("Ping size"))
78 size.default = "56"
79 size:depends("track_method", "ping")
80 size:value("8")
81 size:value("24")
82 size:value("56")
83 size:value("120")
84 size:value("248")
85 size:value("504")
86 size:value("1016")
87 size:value("1472")
88 size:value("2040")
89 size.datatype = "range(1, 65507)"
90 size.rmempty = false
91 size.optional = false
92
93 max_ttl = mwan_interface:option(Value, "max_ttl", translate("Max TTL"))
94 max_ttl.default = "60"
95 max_ttl:depends("track_method", "ping")
96 max_ttl:value("10")
97 max_ttl:value("20")
98 max_ttl:value("30")
99 max_ttl:value("40")
100 max_ttl:value("50")
101 max_ttl:value("60")
102 max_ttl:value("70")
103 max_ttl.datatype = "range(1, 255)"
104
105 check_quality = mwan_interface:option(Flag, "check_quality", translate("Check link quality"))
106 check_quality:depends("track_method", "ping")
107 check_quality.default = false
108
109 failure_latency = mwan_interface:option(Value, "failure_latency", translate("Max packet latency [ms]"))
110 failure_latency:depends("check_quality", 1)
111 failure_latency.default = "1000"
112 failure_latency:value("25")
113 failure_latency:value("50")
114 failure_latency:value("75")
115 failure_latency:value("100")
116 failure_latency:value("150")
117 failure_latency:value("200")
118 failure_latency:value("250")
119 failure_latency:value("300")
120
121 failure_loss = mwan_interface:option(Value, "failure_loss", translate("Max packet loss [%]"))
122 failure_loss:depends("check_quality", 1)
123 failure_loss.default = "20"
124 failure_loss:value("2")
125 failure_loss:value("5")
126 failure_loss:value("10")
127 failure_loss:value("20")
128 failure_loss:value("25")
129
130 recovery_latency = mwan_interface:option(Value, "recovery_latency", translate("Min packet latency [ms]"))
131 recovery_latency:depends("check_quality", 1)
132 recovery_latency.default = "500"
133 recovery_latency:value("25")
134 recovery_latency:value("50")
135 recovery_latency:value("75")
136 recovery_latency:value("100")
137 recovery_latency:value("150")
138 recovery_latency:value("200")
139 recovery_latency:value("250")
140 recovery_latency:value("300")
141
142 recovery_loss = mwan_interface:option(Value, "recovery_loss", translate("Min packet loss [%]"))
143 recovery_loss:depends("check_quality", 1)
144 recovery_loss.default = "5"
145 recovery_loss:value("2")
146 recovery_loss:value("5")
147 recovery_loss:value("10")
148 recovery_loss:value("20")
149 recovery_loss:value("25")
150
151 timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout"))
152 timeout.default = "2"
153 timeout:value("1", translatef("%d second", 1))
154 timeout:value("2", translatef("%d seconds", 2))
155 timeout:value("3", translatef("%d seconds", 3))
156 timeout:value("4", translatef("%d seconds", 4))
157 timeout:value("5", translatef("%d seconds", 5))
158 timeout:value("6", translatef("%d seconds", 6))
159 timeout:value("7", translatef("%d seconds", 7))
160 timeout:value("8", translatef("%d seconds", 8))
161 timeout:value("9", translatef("%d seconds", 9))
162 timeout:value("10", translatef("%d seconds", 10))
163
164 interval = mwan_interface:option(ListValue, "interval", translate("Ping interval"))
165 interval.default = "5"
166 interval:value("1", translatef("%d second", 1))
167 interval:value("3", translatef("%d seconds", 3))
168 interval:value("5", translatef("%d seconds", 5))
169 interval:value("10", translatef("%d seconds", 10))
170 interval:value("20", translatef("%d seconds", 20))
171 interval:value("30", translatef("%d seconds", 30))
172 interval:value("60", translatef("%d minute", 1))
173 interval:value("300", translatef("%d minutes", 5))
174 interval:value("600", translatef("%d minutes", 10))
175 interval:value("900", translatef("%d minutes", 15))
176 interval:value("1800", translatef("%d minutes", 30))
177 interval:value("3600", translatef("%d hour", 1))
178
179 failure = mwan_interface:option(Value, "failure_interval", translate("Failure interval"),
180         translate("Ping interval during failure detection"))
181 failure.default = "5"
182 failure:value("1", translatef("%d second", 1))
183 failure:value("3", translatef("%d seconds", 3))
184 failure:value("5", translatef("%d seconds", 5))
185 failure:value("10", translatef("%d seconds", 10))
186 failure:value("20", translatef("%d seconds", 20))
187 failure:value("30", translatef("%d seconds", 30))
188 failure:value("60", translatef("%d minute", 1))
189 failure:value("300", translatef("%d minutes", 5))
190 failure:value("600", translatef("%d minutes", 10))
191 failure:value("900", translatef("%d minutes", 15))
192 failure:value("1800", translatef("%d minutes", 30))
193 failure:value("3600", translatef("%d hour", 1))
194
195 keep_failure = mwan_interface:option(Flag, "keep_failure_interval", translate("Keep failure interval"),
196         translate("Keep ping failure interval during failure state"))
197 keep_failure.default = keep_failure.disabled
198
199 recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"),
200         translate("Ping interval during failure recovering"))
201 recovery.default = "5"
202 recovery:value("1", translatef("%d second", 1))
203 recovery:value("3", translatef("%d seconds", 3))
204 recovery:value("5", translatef("%d seconds", 5))
205 recovery:value("10", translatef("%d seconds", 10))
206 recovery:value("20", translatef("%d seconds", 20))
207 recovery:value("30", translatef("%d seconds", 30))
208 recovery:value("60", translatef("%d minute", 1))
209 recovery:value("300", translatef("%d minutes", 5))
210 recovery:value("600", translatef("%d minutes", 10))
211 recovery:value("900", translatef("%d minutes", 15))
212 recovery:value("1800", translatef("%d minutes", 30))
213 recovery:value("3600", translatef("%d hour", 1))
214
215 down = mwan_interface:option(ListValue, "down", translate("Interface down"),
216         translate("Interface will be deemed down after this many failed ping tests"))
217 down.default = "3"
218 down:value("1")
219 down:value("2")
220 down:value("3")
221 down:value("4")
222 down:value("5")
223 down:value("6")
224 down:value("7")
225 down:value("8")
226 down:value("9")
227 down:value("10")
228
229 up = mwan_interface:option(ListValue, "up", translate("Interface up"),
230         translate("Downed interface will be deemed up after this many successful ping tests"))
231 up.default = "3"
232 up:value("1")
233 up:value("2")
234 up:value("3")
235 up:value("4")
236 up:value("5")
237 up:value("6")
238 up:value("7")
239 up:value("8")
240 up:value("9")
241 up:value("10")
242
243 flush = mwan_interface:option(StaticList, "flush_conntrack", translate("Flush conntrack table"),
244         translate("Flush global firewall conntrack table on interface events"))
245 flush:value("ifup", translate("ifup (netifd)"))
246 flush:value("ifdown", translate("ifdown (netifd)"))
247 flush:value("connected", translate("connected (mwan3)"))
248 flush:value("disconnected", translate("disconnected (mwan3)"))
249
250 metric = mwan_interface:option(DummyValue, "metric", translate("Metric"),
251         translate("This displays the metric assigned to this interface in /etc/config/network"))
252 metric.rawhtml = true
253 function metric.cfgvalue(self, s)
254         local uci = require "luci.model.uci".cursor(nil, "/var/state")
255         local metric = uci:get("network", arg[1], "metric")
256         if metric then
257                 return metric
258         else
259                 return "&#8212;"
260         end
261 end
262
263 return m