summaryrefslogtreecommitdiffstats
path: root/dhcp-model.lua
blob: 2a952f75be2128f9ebd35d92a2f5dcc3433bc5c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
-- acf model for /etc/dhcp/*
-- Copyright(c) 2007 A. Brodmann - Licensed under terms of GPL2
module (..., package.seeall)

local subnet = { }
local cfgdir = "/etc/dhcp/"

subnet_read = function( name )
	local filename = cfgdir .. name .. ".subnet"
	local net = { name = cfe({ type="message", value=name, label="Name" }),
	              defleasetime = cfe({ label="Default Lease Time" }),
	              maxleasetime = cfe({ label="Maximum Lease Time" }),
	              gateway = cfe({ label="Gateway"}),
	              domainname = cfe({ label="Domainname" }),
	              dnssrv1 = cfe({ label="DNS Server 1" }),
	              dnssrv2 = cfe({ label="DNS Server 2" }),
	              subnet = cfe({ label="Subnet" }),
	              netmask = cfe({ label="Netmask" }),
	              leaserangestart = cfe({ label="Lease Range Start" }),
	              leaserangeend = cfe({ label="Lease Range End" }),
	              wpad = cfe({ label="Web Proxy Auto Discovery" })
	            }

	for line in io.lines(filename) do
		if (string.sub(line, 1, 15) == "def-lease-time:") then
			net.defleasetime.value = string.sub(line, 17)
		elseif (string.sub(line, 1, 15) == "max-lease-time:") then
			net.maxleasetime.value = string.sub(line, 17)
		elseif (string.sub(line, 1, 8) == "gateway:") then
			net.gateway.value = string.sub(line, 10)
		elseif (string.sub(line, 1, 12) == "domain-name:") then
			net.domainname.value = string.sub(line, 14)
		elseif (string.sub(line, 1, 10) == "dns-srv-1:") then
			net.dnssrv1.value = string.sub(line, 12)
		elseif (string.sub(line, 1, 10) == "dns-srv-2:") then
			net.dnssrv2.value = string.sub(line, 12)
		elseif (string.sub(line, 1, 7) == "subnet:") then
			net.subnet.value = string.sub(line, 9)
		elseif (string.sub(line, 1, 8) == "netmask:") then
			net.netmask.value = string.sub(line, 10)
		elseif (string.sub(line, 1, 18) == "lease-range-start:") then
			net.leaserangestart.value = string.sub(line, 20)
		elseif (string.sub(line, 1, 16) == "lease-range-end:") then
			net.leaserangeend.value = string.sub(line, 18)
		elseif (string.sub(line, 1, 5) == "wpad:") then
			net.wpad.value = string.sub(line, 7)
		end
	end
	
	return net
end

subnet_write = function( net )
	local filename = cfgdir .. net.name.value .. ".subnet"
	local file = io.open( filename, "w+" )
	file:write( "def-lease-time: " .. net.defleasetime.value .. "\n" )
	file:write( "max-lease-time: " .. net.maxleasetime.value .. "\n" )
	file:write( "gateway: " .. net.gateway.value .. "\n" )
	file:write( "domain-name: " .. net.domainname.value .. "\n" )
	file:write( "dns-srv-1: " .. net.dnssrv1.value .. "\n" )
	file:write( "dns-srv-2: " .. net.dnssrv2.value .. "\n" )
	file:write( "subnet: " .. net.subnet.value .. "\n" )
	file:write( "netmask: " .. net.netmask.value .. "\n" )
	file:write( "lease-range-start: " .. net.leaserangestart.value .. "\n" )
	file:write( "lease-range-end: " .. net.leaserangeend.value .. "\n" )
	file:write( "wpad: " .. net.wpad.value .. "\n" )
	file:close()
	return net
end

read_file = function ( filename )
	local contents = ""
        local line = ""
	local file = io.open( filename, "r" )
	if file ~= nil then
	        line = file:read( "*l" )
	        while line ~= nil do
			contents = contents .. "\n" .. line
			line = file:read( "*l" )
		end
		file:close()
	else
		contents = "\n   Error: File not found!\n\n"
	end

	return contents
end

is_running = function( process )
	local retval = false
	local file = io.popen("pidof " .. process)
	if file ~= nil then
		local line = file:read( "*l" )
		file:close()
		if #line > 0 then
			retval = true
		end
	end
	
	return retval
end

get_dhcpd_version = function()
	local retval = "dhcpd"
	local file = io.popen("/usr/sbin/dhcpd --version")
	if file ~= nil then
		local line = file:read( "*a" )
		if #line > 0 then
			retval = line
		end
		file:close()
	end

	return retval
end

service_control = function ( command ) 

	local retval = ""
	local line = ""
	local file = io.popen( "/etc/init.d/dhcpd " .. command )
	if file ~= nil then
		line = file:read( "*l" )
		while line ~= nil do
			retval = retval .. "\n" .. line
			line = file:read( "*l" )
		end
		file:close()
	end

	return retval
end

function nonil( value )
	local retval = ""
	if value ~= nil then
		retval = value
	end
                                        
	return retval
end