summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2014-06-26 12:24:03 -0300
committerRenato Botelho <garga@FreeBSD.org>2014-06-26 12:24:03 -0300
commit2bf2a1c4c9a4ed1c378891e2b0e55edf3ed1a658 (patch)
tree530283960eee429298e2d314c43196c1bb2cc395
parentefac3a1346867481d6cfcea62c131ad0c0de391b (diff)
downloadpfsense-2bf2a1c4c9a4ed1c378891e2b0e55edf3ed1a658.zip
pfsense-2bf2a1c4c9a4ed1c378891e2b0e55edf3ed1a658.tar.gz
Fix a regression introduced on 8d6c5f6621 that broke CARP+IP alias
-rw-r--r--etc/inc/interfaces.inc45
1 files changed, 30 insertions, 15 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index 6be3e27..6ece099 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -1241,18 +1241,20 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
unlink_if_exists("{$g['varetc_path']}/dhclient_{$interface}.conf");
if(does_interface_exist("$realif")) {
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true);
- interface_ipalias_cleanup($interface);
- if ($destroy == true)
+ if ($destroy == true) {
+ interface_ipalias_cleanup($interface);
pfSense_interface_flags($realif, -IFF_UP);
+ }
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
break;
default:
if(does_interface_exist("$realif")) {
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true);
- interface_ipalias_cleanup($interface);
- if ($destroy == true)
+ if ($destroy == true) {
+ interface_ipalias_cleanup($interface);
pfSense_interface_flags($realif, -IFF_UP);
+ }
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
break;
@@ -1271,9 +1273,10 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
$ip6 = find_interface_ipv6($realifv6);
if (is_ipaddrv6($ip6) && $ip6 != "::")
mwexec("/sbin/ifconfig " . escapeshellarg($realifv6) . " inet6 {$ip6} delete", true);
- interface_ipalias_cleanup($interface, "inet6");
- if ($destroy == true)
+ if ($destroy == true) {
+ interface_ipalias_cleanup($interface, "inet6");
pfSense_interface_flags($realif, -IFF_UP);
+ }
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
$track6 = link_interface_to_track6($interface);
@@ -1285,9 +1288,10 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
$ip6 = get_interface_ipv6($interface);
if (is_ipaddrv6($ip6))
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true);
- interface_ipalias_cleanup($interface, "inet6");
- if ($destroy == true)
+ if ($destroy == true) {
+ interface_ipalias_cleanup($interface, "inet6");
pfSense_interface_flags($realif, -IFF_UP);
+ }
}
$track6 = link_interface_to_track6($interface);
break;
@@ -1298,9 +1302,10 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true);
if (!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6']))
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ifcfg['ipaddrv6']} delete", true);
- interface_ipalias_cleanup($interface, "inet6");
- if ($destroy == true)
+ if ($destroy == true) {
+ interface_ipalias_cleanup($interface, "inet6");
pfSense_interface_flags($realif, -IFF_UP);
+ }
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
}
$track6 = link_interface_to_track6($interface);
@@ -2104,13 +2109,16 @@ function interface_ipalias_configure(&$vip) {
if ($vip['mode'] != "ipalias")
return;
- if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']]))
- return;
+ $if = get_real_interface($vip['interface']);
- if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']]['enable']))
- return;
+ if ($vip['interface'] != 'lo0' && stristr($if, "_vip") === false) {
+ if (!isset($config['interfaces'][$vip['interface']]))
+ return;
+
+ if (!isset($config['interfaces'][$vip['interface']]['enable']))
+ return;
+ }
- $if = get_real_interface($vip['interface']);
$af = "inet";
if(is_ipaddrv6($vip['subnet']))
$af = "inet6";
@@ -2221,6 +2229,13 @@ function interface_carp_configure(&$vip) {
interfaces_bring_up($vipif);
+ if (isset($config['virtualip']['vip']) && is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as &$vip_alias) {
+ if ($vip_alias['interface'] == $vipif)
+ interface_ipalias_configure($vip_alias);
+ }
+ }
+
return $vipif;
}
OpenPOWER on IntegriCloud