Per Connection Queue (PCQ) is a queuing discipline that can be used
to dynamically equalize or shape traffic for multiple users, using
little administration. It is possible to divide PCQ scenarios into three
major groups: equal bandwidth for a number of users, certain bandwidth
equal distribution between users, unknown bandwidth equal distribution
between users.
There are two ways how to make this: using mangle and queue trees, or, using simple queues.
1. Mark all packets with packet-marks upload/download: (lets constider that ether1-LAN is public interface to the Internet and ether2-LAN is local interface where clients are connected
3. Finally, two queue rules are required, one for download and one for upload:
Equal Bandwidth for a Number of Users
Use PCQ type queue when you need to equalize the bandwidth [and set max limit] for a number of users. We will set the 64kbps download and 32kbps upload limits.There are two ways how to make this: using mangle and queue trees, or, using simple queues.
1. Mark all packets with packet-marks upload/download: (lets constider that ether1-LAN is public interface to the Internet and ether2-LAN is local interface where clients are connected
/ip firewall mangle add chain=prerouting action=mark-packet \ in-interface=ether1-LAN new-packet-mark=client_upload /ip firewall mangle add chain=prerouting action=mark-packet \ in-interface=ether2-WAN new-packet-mark=client_download2. Setup two PCQ queue types - one for download and one for upload. dst-address is classifier for user's download traffic, src-address for upload traffic:
/queue type add name="PCQ_download" kind=pcq pcq-rate=64000 pcq-classifier=dst-address /queue type add name="PCQ_upload" kind=pcq pcq-rate=32000 pcq-classifier=src-address
3. Finally, two queue rules are required, one for download and one for upload:
/queue tree add parent=global-in queue=PCQ_download packet-mark=client_download /queue tree add parent=global-out queue=PCQ_upload packet-mark=client_uploadIf you don't like using mangle and queue trees, you can skip step 1, do step 2, and step 3 would be to create one simple queue as shown here:
/queue simple add target-addresses=192.168.0.0/24 queue=PCQ_upload/PCQ_download \ packet-marks=client_download,client_upload
sample to create client using script:
:for z from 5 to 254 do={/queue simple add name="Client-172.17.144.$z" \
target-addresses="172.17.144.$z" parent="LAN1" queue=PCQ_upload/PCQ_download \
packet-marks=client_download,client_upload}