#======================================================================================
# define dummynet pipes
#======================================================================================
{% if helpers.exists('OPNsense.TrafficShaper.pipes.pipe') %}
{% for pipe in helpers.toList('OPNsense.TrafficShaper.pipes.pipe') %}
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 %}{%
 if pipe.delay|default('') != '' %} delay {{pipe.delay}} {% endif %} type {%
 if pipe.scheduler|default('') != '' %} {{pipe.scheduler}} {% else %} wf2q+ {% endif %}{%
 if pipe.codel_enable|default('0') == '1' and pipe.scheduler != 'fq_codel' %} codel {% endif %}{%
 if pipe.codel_enable|default('0') == '1' or pipe.scheduler == 'fq_codel' %}{%
     if pipe.codel_target|default('') != ''%} target {{pipe.codel_target}} {% endif %}{%
     if pipe.codel_interval|default('') != ''%} interval {{pipe.codel_interval}} {% endif %}{%
     if pipe.codel_ecn_enable|default('0') == '1'%} ecn {% else %} noecn {% endif %} {%
     if pipe.scheduler == 'fq_codel' %} {%
         if pipe.fqcodel_quantum|default('') != '' %} quantum {{pipe.fqcodel_quantum}} {% endif %} {%
         if pipe.fqcodel_limit|default('') != '' %} limit {{pipe.fqcodel_limit}} {% endif %} {%
         if pipe.fqcodel_flows|default('') != '' %} flows {{pipe.fqcodel_flows}} {% endif %}
{% endif %}{%
 elif pipe.pie_enable|default('0') == '1' and pipe.scheduler != 'fq_pie' %} pie {% endif %}

{% endfor %}
{% endif %}

#======================================================================================
# define dummynet queues
#======================================================================================
{% 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.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 %}{%
    if queue.codel_ecn_enable|default('0') == '1'%} ecn {% else %} noecn {% endif %}{%
elif queue.pie_enable|default('0') == '1' %} pie
{% endif %}

{%    endif %}
{% endfor %}
{% endif %}
