Leave this value empty if you want to create a pipe with a fixed bandwith.
]]>
+
+ pipe.buckets
+
+ text
+ Specifies the size of the hash table used for storing the various dynamic pipes configured with the mask setting
+ true
+ pipe.scheduler
diff --git a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogQueue.xml b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogQueue.xml
index f130c5349..5d46e3a64 100644
--- a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogQueue.xml
+++ b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogQueue.xml
@@ -27,6 +27,13 @@
Leave this value empty if you want to specify multiple queues with different weights.
]]>
+
+ queue.buckets
+
+ text
+ Specifies the size of the hash table used for storing the various dynamic queues configured with the mask setting
+ true
+ queue.codel_enable
diff --git a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
index c00e56008..8090c44c7 100644
--- a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
@@ -48,6 +48,12 @@
destination
+
+ N
+ 1
+ 65535
+ bucket size should be between 1...65535
+ N
@@ -149,6 +155,12 @@
destination
+
+ N
+ 1
+ 65535
+ bucket size should be between 1...65535
+ 0Y
diff --git a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
index f86de6d69..eefce4d27 100644
--- a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
+++ b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
@@ -39,6 +39,7 @@ flush
pipe {{ pipe.number }} config bw {{ pipe.bandwidth }}{{ pipe.bandwidthMetric }}/s{%
if pipe.queue %} queue {{ pipe.queue }}{%
if pipe.queueMetric != 'slots' %}{{pipe.queueMetric}}{% endif %}{% endif
+ %}{% if pipe.buckets %} buckets {{ pipe.buckets }}{% endif
%}{% if pipe.mask != 'none' %} mask {{ pipe.mask }} 0xffffffff {% endif %} type {%
if pipe.scheduler|default('') != '' %} {{pipe.scheduler}} {% else %} wf2q+ {% endif %}{%
if pipe.delay|default('') != '' %} delay {{pipe.delay}} {% endif %}{%
@@ -63,7 +64,8 @@ pipe {{ pipe.number }} config bw {{ pipe.bandwidth }}{{ pipe.bandwidthMetric }}/
{% if helpers.exists('OPNsense.TrafficShaper.queues.queue') %}
{% for queue in helpers.toList('OPNsense.TrafficShaper.queues.queue') %}
{% if helpers.getUUIDtag(queue.pipe) in ['pipe'] %}
-queue {{ queue.number }} config pipe {{ helpers.getUUID(queue.pipe).number }} {% if queue.mask != 'none' %} mask {{ queue.mask }} 0xffffffff {% endif %} weight {{ queue.weight }}{%
+queue {{ queue.number }} config pipe {{ helpers.getUUID(queue.pipe).number
+}}{% if queue.buckets %} buckets {{ queue.buckets }}{% endif %}{% if queue.mask != 'none' %} mask {{ queue.mask }} 0xffffffff {% endif %} weight {{ queue.weight }}{%
if queue.codel_enable|default('0') == '1' %} codel {%
if queue.codel_target|default('') != ''%} target {{queue.codel_target}} {% endif %}{%
if queue.codel_interval|default('') != ''%} interval {{queue.codel_interval}} {% endif %}{%