8cfeecd12fcd365507bb5562b668b46a2e146752
[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 timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout"))
72 timeout.default = "2"
73 timeout:value("1", translatef("%d second", 1))
74 timeout:value("2", translatef("%d seconds", 2))
75 timeout:value("3", translatef("%d seconds", 3))
76 timeout:value("4", translatef("%d seconds", 4))
77 timeout:value("5", translatef("%d seconds", 5))
78 timeout:value("6", translatef("%d seconds", 6))
79 timeout:value("7", translatef("%d seconds", 7))
80 timeout:value("8", translatef("%d seconds", 8))
81 timeout:value("9", translatef("%d seconds", 9))
82 timeout:value("10", translatef("%d seconds", 10))
83
84 interval = mwan_interface:option(ListValue, "interval", translate("Ping interval"))
85 interval.default = "5"
86 interval:value("1", translatef("%d second", 1))
87 interval:value("3", translatef("%d seconds", 3))
88 interval:value("5", translatef("%d seconds", 5))
89 interval:value("10", translatef("%d seconds", 10))
90 interval:value("20", translatef("%d seconds", 20))
91 interval:value("30", translatef("%d seconds", 30))
92 interval:value("60", translatef("%d minute", 1))
93 interval:value("300", translatef("%d minutes", 5))
94 interval:value("600", translatef("%d minutes", 10))
95 interval:value("900", translatef("%d minutes", 15))
96 interval:value("1800", translatef("%d minutes", 30))
97 interval:value("3600", translatef("%d hour", 1))
98
99 failure = mwan_interface:option(Value, "failure_interval", translate("Failure interval"),
100         translate("Ping interval during failure detection"))
101 failure.default = "5"
102 failure:value("1", translatef("%d second", 1))
103 failure:value("3", translatef("%d seconds", 3))
104 failure:value("5", translatef("%d seconds", 5))
105 failure:value("10", translatef("%d seconds", 10))
106 failure:value("20", translatef("%d seconds", 20))
107 failure:value("30", translatef("%d seconds", 30))
108 failure:value("60", translatef("%d minute", 1))
109 failure:value("300", translatef("%d minutes", 5))
110 failure:value("600", translatef("%d minutes", 10))
111 failure:value("900", translatef("%d minutes", 15))
112 failure:value("1800", translatef("%d minutes", 30))
113 failure:value("3600", translatef("%d hour", 1))
114
115 keep_failure = mwan_interface:option(Flag, "keep_failure_interval", translate("Keep failure interval"),
116         translate("Keep ping failure interval during failure state"))
117 keep_failure.default = keep_failure.disabled
118
119 recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"),
120         translate("Ping interval during failure recovering"))
121 recovery.default = "5"
122 recovery:value("1", translatef("%d second", 1))
123 recovery:value("3", translatef("%d seconds", 3))
124 recovery:value("5", translatef("%d seconds", 5))
125 recovery:value("10", translatef("%d seconds", 10))
126 recovery:value("20", translatef("%d seconds", 20))
127 recovery:value("30", translatef("%d seconds", 30))
128 recovery:value("60", translatef("%d minute", 1))
129 recovery:value("300", translatef("%d minutes", 5))
130 recovery:value("600", translatef("%d minutes", 10))
131 recovery:value("900", translatef("%d minutes", 15))
132 recovery:value("1800", translatef("%d minutes", 30))
133 recovery:value("3600", translatef("%d hour", 1))
134
135 down = mwan_interface:option(ListValue, "down", translate("Interface down"),
136         translate("Interface will be deemed down after this many failed ping tests"))
137 down.default = "3"
138 down:value("1")
139 down:value("2")
140 down:value("3")
141 down:value("4")
142 down:value("5")
143 down:value("6")
144 down:value("7")
145 down:value("8")
146 down:value("9")
147 down:value("10")
148
149 up = mwan_interface:option(ListValue, "up", translate("Interface up"),
150         translate("Downed interface will be deemed up after this many successful ping tests"))
151 up.default = "3"
152 up:value("1")
153 up:value("2")
154 up:value("3")
155 up:value("4")
156 up:value("5")
157 up:value("6")
158 up:value("7")
159 up:value("8")
160 up:value("9")
161 up:value("10")
162
163 flush = mwan_interface:option(ListValue, "flush_conntrack", translate("Flush conntrack table"),
164         translate("Flush global firewall conntrack table on interface events"))
165 flush.default = "never"
166 flush:value("ifup", translate("ifup"))
167 flush:value("ifdown", translate("ifdown"))
168 flush:value("never", translate("never"))
169 flush:value("always", translate("always"))
170
171 metric = mwan_interface:option(DummyValue, "metric", translate("Metric"),
172         translate("This displays the metric assigned to this interface in /etc/config/network"))
173 metric.rawhtml = true
174 function metric.cfgvalue(self, s)
175         local uci = require "luci.model.uci".cursor(nil, "/var/state")
176         local metric = uci:get("network", arg[1], "metric")
177         if metric then
178                 return metric
179         else
180                 return "&#8212;"
181         end
182 end
183
184 return m5