From e960b29837062f7b0348abaebfdc9c1cdc423b68 Mon Sep 17 00:00:00 2001 From: Phil Davis Date: Tue, 7 May 2013 20:16:13 +0545 Subject: Optimize which OpenVPN instances are restarted --- etc/rc.openvpn | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'etc/rc.openvpn') diff --git a/etc/rc.openvpn b/etc/rc.openvpn index d57594a..531fa40 100755 --- a/etc/rc.openvpn +++ b/etc/rc.openvpn @@ -38,6 +38,27 @@ require_once("filter.inc"); require_once("gwlb.inc"); require_once("openvpn.inc"); +function openvpn_resync_if_needed ($mode, $ovpn_settings, $interface) { + global $g, $config; + + $resync_needed = false; + if (empty($interface)) { + $resync_needed = true; + } else { + $mode_id = $mode . $ovpn_settings['vpnid']; + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.interface"; + $current_device = file_get_contents($fpath); + $new_device = get_failover_interface($ovpn_settings['interface']); + $this_device = $config['interfaces'][$interface]['if']; + if (($current_device != $new_device) || ($current_device == $this_device) || ($new_device == $this_device)) + $resync_needed = true; + } + if ($resync_needed) { + log_error("OpenVPN: Resync " . $mode_id . " " . $ovpn_settings['description']); + openvpn_resync($mode, $ovpn_settings); + } +} + /* make sure to wait until the boot scripts have finished */ if (file_exists("{$g['varrun_path']}/booting")) return; @@ -70,14 +91,14 @@ else { if(is_array($config['openvpn']['openvpn-server'])) { foreach($config['openvpn']['openvpn-server'] as &$server) { if ($server['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($server['interface'], $gwgroups))) - openvpn_resync('server', $server); + openvpn_resync_if_needed('server', $server, $interface); } } if (is_array($config['openvpn']['openvpn-client'])) { foreach($config['openvpn']['openvpn-client'] as &$client) { if ($client['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($client['interface'], $gwgroups))) - openvpn_resync('client', $client); + openvpn_resync_if_needed('client', $client, $interface); } } -- cgit v1.1