From b27b732ce4369bc76a798322b4fbe96e1ff0e72c Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Tue, 3 Feb 2026 17:46:14 +0100 Subject: [PATCH] net/haproxy: full support for table names in conditions --- .../app/models/OPNsense/HAProxy/HAProxy.xml | 5 - .../templates/OPNsense/HAProxy/haproxy.conf | 91 ++++++++++++++++--- 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml index f13fea00a..649488990 100644 --- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml +++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml @@ -2974,7 +2974,6 @@ track-sc0 track-sc1 track-sc2 - track-sc unset-var use-service wait-for-body @@ -3024,7 +3023,6 @@ track-sc0 track-sc1 track-sc2 - track-sc unset-var wait-for-body @@ -3058,7 +3056,6 @@ connection set-var connection set-var-fmt connection silent-drop - connection track-sc connection track-sc0 connection track-sc1 connection track-sc2 @@ -3089,7 +3086,6 @@ content set-var-fmt content silent-drop content switch-mode - content track-sc content track-sc0 content track-sc1 content track-sc2 @@ -3116,7 +3112,6 @@ session set-var session set-var-fmt session silent-drop - session track-sc session track-sc0 session track-sc1 session track-sc2 diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf index e0219c90c..91f86577f 100644 --- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf +++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf @@ -565,9 +565,19 @@ {% do acl_options.append(acl_data.src) %} {% endif %} {% elif acl_data.expression == 'src_bytes_in_rate' %} -{% do acl_options.append('src_bytes_in_rate ' ~ acl_data.src_bytes_in_rate_comparison ~ ' ' ~ acl_data.src_bytes_in_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ') ' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_bytes_in_rate' ~ table_data ~ acl_data.src_bytes_in_rate_comparison ~ ' ' ~ acl_data.src_bytes_in_rate) %} {% elif acl_data.expression == 'src_bytes_out_rate' %} -{% do acl_options.append('src_bytes_out_rate ' ~ acl_data.src_bytes_out_rate_comparison ~ ' ' ~ acl_data.src_bytes_out_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ') ' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_bytes_out_rate' ~ table_data ~ acl_data.src_bytes_out_rate_comparison ~ ' ' ~ acl_data.src_bytes_out_rate) %} {% elif acl_data.expression == 'src_clr_gpc' %} {% if acl_data.gpc_number|default("") != "" and acl_data.src_clr_gpc|default("") != "" %} {% if acl_data.table_name|default("") != "" %} @@ -581,11 +591,26 @@ # ERROR: missing parameters {% endif %} {% elif acl_data.expression == 'src_conn_cnt' %} -{% do acl_options.append('src_conn_cnt ' ~ acl_data.src_conn_cnt_comparison ~ ' ' ~ acl_data.src_conn_cnt) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ') ' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_conn_cnt' ~ table_data ~ acl_data.src_conn_cnt_comparison ~ ' ' ~ acl_data.src_conn_cnt) %} {% elif acl_data.expression == 'src_conn_cur' %} -{% do acl_options.append('src_conn_cur ' ~ acl_data.src_conn_cur_comparison ~ ' ' ~ acl_data.src_conn_cur) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ') ' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_conn_cur' ~ table_data ~ acl_data.src_conn_cur_comparison ~ ' ' ~ acl_data.src_conn_cur) %} {% elif acl_data.expression == 'src_conn_rate' %} -{% do acl_options.append('src_conn_rate ' ~ acl_data.src_conn_rate_comparison ~ ' ' ~ acl_data.src_conn_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ') ' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_conn_rate' ~ table_data ~ acl_data.src_conn_rate_comparison ~ ' ' ~ acl_data.src_conn_rate) %} {% elif acl_data.expression == 'src_get_gpc' %} {% if acl_data.gpc_number|default("") != "" and acl_data.src_get_gpc|default("") != "" %} {% if acl_data.table_name|default("") != "" %} @@ -647,9 +672,19 @@ # ERROR: missing parameters {% endif %} {% elif acl_data.expression == 'src_http_err_cnt' %} -{% do acl_options.append('src_http_err_cnt ' ~ acl_data.src_http_err_cnt_comparison ~ ' ' ~ acl_data.src_http_err_cnt) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_http_err_cnt' ~ table_data ~ ' ' ~ acl_data.src_http_err_cnt_comparison ~ ' ' ~ acl_data.src_http_err_cnt) %} {% elif acl_data.expression == 'src_http_err_rate' %} -{% do acl_options.append('src_http_err_rate ' ~ acl_data.src_http_err_rate_comparison ~ ' ' ~ acl_data.src_http_err_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_http_err_rate' ~ tabel_data ~ ' ' ~ acl_data.src_http_err_rate_comparison ~ ' ' ~ acl_data.src_http_err_rate) %} {% elif acl_data.expression == 'src_http_fail_cnt' %} {% if acl_data.src_http_fail_cnt|default("") != "" %} {% if acl_data.table_name|default("") != "" %} @@ -675,9 +710,19 @@ # ERROR: missing parameters {% endif %} {% elif acl_data.expression == 'src_http_req_cnt' %} -{% do acl_options.append('src_http_req_cnt ' ~ acl_data.src_http_req_cnt_comparison ~ ' ' ~ acl_data.src_http_req_cnt) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_http_req_cnt' ~ table_data ~ ' ' ~ acl_data.src_http_req_cnt_comparison ~ ' ' ~ acl_data.src_http_req_cnt) %} {% elif acl_data.expression == 'src_http_req_rate' %} -{% do acl_options.append('src_http_req_rate ' ~ acl_data.src_http_req_rate_comparison ~ ' ' ~ acl_data.src_http_req_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_http_req_rate' ~ table_data ~ ' ' ~ acl_data.src_http_req_rate_comparison ~ ' ' ~ acl_data.src_http_req_rate) %} {% elif acl_data.expression == 'src_inc_gpc' %} {% if acl_data.gpc_number|default("") != "" %} {% if acl_data.table_name|default("") != "" %} @@ -691,15 +736,35 @@ # ERROR: missing parameters {% endif %} {% elif acl_data.expression == 'src_kbytes_in' %} -{% do acl_options.append('src_kbytes_in ' ~ acl_data.src_kbytes_in_comparison ~ ' ' ~ acl_data.src_kbytes_in) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_kbytes_in' ~ table_data ~ ' ' ~ acl_data.src_kbytes_in_comparison ~ ' ' ~ acl_data.src_kbytes_in) %} {% elif acl_data.expression == 'src_kbytes_out' %} -{% do acl_options.append('src_kbytes_out ' ~ acl_data.src_kbytes_out_comparison ~ ' ' ~ acl_data.src_kbytes_out) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_kbytes_out' ~ table_data ~ ' ' ~ acl_data.src_kbytes_out_comparison ~ ' ' ~ acl_data.src_kbytes_out) %} {% elif acl_data.expression == 'src_port' %} {% do acl_options.append('src_port ' ~ acl_data.src_port_comparison ~ ' ' ~ acl_data.src_port) %} {% elif acl_data.expression == 'src_sess_cnt' %} -{% do acl_options.append('src_sess_cnt' ~ acl_data.src_sess_cnt_comparison ~ ' ' ~ acl_data.src_sess_cnt) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_sess_cnt' ~ table_data ~ ' ' ~ acl_data.src_sess_cnt_comparison ~ ' ' ~ acl_data.src_sess_cnt) %} {% elif acl_data.expression == 'src_sess_rate' %} -{% do acl_options.append('src_sess_rate ' ~ acl_data.src_sess_rate_comparison ~ ' ' ~ acl_data.src_sess_rate) %} +{% if acl_data.table_name|default("") != "" %} +{% set table_data = '(' ~ acl_data.table_name ~ ')' %} +{% else %} +{% set table_data = ' ' %} +{% endif %} +{% do acl_options.append('src_sess_rate' ~ table_data ~ ' ' ~ acl_data.src_sess_rate_comparison ~ ' ' ~ acl_data.src_sess_rate) %} {% elif acl_data.expression == 'ssl_c_verify_code' %} {% if acl_data.ssl_c_verify_code|default("") != "" %} {% do acl_options.append('ssl_c_verify ' ~ acl_data.ssl_c_verify_code) %}