Globally reduce copyright headers
[project/luci.git] / modules / luci-mod-admin-mini / luasrc / model / cbi / mini / dhcp.lua
1 -- Copyright 2008 Steven Barth <steven@midlink.org>
2 -- Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
3 -- Licensed to the public under the Apache License 2.0.
4
5 local uci = require "luci.model.uci".cursor()
6 local sys = require "luci.sys"
7 local wa  = require "luci.tools.webadmin"
8 local fs  = require "nixio.fs"
9
10 m = Map("dhcp", "DHCP")
11
12 s = m:section(TypedSection, "dhcp", "DHCP-Server")
13 s.anonymous = true
14 s.addremove = false
15 s.dynamic = false
16
17 s:depends("interface", "lan")
18
19 enable = s:option(ListValue, "ignore", translate("enable"), "")
20 enable:value(0, translate("enable"))
21 enable:value(1, translate("disable"))
22
23 start = s:option(Value, "start", translate("First leased address"))
24 start.rmempty = true
25 start:depends("ignore", "0")
26
27
28 limit = s:option(Value, "limit", translate("Number of leased addresses"), "")
29 limit:depends("ignore", "0")
30
31 function limit.cfgvalue(self, section)
32         local value = Value.cfgvalue(self, section)
33         
34         if value then
35                 return tonumber(value) + 1
36         end 
37 end
38
39 function limit.write(self, section, value)
40         value = tonumber(value) - 1
41         return Value.write(self, section, value) 
42 end
43
44 limit.rmempty = true
45
46 time = s:option(Value, "leasetime")
47 time:depends("ignore", "0")
48 time.rmempty = true
49
50
51 local leasefn, leasefp, leases
52 uci:foreach("dhcp", "dnsmasq",
53  function(section)
54         leasefn = section.leasefile
55  end
56
57 local leasefp = leasefn and fs.access(leasefn) and io.lines(leasefn)
58 if leasefp then
59         leases = {}
60         for lease in leasefp do
61                 table.insert(leases, luci.util.split(lease, " "))
62         end
63 end
64
65 if leases then
66         v = m:section(Table, leases, translate("Active Leases"))
67         name = v:option(DummyValue, 4, translate("Hostname"))
68         function name.cfgvalue(self, ...)
69                 local value = DummyValue.cfgvalue(self, ...)
70                 return (value == "*") and "?" or value
71         end
72         ip = v:option(DummyValue, 3, translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
73         mac  = v:option(DummyValue, 2, translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
74         ltime = v:option(DummyValue, 1, translate("Leasetime remaining"))
75         function ltime.cfgvalue(self, ...)
76                 local value = DummyValue.cfgvalue(self, ...)
77                 return wa.date_format(os.difftime(tonumber(value), os.time()))
78         end
79 end
80
81 s2 = m:section(TypedSection, "host", translate("Static Leases"))
82 s2.addremove = true
83 s2.anonymous = true
84 s2.template = "cbi/tblsection"
85
86 name = s2:option(Value, "name", translate("Hostname"))
87 mac = s2:option(Value, "mac", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
88 ip = s2:option(Value, "ip", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
89 sys.net.arptable(function(entry)
90         ip:value(entry["IP address"])
91         mac:value(
92                 entry["HW address"],
93                 entry["HW address"] .. " (" .. entry["IP address"] .. ")"
94         )
95 end)
96
97 return m
98