summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorErmal <eri@pfsense.org>2014-02-21 13:28:53 +0000
committerErmal <eri@pfsense.org>2014-02-21 13:28:53 +0000
commit080fd00bac29b736a5e1e8e91b9efbb3c3ea8305 (patch)
treea6d8f7272b260378a3055c8913f81e57b22acbc1 /etc
parent9510780ffa41bf1b19989b418e9a356702ba5576 (diff)
downloadpfsense-080fd00bac29b736a5e1e8e91b9efbb3c3ea8305.zip
pfsense-080fd00bac29b736a5e1e8e91b9efbb3c3ea8305.tar.gz
Fixes #2627. When an interface goes down try to shut the RAs and dhcpd6 service on that interface
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/interfaces.inc13
-rw-r--r--etc/inc/services.inc19
2 files changed, 27 insertions, 5 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index 4921b0c..abafa2b 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -1252,6 +1252,7 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
break;
}
+ $track6 = array();
switch ($ifcfg['ipaddrv6']) {
case "slaac":
case "dhcp6":
@@ -1268,6 +1269,7 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
+ $track6 = link_interface_to_track6($interface);
break;
case "6rd":
case "6to4":
@@ -1279,6 +1281,7 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
if ($destroy == true)
pfSense_interface_flags($realif, -IFF_UP);
}
+ $track6 = link_interface_to_track6($interface);
break;
default:
if(does_interface_exist("$realif")) {
@@ -1291,9 +1294,19 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
+ $track6 = link_interface_to_track6($interface);
break;
}
+ if (!empty($track6) && is_array($track6)) {
+ foreach ($track6 as $trackif) {
+ if (!function_exists('services_dhcp_configure'))
+ require_once('services.inc');
+ /* Bring down radvd and dhcp6 on these interfaces */
+ services_dhcpd_configure('inet6', $track6);
+ }
+ }
+
if (file_exists("{$g['tmp_path']}/{$realif}_router"))
$old_router = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router"));
// log_error("Checking for old router states: {$g['tmp_path']}/{$realif}_router = {$old_router}");
diff --git a/etc/inc/services.inc b/etc/inc/services.inc
index 8e9af9e..7f2b6d3 100644
--- a/etc/inc/services.inc
+++ b/etc/inc/services.inc
@@ -42,7 +42,7 @@ define('DYNDNS_PROVIDER_VALUES', 'dnsomatic dyndns dyndns-static dyndns-custom d
define('DYNDNS_PROVIDER_DESCRIPTIONS', 'DNS-O-Matic,DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,No-IP (free),ODS.org,ZoneEdit,Loopia,freeDNS,DNSexit,OpenDNS,Namecheap,HE.net,HE.net (v6),HE.net Tunnelbroker,SelfHost,Route 53,Custom,Custom (v6)');
/* implement ipv6 route advertising deamon */
-function services_radvd_configure() {
+function services_radvd_configure($blacklist = array()) {
global $config, $g;
if ($g['platform'] == 'jail')
@@ -72,6 +72,9 @@ function services_radvd_configure() {
if (!isset($config['interfaces'][$dhcpv6if]['enable']))
continue;
+ /* Do not put in the config an interface which is down */
+ if (isset($blacklist[$dhcpv6if]))
+ continue;
if (!isset($dhcpv6ifconf['ramode']))
$dhcpv6ifconf['ramode'] = $dhcpv6ifconf['mode'];
@@ -210,6 +213,9 @@ function services_radvd_configure() {
continue;
if(!isset($config['interfaces'][$if]['enable']))
continue;
+ /* Do not put in the config an interface which is down */
+ if (isset($blacklist[$if]))
+ continue;
$trackif = $config['interfaces'][$if]['track6-interface'];
if (empty($config['interfaces'][$trackif]))
continue;
@@ -297,7 +303,7 @@ function services_radvd_configure() {
return 0;
}
-function services_dhcpd_configure($family = "all") {
+function services_dhcpd_configure($family = "all", $blacklist = array()) {
global $config, $g;
/* configure DHCPD chroot once */
@@ -325,8 +331,8 @@ function services_dhcpd_configure($family = "all") {
if ($family == "all" || $family == "inet")
services_dhcpdv4_configure();
if ($family == "all" || $family == "inet6") {
- services_dhcpdv6_configure();
- services_radvd_configure();
+ services_dhcpdv6_configure($blacklist);
+ services_radvd_configure($blacklist);
}
}
@@ -895,7 +901,7 @@ EOD;
return 0;
}
-function services_dhcpdv6_configure() {
+function services_dhcpdv6_configure($blacklist = array()) {
global $config, $g;
if($g['services_dhcp_server_enable'] == false)
@@ -946,6 +952,9 @@ function services_dhcpdv6_configure() {
/* we add a fake entry for interfaces that are set to track6 another WAN */
foreach ($Iflist as $ifname) {
+ /* Do not put in the config an interface which is down */
+ if (isset($blacklist[$ifname]))
+ continue;
if (!empty($config['interfaces'][$ifname]['track6-interface'])) {
$realif = get_real_interface($ifname, "inet6");
$ifcfgipv6 = get_interface_ipv6($ifname);
OpenPOWER on IntegriCloud