diff --git a/net/relayd/Makefile b/net/relayd/Makefile index fd096396f..f049880a5 100644 --- a/net/relayd/Makefile +++ b/net/relayd/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= relayd -PLUGIN_VERSION= 1.0 +PLUGIN_VERSION= 1.1 PLUGIN_DEPENDS= relayd PLUGIN_COMMENT= Relayd Load Balancer PLUGIN_MAINTAINER= franco@opnsense.org diff --git a/net/relayd/src/etc/inc/plugins.inc.d/relayd.inc b/net/relayd/src/etc/inc/plugins.inc.d/relayd.inc index 474ef00c1..a897cebea 100644 --- a/net/relayd/src/etc/inc/plugins.inc.d/relayd.inc +++ b/net/relayd/src/etc/inc/plugins.inc.d/relayd.inc @@ -284,6 +284,11 @@ function relayd_configure_do($kill_first = false) if (isset($vs_a[$i]['sitedown']) && strlen($vs_a[$i]['sitedown']) > 0 && ($vs_a[$i]['relay_protocol'] != 'dns')) { $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$lbmode} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; } + + if (isset($vs_a[$i]['sessiontimeout'])) { + $conf .= " session timeout {$vs_a[$i]['sessiontimeout']} \n"; + } + $conf .= "}\n"; } else { // redirect mode @@ -300,6 +305,10 @@ function relayd_configure_do($kill_first = false) $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$check_a[$pools[$vs_a[$i]['sitedown']]['monitor']]} \n"; } + if (isset($vs_a[$i]['sessiontimeout'])) { + $conf .= " session timeout {$vs_a[$i]['sessiontimeout']} \n"; + } + $conf .= "}\n"; } } diff --git a/net/relayd/src/www/load_balancer_virtual_server_edit.php b/net/relayd/src/www/load_balancer_virtual_server_edit.php index d23dd78b1..c6f88f5a8 100644 --- a/net/relayd/src/www/load_balancer_virtual_server_edit.php +++ b/net/relayd/src/www/load_balancer_virtual_server_edit.php @@ -41,7 +41,7 @@ if (empty($config['load_balancer']['virtual_server']) || !is_array($config['load $a_vs = &$config['load_balancer']['virtual_server']; -$copy_fields=array('name', 'descr', 'poolname', 'port', 'sitedown', 'ipaddr', 'mode', 'relay_protocol'); +$copy_fields=array('name', 'descr', 'poolname', 'port', 'sitedown', 'ipaddr', 'mode', 'relay_protocol', 'sessiontimeout'); if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (isset($_GET['id']) && !empty($a_vs[$_GET['id']])) { $id = $_GET['id']; @@ -100,16 +100,27 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $input_errors[] = gettext("You cannot select a Fall Back Pool when using the DNS relay protocol."); } + if (isset($pconfig['sessiontimeout']) && $pconfig['sessiontimeout'] !== '' && + ((string)((int)$pconfig['sessiontimeout']) != $pconfig['sessiontimeout'] || + $pconfig['sessiontimeout'] < 1 || $pconfig['sessiontimeout'] > 2147483647)) { + $input_errors[] = gettext('The session timeout must be a number greater than zero or left blank.'); + } + if (count($input_errors) == 0) { $vsent = array(); foreach ($copy_fields as $fieldname) { $vsent[$fieldname] = $pconfig[$fieldname]; } - if ($vsent['sitedown'] == "") { + if ($vsent['sitedown'] == '') { unset($vsent['sitedown']); } + if ($vsent['sessiontimeout'] == '') { + unset($vsent['sessiontimeout']); + } else { + $vsent['sessiontimeout'] = (int)$vsent['sessiontimeout']; + } if ($vsent['mode'] != 'relay'){ - // relay protocol only applies to relay + /* relay protocol only applies to relay */ unset($vsent['relay_protocol']); } @@ -314,6 +325,15 @@ include("head.inc");