add enablecarp to softether (#2172)

This commit is contained in:
fhloston 2021-10-21 15:28:01 +02:00 committed by GitHub
parent fb050b2849
commit 161ff20d69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 112 additions and 0 deletions

View file

@ -32,6 +32,19 @@ function softether_enabled()
return (string)$model->enabled == '1';
}
function softether_carp_enabled()
{
$model = new \OPNsense\Softether\General();
return (string)$model->enabled == '1' &&
(string)$model->enablecarp == '1';
}
function softether_carp_interfaces()
{
$model = new \OPNsense\Softether\General();
return (string)$model->carpinterfaces;
}
function softether_services()
{
$services = array();

View file

@ -0,0 +1,70 @@
#!/usr/local/bin/php
<?php
/*
* Copyright (C) 2018 Franco Fichtner <franco@opnsense.org>
* Copyright (C) 2004 Scott Ullrich <sullrich@gmail.com>
* 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/softether.inc');
if (softether_carp_enabled()) {
// XXX: carp enable/disable mode
$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 = convert_real_interface_to_friendly_interface_name($iface);
if (!(strpos(softether_carp_interfaces(),$friendly) !== false)) {
exit(0);
}
switch ($type) {
case 'MASTER':
touch('/var/run/softether/CARP_MASTER');
shell_exec('/usr/local/etc/rc.d/softether_server start');
break;
case 'BACKUP':
if (file_exists('/var/run/softether/CARP_MASTER')) {
unlink('/var/run/softether/CARP_MASTER');
}
shell_exec('/usr/local/etc/rc.d/softether_server stop');
break;
}
}

View file

@ -5,4 +5,17 @@
<type>checkbox</type>
<help>This will activate SoftEther vpnserver process.</help>
</field>
<field>
<id>general.enablecarp</id>
<label>Enable CARP Failover</label>
<type>checkbox</type>
<help>This will activate the vpnserver service only on the master device.</help>
</field>
<field>
<id>general.carpinterfaces</id>
<label>Monitored CARP interfaces</label>
<type>select_multiple</type>
<help><![CDATA[Select the interfaces, whose CARP transitions should be monitored.]]></help>
<hint>Type or select interface.</hint>
</field>
</form>

View file

@ -7,5 +7,18 @@
<default>0</default>
<Required>Y</Required>
</enabled>
<enablecarp type="BooleanField">
<default>0</default>
<Required>Y</Required>
</enablecarp>
<carpinterfaces type="InterfaceField">
<Required>N</Required>
<multiple>Y</multiple>
<default></default>
<AllowDynamic>Y</AllowDynamic>
<filters>
<enable>/^(?!0).*$/</enable>
</filters>
</carpinterfaces>
</items>
</model>

View file

@ -1,6 +1,9 @@
{% if helpers.exists('OPNsense.softether.general.enabled') and OPNsense.softether.general.enabled == '1' %}
softether_server_var_script="/usr/local/opnsense/scripts/OPNsense/Softether/setup.sh"
softether_server_enable="YES"
{% if helpers.exists('OPNsense.softether.general.enablecarp') and OPNsense.softether.general.enablecarp == '1' %}
required_files="/var/run/softether/CARP_MASTER"
{% endif %}
{% else %}
softether_server_enable="NO"
{% endif %}