Project

General

Profile

Download (5.21 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php -f
2
<?php
3
/*
4 e7012ec3 Scott Ullrich
        rc.newwanip
5 0363c100 Scott Ullrich
        Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
6
        part of pfSense (http://www.pfsense.com)
7 e7012ec3 Scott Ullrich
8 0363c100 Scott Ullrich
		Originally part of m0n0wall (http://m0n0.ch)
9 e7012ec3 Scott Ullrich
        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 fbaec9eb Scott Ullrich
require_once("rrd.inc");
44 0363c100 Scott Ullrich
45 9e18b392 Scott Ullrich
// Do not process while booting
46
if($g['booting']) 
47
	exit;
48
49 9ccecb65 Ermal
function restart_packages() {
50
	global $oldip, $curwanipi, $g;
51
52
	/* restart packages */
53 90df3bd8 jim-p
	system_ntp_configure(false);
54 10e741d5 jim-p
	mwexec_bg("echo /usr/local/sbin/ntpdate_sync_once.sh | tcsh");
55 9ccecb65 Ermal
	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 85a5da13 Ermal Luçi
    $curwanip = get_interface_ip();
66 1cbc2a1c Scott Ullrich
    $interface = "wan";
67 85a5da13 Ermal Luçi
    $interface_real = get_real_interface();
68 67ee1ec5 Ermal Luçi
} else {
69
        $interface = convert_real_interface_to_friendly_interface_name($argument);
70
        $interface_real = $argument;
71 01f1b601 Ermal
        $curwanip = find_interface_ip($interface_real, true);
72 67ee1ec5 Ermal Luçi
        if($curwanip == "")
73 85a5da13 Ermal Luçi
                $curwanip = get_interface_ip($interface);
74 b1f7e75e Scott Ullrich
}
75
76 5e3ed9bc Ermal Lu?i
log_error("rc.newwanip: on (IP address: {$curwanip}) (interface: {$interface}) (real interface: {$interface_real}).");
77 a8840317 Scott Ullrich
78 40655051 Ermal
if($curwanip == "0.0.0.0" || !is_ipaddr($curwanip)) {
79 ba0be463 Ermal Lu?i
        log_error("rc.newwanip: Failed to update {$interface} IP, restarting...");
80 3c3ba8f0 Ermal
	send_event("interface reconfigure {$interface}");
81 5b4c9c6b Scott Ullrich
        exit;
82 45f2708c Scott Ullrich
}
83
84 9ccecb65 Ermal
if (empty($interface)) {
85
	filter_configure();
86
	restart_packages();
87
	exit;
88
}
89
90 40655051 Ermal
$oldip = "0.0.0.0";
91
if (file_exists("{$g['vardb_path']}/{$interface}_cacheip"))
92
	$oldip = file_get_contents("{$g['vardb_path']}/{$interface}_cacheip");
93
94 dfa766ff Ermal
/* regenerate resolv.conf if DNS overrides are allowed */
95
system_resolvconf_generate(true);
96
97
/* write current WAN IP to file */
98
file_put_contents("{$g['vardb_path']}/{$interface}_ip", $curwanip);
99
100 48484aac Ermal
unset($gre);
101
$gre = link_interface_to_gre($interface);
102
if (!empty($gre))
103
	array_walk($gre, 'interface_gre_configure');
104
unset($gif);
105
$gif = link_interface_to_gif($interface);
106
if (!empty($gif))
107
	array_walk($gif, 'interface_gif_configure');
108
109 ed62880b Ermal
$grouptmp = link_interface_to_group($interface);
110
if (!empty($grouptmp))
111
	array_walk($grouptmp, 'interface_group_add_member');
112
113 737dbc05 Ermal
unset($bridgetmp);
114
$bridgetmp = link_interface_to_bridge($interface);
115
if (!empty($bridgetmp))
116
	interface_bridge_add_member($bridgetmp, $interface_real);
117
118 b746dc61 Ermal
/* reconfigure static routes (kernel may have deleted them) */
119
system_routing_configure($interface);
120
121 01f1b601 Ermal
/* reconfigure our gateway monitor */
122
setup_gateways_monitor();
123
124 2c6b0d67 Ermal
/* signal filter reload */
125
filter_configure();
126
127 9c4c5e80 jim-p
if (is_ipaddr($oldip) && $curwanip == $oldip) {
128
	// Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing.
129
	if (in_array($config['interfaces'][$interface]['ipaddr'], array('pppoe', 'pptp', 'ppp'))) {
130
		/* reconfigure IPsec tunnels */
131
		vpn_ipsec_force_reload();
132
133
		/* start OpenVPN server & clients */
134
		openvpn_resync_all($interface);
135
	}
136 3640c567 Ermal
	exit;
137 9c4c5e80 jim-p
}
138 3640c567 Ermal
139 3d9e9252 Ermal
file_put_contents("{$g['vardb_path']}/{$interface}_cacheip", $curwanip);
140
141 17649c87 Ermal
/* perform RFC 2136 DNS update */
142
services_dnsupdate_process($interface);
143
144 5e3ed9bc Ermal Lu?i
/* signal dyndns update */
145 db8e9e53 Ermal
services_dyndns_configure($interface);
146 0363c100 Scott Ullrich
147 ebbae443 jim-p
/* reconfigure IPsec tunnels */
148
vpn_ipsec_force_reload();
149
150
/* start OpenVPN server & clients */
151 55c51af7 Ermal
if (substr($interface_real, 0, 4) != "ovpn")
152
	openvpn_resync_all($interface);
153 ebbae443 jim-p
154 0363c100 Scott Ullrich
/* reload graphing functions */
155
enable_rrd_graphing();
156
157 f206afb5 Ermal
/* reload igmpproxy */
158
services_igmpproxy_configure();
159
160 9ccecb65 Ermal
restart_packages();
161 8f8f9721 Scott Ullrich
162 2c6b0d67 Ermal
?>