From 76c8c7eba1b49b1a98e16b2cc8f5305f0bc9fda6 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 13 Nov 2020 17:05:31 +0100 Subject: [PATCH] FRR: change existing carp event to signal frr carp event handler when not using the start/stop carp option (only active when in master mode). for https://github.com/opnsense/plugins/issues/2091 --- net/frr/src/etc/rc.syshook.d/carp/50-frr | 46 ++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/net/frr/src/etc/rc.syshook.d/carp/50-frr b/net/frr/src/etc/rc.syshook.d/carp/50-frr index 0c9841529..05c8c0e8d 100755 --- a/net/frr/src/etc/rc.syshook.d/carp/50-frr +++ b/net/frr/src/etc/rc.syshook.d/carp/50-frr @@ -32,29 +32,31 @@ require_once('config.inc'); require_once('util.inc'); require_once('plugins.inc.d/frr.inc'); -if (!frr_carp_enabled()) { - /* nothing to do */ - exit(0); -} +if (frr_carp_enabled()) { + // XXX: carp enable/disable mode + $subsystem = !empty($argv[1]) ? $argv[1] : ''; + $type = !empty($argv[2]) ? $argv[2] : ''; -$subsystem = !empty($argv[1]) ? $argv[1] : ''; -$type = !empty($argv[2]) ? $argv[2] : ''; + if ($type != 'MASTER' && $type != 'BACKUP') { + log_error("Carp '$type' event unknown from source '{$subsystem}'"); + exit(1); + } -if ($type != 'MASTER' && $type != 'BACKUP') { - log_error("Carp '$type' event unknown from source '{$subsystem}'"); - exit(1); -} + if (!strstr($subsystem, '@')) { + log_error("Carp '$type' event triggered from wrong source '{$subsystem}'"); + exit(1); + } -if (!strstr($subsystem, '@')) { - log_error("Carp '$type' event triggered from wrong source '{$subsystem}'"); - exit(1); -} - -switch ($type) { - case 'MASTER': - shell_exec('/usr/local/etc/rc.d/frr start'); - break; - case 'BACKUP': - shell_exec('/usr/local/etc/rc.d/frr stop'); - break; + switch ($type) { + case 'MASTER': + shell_exec('/usr/local/etc/rc.d/frr start'); + break; + case 'BACKUP': + shell_exec('/usr/local/etc/rc.d/frr stop'); + break; + } +} elseif (frr_enabled()) { + // XXX: when not toggling between active and disabled, pass event so underlaying protocols can + // determine which actions to perform when reaching a certain state. + shell_exec('/usr/local/opnsense/scripts/frr/carp_event_handler'); }