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