From 5b9847e80a273604958679c02ed0d9554f083a2b Mon Sep 17 00:00:00 2001 From: Vezpi Date: Wed, 3 Jun 2026 19:37:31 +0000 Subject: [PATCH] add: 10-wan CARP script --- opnsense/10-wan | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 opnsense/10-wan diff --git a/opnsense/10-wan b/opnsense/10-wan new file mode 100644 index 0000000..69337cd --- /dev/null +++ b/opnsense/10-wan @@ -0,0 +1,64 @@ +#!/usr/local/bin/php +@ +if (!preg_match('/^[a-z0-9_]+@\S+$/i', $subsystem)) { + log_error("Malformed subsystem argument: '{$subsystem}'."); + exit(0); +} + +// Only react to the primary VHID +if (!preg_match('/@' . preg_quote($primary_vhid, '/') . '$/', $subsystem)) { + exit(0); // ignore events from other VHIDs +} + +// Interface key to manage +$ifkey = 'wan'; +// Determine whether WAN interface is currently enabled +$ifkey_enabled = !empty($config['interfaces'][$ifkey]['enable']) ? true : false; + +// MASTER event +if ($type === "MASTER") { + // Enable WAN only if it's currently disabled + if (!$ifkey_enabled) { + log_msg("CARP event: switching to '$type', enabling interface '$ifkey'.", LOG_WARNING); + $config['interfaces'][$ifkey]['enable'] = '1'; + write_config("enable interface '$ifkey' due CARP event '$type'", false); + interface_configure(false, $ifkey, false, false); + } else { + log_msg("CARP event: already '$type' for interface '$ifkey', nothing to do."); + } + +// BACKUP event +} else { + // Disable WAN only if it's currently enabled + if ($ifkey_enabled) { + log_msg("CARP event: switching to '$type', disabling interface '$ifkey'.", LOG_WARNING); + unset($config['interfaces'][$ifkey]['enable']); + write_config("disable interface '$ifkey' due CARP event '$type'", false); + interface_configure(false, $ifkey, false, false); + } else { + log_msg("CARP event: already '$type' for interface '$ifkey', nothing to do."); + } +} \ No newline at end of file