summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2014-05-21 14:21:57 -0300
committerRenato Botelho <garga@FreeBSD.org>2014-05-21 14:22:11 -0300
commit8d6c5f6621417861cbf656ff867e03da3cef7926 (patch)
treede9954407ff21475ab3c0102dde73926e536bee8
parent38f6f50a84e78eddbe4d639914422789ad0057d5 (diff)
downloadpfsense-8d6c5f6621417861cbf656ff867e03da3cef7926.zip
pfsense-8d6c5f6621417861cbf656ff867e03da3cef7926.tar.gz
Delete all ip aliases when interface is disabled, it should fix #3650
-rw-r--r--etc/inc/interfaces.inc28
1 files changed, 21 insertions, 7 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index c152e55..9310f49 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -1241,6 +1241,7 @@ 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)
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
@@ -1249,6 +1250,7 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg =
default:
if(does_interface_exist("$realif")) {
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true);
+ interface_ipalias_cleanup($interface);
if ($destroy == true)
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
@@ -1269,6 +1271,7 @@ 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)
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
@@ -1282,6 +1285,7 @@ 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)
pfSense_interface_flags($realif, -IFF_UP);
}
@@ -1294,6 +1298,7 @@ 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)
pfSense_interface_flags($realif, -IFF_UP);
mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a");
@@ -2093,13 +2098,22 @@ function interfaces_vips_configure($interface = "") {
}
function interface_ipalias_configure(&$vip) {
- if ($vip['mode'] == "ipalias") {
- $if = get_real_interface($vip['interface']);
- $af = "inet";
- if(is_ipaddrv6($vip['subnet']))
- $af = "inet6";
- mwexec("/sbin/ifconfig " . escapeshellarg($if) ." {$af} ". escapeshellarg($vip['subnet']) ."/" . escapeshellarg($vip['subnet_bits']) . " alias");
- }
+ global $config;
+
+ if ($vip['mode'] != "ipalias")
+ return;
+
+ 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";
+ mwexec("/sbin/ifconfig " . escapeshellarg($if) ." {$af} ". escapeshellarg($vip['subnet']) ."/" . escapeshellarg($vip['subnet_bits']) . " alias");
}
function interface_reload_carps($cif) {
OpenPOWER on IntegriCloud