Update my email addresses in the license headers
[project/luci.git] / applications / luci-app-radvd / luasrc / model / cbi / radvd.lua
1 -- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
2 -- Licensed to the public under the Apache License 2.0.
3
4 m = Map("radvd", translate("Radvd"),
5 translate("Radvd is a router advertisement daemon for IPv6. " ..
6 "It listens to router solicitations and sends router advertisements " ..
7 "as described in RFC 4861."))
8
9 local nm = require "luci.model.network".init(m.uci)
10 local ut = require "luci.util"
11
12
13 --
14 -- Interfaces
15 --
16
17 s = m:section(TypedSection, "interface", translate("Interfaces"))
18 s.template = "cbi/tblsection"
19 s.extedit = luci.dispatcher.build_url("admin/network/radvd/interface/%s")
20 s.anonymous = true
21 s.addremove = true
22
23 function s.create(...)
24 local id = TypedSection.create(...)
25 luci.http.redirect(s.extedit % id)
26 end
27
28 function s.remove(self, section)
29 if m.uci:get("radvd", section) == "interface" then
30 local iface = m.uci:get("radvd", section, "interface")
31 if iface then
32 m.uci:delete_all("radvd", "prefix",
33 function(s) return s.interface == iface end)
34
35 m.uci:delete_all("radvd", "route",
36 function(s) return s.interface == iface end)
37
38 m.uci:delete_all("radvd", "rdnss",
39 function(s) return s.interface == iface end)
40 end
41 end
42
43 return TypedSection.remove(self, section)
44 end
45
46 o = s:option(Flag, "ignore", translate("Enable"))
47 o.rmempty = false
48 o.width = "30px"
49 function o.cfgvalue(...)
50 local v = Flag.cfgvalue(...)
51 return v == "1" and "0" or "1"
52 end
53 function o.write(self, section, value)
54 Flag.write(self, section, value == "1" and "0" or "1")
55 end
56
57 o = s:option(DummyValue, "interface", translate("Interface"))
58 o.template = "cbi/network_netinfo"
59 o.width = "10%"
60
61 o = s:option(DummyValue, "UnicastOnly", translate("Multicast"))
62 function o.cfgvalue(self, section)
63 local v = Value.cfgvalue(self, section)
64 local v2 = m.uci:get("radvd", section, "client")
65 return (v == "1" or (v2 and #v2 > 0)) and translate("no") or translate("yes")
66 end
67
68 o = s:option(DummyValue, "AdvSendAdvert", translate("Advertising"))
69 function o.cfgvalue(...)
70 local v = Value.cfgvalue(...)
71 return v == "1" and translate("yes") or translate("no")
72 end
73
74 o = s:option(DummyValue, "MaxRtrAdvInterval", translate("Max. interval"))
75 function o.cfgvalue(...)
76 local v = Value.cfgvalue(...) or "600"
77 return v .. "s"
78 end
79
80 o = s:option(DummyValue, "AdvHomeAgentFlag", translate("Mobile IPv6"))
81 function o.cfgvalue(...)
82 local v = Value.cfgvalue(...)
83 return v == "1" and translate("yes") or translate("no")
84 end
85
86 o = s:option(DummyValue, "AdvDefaultPreference", translate("Preference"))
87 function o.cfgvalue(...)
88 local v = Value.cfgvalue(...) or "medium"
89 return translate(v)
90 end
91
92
93 --
94 -- Prefixes
95 --
96
97 s2 = m:section(TypedSection, "prefix", translate("Prefixes"))
98 s2.template = "cbi/tblsection"
99 s2.extedit = luci.dispatcher.build_url("admin/network/radvd/prefix/%s")
100 s2.addremove = true
101 s2.anonymous = true
102
103 function s2.create(...)
104 local id = TypedSection.create(...)
105 luci.http.redirect(s2.extedit % id)
106 end
107
108
109 o = s2:option(Flag, "ignore", translate("Enable"))
110 o.rmempty = false
111 o.width = "30px"
112 function o.cfgvalue(...)
113 local v = Flag.cfgvalue(...)
114 return v == "1" and "0" or "1"
115 end
116 function o.write(self, section, value)
117 Flag.write(self, section, value == "1" and "0" or "1")
118 end
119
120 o = s2:option(DummyValue, "interface", translate("Interface"))
121 o.template = "cbi/network_netinfo"
122 o.width = "10%"
123
124 pfx = s2:option(DummyValue, "prefix", translate("Prefix"))
125 pfx.width = "60%"
126 function pfx.cfgvalue(self, section)
127 local v = m.uci:get_list("radvd", section, self.option)
128 local l = { }
129
130 if not v or #v == 0 or (#v == 1 and #v[1] == 0) then
131 local net = nm:get_network(m.uci:get("radvd", section, "interface"))
132 if net then
133 local ifc = nm:get_interface(net:ifname())
134 if ifc then
135 local adr
136 for _, adr in ipairs(ifc:ip6addrs()) do
137 if not adr:is6linklocal() then
138 v = adr:string()
139 break
140 end
141 end
142 end
143 end
144 end
145
146 for v in ut.imatch(v) do
147 v = luci.ip.IPv6(v)
148 if v then
149 l[#l+1] = v:string()
150 end
151 end
152
153 if #l == 0 then
154 l[1] = "?"
155 end
156
157 return table.concat(l, ", ")
158 end
159
160 o = s2:option(DummyValue, "AdvAutonomous", translate("Autonomous"))
161 function o.cfgvalue(...)
162 local v = Value.cfgvalue(...)
163 return v == "1" and translate("yes") or translate("no")
164 end
165
166 o = s2:option(DummyValue, "AdvOnLink", translate("On-link"))
167 function o.cfgvalue(...)
168 local v = Value.cfgvalue(...)
169 return v == "1" and translate("yes") or translate("no")
170 end
171
172 o = s2:option(DummyValue, "AdvValidLifetime", translate("Validity time"))
173 function o.cfgvalue(...)
174 local v = Value.cfgvalue(...) or "86400"
175 return translate(v)
176 end
177
178
179 --
180 -- Routes
181 --
182
183 s3 = m:section(TypedSection, "route", translate("Routes"))
184 s3.template = "cbi/tblsection"
185 s3.extedit = luci.dispatcher.build_url("admin/network/radvd/route/%s")
186 s3.addremove = true
187 s3.anonymous = true
188
189 function s3.create(...)
190 local id = TypedSection.create(...)
191 luci.http.redirect(s3.extedit % id)
192 end
193
194
195 o = s3:option(Flag, "ignore", translate("Enable"))
196 o.rmempty = false
197 o.width = "30px"
198 function o.cfgvalue(...)
199 local v = Flag.cfgvalue(...)
200 return v == "1" and "0" or "1"
201 end
202 function o.write(self, section, value)
203 Flag.write(self, section, value == "1" and "0" or "1")
204 end
205
206 o = s3:option(DummyValue, "interface", translate("Interface"))
207 o.template = "cbi/network_netinfo"
208 o.width = "10%"
209
210 o = s3:option(DummyValue, "prefix", translate("Prefix"))
211 o.width = "60%"
212 o.cfgvalue = pfx.cfgvalue
213
214 o = s3:option(DummyValue, "AdvRouteLifetime", translate("Lifetime"))
215 function o.cfgvalue(self, section)
216 local v = Value.cfgvalue(self, section) or "1800"
217 return translate(v)
218 end
219
220 o = s3:option(DummyValue, "AdvRoutePreference", translate("Preference"))
221 function o.cfgvalue(self, section)
222 local v = Value.cfgvalue(self, section) or "medium"
223 return translate(v)
224 end
225
226
227 --
228 -- RDNSS
229 --
230
231 s4 = m:section(TypedSection, "rdnss", translate("RDNSS"))
232 s4.template = "cbi/tblsection"
233 s4.extedit = luci.dispatcher.build_url("admin/network/radvd/rdnss/%s")
234 s4.addremove = true
235 s4.anonymous = true
236
237 function s4.create(...)
238 local id = TypedSection.create(...)
239 luci.http.redirect(s4.extedit % id)
240 end
241
242
243 o = s4:option(Flag, "ignore", translate("Enable"))
244 o.rmempty = false
245 o.width = "30px"
246 function o.cfgvalue(...)
247 local v = Flag.cfgvalue(...)
248 return v == "1" and "0" or "1"
249 end
250 function o.write(self, section, value)
251 Flag.write(self, section, value == "1" and "0" or "1")
252 end
253
254 o = s4:option(DummyValue, "interface", translate("Interface"))
255 o.template = "cbi/network_netinfo"
256 o.width = "10%"
257
258 o = s4:option(DummyValue, "addr", translate("Address"))
259 o.width = "60%"
260 o.cfgvalue = pfx.cfgvalue
261
262 o = s4:option(DummyValue, "AdvRDNSSLifetime", translate("Lifetime"))
263 function o.cfgvalue(self, section)
264 local v = Value.cfgvalue(self, section) or "1200"
265 return translate(v)
266 end
267
268
269 --
270 -- DNSSL
271 --
272
273 s5 = m:section(TypedSection, "dnssl", translate("DNSSL"))
274 s5.template = "cbi/tblsection"
275 s5.extedit = luci.dispatcher.build_url("admin/network/radvd/dnssl/%s")
276 s5.addremove = true
277 s5.anonymous = true
278
279 function s5.create(...)
280 local id = TypedSection.create(...)
281 luci.http.redirect(s5.extedit % id)
282 end
283
284
285 o = s5:option(Flag, "ignore", translate("Enable"))
286 o.rmempty = false
287 o.width = "30px"
288 function o.cfgvalue(...)
289 local v = Flag.cfgvalue(...)
290 return v == "1" and "0" or "1"
291 end
292 function o.write(self, section, value)
293 Flag.write(self, section, value == "1" and "0" or "1")
294 end
295
296 o = s5:option(DummyValue, "interface", translate("Interface"))
297 o.template = "cbi/network_netinfo"
298 o.width = "10%"
299
300 o = s5:option(DummyValue, "suffix", translate("Suffix"))
301 o.width = "60%"
302 function o.cfgvalue(self, section)
303 local v = m.uci:get_list("radvd", section, "suffix")
304 local l = { }
305
306 for v in ut.imatch(v) do
307 l[#l+1] = v
308 end
309
310 if #l == 0 then
311 l[1] = "?"
312 end
313
314 return table.concat(l, ", ")
315 end
316
317 o = s5:option(DummyValue, "AdvDNSSLLifetime", translate("Lifetime"))
318 function o.cfgvalue(self, section)
319 local v = Value.cfgvalue(self, section) or "1200"
320 return translate(v)
321 end
322
323
324 return m