Queue tree and simple queue flow?

I have a couple of questions regarding the correct place to apply queue trees that prioritize traffic that will not override simple queues that are performing bandwidth limiting/shaping for customers. First, I’ll state the facts of what I understand and have taken from the manual:

Virtual Interfaces:
There are 3 virtual interfaces in RouterOS, in addition to real interfaces:

global-in - represents all the input interfaces in general (INGRESS queue). Please note that queues attached to global-in apply to traffic that is received by the router, before the packet filtering. global-in queueing is executed just after mangle and dst-nat

global-out - represents all the output interfaces in general. Queues attached to it apply before the ones attached to a specific interface

global-total - represents a virtual interface through which all the data, going through the router, is passing. When attaching a qdisc to global-total, the limitation is done in both directions. For example, if we set a total-max-limit to 256000, we will get upload+download=256kbps (maximum)



HTB (Hierarchical Token Bucket) in RouterOS
There are 4 HTB trees maintained by RouterOS:

  • global-in
  • global-total
  • global-out
  • interface queue

Simple Queues and HTB:
When adding a simple queue, it creates 3 HTB classes (in global-in, global-total and global-out), but it does not add any classes in interface queue.

Queue Trees and HTB:
Queue trees are more flexible - you can add them to any of the four HTB’s.

Packet Traversal and HTB:

  • When packet travels through the router, it passesall 4 HTB trees - global-in, global-total, global-out and interface queue.
  • When a packet is destined for the router, it passes global-in and global-total HTB queues.
  • When a packet is sent from the router, it traverses global-total, global-out and interface queues.



    OK. I read all of this and understand it. Now, I am implementing the following configuration:

I am using Simple Queues to BW limit customers by IP. Each customer has a simple queue. By definition, three HTB classes are created in: global-in, global-total and global-out

Next, I am mangling and marking packets as they enter the router. For this example, I have a total throughput of 1Mb avaialable for customer use. I want to limit p2p traffic to 128kbps and other traffic to the remaining bandwidth. In order for traffic prioritization to work, it must be prioritized/limited before the simple queues limiting bandwidth for each customer:

|----------------------------1Mbps_total_limit------------------------------------|
|–p2p_traffic–|--------------------other_traffic------------------------------|
(up to 128Kbps) (up to 1Mbps)


I can create two queue trees:

  1. p2p with a max-limit of 128kbps
  2. other traffic with a max-limit of 1Mbps.

By definition, queues attached to global-in are applied after mangling. Therefore, if I apply both queue trees created above to global-in and global-out to limit overall upload/download, I have the following questions:

  1. By definition, queue trees take presedence over simple queue if applied at the same place. Since Simple queues are automatically applied to global-in, global-total and global-out, will the simple queues still BW limit each user?

  2. Is this the correct place to apply the queue trees?

You can do mangle + queue tree on forward for prioritizing the traffic, and using global in/out to manage the user.

Thanks for the reply. Is what I noted above the correct configuration?

? :slight_smile: