Project

General

Profile

Download (6.07 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php -f
2
<?php
3
/*
4 7488a9e0 Renato Botelho
	rc.newwanip
5
	Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
6
	part of pfSense (http://www.pfsense.com)
7
8
	Originally part of m0n0wall (http://m0n0.ch)
9
	Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
10
	All rights reserved.
11
12
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14
15
	1. Redistributions of source code must retain the above copyright notice,
16
	this list of conditions and the following disclaimer.
17
18
	2. Redistributions in binary form must reproduce the above copyright
19
	notice, this list of conditions and the following disclaimer in the
20
	documentation and/or other materials provided with the distribution.
21
22
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32 5b237745 Scott Ullrich
*/
33
34 0363c100 Scott Ullrich
/* parse the configuration and include all functions used below */
35
require_once("globals.inc");
36
require_once("config.inc");
37
require_once("functions.inc");
38 5f2d078e Scott Ullrich
require_once("filter.inc");
39
require_once("shaper.inc");
40 f973148e Ermal
require_once("ipsec.inc");
41
require_once("vpn.inc");
42 c7f60193 Ermal
require_once("openvpn.inc");
43 76f5d95c Scott Ullrich
require_once("rrd.inc");
44 0363c100 Scott Ullrich
45 9e18b392 Scott Ullrich
// Do not process while booting
46 7488a9e0 Renato Botelho
if($g['booting'])
47 9e18b392 Scott Ullrich
	exit;
48
49 9ccecb65 Ermal
function restart_packages() {
50 b82e4696 Renato Botelho
	global $oldip, $curwanip, $g;
51 9ccecb65 Ermal
52
	/* restart packages */
53 0b8e9d38 jim-p
	system_ntp_configure(false);
54 b61e8960 jim-p
	mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true);
55 7488a9e0 Renato Botelho
	log_error("{$g['product_name']} package system has detected an ip change $oldip ->  $curwanip ... Restarting packages.");
56 0042f5d9 Ermal
	send_event("service reload packages");
57 9ccecb65 Ermal
}
58 0363c100 Scott Ullrich
59 9ccecb65 Ermal
/* Interface IP address has changed */
60 0363c100 Scott Ullrich
$argument = str_replace("\n", "", $argv[1]);
61
62 5e3ed9bc Ermal Lu?i
log_error("rc.newwanip: Informational is starting {$argument}.");
63 2aa80139 Scott Ullrich
64 67ee1ec5 Ermal Luçi
if(empty($argument)) {
65 7488a9e0 Renato Botelho
	$interface = "wan";
66
	$interface_real = get_real_interface();
67 67ee1ec5 Ermal Luçi
} else {
68 7488a9e0 Renato Botelho
	$interface = convert_real_interface_to_friendly_interface_name($argument);
69
	$interface_real = $argument;
70 de8f0075 Renato Botelho
}
71
72
if(empty($argument))
73
	$curwanip = get_interface_ip();
74
else {
75 7488a9e0 Renato Botelho
	$curwanip = find_interface_ip($interface_real, true);
76
	if($curwanip == "")
77
		$curwanip = get_interface_ip($interface);
78 b1f7e75e Scott Ullrich
}
79
80 5e3ed9bc Ermal Lu?i
log_error("rc.newwanip: on (IP address: {$curwanip}) (interface: {$interface}) (real interface: {$interface_real}).");
81 a8840317 Scott Ullrich
82 40655051 Ermal
if($curwanip == "0.0.0.0" || !is_ipaddr($curwanip)) {
83 7488a9e0 Renato Botelho
	log_error("rc.newwanip: Failed to update {$interface} IP, restarting...");
84 3c3ba8f0 Ermal
	send_event("interface reconfigure {$interface}");
85 7488a9e0 Renato Botelho
	exit;
86 45f2708c Scott Ullrich
}
87
88 9ccecb65 Ermal
if (empty($interface)) {
89
	filter_configure();
90
	restart_packages();
91
	exit;
92
}
93
94 40655051 Ermal
$oldip = "0.0.0.0";
95
if (file_exists("{$g['vardb_path']}/{$interface}_cacheip"))
96
	$oldip = file_get_contents("{$g['vardb_path']}/{$interface}_cacheip");
97
98 166c82ed Chris Buechler
/* regenerate resolv.conf if DNS overrides are allowed */
99 e7ee3bfe Ermal
system_resolvconf_generate(true);
100 0363c100 Scott Ullrich
101
/* write current WAN IP to file */
102 5e3ed9bc Ermal Lu?i
file_put_contents("{$g['vardb_path']}/{$interface}_ip", $curwanip);
103 0363c100 Scott Ullrich
104 b5264f22 Ermal
link_interface_to_vips($interface, "update");
105
106 48484aac Ermal
unset($gre);
107
$gre = link_interface_to_gre($interface);
108
if (!empty($gre))
109
	array_walk($gre, 'interface_gre_configure');
110
unset($gif);
111
$gif = link_interface_to_gif($interface);
112
if (!empty($gif))
113
	array_walk($gif, 'interface_gif_configure');
114
115 ed62880b Ermal
$grouptmp = link_interface_to_group($interface);
116
if (!empty($grouptmp))
117
	array_walk($grouptmp, 'interface_group_add_member');
118
119 9ce0dd12 Ermal
unset($bridgetmp);
120
$bridgetmp = link_interface_to_bridge($interface);
121
if (!empty($bridgetmp))
122
	interface_bridge_add_member($bridgetmp, $interface_real);
123 b5264f22 Ermal
124
/* make new hosts file */
125 c9065c1e Ermal
system_hosts_generate();
126 8614f335 Ermal
127 b5191708 smos
/* check tunneled IPv6 interface tracking */
128
switch($config['interfaces'][$interface]['ipaddrv6']) {
129
	case "6to4":
130 7a04cd20 Ermal
		interface_6to4_configure($interface, $config['interfaces'][$interface]);
131 b5191708 smos
		break;
132
	case "6rd":
133 7a04cd20 Ermal
		interface_6rd_configure($interface, $config['interfaces'][$interface]);
134 b5191708 smos
		break;
135
}
136 b746dc61 Ermal
137 90c386ba jim-p
/* Check Gif tunnels */
138 29bf947e Phil Davis
if(is_array($config['gifs']['gif'])){
139 efb5b9f1 Phil Davis
	foreach($config['gifs']['gif'] as $gif) {
140
		if($gif['if'] == $interface) {
141
			foreach($config['interfaces'] as $ifname => $ifparent) {
142
				// echo "interface $ifparent, ifname $ifname, gif {$gif['gifif']}\n";
143
				if(($ifparent['if'] == $gif['gifif']) && (isset($ifparent['enable']))) {
144
					// echo "Running routing configure for $ifname\n";
145
					$gif['gifif'] = interface_gif_configure($gif);
146
					$confif = convert_real_interface_to_friendly_interface_name($gif['gifif']);
147
					if ($confif <> "")
148
						interface_configure($confif);
149
					system_routing_configure($ifname);
150
				}
151 90c386ba jim-p
			}
152
		}
153
	}
154
}
155
156 ef59836c Ermal
/*
157
 * We need to force sync VPNs on such even when the IP is the same for dynamic interfaces.
158
 * Even with the same IP the VPN software is unhappy with the IP disappearing, and we
159
 * could be failing back in which case we need to switch IPs back anyhow.
160
 */
161
if (!is_ipaddr($oldip) || $curwanip != $oldip || !is_ipaddrv4($config['interfaces'][$interface]['ipaddr'])) {
162
	/* reconfigure static routes (kernel may have deleted them) */
163
	system_routing_configure($interface);
164 69b54cbe smos
165 ef59836c Ermal
	/* reconfigure our gateway monitor */
166
	setup_gateways_monitor();
167 da70dc36 jim-p
168 ef59836c Ermal
	file_put_contents("{$g['vardb_path']}/{$interface}_cacheip", $curwanip);
169
170
	/* perform RFC 2136 DNS update */
171
	services_dnsupdate_process($interface);
172 2c6b0d67 Ermal
173 ef59836c Ermal
	/* signal dyndns update */
174
	services_dyndns_configure($interface);
175 9c4c5e80 jim-p
176 611b65a8 jim-p
	/* reconfigure IPsec tunnels */
177 aa752473 Renato Botelho
	vpn_ipsec_force_reload($interface);
178 611b65a8 jim-p
179
	/* start OpenVPN server & clients */
180 ca7a78d8 jim-p
	if (substr($interface_real, 0, 4) != "ovpn")
181 158f0e7d jim-p
		openvpn_resync_all($interface);
182 611b65a8 jim-p
183 ef59836c Ermal
	/* reload graphing functions */
184
	enable_rrd_graphing();
185 17649c87 Ermal
186 ef59836c Ermal
	/* reload igmpproxy */
187
	services_igmpproxy_configure();
188 0363c100 Scott Ullrich
189 ef59836c Ermal
	/* restart snmp */
190
	services_snmpd_configure();
191 ebbae443 jim-p
192 ef59836c Ermal
	restart_packages();
193
}
194 77901966 Renato Botelho
195 ef59836c Ermal
/* signal filter reload */
196
filter_configure();
197 8f8f9721 Scott Ullrich
198 2c6b0d67 Ermal
?>