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