diff --git a/net/mdns-repeater/src/etc/rc.syshook.d/carp/50-mdns b/net/mdns-repeater/src/etc/rc.syshook.d/carp/50-mdns new file mode 100644 index 000000000..379f111b7 --- /dev/null +++ b/net/mdns-repeater/src/etc/rc.syshook.d/carp/50-mdns @@ -0,0 +1,74 @@ +#!/usr/local/bin/php + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +require_once("config.inc"); +require_once("util.inc"); +require_once('interfaces.inc'); +require_once("plugins.inc.d/mdnsrepeater.inc"); + +$mdns_repeater = new \OPNsense\MDNSRepeater\MDNSRepeater(); +$mdns_repeater_carp_enabled = + (string)$mdns_repeater->enabled == '1' && + (string)$mdns_repeater->enablecarp == '1'; + +if ($mdns_repeater_carp_enabled) { + $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); + } + + list ($vhid, $iface) = explode('@', $subsystem); + + $friendly_interface = convert_real_interface_to_friendly_interface_name($iface); + $mdns_repeater_interfaces = explode(',', $mdns_repeater->interfaces); + if (!in_array($friendly_interface, $mdns_repeater_interfaces)) { + exit(0); + } + + $backend = new \OPNsense\Core\Backend(); + + switch ($type) { + case 'MASTER': + touch('/var/run/mdns-repeater.CARP_MASTER'); + $backend->configdRun('mdnsrepeater start'); + break; + case 'BACKUP': + @unlink('/var/run/mdns-repeater.CARP_MASTER'); + $backend->configdRun('mdnsrepeater stop'); + break; + } +} diff --git a/net/mdns-repeater/src/opnsense/mvc/app/controllers/OPNsense/MDNSRepeater/forms/general.xml b/net/mdns-repeater/src/opnsense/mvc/app/controllers/OPNsense/MDNSRepeater/forms/general.xml index e6a87140e..d7a8bea2c 100644 --- a/net/mdns-repeater/src/opnsense/mvc/app/controllers/OPNsense/MDNSRepeater/forms/general.xml +++ b/net/mdns-repeater/src/opnsense/mvc/app/controllers/OPNsense/MDNSRepeater/forms/general.xml @@ -1,14 +1,20 @@
diff --git a/net/mdns-repeater/src/opnsense/mvc/app/models/OPNsense/MDNSRepeater/MDNSRepeater.xml b/net/mdns-repeater/src/opnsense/mvc/app/models/OPNsense/MDNSRepeater/MDNSRepeater.xml index 245cc6ebe..b3affd176 100644 --- a/net/mdns-repeater/src/opnsense/mvc/app/models/OPNsense/MDNSRepeater/MDNSRepeater.xml +++ b/net/mdns-repeater/src/opnsense/mvc/app/models/OPNsense/MDNSRepeater/MDNSRepeater.xml @@ -1,12 +1,16 @@