How to Limit the Bandwidth Speed for a User After A Cap Has Been Reached
This is not used on the WUG, so do not worry about it!
Based on https://wiki.mikrotik.com/wiki/Limiting_a_user_to_a_given_amount_of_traffic_II
Modified the script for Cavelynx to help manage his internet users at a guest house. Fixed for latest ROS (6.41), added variables.
First create the simple queues you need (create script, run ONCE only):
:for e from=20 to=253 do={ /queue simple add name="user $e" target="192.168.1.$e" queue=default/default total-queue=default }
Then create a schedule to run this daily (23:59):
/que simple reset-counters
The script itself I’d recommend running every 5-20 minutes, depending on your RB’s CPU(s):
:local traf; :local throttledSpeed; :local unthrottledSpeed; :local cap; # cap in megaBYTEs :local theCap 200; # speed limit in megaBIT/s :local throttledSpeedLimit 5; :local unthrottledSpeedLimit 20; :local upThrottledSpeedLimit 5; :local upUnthrottledSpeedLimit 20; # the ip range to use :local cLevel 1; :local startRange 20; :local endRange 253; :local dTemp ($throttledSpeedLimit * 1000000); :local uTemp ($upThrottledSpeedLimit * 1000000); :local eTemp ($unthrottledSpeedLimit * 1000000); :local vTemp ($upUnthrottledSpeedLimit * 1000000); :set throttledSpeed "$dTemp/$uTemp"; :set unthrottledSpeed "$eTemp/$vTemp"; :set cap ($theCap * 1000000 * 8); /queue simple :for i from=$startRange to= $endRange do={ :if ([/queue simple find target=("192.168." . $cLevel . "." . $i . "/32")] != "") do={ :set traf [get [find target=("192.168." . $cLevel . "." . $i . "/32")] total-bytes] # limit people who have reached the "cap" :if ($traf > $cap) do={ :log warning "User $i has reached cap, throttling." set [find target=("192.168." . $cLevel . "." . $i . "/32")] max-limit=$throttledSpeed } # we still want to limit people who have not reached the "cap" :if ($traf < $cap) do={ set [find target=("192.168." . $cLevel . "." . $i . "/32")] max-limit=$unthrottledSpeed } } }