From a01f8bfc0a48d2cba3ddec79e2ef18a632590047 Mon Sep 17 00:00:00 2001 From: Ermal Date: Tue, 10 Sep 2013 09:10:06 +0000 Subject: [PATCH] Correctly check the secondary/primary parameter setting on dhcp failover configuration --- etc/inc/services.inc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/etc/inc/services.inc b/etc/inc/services.inc index e6bd51be37..84da081ef0 100644 --- a/etc/inc/services.inc +++ b/etc/inc/services.inc @@ -440,9 +440,7 @@ EOD; continue; if($dhcpifconf['failover_peerip'] <> "") { - $int = guess_interface_from_ip($dhcpifconf['failover_peerip']); - $intip = find_interface_ip($int); - $real_dhcpif = convert_friendly_interface_to_real_interface_name($dhcpif); + $intip = get_interface_ip($dhcpif); /* * yep, failover peer is defined. * does it match up to a defined vip? @@ -450,10 +448,15 @@ EOD; $skew = 110; if(is_array($config['virtualip']['vip'])) { foreach ($config['virtualip']['vip'] as $vipent) { - if($vipent['subnet'] == $intip) { - /* this is the interface! */ - if(is_numeric($vipent['advskew']) && ($vipent['advskew'] < "20")) - $skew = 0; + if($vipent['interface'] == $dhcpif) { + $carp_nw = gen_subnet($vipent['subnet'], $vipent['subnet_bits']); + if (ip_in_subnet($dhcpifconf['failover_peerip'], "{$carp_nw}/{$vipent['subnet_bits']}")) { + /* this is the interface! */ + if(is_numeric($vipent['advskew']) && (intval($vipent['advskew']) < 20)) { + $skew = 0; + break; + } + } } } } else { @@ -471,6 +474,8 @@ EOD; $dhcpdconf_pri = "split 128;\n"; $dhcpdconf_pri .= " mclt 600;\n"; } + + if (is_ipaddrv4($intip)) { $dhcpdconf .= <<