47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/lua
 | 
						|
 | 
						|
local uci = require('simple-uci').cursor()
 | 
						|
 | 
						|
local function restart_tunneldigger()
 | 
						|
	os.execute('logger -t tunneldigger-watchdog "Restarting Tunneldigger."')
 | 
						|
	os.execute('/etc/init.d/tunneldigger restart')
 | 
						|
end
 | 
						|
 | 
						|
local function read_pid_file()
 | 
						|
	local pid_file = io.open('/var/run/tunneldigger.mesh-vpn.pid', 'r')
 | 
						|
	if not pid_file then
 | 
						|
		return nil
 | 
						|
	end
 | 
						|
	local pid = pid_file:read('*l')
 | 
						|
	pid_file:close()
 | 
						|
	return pid
 | 
						|
end
 | 
						|
 | 
						|
local function has_mesh_vpn_neighbours()
 | 
						|
	local handle = io.popen('batctl o', 'r')
 | 
						|
	if not handle then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
	for line in handle:lines() do
 | 
						|
		if line:find('mesh%-vpn') then
 | 
						|
			handle:close()
 | 
						|
			return true
 | 
						|
		end
 | 
						|
	end
 | 
						|
	handle:close()
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
if uci:get_bool('tunneldigger', 'mesh_vpn', 'enabled') then
 | 
						|
	if io.popen('pgrep -x /usr/bin/tunneldigger'):read('*l') ~= read_pid_file() then
 | 
						|
		os.execute('logger -t tunneldigger-watchdog "Process-Pid does not match with pid-File."')
 | 
						|
		restart_tunneldigger()
 | 
						|
		return
 | 
						|
	end
 | 
						|
	if not has_mesh_vpn_neighbours() then
 | 
						|
		os.execute('logger -t tunneldigger-watchdog "No vpn-mesh neighbours found."')
 | 
						|
		restart_tunneldigger()
 | 
						|
		return
 | 
						|
	end
 | 
						|
end
 |