summaryrefslogtreecommitdiffstats
path: root/etc/rc.newwanipv6
diff options
context:
space:
mode:
authorSeth Mos <seth.mos@dds.nl>2011-05-10 08:42:23 +0000
committerSeth Mos <seth.mos@dds.nl>2011-05-10 08:42:23 +0000
commit1a0b04df2f0b78dd1a448c790e582888497aa6c4 (patch)
tree37ae927bee06598b3a64d3cf4c31fc1a59b88bfd /etc/rc.newwanipv6
parent0d6dedb9effb59e903a9b4e97f70839645a26f65 (diff)
downloadpfsense-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-xetc/rc.newwanipv6145
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();
+
+?>
OpenPOWER on IntegriCloud