diff --git a/net/relayd/Makefile b/net/relayd/Makefile
index c2b1ecb6f..9d050f298 100644
--- a/net/relayd/Makefile
+++ b/net/relayd/Makefile
@@ -1,5 +1,5 @@
PLUGIN_NAME= relayd
-PLUGIN_VERSION= 2.1
+PLUGIN_VERSION= 2.2
PLUGIN_DEPENDS= relayd
PLUGIN_COMMENT= Relayd Load Balancer
PLUGIN_MAINTAINER= frank.brendel@eurolog.com
diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php
index 04cd42736..0869cd1ea 100644
--- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php
+++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php
@@ -151,6 +151,11 @@ class SettingsController extends ApiControllerBase
$relaydInfo[$nodeType]['backuptransport_tablemode']
);
}
+ if ($relaydInfo[$nodeType]['transport_type'] == 'route' &&
+ empty($relaydInfo[$nodeType]['routing_interface'])) {
+ $result['validations']['relayd.virtualserver.routing_interface'] =
+ gettext('Routing interface cannot be empty');
+ }
}
if ($relaydInfo[$nodeType]['type'] == 'relay') {
if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') {
diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/forms/virtualserver.xml b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/forms/virtualserver.xml
index 20d7a6c90..66636718d 100644
--- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/forms/virtualserver.xml
+++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/forms/virtualserver.xml
@@ -70,6 +70,15 @@
true
+
+ relayd.virtualserver.routing_interface
+
+ dropdown
+
+
+ true
+
relayd.virtualserver.transport_table
diff --git a/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Relayd.xml b/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Relayd.xml
index dbc3b4518..1a307965f 100644
--- a/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Relayd.xml
+++ b/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Relayd.xml
@@ -1,6 +1,6 @@
//OPNsense/relayd
- 1.0.0
+ 1.0.1
Relayd settings
@@ -181,6 +181,14 @@
Route
+
+ N
+ N
+
+ /^(?!0).*$/
+ /^((?!dhcp).)*$/
+
+
diff --git a/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt b/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt
index 8b9f56056..2e6209b5e 100644
--- a/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt
+++ b/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt
@@ -107,9 +107,11 @@ POSSIBILITY OF SUCH DAMAGE.
// show/hide options depending on other options
function ShowHideVSFields(){
var servertype = $('#relayd\\.virtualserver\\.type').val();
+ var transport_type = $('#relayd\\.virtualserver\\.transport_type').val();
var backuptransport_table = $('#relayd\\.virtualserver\\.backuptransport_table').val();
$('tr[id="row_relayd.virtualserver.transport_type"]').addClass('hidden');
+ $('tr[id="row_relayd.virtualserver.routing_interface"]').addClass('hidden');
$('tr[id="row_relayd.virtualserver.stickyaddress"]').addClass('hidden');
$('tr[id="row_relayd.virtualserver.protocol"]').addClass('hidden');
$('tr[id="row_relayd.virtualserver.backuptransport_tablemode"]').addClass('hidden');
@@ -121,6 +123,9 @@ POSSIBILITY OF SUCH DAMAGE.
if(servertype == 'redirect'){
$('tr[id="row_relayd.virtualserver.transport_type"]').removeClass('hidden');
+ if(transport_type == 'route'){
+ $('tr[id="row_relayd.virtualserver.routing_interface"]').removeClass('hidden');
+ }
$('tr[id="row_relayd.virtualserver.stickyaddress"]').removeClass('hidden');
$('#relayd\\.virtualserver\\.transport_tablemode').append('');
$('#relayd\\.virtualserver\\.backuptransport_tablemode').append('');
@@ -152,6 +157,7 @@ POSSIBILITY OF SUCH DAMAGE.
};
$('#DialogEditVirtualServer').on('shown.bs.modal', function() {ShowHideVSFields();});
$('#relayd\\.virtualserver\\.type').on('changed.bs.select', function(e) {ShowHideVSFields();});
+ $('#relayd\\.virtualserver\\.transport_type').on('changed.bs.select', function(e) {ShowHideVSFields();});
$('#relayd\\.virtualserver\\.backuptransport_table').on('changed.bs.select', function(e) {ShowHideVSFields();});
function ShowHideTCFields(){
diff --git a/net/relayd/src/opnsense/service/templates/OPNsense/Relayd/relayd.conf b/net/relayd/src/opnsense/service/templates/OPNsense/Relayd/relayd.conf
index 47a1b9816..34d0a2566 100644
--- a/net/relayd/src/opnsense/service/templates/OPNsense/Relayd/relayd.conf
+++ b/net/relayd/src/opnsense/service/templates/OPNsense/Relayd/relayd.conf
@@ -64,6 +64,9 @@ disable
{% set transport_type = 'forward' %}
{% if virtualserver.type == 'redirect' %}
{% set transport_type = virtualserver.transport_type %}
+{% if virtualserver.transport_type == 'route' %}
+{% set routing_interface = " interface " ~ virtualserver.routing_interface %}
+{% endif %}
{% endif %}
{% set table = helpers.getUUID(virtualserver.transport_table) %}
{% set tablecheck = helpers.getUUID(virtualserver.transport_tablecheck) %}
@@ -97,7 +100,7 @@ disable
{% set port = " port " ~ virtualserver.transport_port if virtualserver.transport_port is defined %}
{% set timeout = " timeout " ~ virtualserver.transport_timeout if virtualserver.transport_timeout is defined %}
{% set interval = " interval " ~ virtualserver.transport_interval if virtualserver.transport_interval is defined %}
-{{ transport_type }} to <{{ table.name }}>{{ port }} mode {{ virtualserver.transport_tablemode }}{{ timeout }} {{ interval }} {{ _tablecheck }}
+{{ transport_type }} to <{{ table.name }}>{{ port }} mode {{ virtualserver.transport_tablemode }}{{ timeout }} {{ interval }} {{ _tablecheck }} {{ routing_interface }}
{% if virtualserver.backuptransport_table is defined and virtualserver.transport_type == 'forward' %}
{% set backuptable = helpers.getUUID(virtualserver.backuptransport_table) %}
{% set backuptablecheck = helpers.getUUID(virtualserver.backuptransport_tablecheck) if virtualserver.backuptransport_tablecheck is defined %}