diff options
author | Seth Mos <seth.mos@dds.nl> | 2011-05-10 08:42:23 +0000 |
---|---|---|
committer | Seth Mos <seth.mos@dds.nl> | 2011-05-10 08:42:23 +0000 |
commit | 1a0b04df2f0b78dd1a448c790e582888497aa6c4 (patch) | |
tree | 37ae927bee06598b3a64d3cf4c31fc1a59b88bfd /etc/rc.newwanipv6 | |
parent | 0d6dedb9effb59e903a9b4e97f70839645a26f65 (diff) | |
download | pfsense-1a0b04df2f0b78dd1a448c790e582888497aa6c4.zip pfsense-1a0b04df2f0b78dd1a448c790e582888497aa6c4.tar.gz |
Add the new rc.newwanipv6 script. Needs more work. Dhcp6c client does not pass a argument. Always assuming WAN for no
Diffstat (limited to 'etc/rc.newwanipv6')
-rwxr-xr-x | etc/rc.newwanipv6 | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/etc/rc.newwanipv6 b/etc/rc.newwanipv6 new file mode 100755 index 0000000..227b573 --- /dev/null +++ b/etc/rc.newwanipv6 @@ -0,0 +1,145 @@ +#!/usr/local/bin/php -f +<?php +/* + rc.newwanipv6 + Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com) + Copyright (C) 2011 Seth Mos (seth.mos@dds.nl) + part of pfSense (http://www.pfsense.com) + + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("openvpn.inc"); + +// Do not process while booting +if($g['booting']) + exit; + + +/* echo print_r($_ENV, true); +Array +( + [REASON] => NBI + [new_domain_name_servers] => 2001:470:20::2 + [new_domain_name] => domain.nl. +) +*/ + +function restart_packages() { + global $oldip, $curwanipi, $g; + + /* restart packages */ + system_ntp_configure(); + log_error("{$g['product_name']} package system has detected an ip change $oldip -> $curwanip ... Restarting packages."); + mwexec_bg("/etc/rc.start_packages"); +} + +log_error("rc.newwanipv6: Informational is starting."); + +$curwanip = get_interface_ipv6(); +$interface = "wan"; +$interface_real = get_real_interface(); + +log_error("rc.newwanipv6: on (IP address: {$curwanipv6}) (interface: {$interface}) (real interface: {$interface_real})."); + +if($curwanipv6 == "" || !is_ipaddrv6($curwanipv6)) { + log_error("rc.newwanipv6: Failed to update {$interface} IP, restarting..."); + send_event("interface reconfigure {$interface}"); + exit; +} + +if (empty($interface)) { + filter_configure(); + restart_packages(); + exit; +} + +$oldip = ""; +if (file_exists("{$g['vardb_path']}/{$interface}_cacheipv6")) + $oldipv6 = file_get_contents("{$g['vardb_path']}/{$interface}_cacheipv6"); + +$grouptmp = link_interface_to_group($interface); +if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + +/* regenerate resolv.conf if DNS overrides are allowed */ +system_resolvconf_generate(true); + +/* write current WAN IP to file */ +file_put_contents("{$g['vardb_path']}/{$interface}_ipv6", $curwanipv6); + +/* reconfigure static routes (kernel may have deleted them) */ +system_routing_configure($interface); + +/* reconfigure our gateway monitor */ +setup_gateways_monitor(); + +/* signal filter reload */ +filter_configure(); + +if (is_ipaddr($oldipv6) && $curwanipv6 == $oldipv6) { + // Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing. + if (in_array($config['interfaces'][$interface]['ipaddr'], array('pppoe', 'pptp', 'ppp'))) { + /* reconfigure IPsec tunnels */ + vpn_ipsec_force_reload(); + + /* start OpenVPN server & clients */ + openvpn_resync_all($interface); + } + exit; +} + +file_put_contents("{$g['vardb_path']}/{$interface}_cacheipv6", $curwanipv6); + +/* perform RFC 2136 DNS update */ +services_dnsupdate_process($interface); + +/* signal dyndns update */ +services_dyndns_configure($interface); + +/* reconfigure IPsec tunnels */ +vpn_ipsec_force_reload(); + +/* start OpenVPN server & clients */ +if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + +/* reload graphing functions */ +enable_rrd_graphing(); + +/* reload igmpproxy */ +services_igmpproxy_configure(); + +restart_packages(); + +services_rtadvd_configure(); + +?> |