commit 783fd77f185a5e260ee76e35ec2816604c0fda4c (HEAD -> master, pfSense/master, pfSense/HEAD)
Author: Florian Apolloner <florian@apolloner.eu>
Date: Mon Jul 13 16:24:38 2026 -0600
DHCP Relay: Correct VIP check for CARP events. Fix #15017
Co-authored-by: Marcos Mendoza <mmendoza@netgate.com>
diff --git a/src/etc/rc.carpbackup b/src/etc/rc.carpbackup
index a772e54486..a694f31b77 100755
--- a/src/etc/rc.carpbackup
+++ b/src/etc/rc.carpbackup
@@ -118,16 +118,27 @@ if ($rafound) {
/* Reconfigure DHCP Relay when necessary */
if (config_path_enabled('dhcrelay') &&
- (config_get_path('dhcrelay/carpstatusvip') == "_vip{$vip['uniqid']}")) {
- logger(LOG_NOTICE, localize_text("Stopping DHCP Relay service because of transition to CARP backup."), LOG_PREFIX_HA);
- services_dhcrelay_configure();
+ ($dhcrelay_carpvip = config_get_path('dhcrelay/carpstatusvip'))) {
+ foreach ($vips as $vip) {
+ if ($dhcrelay_carpvip == "_vip{$vip['uniqid']}") {
+ logger(LOG_NOTICE, localize_text("Stopping DHCP Relay service because of transition to CARP backup."), LOG_PREFIX_HA);
+ services_dhcrelay_configure();
+ break;
+ }
+ }
}
/* Reconfigure DHCPv6 Relay when necessary */
if (config_path_enabled('dhcrelay6') &&
- (config_get_path('dhcrelay6/carpstatusvip') == "_vip{$vip['uniqid']}")) {
- logger(LOG_NOTICE, localize_text("Stopping DHCPv6 Relay service because of transition to CARP backup."), LOG_PREFIX_HA);
- services_dhcrelay6_configure();
+ ($dhcrelay_carpvip = config_get_path('dhcrelay6/carpstatusvip'))) {
+ foreach ($vips as $vip) {
+ if ($dhcrelay_carpvip == "_vip{$vip['uniqid']}") {
+ logger(LOG_NOTICE, localize_text("Stopping DHCPv6 Relay service because of transition to CARP backup."), LOG_PREFIX_HA);
+ services_dhcrelay6_configure();
+ break;
+ }
+ }
+
}
$pluginparams = array();
diff --git a/src/etc/rc.carpmaster b/src/etc/rc.carpmaster
index ec6cd6dc41..1f9fe448e7 100755
--- a/src/etc/rc.carpmaster
+++ b/src/etc/rc.carpmaster
@@ -119,16 +119,27 @@ if ($rafound) {
/* Reconfigure DHCP Relay when necessary */
if (config_path_enabled('dhcrelay') &&
- (config_get_path('dhcrelay/carpstatusvip') == "_vip{$vip['uniqid']}")) {
- logger(LOG_NOTICE, localize_text("Starting DHCP Relay service because of transition to CARP master."), LOG_PREFIX_HA);
- services_dhcrelay_configure();
+ ($dhcrelay_carpvip = config_get_path('dhcrelay/carpstatusvip'))) {
+ foreach ($vips as $vip) {
+ if ($dhcrelay_carpvip == "_vip{$vip['uniqid']}") {
+ logger(LOG_NOTICE, localize_text("Starting DHCP Relay service because of transition to CARP master."), LOG_PREFIX_HA);
+ services_dhcrelay_configure();
+ break;
+ }
+ }
}
/* Reconfigure DHCPv6 Relay when necessary */
if (config_path_enabled('dhcrelay6') &&
- (config_get_path('dhcrelay6/carpstatusvip') == "_vip{$vip['uniqid']}")) {
- logger(LOG_NOTICE, localize_text("Starting DHCPv6 Relay service because of transition to CARP master."), LOG_PREFIX_HA);
- services_dhcrelay6_configure();
+ ($dhcrelay_carpvip = config_get_path('dhcrelay6/carpstatusvip'))) {
+ foreach ($vips as $vip) {
+ if ($dhcrelay_carpvip == "_vip{$vip['uniqid']}") {
+ logger(LOG_NOTICE, localize_text("Starting DHCPv6 Relay service because of transition to CARP master."), LOG_PREFIX_HA);
+ services_dhcrelay6_configure();
+ break;
+ }
+ }
+
}
/* Reconfigure captive portal when necessary :