diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 10bab38290..cca7862099 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -1346,6 +1346,25 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg = return; } +function interfaces_carp_set_maintenancemode($carp_maintenancemode){ + global $config; + if (isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == false) { + unset($config["virtualip_carp_maintenancemode"]); + write_config("Leave CARP maintenance mode"); + } else + if (!isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == true) { + $config["virtualip_carp_maintenancemode"] = true; + write_config("Enter CARP maintenance mode"); + } + + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") { + interface_carp_configure($vip); + } + } +} + function interfaces_ptpid_used($ptpid) { global $config; @@ -2174,7 +2193,13 @@ function interface_carp_configure(&$vip) { if (!empty($vip['advbase'])) $advbase = "advbase " . escapeshellarg($vip['advbase']); - mwexec("/sbin/ifconfig {$realif} vhid " . escapeshellarg($vip['vhid']) . " advskew " . escapeshellarg($vip['advskew']) . " {$advbase} {$password}"); + $carp_maintenancemode = isset($config["virtualip_carp_maintenancemode"]); + if ($carp_maintenancemode) + $advskew = "advskew 254"; + else + $advskew = "advskew " . escapeshellarg($vip['advskew']); + + mwexec("/sbin/ifconfig {$realif} vhid " . escapeshellarg($vip['vhid']) . " {$advskew} {$advbase} {$password}"); if (is_ipaddrv4($vip['subnet'])) mwexec("/sbin/ifconfig {$realif} " . escapeshellarg($vip['subnet']) . "/" . escapeshellarg($vip['subnet_bits']) . " alias vhid " . escapeshellarg($vip['vhid'])); diff --git a/usr/local/www/carp_status.php b/usr/local/www/carp_status.php index b6ce91467f..26dbc5c986 100644 --- a/usr/local/www/carp_status.php +++ b/usr/local/www/carp_status.php @@ -39,6 +39,7 @@ */ require_once("guiconfig.inc"); +require_once("globals.inc"); function gentitle_pkg($pgname) { global $config; @@ -50,6 +51,9 @@ unset($carp_interface_count_cache); unset($interface_ip_arr_cache); $status = get_carp_status(); +if($_POST['carp_maintenancemode'] <> "") { + interfaces_carp_set_maintenancemode(!isset($config["virtualip_carp_maintenancemode"])); +} if($_POST['disablecarp'] <> "") { if($status == true) { mwexec("/sbin/sysctl net.inet.carp.allow=0"); @@ -116,7 +120,12 @@ include("head.inc"); echo ""; } else { $carp_enabled = true; - echo ""; + echo ""; + } + if(isset($config["virtualip_carp_maintenancemode"])) { + echo ""; + } else { + echo ""; } } ?>