root/luci/branches/luci-0.10/applications/luci-radvd/luasrc/model/cbi/radvd.lua @ 6811

Revision 6811, 8.9 KB (checked in by jow, 2 years ago)

luci-0.10: merge r6808 and r6809

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