diff --git a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml
index 53894f519..b2d864d6c 100644
--- a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml
+++ b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml
@@ -68,6 +68,13 @@
text
Destination port number or well known name (imap, imaps, http, https, ...), for ranges use a dash
+
+ rule.dscp
+
+ select_multiple
+ true
+ Match against one or multiple DSCP values.
+
rule.direction
diff --git a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
index a0fdc6b5a..d48c37248 100644
--- a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml
@@ -1,6 +1,6 @@
//OPNsense/TrafficShaper
- 1.0.2
+ 1.0.3
OPNsense traffic shaper
@@ -305,6 +305,33 @@
Y
any
+
+ N
+ Y
+
+ Best Effort
+ Expedited Forwarding
+ AF11
+ AF12
+ AF13
+ AF21
+ AF22
+ AF23
+ AF31
+ AF32
+ AF33
+ AF41
+ AF42
+ AF43
+ CS1
+ CS2
+ CS3
+ CS4
+ CS5
+ CS6
+ CS7
+
+
N
diff --git a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
index 844e02505..60f387072 100644
--- a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
+++ b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
@@ -182,8 +182,9 @@ add {{loop.index + 60000}} {{ helpers.getUUIDtag(rule.target) }} {{
if rule.destination_not|default('0') == '1' %}not {% endif %}{{rule.destination
}} src-port {{ rule.src_port }} dst-port {{ rule.dst_port }} recv {{
physical_interface(rule.interface) }} {%
- if rule.proto.split('_')[1]|default('') == 'ack' %} {{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif
- %} xmit {{physical_interface(rule.interface2)
+ if rule.proto.split('_')[1]|default('') == 'ack' %} {{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif %}{%
+ if rule.dscp|default('') != '' %} dscp {{ (rule.dscp.split(',')) }}{% endif %}
+ xmit {{physical_interface(rule.interface2)
}} // {{rule.interface}} -> {{rule.interface2}}: {{helpers.getUUID(rule.target).description}}
{% endif %}
{% if rule.direction == 'out' or not rule.direction %}
@@ -193,8 +194,9 @@ add {{loop.index + 60000}} {{ helpers.getUUIDtag(rule.target) }} {{
if rule.destination_not|default('0') == '1' %}not {% endif %}{{rule.destination
}} src-port {{ rule.src_port }} dst-port {{ rule.dst_port }} xmit {{
physical_interface(rule.interface) }} {%
- if rule.proto.split('_')[1]|default('') == 'ack' %} {{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif
- %} recv {{physical_interface(rule.interface2)
+ if rule.proto.split('_')[1]|default('') == 'ack' %} {{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif %}{%
+ if rule.dscp|default('') != '' %} dscp {{ (rule.dscp.split(',')) }}{% endif %}
+ recv {{physical_interface(rule.interface2)
}} // {{rule.interface2}} -> {{rule.interface}}: {{helpers.getUUID(rule.target).description}}
{% endif %}
{% else %}
@@ -204,7 +206,8 @@ add {{loop.index + 60000}} {{ helpers.getUUIDtag(rule.target) }} {{
if rule.source_not|default('0') == '1' %}not {% endif %}{{ rule.source }} to {%
if rule.destination_not|default('0') == '1' %}not {% endif %}{{rule.destination
}} src-port {{ rule.src_port }} dst-port {{ rule.dst_port }} {{rule.direction}} {%
- if rule.proto.split('_')[1]|default('') == 'ack' %}{{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif %} via {{
+ if rule.proto.split('_')[1]|default('') == 'ack' %}{{ rule.proto.split('_')[2]|default('') }} tcpflags ack {% endif %} {%
+ if rule.dscp|default('') != '' %} dscp {{ (rule.dscp.split(',')) }}{% endif %} via {{
physical_interface(rule.interface)
}} // {{rule.interface}}: {{helpers.getUUID(rule.target).description}}
{% endif %}