Basic DSCP to Priority Mapping

Now that my ISP has finally enabled IPv6, I’ve gone back and redone my mangles/queues so that IPv4 and IPv6 both work correctly with DSCP. Here is my config for that. The only things anyone should need to change is the WAN interface name and the WAN upload speed. For coax ISP’s, they normally give you a 10% burst bonus. So a 20M upload should burst to 22M. Spectrum in Southern California on the 400/20 tier, realistic speeds are 450/30. That said, I set my max-limit for the queue at 30M.

This code will add the queue tree, IPv4 Mangles and IPv6 mangles. The Mangles will match the DSCP value to the correct priority and mark the packet as such. TCP ACK’s do not normally have a DSCP, I like them prioritized on asymmetrical links, so I set their DSCP to 34. I’ve also included a sample for Blizzard’s Battle.Net games to set them to DSCP 30. (This keeps my daughter’s video uploads from killing me during a raid)

Oh yeah, I DO NOT recommend using this many mangles on a low end router. inspecting and marking every packet on a mmips box will eat more CPU than it’s worth and end up slowing your overall speed.

#### Please set the Upload Link "max-limit" to your Upload BURST speed. This is normally 10% higher than your upload speed.
#### Please set the Upload Link "parent" to your WAN interface name. (Mine is "external")
#### Use the "Battel.Net" mangle rule as an example for your own DSCP adjustments.

/queue tree
add comment="Upload Link" max-limit=30M name=DSCP->Priority parent=external priority=1 queue=pcq-upload-default
add comment="DSCP 00-07 (Priority 8 - Lowest)" name="8. Routine" packet-mark=priority_8 parent=DSCP->Priority queue=pcq-upload-default
add comment="DSCP 08-15 (Priority 7)" name="7. Priority" packet-mark=priority_7 parent=DSCP->Priority priority=7 queue=pcq-upload-default
add comment="DSCP 16-23 (Priority 6)" name="6. Immedate" packet-mark=priority_6 parent=DSCP->Priority priority=6 queue=pcq-upload-default
add comment="DSCP 24-31 (Priority 5)" name="5. Flash" packet-mark=priority_5 parent=DSCP->Priority priority=5 queue=pcq-upload-default
add comment="DSCP 32-39 (Priority 4)" name="4. Flash Override" packet-mark=priority_4 parent=DSCP->Priority priority=4 queue=pcq-upload-default
add comment="DSCP 40-47 (Priority 3)" name="3. Critical" packet-mark=priority_3 parent=DSCP->Priority priority=3 queue=pcq-upload-default
add comment="DSCP 48-55 (Priority 2)" name="2. Internetwork Control" packet-mark=priority_2 parent=DSCP->Priority priority=2 queue=pcq-upload-default
add comment="DSCP 56-63 (Priority 1 - Highest)" name="1. Network Control" packet-mark=priority_1 parent=DSCP->Priority priority=1 queue=pcq-upload-default

/ip firewall mangle
add action=change-dscp chain=postrouting comment="ACK -> DSCP 34" new-dscp=34 packet-size=0-123 passthrough=no protocol=tcp tcp-flags=ack
add action=change-dscp chain=postrouting comment="Battle.Net -> DSCP 30" dst-port=1119,3724,6724 new-dscp=30 passthrough=yes protocol=tcp
add action=mark-packet chain=postrouting comment="DSCP 63 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 62 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 61 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 60 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 59 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 58 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 57 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 56 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 55 -> PRI 2" dscp=55 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 54 -> PRI 2" dscp=54 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 53 -> PRI 2" dscp=53 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 52 -> PRI 2" dscp=52 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 51 -> PRI 2" dscp=51 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 50 -> PRI 2" dscp=50 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 49 -> PRI 2" dscp=49 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 48 -> PRI 2" dscp=48 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 47 -> PRI 3" dscp=47 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 46 -> PRI 3" dscp=46 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 45 -> PRI 3" dscp=45 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 44 -> PRI 3" dscp=44 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 43 -> PRI 3" dscp=43 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 42 -> PRI 3" dscp=42 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 41 -> PRI 3" dscp=41 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 40 -> PRI 3" dscp=40 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 39 -> PRI 4" dscp=39 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 38 -> PRI 4" dscp=38 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 37 -> PRI 4" dscp=37 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 36 -> PRI 4" dscp=36 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 35 -> PRI 4" dscp=35 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 34 -> PRI 4" dscp=34 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 33 -> PRI 4" dscp=33 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 32 -> PRI 4" dscp=32 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 31 -> PRI 5" dscp=31 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 30 -> PRI 5" dscp=30 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 29 -> PRI 5" dscp=29 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 28 -> PRI 5" dscp=28 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 27 -> PRI 5" dscp=27 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 26 -> PRI 5" dscp=26 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 25 -> PRI 5" dscp=25 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 24 -> PRI 5" dscp=24 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 23 -> PRI 6" dscp=23 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 22 -> PRI 6" dscp=22 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 21 -> PRI 6" dscp=21 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 20 -> PRI 6" dscp=20 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 19 -> PRI 6" dscp=19 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 18 -> PRI 6" dscp=18 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 17 -> PRI 6" dscp=17 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 16 -> PRI 6" dscp=16 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 15 -> PRI 7" dscp=15 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 14 -> PRI 7" dscp=14 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 13 -> PRI 7" dscp=13 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 12 -> PRI 7" dscp=12 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 11 -> PRI 7" dscp=11 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 10 -> PRI 7" dscp=10 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 09 -> PRI 7" dscp=9 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 08 -> PRI 7" dscp=8 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 07 -> PRI 8" dscp=7 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 06 -> PRI 8" dscp=6 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 05 -> PRI 8" dscp=5 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 04 -> PRI 8" dscp=4 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 03 -> PRI 8" dscp=3 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 02 -> PRI 8" dscp=2 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 01 -> PRI 8" dscp=1 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 00 -> PRI 8" dscp=0 new-packet-mark=priority_8 passthrough=no

/ipv6 firewall mangle
add action=change-dscp chain=postrouting comment="ACK -> DSCP 34" new-dscp=34 packet-size=0-123 passthrough=no protocol=tcp tcp-flags=ack
add action=change-dscp chain=postrouting comment="Battle.Net -> DSCP 30" dst-port=1119,3724,6724 new-dscp=30 passthrough=yes protocol=tcp
add action=mark-packet chain=postrouting comment="DSCP 63 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 62 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 61 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 60 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 59 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 58 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 57 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 56 -> PRI 1" dscp=56 new-packet-mark=priority_1 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 55 -> PRI 2" dscp=55 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 54 -> PRI 2" dscp=54 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 53 -> PRI 2" dscp=53 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 52 -> PRI 2" dscp=52 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 51 -> PRI 2" dscp=51 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 50 -> PRI 2" dscp=50 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 49 -> PRI 2" dscp=49 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 48 -> PRI 2" dscp=48 new-packet-mark=priority_2 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 47 -> PRI 3" dscp=47 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 46 -> PRI 3" dscp=46 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 45 -> PRI 3" dscp=45 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 44 -> PRI 3" dscp=44 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 43 -> PRI 3" dscp=43 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 42 -> PRI 3" dscp=42 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 41 -> PRI 3" dscp=41 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 40 -> PRI 3" dscp=40 new-packet-mark=priority_3 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 39 -> PRI 4" dscp=39 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 38 -> PRI 4" dscp=38 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 37 -> PRI 4" dscp=37 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 36 -> PRI 4" dscp=36 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 35 -> PRI 4" dscp=35 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 34 -> PRI 4" dscp=34 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 33 -> PRI 4" dscp=33 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 32 -> PRI 4" dscp=32 new-packet-mark=priority_4 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 31 -> PRI 5" dscp=31 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 30 -> PRI 5" dscp=30 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 29 -> PRI 5" dscp=29 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 28 -> PRI 5" dscp=28 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 27 -> PRI 5" dscp=27 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 26 -> PRI 5" dscp=26 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 25 -> PRI 5" dscp=25 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 24 -> PRI 5" dscp=24 new-packet-mark=priority_5 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 23 -> PRI 6" dscp=23 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 22 -> PRI 6" dscp=22 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 21 -> PRI 6" dscp=21 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 20 -> PRI 6" dscp=20 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 19 -> PRI 6" dscp=19 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 18 -> PRI 6" dscp=18 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 17 -> PRI 6" dscp=17 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 16 -> PRI 6" dscp=16 new-packet-mark=priority_6 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 15 -> PRI 7" dscp=15 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 14 -> PRI 7" dscp=14 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 13 -> PRI 7" dscp=13 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 12 -> PRI 7" dscp=12 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 11 -> PRI 7" dscp=11 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 10 -> PRI 7" dscp=10 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 09 -> PRI 7" dscp=9 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 08 -> PRI 7" dscp=8 new-packet-mark=priority_7 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 07 -> PRI 8" dscp=7 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 06 -> PRI 8" dscp=6 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 05 -> PRI 8" dscp=5 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 04 -> PRI 8" dscp=4 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 03 -> PRI 8" dscp=3 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 02 -> PRI 8" dscp=2 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 01 -> PRI 8" dscp=1 new-packet-mark=priority_8 passthrough=no
add action=mark-packet chain=postrouting comment="DSCP 00 -> PRI 8" dscp=0 new-packet-mark=priority_8 passthrough=no

Hi IntrusDave and thanks for the update of your script

just one question .. what about best effort or the “0” priority one of your previous script put priority 6 queue tree to “no-mark” packets
that everything else not marked in mangle should go to priority 6 is that right

if i add another queue with no-mark i see a traffic passing through it and i give it priority 6

so in your last update i added the no-mark queue tree so the mapping between mangle and queue tree will looks like

1 → 1
2 → 2
3 → 3
.
.
8 → 8
no-mark → 6 (again once i add this rule the traffic pass through it)

will i love to hear from you is it correct to add the no-mark to ensure every packets get in it’s way of doing QoS here ?

my unmarked traffic defaults to priority 8 (DSCP 0), which is the lowest. Every packet is marked with a DSCP 0 if it is not explicitly marked already. I don’t think you want to mark as priority 6, as that is DSCP 16-23, which is fairly high for basic traffic.

Thank you for clarifying this..

So if i remove priority 8 packet marks 7-0 then set the (8. routine) queue tree with no-mark
because i added a rule at first that set all incoming traffic to dscp 0 .. that’s removing possible ISP’s marks,
and by doing this unless i mark some traffic explicitly with the proper dscp mark everything will go to queue tree with no-mark and priority 8 .. i’m i doing it right ?

It is not common to treat DSCP 0 as lowest priority. It was defined that way, but as usually “default” traffic is marked with DSCP 0 this makes it impossible to have below-normal traffic.
(e.g. to run a backup over a line that you also use for regular browsing)

Therefore the priority of the highest 3 bits of DSCP is usually set like this:

DSCP QUEUE-prio
  7      1
  6      2
  5      3
  4      4
  3      5
  0      6
  2      7
  1      8

So the default DSCP 00 will map to priority 6, and the DSCP with top 3 bits of 2 (16-23) will be prio below that, with top 3 bits of 1 (8-15) will be lowest.

so i should stick on the way of dealing with dscp 0 with this rule
/ip firewall mangle add action=accept chain=postrouting priority=0 dscp=0
then add a queue tree with no-mark that will put the traffic with 0 dscp in priority 6

and adding priorities 1-7 in both mangle and queue tree with focusing on the orders priorities take in both as you mentioned in your comment .. right ?

In my routers I mark all packets with a mark corresponding to the top 3 bits of DSCP, with the number 0-7 in the names of the marks.
The queue definitions used on the output interfaces take these marks in the prio order that I have shown above.
So indeed DSCP 00 ends up in queue prio 6.