Skip to content

Instantly share code, notes, and snippets.

@ngarafol
Forked from kronenpj/10-wancarp
Created April 24, 2023 23:25
Show Gist options
  • Save ngarafol/a693f8d75f092b18fda6538001ed45c4 to your computer and use it in GitHub Desktop.
Save ngarafol/a693f8d75f092b18fda6538001ed45c4 to your computer and use it in GitHub Desktop.
OpnSense 23.1 - Disable WAN + OPT2 Interfaces during CARP Failover
#!/usr/local/bin/php
<?php
require_once("config.inc");
require_once("system.inc");
require_once("interfaces.inc");
require_once("util.inc");
$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 (!strstr($subsystem, '@')) {
log_error("Carp '$type' event triggered from wrong source '{$subsystem}'");
exit(1);
}
// Add more interfaces that need to be disabled/enabled after a CARP event.
$interfaces = array('wan', 'opt2');
if ($type === "MASTER") {
foreach ($interfaces as $ifkey) {
log_error("enable interface '$ifkey' due CARP event '$type'");
$config['interfaces'][$ifkey]['enable'] = '1';
interfaces_bring_up($ifkey);
interface_configure(false, $ifkey, true, true);
write_config("enable interface '$ifkey' due CARP event '$type'", false);
usleep(200 * 1000);
}
} else {
foreach ($interfaces as $ifkey) {
log_error("disable interface '$ifkey' due CARP event '$type'");
interface_bring_down($ifkey, true);
unset($config['interfaces'][$ifkey]['enable']);
interface_configure(false, $ifkey, true, false);
exec('/sbin/ifconfig ' . escapeshellarg($ifkey) . 'down 2>&1', $ifc, $ret);
write_config("disable interface '$ifkey' due CARP event '$type'", false);
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment