-
-
Save kronenpj/e90258f12f7a40c4f38a23b609b3288b to your computer and use it in GitHub Desktop.
#!/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); | |
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); | |
} | |
} | |
?> |
Very interesting. I'm glad you got it to work! I need to get back to looking at mine.
Another variant can be found here: https://gist.github.com/tlyakhov/15172db645d01dc67a0b585096f28ab3
I've updated the script with @Blip9575's suggested change. It's working as I need it to on recent versions of Opnsense.
Heya, thanks for this script! It helped me get started on managing my multiple WANs via CARP.
I did run into an issue though, and that is that I have multiple CARP subsystems (one per LAN) and sometimes CARP on one LAN would transition from MASTER to BACKUP or vice versa which would initiate toggling the WAN interfaces. I've spent about the last four hours sorting that out in my own version such that toggling the WAN interfaces only happens once all CARP subsystems are MASTER or BACKUP (or if CARP is disabled/enabled). I also throw some more logging in it so that it makes a little more sense what's happening when it does.
Hope this helps someone!
https://gist.github.com/willjasen/6ae0f47bca36ced2bd52b2fefc2bc21e
Hi Guys, i've posted a question at https://gist.github.com/spali/2da4f23e488219504b2ada12ac59a7dc?permalink_comment_id=5008023#gistcomment-5008023 - i've tried your Script @kronenpj and also the other variant from @willjasen and the one you mentioned here
@kronenpj After removing 'true' from line 36 the script now disconnects the PPPoE connection prior to disabling the WAN interface on 23.7.1_3
interface_bring_down($ifkey);
Thanks again for all your feedback.