From 2bf2a1c4c9a4ed1c378891e2b0e55edf3ed1a658 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Thu, 26 Jun 2014 12:24:03 -0300 Subject: Fix a regression introduced on 8d6c5f6621 that broke CARP+IP alias --- etc/inc/interfaces.inc | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'etc') 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; } -- cgit v1.1