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